Name: series-workflow4mpvw Phase: Succeeded StartedAt: 2026-08-31 21:39:46 +0000 UTC FinishedAt: 2026-09-01 01:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[0] Phase: Succeeded StartedAt: 2026-08-31 21:39:46 +0000 UTC FinishedAt: 2026-08-31 21:43:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 21:39:46 +0000 UTC FinishedAt: 2026-08-31 21:43:14 +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": "da6c37ed8beb273e3308e42d4bca3ce11b4432fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "TRANSPARENT_HUGEPAGE" ], "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": "da6c37ed8beb273e3308e42d4bca3ce11b4432fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "TRANSPARENT_HUGEPAGE" ], "series_id": "207c8a69-36ac-4cc3-8268-3e6efd9314bc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_sysfs_set_quota_scores", "damon_sysfs_add_schemes", "damos_commit_quota_goals", "damos_new_quota_goal" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb3NfbmV3X3F1b3RhX2dvYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljIChEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsICYjMzk7aHVnZXBhZ2VfbWVtX2JwJiMzOTspIHRoYXQgY2FsY3VsYXRlcyB0aGUgcmF0aW8gb2YgaHVnZSBwYWdlcyB0byB1c2VkIG1lbW9yeSB1c2luZyBzdGFuZGFyZCBrZXJuZWwgY291bnRlcnMgKHRvdGFscmFtX3BhZ2VzLCBnbG9iYWxfem9uZV9wYWdlX3N0YXRlLCBhbmQgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBmdW5jdGlvbiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBwYWRkaW5nIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OyB0byBEQU1PTiBjb3JlIGFuZCBleHBvc2VzIGl0IHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIHNjaGVtZXMgaW50ZXJmYWNlLiBJdCBjb21wdXRlcyB0aGUgcmF0aW8gb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byB0b3RhbCB1c2VkIG1lbW9yeSB0byBkeW5hbWljYWxseSB0dW5lIERBTU9TIHF1b3Rhcy4gVGhpcyBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlYTI0N2ZiZjAwMzVhYjdmY2E1ZjE1ZDNjNTcwYTViMTJiNjkyOWQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjE6NDE6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCBhZWQ2Y2IxY2Y0ODMxLi5hOGMxNjM0NzVlZjJiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbkBAIC03MTMsNiAmIzQzOzcxMyw4IEBAIG1lY2hhbmlzbSB0cmllcyB0byBtYWtlIGBgY3VycmVudF92YWx1ZWBgIG9mIGBgdGFyZ2V0X21ldHJpY2BgIGJlIHNhbWUgdG9cbiAgIGJwICgxLzEwLDAwMCkuXG4gLSBgYG5vZGVfZWxpZ2libGVfbWVtX2JwYGA6IFNjaGVtZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4tZWxpZ2libGUgbWVtb3J5IHJhdGlvXG4gICBvZiBhIG5vZGUgaW4gYnAgKDEvMTAsMDAwKS5cbiYjNDM7LSBgYGh1Z2VwYWdlX21lbV9icGBgOiBUb3RhbCBodWdlIHBhZ2UgdG8gdG90YWwgdXNlZCBtZW1vcnkgcmF0aW8gaW4gYnBcbiYjNDM7ICAoMS8xMCwwMDApLlxuIFxuIGBgbmlkYGAgaXMgb3B0aW9uYWxseSByZXF1aXJlZCBmb3IgYGBub2RlX21lbV91c2VkX2JwYGAsIGBgbm9kZV9tZW1fZnJlZV9icGBgLFxuIGBgbm9kZV9tZW1jZ191c2VkX2JwYGAsIGBgbm9kZV9tZW1jZ19mcmVlX2JwYGAgYW5kIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYCB0b1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggMGM4YjdkZGVmOWFiYi4uYjUyNDA1OThlNmZmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMTUzLDYgJiM0MzsxNTMsNyBAQCBlbnVtIGRhbW9zX2FjdGlvbiB7XG4gICogQERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDpcdEluYWN0aXZlIHRvIHRvdGFsIExSVSBtZW1vcnkgcmF0aW8uXG4gICogQERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlx0U2NoZW1lLWVsaWdpYmxlIG1lbW9yeSByYXRpbyBvZiBhXG4gICpcdFx0XHRcdFx0bm9kZSBpbiBiYXNpcyBwb2ludHMgKDAtMTAwMDApLlxuJiM0MzsgKiBAREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQOlx0SHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvLlxuICAqIEBOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1M6XHROdW1iZXIgb2YgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWNzLlxuICAqXG4gICogTWV0cmljcyBlcXVhbCB0byBsYXJnZXIgdGhhbiBATlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTIGFyZSB1bnN1cHBvcnRlZC5cbkBAIC0xNjcsNiAmIzQzOzE2OCw3IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuIFx0REFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCxcbiBcdERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcbiBcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLFxuJiM0MztcdERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCxcbiBcdE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uOWMwZTQyYTFkMmNmYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzAwNyw2ICYjNDM7MzAwNywyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKVxuIFx0cmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRocCwgdG90YWxfcGFnZXMsIGZyZWVfcGFnZXM7XG4mIzQzO1xuJiM0MztcdHRvdGFsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMoKTtcbiYjNDM7XHRmcmVlX3BhZ2VzID0gZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRvdGFsX3BhZ2VzIFx1MDAzYz0gZnJlZV9wYWdlcylcbiYjNDM7XHRcdHJldHVybiAxMDAwMDtcbiYjNDM7XG4mIzQzO1x0dGhwID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpICYjNDM7XG4mIzQzO1x0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9TSE1FTV9USFBTKSAmIzQzO1xuJiM0MztcdFx0XHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfRklMRV9USFBTKTtcbiYjNDM7XHRyZXR1cm4gbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuIHtcbkBAIC0zMDM4LDYgJiM0MzszMDU0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoYywgcyxcbiBcdFx0XHRcdGdvYWwtXHUwMDNlbmlkKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XG4mIzQzO1x0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMmY0OTVhOTZiMTdhLi5kOWI4MWQ3YjU5MTBlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0xMjY5LDYgJiM0MzsxMjY5LDEwIEBAIHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHtcbiBcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLFxuIFx0XHQubmFtZSA9IFwmIzM0O25vZGVfZWxpZ2libGVfbWVtX2JwXCYjMzQ7LFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQubWV0cmljID0gREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtodWdlcGFnZV9tZW1fYnBcJiMzNDssXG4mIzQzO1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OyB0byBEQU1PTiBjb3JlIGFuZCBleHBvc2VzIGl0IHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIHNjaGVtZXMgaW50ZXJmYWNlLiBJdCBjb21wdXRlcyB0aGUgcmF0aW8gb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byB0b3RhbCB1c2VkIG1lbW9yeSB0byBkeW5hbWljYWxseSB0dW5lIERBTU9TIHF1b3Rhcy4gVGhpcyBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYTI0N2ZiZjAwMzVhYjdmY2E1ZjE1ZDNjNTcwYTViMTJiNjkyOWQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjE6NDE6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKaW5kZXggYWVkNmNiMWNmNDgzMS4uYThjMTYzNDc1ZWYyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdApAQCAtNzEzLDYgJiM0Mzs3MTMsOCBAQCBtZWNoYW5pc20gdHJpZXMgdG8gbWFrZSBgYGN1cnJlbnRfdmFsdWVgYCBvZiBgYHRhcmdldF9tZXRyaWNgYCBiZSBzYW1lIHRvCiAgIGJwICgxLzEwLDAwMCkuCiAtIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYDogU2NoZW1lIHRhcmdldCBhY2Nlc3MgcGF0dGVybi1lbGlnaWJsZSBtZW1vcnkgcmF0aW8KICAgb2YgYSBub2RlIGluIGJwICgxLzEwLDAwMCkuCiYjNDM7LSBgYGh1Z2VwYWdlX21lbV9icGBgOiBUb3RhbCBodWdlIHBhZ2UgdG8gdG90YWwgdXNlZCBtZW1vcnkgcmF0aW8gaW4gYnAKJiM0MzsgICgxLzEwLDAwMCkuCiAKIGBgbmlkYGAgaXMgb3B0aW9uYWxseSByZXF1aXJlZCBmb3IgYGBub2RlX21lbV91c2VkX2JwYGAsIGBgbm9kZV9tZW1fZnJlZV9icGBgLAogYGBub2RlX21lbWNnX3VzZWRfYnBgYCwgYGBub2RlX21lbWNnX2ZyZWVfYnBgYCBhbmQgYGBub2RlX2VsaWdpYmxlX21lbV9icGBgIHRvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKaW5kZXggMGM4YjdkZGVmOWFiYi4uYjUyNDA1OThlNmZmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtMTUzLDYgJiM0MzsxNTMsNyBAQCBlbnVtIGRhbW9zX2FjdGlvbiB7CiAgKiBAREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOglJbmFjdGl2ZSB0byB0b3RhbCBMUlUgbWVtb3J5IHJhdGlvLgogICogQERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOglTY2hlbWUtZWxpZ2libGUgbWVtb3J5IHJhdGlvIG9mIGEKICAqCQkJCQlub2RlIGluIGJhc2lzIHBvaW50cyAoMC0xMDAwMCkuCiYjNDM7ICogQERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDoJSHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvLgogICogQE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUzoJTnVtYmVyIG9mIERBTU9TIHF1b3RhIGdvYWwgbWV0cmljcy4KICAqCiAgKiBNZXRyaWNzIGVxdWFsIHRvIGxhcmdlciB0aGFuIEBOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1MgYXJlIHVuc3VwcG9ydGVkLgpAQCAtMTY3LDYgJiM0MzsxNjgsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHsKIAlEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLAogCURBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCwKIAlEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUCwKJiM0MzsJREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLAogCU5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUywKIH07CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi45YzBlNDJhMWQyY2ZjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMDA3LDYgJiM0MzszMDA3LDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pCiAJcmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTsKIH0KIAomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHRocCwgdG90YWxfcGFnZXMsIGZyZWVfcGFnZXM7CiYjNDM7CiYjNDM7CXRvdGFsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMoKTsKJiM0MzsJZnJlZV9wYWdlcyA9IGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUyk7CiYjNDM7CiYjNDM7CWlmICh0b3RhbF9wYWdlcyAmbHQ7PSBmcmVlX3BhZ2VzKQomIzQzOwkJcmV0dXJuIDEwMDAwOwomIzQzOwomIzQzOwl0aHAgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0FOT05fVEhQUykgJiM0MzsKJiM0MzsJCQkJZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9TSE1FTV9USFBTKSAmIzQzOwomIzQzOwkJCQlnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUyk7CiYjNDM7CXJldHVybiBtdWx0X2ZyYWModGhwLCAxMDAwMCwgdG90YWxfcGFnZXMgLSBmcmVlX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCXN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpCiB7CkBAIC0zMDM4LDYgJiM0MzszMDU0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLAogCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsCiAJCQkJZ29hbC0mZ3Q7bmlkKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQOgomIzQzOwkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCmluZGV4IDMyZjQ5NWE5NmIxN2EuLmQ5YjgxZDdiNTkxMGUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKQEAgLTEyNjksNiAmIzQzOzEyNjksMTAgQEAgc3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0gewogCQkubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlAsCiAJCS5uYW1lID0gJiMzNDtub2RlX2VsaWdpYmxlX21lbV9icCYjMzQ7LAogCX0sCiYjNDM7CXsKJiM0MzsJCS5tZXRyaWMgPSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsCiYjNDM7CQkubmFtZSA9ICYjMzQ7aHVnZXBhZ2VfbWVtX2JwJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY29yZSBjaGFuZ2U6IGl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHF1b3RhIGdvYWwgbWV0cmljIHdpdGhpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlBgLCBvciAmIzM0O2h1Z2VwYWdlX21lbV9icCYjMzQ7LiBUaGlzIGlzIGludGVyZXN0aW5nOyB3ZSYjMzk7cmUgbm93IHRyYWNraW5nIHF1b3RhIGdvYWxzIHJlbGF0ZWQgdG8gaHVnZXBhZ2VzIHdpdGhpbiB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciwgd2hpY2ggc3VnZ2VzdHMgYSBuZXcgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgb3IgYSBmb2N1cyBvbiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIGh1Z2UgcGFnZXMuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBzY29wZS4gVGhlIGNoYW5nZXMgdG91Y2g6CgoxLiAgKipEb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QqKjogV2UmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmF0aW9uYWxlIGZvciB0aGlzIG5ldyBtZXRyaWMuIFdoYXQmIzM5O3MgdGhlIGRlc2lnbiBjb25zaWRlcmF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zPwoyLiAgKippbmNsdWRlL2xpbnV4L2RhbW9uLmgqKjogVGhpcyBmaWxlIGxpa2VseSBkZWZpbmVzIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZW51bXMgcmVsYXRlZCB0byBEQU1PTiwgc28gd2Ugc2hvdWxkIGxvb2sgYXQgdGhlIGFkZGl0aW9uIG9mIGBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlBgIGFuZCBhbnkgYXNzb2NpYXRlZCBkZWZpbml0aW9ucy4KMy4gICoqbW0vZGFtb24vY29yZS5jKio6IEhlcmUmIzM5O3Mgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGxpdmVzLiBTcGVjaWZpY2FsbHksIGBkYW1vc19odWdlcGFnZV9tZW1fYnBgIGFuZCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgd2lsbCBiZSB0aGUgZm9jYWwgcG9pbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtZXRyaWMgaXMgY2FsY3VsYXRlZCwgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIERBTU9OJiMzOTtzIGNvcmUgbW9uaXRvcmluZyBhbmQgY29udHJvbCBsb29wLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBxdW90YSBtZWNoYW5pc21zLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJcyB0aGlzIGFkZGluZyBhbnkgbmV3IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGNvbmNlcm5zPwo0LiAgKiptbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMqKjogVGhlIGBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNgIG1vZGlmaWNhdGlvbiBpcyBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIHN5c2ZzIGludGVyZmFjZS4gSG93IGFyZSB1c2VycyBnb2luZyB0byBiZSBhYmxlIHRvIGFjY2VzcyBhbmQgY29uZmlndXJlIHRoaXMgbWV0cmljPyBXaGF0IGxldmVsIG9mIGluZm9ybWF0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHN5c2FkbWlucz8KCkJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGNvZGUgYW5kIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBEQU1PTiBhbmQgREFNT04gc3lzZnMgc2NoZW1lcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIG9uIGh1Z2VwYWdlIGNvbmZpZ3VyYXRpb25zIG9yIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBJdCBpcyBjcml0aWNhbCB0byBlbnN1cmUgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBjb21wYXRpYmxlIHdpdGggY3VycmVudCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIGFuZCBoYXZlIGFzIG11Y2ggYmFja3dhcmQgY29tcGF0YWJpbGl0eSBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZzo2Olx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNy1cdGhlbHBcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnOjE2Olx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gREFNT05cbm1tL2RhbW9uL0tjb25maWctMTgtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjE5Olx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG5tbS9kYW1vbi9LY29uZmlnOjIwOlx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2Vcbm1tL2RhbW9uL0tjb25maWctMjEtXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6Mjg6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTI5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctMzAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjMxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctMzItXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNDEtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NDI6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQzLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo0NDpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy00NS1cdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjQ5Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG5tbS9kYW1vbi9LY29uZmlnLTUwLVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG5tbS9kYW1vbi9LY29uZmlnOjUxOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01Mi1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NTM6XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbm1tL2RhbW9uL0tjb25maWctNTQtXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWc6NTc6XHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctNTktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy02MC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NjE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTYyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZzo2OTpcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbm1tL2RhbW9uL0tjb25maWc6NzE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTcyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo3MzpcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG5tbS9kYW1vbi9LY29uZmlnLTc0LVx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzo3ODpcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctNzktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy04MC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6ODE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctODItXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWc6ODk6XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjkwOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy05MS1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6OTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xubW0vZGFtb24vS2NvbmZpZzo5MzpcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxubW0vZGFtb24vS2NvbmZpZy05NC1cdCAgdGhvc2UuXG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZzoxMDE6XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTAyOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEwNDpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjEwOTpcdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTEyOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcbm1tL2RhbW9uL0tjb25maWctMTE0LVx0ICBtZXRyaWNzLlxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWc6MTE3Olx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExODpcdGRlcGVuZHMgb24gREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XHRkZWZhdWx0IERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTIwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMjE6XHQgIFdoZXRoZXIgdG8gZW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdC4gIFVzZXJzIGNhbiBkaXNhYmxlIGl0IGluXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cdCAgYm9vdCBvciBydW50aW1lIHVzaW5nIGl0cyAmIzM5O2VuYWJsZWQmIzM5OyBwYXJhbWV0ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg0MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipFeGFtaW5pbmcgQnVpbGQgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYGNvcmUuY2AgYW5kIGBzeXNmcy1zY2hlbWVzLmNgIGFyZSBiZWluZyBjb21waWxlZC4gR2l2ZW4gdGhlIHByb2plY3Qgc3RydWN0dXJlLCBJJiMzOTttIHByZXR0eSBzdXJlIHRoZSByZWxldmFudCBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGluIGBtbS9kYW1vbi9NYWtlZmlsZWAuIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IG1ha2VmaWxlIGFuZCBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgY29uZmlndXJpbmcgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBRdW90YSBHb2FsIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGZvciBxdW90YSBtYW5hZ2VtZW50IGJldHRlciwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgcXVvdGEgZ29hbCBhbmQgdGhlIGh1Z2VwYWdlIG1lbW9yeSBiaW5kaW5nIHBvaW50LiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIHRoYXQgdW5kZXJzdGFuZGluZyBpbnZvbHZlcyB0cmFjaW5nIGhvdyBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgaXMgY2FsbGVkIGFuZCBob3cgaXRzIGFjdGlvbnMgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gb2YgaHVnZSBwYWdlcyBpbnRlcnNlY3RzIHdpdGggdGhlIHNldHRpbmcgb3IgdXBkYXRpbmcgb2YgcXVvdGEgdGFyZ2V0cywgYW5kIHRoZXJlZm9yZSwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHdoZXJlIGBkYW1vc19odWdlcGFnZV9tZW1fYnBgIGlzIGJlaW5nIHVzZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgdmFsdWVzIGFyZSBoYW5kbGVkIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3Igb3RoZXIgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSB0d28gY29tcG9uZW50cyBpbmZsdWVuY2UgZWFjaCBvdGhlciBhbmQgYW55IGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBhcmlzZSB3aGVuIHRoZXkgaW50ZXJhY3QsIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvciB1bmRlciBsb2FkLiBUaGF0IGxldmVsIG9mIGRldGFpbCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIHRoZSBxdW90YSBnb2FsIHByb2Nlc3NpbmcgbG9naWMsIGVzcGVjaWFsbHkgd2hlbiBodWdlIHBhZ2VzIGFyZSBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMwMTA9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAyNS1cbm1tL2RhbW9uL2NvcmUuYzozMDI2OnN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0zMDI3LVx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDY2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA3Mi1cdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcbm1tL2RhbW9uL2NvcmUuYzozMDczOlx0XHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwNzQtXHRcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBFeGVjdXRpb24gb2YgYGRhbW9zX3F1b3RhX3Njb3JlYCBpbiBEQU1PTioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBvYmplY3RpdmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYGRhbW9zX3F1b3RhX3Njb3JlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBhbmQgd2l0aGluIHdoaWNoIHBhcnQgb2YgdGhlIERBTU9OIGluZnJhc3RydWN0dXJlIGl0IG9wZXJhdGVzLiBGaXJzdCwgSeKAmWxsIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCB0ZXh0dWFsIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgd2l0aGluIHRoZSBEQU1PTiBzb3VyY2UuIFRoYXQmIzM5O3MgbGlrZWx5IHRvIGltbWVkaWF0ZWx5IHJldmVhbCB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHByb2JhYmx5IGFsbCBjYWxsIHNpdGVzLiAKCk9uY2UgSSBoYXZlIHRoZSBjYWxsIHNpdGVzLCBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0cyBpbiB3aGljaCBgZGFtb3NfcXVvdGFfc2NvcmVgIGlzIHVzZWQuIFdoYXQgYXJlIHRoZSBpbnB1dHMgdG8gdGhlIGZ1bmN0aW9uIGF0IGVhY2ggY2FsbD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBJcyBpdCBjYWxsZWQgZnJvbSBhIGhvdCBwYXRoLCBvciBzb21ldGhpbmcgbGVzcyBjcml0aWNhbD8gVGhpcyB3aWxsIGhlbHAgbWUgYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHkgdGhhdCByZWxpZXMgb24gdGhpcyBxdW90YSBzY29yZS4KCkkgd2lsbCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgREFNT04gZGF0YSBzdHJ1Y3R1cmVzIHRvIHNlZSBob3cgdGhlIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYW5kIGNvbnN1bWVkLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIHN0cnVjdHVyZSByZWxhdGVkIHRvIG1lbW9yeSBibG9ja3MsIHByb2Nlc3Nlcywgb3IgZmlsZSBzeXN0ZW1zIGlzIGluIHBsYXkuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSBkYXRhIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhcnQgb2YgdGhlIHN5c3RlbSYjMzk7cyBkZXNpZ24uIFRoaXMgd2lsbCBlbmFibGUgbWUgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgZGVidWdnaW5nLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbCBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19xdW90YV9zY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMDI2PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA2NS0vKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXG5tbS9kYW1vbi9jb3JlLmM6MzA2NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzA2Ny17XG4tLVxubW0vZGFtb24vY29yZS5jPTMwODI9c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA4NC1cdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jOjMwODU6XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzA4Ni1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzA5MT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwOTQtXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYzozMDk1Olx0dW5zaWduZWQgbG9uZyBzY29yZSA9IGRhbW9zX3F1b3RhX3Njb3JlKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTMwOTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT1MgUXVvdGEgR29hbCBKb3VybmV5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PUyBxdW90YSBidXNpbmVzcyBhbmQgZmlndXJlIG91dCB0aGUgbWVjaGFuaWNzIGJlaGluZCBpdC4gU3BlY2lmaWNhbGx5LCBob3cgdXNlciBzcGFjZSwgdGhyb3VnaCBzeXNmcywgcGxheXMgaXRzIHBhcnQgaW4gc2V0dGluZyBhbmQgbWFuYWdpbmcgdGhlc2UgcXVvdGFzLiBJIHNlZSB0aGF0IHVzZXJzIGFyZSBzZXR0aW5nIHVwIHRoZXNlIERBTU9TIHNjaGVtZXMgYW5kIHF1b3RhIGdvYWxzIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmAgcGF0aC4gVGhlIGtleSBzZWVtcyB0byBiZSB0aGUgYHRhcmdldF9tZXRyaWNgIHN5c2ZzIGF0dHJpYnV0ZTsgdGhleSYjMzk7cmUgd3JpdGluZyAmIzM0O2h1Z2VwYWdlX21lbV9icCYjMzQ7IHRvIHRoaXMuCgpTbywgd2hlbiBEQU1PTiBzcHJpbmdzIGludG8gYWN0aW9u4oCUZWl0aGVyIGR1cmluZyBpdHMgcmVndWxhciBzYW1wbGluZyBhbmQgYWdncmVnYXRpb24gY3ljbGVzIG9yIHdoZW4gYSB1c2VyIGNvbW1pdHMgYSBuZXcgc2NoZW1lIGFuZCBraWNrcyBvZmYgdGhlIG1vbml0b3LigJRpdCBhc3Nlc3NlcyB0aGUgcXVvdGEgc2NvcmUgYXQgZWFjaCBpbnRlcnZhbC4gSXQgYXBwZWFycyB0aGF0IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgY2FsY3VsYXRpbmcgdGhlIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgcmF0aW8gYW5kIHRoZW4gbWFraW5nIHRoZSBxdW90YSBhZGp1c3RtZW50cy4KCk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgdGFyZ2V0X21ldHJpY2AgaW50ZXJhY3Rpb24gcmVhbGx5IHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBgdGFyZ2V0X21ldHJpY19zaG93YCBhbmQgYHRhcmdldF9tZXRyaWNfc3RvcmVgIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gTXkgZm9jdXMgd2lsbCBiZSBvbiBob3cgYGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc2AgaXMgdXRpbGl6ZWQgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIG1hcHBpbmcgYmV0d2VlbiB1c2VyLXNwYWNlIGlucHV0IGFuZCB0aGUgYWN0dWFsIHF1b3RhIGdvYWwgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjM0PXN0YXRpY1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzU6c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXHR7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjg0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODU6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4Ni1cdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lICptZXRyaWNfbmFtZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjg3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODg6XHRcdG1ldHJpY19uYW1lID0gXHUwMDI2ZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW2ldO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODktXHRcdGlmIChtZXRyaWNfbmFtZS1cdTAwM2VtZXRyaWMgPT0gZ29hbC1cdTAwM2VtZXRyaWMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyOTU9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMwMS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzAyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXMpOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDMtXHRcdHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMwNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzA1Olx0XHRtZXRyaWNfbmFtZSA9IFx1MDAyNmRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tpXTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzA2LVx0XHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBtZXRyaWNfbmFtZS1cdTAwM2VuYW1lKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjM1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYGRhbW9zX2h1Z2VwYWdlX21lbV9icGAgaW4gREFNT04qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYCBmdW5jdGlvbiBpcyBhY3R1YWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBSaWdodCwgdGhlIGNvZGUgc2hvd3MgaXQgY2FuIGJlIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gIHRvIHNldCBgdGFyZ2V0X21ldHJpY2AgdG8gJiMzNDtodWdlcGFnZV9tZW1fYnAmIzM0Oy4gR29vZCwgc28gREFNT04mIzM5O3Mga3RocmVhZCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAsIHdoaWNoICp0aGVuKiBjYWxscyBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYC4gQ29uZmlybWVkLCBpdCYjMzk7cyByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYC4gKkhtbSosIGl0IHNlZW1zIHRvIGNhbGN1bGF0ZSBhIHJhdGlvIG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYXZhaWxhYmxlIG1lbW9yeSwgZXNzZW50aWFsbHkgYSBwZXJjZW50YWdlLiBJdCBsb29rcyBhdCBgdG90YWxyYW1fcGFnZXMoKWAsIGBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpYCwgYW5kIHRoZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgY291bnRzIHRocm91Z2ggYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKWAsIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX1NITUVNX1RIUFMpYCwgYW5kIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUylgLiBUaGUgcmVhbCBjYWxjdWxhdGlvbiBzZWVtcyB0byBiZSBgbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcylgLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHRocGAgdmFyaWFibGUsIG1lYW5pbmcgVEhQIHBhZ2UgY291bnQsIGlzIGluIHVuaXRzIG9mIGJhc2UgcGFnZXMgKG9yZGVyLTApIG9yIHRoZSB1bml0cyBvZiB0aGUgVEhQIGl0c2VsZi4gV2FpdCBhIG1pbnV0ZSEgVGhlIGNvdW50IG9mIGBOUl9BTk9OX1RIUFNgIGlzIGluIGBIUEFHRV9QTURfTlJgIHVuaXRzLCBidXQgdGhlIHRvdGFsIHBhZ2VzIGlzIGluIGBQQUdFX1NJWkVgIHVuaXRzLiBUaGlzIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGEgc2NhbGluZyBidWcuIFdoZXRoZXIgaXQmIzM5O3MgYSBidWcgb3Igbm90LCBpdCYjMzk7cyBhIGNoYW5nZSBhbmQsIGluIGFueSBjYXNlLCBpdCYjMzk7cyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkIHdpdGhpbiBtbS9kYW1vbi4KClNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBzZWU6IEl0IGludHJvZHVjZXMgYSBuZXcgbWV0cmljIChgaHVnZXBhZ2VfbWVtX2JwYCkgZm9yIERBTU9OIHF1b3RhIGdvYWxzLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSB0aGUgdXNlci1zcGFjZSBzeXNmcyBpbnRlcmZhY2UgKGBEQU1PTl9TWVNGU2ApLiBJdCYjMzk7cyBleGVjdXRlZCB3aXRoaW4ga2VybmVsIG1vbml0b3JpbmcgbG9vcHMgKGBkYW1vbl9rdGhyZWFkYCwgYGRhbW9zX3F1b3RhX3Njb3JlYCwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgKS4gSXQmIzM5O3MgdG90YWxseSByZWFjaGFibGUgaW4gUUVNVS9HQ0UsIHdoaWNoIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3RpbmcuIEFuZCBpbXBvcnRhbnRseSwgaXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYWVtb24gb3BlcmF0ZXMuIFllcCwgV29ydGhGdXp6aW5nID0gdHJ1ZS4KCk5vdyBJIHNob3VsZCBsb29rIGludG8gdGhlIG5vbi1ob3QtcGF0aCBmb2N1cyBzeW1ib2xzIGFuZCByZXF1aXJlZCBjb25maWdzOiBJIG5lZWQgdG8gZXhhbWluZSBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBhbmQgYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgYW5kIHdoYXQgZW50cnkgcG9pbnRzIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXJnZXRfbWV0cmljX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjk0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyOTU6c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjk2LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbW0vZGFtb25gIHN5c2ZzIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBub24tc3RhdGljIG9uZXMsIGFzIHRob3NlIGFyZSB0aGUgb25lcyBleHBvc2VkIGZvciBleHRlcm5hbCBjb250cm9sIG9yIGludGVyYWN0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyB0aGUgZW50cnkgcG9pbnRzLiBUaGV5JiMzOTtyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoYXQgb3JjaGVzdHJhdGUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbiBhbmQgdGhlIERBTU9OIGNvcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXNwZWN0cyBvZiB0aGUgREFNT04gc3Vic3lzdGVtcyBhcmUgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSB3aGVyZSBuZXcgbW9uaXRvcnMgYW5kIGFjdGlvbnMgYXJlIGV4cG9zZWQsIGFuZCBob3cgdG8gY2hhbmdlIGN1cnJlbnQgb25lcy4gVWx0aW1hdGVseSwgdW5kZXJzdGFuZGluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBpbGx1bWluYXRlIHRoZSBjb250cm9sIGZsb3cgYW5kIGV4dGVuc2liaWxpdHkgb2YgdGhlIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIG1ldHJpY19uYW1lLVx1MDAzZW5hbWUpO1xuMTI5MTpcdFx0fVxuMTI5MjpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjkzOlx0fVxuMTI5NDpcdFxuMTI5NTpcdHN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4xMjk2Olx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4xMjk3Olx0e1xuMTI5ODpcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcbjEyOTk6XHRcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG4xMzAwOlx0XHRpbnQgaTtcbjEzMDE6XHRcbjEzMDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbjEzMDM6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lICptZXRyaWNfbmFtZTtcbjEzMDQ6XHRcbjEzMDU6XHRcdFx0bWV0cmljX25hbWUgPSBcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XG4xMzA2Olx0XHRcdGlmIChzeXNmc19zdHJlcShidWYsIG1ldHJpY19uYW1lLVx1MDAzZW5hbWUpKSB7XG4xMzA3Olx0XHRcdFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWNfbmFtZS1cdTAwM2VtZXRyaWM7XG4xMzA4Olx0XHRcdFx0cmV0dXJuIGNvdW50O1xuMTMwOTpcdFx0XHR9XG4xMzEwOlx0XHR9XG4xMzExOlx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzMTI6XHR9XG4xMzEzOlx0XG4xMzE0Olx0c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4xMzE1Olx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuMTMxNjpcdHtcbjEzMTc6XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxuMTMxODpcdFx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xuMTMxOTpcdFxuMTMyMDpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbjEzMjE6XHR9XG4xMzIyOlx0XG4xMzIzOlx0c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuMTMyNDpcdFx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMTMyNTpcdHtcbjEzMjY6XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxuMTMyNzpcdFx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xuMTMyODpcdFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuMTMyOTpcdFxuMTMzMDpcdFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuMTMzMTpcdH1cbjEzMzI6XHRcbjEzMzM6XHRzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4xMzM0Olx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuMTMzNTpcdHtcbjEzMzY6XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxuMTMzNzpcdFx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xuMTMzODpcdFxuMTMzOTpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG4xMzQwOlx0fVxuMTM0MTpcdFxuMTM0MjpcdHN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4xMzQzOlx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4xMzQ0Olx0e1xuMTM0NTpcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG4xMzQ2Olx0XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG4xMzQ3Olx0XHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xuMTM0ODpcdFxuMTM0OTpcdFx0LyogZmVlZCBjYWxsYmFjayBzaG91bGQgY2hlY2sgZXhpc3RlbmNlIG9mIHRoaXMgZmlsZSBhbmQgcmVhZCB2YWx1ZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFF1b3RhIEdvYWwgQXBwbGljYXRpb24gaW4gREFNT04qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgcXVvdGEgZ29hbHMgYXJlIGFjdHVhbGx5ICphcHBsaWVkKiB3aXRoaW4gdGhlIHN5c2ZzIHRvIERBTU9OIHBpcGVsaW5lLiBJIHdhbnQgdG8gdHJhY2UgdGhhdCBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGUgdHJhbnNmb3JtYXRpb25zLCBhbmQgdGhlIHBvaW50cyBvZiBpbnRlcmFjdGlvbi4gV2hlcmUgZXhhY3RseSBkb2VzIHRoZSBpbmZvcm1hdGlvbiBvcmlnaW5hdGluZyBmcm9tIHRoZSBzeXNmcyBpbnRlcmZhY2UgZ2V0IGluY29ycG9yYXRlZCBpbnRvIHRoZSBEQU1PTiBjb250ZXh0PyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzPyBJIG5lZWQgdG8gbWFwIG91dCBob3cgdGhlIHF1b3RhIHRhcmdldHMgZGVmaW5lZCBpbiBzeXNmcyBldmVudHVhbGx5IGluZmx1ZW5jZSB0aGUgbW9uaXRvcmluZyBhbmQgYWN0aW9ucyB0YWtlbiBieSB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gYWZ0ZXIgdGhlIHByZWNpc2UgbWVjaGFuaXNtOyB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiBob3cgdGhlc2UgZ29hbHMgcHJvcGFnYXRlIGFuZCBhcmUgdWx0aW1hdGVseSB1c2VkIHRvIG9wdGltaXplIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1jb21tb24uaD01MT1pbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk4OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTktXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxNTE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjE2NC1cdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdO1xubW0vZGFtb24vc3lzZnMuYzoyMTY1Olx0cmV0dXJuIGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3lzZnNfY3R4LVx1MDAzZXNjaGVtZXMsIGN0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxNjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IERBTU9OIGhhbmRsZXMgcXVvdGEgZ29hbHMgYW5kIHNjaGVtZXMuIE15IGluaXRpYWwgcGxhbiBpcyB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHR3byBrZXkgZmlsZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06IGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGFuZCBgbW0vZGFtb24vY29yZS5jYC4gSSYjMzk7bSBob3BpbmcgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlc2UgZmlsZXMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIGRlZmluaW5nLCBtYW5hZ2luZywgb3IgaW50ZXJhY3Rpbmcgd2l0aCBxdW90YSBnb2FscyBhbmQgdGhlIHZhcmlvdXMgc2NoZW1lcyB1c2VkIHdpdGhpbiBEQU1PTi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc19zZXRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTE9aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIzMzY9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X2FjY2Vzc19wYXR0ZXJuKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzYwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzNjE6c3RhdGljIGludCBkYW1vc19zeXNmc19zZXRfZGVzdHMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzNjIte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNDE3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQzNi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDM3OnN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfc2V0X2ZpbHRlcl9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNDM4LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjUwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZV9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICpzY2hlbWUpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MDgtXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjUwOTpcdGVyciA9IGRhbW9zX3N5c2ZzX3NldF9kZXN0cyhzY2hlbWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTAtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTE3LVx0XHRnb3RvIHJtZGlyX3B1dF9xdW90YXNfYWNjZXNzX3BhdHRlcm5fb3V0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MTg6XHRlcnIgPSBkYW1vc19zeXNmc19zZXRfZmlsdGVyX2RpcnMoc2NoZW1lKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTE5LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk4OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTktXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxNTE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjE2NC1cdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdO1xubW0vZGFtb24vc3lzZnMuYzoyMTY1Olx0cmV0dXJuIGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3lzZnNfY3R4LVx1MDAzZXNjaGVtZXMsIGN0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxNjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBTeXNmcyBRdW90YSBDb252ZXJzaW9uIHRvIERBTU9OIFN0cnVjdHVyZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIHN5c2ZzIHF1b3RhIHJlcHJlc2VudGF0aW9ucyBhcmUgYmVpbmcgdHJhbnNsYXRlZCBpbnRvIHRoZSBEQU1PTiBzdHJ1Y3R1cmVzLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYnJpZGdlIHRoZSBnYXAuIEkga25vdyB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHRoZXJlLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgcXVlcnlpbmcgb3Igc2VhcmNoaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgZnVuY3Rpb25zIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhpcyBwdXJwb3NlLCBob3BpbmcgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHBhdGhzLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGZyb20gc3lzZnMgZGF0YSB0byBEQU1PTi1jb21wYXRpYmxlIGZvcm1hdCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdW5kZXJzdGFuZCB0aGUgZXhpc3RpbmcgbWVjaGFuaXNtIGZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc18uKnF1b3RhX2dvYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIwNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193YXRlcm1hcmtzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTU6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTYtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMjQ6c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNjpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNy19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjgwLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjgxOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjgyOlx0XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjgzLVx0aW50IGk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyOTU9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI5Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI5ODpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI5OTpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMwMC1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzE0PXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzE2LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzE3Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMxODpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzE5LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzIzPXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyNS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyNjpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMjc6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMzMz1zdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMzY6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Rcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM3Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzgtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNDI9c3RhdGljIHNzaXplX3QgY3VycmVudF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0NTpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNDY6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Ny1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNTM9c3RhdGljIHNzaXplX3QgbmlkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNTY6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Rcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzU3Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNTgtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNjM9c3RhdGljIHNzaXplX3QgbmlkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzY1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzY2Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM2NzpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzY4LVx0aW50IGVyciA9IGtzdHJ0b2ludChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlbmlkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM3ND1zdGF0aWMgc3NpemVfdCBwYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNzYte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNzc6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNzg6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNzktXHRpbnQgbGVuO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzg4PXN0YXRpYyBzc2l6ZV90IHBhdGhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzOTAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzOTE6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzOTI6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzOTMtXHRjaGFyICpwYXRoID0ga21hbGxvY19hcnJheShzaXplX2FkZChjb3VudCwgMSksIHNpemVvZigqcGF0aCksXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMDpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19xdW90YV9nb2FsX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxMS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMjpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMzpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxNC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxOC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDE5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfbWV0cmljX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXHRcdF9fQVRUUl9SV19NT0RFKHRhcmdldF9tZXRyaWMsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjMtXHRcdF9fQVRUUl9SV19NT0RFKHRhcmdldF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDI1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjYtXHRcdF9fQVRUUl9SV19NT0RFKGN1cnJlbnRfdmFsdWUsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfbmlkX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjktXHRcdF9fQVRUUl9SV19NT0RFKG5pZCwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDMxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9wYXRoX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzItXHRcdF9fQVRUUl9SV19NT0RFKHBhdGgsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzU6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF9tZXRyaWNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzY6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF92YWx1ZV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNzpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzODpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfbmlkX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM5Olx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9wYXRoX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQwLVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQxLX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0MjpBVFRSSUJVVEVfR1JPVVBTKGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDU6XHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ2LVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDc6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ4LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ1NDpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTUtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTY6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqKmdvYWxzX2FycjtcdC8qIGNvdW50ZWQgYnkgbnIgKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU3LVx0aW50IG5yO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NjA6c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDYxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDYyOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2My19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDY1OnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JtX2RpcnMoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2NjpcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2Fscylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDY3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDY4Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKipnb2Fsc19hcnIgPSBnb2Fscy1cdTAwM2Vnb2Fsc19hcnI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2OS1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDc5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODA6c3RhdGljIGludCBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hZGRfZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDgxOlx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzLCBpbnQgbnJfZ29hbHMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4MzpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICoqZ29hbHNfYXJyLCAqZ29hbDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg0LVx0aW50IGVyciwgaTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODY6XHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKGdvYWxzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg3LVx0aWYgKCFucl9nb2Fscylcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5Ni1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dvYWxzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0OTc6XHRcdGdvYWwgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2FsbG9jKCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5OC1cdFx0aWYgKCFnb2FsKSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ5OTpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKGdvYWxzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTAwLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTAzLVx0XHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZnb2FsLVx1MDAzZWtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUwNDpcdFx0XHRcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfa3R5cGUsIFx1MDAyNmdvYWxzLVx1MDAzZWtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwNS1cdFx0XHRcdFwmIzM0OyVkXCYjMzQ7LCBpKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwNy1cdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZnb2FsLVx1MDAzZWtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDg6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwOS1cdFx0XHRyZXR1cm4gZXJyO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTE4PXN0YXRpYyBzc2l6ZV90IG5yX2dvYWxzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MjAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MjE6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUyMjpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MjMtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE1Mjc9c3RhdGljIHNzaXplX3QgbnJfZ29hbHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1Mjkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MzA6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MzEtXHRpbnQgbnIsIGVyciA9IGtzdHJ0b2ludChidWYsIDAsIFx1MDAyNm5yKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUzNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTM4Olx0Z29hbHMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTM5LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQxLVx0XHRyZXR1cm4gLUVCVVNZO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NDI6XHRlcnIgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hZGRfZGlycyhnb2FscywgbnIpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NDMtXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU1MDpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTI6XHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzLCBrb2JqKSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1My19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTU1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfbnJfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1Ni1cdFx0X19BVFRSX1JXX01PREUobnJfZ29hbHMsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU1ODpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTU5Olx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfbnJfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjAtXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjEtfTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTYyOkFUVFJJQlVURV9HUk9VUFMoZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU2NDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTY1Olx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjYtXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU2NzpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY4LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2ODQ9c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODYtXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjg3Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2Fscztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg4LVx0dW5zaWduZWQgbG9uZyBtcztcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTcwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3F1b3Rhc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MDQtXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzA1Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2Fscztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzA2LVx0aW50IGVycjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcxOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzIwOlx0Z29hbHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hbGxvYygpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MjEtXHRpZiAoIWdvYWxzKSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MjUtXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZnb2Fscy1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3MjY6XHRcdFx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUsIFx1MDAyNnF1b3Rhcy1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MjctXHRcdFx0XCYjMzQ7Z29hbHNcJiMzNDspO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzM4PXN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3F1b3Rhc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3Rhcylcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0MC1cdGtvYmplY3RfcHV0KFx1MDAyNnF1b3Rhcy1cdTAwM2V3ZWlnaHRzLVx1MDAzZWtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDE6XHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKHF1b3Rhcy1cdTAwM2Vnb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0Mi1cdGtvYmplY3RfcHV0KFx1MDAyNnF1b3Rhcy1cdTAwM2Vnb2Fscy1cdTAwM2Vrb2JqKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODUyOlx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKnN5c2ZzX2dvYWxzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NTMtXHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NTgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc19nb2Fscy1cdTAwM2VucjsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODU5Olx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqc3lzZnNfZ29hbCA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2MC1cdFx0XHRzeXNmc19nb2Fscy1cdTAwM2Vnb2Fsc19hcnJbaV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDk0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBpbnRlcmFjdHMgd2l0aCBxdW90YXMsIHNjaGVtZXMsIGFuZCBzeXNmcywgYW5kIGhvdyB0aG9zZSBpbnRlcmFjdGlvbnMgYXJlIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgc3RhdGljIHN5bWJvbHMuIFRoZSBjb3JlIERBTU9OIHNvdXJjZSBjb2RlIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuCgoqKkRBTU9OJiMzOTtzIE5vbi1TdGF0aWMgU3ltYm9sIEV4cGxvcmF0aW9uKioKCkZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIGBtbS9kYW1vbi9zeXNmcy1jb21tb24uaGAgYW5kIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLiBUaGVzZSBhcmUgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludHMgdG8gaW52ZXN0aWdhdGUgaG93IHF1b3Rhcywgc2NoZW1lcywgYW5kIHN5c2ZzIGFyZSBpbnRlcndvdmVuIHdpdGggdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgaW5pdGlhbCBwcm9tcHQgbWVudGlvbnMgdGhvc2Ugc3BlY2lmaWMgYXJlYXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGNvbmZpZ3VyYXRpb25zIG9yIGNvbnRyb2xzIG1pZ2h0IGJlIGR5bmFtaWNhbGx5IGFkanVzdGVkIG9yIGV4cG9zZWQgdGhyb3VnaCBzeXNmcywgYW5kIGhvdyBzY2hlbWVzIGNvdWxkIGJlIHRpZWQgaW50byBlbmZvcmNpbmcgb3IgYWRqdXN0aW5nIHF1b3Rhcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvbW1vbiBDb2RlIGZvciBEQU1PTiBTeXNmcyBJbnRlcmZhY2VcbiAgIDQ6XHQgKi9cbiAgIDU6XHRcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kYW1vbi5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4gICA4Olx0XG4gICA5Olx0ZXh0ZXJuIHN0cnVjdCBtdXRleCBkYW1vbl9zeXNmc19sb2NrO1xuICAxMDpcdFxuICAxMTpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSB7XG4gIDEyOlx0XHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuICAxMzpcdFx0dW5zaWduZWQgbG9uZyBtaW47XG4gIDE0Olx0XHR1bnNpZ25lZCBsb25nIG1heDtcbiAgMTU6XHR9O1xuICAxNjpcdFxuICAxNzpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXG4gIDE4Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWluLFxuICAxOTpcdFx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG4gIDIwOlx0dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKTtcbiAgMjE6XHRcbiAgMjI6XHRleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcbiAgMjM6XHRcbiAgMjQ6XHQvKlxuICAyNTpcdCAqIHNjaGVtZXMgZGlyZWN0b3J5XG4gIDI2Olx0ICovXG4gIDI3Olx0XG4gIDI4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMge1xuICAyOTpcdFx0c3RydWN0IGtvYmplY3Qga29iajtcbiAgMzA6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKipzY2hlbWVzX2FycjtcbiAgMzE6XHRcdGludCBucjtcbiAgMzI6XHR9O1xuICAzMzpcdFxuICAzNDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpO1xuICAzNTpcdHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKTtcbiAgMzY6XHRcbiAgMzc6XHRleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xuICAzODpcdFxuICAzOTpcdGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gIDQwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbiAgNDE6XHRcbiAgNDI6XHR2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxuICA0MzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbiAgNDQ6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiAgNDU6XHRcbiAgNDY6XHR2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4gIDQ3Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiAgNDg6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxuICA0OTpcdFx0XHRib29sIHRvdGFsX2J5dGVzX29ubHksIHVuc2lnbmVkIGxvbmcgc3pfZmlsdGVyX3Bhc3NlZCk7XG4gIDUwOlx0XG4gIDUxOlx0aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbiAgNTI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xuICA1MzpcdFxuICA1NDpcdGludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuICA1NTpcdFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuICA1NjpcdFxuICA1NzpcdHZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXG4gIDU4Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuICA1OTpcdFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuICA2MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERBTU9OIFF1b3RhIE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBxdW90YSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhZGRpbmcgYW5kIHNldHRpbmcgcXVvdGFzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBhZGRzIG5ldyBxdW90YSBzY2hlbWVzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgYW5kIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYC4gVGhlc2Ugc291bmQgbGlrZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcXVvdGEgbWFuYWdlbWVudCB0aHJvdWdoIHN5c2ZzLCB3aGljaCBpcyB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcXVvdGFzIGFyZSAqZGVmaW5lZCogYW5kICppbml0aWFsaXplZCouICBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBmdW5jdGlvbiBvciBzb21ldGhpbmcgd2l0aCBhIHNpbWlsYXIgcm9sZSBpcyBhY3R1YWxseSAqZGVmaW5lZCouICBTaW5jZSB0aGlzIGlzIGNvcmUgcXVvdGEgbWFuYWdlbWVudCBjb2RlLCBpdCYjMzk7cyBtb3N0IGxpa2VseSB0byBiZSBsb2NhdGVkIHdpdGhpbiBlaXRoZXIgYGNvcmUuY2AgZmlsZSBvciB3aXRoaW4gdGhlIGBsaW51eC9kYW1vbi5oYCBoZWFkZXIgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTYyMT12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyNi1cbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTYyOC1cdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4tLVxubW0vZGFtb24vY29yZS5jPTExNjI9aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExNzYtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTE3NzpcdFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTc4LVx0XHRcdFx0c3JjX2dvYWwtXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9kYW1vbi9scnVfc29ydC5jOjIzODpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVx0LyogYWltIDAuMiAlIGdvYWwgY29uZmxpY3QsIHRvIGtlZXAgbGl0dGxlIHBpbmcgcG9uZyAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDQtXHRcdFx0MTAwMDAgLSBhY3RpdmVfbWVtX2JwICYjNDM7IDIpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXHRcdFx0XHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVx0XHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2NTpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXHUwMDNlbWV0cmljLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjYtXHRcdFx0XHRzeXNmc19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTItXHRcdCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg1MzpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU0LVx0XHRcdFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgUmV2aWV3IGZvciBEQU1PTioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIERBTU9OIGltcGxlbWVudGF0aW9uLiBGaXJzdCwgYSBxdWljayBzY2FuIG9mIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSB0ZWxscyBtZSB0aGUgY29yZSBgREFNT05gIG9wdGlvbiBpcywgb2YgY291cnNlLCBjcml0aWNhbC4gQW5kLCBwcmVkaWN0YWJseSwgYERBTU9OX1NZU0ZTYCBpcyBjb250aW5nZW50IG9uIGJvdGggYERBTU9OYCBhbmQgYFNZU0ZTYCBiZWluZyBlbmFibGVkLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgc3VwcG9ydGluZyBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQ6IEkmIzM5O2xsIHJldmlldyB0aGVzZTogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGFuZCBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIHRoZSBjb250cm9sIHBvaW50cy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBjdXJpb3VzIGlmIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBicm9hZGVyIHZpc2liaWxpdHkgb3IgcG90ZW50aWFsIGludGVyZmFjZSBwb2ludHMuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIHdhdGNoIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExMzk9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTExNTAtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTE1MTogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTExNTItICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTExNjEtICovXG5tbS9kYW1vbi9jb3JlLmM6MTE2MjppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMTYzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE4Nz1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExOTMtXHRkc3QtXHUwMDNlc3ogPSBzcmMtXHUwMDNlc3o7XG5tbS9kYW1vbi9jb3JlLmM6MTE5NDpcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTE5NS1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjItXHRcdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTIzOlx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZxdW90YSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyNC1cdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDktXHRcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUwOlx0XHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTEtXHRcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjItXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODYzOlx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTk0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlbGV2YW50IEtlcm5lbCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvbiB0ZXN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgYWxsIHBvdGVudGlhbCB2YXJpYWJsZXMuCgpJJiMzOTt2ZSBnb3QgYSBzaG9ydCBsaXN0IG9mIHBvdGVudGlhbGx5IGltcG9ydGFudCBjb25maWd1cmF0aW9ucyBoZXJlOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgU1lTRlNgLCBhbmQgYWxzbyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGUgcHJlc2VuY2Ugb2YgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgY29kZSBzZWVtcyB0byBjYWxjdWxhdGUgdGhlIFRIUCBtZW1vcnkgcmF0aW8gdXNpbmcgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKWAuIFRodXMsIGVuYWJsaW5nIFRIUCBpcyBoaWdobHkgc2lnbmlmaWNhbnQsIGV2ZW4gKnJlcXVpcmVkKiwgZm9yIHByb3BlciB0ZXN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIFRIUCBpcyBlbmFibGVkIGFuZCBpZiB0aGF0IGNoYW5nZXMgYmFzZWQgb24gYW55IG9mIHRoZSBvdGhlciBjb25maWdzLgoKU28sIG5leHQsIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgTlJfQU5PTl9USFBTYCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSWYgdGhlcmUmIzM5O3Mgbm8gZGVwZW5kZW5jeSwgdGhlbiBwZXJoYXBzIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgY2F1c2VzIFRIUHMgdG8gYmUgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUga2VybmVsLCBvciBhdCBsZWFzdCBiZSBjb25maWd1cmFibGUuIEkgbWF5IGJlIG1pc3NpbmcgYSBrZXkgZGVwZW5kZW5jeSBvciBlbmFibGluZyBjb25maWcuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2VzLCBhbmQgbWF5YmUgc29tZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMsIHRvIGNsYXJpZnkgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TlJfQU5PTl9USFBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTIzOT1lbnVtIG5vZGVfc3RhdF9pdGVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTI3MS1cdE5SX0ZJTEVfUE1ETUFQUEVELFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoyNzI6XHROUl9BTk9OX1RIUFMsXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTI3My1cdE5SX1ZNU0NBTl9XUklURSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTM0Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1zdGF0X2l0ZW1fcHJpbnRfaW5fdGhwKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTM1MS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MzUyOlx0cmV0dXJuIGl0ZW0gPT0gTlJfQU5PTl9USFBTIHx8XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTM1My1cdCAgICAgICBpdGVtID09IE5SX0ZJTEVfVEhQUyB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI0MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW16b25lLmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbWVtb3J5IHpvbmUgc3RydWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIFNwZWNpZmljYWxseSwgSSB0aGluayB0aGF0IHNlY3Rpb24gYXJvdW5kIGxpbmUgMjcwIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGRlZmluaXRpb24gSSYjMzk7bSBhZnRlciwgYXQgbGVhc3QgdG8gZ2V0IHJlLW9yaWVudGVkLiBJIHJlbWVtYmVyIGl0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBtZW1iZXJzIHJlbGF0ZWQgdG8gYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBhcmUgbGlrZWx5IGRlZmluZWQuIEkgd2FudCBhIHF1aWNrIHJldmlldyBvZiBob3cgdGhlIHpvbmVzIGFyZSBvcmdhbml6ZWQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2NTpcdFx0TlJfRklMRV9ESVJUWSxcbiAyNjY6XHRcdE5SX1dSSVRFQkFDSyxcbiAyNjc6XHRcdE5SX1NITUVNLFx0XHQvKiBzaG1lbSBwYWdlcyAoaW5jbHVkZWQgdG1wZnMvR0VNIHBhZ2VzKSAqL1xuIDI2ODpcdFx0TlJfU0hNRU1fVEhQUyxcbiAyNjk6XHRcdE5SX1NITUVNX1BNRE1BUFBFRCxcbiAyNzA6XHRcdE5SX0ZJTEVfVEhQUyxcbiAyNzE6XHRcdE5SX0ZJTEVfUE1ETUFQUEVELFxuIDI3MjpcdFx0TlJfQU5PTl9USFBTLFxuIDI3MzpcdFx0TlJfVk1TQ0FOX1dSSVRFLFxuIDI3NDpcdFx0TlJfVk1TQ0FOX0lNTUVESUFURSxcdC8qIFByaW9yaXRpc2UgZm9yIHJlY2xhaW0gd2hlbiB3cml0ZWJhY2sgZW5kcyAqL1xuIDI3NTpcdFx0TlJfRElSVElFRCxcdFx0LyogcGFnZSBkaXJ0eWluZ3Mgc2luY2UgYm9vdHVwICovXG4gMjc2Olx0XHROUl9XUklUVEVOLFx0XHQvKiBwYWdlIHdyaXRpbmdzIHNpbmNlIGJvb3R1cCAqL1xuIDI3NzpcdFx0TlJfVEhST1RUTEVEX1dSSVRURU4sXHQvKiBOUl9XUklUVEVOIHdoaWxlIHJlY2xhaW0gdGhyb3R0bGVkICovXG4gMjc4Olx0XHROUl9LRVJORUxfTUlTQ19SRUNMQUlNQUJMRSxcdC8qIHJlY2xhaW1hYmxlIG5vbi1zbGFiIGtlcm5lbCBwYWdlcyAqL1xuIDI3OTpcdFx0TlJfRk9MTF9QSU5fQUNRVUlSRUQsXHQvKiB2aWE6IHBpbl91c2VyX3BhZ2UoKSwgZ3VwIGZsYWc6IEZPTExfUElOICovXG4gMjgwOlx0XHROUl9GT0xMX1BJTl9SRUxFQVNFRCxcdC8qIHBhZ2VzIHJldHVybmVkIHZpYSB1bnBpbl91c2VyX3BhZ2UoKSAqL1xuIDI4MTpcdFx0TlJfVk1BTExPQyxcbiAyODI6XHRcdE5SX0tFUk5FTF9TVEFDS19LQixcdC8qIG1lYXN1cmVkIGluIEtpQiAqL1xuIDI4MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19TSEFET1dfQ0FMTF9TVEFDSylcbiAyODQ6XHRcdE5SX0tFUk5FTF9TQ1NfS0IsXHQvKiBtZWFzdXJlZCBpbiBLaUIgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NTgKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgTlJfQU5PTl9USFBTYCBpcyBhIGNvbnN0YW50IG1lbWJlciBvZiB0aGUgZW51bSwgdGhhdCYjMzk7cyBqdXN0IGEgZ2l2ZW4uIE5vdywgaXQmIzM5O3MgY2xlYXIgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBjb25maWcgdGhhdCYjMzk7cyBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBodWdlIHBhZ2VzLiBBbHJpZ2h0LCBsZXQmIzM5O3MgbWFwIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgZm9yIERBTU9OIGFuZCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSBhbGwgZW5hYmxlZCwgdGhhdCYjMzk7cyB0aGUgYmFzZSByZXF1aXJlbWVudC4KCk5vdywgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYXJlIGFsbCBwcmVzZW50LiBZdXAsIHRob3NlIGFyZSBhbGwgYXMgZXhwZWN0ZWQuCgpJJiMzOTtsbCBxdWlja2x5IGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrIGZvciBhbnkgb3RoZXIgc3ltYm9scyBpbiBgbW0vZGFtb25gLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gWWVwLCBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS4gVmVyaWZpZWQgYW5kIGNsZWFyLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OyB0byBEQU1PTiBjb3JlIGFuZCBleHBvc2VzIGl0IHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIHNjaGVtZXMgaW50ZXJmYWNlLiBJdCBjb21wdXRlcyB0aGUgcmF0aW8gb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byB0b3RhbCB1c2VkIG1lbW9yeSB0byBkeW5hbWljYWxseSB0dW5lIERBTU9TIHF1b3Rhcy4gVGhpcyBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb3NfbmV3X3F1b3RhX2dvYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBEQU1PUyBxdW90YSBnb2FsIG1ldHJpYyAmIzM5O2h1Z2VwYWdlX21lbV9icCYjMzk7IHRvIERBTU9OIGNvcmUgYW5kIGV4cG9zZXMgaXQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgc2NoZW1lcyBpbnRlcmZhY2UuIEl0IGNvbXB1dGVzIHRoZSByYXRpbyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHRvIGR5bmFtaWNhbGx5IHR1bmUgREFNT1MgcXVvdGFzLiBUaGlzIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgKERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OykgdGhhdCBjYWxjdWxhdGVzIHRoZSByYXRpbyBvZiBodWdlIHBhZ2VzIHRvIHVzZWQgbWVtb3J5IHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBjb3VudGVycyAodG90YWxyYW1fcGFnZXMsIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUsIGFuZCBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGZ1bmN0aW9uIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHBhZGRpbmcgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWEyNDdmYmYwMDM1YWI3ZmNhNWYxNWQzYzU3MGE1YjEyYjY5MjlkNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIxOjQxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CmluZGV4IGFlZDZjYjFjZjQ4MzEuLmE4YzE2MzQ3NWVmMmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKQEAgLTcxMyw2ICYjNDM7NzEzLDggQEAgbWVjaGFuaXNtIHRyaWVzIHRvIG1ha2UgYGBjdXJyZW50X3ZhbHVlYGAgb2YgYGB0YXJnZXRfbWV0cmljYGAgYmUgc2FtZSB0bwogICBicCAoMS8xMCwwMDApLgogLSBgYG5vZGVfZWxpZ2libGVfbWVtX2JwYGA6IFNjaGVtZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4tZWxpZ2libGUgbWVtb3J5IHJhdGlvCiAgIG9mIGEgbm9kZSBpbiBicCAoMS8xMCwwMDApLgomIzQzOy0gYGBodWdlcGFnZV9tZW1fYnBgYDogVG90YWwgaHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvIGluIGJwCiYjNDM7ICAoMS8xMCwwMDApLgogCiBgYG5pZGBgIGlzIG9wdGlvbmFsbHkgcmVxdWlyZWQgZm9yIGBgbm9kZV9tZW1fdXNlZF9icGBgLCBgYG5vZGVfbWVtX2ZyZWVfYnBgYCwKIGBgbm9kZV9tZW1jZ191c2VkX2JwYGAsIGBgbm9kZV9tZW1jZ19mcmVlX2JwYGAgYW5kIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYCB0bwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIuLmI1MjQwNTk4ZTZmZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTE1Myw2ICYjNDM7MTUzLDcgQEAgZW51bSBkYW1vc19hY3Rpb24gewogICogQERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDoJSW5hY3RpdmUgdG8gdG90YWwgTFJVIG1lbW9yeSByYXRpby4KICAqIEBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDoJU2NoZW1lLWVsaWdpYmxlIG1lbW9yeSByYXRpbyBvZiBhCiAgKgkJCQkJbm9kZSBpbiBiYXNpcyBwb2ludHMgKDAtMTAwMDApLgomIzQzOyAqIEBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6CUh1Z2UgcGFnZSB0byB0b3RhbCB1c2VkIG1lbW9yeSByYXRpby4KICAqIEBOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1M6CU51bWJlciBvZiBEQU1PUyBxdW90YSBnb2FsIG1ldHJpY3MuCiAgKgogICogTWV0cmljcyBlcXVhbCB0byBsYXJnZXIgdGhhbiBATlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTIGFyZSB1bnN1cHBvcnRlZC4KQEAgLTE2Nyw2ICYjNDM7MTY4LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7CiAJREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwKIAlEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsCiAJREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlAsCiYjNDM7CURBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwKIAlOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1MsCiB9OwogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uOWMwZTQyYTFkMmNmYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzAwNyw2ICYjNDM7MzAwNywyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKQogCXJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7CiB9CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB0aHAsIHRvdGFsX3BhZ2VzLCBmcmVlX3BhZ2VzOwomIzQzOwomIzQzOwl0b3RhbF9wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCk7CiYjNDM7CWZyZWVfcGFnZXMgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpOwomIzQzOwomIzQzOwlpZiAodG90YWxfcGFnZXMgJmx0Oz0gZnJlZV9wYWdlcykKJiM0MzsJCXJldHVybiAxMDAwMDsKJiM0MzsKJiM0MzsJdGhwID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpICYjNDM7CiYjNDM7CQkJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfU0hNRU1fVEhQUykgJiM0MzsKJiM0MzsJCQkJZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9GSUxFX1RIUFMpOwomIzQzOwlyZXR1cm4gbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLAogCQlzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKQogewpAQCAtMzAzOCw2ICYjNDM7MzA1NCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLAogCQkJCWdvYWwtJmd0O25pZCk7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDoKJiM0MzsJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwppbmRleCAzMmY0OTVhOTZiMTdhLi5kOWI4MWQ3YjU5MTBlIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCkBAIC0xMjY5LDYgJiM0MzsxMjY5LDEwIEBAIHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHsKIAkJLm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLAogCQkubmFtZSA9ICYjMzQ7bm9kZV9lbGlnaWJsZV9tZW1fYnAmIzM0OywKIAl9LAomIzQzOwl7CiYjNDM7CQkubWV0cmljID0gREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLAomIzQzOwkJLm5hbWUgPSAmIzM0O2h1Z2VwYWdlX21lbV9icCYjMzQ7LAomIzQzOwl9LAogfTsKIAogc3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9TIFF1b3RhIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBmdXp6aW5nIHNlc3Npb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljLCBzcGVjaWZpY2FsbHkgYERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUGAsIGVzc2VudGlhbGx5IHRyYWNraW5nIGh1Z2VwYWdlIG1lbW9yeSB1c2FnZSBhcyBhIHBlcmNlbnRhZ2Ugb2YgYXZhaWxhYmxlIG1lbW9yeS4KClRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0YCBmb3IgZG9jdW1lbnRhdGlvbiwgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgdG8gdXBkYXRlIHRoZSBgZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWNgIGVudW0sIGFuZCB0aGVuIHRoZSBjb3JlIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgIGlzIGltcGxlbWVudGVkLCBhbmQgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBuZXcgbWV0cmljLiAgRmluYWxseSwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgYWRkcyB0aGUgbWV0cmljJiMzOTtzIG5hbWUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZS4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGNvZGUgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgLiAgSXQgY2FsY3VsYXRlcyB0aGUgaHVnZXBhZ2UgbWVtb3J5IHBlcmNlbnRhZ2UsIHRha2luZyBpbnRvIGFjY291bnQgYHRvdGFsX3BhZ2VzYCwgYGZyZWVfcGFnZXNgLCBhbmQgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgY3VycmVudGx5IGluIHVzZSAoYE5SX0FOT05fVEhQU2AsIGBOUl9TSE1FTV9USFBTYCwgYE5SX0ZJTEVfVEhQU2ApLiBUaGUgbG9naWMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBjYWxjdWxhdGluZyBhIHBlcmNlbnRhZ2UuIFdlIGRvIHNlZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZSBgdG90YWxfcGFnZXNgIGlzIGxlc3MgdGhhbiBgZnJlZV9wYWdlc2AgdGhlIHJldHVybiBpcyAxMDAwMCwgaS5lLiwgMTAwJS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBxdW90YSBnb2FscyBhbmQgaG93IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBpcyBhY3R1YWxseSBjYWxsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBtb3JlIGNsb3NlbHkgYW5kIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gdHJhY2UgdGhlIGNhbGxzIGFuZCBkYXRhIGZsb3cgYXJvdW5kIHRoaXMuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgcG9pbnRzIG9mIGVudHJ5IGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBJcyB0aGVyZSBhIHVzZXItc3VwcGxpZWQgaW5wdXQgZ29pbmcgaW50byB0aGUgY2FsY3VsYXRpb25zPyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyB0aGF0IGFyZSBoYW5kbGVkPyBJIHdpbGwgZm9jdXMgb24gZmluZGluZyB0aGUgcGF0aCBiZXR3ZWVuIGFueSB1c2VyLXByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBpbnRlcm5hbCB1c2Ugb2YgdGhlIGNhbGN1bGF0aW9ucyBhbmQgYXNzb2NpYXRlZCBkYXRhLiBEZXBlbmRpbmcgb24gaG93IHRoaXMgZGF0YSBpcyBoYW5kbGVkLCBJIGNhbiBkZWNpZGUgaWYgaXQgbmVlZHMgaXRzIG93biBkZWRpY2F0ZWQgZnV6emluZyBzZXNzaW9uLCBvciBpZiB0aGUgZXhpc3RpbmcgREFNT1MgZnV6emluZyBpcyBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjM1OnN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjM2LVx0e1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc4PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjg1Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXMpOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODYtXHRcdHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjg4Olx0XHRtZXRyaWNfbmFtZSA9IFx1MDAyNmRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tpXTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjg5LVx0XHRpZiAobWV0cmljX25hbWUtXHUwMDNlbWV0cmljID09IGdvYWwtXHUwMDNlbWV0cmljKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjk1PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMwMjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAzLVx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgKm1ldHJpY19uYW1lO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMwNTpcdFx0bWV0cmljX25hbWUgPSBcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMwNi1cdFx0aWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgbWV0cmljX25hbWUtXHUwMDNlbmFtZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAqKgoKT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGlzIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBmdW5jdGlvbi4gIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCDigJMgdGhlIGNhbGwgc2l0ZXMg4oCTIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gKmRvKiBhbmQgd2h5IGl0JiMzOTtzIGV2ZW4gbmVlZGVkLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2hhdCogYW5kIHRoZSAqd2h5KiBhcmUgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFRoZW4sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljcy4gV2hhdCBhcmUgaXRzIGlucHV0cz8gV2hhdCYjMzk7cyB0aGUgbG9naWM/ICBXaGF0IHNpZGUgZWZmZWN0cyBkb2VzIGl0IGhhdmU/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgbW9kaWZ5PyBBbGwgdGhlIGRldGFpbHMgbWF0dGVyLCBiZWNhdXNlIHVsdGltYXRlbHksIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGl0cyBjb3JyZWN0bmVzcywgcGVyZm9ybWFuY2UsIGFuZCBtYXliZSBldmVuIGl0cyBtYWludGFpbmFiaWxpdHkuIEl04oCZcyB0aGUgb25seSB3YXkgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHBlcmZvcm1pbmcgYXMgaW50ZW5kZWQuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgdGhlbiBkZWNpZGUgaG93IGJlc3QgdG8gYXBwcm9hY2ggd2hhdGV2ZXIgdGFzayBoYXMgbGVhZCBtZSB0byB0aGlzIHBpZWNlIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzAxMD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDI1LVxubW0vZGFtb24vY29yZS5jOjMwMjY6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vY29yZS5jLTMwMjctXHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4tLVxubW0vZGFtb24vY29yZS5jPTMwNjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDcyLVx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xubW0vZGFtb24vY29yZS5jOjMwNzM6XHRcdGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoYywgcywgZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzA3NC1cdFx0aGlnaGVzdF9zY29yZSA9IG1heChoaWdoZXN0X3Njb3JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQwCgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDM5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gUmlza3MgaW4gdGhpcyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgaGF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbHVya2luZyBhYm91dCwgYXMgdGhhdCYjMzk7cyBhbHdheXMgYSBjb25jZXJuLiBGaXJzdCwgSSBmb2N1c2VkIG9uIHRoZSBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCB0aGUgbG9jYWwgdmFyaWFibGVzIGB0aHBgLCBgdG90YWxfcGFnZXNgLCBhbmQgYGZyZWVfcGFnZXNgIGFyZSBhbGwgZXhwbGljaXRseSBpbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5OiBgdG90YWxfcGFnZXNgIGdldHMgYHRvdGFscmFtX3BhZ2VzKClgLCBgZnJlZV9wYWdlc2AgZ2V0cyB0aGUgZnJlZSBwYWdlIGNvdW50IGZyb20gYGdsb2JhbF96b25lX3BhZ2Vfc3RhdGVgLCBhbmQgYHRocGAgYWNjdW11bGF0ZXMgdGhlIFRIUCBjb3VudHMgZnJvbSB0aGUgZ2xvYmFsIG5vZGUgcGFnZSBzdGF0ZXMuIFRoZSBjb3JlIGNhbGN1bGF0aW9uIHRoZW4gdXNlcyB0aGVzZSBpbml0aWFsaXplZCB2YWx1ZXMgaW4gYG11bHRfZnJhY2AuIFRoZSByZXN1bHQgaXMgYXNzaWduZWQgdG8gYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgLCBhbmQgdGhhdCYjMzk7cyB0aGUgZW5kIG9mIHRoZSBsaW5lLiBTbyBmYXIsIHNvIGdvb2Qg4oCTIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuCgpNb3Zpbmcgb24sIHRoZSBhZGRpdGlvbiBvZiB0aGUgYERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUGAgZW51bSB2YWx1ZSBiZWZvcmUgYE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDU2AgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IGluaXRpYWxpemF0aW9uIGlzc3VlcyBpbiBpdHNlbGYuIEl04oCZcyBzaW1wbHkgZXh0ZW5kaW5nIGFuIGVudW1lcmF0aW9uLiBTaW1pbGFybHksIHRoZSBhZGRpdGlvbiBvZiB0aGUgbmV3IHN0YXRpYyBlbnRyeSBpbiB0aGUgYGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc2AgYXJyYXkgaXMgYSBzdHJhaWdodGZvcndhcmQgaW5pdGlhbGl6YXRpb24gb2YgYSBuZXcgbWV0cmljIHdpdGggaXRzIG5hbWUuIE5vIHByb2JsZW1zIHRoZXJlLgoKTmV4dCwgSSBsb29rZWQgZm9yIGFueXRoaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIEZvcnR1bmF0ZWx5LCB0aGlzIHBhdGNoIGRvZXNu4oCZdCBzZWVtIHRvIGJlIHB1c2hpbmcgYW55IHN0cnVjdHMgb3V0LCBzbyB3ZSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgb3IgZ2FyYmFnZSBkYXRhIGxlYWthZ2UuIFN5c2ZzIHJlYWRzIGFuZCB3cml0ZXMgYXJlIGRvbmUgdXNpbmcgZm9ybWF0dGVkIHN0cmluZ3MsIHdoaWNoIGFsbGV2aWF0ZXMgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMgZW5kaW5nIHVwIGluIHRoZSBvdXRwdXQuIE1vcmVvdmVyLCB0aGVyZSYjMzk7cyBubyBtZW1vcnkgYWxsb2NhdGlvbiBvciBjaGFuZ2VzIHRvIHN0cnVjdHVyZSBsYXlvdXRzIHRoYXQgd291bGQgY2F1c2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIGJlIGV4cG9zZWQuIEFuZCwgSSBzZWUgbm8gYnJhbmNoaW5nIGxvZ2ljIHRoYXQmIzM5O3MgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGEgbmV3IG1ldHJpYyBjYWxjdWxhdGlvbiBiYXNlZCBvbiByZWFkaWx5IGF2YWlsYWJsZSBrZXJuZWwgcGFnZSBjb3VudGVycy4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCB0aGVyZSBpcyAqKm5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MqKiB0byB1c2VyIHNwYWNlIGluIHRoaXMgcGF0Y2guIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoZXJl4oCZcyBubyBuZWVkIGZvciBLTVNBTiB0byBiZSBpbnZva2VkIGZvciB0aGlzIHNwZWNpZmljIGNoYW5nZS4gSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgKERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OykgdGhhdCBjYWxjdWxhdGVzIHRoZSByYXRpbyBvZiBodWdlIHBhZ2VzIHRvIHVzZWQgbWVtb3J5IHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBjb3VudGVycyAodG90YWxyYW1fcGFnZXMsIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUsIGFuZCBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGZ1bmN0aW9uIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHBhZGRpbmcgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgKERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OykgdGhhdCBjYWxjdWxhdGVzIHRoZSByYXRpbyBvZiBodWdlIHBhZ2VzIHRvIHVzZWQgbWVtb3J5IHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBjb3VudGVycyAodG90YWxyYW1fcGFnZXMsIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUsIGFuZCBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGZ1bmN0aW9uIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHBhZGRpbmcgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6MjQuMjc5MDUyMDU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyOTQ4NDI2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX25ld19xdW90YV9nb2FsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljIChEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsICdodWdlcGFnZV9tZW1fYnAnKSB0aGF0IGNhbGN1bGF0ZXMgdGhlIHJhdGlvIG9mIGh1Z2UgcGFnZXMgdG8gdXNlZCBtZW1vcnkgdXNpbmcgc3RhbmRhcmQga2VybmVsIGNvdW50ZXJzICh0b3RhbHJhbV9wYWdlcywgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZSwgYW5kIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGluIHRoZSBuZXcgZnVuY3Rpb24gYGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgcGFkZGluZyBsZWFrcyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgJ2h1Z2VwYWdlX21lbV9icCcgdG8gREFNT04gY29yZSBhbmQgZXhwb3NlcyBpdCB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWVzIGludGVyZmFjZS4gSXQgY29tcHV0ZXMgdGhlIHJhdGlvIG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gdG90YWwgdXNlZCBtZW1vcnkgdG8gZHluYW1pY2FsbHkgdHVuZSBEQU1PUyBxdW90YXMuIFRoaXMgbW9kaWZpZXMgY29yZSBEQU1PTiBsb2dpYyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MToyNC4yNzkwNTc3MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Nzg5OTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVhMjQ3ZmJmMDAzNWFiN2ZjYTVmMTVkM2M1NzBhNWIxMmI2OTI5ZDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjE6NDE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuaW5kZXggYWVkNmNiMWNmNDgzMS4uYThjMTYzNDc1ZWYyYiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG5AQCAtNzEzLDYgKzcxMyw4IEBAIG1lY2hhbmlzbSB0cmllcyB0byBtYWtlIGBgY3VycmVudF92YWx1ZWBgIG9mIGBgdGFyZ2V0X21ldHJpY2BgIGJlIHNhbWUgdG9cXG4gICBicCAoMS8xMCwwMDApLlxcbiAtIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYDogU2NoZW1lIHRhcmdldCBhY2Nlc3MgcGF0dGVybi1lbGlnaWJsZSBtZW1vcnkgcmF0aW9cXG4gICBvZiBhIG5vZGUgaW4gYnAgKDEvMTAsMDAwKS5cXG4rLSBgYGh1Z2VwYWdlX21lbV9icGBgOiBUb3RhbCBodWdlIHBhZ2UgdG8gdG90YWwgdXNlZCBtZW1vcnkgcmF0aW8gaW4gYnBcXG4rICAoMS8xMCwwMDApLlxcbiBcXG4gYGBuaWRgYCBpcyBvcHRpb25hbGx5IHJlcXVpcmVkIGZvciBgYG5vZGVfbWVtX3VzZWRfYnBgYCwgYGBub2RlX21lbV9mcmVlX2JwYGAsXFxuIGBgbm9kZV9tZW1jZ191c2VkX2JwYGAsIGBgbm9kZV9tZW1jZ19mcmVlX2JwYGAgYW5kIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYCB0b1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5pbmRleCAwYzhiN2RkZWY5YWJiLi5iNTI0MDU5OGU2ZmY0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbkBAIC0xNTMsNiArMTUzLDcgQEAgZW51bSBkYW1vc19hY3Rpb24ge1xcbiAgKiBAREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxcdEluYWN0aXZlIHRvIHRvdGFsIExSVSBtZW1vcnkgcmF0aW8uXFxuICAqIEBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcXHRTY2hlbWUtZWxpZ2libGUgbWVtb3J5IHJhdGlvIG9mIGFcXG4gICpcXHRcXHRcXHRcXHRcXHRub2RlIGluIGJhc2lzIHBvaW50cyAoMC0xMDAwMCkuXFxuKyAqIEBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XFx0SHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvLlxcbiAgKiBATlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTOlxcdE51bWJlciBvZiBEQU1PUyBxdW90YSBnb2FsIG1ldHJpY3MuXFxuICAqXFxuICAqIE1ldHJpY3MgZXF1YWwgdG8gbGFyZ2VyIHRoYW4gQE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUyBhcmUgdW5zdXBwb3J0ZWQuXFxuQEAgLTE2Nyw2ICsxNjgsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcXG4gXFx0REFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCxcXG4gXFx0REFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxcbiBcXHREQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUCxcXG4rXFx0REFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLFxcbiBcXHROUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1MsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwLi45YzBlNDJhMWQyY2ZjIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0zMDA3LDYgKzMwMDcsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcXG4gXFx0cmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHRocCwgdG90YWxfcGFnZXMsIGZyZWVfcGFnZXM7XFxuK1xcbitcXHR0b3RhbF9wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCk7XFxuK1xcdGZyZWVfcGFnZXMgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpO1xcbitcXG4rXFx0aWYgKHRvdGFsX3BhZ2VzIFxcdTAwM2M9IGZyZWVfcGFnZXMpXFxuK1xcdFxcdHJldHVybiAxMDAwMDtcXG4rXFxuK1xcdHRocCA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKSArXFxuK1xcdFxcdFxcdFxcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfU0hNRU1fVEhQUykgK1xcbitcXHRcXHRcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUyk7XFxuK1xcdHJldHVybiBtdWx0X2ZyYWModGhwLCAxMDAwMCwgdG90YWxfcGFnZXMgLSBmcmVlX3BhZ2VzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbiB7XFxuQEAgLTMwMzgsNiArMzA1NCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4gXFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxcbiBcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XFxuK1xcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbmluZGV4IDMyZjQ5NWE5NmIxN2EuLmQ5YjgxZDdiNTkxMGUgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuQEAgLTEyNjksNiArMTI2OSwxMCBAQCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxuIFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUCxcXG4gXFx0XFx0Lm5hbWUgPSBcXFwibm9kZV9lbGlnaWJsZV9tZW1fYnBcXFwiLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsXFxuK1xcdFxcdC5uYW1lID0gXFxcImh1Z2VwYWdlX21lbV9icFxcXCIsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQxOjI0Ljc0NzU2NTI1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODQ2NzI1NzEwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX25ld19xdW90YV9nb2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBEQU1PUyBxdW90YSBnb2FsIG1ldHJpYyAnaHVnZXBhZ2VfbWVtX2JwJyB0byBEQU1PTiBjb3JlIGFuZCBleHBvc2VzIGl0IHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIHNjaGVtZXMgaW50ZXJmYWNlLiBJdCBjb21wdXRlcyB0aGUgcmF0aW8gb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byB0b3RhbCB1c2VkIG1lbW9yeSB0byBkeW5hbWljYWxseSB0dW5lIERBTU9TIHF1b3Rhcy4gVGhpcyBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhMjQ3ZmJmMDAzNWFiN2ZjYTVmMTVkM2M1NzBhNWIxMmI2OTI5ZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTo0MToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWVkNmNiMWNmNDgzMS4uYThjMTYzNDc1ZWYyYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtNzEzLDYgKzcxMyw4IEBAIG1lY2hhbmlzbSB0cmllcyB0byBtYWtlIGBgY3VycmVudF92YWx1ZWBgIG9mIGBgdGFyZ2V0X21ldHJpY2BgIGJlIHNhbWUgdG9cbiAgIGJwICgxLzEwLDAwMCkuXG4gLSBgYG5vZGVfZWxpZ2libGVfbWVtX2JwYGA6IFNjaGVtZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4tZWxpZ2libGUgbWVtb3J5IHJhdGlvXG4gICBvZiBhIG5vZGUgaW4gYnAgKDEvMTAsMDAwKS5cbistIGBgaHVnZXBhZ2VfbWVtX2JwYGA6IFRvdGFsIGh1Z2UgcGFnZSB0byB0b3RhbCB1c2VkIG1lbW9yeSByYXRpbyBpbiBicFxuKyAgKDEvMTAsMDAwKS5cbiBcbiBgYG5pZGBgIGlzIG9wdGlvbmFsbHkgcmVxdWlyZWQgZm9yIGBgbm9kZV9tZW1fdXNlZF9icGBgLCBgYG5vZGVfbWVtX2ZyZWVfYnBgYCxcbiBgYG5vZGVfbWVtY2dfdXNlZF9icGBgLCBgYG5vZGVfbWVtY2dfZnJlZV9icGBgIGFuZCBgYG5vZGVfZWxpZ2libGVfbWVtX2JwYGAgdG9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLmI1MjQwNTk4ZTZmZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTE1Myw2ICsxNTMsNyBAQCBlbnVtIGRhbW9zX2FjdGlvbiB7XG4gICogQERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDpcdEluYWN0aXZlIHRvIHRvdGFsIExSVSBtZW1vcnkgcmF0aW8uXG4gICogQERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlx0U2NoZW1lLWVsaWdpYmxlIG1lbW9yeSByYXRpbyBvZiBhXG4gICpcdFx0XHRcdFx0bm9kZSBpbiBiYXNpcyBwb2ludHMgKDAtMTAwMDApLlxuKyAqIEBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XHRIdWdlIHBhZ2UgdG8gdG90YWwgdXNlZCBtZW1vcnkgcmF0aW8uXG4gICogQE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUzpcdE51bWJlciBvZiBEQU1PUyBxdW90YSBnb2FsIG1ldHJpY3MuXG4gICpcbiAgKiBNZXRyaWNzIGVxdWFsIHRvIGxhcmdlciB0aGFuIEBOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1MgYXJlIHVuc3VwcG9ydGVkLlxuQEAgLTE2Nyw2ICsxNjgsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbiBcdERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsXG4gXHREQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsXG4gXHREQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUCxcbitcdERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCxcbiBcdE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uOWMwZTQyYTFkMmNmYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzAwNyw2ICszMDA3LDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXG4gXHRyZXR1cm4gbXVsdF9mcmFjKGluYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xuIH1cbiBcbitzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdGhwLCB0b3RhbF9wYWdlcywgZnJlZV9wYWdlcztcbitcbitcdHRvdGFsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMoKTtcbitcdGZyZWVfcGFnZXMgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpO1xuK1xuK1x0aWYgKHRvdGFsX3BhZ2VzIFx1MDAzYz0gZnJlZV9wYWdlcylcbitcdFx0cmV0dXJuIDEwMDAwO1xuK1xuK1x0dGhwID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpICtcbitcdFx0XHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfU0hNRU1fVEhQUykgK1xuK1x0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9GSUxFX1RIUFMpO1xuK1x0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4ge1xuQEAgLTMwMzgsNiArMzA1NCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXG4gXHRcdFx0XHRnb2FsLVx1MDAzZW5pZCk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XG4rXHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggMzJmNDk1YTk2YjE3YS4uZDliODFkN2I1OTEwZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5AQCAtMTI2OSw2ICsxMjY5LDEwIEBAIHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHtcbiBcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLFxuIFx0XHQubmFtZSA9IFwibm9kZV9lbGlnaWJsZV9tZW1fYnBcIixcbiBcdH0sXG4rXHR7XG4rXHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsXG4rXHRcdC5uYW1lID0gXCJodWdlcGFnZV9tZW1fYnBcIixcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MToyNC43NDc1NjY1OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njg0MDY1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZTogaXQncyBpbnRyb2R1Y2luZyBhIG5ldyBxdW90YSBnb2FsIG1ldHJpYyB3aXRoaW4gREFNT04sIHNwZWNpZmljYWxseSBgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQYCwgb3IgXCJodWdlcGFnZV9tZW1fYnBcIi4gVGhpcyBpcyBpbnRlcmVzdGluZzsgd2UncmUgbm93IHRyYWNraW5nIHF1b3RhIGdvYWxzIHJlbGF0ZWQgdG8gaHVnZXBhZ2VzIHdpdGhpbiB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciwgd2hpY2ggc3VnZ2VzdHMgYSBuZXcgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgb3IgYSBmb2N1cyBvbiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIGh1Z2UgcGFnZXMuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgc2NvcGUuIFRoZSBjaGFuZ2VzIHRvdWNoOlxuXG4xLiAgKipEb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QqKjogV2UnbGwgbmVlZCB0byByZXZpZXcgdGhlIGRvY3VtZW50YXRpb24gdXBkYXRlcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCByYXRpb25hbGUgZm9yIHRoaXMgbmV3IG1ldHJpYy4gV2hhdCdzIHRoZSBkZXNpZ24gY29uc2lkZXJhdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz9cbjIuICAqKmluY2x1ZGUvbGludXgvZGFtb24uaCoqOiBUaGlzIGZpbGUgbGlrZWx5IGRlZmluZXMgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBlbnVtcyByZWxhdGVkIHRvIERBTU9OLCBzbyB3ZSBzaG91bGQgbG9vayBhdCB0aGUgYWRkaXRpb24gb2YgYERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUGAgYW5kIGFueSBhc3NvY2lhdGVkIGRlZmluaXRpb25zLlxuMy4gICoqbW0vZGFtb24vY29yZS5jKio6IEhlcmUncyB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gbGl2ZXMuIFNwZWNpZmljYWxseSwgYGRhbW9zX2h1Z2VwYWdlX21lbV9icGAgYW5kIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCB3aWxsIGJlIHRoZSBmb2NhbCBwb2ludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1ldHJpYyBpcyBjYWxjdWxhdGVkLCBob3cgaXQncyB1c2VkIHdpdGhpbiBEQU1PTidzIGNvcmUgbW9uaXRvcmluZyBhbmQgY29udHJvbCBsb29wLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBxdW90YSBtZWNoYW5pc21zLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJcyB0aGlzIGFkZGluZyBhbnkgbmV3IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGNvbmNlcm5zP1xuNC4gICoqbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jKio6IFRoZSBgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzYCBtb2RpZmljYXRpb24gaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEhvdyBhcmUgdXNlcnMgZ29pbmcgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW5kIGNvbmZpZ3VyZSB0aGlzIG1ldHJpYz8gV2hhdCBsZXZlbCBvZiBpbmZvcm1hdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSB0byBzeXNhZG1pbnM/XG5cbkJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbid0IGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29kZSBhbmQgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIERBTU9OIGFuZCBEQU1PTiBzeXNmcyBzY2hlbWVzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGRlcGVuZGVuY2llcyBvbiBodWdlcGFnZSBjb25maWd1cmF0aW9ucyBvciBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gSXQgaXMgY3JpdGljYWwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGN1cnJlbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLCBhbmQgaGF2ZSBhcyBtdWNoIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgYXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MTozMS40MzE2MzQ5NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyOTM0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWc6NjpcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxubW0vZGFtb24vS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZzoxNjpcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTE4LVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjE5OlxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbm1tL2RhbW9uL0tjb25maWc6MjA6XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG5tbS9kYW1vbi9LY29uZmlnLTIxLVxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjI4OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctMjktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTMwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjMxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy0zMi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy00MS1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG5tbS9kYW1vbi9LY29uZmlnOjQyOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTQzLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjQ0OlxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDUtXFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQ5OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy01MC1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG5tbS9kYW1vbi9LY29uZmlnOjUxOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTUyLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjUzOlxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTQtXFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnOjU3OlxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjU4OlxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNTktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTYwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjYxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTYyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWc6Njk6XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NzA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbm1tL2RhbW9uL0tjb25maWc6NzE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNzItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NzM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG5tbS9kYW1vbi9LY29uZmlnLTc0LVxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNzktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTgwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjgxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctODItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnOjg5OlxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctOTEtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6OTI6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG5tbS9kYW1vbi9LY29uZmlnOjkzOlxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbm1tL2RhbW9uL0tjb25maWctOTQtXFx0ICB0aG9zZS5cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZzoxMDE6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTA0OlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXFxubW0vZGFtb24vS2NvbmZpZy0xMDUtXFx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnOjEwOTpcXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXFxubW0vZGFtb24vS2NvbmZpZzoxMTM6XFx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxcbm1tL2RhbW9uL0tjb25maWctMTE0LVxcdCAgbWV0cmljcy5cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnOjExNzpcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTE4OlxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTE5OlxcdGRlZmF1bHQgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTIwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcXHQgIFdoZXRoZXIgdG8gZW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdC4gIFVzZXJzIGNhbiBkaXNhYmxlIGl0IGluXFxubW0vZGFtb24vS2NvbmZpZy0xMjItXFx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICdlbmFibGVkJyBwYXJhbWV0ZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQxOjMxLjQ3NjkzMzY3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNDA2Mzk3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipFeGFtaW5pbmcgQnVpbGQgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBgY29yZS5jYCBhbmQgYHN5c2ZzLXNjaGVtZXMuY2AgYXJlIGJlaW5nIGNvbXBpbGVkLiBHaXZlbiB0aGUgcHJvamVjdCBzdHJ1Y3R1cmUsIEknbSBwcmV0dHkgc3VyZSB0aGUgcmVsZXZhbnQgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSBnb2luZyB0byBiZSBpbiBgbW0vZGFtb24vTWFrZWZpbGVgLiBJJ2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IG1ha2VmaWxlIGFuZCBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgY29uZmlndXJpbmcgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6MzQuODE3NTc1MDMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6MzQuODE3NjI2MjYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxMTYxMzA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFF1b3RhIEdvYWwgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBmb3IgcXVvdGEgbWFuYWdlbWVudCBiZXR0ZXIsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIHF1b3RhIGdvYWwgYW5kIHRoZSBodWdlcGFnZSBtZW1vcnkgYmluZGluZyBwb2ludC4gSXQgbG9va3MgbGlrZSB0aGUgbW9zdCBkaXJlY3QgcGF0aCB0byB0aGF0IHVuZGVyc3RhbmRpbmcgaW52b2x2ZXMgdHJhY2luZyBob3cgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIGNhbGxlZCBhbmQgaG93IGl0cyBhY3Rpb25zIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIG9mIGh1Z2UgcGFnZXMgaW50ZXJzZWN0cyB3aXRoIHRoZSBzZXR0aW5nIG9yIHVwZGF0aW5nIG9mIHF1b3RhIHRhcmdldHMsIGFuZCB0aGVyZWZvcmUsIEkgc2hvdWxkIGFsc28gbG9vayBhdCB3aGVyZSBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYCBpcyBiZWluZyB1c2VkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIHZhbHVlcyBhcmUgaGFuZGxlZCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIG90aGVyIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBnb2FsIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW5mbHVlbmNlIGVhY2ggb3RoZXIgYW5kIGFueSBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgYXJpc2Ugd2hlbiB0aGV5IGludGVyYWN0LCBjb25zaWRlcmluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IgdW5kZXIgbG9hZC4gVGhhdCBsZXZlbCBvZiBkZXRhaWwgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB0aGUgcXVvdGEgZ29hbCBwcm9jZXNzaW5nIGxvZ2ljLCBlc3BlY2lhbGx5IHdoZW4gaHVnZSBwYWdlcyBhcmUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQxOjM3LjEyOTI0MTg5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAxMzI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMDEwPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAyNS1cXG5tbS9kYW1vbi9jb3JlLmM6MzAyNjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTMwMjctXFx0XFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDY2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDcyLVxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzA3MzpcXHRcXHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMDc0LVxcdFxcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6MzcuMTczMjU5NDYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE1NjA5Mjc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBFeGVjdXRpb24gb2YgYGRhbW9zX3F1b3RhX3Njb3JlYCBpbiBEQU1PTioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGBkYW1vc19xdW90YV9zY29yZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYW5kIHdpdGhpbiB3aGljaCBwYXJ0IG9mIHRoZSBEQU1PTiBpbmZyYXN0cnVjdHVyZSBpdCBvcGVyYXRlcy4gRmlyc3QsIEnigJlsbCBuZWVkIHRvIGRvIGEgY29kZSBzZWFyY2guIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCB0ZXh0dWFsIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uJ3MgbmFtZSB3aXRoaW4gdGhlIERBTU9OIHNvdXJjZS4gVGhhdCdzIGxpa2VseSB0byBpbW1lZGlhdGVseSByZXZlYWwgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCBwcm9iYWJseSBhbGwgY2FsbCBzaXRlcy4gXG5cbk9uY2UgSSBoYXZlIHRoZSBjYWxsIHNpdGVzLCBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBkYW1vc19xdW90YV9zY29yZWAgaXMgdXNlZC4gV2hhdCBhcmUgdGhlIGlucHV0cyB0byB0aGUgZnVuY3Rpb24gYXQgZWFjaCBjYWxsPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IElzIGl0IGNhbGxlZCBmcm9tIGEgaG90IHBhdGgsIG9yIHNvbWV0aGluZyBsZXNzIGNyaXRpY2FsPyBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSB0aGF0IHJlbGllcyBvbiB0aGlzIHF1b3RhIHNjb3JlLlxuXG5JIHdpbGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIERBTU9OIGRhdGEgc3RydWN0dXJlcyB0byBzZWUgaG93IHRoZSBzY29yZSBpcyBjYWxjdWxhdGVkIGFuZCBjb25zdW1lZC4gSXQncyBsaWtlbHkgdGhhdCBhIHN0cnVjdHVyZSByZWxhdGVkIHRvIG1lbW9yeSBibG9ja3MsIHByb2Nlc3Nlcywgb3IgZmlsZSBzeXN0ZW1zIGlzIGluIHBsYXkuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0ncyBkZXNpZ24uIFRoaXMgd2lsbCBlbmFibGUgbWUgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgZGVidWdnaW5nLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbCBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6NDEuMzI5MzU0MjE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkxNzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9zY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzAyNj1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA2NS0vKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXFxubW0vZGFtb24vY29yZS5jOjMwNjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMDY3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDgyPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA4NC1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYzozMDg1OlxcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzA4Ni1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDkxPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDk0LVxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jOjMwOTU6XFx0dW5zaWduZWQgbG9uZyBzY29yZSA9IGRhbW9zX3F1b3RhX3Njb3JlKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMDk2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MTo0MS4zNzQyNzczMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAyNzk0Njg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PUyBRdW90YSBHb2FsIEpvdXJuZXkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBEQU1PUyBxdW90YSBidXNpbmVzcyBhbmQgZmlndXJlIG91dCB0aGUgbWVjaGFuaWNzIGJlaGluZCBpdC4gU3BlY2lmaWNhbGx5LCBob3cgdXNlciBzcGFjZSwgdGhyb3VnaCBzeXNmcywgcGxheXMgaXRzIHBhcnQgaW4gc2V0dGluZyBhbmQgbWFuYWdpbmcgdGhlc2UgcXVvdGFzLiBJIHNlZSB0aGF0IHVzZXJzIGFyZSBzZXR0aW5nIHVwIHRoZXNlIERBTU9TIHNjaGVtZXMgYW5kIHF1b3RhIGdvYWxzIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmAgcGF0aC4gVGhlIGtleSBzZWVtcyB0byBiZSB0aGUgYHRhcmdldF9tZXRyaWNgIHN5c2ZzIGF0dHJpYnV0ZTsgdGhleSdyZSB3cml0aW5nIFwiaHVnZXBhZ2VfbWVtX2JwXCIgdG8gdGhpcy5cblxuU28sIHdoZW4gREFNT04gc3ByaW5ncyBpbnRvIGFjdGlvbuKAlGVpdGhlciBkdXJpbmcgaXRzIHJlZ3VsYXIgc2FtcGxpbmcgYW5kIGFnZ3JlZ2F0aW9uIGN5Y2xlcyBvciB3aGVuIGEgdXNlciBjb21taXRzIGEgbmV3IHNjaGVtZSBhbmQga2lja3Mgb2ZmIHRoZSBtb25pdG9y4oCUaXQgYXNzZXNzZXMgdGhlIHF1b3RhIHNjb3JlIGF0IGVhY2ggaW50ZXJ2YWwuIEl0IGFwcGVhcnMgdGhhdCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIGNhbGN1bGF0aW5nIHRoZSBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgIHJhdGlvIGFuZCB0aGVuIG1ha2luZyB0aGUgcXVvdGEgYWRqdXN0bWVudHMuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgdGFyZ2V0X21ldHJpY2AgaW50ZXJhY3Rpb24gcmVhbGx5IHdvcmtzLiBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGB0YXJnZXRfbWV0cmljX3Nob3dgIGFuZCBgdGFyZ2V0X21ldHJpY19zdG9yZWAgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBNeSBmb2N1cyB3aWxsIGJlIG9uIGhvdyBgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzYCBpcyB1dGlsaXplZCB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgbWFwcGluZyBiZXR3ZWVuIHVzZXItc3BhY2UgaW5wdXQgYW5kIHRoZSBhY3R1YWwgcXVvdGEgZ29hbCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MTo0Ny40MDIyMjYzNzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODgwMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXFx0e1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODYtXFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lICptZXRyaWNfbmFtZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI4ODpcXHRcXHRtZXRyaWNfbmFtZSA9IFxcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODktXFx0XFx0aWYgKG1ldHJpY19uYW1lLVxcdTAwM2VtZXRyaWMgPT0gZ29hbC1cXHUwMDNlbWV0cmljKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyOTU9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzAyOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lcyk7IGkrKykge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAzLVxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMDU6XFx0XFx0bWV0cmljX25hbWUgPSBcXHUwMDI2ZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW2ldO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzA2LVxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIG1ldHJpY19uYW1lLVxcdTAwM2VuYW1lKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MTo0Ny40NDcxMTM0MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwOTMwNTAyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYCBpbiBEQU1PTioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgYGRhbW9zX2h1Z2VwYWdlX21lbV9icGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gUmlnaHQsIHRoZSBjb2RlIHNob3dzIGl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYCB0byBzZXQgYHRhcmdldF9tZXRyaWNgIHRvIFwiaHVnZXBhZ2VfbWVtX2JwXCIuIEdvb2QsIHNvIERBTU9OJ3Mga3RocmVhZCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAsIHdoaWNoICp0aGVuKiBjYWxscyBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYC4gQ29uZmlybWVkLCBpdCdzIHJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYC4gKkhtbSosIGl0IHNlZW1zIHRvIGNhbGN1bGF0ZSBhIHJhdGlvIG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYXZhaWxhYmxlIG1lbW9yeSwgZXNzZW50aWFsbHkgYSBwZXJjZW50YWdlLiBJdCBsb29rcyBhdCBgdG90YWxyYW1fcGFnZXMoKWAsIGBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpYCwgYW5kIHRoZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgY291bnRzIHRocm91Z2ggYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKWAsIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX1NITUVNX1RIUFMpYCwgYW5kIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUylgLiBUaGUgcmVhbCBjYWxjdWxhdGlvbiBzZWVtcyB0byBiZSBgbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcylgLlxuXG5Ib2xkIG9uLi4uIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIEkgbmVlZCB0byBrbm93IGlmIHRoZSBgdGhwYCB2YXJpYWJsZSwgbWVhbmluZyBUSFAgcGFnZSBjb3VudCwgaXMgaW4gdW5pdHMgb2YgYmFzZSBwYWdlcyAob3JkZXItMCkgb3IgdGhlIHVuaXRzIG9mIHRoZSBUSFAgaXRzZWxmLiBXYWl0IGEgbWludXRlISBUaGUgY291bnQgb2YgYE5SX0FOT05fVEhQU2AgaXMgaW4gYEhQQUdFX1BNRF9OUmAgdW5pdHMsIGJ1dCB0aGUgdG90YWwgcGFnZXMgaXMgaW4gYFBBR0VfU0laRWAgdW5pdHMuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2UgYSBzY2FsaW5nIGJ1Zy4gV2hldGhlciBpdCdzIGEgYnVnIG9yIG5vdCwgaXQncyBhIGNoYW5nZSBhbmQsIGluIGFueSBjYXNlLCBpdCdzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQgd2l0aGluIG1tL2RhbW9uLlxuXG5TbywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQncyBzZWU6IEl0IGludHJvZHVjZXMgYSBuZXcgbWV0cmljIChgaHVnZXBhZ2VfbWVtX2JwYCkgZm9yIERBTU9OIHF1b3RhIGdvYWxzLiBJdCdzIGFjY2Vzc2libGUgdmlhIHRoZSB1c2VyLXNwYWNlIHN5c2ZzIGludGVyZmFjZSAoYERBTU9OX1NZU0ZTYCkuIEl0J3MgZXhlY3V0ZWQgd2l0aGluIGtlcm5lbCBtb25pdG9yaW5nIGxvb3BzIChgZGFtb25fa3RocmVhZGAsIGBkYW1vc19xdW90YV9zY29yZWAsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCkuIEl0J3MgdG90YWxseSByZWFjaGFibGUgaW4gUUVNVS9HQ0UsIHdoaWNoIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3RpbmcuIEFuZCBpbXBvcnRhbnRseSwgaXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYWVtb24gb3BlcmF0ZXMuIFllcCwgV29ydGhGdXp6aW5nID0gdHJ1ZS5cblxuTm93IEkgc2hvdWxkIGxvb2sgaW50byB0aGUgbm9uLWhvdC1wYXRoIGZvY3VzIHN5bWJvbHMgYW5kIHJlcXVpcmVkIGNvbmZpZ3M6IEkgbmVlZCB0byBleGFtaW5lIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGFuZCBgbW0vZGFtb24vY29yZS5jYCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBhbmQgd2hhdCBlbnRyeSBwb2ludHMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6NTguNTQwMTY2NjcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQyNjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXJnZXRfbWV0cmljX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc4PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjk0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjk1OnN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTYtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6NTguNTgyNTk2OTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE3MDkxMzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgREFNT04ncyBTeXNmcyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBtbS9kYW1vbmAgc3lzZnMgaW50ZXJhY3Rpb25zLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUg4oCTIHNwZWNpZmljYWxseSwgdGhlIG5vbi1zdGF0aWMgb25lcywgYXMgdGhvc2UgYXJlIHRoZSBvbmVzIGV4cG9zZWQgZm9yIGV4dGVybmFsIGNvbnRyb2wgb3IgaW50ZXJhY3Rpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgdGhlIGVudHJ5IHBvaW50cy4gVGhleSdyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoYXQgb3JjaGVzdHJhdGUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbiBhbmQgdGhlIERBTU9OIGNvcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXNwZWN0cyBvZiB0aGUgREFNT04gc3Vic3lzdGVtcyBhcmUgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSB3aGVyZSBuZXcgbW9uaXRvcnMgYW5kIGFjdGlvbnMgYXJlIGV4cG9zZWQsIGFuZCBob3cgdG8gY2hhbmdlIGN1cnJlbnQgb25lcy4gVWx0aW1hdGVseSwgdW5kZXJzdGFuZGluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBpbGx1bWluYXRlIHRoZSBjb250cm9sIGZsb3cgYW5kIGV4dGVuc2liaWxpdHkgb2YgdGhlIHdob2xlIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjA0Ljc1MzUxMzE0MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFx0XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIG1ldHJpY19uYW1lLVxcdTAwM2VuYW1lKTtcXG4xMjkxOlxcdFxcdH1cXG4xMjkyOlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyOTM6XFx0fVxcbjEyOTQ6XFx0XFxuMTI5NTpcXHRzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbjEyOTY6XFx0XFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4xMjk3OlxcdHtcXG4xMjk4OlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxuMTI5OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxuMTMwMDpcXHRcXHRpbnQgaTtcXG4xMzAxOlxcdFxcbjEzMDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSsrKSB7XFxuMTMwMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgKm1ldHJpY19uYW1lO1xcbjEzMDQ6XFx0XFxuMTMwNTpcXHRcXHRcXHRtZXRyaWNfbmFtZSA9IFxcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XFxuMTMwNjpcXHRcXHRcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBtZXRyaWNfbmFtZS1cXHUwMDNlbmFtZSkpIHtcXG4xMzA3OlxcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZW1ldHJpYyA9IG1ldHJpY19uYW1lLVxcdTAwM2VtZXRyaWM7XFxuMTMwODpcXHRcXHRcXHRcXHRyZXR1cm4gY291bnQ7XFxuMTMwOTpcXHRcXHRcXHR9XFxuMTMxMDpcXHRcXHR9XFxuMTMxMTpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzEyOlxcdH1cXG4xMzEzOlxcdFxcbjEzMTQ6XFx0c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuMTMxNTpcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4xMzE2OlxcdHtcXG4xMzE3OlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbjEzMTg6XFx0XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxuMTMxOTpcXHRcXG4xMzIwOlxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4xMzIxOlxcdH1cXG4xMzIyOlxcdFxcbjEzMjM6XFx0c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbjEzMjQ6XFx0XFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4xMzI1OlxcdHtcXG4xMzI2OlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbjEzMjc6XFx0XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxuMTMyODpcXHRcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4xMzI5OlxcdFxcbjEzMzA6XFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xcbjEzMzE6XFx0fVxcbjEzMzI6XFx0XFxuMTMzMzpcXHRzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuMTMzNDpcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4xMzM1OlxcdHtcXG4xMzM2OlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbjEzMzc6XFx0XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxuMTMzODpcXHRcXG4xMzM5OlxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxuMTM0MDpcXHR9XFxuMTM0MTpcXHRcXG4xMzQyOlxcdHN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuMTM0MzpcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjEzNDQ6XFx0e1xcbjEzNDU6XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxuMTM0NjpcXHRcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG4xMzQ3OlxcdFxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlKTtcXG4xMzQ4OlxcdFxcbjEzNDk6XFx0XFx0LyogZmVlZCBjYWxsYmFjayBzaG91bGQgY2hlY2sgZXhpc3RlbmNlIG9mIHRoaXMgZmlsZSBhbmQgcmVhZCB2YWx1ZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MjowNC43NTM2NDUyNDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMzMzMTIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gUXVvdGEgR29hbCBBcHBsaWNhdGlvbiBpbiBEQU1PTioqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgcXVvdGEgZ29hbHMgYXJlIGFjdHVhbGx5ICphcHBsaWVkKiB3aXRoaW4gdGhlIHN5c2ZzIHRvIERBTU9OIHBpcGVsaW5lLiBJIHdhbnQgdG8gdHJhY2UgdGhhdCBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGUgdHJhbnNmb3JtYXRpb25zLCBhbmQgdGhlIHBvaW50cyBvZiBpbnRlcmFjdGlvbi4gV2hlcmUgZXhhY3RseSBkb2VzIHRoZSBpbmZvcm1hdGlvbiBvcmlnaW5hdGluZyBmcm9tIHRoZSBzeXNmcyBpbnRlcmZhY2UgZ2V0IGluY29ycG9yYXRlZCBpbnRvIHRoZSBEQU1PTiBjb250ZXh0PyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzPyBJIG5lZWQgdG8gbWFwIG91dCBob3cgdGhlIHF1b3RhIHRhcmdldHMgZGVmaW5lZCBpbiBzeXNmcyBldmVudHVhbGx5IGluZmx1ZW5jZSB0aGUgbW9uaXRvcmluZyBhbmQgYWN0aW9ucyB0YWtlbiBieSB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUuIEknbSBhZnRlciB0aGUgcHJlY2lzZSBtZWNoYW5pc207IHRoZSBncmFudWxhciBkZXRhaWxzIG9mIGhvdyB0aGVzZSBnb2FscyBwcm9wYWdhdGUgYW5kIGFyZSB1bHRpbWF0ZWx5IHVzZWQgdG8gb3B0aW1pemUgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjkwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MjowNy4wODY5Nzg1MzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjcxOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1jb21tb24uaD01MT1pbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTMtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTg6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTktXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTUxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE2NC1cXHRzeXNmc19jdHggPSBzeXNmc19rZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjE2NTpcXHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXFx1MDAzZXNjaGVtZXMsIGN0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTY2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MDcuMTMyMjU3MDUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTE5MTkxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBEQU1PTiBoYW5kbGVzIHF1b3RhIGdvYWxzIGFuZCBzY2hlbWVzLiBNeSBpbml0aWFsIHBsYW4gaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHR3byBrZXkgZmlsZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06IGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGFuZCBgbW0vZGFtb24vY29yZS5jYC4gSSdtIGhvcGluZyB0byBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGVzZSBmaWxlcyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgZGVmaW5pbmcsIG1hbmFnaW5nLCBvciBpbnRlcmFjdGluZyB3aXRoIHF1b3RhIGdvYWxzIGFuZCB0aGUgdmFyaW91cyBzY2hlbWVzIHVzZWQgd2l0aGluIERBTU9OLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MTEuOTg0MTc5MTc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU4OTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19zZXRfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTUxPWludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIzMzY9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X2FjY2Vzc19wYXR0ZXJuKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzNjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzNjE6c3RhdGljIGludCBkYW1vc19zeXNmc19zZXRfZGVzdHMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzYyLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNDE3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNDM2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDM3OnN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfc2V0X2ZpbHRlcl9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQzOC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjUwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZV9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICpzY2hlbWUpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwOC1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTA5OlxcdGVyciA9IGRhbW9zX3N5c2ZzX3NldF9kZXN0cyhzY2hlbWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTEwLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxNy1cXHRcXHRnb3RvIHJtZGlyX3B1dF9xdW90YXNfYWNjZXNzX3BhdHRlcm5fb3V0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTE4OlxcdGVyciA9IGRhbW9zX3N5c2ZzX3NldF9maWx0ZXJfZGlycyhzY2hlbWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTE5LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk4OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk5LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjE1MT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjQtXFx0c3lzZnNfY3R4ID0gc3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXTtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxNjU6XFx0cmV0dXJuIGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3lzZnNfY3R4LVxcdTAwM2VzY2hlbWVzLCBjdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjE2Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjEyLjAyNzc3NDMyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODk4NTM3OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgU3lzZnMgUXVvdGEgQ29udmVyc2lvbiB0byBEQU1PTiBTdHJ1Y3R1cmVzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBzeXNmcyBxdW90YSByZXByZXNlbnRhdGlvbnMgYXJlIGJlaW5nIHRyYW5zbGF0ZWQgaW50byB0aGUgREFNT04gc3RydWN0dXJlcy4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYnJpZGdlIHRoZSBnYXAuIEkga25vdyB0aGVyZSdzIHNvbWUgaW50ZXJhY3Rpb24gdGhlcmUsIGJ1dCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgcXVlcnlpbmcgb3Igc2VhcmNoaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgZnVuY3Rpb25zIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhpcyBwdXJwb3NlLCBob3BpbmcgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHBhdGhzLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGZyb20gc3lzZnMgZGF0YSB0byBEQU1PTi1jb21wYXRpYmxlIGZvcm1hdCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdW5kZXJzdGFuZCB0aGUgZXhpc3RpbmcgbWVjaGFuaXNtIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjE2LjkyNjMxNDU2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMDEyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3Nfc3lzZnNfLipxdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dhdGVybWFya3Nfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxNC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTYtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjI0OnN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI3LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc4PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjgwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI4MTpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjgyOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4My1cXHRpbnQgaTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjk1PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI5Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyOTg6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI5OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDAtXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxND1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzE2LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMxNzpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3RcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMxODpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMxOS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzIzPXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzI1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyNjpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3RcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyNzpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzMzPXN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNjpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3RcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNzpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzOC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzQyPXN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNDU6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNDY6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDctXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNTM9c3RhdGljIHNzaXplX3QgbmlkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM1NS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNTY6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNTc6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNTgtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM2Mz1zdGF0aWMgc3NpemVfdCBuaWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM2NS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNjY6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNjc6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNjgtXFx0aW50IGVyciA9IGtzdHJ0b2ludChidWYsIDAsIFxcdTAwMjZnb2FsLVxcdTAwM2VuaWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNzQ9c3RhdGljIHNzaXplX3QgcGF0aF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNzYte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzc3OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNzg6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzc5LVxcdGludCBsZW47XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM4OD1zdGF0aWMgc3NpemVfdCBwYXRoX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzOTAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzkxOlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzOTI6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzkzLVxcdGNoYXIgKnBhdGggPSBrbWFsbG9jX2FycmF5KHNpemVfYWRkKGNvdW50LCAxKSwgc2l6ZW9mKCpwYXRoKSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDA5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MTI6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MTQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxOTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X21ldHJpY19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMC1cXHRcXHRfX0FUVFJfUldfTU9ERSh0YXJnZXRfbWV0cmljLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDIzLVxcdFxcdF9fQVRUUl9SV19NT0RFKHRhcmdldF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjYtXFx0XFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mjg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyOS1cXHRcXHRfX0FUVFJfUldfTU9ERShuaWQsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDMxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9wYXRoX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMyLVxcdFxcdF9fQVRUUl9SV19NT0RFKHBhdGgsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM0OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzU6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X21ldHJpY19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzY6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNzpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzODpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM5OlxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3BhdGhfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQwLVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDEtfTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0MjpBVFRSSUJVVEVfR1JPVVBTKGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDU6XFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDYtXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NzpcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0OC19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTQ6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1NS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU2OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICoqZ29hbHNfYXJyO1xcdC8qIGNvdW50ZWQgYnkgbnIgKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1Ny1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDYxLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2My19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NjU6c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2NjpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDY3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2ODpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqKmdvYWxzX2FyciA9IGdvYWxzLVxcdTAwM2Vnb2Fsc19hcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjktXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ3OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4MDpzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FkZF9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDgxOlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHMsIGludCBucl9nb2FscylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4Mi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODM6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKipnb2Fsc19hcnIsICpnb2FsO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg0LVxcdGludCBlcnIsIGk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODY6XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODctXFx0aWYgKCFucl9nb2FscylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDk2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9nb2FsczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0OTc6XFx0XFx0Z29hbCA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5OC1cXHRcXHRpZiAoIWdvYWwpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ5OTpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKGdvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwMC1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTAzLVxcdFxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZnb2FsLVxcdTAwM2Vrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTA0OlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlLCBcXHUwMDI2Z29hbHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDUtXFx0XFx0XFx0XFx0XFxcIiVkXFxcIiwgaSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwNy1cXHRcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2Z29hbC1cXHUwMDNla29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDg6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDktXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTE4PXN0YXRpYyBzc2l6ZV90IG5yX2dvYWxzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MjE6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2FscyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTIyOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTUyNz1zdGF0aWMgc3NpemVfdCBucl9nb2Fsc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTI5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUzMDpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTMxLVxcdGludCBuciwgZXJyID0ga3N0cnRvaW50KGJ1ZiwgMCwgXFx1MDAyNm5yKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTM3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTM4OlxcdGdvYWxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MzktXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU0MS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTQyOlxcdGVyciA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FkZF9kaXJzKGdvYWxzLCBucik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NDMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUyOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1My19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ucl9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1Ni1cXHRcXHRfX0FUVFJfUldfTU9ERShucl9nb2FscywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTg6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTk6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX25yX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU2MC1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYxLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjI6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19xdW90YV9nb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjU6XFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY2LVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1Njc6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY4LX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY4ND1zdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg2LVxcdHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICp3ZWlnaHRzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjg3OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODgtXFx0dW5zaWduZWQgbG9uZyBtcztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzAyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcXVvdGFzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzA0LVxcdHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICp3ZWlnaHRzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzA1OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MDYtXFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzE5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzIwOlxcdGdvYWxzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcyMS1cXHRpZiAoIWdvYWxzKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcyNS1cXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2Z29hbHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3MjY6XFx0XFx0XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2Vrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzI3LVxcdFxcdFxcdFxcXCJnb2Fsc1xcXCIpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3Mzg9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcXVvdGFzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NDAtXFx0a29iamVjdF9wdXQoXFx1MDAyNnF1b3Rhcy1cXHUwMDNld2VpZ2h0cy1cXHUwMDNla29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDE6XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhxdW90YXMtXFx1MDAzZWdvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0Mi1cXHRrb2JqZWN0X3B1dChcXHUwMDI2cXVvdGFzLVxcdTAwM2Vnb2Fscy1cXHUwMDNla29iaik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg1MjpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKnN5c2ZzX2dvYWxzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODUzLVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg1OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3lzZnNfZ29hbHMtXFx1MDAzZW5yOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg1OTpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqc3lzZnNfZ29hbCA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXFx0XFx0XFx0c3lzZnNfZ29hbHMtXFx1MDAzZWdvYWxzX2FycltpXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MTYuOTcxNjI1ODc3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDUzMTAwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIHF1b3Rhcywgc2NoZW1lcywgYW5kIHN5c2ZzLCBhbmQgaG93IHRob3NlIGludGVyYWN0aW9ucyBhcmUgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSBzdGF0aWMgc3ltYm9scy4gVGhlIGNvcmUgREFNT04gc291cmNlIGNvZGUgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC5cblxuKipEQU1PTidzIE5vbi1TdGF0aWMgU3ltYm9sIEV4cGxvcmF0aW9uKipcblxuRmlyc3QsIEknbGwgZXhhbWluZSBgbW0vZGFtb24vc3lzZnMtY29tbW9uLmhgIGFuZCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gVGhlc2UgYXJlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzIHRvIGludmVzdGlnYXRlIGhvdyBxdW90YXMsIHNjaGVtZXMsIGFuZCBzeXNmcyBhcmUgaW50ZXJ3b3ZlbiB3aXRoIHRoZSBjb3JlIERBTU9OIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgc2luY2UgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zIHRob3NlIHNwZWNpZmljIGFyZWFzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGNvbmZpZ3VyYXRpb25zIG9yIGNvbnRyb2xzIG1pZ2h0IGJlIGR5bmFtaWNhbGx5IGFkanVzdGVkIG9yIGV4cG9zZWQgdGhyb3VnaCBzeXNmcywgYW5kIGhvdyBzY2hlbWVzIGNvdWxkIGJlIHRpZWQgaW50byBlbmZvcmNpbmcgb3IgYWRqdXN0aW5nIHF1b3Rhcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwOTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MjoyMC4xMTY5Mzg1MTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtY29tbW9uLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvbW1vbiBDb2RlIGZvciBEQU1PTiBTeXNmcyBJbnRlcmZhY2VcXG4gICA0OlxcdCAqL1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGFtb24uaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rb2JqZWN0LmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdGV4dGVybiBzdHJ1Y3QgbXV0ZXggZGFtb25fc3lzZnNfbG9jaztcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlIHtcXG4gIDEyOlxcdFxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuICAxMzpcXHRcXHR1bnNpZ25lZCBsb25nIG1pbjtcXG4gIDE0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4O1xcbiAgMTU6XFx0fTtcXG4gIDE2OlxcdFxcbiAgMTc6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG4gIDE4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluLFxcbiAgMTk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXgpO1xcbiAgMjA6XFx0dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdWxfcmFuZ2Vfa3R5cGU7XFxuICAyMzpcXHRcXG4gIDI0OlxcdC8qXFxuICAyNTpcXHQgKiBzY2hlbWVzIGRpcmVjdG9yeVxcbiAgMjY6XFx0ICovXFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzIHtcXG4gIDI5OlxcdFxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICoqc2NoZW1lc19hcnI7XFxuICAzMTpcXHRcXHRpbnQgbnI7XFxuICAzMjpcXHR9O1xcbiAgMzM6XFx0XFxuICAzNDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcXG4gIDM1OlxcdHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKTtcXG4gIDM2OlxcdFxcbiAgMzc6XFx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gIDQwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG4gIDQzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbiAgNDQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbiAgNDc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiAgNDg6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbiAgNDk6XFx0XFx0XFx0Ym9vbCB0b3RhbF9ieXRlc19vbmx5LCB1bnNpZ25lZCBsb25nIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRpbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbiAgNTI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRpbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4gIDU1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuICA1NjpcXHRcXG4gIDU3OlxcdHZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXFxuICA1ODpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4gIDU5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuICA2MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MjAuMTE3MDEzNTY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODA5NDMyNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBxdW90YSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhZGRpbmcgYW5kIHNldHRpbmcgcXVvdGFzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBhZGRzIG5ldyBxdW90YSBzY2hlbWVzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY2hlY2tpbmcgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBhbmQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLiBUaGVzZSBzb3VuZCBsaWtlIHRoZSBsaWtlbHkgZW50cnkgcG9pbnRzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBxdW90YSBtYW5hZ2VtZW50IHRocm91Z2ggc3lzZnMsIHdoaWNoIGlzIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHF1b3RhcyBhcmUgKmRlZmluZWQqIGFuZCAqaW5pdGlhbGl6ZWQqLiAgSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgZnVuY3Rpb24gb3Igc29tZXRoaW5nIHdpdGggYSBzaW1pbGFyIHJvbGUgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiAgU2luY2UgdGhpcyBpcyBjb3JlIHF1b3RhIG1hbmFnZW1lbnQgY29kZSwgaXQncyBtb3N0IGxpa2VseSB0byBiZSBsb2NhdGVkIHdpdGhpbiBlaXRoZXIgYGNvcmUuY2AgZmlsZSBvciB3aXRoaW4gdGhlIGBsaW51eC9kYW1vbi5oYCBoZWFkZXIgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjMxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MjozMS45MjY0NDkyMTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTU3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX25ld19xdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz02MjE9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyNi1cXG5tbS9kYW1vbi9jb3JlLmM6NjI3OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtNjI4LVxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExNjI9aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTE3NzpcXHRcXHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTc4LVxcdFxcdFxcdFxcdHNyY19nb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzg6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVxcdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MzpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQ0LVxcdFxcdFxcdDEwMDAwIC0gYWN0aXZlX21lbV9icCArIDIpO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXFx0XFx0XFx0XFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXFx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXFx0XFx0aWYgKCFnb2FsKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2NTpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cXHUwMDNlbWV0cmljLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY2LVxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODM0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODUyLVxcdFxcdCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTM6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1NC1cXHRcXHRcXHRcXHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MzEuOTY5NjEwNDI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzMjI1NDIxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgUmV2aWV3IGZvciBEQU1PTioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgREFNT04gaW1wbGVtZW50YXRpb24uIEZpcnN0LCBhIHF1aWNrIHNjYW4gb2YgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIHRlbGxzIG1lIHRoZSBjb3JlIGBEQU1PTmAgb3B0aW9uIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsLiBBbmQsIHByZWRpY3RhYmx5LCBgREFNT05fU1lTRlNgIGlzIGNvbnRpbmdlbnQgb24gYm90aCBgREFNT05gIGFuZCBgU1lTRlNgIGJlaW5nIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgc3VwcG9ydGluZyBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQ6IEknbGwgcmV2aWV3IHRoZXNlOiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIGNvbnRyb2wgcG9pbnRzLlxuXG5TcGVjaWZpY2FsbHksIEknbSBjdXJpb3VzIGlmIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBicm9hZGVyIHZpc2liaWxpdHkgb3IgcG90ZW50aWFsIGludGVyZmFjZSBwb2ludHMuIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gd2F0Y2ggZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mjo0MC4yOTIxNTY1NTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDAxOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTEzOT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTUwLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMTUxOiAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTExNTItICogQGRzdDpcXHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjEtICovXFxubW0vZGFtb24vY29yZS5jOjExNjI6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExNjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExODc9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExOTMtXFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jOjExOTQ6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE5NS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMi1cXHRcXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MjM6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI0LVxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZxdW90YSlcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDktXFx0XFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2FscyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUwOlxcdFxcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTEtXFx0XFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYyLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NjM6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQwLjMzODE2MTI1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTY3Mjc4ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJlbGV2YW50IEtlcm5lbCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4gYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9uIHRlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBpZGVudGlmaWVkIGFsbCBwb3RlbnRpYWwgdmFyaWFibGVzLlxuXG5JJ3ZlIGdvdCBhIHNob3J0IGxpc3Qgb2YgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIGhlcmU6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBTWVNGU2AsIGFuZCBhbHNvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoZSBwcmVzZW5jZSBvZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBjb2RlIHNlZW1zIHRvIGNhbGN1bGF0ZSB0aGUgVEhQIG1lbW9yeSByYXRpbyB1c2luZyBgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpYC4gVGh1cywgZW5hYmxpbmcgVEhQIGlzIGhpZ2hseSBzaWduaWZpY2FudCwgZXZlbiAqcmVxdWlyZWQqLCBmb3IgcHJvcGVyIHRlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgVEhQIGlzIGVuYWJsZWQgYW5kIGlmIHRoYXQgY2hhbmdlcyBiYXNlZCBvbiBhbnkgb2YgdGhlIG90aGVyIGNvbmZpZ3MuXG5cblNvLCBuZXh0LCBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgTlJfQU5PTl9USFBTYCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSWYgdGhlcmUncyBubyBkZXBlbmRlbmN5LCB0aGVuIHBlcmhhcHMgSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBjYXVzZXMgVEhQcyB0byBiZSBjcmVhdGVkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwsIG9yIGF0IGxlYXN0IGJlIGNvbmZpZ3VyYWJsZS4gSSBtYXkgYmUgbWlzc2luZyBhIGtleSBkZXBlbmRlbmN5IG9yIGVuYWJsaW5nIGNvbmZpZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgc291cmNlcywgYW5kIG1heWJlIHNvbWUgbWFpbGluZyBsaXN0IGFyY2hpdmVzLCB0byBjbGFyaWZ5IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTk0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQyLjkwNTQ0MjQxNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTQzNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5SX0FOT05fVEhQU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9MjM5PWVudW0gbm9kZV9zdGF0X2l0ZW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0yNzEtXFx0TlJfRklMRV9QTURNQVBQRUQsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoyNzI6XFx0TlJfQU5PTl9USFBTLFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjczLVxcdE5SX1ZNU0NBTl9XUklURSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MzQ3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bXN0YXRfaXRlbV9wcmludF9pbl90aHAoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0zNTEtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDozNTI6XFx0cmV0dXJuIGl0ZW0gPT0gTlJfQU5PTl9USFBTIHx8XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0zNTMtXFx0ICAgICAgIGl0ZW0gPT0gTlJfRklMRV9USFBTIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQzLjA0Njk5MTk3OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjk2ODk3OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG1tem9uZS5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbWVtb3J5IHpvbmUgc3RydWN0dXJlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYC4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIHRoYXQgc2VjdGlvbiBhcm91bmQgbGluZSAyNzAgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgZGVmaW5pdGlvbiBJJ20gYWZ0ZXIsIGF0IGxlYXN0IHRvIGdldCByZS1vcmllbnRlZC4gSSByZW1lbWJlciBpdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBtZW1iZXJzIHJlbGF0ZWQgdG8gYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBhcmUgbGlrZWx5IGRlZmluZWQuIEkgd2FudCBhIHF1aWNrIHJldmlldyBvZiBob3cgdGhlIHpvbmVzIGFyZSBvcmdhbml6ZWQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQ2LjM0Mzg5MjU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2NTpcXHRcXHROUl9GSUxFX0RJUlRZLFxcbiAyNjY6XFx0XFx0TlJfV1JJVEVCQUNLLFxcbiAyNjc6XFx0XFx0TlJfU0hNRU0sXFx0XFx0Lyogc2htZW0gcGFnZXMgKGluY2x1ZGVkIHRtcGZzL0dFTSBwYWdlcykgKi9cXG4gMjY4OlxcdFxcdE5SX1NITUVNX1RIUFMsXFxuIDI2OTpcXHRcXHROUl9TSE1FTV9QTURNQVBQRUQsXFxuIDI3MDpcXHRcXHROUl9GSUxFX1RIUFMsXFxuIDI3MTpcXHRcXHROUl9GSUxFX1BNRE1BUFBFRCxcXG4gMjcyOlxcdFxcdE5SX0FOT05fVEhQUyxcXG4gMjczOlxcdFxcdE5SX1ZNU0NBTl9XUklURSxcXG4gMjc0OlxcdFxcdE5SX1ZNU0NBTl9JTU1FRElBVEUsXFx0LyogUHJpb3JpdGlzZSBmb3IgcmVjbGFpbSB3aGVuIHdyaXRlYmFjayBlbmRzICovXFxuIDI3NTpcXHRcXHROUl9ESVJUSUVELFxcdFxcdC8qIHBhZ2UgZGlydHlpbmdzIHNpbmNlIGJvb3R1cCAqL1xcbiAyNzY6XFx0XFx0TlJfV1JJVFRFTixcXHRcXHQvKiBwYWdlIHdyaXRpbmdzIHNpbmNlIGJvb3R1cCAqL1xcbiAyNzc6XFx0XFx0TlJfVEhST1RUTEVEX1dSSVRURU4sXFx0LyogTlJfV1JJVFRFTiB3aGlsZSByZWNsYWltIHRocm90dGxlZCAqL1xcbiAyNzg6XFx0XFx0TlJfS0VSTkVMX01JU0NfUkVDTEFJTUFCTEUsXFx0LyogcmVjbGFpbWFibGUgbm9uLXNsYWIga2VybmVsIHBhZ2VzICovXFxuIDI3OTpcXHRcXHROUl9GT0xMX1BJTl9BQ1FVSVJFRCxcXHQvKiB2aWE6IHBpbl91c2VyX3BhZ2UoKSwgZ3VwIGZsYWc6IEZPTExfUElOICovXFxuIDI4MDpcXHRcXHROUl9GT0xMX1BJTl9SRUxFQVNFRCxcXHQvKiBwYWdlcyByZXR1cm5lZCB2aWEgdW5waW5fdXNlcl9wYWdlKCkgKi9cXG4gMjgxOlxcdFxcdE5SX1ZNQUxMT0MsXFxuIDI4MjpcXHRcXHROUl9LRVJORUxfU1RBQ0tfS0IsXFx0LyogbWVhc3VyZWQgaW4gS2lCICovXFxuIDI4MzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfU0hBRE9XX0NBTExfU1RBQ0spXFxuIDI4NDpcXHRcXHROUl9LRVJORUxfU0NTX0tCLFxcdC8qIG1lYXN1cmVkIGluIEtpQiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mjo0Ni4zNDQwMTg4NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTg3OTkyNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCBhcyBleHBlY3RlZCwgYE5SX0FOT05fVEhQU2AgaXMgYSBjb25zdGFudCBtZW1iZXIgb2YgdGhlIGVudW0sIHRoYXQncyBqdXN0IGEgZ2l2ZW4uIE5vdywgaXQncyBjbGVhciB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIGNvbmZpZyB0aGF0J3MgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIHRoZSBleGlzdGVuY2Ugb2YgaHVnZSBwYWdlcy4gQWxyaWdodCwgbGV0J3MgbWFwIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgZm9yIERBTU9OIGFuZCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSBhbGwgZW5hYmxlZCwgdGhhdCdzIHRoZSBiYXNlIHJlcXVpcmVtZW50LlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYXJlIGFsbCBwcmVzZW50LiBZdXAsIHRob3NlIGFyZSBhbGwgYXMgZXhwZWN0ZWQuXG5cbkknbGwgcXVpY2tseSBkbyBhIGZpbmFsIHNhbml0eSBjaGVjayBmb3IgYW55IG90aGVyIHN5bWJvbHMgaW4gYG1tL2RhbW9uYCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgZXZlcnl0aGluZyBpcyBhcyBpdCBzaG91bGQgYmUuIFZlcmlmaWVkIGFuZCBjbGVhci5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODU4LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQ5LjMzMjAxNDI3NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MTE3NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb3NfbmV3X3F1b3RhX2dvYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljICdodWdlcGFnZV9tZW1fYnAnIHRvIERBTU9OIGNvcmUgYW5kIGV4cG9zZXMgaXQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgc2NoZW1lcyBpbnRlcmZhY2UuIEl0IGNvbXB1dGVzIHRoZSByYXRpbyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHRvIGR5bmFtaWNhbGx5IHR1bmUgREFNT1MgcXVvdGFzLiBUaGlzIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb3NfbmV3X3F1b3RhX2dvYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljICdodWdlcGFnZV9tZW1fYnAnIHRvIERBTU9OIGNvcmUgYW5kIGV4cG9zZXMgaXQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgc2NoZW1lcyBpbnRlcmZhY2UuIEl0IGNvbXB1dGVzIHRoZSByYXRpbyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHRvIGR5bmFtaWNhbGx5IHR1bmUgREFNT1MgcXVvdGFzLiBUaGlzIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6NDkuNDIwMTQwNzcxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1MzczODgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQ5LjQyMDYzMzU0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQxNTMyNDA2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgKERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwgJ2h1Z2VwYWdlX21lbV9icCcpIHRoYXQgY2FsY3VsYXRlcyB0aGUgcmF0aW8gb2YgaHVnZSBwYWdlcyB0byB1c2VkIG1lbW9yeSB1c2luZyBzdGFuZGFyZCBrZXJuZWwgY291bnRlcnMgKHRvdGFscmFtX3BhZ2VzLCBnbG9iYWxfem9uZV9wYWdlX3N0YXRlLCBhbmQgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBmdW5jdGlvbiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBwYWRkaW5nIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWEyNDdmYmYwMDM1YWI3ZmNhNWYxNWQzYzU3MGE1YjEyYjY5MjlkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIxOjQxOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCBhZWQ2Y2IxY2Y0ODMxLi5hOGMxNjM0NzVlZjJiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbkBAIC03MTMsNiArNzEzLDggQEAgbWVjaGFuaXNtIHRyaWVzIHRvIG1ha2UgYGBjdXJyZW50X3ZhbHVlYGAgb2YgYGB0YXJnZXRfbWV0cmljYGAgYmUgc2FtZSB0b1xuICAgYnAgKDEvMTAsMDAwKS5cbiAtIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYDogU2NoZW1lIHRhcmdldCBhY2Nlc3MgcGF0dGVybi1lbGlnaWJsZSBtZW1vcnkgcmF0aW9cbiAgIG9mIGEgbm9kZSBpbiBicCAoMS8xMCwwMDApLlxuKy0gYGBodWdlcGFnZV9tZW1fYnBgYDogVG90YWwgaHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvIGluIGJwXG4rICAoMS8xMCwwMDApLlxuIFxuIGBgbmlkYGAgaXMgb3B0aW9uYWxseSByZXF1aXJlZCBmb3IgYGBub2RlX21lbV91c2VkX2JwYGAsIGBgbm9kZV9tZW1fZnJlZV9icGBgLFxuIGBgbm9kZV9tZW1jZ191c2VkX2JwYGAsIGBgbm9kZV9tZW1jZ19mcmVlX2JwYGAgYW5kIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYCB0b1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggMGM4YjdkZGVmOWFiYi4uYjUyNDA1OThlNmZmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMTUzLDYgKzE1Myw3IEBAIGVudW0gZGFtb3NfYWN0aW9uIHtcbiAgKiBAREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlx0SW5hY3RpdmUgdG8gdG90YWwgTFJVIG1lbW9yeSByYXRpby5cbiAgKiBAREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XHRTY2hlbWUtZWxpZ2libGUgbWVtb3J5IHJhdGlvIG9mIGFcbiAgKlx0XHRcdFx0XHRub2RlIGluIGJhc2lzIHBvaW50cyAoMC0xMDAwMCkuXG4rICogQERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDpcdEh1Z2UgcGFnZSB0byB0b3RhbCB1c2VkIG1lbW9yeSByYXRpby5cbiAgKiBATlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTOlx0TnVtYmVyIG9mIERBTU9TIHF1b3RhIGdvYWwgbWV0cmljcy5cbiAgKlxuICAqIE1ldHJpY3MgZXF1YWwgdG8gbGFyZ2VyIHRoYW4gQE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUyBhcmUgdW5zdXBwb3J0ZWQuXG5AQCAtMTY3LDYgKzE2OCw3IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuIFx0REFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCxcbiBcdERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcbiBcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLFxuK1x0REFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLFxuIFx0TlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi45YzBlNDJhMWQyY2ZjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMDA3LDYgKzMwMDcsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcbiBcdHJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG4gfVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB0aHAsIHRvdGFsX3BhZ2VzLCBmcmVlX3BhZ2VzO1xuK1xuK1x0dG90YWxfcGFnZXMgPSB0b3RhbHJhbV9wYWdlcygpO1xuK1x0ZnJlZV9wYWdlcyA9IGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUyk7XG4rXG4rXHRpZiAodG90YWxfcGFnZXMgXHUwMDNjPSBmcmVlX3BhZ2VzKVxuK1x0XHRyZXR1cm4gMTAwMDA7XG4rXG4rXHR0aHAgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0FOT05fVEhQUykgK1xuK1x0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9TSE1FTV9USFBTKSArXG4rXHRcdFx0XHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUyk7XG4rXHRyZXR1cm4gbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbiB7XG5AQCAtMzAzOCw2ICszMDU0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoYywgcyxcbiBcdFx0XHRcdGdvYWwtXHUwMDNlbmlkKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDpcbitcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKCk7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMmY0OTVhOTZiMTdhLi5kOWI4MWQ3YjU5MTBlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0xMjY5LDYgKzEyNjksMTAgQEAgc3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xuIFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlAsXG4gXHRcdC5uYW1lID0gXCJub2RlX2VsaWdpYmxlX21lbV9icFwiLFxuIFx0fSxcbitcdHtcbitcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCxcbitcdFx0Lm5hbWUgPSBcImh1Z2VwYWdlX21lbV9icFwiLFxuK1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQ5LjQyMDYzNDQ1MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjUxNjc3ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT1MgUXVvdGEgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBmdXp6aW5nIHNlc3Npb24uIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMsIHNwZWNpZmljYWxseSBgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQYCwgZXNzZW50aWFsbHkgdHJhY2tpbmcgaHVnZXBhZ2UgbWVtb3J5IHVzYWdlIGFzIGEgcGVyY2VudGFnZSBvZiBhdmFpbGFibGUgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBmaWxlczogYERvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdGAgZm9yIGRvY3VtZW50YXRpb24sIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIHRvIHVwZGF0ZSB0aGUgYGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljYCBlbnVtLCBhbmQgdGhlbiB0aGUgY29yZSBsb2dpYyBpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gYGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpYCBpcyBpbXBsZW1lbnRlZCwgYW5kIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBpcyB1cGRhdGVkIHRvIGhhbmRsZSB0aGUgbmV3IG1ldHJpYy4gIEZpbmFsbHksIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGFkZHMgdGhlIG1ldHJpYydzIG5hbWUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZS5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCBmb3IgYGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpYC4gIEl0IGNhbGN1bGF0ZXMgdGhlIGh1Z2VwYWdlIG1lbW9yeSBwZXJjZW50YWdlLCB0YWtpbmcgaW50byBhY2NvdW50IGB0b3RhbF9wYWdlc2AsIGBmcmVlX3BhZ2VzYCwgYW5kIHRoZSBudW1iZXIgb2YgaHVnZXBhZ2VzIGN1cnJlbnRseSBpbiB1c2UgKGBOUl9BTk9OX1RIUFNgLCBgTlJfU0hNRU1fVEhQU2AsIGBOUl9GSUxFX1RIUFNgKS4gVGhlIGxvZ2ljIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgY2FsY3VsYXRpbmcgYSBwZXJjZW50YWdlLiBXZSBkbyBzZWUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgYHRvdGFsX3BhZ2VzYCBpcyBsZXNzIHRoYW4gYGZyZWVfcGFnZXNgIHRoZSByZXR1cm4gaXMgMTAwMDAsIGkuZS4sIDEwMCUuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBxdW90YSBnb2FscyBhbmQgaG93IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBpcyBhY3R1YWxseSBjYWxsZWQuIEknbGwgbmVlZCB0byBleGFtaW5lIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIG1vcmUgY2xvc2VseSBhbmQgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB0cmFjZSB0aGUgY2FsbHMgYW5kIGRhdGEgZmxvdyBhcm91bmQgdGhpcy4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwb2ludHMgb2YgZW50cnkgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIElzIHRoZXJlIGEgdXNlci1zdXBwbGllZCBpbnB1dCBnb2luZyBpbnRvIHRoZSBjYWxjdWxhdGlvbnM/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIHRoYXQgYXJlIGhhbmRsZWQ/IEkgd2lsbCBmb2N1cyBvbiBmaW5kaW5nIHRoZSBwYXRoIGJldHdlZW4gYW55IHVzZXItcHJvdmlkZWQgY29uZmlndXJhdGlvbiBhbmQgdGhlIGludGVybmFsIHVzZSBvZiB0aGUgY2FsY3VsYXRpb25zIGFuZCBhc3NvY2lhdGVkIGRhdGEuIERlcGVuZGluZyBvbiBob3cgdGhpcyBkYXRhIGlzIGhhbmRsZWQsIEkgY2FuIGRlY2lkZSBpZiBpdCBuZWVkcyBpdHMgb3duIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHRoZSBleGlzdGluZyBEQU1PUyBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mjo1NC42NzIzMTY0MTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDUzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXFx0e1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODYtXFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lICptZXRyaWNfbmFtZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI4ODpcXHRcXHRtZXRyaWNfbmFtZSA9IFxcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODktXFx0XFx0aWYgKG1ldHJpY19uYW1lLVxcdTAwM2VtZXRyaWMgPT0gZ29hbC1cXHUwMDNlbWV0cmljKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyOTU9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzAyOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lcyk7IGkrKykge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAzLVxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMDU6XFx0XFx0bWV0cmljX25hbWUgPSBcXHUwMDI2ZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW2ldO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzA2LVxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIG1ldHJpY19uYW1lLVxcdTAwM2VuYW1lKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mjo1NC43MTY3NzUyNjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE2MDY3NDYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCoqXG5cbk9rYXksIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgZnVuY3Rpb24uICBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCDigJMgdGhlIGNhbGwgc2l0ZXMg4oCTIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gKmRvKiBhbmQgd2h5IGl0J3MgZXZlbiBuZWVkZWQuIFVuZGVyc3RhbmRpbmcgdGhlICp3aGF0KiBhbmQgdGhlICp3aHkqIGFyZSBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gVGhlbiwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEknbGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpY3MuIFdoYXQgYXJlIGl0cyBpbnB1dHM/IFdoYXQncyB0aGUgbG9naWM/ICBXaGF0IHNpZGUgZWZmZWN0cyBkb2VzIGl0IGhhdmU/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgbW9kaWZ5PyBBbGwgdGhlIGRldGFpbHMgbWF0dGVyLCBiZWNhdXNlIHVsdGltYXRlbHksIEknbGwgbmVlZCB0byBhc3Nlc3MgaXRzIGNvcnJlY3RuZXNzLCBwZXJmb3JtYW5jZSwgYW5kIG1heWJlIGV2ZW4gaXRzIG1haW50YWluYWJpbGl0eS4gSXTigJlzIHRoZSBvbmx5IHdheSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgcGVyZm9ybWluZyBhcyBpbnRlbmRlZC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCB0aGVuIGRlY2lkZSBob3cgYmVzdCB0byBhcHByb2FjaCB3aGF0ZXZlciB0YXNrIGhhcyBsZWFkIG1lIHRvIHRoaXMgcGllY2Ugb2YgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjU3Ljg3NzQ1MjQ2NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MjA2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzAxMD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwMjUtXFxubW0vZGFtb24vY29yZS5jOjMwMjY6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0zMDI3LVxcdFxcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzA2Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA3Mi1cXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XFxubW0vZGFtb24vY29yZS5jOjMwNzM6XFx0XFx0ZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShjLCBzLCBnb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzA3NC1cXHRcXHRoaWdoZXN0X3Njb3JlID0gbWF4KGhpZ2hlc3Rfc2NvcmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjU3LjkyMjA4Nzc0MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjUxNzUzNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBJbml0aWFsaXphdGlvbiBSaXNrcyBpbiB0aGlzIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgaGF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbHVya2luZyBhYm91dCwgYXMgdGhhdCdzIGFsd2F5cyBhIGNvbmNlcm4uIEZpcnN0LCBJIGZvY3VzZWQgb24gdGhlIGBkYW1vc19odWdlcGFnZV9tZW1fYnBgIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMgYHRocGAsIGB0b3RhbF9wYWdlc2AsIGFuZCBgZnJlZV9wYWdlc2AgYXJlIGFsbCBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBTcGVjaWZpY2FsbHk6IGB0b3RhbF9wYWdlc2AgZ2V0cyBgdG90YWxyYW1fcGFnZXMoKWAsIGBmcmVlX3BhZ2VzYCBnZXRzIHRoZSBmcmVlIHBhZ2UgY291bnQgZnJvbSBgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZWAsIGFuZCBgdGhwYCBhY2N1bXVsYXRlcyB0aGUgVEhQIGNvdW50cyBmcm9tIHRoZSBnbG9iYWwgbm9kZSBwYWdlIHN0YXRlcy4gVGhlIGNvcmUgY2FsY3VsYXRpb24gdGhlbiB1c2VzIHRoZXNlIGluaXRpYWxpemVkIHZhbHVlcyBpbiBgbXVsdF9mcmFjYC4gVGhlIHJlc3VsdCBpcyBhc3NpZ25lZCB0byBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCwgYW5kIHRoYXQncyB0aGUgZW5kIG9mIHRoZSBsaW5lLiBTbyBmYXIsIHNvIGdvb2Qg4oCTIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuXG5cbk1vdmluZyBvbiwgdGhlIGFkZGl0aW9uIG9mIHRoZSBgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQYCBlbnVtIHZhbHVlIGJlZm9yZSBgTlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTYCBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgaW4gaXRzZWxmLiBJdOKAmXMgc2ltcGx5IGV4dGVuZGluZyBhbiBlbnVtZXJhdGlvbi4gU2ltaWxhcmx5LCB0aGUgYWRkaXRpb24gb2YgdGhlIG5ldyBzdGF0aWMgZW50cnkgaW4gdGhlIGBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNgIGFycmF5IGlzIGEgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3IG1ldHJpYyB3aXRoIGl0cyBuYW1lLiBObyBwcm9ibGVtcyB0aGVyZS5cblxuTmV4dCwgSSBsb29rZWQgZm9yIGFueXRoaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIEZvcnR1bmF0ZWx5LCB0aGlzIHBhdGNoIGRvZXNu4oCZdCBzZWVtIHRvIGJlIHB1c2hpbmcgYW55IHN0cnVjdHMgb3V0LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBvciBnYXJiYWdlIGRhdGEgbGVha2FnZS4gU3lzZnMgcmVhZHMgYW5kIHdyaXRlcyBhcmUgZG9uZSB1c2luZyBmb3JtYXR0ZWQgc3RyaW5ncywgd2hpY2ggYWxsZXZpYXRlcyBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIGZpZWxkcyBlbmRpbmcgdXAgaW4gdGhlIG91dHB1dC4gTW9yZW92ZXIsIHRoZXJlJ3Mgbm8gbWVtb3J5IGFsbG9jYXRpb24gb3IgY2hhbmdlcyB0byBzdHJ1Y3R1cmUgbGF5b3V0cyB0aGF0IHdvdWxkIGNhdXNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcyB0byBiZSBleHBvc2VkLiBBbmQsIEkgc2VlIG5vIGJyYW5jaGluZyBsb2dpYyB0aGF0J3MgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgcGF0Y2ggaXMganVzdCBhZGRpbmcgYSBuZXcgbWV0cmljIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHJlYWRpbHkgYXZhaWxhYmxlIGtlcm5lbCBwYWdlIGNvdW50ZXJzLiBJJ20gc2F0aXNmaWVkIHRoYXQgdGhlcmUgaXMgKipubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzKiogdG8gdXNlciBzcGFjZSBpbiB0aGlzIHBhdGNoLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGVyZeKAmXMgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgaW52b2tlZCBmb3IgdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDAsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQzOjAzLjU3Mzg0NTg4NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBEQU1PUyBxdW90YSBnb2FsIG1ldHJpYyAoREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLCAnaHVnZXBhZ2VfbWVtX2JwJykgdGhhdCBjYWxjdWxhdGVzIHRoZSByYXRpbyBvZiBodWdlIHBhZ2VzIHRvIHVzZWQgbWVtb3J5IHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBjb3VudGVycyAodG90YWxyYW1fcGFnZXMsIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUsIGFuZCBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGZ1bmN0aW9uIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHBhZGRpbmcgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljIChEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsICdodWdlcGFnZV9tZW1fYnAnKSB0aGF0IGNhbGN1bGF0ZXMgdGhlIHJhdGlvIG9mIGh1Z2UgcGFnZXMgdG8gdXNlZCBtZW1vcnkgdXNpbmcgc3RhbmRhcmQga2VybmVsIGNvdW50ZXJzICh0b3RhbHJhbV9wYWdlcywgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZSwgYW5kIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGluIHRoZSBuZXcgZnVuY3Rpb24gYGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgcGFkZGluZyBsZWFrcyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4mpvw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 21:39:46 +0000 UTC FinishedAt: 2026-08-31 21:43:04 +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": "da6c37ed8beb273e3308e42d4bca3ce11b4432fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "TRANSPARENT_HUGEPAGE" ], "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": "da6c37ed8beb273e3308e42d4bca3ce11b4432fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "TRANSPARENT_HUGEPAGE" ], "series_id": "207c8a69-36ac-4cc3-8268-3e6efd9314bc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_sysfs_set_quota_scores", "damon_sysfs_add_schemes", "damos_commit_quota_goals", "damos_new_quota_goal" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb3NfbmV3X3F1b3RhX2dvYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljIChEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsICYjMzk7aHVnZXBhZ2VfbWVtX2JwJiMzOTspIHRoYXQgY2FsY3VsYXRlcyB0aGUgcmF0aW8gb2YgaHVnZSBwYWdlcyB0byB1c2VkIG1lbW9yeSB1c2luZyBzdGFuZGFyZCBrZXJuZWwgY291bnRlcnMgKHRvdGFscmFtX3BhZ2VzLCBnbG9iYWxfem9uZV9wYWdlX3N0YXRlLCBhbmQgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBmdW5jdGlvbiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBwYWRkaW5nIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OyB0byBEQU1PTiBjb3JlIGFuZCBleHBvc2VzIGl0IHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIHNjaGVtZXMgaW50ZXJmYWNlLiBJdCBjb21wdXRlcyB0aGUgcmF0aW8gb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byB0b3RhbCB1c2VkIG1lbW9yeSB0byBkeW5hbWljYWxseSB0dW5lIERBTU9TIHF1b3Rhcy4gVGhpcyBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlYTI0N2ZiZjAwMzVhYjdmY2E1ZjE1ZDNjNTcwYTViMTJiNjkyOWQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjE6NDE6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCBhZWQ2Y2IxY2Y0ODMxLi5hOGMxNjM0NzVlZjJiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbkBAIC03MTMsNiAmIzQzOzcxMyw4IEBAIG1lY2hhbmlzbSB0cmllcyB0byBtYWtlIGBgY3VycmVudF92YWx1ZWBgIG9mIGBgdGFyZ2V0X21ldHJpY2BgIGJlIHNhbWUgdG9cbiAgIGJwICgxLzEwLDAwMCkuXG4gLSBgYG5vZGVfZWxpZ2libGVfbWVtX2JwYGA6IFNjaGVtZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4tZWxpZ2libGUgbWVtb3J5IHJhdGlvXG4gICBvZiBhIG5vZGUgaW4gYnAgKDEvMTAsMDAwKS5cbiYjNDM7LSBgYGh1Z2VwYWdlX21lbV9icGBgOiBUb3RhbCBodWdlIHBhZ2UgdG8gdG90YWwgdXNlZCBtZW1vcnkgcmF0aW8gaW4gYnBcbiYjNDM7ICAoMS8xMCwwMDApLlxuIFxuIGBgbmlkYGAgaXMgb3B0aW9uYWxseSByZXF1aXJlZCBmb3IgYGBub2RlX21lbV91c2VkX2JwYGAsIGBgbm9kZV9tZW1fZnJlZV9icGBgLFxuIGBgbm9kZV9tZW1jZ191c2VkX2JwYGAsIGBgbm9kZV9tZW1jZ19mcmVlX2JwYGAgYW5kIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYCB0b1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggMGM4YjdkZGVmOWFiYi4uYjUyNDA1OThlNmZmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMTUzLDYgJiM0MzsxNTMsNyBAQCBlbnVtIGRhbW9zX2FjdGlvbiB7XG4gICogQERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDpcdEluYWN0aXZlIHRvIHRvdGFsIExSVSBtZW1vcnkgcmF0aW8uXG4gICogQERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlx0U2NoZW1lLWVsaWdpYmxlIG1lbW9yeSByYXRpbyBvZiBhXG4gICpcdFx0XHRcdFx0bm9kZSBpbiBiYXNpcyBwb2ludHMgKDAtMTAwMDApLlxuJiM0MzsgKiBAREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQOlx0SHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvLlxuICAqIEBOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1M6XHROdW1iZXIgb2YgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWNzLlxuICAqXG4gICogTWV0cmljcyBlcXVhbCB0byBsYXJnZXIgdGhhbiBATlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTIGFyZSB1bnN1cHBvcnRlZC5cbkBAIC0xNjcsNiAmIzQzOzE2OCw3IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuIFx0REFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCxcbiBcdERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcbiBcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLFxuJiM0MztcdERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCxcbiBcdE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uOWMwZTQyYTFkMmNmYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzAwNyw2ICYjNDM7MzAwNywyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKVxuIFx0cmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRocCwgdG90YWxfcGFnZXMsIGZyZWVfcGFnZXM7XG4mIzQzO1xuJiM0MztcdHRvdGFsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMoKTtcbiYjNDM7XHRmcmVlX3BhZ2VzID0gZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRvdGFsX3BhZ2VzIFx1MDAzYz0gZnJlZV9wYWdlcylcbiYjNDM7XHRcdHJldHVybiAxMDAwMDtcbiYjNDM7XG4mIzQzO1x0dGhwID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpICYjNDM7XG4mIzQzO1x0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9TSE1FTV9USFBTKSAmIzQzO1xuJiM0MztcdFx0XHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfRklMRV9USFBTKTtcbiYjNDM7XHRyZXR1cm4gbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuIHtcbkBAIC0zMDM4LDYgJiM0MzszMDU0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoYywgcyxcbiBcdFx0XHRcdGdvYWwtXHUwMDNlbmlkKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XG4mIzQzO1x0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMmY0OTVhOTZiMTdhLi5kOWI4MWQ3YjU5MTBlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0xMjY5LDYgJiM0MzsxMjY5LDEwIEBAIHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHtcbiBcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLFxuIFx0XHQubmFtZSA9IFwmIzM0O25vZGVfZWxpZ2libGVfbWVtX2JwXCYjMzQ7LFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQubWV0cmljID0gREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtodWdlcGFnZV9tZW1fYnBcJiMzNDssXG4mIzQzO1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OyB0byBEQU1PTiBjb3JlIGFuZCBleHBvc2VzIGl0IHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIHNjaGVtZXMgaW50ZXJmYWNlLiBJdCBjb21wdXRlcyB0aGUgcmF0aW8gb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byB0b3RhbCB1c2VkIG1lbW9yeSB0byBkeW5hbWljYWxseSB0dW5lIERBTU9TIHF1b3Rhcy4gVGhpcyBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYTI0N2ZiZjAwMzVhYjdmY2E1ZjE1ZDNjNTcwYTViMTJiNjkyOWQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjE6NDE6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKaW5kZXggYWVkNmNiMWNmNDgzMS4uYThjMTYzNDc1ZWYyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdApAQCAtNzEzLDYgJiM0Mzs3MTMsOCBAQCBtZWNoYW5pc20gdHJpZXMgdG8gbWFrZSBgYGN1cnJlbnRfdmFsdWVgYCBvZiBgYHRhcmdldF9tZXRyaWNgYCBiZSBzYW1lIHRvCiAgIGJwICgxLzEwLDAwMCkuCiAtIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYDogU2NoZW1lIHRhcmdldCBhY2Nlc3MgcGF0dGVybi1lbGlnaWJsZSBtZW1vcnkgcmF0aW8KICAgb2YgYSBub2RlIGluIGJwICgxLzEwLDAwMCkuCiYjNDM7LSBgYGh1Z2VwYWdlX21lbV9icGBgOiBUb3RhbCBodWdlIHBhZ2UgdG8gdG90YWwgdXNlZCBtZW1vcnkgcmF0aW8gaW4gYnAKJiM0MzsgICgxLzEwLDAwMCkuCiAKIGBgbmlkYGAgaXMgb3B0aW9uYWxseSByZXF1aXJlZCBmb3IgYGBub2RlX21lbV91c2VkX2JwYGAsIGBgbm9kZV9tZW1fZnJlZV9icGBgLAogYGBub2RlX21lbWNnX3VzZWRfYnBgYCwgYGBub2RlX21lbWNnX2ZyZWVfYnBgYCBhbmQgYGBub2RlX2VsaWdpYmxlX21lbV9icGBgIHRvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKaW5kZXggMGM4YjdkZGVmOWFiYi4uYjUyNDA1OThlNmZmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtMTUzLDYgJiM0MzsxNTMsNyBAQCBlbnVtIGRhbW9zX2FjdGlvbiB7CiAgKiBAREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOglJbmFjdGl2ZSB0byB0b3RhbCBMUlUgbWVtb3J5IHJhdGlvLgogICogQERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOglTY2hlbWUtZWxpZ2libGUgbWVtb3J5IHJhdGlvIG9mIGEKICAqCQkJCQlub2RlIGluIGJhc2lzIHBvaW50cyAoMC0xMDAwMCkuCiYjNDM7ICogQERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDoJSHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvLgogICogQE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUzoJTnVtYmVyIG9mIERBTU9TIHF1b3RhIGdvYWwgbWV0cmljcy4KICAqCiAgKiBNZXRyaWNzIGVxdWFsIHRvIGxhcmdlciB0aGFuIEBOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1MgYXJlIHVuc3VwcG9ydGVkLgpAQCAtMTY3LDYgJiM0MzsxNjgsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHsKIAlEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLAogCURBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCwKIAlEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUCwKJiM0MzsJREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLAogCU5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUywKIH07CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi45YzBlNDJhMWQyY2ZjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMDA3LDYgJiM0MzszMDA3LDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pCiAJcmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTsKIH0KIAomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHRocCwgdG90YWxfcGFnZXMsIGZyZWVfcGFnZXM7CiYjNDM7CiYjNDM7CXRvdGFsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMoKTsKJiM0MzsJZnJlZV9wYWdlcyA9IGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUyk7CiYjNDM7CiYjNDM7CWlmICh0b3RhbF9wYWdlcyAmbHQ7PSBmcmVlX3BhZ2VzKQomIzQzOwkJcmV0dXJuIDEwMDAwOwomIzQzOwomIzQzOwl0aHAgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0FOT05fVEhQUykgJiM0MzsKJiM0MzsJCQkJZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9TSE1FTV9USFBTKSAmIzQzOwomIzQzOwkJCQlnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUyk7CiYjNDM7CXJldHVybiBtdWx0X2ZyYWModGhwLCAxMDAwMCwgdG90YWxfcGFnZXMgLSBmcmVlX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsCiAJCXN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpCiB7CkBAIC0zMDM4LDYgJiM0MzszMDU0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLAogCQlnb2FsLSZndDtjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsCiAJCQkJZ29hbC0mZ3Q7bmlkKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQOgomIzQzOwkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCmluZGV4IDMyZjQ5NWE5NmIxN2EuLmQ5YjgxZDdiNTkxMGUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKQEAgLTEyNjksNiAmIzQzOzEyNjksMTAgQEAgc3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0gewogCQkubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlAsCiAJCS5uYW1lID0gJiMzNDtub2RlX2VsaWdpYmxlX21lbV9icCYjMzQ7LAogCX0sCiYjNDM7CXsKJiM0MzsJCS5tZXRyaWMgPSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsCiYjNDM7CQkubmFtZSA9ICYjMzQ7aHVnZXBhZ2VfbWVtX2JwJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY29yZSBjaGFuZ2U6IGl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHF1b3RhIGdvYWwgbWV0cmljIHdpdGhpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlBgLCBvciAmIzM0O2h1Z2VwYWdlX21lbV9icCYjMzQ7LiBUaGlzIGlzIGludGVyZXN0aW5nOyB3ZSYjMzk7cmUgbm93IHRyYWNraW5nIHF1b3RhIGdvYWxzIHJlbGF0ZWQgdG8gaHVnZXBhZ2VzIHdpdGhpbiB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciwgd2hpY2ggc3VnZ2VzdHMgYSBuZXcgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgb3IgYSBmb2N1cyBvbiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIGh1Z2UgcGFnZXMuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBzY29wZS4gVGhlIGNoYW5nZXMgdG91Y2g6CgoxLiAgKipEb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QqKjogV2UmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmF0aW9uYWxlIGZvciB0aGlzIG5ldyBtZXRyaWMuIFdoYXQmIzM5O3MgdGhlIGRlc2lnbiBjb25zaWRlcmF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zPwoyLiAgKippbmNsdWRlL2xpbnV4L2RhbW9uLmgqKjogVGhpcyBmaWxlIGxpa2VseSBkZWZpbmVzIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZW51bXMgcmVsYXRlZCB0byBEQU1PTiwgc28gd2Ugc2hvdWxkIGxvb2sgYXQgdGhlIGFkZGl0aW9uIG9mIGBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlBgIGFuZCBhbnkgYXNzb2NpYXRlZCBkZWZpbml0aW9ucy4KMy4gICoqbW0vZGFtb24vY29yZS5jKio6IEhlcmUmIzM5O3Mgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGxpdmVzLiBTcGVjaWZpY2FsbHksIGBkYW1vc19odWdlcGFnZV9tZW1fYnBgIGFuZCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgd2lsbCBiZSB0aGUgZm9jYWwgcG9pbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtZXRyaWMgaXMgY2FsY3VsYXRlZCwgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIERBTU9OJiMzOTtzIGNvcmUgbW9uaXRvcmluZyBhbmQgY29udHJvbCBsb29wLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBxdW90YSBtZWNoYW5pc21zLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJcyB0aGlzIGFkZGluZyBhbnkgbmV3IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGNvbmNlcm5zPwo0LiAgKiptbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMqKjogVGhlIGBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNgIG1vZGlmaWNhdGlvbiBpcyBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIHN5c2ZzIGludGVyZmFjZS4gSG93IGFyZSB1c2VycyBnb2luZyB0byBiZSBhYmxlIHRvIGFjY2VzcyBhbmQgY29uZmlndXJlIHRoaXMgbWV0cmljPyBXaGF0IGxldmVsIG9mIGluZm9ybWF0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHN5c2FkbWlucz8KCkJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGNvZGUgYW5kIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBEQU1PTiBhbmQgREFNT04gc3lzZnMgc2NoZW1lcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIG9uIGh1Z2VwYWdlIGNvbmZpZ3VyYXRpb25zIG9yIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBJdCBpcyBjcml0aWNhbCB0byBlbnN1cmUgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBjb21wYXRpYmxlIHdpdGggY3VycmVudCBzeXN0ZW0gY29uZmlndXJhdGlvbnMsIGFuZCBoYXZlIGFzIG11Y2ggYmFja3dhcmQgY29tcGF0YWJpbGl0eSBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZzo2Olx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNy1cdGhlbHBcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnOjE2Olx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gREFNT05cbm1tL2RhbW9uL0tjb25maWctMTgtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjE5Olx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG5tbS9kYW1vbi9LY29uZmlnOjIwOlx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2Vcbm1tL2RhbW9uL0tjb25maWctMjEtXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6Mjg6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTI5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctMzAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjMxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctMzItXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNDEtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NDI6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQzLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo0NDpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy00NS1cdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjQ5Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG5tbS9kYW1vbi9LY29uZmlnLTUwLVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG5tbS9kYW1vbi9LY29uZmlnOjUxOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01Mi1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NTM6XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbm1tL2RhbW9uL0tjb25maWctNTQtXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWc6NTc6XHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctNTktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy02MC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NjE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTYyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZzo2OTpcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjcwOlx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbm1tL2RhbW9uL0tjb25maWc6NzE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTcyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo3MzpcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG5tbS9kYW1vbi9LY29uZmlnLTc0LVx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzo3ODpcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctNzktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy04MC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6ODE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctODItXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWc6ODk6XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjkwOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy05MS1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6OTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xubW0vZGFtb24vS2NvbmZpZzo5MzpcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxubW0vZGFtb24vS2NvbmZpZy05NC1cdCAgdGhvc2UuXG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZzoxMDE6XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTAyOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEwNDpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjEwOTpcdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTEyOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcbm1tL2RhbW9uL0tjb25maWctMTE0LVx0ICBtZXRyaWNzLlxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWc6MTE3Olx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExODpcdGRlcGVuZHMgb24gREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XHRkZWZhdWx0IERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTIwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMjE6XHQgIFdoZXRoZXIgdG8gZW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdC4gIFVzZXJzIGNhbiBkaXNhYmxlIGl0IGluXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cdCAgYm9vdCBvciBydW50aW1lIHVzaW5nIGl0cyAmIzM5O2VuYWJsZWQmIzM5OyBwYXJhbWV0ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg0MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipFeGFtaW5pbmcgQnVpbGQgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYGNvcmUuY2AgYW5kIGBzeXNmcy1zY2hlbWVzLmNgIGFyZSBiZWluZyBjb21waWxlZC4gR2l2ZW4gdGhlIHByb2plY3Qgc3RydWN0dXJlLCBJJiMzOTttIHByZXR0eSBzdXJlIHRoZSByZWxldmFudCBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGluIGBtbS9kYW1vbi9NYWtlZmlsZWAuIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IG1ha2VmaWxlIGFuZCBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgY29uZmlndXJpbmcgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBRdW90YSBHb2FsIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGZvciBxdW90YSBtYW5hZ2VtZW50IGJldHRlciwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgcXVvdGEgZ29hbCBhbmQgdGhlIGh1Z2VwYWdlIG1lbW9yeSBiaW5kaW5nIHBvaW50LiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IGRpcmVjdCBwYXRoIHRvIHRoYXQgdW5kZXJzdGFuZGluZyBpbnZvbHZlcyB0cmFjaW5nIGhvdyBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgaXMgY2FsbGVkIGFuZCBob3cgaXRzIGFjdGlvbnMgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsbG9jYXRpb24gb2YgaHVnZSBwYWdlcyBpbnRlcnNlY3RzIHdpdGggdGhlIHNldHRpbmcgb3IgdXBkYXRpbmcgb2YgcXVvdGEgdGFyZ2V0cywgYW5kIHRoZXJlZm9yZSwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHdoZXJlIGBkYW1vc19odWdlcGFnZV9tZW1fYnBgIGlzIGJlaW5nIHVzZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgdmFsdWVzIGFyZSBoYW5kbGVkIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3Igb3RoZXIgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSB0d28gY29tcG9uZW50cyBpbmZsdWVuY2UgZWFjaCBvdGhlciBhbmQgYW55IGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBhcmlzZSB3aGVuIHRoZXkgaW50ZXJhY3QsIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvciB1bmRlciBsb2FkLiBUaGF0IGxldmVsIG9mIGRldGFpbCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIHRoZSBxdW90YSBnb2FsIHByb2Nlc3NpbmcgbG9naWMsIGVzcGVjaWFsbHkgd2hlbiBodWdlIHBhZ2VzIGFyZSBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMwMTA9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAyNS1cbm1tL2RhbW9uL2NvcmUuYzozMDI2OnN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0zMDI3LVx0XHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDY2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA3Mi1cdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcbm1tL2RhbW9uL2NvcmUuYzozMDczOlx0XHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwNzQtXHRcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBFeGVjdXRpb24gb2YgYGRhbW9zX3F1b3RhX3Njb3JlYCBpbiBEQU1PTioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBvYmplY3RpdmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYGRhbW9zX3F1b3RhX3Njb3JlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBhbmQgd2l0aGluIHdoaWNoIHBhcnQgb2YgdGhlIERBTU9OIGluZnJhc3RydWN0dXJlIGl0IG9wZXJhdGVzLiBGaXJzdCwgSeKAmWxsIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCB0ZXh0dWFsIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgd2l0aGluIHRoZSBEQU1PTiBzb3VyY2UuIFRoYXQmIzM5O3MgbGlrZWx5IHRvIGltbWVkaWF0ZWx5IHJldmVhbCB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHByb2JhYmx5IGFsbCBjYWxsIHNpdGVzLiAKCk9uY2UgSSBoYXZlIHRoZSBjYWxsIHNpdGVzLCBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0cyBpbiB3aGljaCBgZGFtb3NfcXVvdGFfc2NvcmVgIGlzIHVzZWQuIFdoYXQgYXJlIHRoZSBpbnB1dHMgdG8gdGhlIGZ1bmN0aW9uIGF0IGVhY2ggY2FsbD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBJcyBpdCBjYWxsZWQgZnJvbSBhIGhvdCBwYXRoLCBvciBzb21ldGhpbmcgbGVzcyBjcml0aWNhbD8gVGhpcyB3aWxsIGhlbHAgbWUgYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHkgdGhhdCByZWxpZXMgb24gdGhpcyBxdW90YSBzY29yZS4KCkkgd2lsbCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgREFNT04gZGF0YSBzdHJ1Y3R1cmVzIHRvIHNlZSBob3cgdGhlIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYW5kIGNvbnN1bWVkLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIHN0cnVjdHVyZSByZWxhdGVkIHRvIG1lbW9yeSBibG9ja3MsIHByb2Nlc3Nlcywgb3IgZmlsZSBzeXN0ZW1zIGlzIGluIHBsYXkuIEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSBkYXRhIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhcnQgb2YgdGhlIHN5c3RlbSYjMzk7cyBkZXNpZ24uIFRoaXMgd2lsbCBlbmFibGUgbWUgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgZGVidWdnaW5nLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbCBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19xdW90YV9zY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMDI2PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA2NS0vKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXG5tbS9kYW1vbi9jb3JlLmM6MzA2NjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzA2Ny17XG4tLVxubW0vZGFtb24vY29yZS5jPTMwODI9c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA4NC1cdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xubW0vZGFtb24vY29yZS5jOjMwODU6XHR1bnNpZ25lZCBsb25nIHNjb3JlID0gZGFtb3NfcXVvdGFfc2NvcmUoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzA4Ni1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzA5MT1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMwOTQtXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbm1tL2RhbW9uL2NvcmUuYzozMDk1Olx0dW5zaWduZWQgbG9uZyBzY29yZSA9IGRhbW9zX3F1b3RhX3Njb3JlKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTMwOTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT1MgUXVvdGEgR29hbCBKb3VybmV5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PUyBxdW90YSBidXNpbmVzcyBhbmQgZmlndXJlIG91dCB0aGUgbWVjaGFuaWNzIGJlaGluZCBpdC4gU3BlY2lmaWNhbGx5LCBob3cgdXNlciBzcGFjZSwgdGhyb3VnaCBzeXNmcywgcGxheXMgaXRzIHBhcnQgaW4gc2V0dGluZyBhbmQgbWFuYWdpbmcgdGhlc2UgcXVvdGFzLiBJIHNlZSB0aGF0IHVzZXJzIGFyZSBzZXR0aW5nIHVwIHRoZXNlIERBTU9TIHNjaGVtZXMgYW5kIHF1b3RhIGdvYWxzIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmAgcGF0aC4gVGhlIGtleSBzZWVtcyB0byBiZSB0aGUgYHRhcmdldF9tZXRyaWNgIHN5c2ZzIGF0dHJpYnV0ZTsgdGhleSYjMzk7cmUgd3JpdGluZyAmIzM0O2h1Z2VwYWdlX21lbV9icCYjMzQ7IHRvIHRoaXMuCgpTbywgd2hlbiBEQU1PTiBzcHJpbmdzIGludG8gYWN0aW9u4oCUZWl0aGVyIGR1cmluZyBpdHMgcmVndWxhciBzYW1wbGluZyBhbmQgYWdncmVnYXRpb24gY3ljbGVzIG9yIHdoZW4gYSB1c2VyIGNvbW1pdHMgYSBuZXcgc2NoZW1lIGFuZCBraWNrcyBvZmYgdGhlIG1vbml0b3LigJRpdCBhc3Nlc3NlcyB0aGUgcXVvdGEgc2NvcmUgYXQgZWFjaCBpbnRlcnZhbC4gSXQgYXBwZWFycyB0aGF0IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgY2FsY3VsYXRpbmcgdGhlIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgcmF0aW8gYW5kIHRoZW4gbWFraW5nIHRoZSBxdW90YSBhZGp1c3RtZW50cy4KCk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgdGFyZ2V0X21ldHJpY2AgaW50ZXJhY3Rpb24gcmVhbGx5IHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBgdGFyZ2V0X21ldHJpY19zaG93YCBhbmQgYHRhcmdldF9tZXRyaWNfc3RvcmVgIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gTXkgZm9jdXMgd2lsbCBiZSBvbiBob3cgYGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc2AgaXMgdXRpbGl6ZWQgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIG1hcHBpbmcgYmV0d2VlbiB1c2VyLXNwYWNlIGlucHV0IGFuZCB0aGUgYWN0dWFsIHF1b3RhIGdvYWwgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjM0PXN0YXRpY1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzU6c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXHR7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjg0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODU6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4Ni1cdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lICptZXRyaWNfbmFtZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjg3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODg6XHRcdG1ldHJpY19uYW1lID0gXHUwMDI2ZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW2ldO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODktXHRcdGlmIChtZXRyaWNfbmFtZS1cdTAwM2VtZXRyaWMgPT0gZ29hbC1cdTAwM2VtZXRyaWMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyOTU9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMwMS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzAyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXMpOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDMtXHRcdHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMwNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzA1Olx0XHRtZXRyaWNfbmFtZSA9IFx1MDAyNmRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tpXTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzA2LVx0XHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBtZXRyaWNfbmFtZS1cdTAwM2VuYW1lKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjM1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYGRhbW9zX2h1Z2VwYWdlX21lbV9icGAgaW4gREFNT04qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYCBmdW5jdGlvbiBpcyBhY3R1YWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBSaWdodCwgdGhlIGNvZGUgc2hvd3MgaXQgY2FuIGJlIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8uLi5gIHRvIHNldCBgdGFyZ2V0X21ldHJpY2AgdG8gJiMzNDtodWdlcGFnZV9tZW1fYnAmIzM0Oy4gR29vZCwgc28gREFNT04mIzM5O3Mga3RocmVhZCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAsIHdoaWNoICp0aGVuKiBjYWxscyBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYC4gQ29uZmlybWVkLCBpdCYjMzk7cyByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYC4gKkhtbSosIGl0IHNlZW1zIHRvIGNhbGN1bGF0ZSBhIHJhdGlvIG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYXZhaWxhYmxlIG1lbW9yeSwgZXNzZW50aWFsbHkgYSBwZXJjZW50YWdlLiBJdCBsb29rcyBhdCBgdG90YWxyYW1fcGFnZXMoKWAsIGBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpYCwgYW5kIHRoZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgY291bnRzIHRocm91Z2ggYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKWAsIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX1NITUVNX1RIUFMpYCwgYW5kIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUylgLiBUaGUgcmVhbCBjYWxjdWxhdGlvbiBzZWVtcyB0byBiZSBgbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcylgLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLiBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHRocGAgdmFyaWFibGUsIG1lYW5pbmcgVEhQIHBhZ2UgY291bnQsIGlzIGluIHVuaXRzIG9mIGJhc2UgcGFnZXMgKG9yZGVyLTApIG9yIHRoZSB1bml0cyBvZiB0aGUgVEhQIGl0c2VsZi4gV2FpdCBhIG1pbnV0ZSEgVGhlIGNvdW50IG9mIGBOUl9BTk9OX1RIUFNgIGlzIGluIGBIUEFHRV9QTURfTlJgIHVuaXRzLCBidXQgdGhlIHRvdGFsIHBhZ2VzIGlzIGluIGBQQUdFX1NJWkVgIHVuaXRzLiBUaGlzIGNvdWxkIHBvdGVudGlhbGx5IGNhdXNlIGEgc2NhbGluZyBidWcuIFdoZXRoZXIgaXQmIzM5O3MgYSBidWcgb3Igbm90LCBpdCYjMzk7cyBhIGNoYW5nZSBhbmQsIGluIGFueSBjYXNlLCBpdCYjMzk7cyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkIHdpdGhpbiBtbS9kYW1vbi4KClNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBzZWU6IEl0IGludHJvZHVjZXMgYSBuZXcgbWV0cmljIChgaHVnZXBhZ2VfbWVtX2JwYCkgZm9yIERBTU9OIHF1b3RhIGdvYWxzLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSB0aGUgdXNlci1zcGFjZSBzeXNmcyBpbnRlcmZhY2UgKGBEQU1PTl9TWVNGU2ApLiBJdCYjMzk7cyBleGVjdXRlZCB3aXRoaW4ga2VybmVsIG1vbml0b3JpbmcgbG9vcHMgKGBkYW1vbl9rdGhyZWFkYCwgYGRhbW9zX3F1b3RhX3Njb3JlYCwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgKS4gSXQmIzM5O3MgdG90YWxseSByZWFjaGFibGUgaW4gUUVNVS9HQ0UsIHdoaWNoIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3RpbmcuIEFuZCBpbXBvcnRhbnRseSwgaXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYWVtb24gb3BlcmF0ZXMuIFllcCwgV29ydGhGdXp6aW5nID0gdHJ1ZS4KCk5vdyBJIHNob3VsZCBsb29rIGludG8gdGhlIG5vbi1ob3QtcGF0aCBmb2N1cyBzeW1ib2xzIGFuZCByZXF1aXJlZCBjb25maWdzOiBJIG5lZWQgdG8gZXhhbWluZSBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBhbmQgYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgYW5kIHdoYXQgZW50cnkgcG9pbnRzIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXJnZXRfbWV0cmljX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjk0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyOTU6c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjk2LVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIFN5c2ZzIEludGVyZmFjZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbW0vZGFtb25gIHN5c2ZzIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBub24tc3RhdGljIG9uZXMsIGFzIHRob3NlIGFyZSB0aGUgb25lcyBleHBvc2VkIGZvciBleHRlcm5hbCBjb250cm9sIG9yIGludGVyYWN0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyB0aGUgZW50cnkgcG9pbnRzLiBUaGV5JiMzOTtyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoYXQgb3JjaGVzdHJhdGUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbiBhbmQgdGhlIERBTU9OIGNvcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXNwZWN0cyBvZiB0aGUgREFNT04gc3Vic3lzdGVtcyBhcmUgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSB3aGVyZSBuZXcgbW9uaXRvcnMgYW5kIGFjdGlvbnMgYXJlIGV4cG9zZWQsIGFuZCBob3cgdG8gY2hhbmdlIGN1cnJlbnQgb25lcy4gVWx0aW1hdGVseSwgdW5kZXJzdGFuZGluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBpbGx1bWluYXRlIHRoZSBjb250cm9sIGZsb3cgYW5kIGV4dGVuc2liaWxpdHkgb2YgdGhlIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIG1ldHJpY19uYW1lLVx1MDAzZW5hbWUpO1xuMTI5MTpcdFx0fVxuMTI5MjpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjkzOlx0fVxuMTI5NDpcdFxuMTI5NTpcdHN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4xMjk2Olx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4xMjk3Olx0e1xuMTI5ODpcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcbjEyOTk6XHRcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG4xMzAwOlx0XHRpbnQgaTtcbjEzMDE6XHRcbjEzMDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbjEzMDM6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lICptZXRyaWNfbmFtZTtcbjEzMDQ6XHRcbjEzMDU6XHRcdFx0bWV0cmljX25hbWUgPSBcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XG4xMzA2Olx0XHRcdGlmIChzeXNmc19zdHJlcShidWYsIG1ldHJpY19uYW1lLVx1MDAzZW5hbWUpKSB7XG4xMzA3Olx0XHRcdFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWNfbmFtZS1cdTAwM2VtZXRyaWM7XG4xMzA4Olx0XHRcdFx0cmV0dXJuIGNvdW50O1xuMTMwOTpcdFx0XHR9XG4xMzEwOlx0XHR9XG4xMzExOlx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzMTI6XHR9XG4xMzEzOlx0XG4xMzE0Olx0c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4xMzE1Olx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuMTMxNjpcdHtcbjEzMTc6XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxuMTMxODpcdFx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xuMTMxOTpcdFxuMTMyMDpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbjEzMjE6XHR9XG4xMzIyOlx0XG4xMzIzOlx0c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuMTMyNDpcdFx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMTMyNTpcdHtcbjEzMjY6XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxuMTMyNzpcdFx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xuMTMyODpcdFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuMTMyOTpcdFxuMTMzMDpcdFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuMTMzMTpcdH1cbjEzMzI6XHRcbjEzMzM6XHRzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4xMzM0Olx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuMTMzNTpcdHtcbjEzMzY6XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxuMTMzNzpcdFx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xuMTMzODpcdFxuMTMzOTpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG4xMzQwOlx0fVxuMTM0MTpcdFxuMTM0MjpcdHN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4xMzQzOlx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4xMzQ0Olx0e1xuMTM0NTpcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG4xMzQ2Olx0XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG4xMzQ3Olx0XHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcdTAwMjZnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xuMTM0ODpcdFxuMTM0OTpcdFx0LyogZmVlZCBjYWxsYmFjayBzaG91bGQgY2hlY2sgZXhpc3RlbmNlIG9mIHRoaXMgZmlsZSBhbmQgcmVhZCB2YWx1ZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI5MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFF1b3RhIEdvYWwgQXBwbGljYXRpb24gaW4gREFNT04qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgcXVvdGEgZ29hbHMgYXJlIGFjdHVhbGx5ICphcHBsaWVkKiB3aXRoaW4gdGhlIHN5c2ZzIHRvIERBTU9OIHBpcGVsaW5lLiBJIHdhbnQgdG8gdHJhY2UgdGhhdCBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGUgdHJhbnNmb3JtYXRpb25zLCBhbmQgdGhlIHBvaW50cyBvZiBpbnRlcmFjdGlvbi4gV2hlcmUgZXhhY3RseSBkb2VzIHRoZSBpbmZvcm1hdGlvbiBvcmlnaW5hdGluZyBmcm9tIHRoZSBzeXNmcyBpbnRlcmZhY2UgZ2V0IGluY29ycG9yYXRlZCBpbnRvIHRoZSBEQU1PTiBjb250ZXh0PyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzPyBJIG5lZWQgdG8gbWFwIG91dCBob3cgdGhlIHF1b3RhIHRhcmdldHMgZGVmaW5lZCBpbiBzeXNmcyBldmVudHVhbGx5IGluZmx1ZW5jZSB0aGUgbW9uaXRvcmluZyBhbmQgYWN0aW9ucyB0YWtlbiBieSB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gYWZ0ZXIgdGhlIHByZWNpc2UgbWVjaGFuaXNtOyB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiBob3cgdGhlc2UgZ29hbHMgcHJvcGFnYXRlIGFuZCBhcmUgdWx0aW1hdGVseSB1c2VkIHRvIG9wdGltaXplIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1jb21tb24uaD01MT1pbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUzLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk4OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTktXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxNTE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjE2NC1cdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdO1xubW0vZGFtb24vc3lzZnMuYzoyMTY1Olx0cmV0dXJuIGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3lzZnNfY3R4LVx1MDAzZXNjaGVtZXMsIGN0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxNjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IERBTU9OIGhhbmRsZXMgcXVvdGEgZ29hbHMgYW5kIHNjaGVtZXMuIE15IGluaXRpYWwgcGxhbiBpcyB0byBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHR3byBrZXkgZmlsZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06IGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGFuZCBgbW0vZGFtb24vY29yZS5jYC4gSSYjMzk7bSBob3BpbmcgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlc2UgZmlsZXMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIGRlZmluaW5nLCBtYW5hZ2luZywgb3IgaW50ZXJhY3Rpbmcgd2l0aCBxdW90YSBnb2FscyBhbmQgdGhlIHZhcmlvdXMgc2NoZW1lcyB1c2VkIHdpdGhpbiBEQU1PTi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc19zZXRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTE9aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIzMzY9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X2FjY2Vzc19wYXR0ZXJuKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzYwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzNjE6c3RhdGljIGludCBkYW1vc19zeXNmc19zZXRfZGVzdHMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzNjIte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNDE3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQzNi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDM3OnN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfc2V0X2ZpbHRlcl9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNDM4LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjUwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZV9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICpzY2hlbWUpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MDgtXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjUwOTpcdGVyciA9IGRhbW9zX3N5c2ZzX3NldF9kZXN0cyhzY2hlbWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1MTAtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTE3LVx0XHRnb3RvIHJtZGlyX3B1dF9xdW90YXNfYWNjZXNzX3BhdHRlcm5fb3V0O1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI1MTg6XHRlcnIgPSBkYW1vc19zeXNmc19zZXRfZmlsdGVyX2RpcnMoc2NoZW1lKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTE5LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk4OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTktXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxNTE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjE2NC1cdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdO1xubW0vZGFtb24vc3lzZnMuYzoyMTY1Olx0cmV0dXJuIGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3lzZnNfY3R4LVx1MDAzZXNjaGVtZXMsIGN0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxNjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBTeXNmcyBRdW90YSBDb252ZXJzaW9uIHRvIERBTU9OIFN0cnVjdHVyZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIHN5c2ZzIHF1b3RhIHJlcHJlc2VudGF0aW9ucyBhcmUgYmVpbmcgdHJhbnNsYXRlZCBpbnRvIHRoZSBEQU1PTiBzdHJ1Y3R1cmVzLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYnJpZGdlIHRoZSBnYXAuIEkga25vdyB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHRoZXJlLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgcXVlcnlpbmcgb3Igc2VhcmNoaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgZnVuY3Rpb25zIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhpcyBwdXJwb3NlLCBob3BpbmcgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHBhdGhzLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGZyb20gc3lzZnMgZGF0YSB0byBEQU1PTi1jb21wYXRpYmxlIGZvcm1hdCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdW5kZXJzdGFuZCB0aGUgZXhpc3RpbmcgbWVjaGFuaXNtIGZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc18uKnF1b3RhX2dvYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIwNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc193YXRlcm1hcmtzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTU6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTYtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMjQ6c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNjpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNy19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjgwLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjgxOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjgyOlx0XHRcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjgzLVx0aW50IGk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyOTU9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI5Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI5ODpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI5OTpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMwMC1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzE0PXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzE2LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzE3Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMxODpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzE5LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzIzPXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyNS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyNjpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMjc6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMzMz1zdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMzY6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Rcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM3Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzgtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNDI9c3RhdGljIHNzaXplX3QgY3VycmVudF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0NTpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNDY6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Ny1cdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNTM9c3RhdGljIHNzaXplX3QgbmlkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNTUte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNTY6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Rcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzU3Olx0XHRcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNTgtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNjM9c3RhdGljIHNzaXplX3QgbmlkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzY1LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzY2Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM2NzpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzY4LVx0aW50IGVyciA9IGtzdHJ0b2ludChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlbmlkKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM3ND1zdGF0aWMgc3NpemVfdCBwYXRoX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNzYte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNzc6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNzg6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNzktXHRpbnQgbGVuO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzg4PXN0YXRpYyBzc2l6ZV90IHBhdGhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzOTAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzOTE6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzOTI6XHRcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzOTMtXHRjaGFyICpwYXRoID0ga21hbGxvY19hcnJheShzaXplX2FkZChjb3VudCwgMSksIHNpemVvZigqcGF0aCksXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMDpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19xdW90YV9nb2FsX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxMS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMjpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMzpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxNC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxOC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDE5OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfbWV0cmljX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXHRcdF9fQVRUUl9SV19NT0RFKHRhcmdldF9tZXRyaWMsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjMtXHRcdF9fQVRUUl9SV19NT0RFKHRhcmdldF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDI1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjYtXHRcdF9fQVRUUl9SV19NT0RFKGN1cnJlbnRfdmFsdWUsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfbmlkX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjktXHRcdF9fQVRUUl9SV19NT0RFKG5pZCwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDMxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9wYXRoX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzItXHRcdF9fQVRUUl9SV19NT0RFKHBhdGgsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNDpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzU6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF9tZXRyaWNfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzY6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF92YWx1ZV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNzpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzODpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfbmlkX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM5Olx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9wYXRoX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQwLVx0TlVMTCxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQxLX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0MjpBVFRSSUJVVEVfR1JPVVBTKGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDU6XHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZSxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ2LVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDc6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQ4LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ1NDpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTUtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTY6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqKmdvYWxzX2FycjtcdC8qIGNvdW50ZWQgYnkgbnIgKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU3LVx0aW50IG5yO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NjA6c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDYxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDYyOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2My19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDY1OnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JtX2RpcnMoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2NjpcdFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2Fscylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDY3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDY4Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKipnb2Fsc19hcnIgPSBnb2Fscy1cdTAwM2Vnb2Fsc19hcnI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2OS1cdGludCBpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDc5LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODA6c3RhdGljIGludCBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hZGRfZGlycyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDgxOlx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzLCBpbnQgbnJfZ29hbHMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4MzpcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICoqZ29hbHNfYXJyLCAqZ29hbDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg0LVx0aW50IGVyciwgaTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODY6XHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKGdvYWxzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg3LVx0aWYgKCFucl9nb2Fscylcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5Ni1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2dvYWxzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0OTc6XHRcdGdvYWwgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2FsbG9jKCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5OC1cdFx0aWYgKCFnb2FsKSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ5OTpcdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKGdvYWxzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTAwLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTAzLVx0XHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZnb2FsLVx1MDAzZWtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUwNDpcdFx0XHRcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfa3R5cGUsIFx1MDAyNmdvYWxzLVx1MDAzZWtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwNS1cdFx0XHRcdFwmIzM0OyVkXCYjMzQ7LCBpKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwNy1cdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZnb2FsLVx1MDAzZWtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDg6XHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwOS1cdFx0XHRyZXR1cm4gZXJyO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTE4PXN0YXRpYyBzc2l6ZV90IG5yX2dvYWxzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MjAte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MjE6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzID0gY29udGFpbmVyX29mKGtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUyMjpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MjMtXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE1Mjc9c3RhdGljIHNzaXplX3QgbnJfZ29hbHNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1Mjkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MzA6XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MzEtXHRpbnQgbnIsIGVyciA9IGtzdHJ0b2ludChidWYsIDAsIFx1MDAyNm5yKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUzNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTM4Olx0Z29hbHMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTM5LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQxLVx0XHRyZXR1cm4gLUVCVVNZO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NDI6XHRlcnIgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hZGRfZGlycyhnb2FscywgbnIpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NDMtXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU1MDpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTI6XHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzLCBrb2JqKSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1My19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTU1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfbnJfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1Ni1cdFx0X19BVFRSX1JXX01PREUobnJfZ29hbHMsIDA2MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU1ODpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTU5Olx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfbnJfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjAtXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjEtfTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTYyOkFUVFJJQlVURV9HUk9VUFMoZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU2NDpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTY1Olx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjYtXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU2NzpcdC5kZWZhdWx0X2dyb3VwcyA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2dyb3Vwcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY4LX07XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2ODQ9c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODYtXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjg3Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2Fscztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg4LVx0dW5zaWduZWQgbG9uZyBtcztcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTcwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3F1b3Rhc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpxdW90YXMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MDQtXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzA1Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2Fscztcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzA2LVx0aW50IGVycjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcxOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzIwOlx0Z29hbHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hbGxvYygpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MjEtXHRpZiAoIWdvYWxzKSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MjUtXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZnb2Fscy1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3MjY6XHRcdFx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUsIFx1MDAyNnF1b3Rhcy1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MjctXHRcdFx0XCYjMzQ7Z29hbHNcJiMzNDspO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzM4PXN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3F1b3Rhc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3Rhcylcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0MC1cdGtvYmplY3RfcHV0KFx1MDAyNnF1b3Rhcy1cdTAwM2V3ZWlnaHRzLVx1MDAzZWtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDE6XHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKHF1b3Rhcy1cdTAwM2Vnb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0Mi1cdGtvYmplY3RfcHV0KFx1MDAyNnF1b3Rhcy1cdTAwM2Vnb2Fscy1cdTAwM2Vrb2JqKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODUyOlx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKnN5c2ZzX2dvYWxzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NTMtXHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NTgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc19nb2Fscy1cdTAwM2VucjsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODU5Olx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqc3lzZnNfZ29hbCA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2MC1cdFx0XHRzeXNmc19nb2Fscy1cdTAwM2Vnb2Fsc19hcnJbaV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDk0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBpbnRlcmFjdHMgd2l0aCBxdW90YXMsIHNjaGVtZXMsIGFuZCBzeXNmcywgYW5kIGhvdyB0aG9zZSBpbnRlcmFjdGlvbnMgYXJlIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgc3RhdGljIHN5bWJvbHMuIFRoZSBjb3JlIERBTU9OIHNvdXJjZSBjb2RlIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuCgoqKkRBTU9OJiMzOTtzIE5vbi1TdGF0aWMgU3ltYm9sIEV4cGxvcmF0aW9uKioKCkZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIGBtbS9kYW1vbi9zeXNmcy1jb21tb24uaGAgYW5kIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLiBUaGVzZSBhcmUgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludHMgdG8gaW52ZXN0aWdhdGUgaG93IHF1b3Rhcywgc2NoZW1lcywgYW5kIHN5c2ZzIGFyZSBpbnRlcndvdmVuIHdpdGggdGhlIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgaW5pdGlhbCBwcm9tcHQgbWVudGlvbnMgdGhvc2Ugc3BlY2lmaWMgYXJlYXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGNvbmZpZ3VyYXRpb25zIG9yIGNvbnRyb2xzIG1pZ2h0IGJlIGR5bmFtaWNhbGx5IGFkanVzdGVkIG9yIGV4cG9zZWQgdGhyb3VnaCBzeXNmcywgYW5kIGhvdyBzY2hlbWVzIGNvdWxkIGJlIHRpZWQgaW50byBlbmZvcmNpbmcgb3IgYWRqdXN0aW5nIHF1b3Rhcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvbW1vbiBDb2RlIGZvciBEQU1PTiBTeXNmcyBJbnRlcmZhY2VcbiAgIDQ6XHQgKi9cbiAgIDU6XHRcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kYW1vbi5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4gICA4Olx0XG4gICA5Olx0ZXh0ZXJuIHN0cnVjdCBtdXRleCBkYW1vbl9zeXNmc19sb2NrO1xuICAxMDpcdFxuICAxMTpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSB7XG4gIDEyOlx0XHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuICAxMzpcdFx0dW5zaWduZWQgbG9uZyBtaW47XG4gIDE0Olx0XHR1bnNpZ25lZCBsb25nIG1heDtcbiAgMTU6XHR9O1xuICAxNjpcdFxuICAxNzpcdHN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXG4gIDE4Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWluLFxuICAxOTpcdFx0XHR1bnNpZ25lZCBsb25nIG1heCk7XG4gIDIwOlx0dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKTtcbiAgMjE6XHRcbiAgMjI6XHRleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc191bF9yYW5nZV9rdHlwZTtcbiAgMjM6XHRcbiAgMjQ6XHQvKlxuICAyNTpcdCAqIHNjaGVtZXMgZGlyZWN0b3J5XG4gIDI2Olx0ICovXG4gIDI3Olx0XG4gIDI4Olx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMge1xuICAyOTpcdFx0c3RydWN0IGtvYmplY3Qga29iajtcbiAgMzA6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKipzY2hlbWVzX2FycjtcbiAgMzE6XHRcdGludCBucjtcbiAgMzI6XHR9O1xuICAzMzpcdFxuICAzNDpcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpO1xuICAzNTpcdHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKTtcbiAgMzY6XHRcbiAgMzc6XHRleHRlcm4gY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVzX2t0eXBlO1xuICAzODpcdFxuICAzOTpcdGludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gIDQwOlx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbiAgNDE6XHRcbiAgNDI6XHR2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxuICA0MzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbiAgNDQ6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiAgNDU6XHRcbiAgNDY6XHR2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4gIDQ3Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiAgNDg6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxuICA0OTpcdFx0XHRib29sIHRvdGFsX2J5dGVzX29ubHksIHVuc2lnbmVkIGxvbmcgc3pfZmlsdGVyX3Bhc3NlZCk7XG4gIDUwOlx0XG4gIDUxOlx0aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbiAgNTI6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xuICA1MzpcdFxuICA1NDpcdGludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuICA1NTpcdFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuICA1NjpcdFxuICA1NzpcdHZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXG4gIDU4Olx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuICA1OTpcdFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuICA2MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERBTU9OIFF1b3RhIE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBxdW90YSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhZGRpbmcgYW5kIHNldHRpbmcgcXVvdGFzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBhZGRzIG5ldyBxdW90YSBzY2hlbWVzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AgYW5kIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYC4gVGhlc2Ugc291bmQgbGlrZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcXVvdGEgbWFuYWdlbWVudCB0aHJvdWdoIHN5c2ZzLCB3aGljaCBpcyB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgcXVvdGFzIGFyZSAqZGVmaW5lZCogYW5kICppbml0aWFsaXplZCouICBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBmdW5jdGlvbiBvciBzb21ldGhpbmcgd2l0aCBhIHNpbWlsYXIgcm9sZSBpcyBhY3R1YWxseSAqZGVmaW5lZCouICBTaW5jZSB0aGlzIGlzIGNvcmUgcXVvdGEgbWFuYWdlbWVudCBjb2RlLCBpdCYjMzk7cyBtb3N0IGxpa2VseSB0byBiZSBsb2NhdGVkIHdpdGhpbiBlaXRoZXIgYGNvcmUuY2AgZmlsZSBvciB3aXRoaW4gdGhlIGBsaW51eC9kYW1vbi5oYCBoZWFkZXIgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTYyMT12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4tLVxubW0vZGFtb24vY29yZS5jLTYyNi1cbm1tL2RhbW9uL2NvcmUuYzo2Mjc6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTYyOC1cdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4tLVxubW0vZGFtb24vY29yZS5jPTExNjI9aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExNzYtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTE3NzpcdFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTc4LVx0XHRcdFx0c3JjX2dvYWwtXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9kYW1vbi9scnVfc29ydC5jOjIzODpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVx0LyogYWltIDAuMiAlIGdvYWwgY29uZmxpY3QsIHRvIGtlZXAgbGl0dGxlIHBpbmcgcG9uZyAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDQtXHRcdFx0MTAwMDAgLSBhY3RpdmVfbWVtX2JwICYjNDM7IDIpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXHRcdFx0XHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVx0XHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2NTpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXHUwMDNlbWV0cmljLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjYtXHRcdFx0XHRzeXNmc19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTItXHRcdCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg1MzpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODU0LVx0XHRcdFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgUmV2aWV3IGZvciBEQU1PTioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIERBTU9OIGltcGxlbWVudGF0aW9uLiBGaXJzdCwgYSBxdWljayBzY2FuIG9mIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSB0ZWxscyBtZSB0aGUgY29yZSBgREFNT05gIG9wdGlvbiBpcywgb2YgY291cnNlLCBjcml0aWNhbC4gQW5kLCBwcmVkaWN0YWJseSwgYERBTU9OX1NZU0ZTYCBpcyBjb250aW5nZW50IG9uIGJvdGggYERBTU9OYCBhbmQgYFNZU0ZTYCBiZWluZyBlbmFibGVkLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgc3VwcG9ydGluZyBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQ6IEkmIzM5O2xsIHJldmlldyB0aGVzZTogYGRhbW9zX25ld19xdW90YV9nb2FsYCwgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGBkYW1vbl9zeXNmc19hZGRfc2NoZW1lc2AsIGFuZCBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIHRoZSBjb250cm9sIHBvaW50cy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBjdXJpb3VzIGlmIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBicm9hZGVyIHZpc2liaWxpdHkgb3IgcG90ZW50aWFsIGludGVyZmFjZSBwb2ludHMuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIHdhdGNoIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExMzk9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTExNTAtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTE1MTogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTExNTItICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTExNjEtICovXG5tbS9kYW1vbi9jb3JlLmM6MTE2MjppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMTYzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE4Nz1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExOTMtXHRkc3QtXHUwMDNlc3ogPSBzcmMtXHUwMDNlc3o7XG5tbS9kYW1vbi9jb3JlLmM6MTE5NDpcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTE5NS1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjItXHRcdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTIzOlx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZxdW90YSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyNC1cdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDktXHRcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUwOlx0XHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTEtXHRcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjItXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODYzOlx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTk0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlbGV2YW50IEtlcm5lbCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvbiB0ZXN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgYWxsIHBvdGVudGlhbCB2YXJpYWJsZXMuCgpJJiMzOTt2ZSBnb3QgYSBzaG9ydCBsaXN0IG9mIHBvdGVudGlhbGx5IGltcG9ydGFudCBjb25maWd1cmF0aW9ucyBoZXJlOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgU1lTRlNgLCBhbmQgYWxzbyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGUgcHJlc2VuY2Ugb2YgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgY29kZSBzZWVtcyB0byBjYWxjdWxhdGUgdGhlIFRIUCBtZW1vcnkgcmF0aW8gdXNpbmcgYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKWAuIFRodXMsIGVuYWJsaW5nIFRIUCBpcyBoaWdobHkgc2lnbmlmaWNhbnQsIGV2ZW4gKnJlcXVpcmVkKiwgZm9yIHByb3BlciB0ZXN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIFRIUCBpcyBlbmFibGVkIGFuZCBpZiB0aGF0IGNoYW5nZXMgYmFzZWQgb24gYW55IG9mIHRoZSBvdGhlciBjb25maWdzLgoKU28sIG5leHQsIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgTlJfQU5PTl9USFBTYCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSWYgdGhlcmUmIzM5O3Mgbm8gZGVwZW5kZW5jeSwgdGhlbiBwZXJoYXBzIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgY2F1c2VzIFRIUHMgdG8gYmUgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUga2VybmVsLCBvciBhdCBsZWFzdCBiZSBjb25maWd1cmFibGUuIEkgbWF5IGJlIG1pc3NpbmcgYSBrZXkgZGVwZW5kZW5jeSBvciBlbmFibGluZyBjb25maWcuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2VzLCBhbmQgbWF5YmUgc29tZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMsIHRvIGNsYXJpZnkgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TlJfQU5PTl9USFBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTIzOT1lbnVtIG5vZGVfc3RhdF9pdGVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTI3MS1cdE5SX0ZJTEVfUE1ETUFQUEVELFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoyNzI6XHROUl9BTk9OX1RIUFMsXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTI3My1cdE5SX1ZNU0NBTl9XUklURSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTM0Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1zdGF0X2l0ZW1fcHJpbnRfaW5fdGhwKGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTM1MS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MzUyOlx0cmV0dXJuIGl0ZW0gPT0gTlJfQU5PTl9USFBTIHx8XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTM1My1cdCAgICAgICBpdGVtID09IE5SX0ZJTEVfVEhQUyB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI0MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW16b25lLmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbWVtb3J5IHpvbmUgc3RydWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIFNwZWNpZmljYWxseSwgSSB0aGluayB0aGF0IHNlY3Rpb24gYXJvdW5kIGxpbmUgMjcwIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGRlZmluaXRpb24gSSYjMzk7bSBhZnRlciwgYXQgbGVhc3QgdG8gZ2V0IHJlLW9yaWVudGVkLiBJIHJlbWVtYmVyIGl0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBtZW1iZXJzIHJlbGF0ZWQgdG8gYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBhcmUgbGlrZWx5IGRlZmluZWQuIEkgd2FudCBhIHF1aWNrIHJldmlldyBvZiBob3cgdGhlIHpvbmVzIGFyZSBvcmdhbml6ZWQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2NTpcdFx0TlJfRklMRV9ESVJUWSxcbiAyNjY6XHRcdE5SX1dSSVRFQkFDSyxcbiAyNjc6XHRcdE5SX1NITUVNLFx0XHQvKiBzaG1lbSBwYWdlcyAoaW5jbHVkZWQgdG1wZnMvR0VNIHBhZ2VzKSAqL1xuIDI2ODpcdFx0TlJfU0hNRU1fVEhQUyxcbiAyNjk6XHRcdE5SX1NITUVNX1BNRE1BUFBFRCxcbiAyNzA6XHRcdE5SX0ZJTEVfVEhQUyxcbiAyNzE6XHRcdE5SX0ZJTEVfUE1ETUFQUEVELFxuIDI3MjpcdFx0TlJfQU5PTl9USFBTLFxuIDI3MzpcdFx0TlJfVk1TQ0FOX1dSSVRFLFxuIDI3NDpcdFx0TlJfVk1TQ0FOX0lNTUVESUFURSxcdC8qIFByaW9yaXRpc2UgZm9yIHJlY2xhaW0gd2hlbiB3cml0ZWJhY2sgZW5kcyAqL1xuIDI3NTpcdFx0TlJfRElSVElFRCxcdFx0LyogcGFnZSBkaXJ0eWluZ3Mgc2luY2UgYm9vdHVwICovXG4gMjc2Olx0XHROUl9XUklUVEVOLFx0XHQvKiBwYWdlIHdyaXRpbmdzIHNpbmNlIGJvb3R1cCAqL1xuIDI3NzpcdFx0TlJfVEhST1RUTEVEX1dSSVRURU4sXHQvKiBOUl9XUklUVEVOIHdoaWxlIHJlY2xhaW0gdGhyb3R0bGVkICovXG4gMjc4Olx0XHROUl9LRVJORUxfTUlTQ19SRUNMQUlNQUJMRSxcdC8qIHJlY2xhaW1hYmxlIG5vbi1zbGFiIGtlcm5lbCBwYWdlcyAqL1xuIDI3OTpcdFx0TlJfRk9MTF9QSU5fQUNRVUlSRUQsXHQvKiB2aWE6IHBpbl91c2VyX3BhZ2UoKSwgZ3VwIGZsYWc6IEZPTExfUElOICovXG4gMjgwOlx0XHROUl9GT0xMX1BJTl9SRUxFQVNFRCxcdC8qIHBhZ2VzIHJldHVybmVkIHZpYSB1bnBpbl91c2VyX3BhZ2UoKSAqL1xuIDI4MTpcdFx0TlJfVk1BTExPQyxcbiAyODI6XHRcdE5SX0tFUk5FTF9TVEFDS19LQixcdC8qIG1lYXN1cmVkIGluIEtpQiAqL1xuIDI4MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19TSEFET1dfQ0FMTF9TVEFDSylcbiAyODQ6XHRcdE5SX0tFUk5FTF9TQ1NfS0IsXHQvKiBtZWFzdXJlZCBpbiBLaUIgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NTgKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgTlJfQU5PTl9USFBTYCBpcyBhIGNvbnN0YW50IG1lbWJlciBvZiB0aGUgZW51bSwgdGhhdCYjMzk7cyBqdXN0IGEgZ2l2ZW4uIE5vdywgaXQmIzM5O3MgY2xlYXIgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBjb25maWcgdGhhdCYjMzk7cyBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBodWdlIHBhZ2VzLiBBbHJpZ2h0LCBsZXQmIzM5O3MgbWFwIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgZm9yIERBTU9OIGFuZCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSBhbGwgZW5hYmxlZCwgdGhhdCYjMzk7cyB0aGUgYmFzZSByZXF1aXJlbWVudC4KCk5vdywgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYXJlIGFsbCBwcmVzZW50LiBZdXAsIHRob3NlIGFyZSBhbGwgYXMgZXhwZWN0ZWQuCgpJJiMzOTtsbCBxdWlja2x5IGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrIGZvciBhbnkgb3RoZXIgc3ltYm9scyBpbiBgbW0vZGFtb25gLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gWWVwLCBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS4gVmVyaWZpZWQgYW5kIGNsZWFyLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfYWRkX3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OyB0byBEQU1PTiBjb3JlIGFuZCBleHBvc2VzIGl0IHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIHNjaGVtZXMgaW50ZXJmYWNlLiBJdCBjb21wdXRlcyB0aGUgcmF0aW8gb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byB0b3RhbCB1c2VkIG1lbW9yeSB0byBkeW5hbWljYWxseSB0dW5lIERBTU9TIHF1b3Rhcy4gVGhpcyBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbHMmIzM0OywKICAgICYjMzQ7ZGFtb3NfbmV3X3F1b3RhX2dvYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBEQU1PUyBxdW90YSBnb2FsIG1ldHJpYyAmIzM5O2h1Z2VwYWdlX21lbV9icCYjMzk7IHRvIERBTU9OIGNvcmUgYW5kIGV4cG9zZXMgaXQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgc2NoZW1lcyBpbnRlcmZhY2UuIEl0IGNvbXB1dGVzIHRoZSByYXRpbyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHRvIGR5bmFtaWNhbGx5IHR1bmUgREFNT1MgcXVvdGFzLiBUaGlzIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgKERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OykgdGhhdCBjYWxjdWxhdGVzIHRoZSByYXRpbyBvZiBodWdlIHBhZ2VzIHRvIHVzZWQgbWVtb3J5IHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBjb3VudGVycyAodG90YWxyYW1fcGFnZXMsIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUsIGFuZCBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGZ1bmN0aW9uIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHBhZGRpbmcgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWEyNDdmYmYwMDM1YWI3ZmNhNWYxNWQzYzU3MGE1YjEyYjY5MjlkNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIxOjQxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CmluZGV4IGFlZDZjYjFjZjQ4MzEuLmE4YzE2MzQ3NWVmMmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKQEAgLTcxMyw2ICYjNDM7NzEzLDggQEAgbWVjaGFuaXNtIHRyaWVzIHRvIG1ha2UgYGBjdXJyZW50X3ZhbHVlYGAgb2YgYGB0YXJnZXRfbWV0cmljYGAgYmUgc2FtZSB0bwogICBicCAoMS8xMCwwMDApLgogLSBgYG5vZGVfZWxpZ2libGVfbWVtX2JwYGA6IFNjaGVtZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4tZWxpZ2libGUgbWVtb3J5IHJhdGlvCiAgIG9mIGEgbm9kZSBpbiBicCAoMS8xMCwwMDApLgomIzQzOy0gYGBodWdlcGFnZV9tZW1fYnBgYDogVG90YWwgaHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvIGluIGJwCiYjNDM7ICAoMS8xMCwwMDApLgogCiBgYG5pZGBgIGlzIG9wdGlvbmFsbHkgcmVxdWlyZWQgZm9yIGBgbm9kZV9tZW1fdXNlZF9icGBgLCBgYG5vZGVfbWVtX2ZyZWVfYnBgYCwKIGBgbm9kZV9tZW1jZ191c2VkX2JwYGAsIGBgbm9kZV9tZW1jZ19mcmVlX2JwYGAgYW5kIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYCB0bwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDBjOGI3ZGRlZjlhYmIuLmI1MjQwNTk4ZTZmZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTE1Myw2ICYjNDM7MTUzLDcgQEAgZW51bSBkYW1vc19hY3Rpb24gewogICogQERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDoJSW5hY3RpdmUgdG8gdG90YWwgTFJVIG1lbW9yeSByYXRpby4KICAqIEBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDoJU2NoZW1lLWVsaWdpYmxlIG1lbW9yeSByYXRpbyBvZiBhCiAgKgkJCQkJbm9kZSBpbiBiYXNpcyBwb2ludHMgKDAtMTAwMDApLgomIzQzOyAqIEBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6CUh1Z2UgcGFnZSB0byB0b3RhbCB1c2VkIG1lbW9yeSByYXRpby4KICAqIEBOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1M6CU51bWJlciBvZiBEQU1PUyBxdW90YSBnb2FsIG1ldHJpY3MuCiAgKgogICogTWV0cmljcyBlcXVhbCB0byBsYXJnZXIgdGhhbiBATlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTIGFyZSB1bnN1cHBvcnRlZC4KQEAgLTE2Nyw2ICYjNDM7MTY4LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7CiAJREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwKIAlEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsCiAJREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlAsCiYjNDM7CURBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwKIAlOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1MsCiB9OwogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uOWMwZTQyYTFkMmNmYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzAwNyw2ICYjNDM7MzAwNywyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2dldF9pbl9hY3RpdmVfbWVtX2JwKGJvb2wgYWN0aXZlX3JhdGlvKQogCXJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7CiB9CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB0aHAsIHRvdGFsX3BhZ2VzLCBmcmVlX3BhZ2VzOwomIzQzOwomIzQzOwl0b3RhbF9wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCk7CiYjNDM7CWZyZWVfcGFnZXMgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpOwomIzQzOwomIzQzOwlpZiAodG90YWxfcGFnZXMgJmx0Oz0gZnJlZV9wYWdlcykKJiM0MzsJCXJldHVybiAxMDAwMDsKJiM0MzsKJiM0MzsJdGhwID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpICYjNDM7CiYjNDM7CQkJCWdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfU0hNRU1fVEhQUykgJiM0MzsKJiM0MzsJCQkJZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9GSUxFX1RIUFMpOwomIzQzOwlyZXR1cm4gbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLAogCQlzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKQogewpAQCAtMzAzOCw2ICYjNDM7MzA1NCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLAogCQkJCWdvYWwtJmd0O25pZCk7CiAJCWJyZWFrOwomIzQzOwljYXNlIERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDoKJiM0MzsJCWdvYWwtJmd0O2N1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwppbmRleCAzMmY0OTVhOTZiMTdhLi5kOWI4MWQ3YjU5MTBlIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCkBAIC0xMjY5LDYgJiM0MzsxMjY5LDEwIEBAIHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHsKIAkJLm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLAogCQkubmFtZSA9ICYjMzQ7bm9kZV9lbGlnaWJsZV9tZW1fYnAmIzM0OywKIAl9LAomIzQzOwl7CiYjNDM7CQkubWV0cmljID0gREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLAomIzQzOwkJLm5hbWUgPSAmIzM0O2h1Z2VwYWdlX21lbV9icCYjMzQ7LAomIzQzOwl9LAogfTsKIAogc3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9TIFF1b3RhIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBmdXp6aW5nIHNlc3Npb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljLCBzcGVjaWZpY2FsbHkgYERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUGAsIGVzc2VudGlhbGx5IHRyYWNraW5nIGh1Z2VwYWdlIG1lbW9yeSB1c2FnZSBhcyBhIHBlcmNlbnRhZ2Ugb2YgYXZhaWxhYmxlIG1lbW9yeS4KClRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0YCBmb3IgZG9jdW1lbnRhdGlvbiwgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgdG8gdXBkYXRlIHRoZSBgZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWNgIGVudW0sIGFuZCB0aGVuIHRoZSBjb3JlIGxvZ2ljIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgIGlzIGltcGxlbWVudGVkLCBhbmQgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBuZXcgbWV0cmljLiAgRmluYWxseSwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgYWRkcyB0aGUgbWV0cmljJiMzOTtzIG5hbWUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZS4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGNvZGUgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgLiAgSXQgY2FsY3VsYXRlcyB0aGUgaHVnZXBhZ2UgbWVtb3J5IHBlcmNlbnRhZ2UsIHRha2luZyBpbnRvIGFjY291bnQgYHRvdGFsX3BhZ2VzYCwgYGZyZWVfcGFnZXNgLCBhbmQgdGhlIG51bWJlciBvZiBodWdlcGFnZXMgY3VycmVudGx5IGluIHVzZSAoYE5SX0FOT05fVEhQU2AsIGBOUl9TSE1FTV9USFBTYCwgYE5SX0ZJTEVfVEhQU2ApLiBUaGUgbG9naWMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBjYWxjdWxhdGluZyBhIHBlcmNlbnRhZ2UuIFdlIGRvIHNlZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZSBgdG90YWxfcGFnZXNgIGlzIGxlc3MgdGhhbiBgZnJlZV9wYWdlc2AgdGhlIHJldHVybiBpcyAxMDAwMCwgaS5lLiwgMTAwJS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBxdW90YSBnb2FscyBhbmQgaG93IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBpcyBhY3R1YWxseSBjYWxsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBtb3JlIGNsb3NlbHkgYW5kIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gdHJhY2UgdGhlIGNhbGxzIGFuZCBkYXRhIGZsb3cgYXJvdW5kIHRoaXMuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgcG9pbnRzIG9mIGVudHJ5IGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBJcyB0aGVyZSBhIHVzZXItc3VwcGxpZWQgaW5wdXQgZ29pbmcgaW50byB0aGUgY2FsY3VsYXRpb25zPyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyB0aGF0IGFyZSBoYW5kbGVkPyBJIHdpbGwgZm9jdXMgb24gZmluZGluZyB0aGUgcGF0aCBiZXR3ZWVuIGFueSB1c2VyLXByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBpbnRlcm5hbCB1c2Ugb2YgdGhlIGNhbGN1bGF0aW9ucyBhbmQgYXNzb2NpYXRlZCBkYXRhLiBEZXBlbmRpbmcgb24gaG93IHRoaXMgZGF0YSBpcyBoYW5kbGVkLCBJIGNhbiBkZWNpZGUgaWYgaXQgbmVlZHMgaXRzIG93biBkZWRpY2F0ZWQgZnV6emluZyBzZXNzaW9uLCBvciBpZiB0aGUgZXhpc3RpbmcgREFNT1MgZnV6emluZyBpcyBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjM1OnN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjM2LVx0e1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc4PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjg1Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXMpOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODYtXHRcdHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjg4Olx0XHRtZXRyaWNfbmFtZSA9IFx1MDAyNmRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tpXTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjg5LVx0XHRpZiAobWV0cmljX25hbWUtXHUwMDNlbWV0cmljID09IGdvYWwtXHUwMDNlbWV0cmljKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjk1PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMwMjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAzLVx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgKm1ldHJpY19uYW1lO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMwNTpcdFx0bWV0cmljX25hbWUgPSBcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMwNi1cdFx0aWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgbWV0cmljX25hbWUtXHUwMDNlbmFtZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAqKgoKT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGlzIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBmdW5jdGlvbi4gIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCDigJMgdGhlIGNhbGwgc2l0ZXMg4oCTIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gKmRvKiBhbmQgd2h5IGl0JiMzOTtzIGV2ZW4gbmVlZGVkLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2hhdCogYW5kIHRoZSAqd2h5KiBhcmUgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFRoZW4sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljcy4gV2hhdCBhcmUgaXRzIGlucHV0cz8gV2hhdCYjMzk7cyB0aGUgbG9naWM/ICBXaGF0IHNpZGUgZWZmZWN0cyBkb2VzIGl0IGhhdmU/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgbW9kaWZ5PyBBbGwgdGhlIGRldGFpbHMgbWF0dGVyLCBiZWNhdXNlIHVsdGltYXRlbHksIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIGl0cyBjb3JyZWN0bmVzcywgcGVyZm9ybWFuY2UsIGFuZCBtYXliZSBldmVuIGl0cyBtYWludGFpbmFiaWxpdHkuIEl04oCZcyB0aGUgb25seSB3YXkgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHBlcmZvcm1pbmcgYXMgaW50ZW5kZWQuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgdGhlbiBkZWNpZGUgaG93IGJlc3QgdG8gYXBwcm9hY2ggd2hhdGV2ZXIgdGFzayBoYXMgbGVhZCBtZSB0byB0aGlzIHBpZWNlIG9mIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzAxMD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDI1LVxubW0vZGFtb24vY29yZS5jOjMwMjY6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxubW0vZGFtb24vY29yZS5jLTMwMjctXHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4tLVxubW0vZGFtb24vY29yZS5jPTMwNjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDcyLVx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xubW0vZGFtb24vY29yZS5jOjMwNzM6XHRcdGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoYywgcywgZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzA3NC1cdFx0aGlnaGVzdF9zY29yZSA9IG1heChoaWdoZXN0X3Njb3JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQwCgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDM5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gUmlza3MgaW4gdGhpcyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgaGF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbHVya2luZyBhYm91dCwgYXMgdGhhdCYjMzk7cyBhbHdheXMgYSBjb25jZXJuLiBGaXJzdCwgSSBmb2N1c2VkIG9uIHRoZSBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCB0aGUgbG9jYWwgdmFyaWFibGVzIGB0aHBgLCBgdG90YWxfcGFnZXNgLCBhbmQgYGZyZWVfcGFnZXNgIGFyZSBhbGwgZXhwbGljaXRseSBpbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5OiBgdG90YWxfcGFnZXNgIGdldHMgYHRvdGFscmFtX3BhZ2VzKClgLCBgZnJlZV9wYWdlc2AgZ2V0cyB0aGUgZnJlZSBwYWdlIGNvdW50IGZyb20gYGdsb2JhbF96b25lX3BhZ2Vfc3RhdGVgLCBhbmQgYHRocGAgYWNjdW11bGF0ZXMgdGhlIFRIUCBjb3VudHMgZnJvbSB0aGUgZ2xvYmFsIG5vZGUgcGFnZSBzdGF0ZXMuIFRoZSBjb3JlIGNhbGN1bGF0aW9uIHRoZW4gdXNlcyB0aGVzZSBpbml0aWFsaXplZCB2YWx1ZXMgaW4gYG11bHRfZnJhY2AuIFRoZSByZXN1bHQgaXMgYXNzaWduZWQgdG8gYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgLCBhbmQgdGhhdCYjMzk7cyB0aGUgZW5kIG9mIHRoZSBsaW5lLiBTbyBmYXIsIHNvIGdvb2Qg4oCTIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuCgpNb3Zpbmcgb24sIHRoZSBhZGRpdGlvbiBvZiB0aGUgYERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUGAgZW51bSB2YWx1ZSBiZWZvcmUgYE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDU2AgZG9lc24mIzM5O3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IGluaXRpYWxpemF0aW9uIGlzc3VlcyBpbiBpdHNlbGYuIEl04oCZcyBzaW1wbHkgZXh0ZW5kaW5nIGFuIGVudW1lcmF0aW9uLiBTaW1pbGFybHksIHRoZSBhZGRpdGlvbiBvZiB0aGUgbmV3IHN0YXRpYyBlbnRyeSBpbiB0aGUgYGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc2AgYXJyYXkgaXMgYSBzdHJhaWdodGZvcndhcmQgaW5pdGlhbGl6YXRpb24gb2YgYSBuZXcgbWV0cmljIHdpdGggaXRzIG5hbWUuIE5vIHByb2JsZW1zIHRoZXJlLgoKTmV4dCwgSSBsb29rZWQgZm9yIGFueXRoaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIEZvcnR1bmF0ZWx5LCB0aGlzIHBhdGNoIGRvZXNu4oCZdCBzZWVtIHRvIGJlIHB1c2hpbmcgYW55IHN0cnVjdHMgb3V0LCBzbyB3ZSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgb3IgZ2FyYmFnZSBkYXRhIGxlYWthZ2UuIFN5c2ZzIHJlYWRzIGFuZCB3cml0ZXMgYXJlIGRvbmUgdXNpbmcgZm9ybWF0dGVkIHN0cmluZ3MsIHdoaWNoIGFsbGV2aWF0ZXMgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMgZW5kaW5nIHVwIGluIHRoZSBvdXRwdXQuIE1vcmVvdmVyLCB0aGVyZSYjMzk7cyBubyBtZW1vcnkgYWxsb2NhdGlvbiBvciBjaGFuZ2VzIHRvIHN0cnVjdHVyZSBsYXlvdXRzIHRoYXQgd291bGQgY2F1c2UgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIGJlIGV4cG9zZWQuIEFuZCwgSSBzZWUgbm8gYnJhbmNoaW5nIGxvZ2ljIHRoYXQmIzM5O3MgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGEgbmV3IG1ldHJpYyBjYWxjdWxhdGlvbiBiYXNlZCBvbiByZWFkaWx5IGF2YWlsYWJsZSBrZXJuZWwgcGFnZSBjb3VudGVycy4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCB0aGVyZSBpcyAqKm5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MqKiB0byB1c2VyIHNwYWNlIGluIHRoaXMgcGF0Y2guIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoZXJl4oCZcyBubyBuZWVkIGZvciBLTVNBTiB0byBiZSBpbnZva2VkIGZvciB0aGlzIHNwZWNpZmljIGNoYW5nZS4gSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgKERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OykgdGhhdCBjYWxjdWxhdGVzIHRoZSByYXRpbyBvZiBodWdlIHBhZ2VzIHRvIHVzZWQgbWVtb3J5IHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBjb3VudGVycyAodG90YWxyYW1fcGFnZXMsIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUsIGFuZCBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGZ1bmN0aW9uIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHBhZGRpbmcgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgKERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwgJiMzOTtodWdlcGFnZV9tZW1fYnAmIzM5OykgdGhhdCBjYWxjdWxhdGVzIHRoZSByYXRpbyBvZiBodWdlIHBhZ2VzIHRvIHVzZWQgbWVtb3J5IHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBjb3VudGVycyAodG90YWxyYW1fcGFnZXMsIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUsIGFuZCBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGZ1bmN0aW9uIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHBhZGRpbmcgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6MjQuMjc5MDUyMDU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyOTQ4NDI2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX25ld19xdW90YV9nb2FsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljIChEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsICdodWdlcGFnZV9tZW1fYnAnKSB0aGF0IGNhbGN1bGF0ZXMgdGhlIHJhdGlvIG9mIGh1Z2UgcGFnZXMgdG8gdXNlZCBtZW1vcnkgdXNpbmcgc3RhbmRhcmQga2VybmVsIGNvdW50ZXJzICh0b3RhbHJhbV9wYWdlcywgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZSwgYW5kIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGluIHRoZSBuZXcgZnVuY3Rpb24gYGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgcGFkZGluZyBsZWFrcyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgJ2h1Z2VwYWdlX21lbV9icCcgdG8gREFNT04gY29yZSBhbmQgZXhwb3NlcyBpdCB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBzY2hlbWVzIGludGVyZmFjZS4gSXQgY29tcHV0ZXMgdGhlIHJhdGlvIG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gdG90YWwgdXNlZCBtZW1vcnkgdG8gZHluYW1pY2FsbHkgdHVuZSBEQU1PUyBxdW90YXMuIFRoaXMgbW9kaWZpZXMgY29yZSBEQU1PTiBsb2dpYyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MToyNC4yNzkwNTc3MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Nzg5OTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVhMjQ3ZmJmMDAzNWFiN2ZjYTVmMTVkM2M1NzBhNWIxMmI2OTI5ZDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjE6NDE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuaW5kZXggYWVkNmNiMWNmNDgzMS4uYThjMTYzNDc1ZWYyYiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG5AQCAtNzEzLDYgKzcxMyw4IEBAIG1lY2hhbmlzbSB0cmllcyB0byBtYWtlIGBgY3VycmVudF92YWx1ZWBgIG9mIGBgdGFyZ2V0X21ldHJpY2BgIGJlIHNhbWUgdG9cXG4gICBicCAoMS8xMCwwMDApLlxcbiAtIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYDogU2NoZW1lIHRhcmdldCBhY2Nlc3MgcGF0dGVybi1lbGlnaWJsZSBtZW1vcnkgcmF0aW9cXG4gICBvZiBhIG5vZGUgaW4gYnAgKDEvMTAsMDAwKS5cXG4rLSBgYGh1Z2VwYWdlX21lbV9icGBgOiBUb3RhbCBodWdlIHBhZ2UgdG8gdG90YWwgdXNlZCBtZW1vcnkgcmF0aW8gaW4gYnBcXG4rICAoMS8xMCwwMDApLlxcbiBcXG4gYGBuaWRgYCBpcyBvcHRpb25hbGx5IHJlcXVpcmVkIGZvciBgYG5vZGVfbWVtX3VzZWRfYnBgYCwgYGBub2RlX21lbV9mcmVlX2JwYGAsXFxuIGBgbm9kZV9tZW1jZ191c2VkX2JwYGAsIGBgbm9kZV9tZW1jZ19mcmVlX2JwYGAgYW5kIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYCB0b1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5pbmRleCAwYzhiN2RkZWY5YWJiLi5iNTI0MDU5OGU2ZmY0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbkBAIC0xNTMsNiArMTUzLDcgQEAgZW51bSBkYW1vc19hY3Rpb24ge1xcbiAgKiBAREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxcdEluYWN0aXZlIHRvIHRvdGFsIExSVSBtZW1vcnkgcmF0aW8uXFxuICAqIEBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcXHRTY2hlbWUtZWxpZ2libGUgbWVtb3J5IHJhdGlvIG9mIGFcXG4gICpcXHRcXHRcXHRcXHRcXHRub2RlIGluIGJhc2lzIHBvaW50cyAoMC0xMDAwMCkuXFxuKyAqIEBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XFx0SHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvLlxcbiAgKiBATlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTOlxcdE51bWJlciBvZiBEQU1PUyBxdW90YSBnb2FsIG1ldHJpY3MuXFxuICAqXFxuICAqIE1ldHJpY3MgZXF1YWwgdG8gbGFyZ2VyIHRoYW4gQE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUyBhcmUgdW5zdXBwb3J0ZWQuXFxuQEAgLTE2Nyw2ICsxNjgsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcXG4gXFx0REFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCxcXG4gXFx0REFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxcbiBcXHREQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUCxcXG4rXFx0REFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLFxcbiBcXHROUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1MsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwLi45YzBlNDJhMWQyY2ZjIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0zMDA3LDYgKzMwMDcsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcXG4gXFx0cmV0dXJuIG11bHRfZnJhYyhpbmFjdGl2ZSwgMTAwMDAsIHRvdGFsKTtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19odWdlcGFnZV9tZW1fYnAodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHRocCwgdG90YWxfcGFnZXMsIGZyZWVfcGFnZXM7XFxuK1xcbitcXHR0b3RhbF9wYWdlcyA9IHRvdGFscmFtX3BhZ2VzKCk7XFxuK1xcdGZyZWVfcGFnZXMgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpO1xcbitcXG4rXFx0aWYgKHRvdGFsX3BhZ2VzIFxcdTAwM2M9IGZyZWVfcGFnZXMpXFxuK1xcdFxcdHJldHVybiAxMDAwMDtcXG4rXFxuK1xcdHRocCA9IGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKSArXFxuK1xcdFxcdFxcdFxcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfU0hNRU1fVEhQUykgK1xcbitcXHRcXHRcXHRcXHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUyk7XFxuK1xcdHJldHVybiBtdWx0X2ZyYWModGhwLCAxMDAwMCwgdG90YWxfcGFnZXMgLSBmcmVlX3BhZ2VzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsKVxcbiB7XFxuQEAgLTMwMzgsNiArMzA1NCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4gXFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChjLCBzLFxcbiBcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XFxuK1xcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19odWdlcGFnZV9tZW1fYnAoKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbmluZGV4IDMyZjQ5NWE5NmIxN2EuLmQ5YjgxZDdiNTkxMGUgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuQEAgLTEyNjksNiArMTI2OSwxMCBAQCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxuIFxcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUCxcXG4gXFx0XFx0Lm5hbWUgPSBcXFwibm9kZV9lbGlnaWJsZV9tZW1fYnBcXFwiLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsXFxuK1xcdFxcdC5uYW1lID0gXFxcImh1Z2VwYWdlX21lbV9icFxcXCIsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQxOjI0Ljc0NzU2NTI1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODQ2NzI1NzEwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgICBcImRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX25ld19xdW90YV9nb2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBEQU1PUyBxdW90YSBnb2FsIG1ldHJpYyAnaHVnZXBhZ2VfbWVtX2JwJyB0byBEQU1PTiBjb3JlIGFuZCBleHBvc2VzIGl0IHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIHNjaGVtZXMgaW50ZXJmYWNlLiBJdCBjb21wdXRlcyB0aGUgcmF0aW8gb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyB0byB0b3RhbCB1c2VkIG1lbW9yeSB0byBkeW5hbWljYWxseSB0dW5lIERBTU9TIHF1b3Rhcy4gVGhpcyBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhMjQ3ZmJmMDAzNWFiN2ZjYTVmMTVkM2M1NzBhNWIxMmI2OTI5ZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTo0MToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggYWVkNmNiMWNmNDgzMS4uYThjMTYzNDc1ZWYyYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5AQCAtNzEzLDYgKzcxMyw4IEBAIG1lY2hhbmlzbSB0cmllcyB0byBtYWtlIGBgY3VycmVudF92YWx1ZWBgIG9mIGBgdGFyZ2V0X21ldHJpY2BgIGJlIHNhbWUgdG9cbiAgIGJwICgxLzEwLDAwMCkuXG4gLSBgYG5vZGVfZWxpZ2libGVfbWVtX2JwYGA6IFNjaGVtZSB0YXJnZXQgYWNjZXNzIHBhdHRlcm4tZWxpZ2libGUgbWVtb3J5IHJhdGlvXG4gICBvZiBhIG5vZGUgaW4gYnAgKDEvMTAsMDAwKS5cbistIGBgaHVnZXBhZ2VfbWVtX2JwYGA6IFRvdGFsIGh1Z2UgcGFnZSB0byB0b3RhbCB1c2VkIG1lbW9yeSByYXRpbyBpbiBicFxuKyAgKDEvMTAsMDAwKS5cbiBcbiBgYG5pZGBgIGlzIG9wdGlvbmFsbHkgcmVxdWlyZWQgZm9yIGBgbm9kZV9tZW1fdXNlZF9icGBgLCBgYG5vZGVfbWVtX2ZyZWVfYnBgYCxcbiBgYG5vZGVfbWVtY2dfdXNlZF9icGBgLCBgYG5vZGVfbWVtY2dfZnJlZV9icGBgIGFuZCBgYG5vZGVfZWxpZ2libGVfbWVtX2JwYGAgdG9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDBjOGI3ZGRlZjlhYmIuLmI1MjQwNTk4ZTZmZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTE1Myw2ICsxNTMsNyBAQCBlbnVtIGRhbW9zX2FjdGlvbiB7XG4gICogQERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUDpcdEluYWN0aXZlIHRvIHRvdGFsIExSVSBtZW1vcnkgcmF0aW8uXG4gICogQERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlx0U2NoZW1lLWVsaWdpYmxlIG1lbW9yeSByYXRpbyBvZiBhXG4gICpcdFx0XHRcdFx0bm9kZSBpbiBiYXNpcyBwb2ludHMgKDAtMTAwMDApLlxuKyAqIEBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XHRIdWdlIHBhZ2UgdG8gdG90YWwgdXNlZCBtZW1vcnkgcmF0aW8uXG4gICogQE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUzpcdE51bWJlciBvZiBEQU1PUyBxdW90YSBnb2FsIG1ldHJpY3MuXG4gICpcbiAgKiBNZXRyaWNzIGVxdWFsIHRvIGxhcmdlciB0aGFuIEBOUl9EQU1PU19RVU9UQV9HT0FMX01FVFJJQ1MgYXJlIHVuc3VwcG9ydGVkLlxuQEAgLTE2Nyw2ICsxNjgsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbiBcdERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsXG4gXHREQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsXG4gXHREQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUCxcbitcdERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCxcbiBcdE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uOWMwZTQyYTFkMmNmYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzAwNyw2ICszMDA3LDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXG4gXHRyZXR1cm4gbXVsdF9mcmFjKGluYWN0aXZlLCAxMDAwMCwgdG90YWwpO1xuIH1cbiBcbitzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdGhwLCB0b3RhbF9wYWdlcywgZnJlZV9wYWdlcztcbitcbitcdHRvdGFsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMoKTtcbitcdGZyZWVfcGFnZXMgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpO1xuK1xuK1x0aWYgKHRvdGFsX3BhZ2VzIFx1MDAzYz0gZnJlZV9wYWdlcylcbitcdFx0cmV0dXJuIDEwMDAwO1xuK1xuK1x0dGhwID0gZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpICtcbitcdFx0XHRcdGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfU0hNRU1fVEhQUykgK1xuK1x0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9GSUxFX1RIUFMpO1xuK1x0cmV0dXJuIG11bHRfZnJhYyh0aHAsIDEwMDAwLCB0b3RhbF9wYWdlcyAtIGZyZWVfcGFnZXMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4gXHRcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXG4ge1xuQEAgLTMwMzgsNiArMzA1NCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfZWxpZ2libGVfbWVtX2JwKGMsIHMsXG4gXHRcdFx0XHRnb2FsLVx1MDAzZW5pZCk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlA6XG4rXHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggMzJmNDk1YTk2YjE3YS4uZDliODFkN2I1OTEwZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5AQCAtMTI2OSw2ICsxMjY5LDEwIEBAIHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbXSA9IHtcbiBcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLFxuIFx0XHQubmFtZSA9IFwibm9kZV9lbGlnaWJsZV9tZW1fYnBcIixcbiBcdH0sXG4rXHR7XG4rXHRcdC5tZXRyaWMgPSBEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsXG4rXHRcdC5uYW1lID0gXCJodWdlcGFnZV9tZW1fYnBcIixcbitcdH0sXG4gfTtcbiBcbiBzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MToyNC43NDc1NjY1OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Njg0MDY1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZTogaXQncyBpbnRyb2R1Y2luZyBhIG5ldyBxdW90YSBnb2FsIG1ldHJpYyB3aXRoaW4gREFNT04sIHNwZWNpZmljYWxseSBgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQYCwgb3IgXCJodWdlcGFnZV9tZW1fYnBcIi4gVGhpcyBpcyBpbnRlcmVzdGluZzsgd2UncmUgbm93IHRyYWNraW5nIHF1b3RhIGdvYWxzIHJlbGF0ZWQgdG8gaHVnZXBhZ2VzIHdpdGhpbiB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciwgd2hpY2ggc3VnZ2VzdHMgYSBuZXcgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgb3IgYSBmb2N1cyBvbiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIGh1Z2UgcGFnZXMuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgc2NvcGUuIFRoZSBjaGFuZ2VzIHRvdWNoOlxuXG4xLiAgKipEb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QqKjogV2UnbGwgbmVlZCB0byByZXZpZXcgdGhlIGRvY3VtZW50YXRpb24gdXBkYXRlcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCByYXRpb25hbGUgZm9yIHRoaXMgbmV3IG1ldHJpYy4gV2hhdCdzIHRoZSBkZXNpZ24gY29uc2lkZXJhdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz9cbjIuICAqKmluY2x1ZGUvbGludXgvZGFtb24uaCoqOiBUaGlzIGZpbGUgbGlrZWx5IGRlZmluZXMgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBlbnVtcyByZWxhdGVkIHRvIERBTU9OLCBzbyB3ZSBzaG91bGQgbG9vayBhdCB0aGUgYWRkaXRpb24gb2YgYERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUGAgYW5kIGFueSBhc3NvY2lhdGVkIGRlZmluaXRpb25zLlxuMy4gICoqbW0vZGFtb24vY29yZS5jKio6IEhlcmUncyB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gbGl2ZXMuIFNwZWNpZmljYWxseSwgYGRhbW9zX2h1Z2VwYWdlX21lbV9icGAgYW5kIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCB3aWxsIGJlIHRoZSBmb2NhbCBwb2ludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1ldHJpYyBpcyBjYWxjdWxhdGVkLCBob3cgaXQncyB1c2VkIHdpdGhpbiBEQU1PTidzIGNvcmUgbW9uaXRvcmluZyBhbmQgY29udHJvbCBsb29wLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBxdW90YSBtZWNoYW5pc21zLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJcyB0aGlzIGFkZGluZyBhbnkgbmV3IGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGNvbmNlcm5zP1xuNC4gICoqbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jKio6IFRoZSBgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzYCBtb2RpZmljYXRpb24gaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEhvdyBhcmUgdXNlcnMgZ29pbmcgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW5kIGNvbmZpZ3VyZSB0aGlzIG1ldHJpYz8gV2hhdCBsZXZlbCBvZiBpbmZvcm1hdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSB0byBzeXNhZG1pbnM/XG5cbkJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbid0IGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29kZSBhbmQgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIERBTU9OIGFuZCBEQU1PTiBzeXNmcyBzY2hlbWVzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGRlcGVuZGVuY2llcyBvbiBodWdlcGFnZSBjb25maWd1cmF0aW9ucyBvciBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gSXQgaXMgY3JpdGljYWwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGN1cnJlbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLCBhbmQgaGF2ZSBhcyBtdWNoIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgYXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MTozMS40MzE2MzQ5NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyOTM0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWc6NjpcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxubW0vZGFtb24vS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZzoxNjpcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTE4LVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjE5OlxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbm1tL2RhbW9uL0tjb25maWc6MjA6XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG5tbS9kYW1vbi9LY29uZmlnLTIxLVxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjI4OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctMjktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTMwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjMxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy0zMi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy00MS1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG5tbS9kYW1vbi9LY29uZmlnOjQyOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTQzLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjQ0OlxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDUtXFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQ5OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy01MC1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG5tbS9kYW1vbi9LY29uZmlnOjUxOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTUyLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjUzOlxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTQtXFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnOjU3OlxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjU4OlxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNTktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTYwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjYxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTYyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWc6Njk6XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NzA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbm1tL2RhbW9uL0tjb25maWc6NzE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNzItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NzM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG5tbS9kYW1vbi9LY29uZmlnLTc0LVxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNzktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTgwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjgxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctODItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnOjg5OlxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctOTEtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6OTI6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG5tbS9kYW1vbi9LY29uZmlnOjkzOlxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbm1tL2RhbW9uL0tjb25maWctOTQtXFx0ICB0aG9zZS5cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZzoxMDE6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTA0OlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXFxubW0vZGFtb24vS2NvbmZpZy0xMDUtXFx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnOjEwOTpcXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXFxubW0vZGFtb24vS2NvbmZpZzoxMTM6XFx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxcbm1tL2RhbW9uL0tjb25maWctMTE0LVxcdCAgbWV0cmljcy5cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnOjExNzpcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTE4OlxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTE5OlxcdGRlZmF1bHQgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTIwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcXHQgIFdoZXRoZXIgdG8gZW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdC4gIFVzZXJzIGNhbiBkaXNhYmxlIGl0IGluXFxubW0vZGFtb24vS2NvbmZpZy0xMjItXFx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICdlbmFibGVkJyBwYXJhbWV0ZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQxOjMxLjQ3NjkzMzY3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNDA2Mzk3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipFeGFtaW5pbmcgQnVpbGQgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBgY29yZS5jYCBhbmQgYHN5c2ZzLXNjaGVtZXMuY2AgYXJlIGJlaW5nIGNvbXBpbGVkLiBHaXZlbiB0aGUgcHJvamVjdCBzdHJ1Y3R1cmUsIEknbSBwcmV0dHkgc3VyZSB0aGUgcmVsZXZhbnQgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSBnb2luZyB0byBiZSBpbiBgbW0vZGFtb24vTWFrZWZpbGVgLiBJJ2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IG1ha2VmaWxlIGFuZCBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgY29uZmlndXJpbmcgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6MzQuODE3NTc1MDMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6MzQuODE3NjI2MjYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxMTYxMzA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFF1b3RhIEdvYWwgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBmb3IgcXVvdGEgbWFuYWdlbWVudCBiZXR0ZXIsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIHF1b3RhIGdvYWwgYW5kIHRoZSBodWdlcGFnZSBtZW1vcnkgYmluZGluZyBwb2ludC4gSXQgbG9va3MgbGlrZSB0aGUgbW9zdCBkaXJlY3QgcGF0aCB0byB0aGF0IHVuZGVyc3RhbmRpbmcgaW52b2x2ZXMgdHJhY2luZyBob3cgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIGNhbGxlZCBhbmQgaG93IGl0cyBhY3Rpb25zIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIG9mIGh1Z2UgcGFnZXMgaW50ZXJzZWN0cyB3aXRoIHRoZSBzZXR0aW5nIG9yIHVwZGF0aW5nIG9mIHF1b3RhIHRhcmdldHMsIGFuZCB0aGVyZWZvcmUsIEkgc2hvdWxkIGFsc28gbG9vayBhdCB3aGVyZSBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYCBpcyBiZWluZyB1c2VkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIHZhbHVlcyBhcmUgaGFuZGxlZCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIG90aGVyIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBnb2FsIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW5mbHVlbmNlIGVhY2ggb3RoZXIgYW5kIGFueSBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgYXJpc2Ugd2hlbiB0aGV5IGludGVyYWN0LCBjb25zaWRlcmluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IgdW5kZXIgbG9hZC4gVGhhdCBsZXZlbCBvZiBkZXRhaWwgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB0aGUgcXVvdGEgZ29hbCBwcm9jZXNzaW5nIGxvZ2ljLCBlc3BlY2lhbGx5IHdoZW4gaHVnZSBwYWdlcyBhcmUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQxOjM3LjEyOTI0MTg5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAxMzI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMDEwPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAyNS1cXG5tbS9kYW1vbi9jb3JlLmM6MzAyNjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTMwMjctXFx0XFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDY2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDcyLVxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzA3MzpcXHRcXHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMDc0LVxcdFxcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6MzcuMTczMjU5NDYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE1NjA5Mjc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBFeGVjdXRpb24gb2YgYGRhbW9zX3F1b3RhX3Njb3JlYCBpbiBEQU1PTioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGBkYW1vc19xdW90YV9zY29yZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYW5kIHdpdGhpbiB3aGljaCBwYXJ0IG9mIHRoZSBEQU1PTiBpbmZyYXN0cnVjdHVyZSBpdCBvcGVyYXRlcy4gRmlyc3QsIEnigJlsbCBuZWVkIHRvIGRvIGEgY29kZSBzZWFyY2guIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCB0ZXh0dWFsIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uJ3MgbmFtZSB3aXRoaW4gdGhlIERBTU9OIHNvdXJjZS4gVGhhdCdzIGxpa2VseSB0byBpbW1lZGlhdGVseSByZXZlYWwgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCBwcm9iYWJseSBhbGwgY2FsbCBzaXRlcy4gXG5cbk9uY2UgSSBoYXZlIHRoZSBjYWxsIHNpdGVzLCBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBkYW1vc19xdW90YV9zY29yZWAgaXMgdXNlZC4gV2hhdCBhcmUgdGhlIGlucHV0cyB0byB0aGUgZnVuY3Rpb24gYXQgZWFjaCBjYWxsPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IElzIGl0IGNhbGxlZCBmcm9tIGEgaG90IHBhdGgsIG9yIHNvbWV0aGluZyBsZXNzIGNyaXRpY2FsPyBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSB0aGF0IHJlbGllcyBvbiB0aGlzIHF1b3RhIHNjb3JlLlxuXG5JIHdpbGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIERBTU9OIGRhdGEgc3RydWN0dXJlcyB0byBzZWUgaG93IHRoZSBzY29yZSBpcyBjYWxjdWxhdGVkIGFuZCBjb25zdW1lZC4gSXQncyBsaWtlbHkgdGhhdCBhIHN0cnVjdHVyZSByZWxhdGVkIHRvIG1lbW9yeSBibG9ja3MsIHByb2Nlc3Nlcywgb3IgZmlsZSBzeXN0ZW1zIGlzIGluIHBsYXkuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0ncyBkZXNpZ24uIFRoaXMgd2lsbCBlbmFibGUgbWUgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgZGVidWdnaW5nLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbCBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6NDEuMzI5MzU0MjE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkxNzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9zY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzAyNj1zdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA2NS0vKiBSZXR1cm4gdGhlIGhpZ2hlc3Qgc2NvcmUgc2luY2UgaXQgbWFrZXMgc2NoZW1lcyBsZWFzdCBhZ2dyZXNzaXZlICovXFxubW0vZGFtb24vY29yZS5jOjMwNjY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMDY3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDgyPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfY29uc2lzdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA4NC1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbm1tL2RhbW9uL2NvcmUuYzozMDg1OlxcdHVuc2lnbmVkIGxvbmcgc2NvcmUgPSBkYW1vc19xdW90YV9zY29yZShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzA4Ni1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDkxPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDk0LVxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxubW0vZGFtb24vY29yZS5jOjMwOTU6XFx0dW5zaWduZWQgbG9uZyBzY29yZSA9IGRhbW9zX3F1b3RhX3Njb3JlKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMDk2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MTo0MS4zNzQyNzczMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAyNzk0Njg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PUyBRdW90YSBHb2FsIEpvdXJuZXkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBEQU1PUyBxdW90YSBidXNpbmVzcyBhbmQgZmlndXJlIG91dCB0aGUgbWVjaGFuaWNzIGJlaGluZCBpdC4gU3BlY2lmaWNhbGx5LCBob3cgdXNlciBzcGFjZSwgdGhyb3VnaCBzeXNmcywgcGxheXMgaXRzIHBhcnQgaW4gc2V0dGluZyBhbmQgbWFuYWdpbmcgdGhlc2UgcXVvdGFzLiBJIHNlZSB0aGF0IHVzZXJzIGFyZSBzZXR0aW5nIHVwIHRoZXNlIERBTU9TIHNjaGVtZXMgYW5kIHF1b3RhIGdvYWxzIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmAgcGF0aC4gVGhlIGtleSBzZWVtcyB0byBiZSB0aGUgYHRhcmdldF9tZXRyaWNgIHN5c2ZzIGF0dHJpYnV0ZTsgdGhleSdyZSB3cml0aW5nIFwiaHVnZXBhZ2VfbWVtX2JwXCIgdG8gdGhpcy5cblxuU28sIHdoZW4gREFNT04gc3ByaW5ncyBpbnRvIGFjdGlvbuKAlGVpdGhlciBkdXJpbmcgaXRzIHJlZ3VsYXIgc2FtcGxpbmcgYW5kIGFnZ3JlZ2F0aW9uIGN5Y2xlcyBvciB3aGVuIGEgdXNlciBjb21taXRzIGEgbmV3IHNjaGVtZSBhbmQga2lja3Mgb2ZmIHRoZSBtb25pdG9y4oCUaXQgYXNzZXNzZXMgdGhlIHF1b3RhIHNjb3JlIGF0IGVhY2ggaW50ZXJ2YWwuIEl0IGFwcGVhcnMgdGhhdCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZSgpYCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIGNhbGN1bGF0aW5nIHRoZSBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgIHJhdGlvIGFuZCB0aGVuIG1ha2luZyB0aGUgcXVvdGEgYWRqdXN0bWVudHMuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgdGFyZ2V0X21ldHJpY2AgaW50ZXJhY3Rpb24gcmVhbGx5IHdvcmtzLiBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGB0YXJnZXRfbWV0cmljX3Nob3dgIGFuZCBgdGFyZ2V0X21ldHJpY19zdG9yZWAgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBNeSBmb2N1cyB3aWxsIGJlIG9uIGhvdyBgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzYCBpcyB1dGlsaXplZCB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgbWFwcGluZyBiZXR3ZWVuIHVzZXItc3BhY2UgaW5wdXQgYW5kIHRoZSBhY3R1YWwgcXVvdGEgZ29hbCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MTo0Ny40MDIyMjYzNzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODgwMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXFx0e1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODYtXFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lICptZXRyaWNfbmFtZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI4ODpcXHRcXHRtZXRyaWNfbmFtZSA9IFxcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODktXFx0XFx0aWYgKG1ldHJpY19uYW1lLVxcdTAwM2VtZXRyaWMgPT0gZ29hbC1cXHUwMDNlbWV0cmljKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyOTU9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzAyOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lcyk7IGkrKykge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAzLVxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMDU6XFx0XFx0bWV0cmljX25hbWUgPSBcXHUwMDI2ZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW2ldO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzA2LVxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIG1ldHJpY19uYW1lLVxcdTAwM2VuYW1lKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MTo0Ny40NDcxMTM0MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwOTMwNTAyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYCBpbiBEQU1PTioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgYGRhbW9zX2h1Z2VwYWdlX21lbV9icGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gUmlnaHQsIHRoZSBjb2RlIHNob3dzIGl0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYCB0byBzZXQgYHRhcmdldF9tZXRyaWNgIHRvIFwiaHVnZXBhZ2VfbWVtX2JwXCIuIEdvb2QsIHNvIERBTU9OJ3Mga3RocmVhZCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAsIHdoaWNoICp0aGVuKiBjYWxscyBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYC4gQ29uZmlybWVkLCBpdCdzIHJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwYC4gKkhtbSosIGl0IHNlZW1zIHRvIGNhbGN1bGF0ZSBhIHJhdGlvIG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgdG8gYXZhaWxhYmxlIG1lbW9yeSwgZXNzZW50aWFsbHkgYSBwZXJjZW50YWdlLiBJdCBsb29rcyBhdCBgdG90YWxyYW1fcGFnZXMoKWAsIGBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpYCwgYW5kIHRoZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgY291bnRzIHRocm91Z2ggYGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUoTlJfQU5PTl9USFBTKWAsIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX1NITUVNX1RIUFMpYCwgYW5kIGBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUylgLiBUaGUgcmVhbCBjYWxjdWxhdGlvbiBzZWVtcyB0byBiZSBgbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcylgLlxuXG5Ib2xkIG9uLi4uIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuIEkgbmVlZCB0byBrbm93IGlmIHRoZSBgdGhwYCB2YXJpYWJsZSwgbWVhbmluZyBUSFAgcGFnZSBjb3VudCwgaXMgaW4gdW5pdHMgb2YgYmFzZSBwYWdlcyAob3JkZXItMCkgb3IgdGhlIHVuaXRzIG9mIHRoZSBUSFAgaXRzZWxmLiBXYWl0IGEgbWludXRlISBUaGUgY291bnQgb2YgYE5SX0FOT05fVEhQU2AgaXMgaW4gYEhQQUdFX1BNRF9OUmAgdW5pdHMsIGJ1dCB0aGUgdG90YWwgcGFnZXMgaXMgaW4gYFBBR0VfU0laRWAgdW5pdHMuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2UgYSBzY2FsaW5nIGJ1Zy4gV2hldGhlciBpdCdzIGEgYnVnIG9yIG5vdCwgaXQncyBhIGNoYW5nZSBhbmQsIGluIGFueSBjYXNlLCBpdCdzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQgd2l0aGluIG1tL2RhbW9uLlxuXG5TbywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBMZXQncyBzZWU6IEl0IGludHJvZHVjZXMgYSBuZXcgbWV0cmljIChgaHVnZXBhZ2VfbWVtX2JwYCkgZm9yIERBTU9OIHF1b3RhIGdvYWxzLiBJdCdzIGFjY2Vzc2libGUgdmlhIHRoZSB1c2VyLXNwYWNlIHN5c2ZzIGludGVyZmFjZSAoYERBTU9OX1NZU0ZTYCkuIEl0J3MgZXhlY3V0ZWQgd2l0aGluIGtlcm5lbCBtb25pdG9yaW5nIGxvb3BzIChgZGFtb25fa3RocmVhZGAsIGBkYW1vc19xdW90YV9zY29yZWAsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCkuIEl0J3MgdG90YWxseSByZWFjaGFibGUgaW4gUUVNVS9HQ0UsIHdoaWNoIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3RpbmcuIEFuZCBpbXBvcnRhbnRseSwgaXQgYWZmZWN0cyBob3cgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkYWVtb24gb3BlcmF0ZXMuIFllcCwgV29ydGhGdXp6aW5nID0gdHJ1ZS5cblxuTm93IEkgc2hvdWxkIGxvb2sgaW50byB0aGUgbm9uLWhvdC1wYXRoIGZvY3VzIHN5bWJvbHMgYW5kIHJlcXVpcmVkIGNvbmZpZ3M6IEkgbmVlZCB0byBleGFtaW5lIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGFuZCBgbW0vZGFtb24vY29yZS5jYCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBhbmQgd2hhdCBlbnRyeSBwb2ludHMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6NTguNTQwMTY2NjcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQyNjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXJnZXRfbWV0cmljX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc4PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjk0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjk1OnN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTYtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDE6NTguNTgyNTk2OTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE3MDkxMzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgREFNT04ncyBTeXNmcyBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBtbS9kYW1vbmAgc3lzZnMgaW50ZXJhY3Rpb25zLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUg4oCTIHNwZWNpZmljYWxseSwgdGhlIG5vbi1zdGF0aWMgb25lcywgYXMgdGhvc2UgYXJlIHRoZSBvbmVzIGV4cG9zZWQgZm9yIGV4dGVybmFsIGNvbnRyb2wgb3IgaW50ZXJhY3Rpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgdGhlIGVudHJ5IHBvaW50cy4gVGhleSdyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoYXQgb3JjaGVzdHJhdGUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbiBhbmQgdGhlIERBTU9OIGNvcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXNwZWN0cyBvZiB0aGUgREFNT04gc3Vic3lzdGVtcyBhcmUgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSB3aGVyZSBuZXcgbW9uaXRvcnMgYW5kIGFjdGlvbnMgYXJlIGV4cG9zZWQsIGFuZCBob3cgdG8gY2hhbmdlIGN1cnJlbnQgb25lcy4gVWx0aW1hdGVseSwgdW5kZXJzdGFuZGluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBpbGx1bWluYXRlIHRoZSBjb250cm9sIGZsb3cgYW5kIGV4dGVuc2liaWxpdHkgb2YgdGhlIHdob2xlIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjA0Ljc1MzUxMzE0MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFx0XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIG1ldHJpY19uYW1lLVxcdTAwM2VuYW1lKTtcXG4xMjkxOlxcdFxcdH1cXG4xMjkyOlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyOTM6XFx0fVxcbjEyOTQ6XFx0XFxuMTI5NTpcXHRzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbjEyOTY6XFx0XFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4xMjk3OlxcdHtcXG4xMjk4OlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxuMTI5OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxuMTMwMDpcXHRcXHRpbnQgaTtcXG4xMzAxOlxcdFxcbjEzMDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSsrKSB7XFxuMTMwMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgKm1ldHJpY19uYW1lO1xcbjEzMDQ6XFx0XFxuMTMwNTpcXHRcXHRcXHRtZXRyaWNfbmFtZSA9IFxcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XFxuMTMwNjpcXHRcXHRcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBtZXRyaWNfbmFtZS1cXHUwMDNlbmFtZSkpIHtcXG4xMzA3OlxcdFxcdFxcdFxcdGdvYWwtXFx1MDAzZW1ldHJpYyA9IG1ldHJpY19uYW1lLVxcdTAwM2VtZXRyaWM7XFxuMTMwODpcXHRcXHRcXHRcXHRyZXR1cm4gY291bnQ7XFxuMTMwOTpcXHRcXHRcXHR9XFxuMTMxMDpcXHRcXHR9XFxuMTMxMTpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzEyOlxcdH1cXG4xMzEzOlxcdFxcbjEzMTQ6XFx0c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuMTMxNTpcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4xMzE2OlxcdHtcXG4xMzE3OlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbjEzMTg6XFx0XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxuMTMxOTpcXHRcXG4xMzIwOlxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4xMzIxOlxcdH1cXG4xMzIyOlxcdFxcbjEzMjM6XFx0c3RhdGljIHNzaXplX3QgdGFyZ2V0X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbjEzMjQ6XFx0XFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4xMzI1OlxcdHtcXG4xMzI2OlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbjEzMjc6XFx0XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxuMTMyODpcXHRcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4xMzI5OlxcdFxcbjEzMzA6XFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xcbjEzMzE6XFx0fVxcbjEzMzI6XFx0XFxuMTMzMzpcXHRzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuMTMzNDpcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4xMzM1OlxcdHtcXG4xMzM2OlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdFxcbjEzMzc6XFx0XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxuMTMzODpcXHRcXG4xMzM5OlxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxuMTM0MDpcXHR9XFxuMTM0MTpcXHRcXG4xMzQyOlxcdHN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuMTM0MzpcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjEzNDQ6XFx0e1xcbjEzNDU6XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxuMTM0NjpcXHRcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG4xMzQ3OlxcdFxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlKTtcXG4xMzQ4OlxcdFxcbjEzNDk6XFx0XFx0LyogZmVlZCBjYWxsYmFjayBzaG91bGQgY2hlY2sgZXhpc3RlbmNlIG9mIHRoaXMgZmlsZSBhbmQgcmVhZCB2YWx1ZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MjowNC43NTM2NDUyNDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMzMzMTIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gUXVvdGEgR29hbCBBcHBsaWNhdGlvbiBpbiBEQU1PTioqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgcXVvdGEgZ29hbHMgYXJlIGFjdHVhbGx5ICphcHBsaWVkKiB3aXRoaW4gdGhlIHN5c2ZzIHRvIERBTU9OIHBpcGVsaW5lLiBJIHdhbnQgdG8gdHJhY2UgdGhhdCBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGUgdHJhbnNmb3JtYXRpb25zLCBhbmQgdGhlIHBvaW50cyBvZiBpbnRlcmFjdGlvbi4gV2hlcmUgZXhhY3RseSBkb2VzIHRoZSBpbmZvcm1hdGlvbiBvcmlnaW5hdGluZyBmcm9tIHRoZSBzeXNmcyBpbnRlcmZhY2UgZ2V0IGluY29ycG9yYXRlZCBpbnRvIHRoZSBEQU1PTiBjb250ZXh0PyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzPyBJIG5lZWQgdG8gbWFwIG91dCBob3cgdGhlIHF1b3RhIHRhcmdldHMgZGVmaW5lZCBpbiBzeXNmcyBldmVudHVhbGx5IGluZmx1ZW5jZSB0aGUgbW9uaXRvcmluZyBhbmQgYWN0aW9ucyB0YWtlbiBieSB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUuIEknbSBhZnRlciB0aGUgcHJlY2lzZSBtZWNoYW5pc207IHRoZSBncmFudWxhciBkZXRhaWxzIG9mIGhvdyB0aGVzZSBnb2FscyBwcm9wYWdhdGUgYW5kIGFyZSB1bHRpbWF0ZWx5IHVzZWQgdG8gb3B0aW1pemUgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjkwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MjowNy4wODY5Nzg1MzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjcxOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1jb21tb24uaD01MT1pbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTMtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTg6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTktXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTUxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE2NC1cXHRzeXNmc19jdHggPSBzeXNmc19rZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjE2NTpcXHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXFx1MDAzZXNjaGVtZXMsIGN0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTY2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MDcuMTMyMjU3MDUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTE5MTkxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBEQU1PTiBoYW5kbGVzIHF1b3RhIGdvYWxzIGFuZCBzY2hlbWVzLiBNeSBpbml0aWFsIHBsYW4gaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUgZGlyZWN0bHkuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHR3byBrZXkgZmlsZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW06IGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGFuZCBgbW0vZGFtb24vY29yZS5jYC4gSSdtIGhvcGluZyB0byBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGVzZSBmaWxlcyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgZGVmaW5pbmcsIG1hbmFnaW5nLCBvciBpbnRlcmFjdGluZyB3aXRoIHF1b3RhIGdvYWxzIGFuZCB0aGUgdmFyaW91cyBzY2hlbWVzIHVzZWQgd2l0aGluIERBTU9OLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MTEuOTg0MTc5MTc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU4OTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19zZXRfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTUxPWludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIzMzY9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfc2V0X2FjY2Vzc19wYXR0ZXJuKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzNjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzNjE6c3RhdGljIGludCBkYW1vc19zeXNmc19zZXRfZGVzdHMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzYyLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNDE3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2NoZW1lX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNDM2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDM3OnN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfc2V0X2ZpbHRlcl9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnNjaGVtZSlcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjQzOC17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjUwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZV9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICpzY2hlbWUpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUwOC1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTA5OlxcdGVyciA9IGRhbW9zX3N5c2ZzX3NldF9kZXN0cyhzY2hlbWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTEwLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjUxNy1cXHRcXHRnb3RvIHJtZGlyX3B1dF9xdW90YXNfYWNjZXNzX3BhdHRlcm5fb3V0O1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTE4OlxcdGVyciA9IGRhbW9zX3N5c2ZzX3NldF9maWx0ZXJfZGlycyhzY2hlbWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNTE5LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODk4OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk5LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjE1MT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjQtXFx0c3lzZnNfY3R4ID0gc3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXTtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxNjU6XFx0cmV0dXJuIGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3lzZnNfY3R4LVxcdTAwM2VzY2hlbWVzLCBjdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjE2Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjEyLjAyNzc3NDMyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODk4NTM3OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgU3lzZnMgUXVvdGEgQ29udmVyc2lvbiB0byBEQU1PTiBTdHJ1Y3R1cmVzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBzeXNmcyBxdW90YSByZXByZXNlbnRhdGlvbnMgYXJlIGJlaW5nIHRyYW5zbGF0ZWQgaW50byB0aGUgREFNT04gc3RydWN0dXJlcy4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYnJpZGdlIHRoZSBnYXAuIEkga25vdyB0aGVyZSdzIHNvbWUgaW50ZXJhY3Rpb24gdGhlcmUsIGJ1dCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgcXVlcnlpbmcgb3Igc2VhcmNoaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgZnVuY3Rpb25zIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhpcyBwdXJwb3NlLCBob3BpbmcgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHBhdGhzLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGZyb20gc3lzZnMgZGF0YSB0byBEQU1PTi1jb21wYXRpYmxlIGZvcm1hdCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdW5kZXJzdGFuZCB0aGUgZXhpc3RpbmcgbWVjaGFuaXNtIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjE2LjkyNjMxNDU2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMDEyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3Nfc3lzZnNfLipxdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3dhdGVybWFya3Nfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxNC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTYtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjI0OnN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI3LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc4PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjgwLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI4MTpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjgyOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4My1cXHRpbnQgaTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjk1PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI5Ny17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyOTg6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI5OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDAtXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxND1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzE2LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMxNzpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3RcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMxODpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMxOS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzIzPXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzI1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyNjpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3RcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyNzpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzMzPXN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNjpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZ29hbCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3RcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNzpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzOC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzQyPXN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNDU6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNDY6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDctXFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNmdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNTM9c3RhdGljIHNzaXplX3QgbmlkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM1NS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNTY6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNTc6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNTgtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM2Mz1zdGF0aWMgc3NpemVfdCBuaWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM2NS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNjY6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNjc6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNjgtXFx0aW50IGVyciA9IGtzdHJ0b2ludChidWYsIDAsIFxcdTAwMjZnb2FsLVxcdTAwM2VuaWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEzNzQ9c3RhdGljIHNzaXplX3QgcGF0aF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNzYte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzc3OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzNzg6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzc5LVxcdGludCBsZW47XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTM4OD1zdGF0aWMgc3NpemVfdCBwYXRoX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzOTAte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzkxOlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpnb2FsID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzOTI6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzkzLVxcdGNoYXIgKnBhdGggPSBrbWFsbG9jX2FycmF5KHNpemVfYWRkKGNvdW50LCAxKSwgc2l6ZW9mKCpwYXRoKSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDA5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDEwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxMS17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MTI6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKmdvYWwgPSBjb250YWluZXJfb2Yoa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MTQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQxOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQxOTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X21ldHJpY19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMC1cXHRcXHRfX0FUVFJfUldfTU9ERSh0YXJnZXRfbWV0cmljLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDIzLVxcdFxcdF9fQVRUUl9SV19NT0RFKHRhcmdldF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjYtXFx0XFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0Mjg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyOS1cXHRcXHRfX0FUVFJfUldfTU9ERShuaWQsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMwLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDMxOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9wYXRoX2F0dHIgPVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMyLVxcdFxcdF9fQVRUUl9SV19NT0RFKHBhdGgsIDA2MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM0OnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzU6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X21ldHJpY19hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzY6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzNzpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzODpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDM5OlxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3BhdGhfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQwLVxcdE5VTEwsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDEtfTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0MjpBVFRSSUJVVEVfR1JPVVBTKGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDQzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NDU6XFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX3JlbGVhc2UsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NDYtXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ0NzpcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2dyb3VwcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ0OC19O1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NTQ6c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1NS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU2OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICoqZ29hbHNfYXJyO1xcdC8qIGNvdW50ZWQgYnkgbnIgKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1Ny1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpkYW1vc19zeXNmc19xdW90YV9nb2Fsc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDYxLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2MjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ2My19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0NjU6c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2NjpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDY3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ2ODpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqKmdvYWxzX2FyciA9IGdvYWxzLVxcdTAwM2Vnb2Fsc19hcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NjktXFx0aW50IGk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ3OS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4MDpzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FkZF9kaXJzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDgxOlxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHMsIGludCBucl9nb2FscylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4Mi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODM6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwgKipnb2Fsc19hcnIsICpnb2FsO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg0LVxcdGludCBlcnIsIGk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0ODY6XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODctXFx0aWYgKCFucl9nb2FscylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDk2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9nb2FsczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0OTc6XFx0XFx0Z29hbCA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ5OC1cXHRcXHRpZiAoIWdvYWwpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ5OTpcXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ybV9kaXJzKGdvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwMC1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTAzLVxcdFxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZnb2FsLVxcdTAwM2Vrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTA0OlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2t0eXBlLCBcXHUwMDI2Z29hbHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDUtXFx0XFx0XFx0XFx0XFxcIiVkXFxcIiwgaSk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUwNy1cXHRcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2Z29hbC1cXHUwMDNla29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MDg6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhnb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MDktXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTE4PXN0YXRpYyBzc2l6ZV90IG5yX2dvYWxzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTUyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1MjE6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzICpnb2FscyA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTIyOlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTUyNz1zdGF0aWMgc3NpemVfdCBucl9nb2Fsc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTI5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTUzMDpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmdvYWxzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTMxLVxcdGludCBuciwgZXJyID0ga3N0cnRvaW50KGJ1ZiwgMCwgXFx1MDAyNm5yKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTM3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTM4OlxcdGdvYWxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscywga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1MzktXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU0MS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTQyOlxcdGVyciA9IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FkZF9kaXJzKGdvYWxzLCBucik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NDMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTQ5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTUyOlxcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMsIGtvYmopKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1My19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTU6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19ucl9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU1Ni1cXHRcXHRfX0FUVFJfUldfTU9ERShucl9nb2FscywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NTctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTg6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NTk6XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX25yX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU2MC1cXHROVUxMLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTYxLX07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjI6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19xdW90YV9nb2Fscyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1NjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfa3R5cGUgPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1NjU6XFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19xdW90YV9nb2Fsc19yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY2LVxcdC5zeXNmc19vcHMgPSBcXHUwMDI2a29ial9zeXNmc19vcHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1Njc6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfZ3JvdXBzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTY4LX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTY4ND1zdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjg2LVxcdHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICp3ZWlnaHRzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjg3OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2ODgtXFx0dW5zaWduZWQgbG9uZyBtcztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNzAyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcXVvdGFzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKnF1b3RhcylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzA0LVxcdHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICp3ZWlnaHRzO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzA1OlxcdHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZ29hbHM7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3MDYtXFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzE5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNzIwOlxcdGdvYWxzID0gZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcyMS1cXHRpZiAoIWdvYWxzKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTcyNS1cXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2Z29hbHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3MjY6XFx0XFx0XFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2t0eXBlLCBcXHUwMDI2cXVvdGFzLVxcdTAwM2Vrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNzI3LVxcdFxcdFxcdFxcXCJnb2Fsc1xcXCIpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE3Mzg9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcXVvdGFzX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqcXVvdGFzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE3NDAtXFx0a29iamVjdF9wdXQoXFx1MDAyNnF1b3Rhcy1cXHUwMDNld2VpZ2h0cy1cXHUwMDNla29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE3NDE6XFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfcm1fZGlycyhxdW90YXMtXFx1MDAzZWdvYWxzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTc0Mi1cXHRrb2JqZWN0X3B1dChcXHUwMDI2cXVvdGFzLVxcdTAwM2Vnb2Fscy1cXHUwMDNla29iaik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg1MjpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKnN5c2ZzX2dvYWxzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODUzLVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg1OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3lzZnNfZ29hbHMtXFx1MDAzZW5yOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg1OTpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqc3lzZnNfZ29hbCA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXFx0XFx0XFx0c3lzZnNfZ29hbHMtXFx1MDAzZWdvYWxzX2FycltpXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MTYuOTcxNjI1ODc3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDUzMTAwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIGludGVyYWN0cyB3aXRoIHF1b3Rhcywgc2NoZW1lcywgYW5kIHN5c2ZzLCBhbmQgaG93IHRob3NlIGludGVyYWN0aW9ucyBhcmUgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSBzdGF0aWMgc3ltYm9scy4gVGhlIGNvcmUgREFNT04gc291cmNlIGNvZGUgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC5cblxuKipEQU1PTidzIE5vbi1TdGF0aWMgU3ltYm9sIEV4cGxvcmF0aW9uKipcblxuRmlyc3QsIEknbGwgZXhhbWluZSBgbW0vZGFtb24vc3lzZnMtY29tbW9uLmhgIGFuZCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gVGhlc2UgYXJlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzIHRvIGludmVzdGlnYXRlIGhvdyBxdW90YXMsIHNjaGVtZXMsIGFuZCBzeXNmcyBhcmUgaW50ZXJ3b3ZlbiB3aXRoIHRoZSBjb3JlIERBTU9OIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgc2luY2UgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zIHRob3NlIHNwZWNpZmljIGFyZWFzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGNvbmZpZ3VyYXRpb25zIG9yIGNvbnRyb2xzIG1pZ2h0IGJlIGR5bmFtaWNhbGx5IGFkanVzdGVkIG9yIGV4cG9zZWQgdGhyb3VnaCBzeXNmcywgYW5kIGhvdyBzY2hlbWVzIGNvdWxkIGJlIHRpZWQgaW50byBlbmZvcmNpbmcgb3IgYWRqdXN0aW5nIHF1b3Rhcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwOTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MjoyMC4xMTY5Mzg1MTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtY29tbW9uLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvbW1vbiBDb2RlIGZvciBEQU1PTiBTeXNmcyBJbnRlcmZhY2VcXG4gICA0OlxcdCAqL1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGFtb24uaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rb2JqZWN0LmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdGV4dGVybiBzdHJ1Y3QgbXV0ZXggZGFtb25fc3lzZnNfbG9jaztcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlIHtcXG4gIDEyOlxcdFxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuICAxMzpcXHRcXHR1bnNpZ25lZCBsb25nIG1pbjtcXG4gIDE0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4O1xcbiAgMTU6XFx0fTtcXG4gIDE2OlxcdFxcbiAgMTc6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG4gIDE4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluLFxcbiAgMTk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtYXgpO1xcbiAgMjA6XFx0dm9pZCBkYW1vbl9zeXNmc191bF9yYW5nZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdWxfcmFuZ2Vfa3R5cGU7XFxuICAyMzpcXHRcXG4gIDI0OlxcdC8qXFxuICAyNTpcXHQgKiBzY2hlbWVzIGRpcmVjdG9yeVxcbiAgMjY6XFx0ICovXFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzIHtcXG4gIDI5OlxcdFxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICoqc2NoZW1lc19hcnI7XFxuICAzMTpcXHRcXHRpbnQgbnI7XFxuICAzMjpcXHR9O1xcbiAgMzM6XFx0XFxuICAzNDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqZGFtb25fc3lzZnNfc2NoZW1lc19hbGxvYyh2b2lkKTtcXG4gIDM1OlxcdHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc19ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzY2hlbWVzKTtcXG4gIDM2OlxcdFxcbiAgMzc6XFx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfc2NoZW1lc19rdHlwZTtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gIDQwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG4gIDQzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbiAgNDQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbiAgNDc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiAgNDg6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbiAgNDk6XFx0XFx0XFx0Ym9vbCB0b3RhbF9ieXRlc19vbmx5LCB1bnNpZ25lZCBsb25nIHN6X2ZpbHRlcl9wYXNzZWQpO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRpbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbiAgNTI6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRpbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4gIDU1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuICA1NjpcXHRcXG4gIDU3OlxcdHZvaWQgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXFxuICA1ODpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4gIDU5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuICA2MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MjAuMTE3MDEzNTY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODA5NDMyNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcyBxdW90YSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhZGRpbmcgYW5kIHNldHRpbmcgcXVvdGFzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBhZGRzIG5ldyBxdW90YSBzY2hlbWVzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY2hlY2tpbmcgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCBhbmQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLiBUaGVzZSBzb3VuZCBsaWtlIHRoZSBsaWtlbHkgZW50cnkgcG9pbnRzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBxdW90YSBtYW5hZ2VtZW50IHRocm91Z2ggc3lzZnMsIHdoaWNoIGlzIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHF1b3RhcyBhcmUgKmRlZmluZWQqIGFuZCAqaW5pdGlhbGl6ZWQqLiAgSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgZnVuY3Rpb24gb3Igc29tZXRoaW5nIHdpdGggYSBzaW1pbGFyIHJvbGUgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiAgU2luY2UgdGhpcyBpcyBjb3JlIHF1b3RhIG1hbmFnZW1lbnQgY29kZSwgaXQncyBtb3N0IGxpa2VseSB0byBiZSBsb2NhdGVkIHdpdGhpbiBlaXRoZXIgYGNvcmUuY2AgZmlsZSBvciB3aXRoaW4gdGhlIGBsaW51eC9kYW1vbi5oYCBoZWFkZXIgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjMxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0MjozMS45MjY0NDkyMTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTU3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX25ld19xdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz02MjE9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYyNi1cXG5tbS9kYW1vbi9jb3JlLmM6NjI3OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtNjI4LVxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExNjI9aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE3Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTE3NzpcXHRcXHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTc4LVxcdFxcdFxcdFxcdHNyY19nb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzg6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM5LVxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVxcdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MzpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQ0LVxcdFxcdFxcdDEwMDAwIC0gYWN0aXZlX21lbV9icCArIDIpO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjIzNjpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzctXFx0XFx0XFx0XFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDMtXFx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXFx0XFx0aWYgKCFnb2FsKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2NTpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cXHUwMDNlbWV0cmljLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY2LVxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODM0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODUyLVxcdFxcdCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTM6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKGRzdF9nb2Fsc1tpXS5tZXRyaWMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1NC1cXHRcXHRcXHRcXHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6MzEuOTY5NjEwNDI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzMjI1NDIxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgUmV2aWV3IGZvciBEQU1PTioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgREFNT04gaW1wbGVtZW50YXRpb24uIEZpcnN0LCBhIHF1aWNrIHNjYW4gb2YgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIHRlbGxzIG1lIHRoZSBjb3JlIGBEQU1PTmAgb3B0aW9uIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsLiBBbmQsIHByZWRpY3RhYmx5LCBgREFNT05fU1lTRlNgIGlzIGNvbnRpbmdlbnQgb24gYm90aCBgREFNT05gIGFuZCBgU1lTRlNgIGJlaW5nIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgc3VwcG9ydGluZyBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMgZnVuY3Rpb25hbGl0eSB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQ6IEknbGwgcmV2aWV3IHRoZXNlOiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzYCwgYW5kIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIGNvbnRyb2wgcG9pbnRzLlxuXG5TcGVjaWZpY2FsbHksIEknbSBjdXJpb3VzIGlmIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBicm9hZGVyIHZpc2liaWxpdHkgb3IgcG90ZW50aWFsIGludGVyZmFjZSBwb2ludHMuIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gd2F0Y2ggZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mjo0MC4yOTIxNTY1NTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDAxOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTEzOT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTUwLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMTUxOiAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTExNTItICogQGRzdDpcXHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjEtICovXFxubW0vZGFtb24vY29yZS5jOjExNjI6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExNjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTExODc9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExOTMtXFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jOjExOTQ6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE5NS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMi1cXHRcXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MjM6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI0LVxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZxdW90YSlcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDktXFx0XFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2FscyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUwOlxcdFxcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTEtXFx0XFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODYyLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NjM6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQwLjMzODE2MTI1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTY3Mjc4ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJlbGV2YW50IEtlcm5lbCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4gYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gY29uZmlndXJhdGlvbnMgcmVsZXZhbnQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9uIHRlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBpZGVudGlmaWVkIGFsbCBwb3RlbnRpYWwgdmFyaWFibGVzLlxuXG5JJ3ZlIGdvdCBhIHNob3J0IGxpc3Qgb2YgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIGhlcmU6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBTWVNGU2AsIGFuZCBhbHNvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoZSBwcmVzZW5jZSBvZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBjb2RlIHNlZW1zIHRvIGNhbGN1bGF0ZSB0aGUgVEhQIG1lbW9yeSByYXRpbyB1c2luZyBgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9BTk9OX1RIUFMpYC4gVGh1cywgZW5hYmxpbmcgVEhQIGlzIGhpZ2hseSBzaWduaWZpY2FudCwgZXZlbiAqcmVxdWlyZWQqLCBmb3IgcHJvcGVyIHRlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgVEhQIGlzIGVuYWJsZWQgYW5kIGlmIHRoYXQgY2hhbmdlcyBiYXNlZCBvbiBhbnkgb2YgdGhlIG90aGVyIGNvbmZpZ3MuXG5cblNvLCBuZXh0LCBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGF2YWlsYWJpbGl0eSBvciBiZWhhdmlvciBvZiBgTlJfQU5PTl9USFBTYCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSWYgdGhlcmUncyBubyBkZXBlbmRlbmN5LCB0aGVuIHBlcmhhcHMgSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBjYXVzZXMgVEhQcyB0byBiZSBjcmVhdGVkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwsIG9yIGF0IGxlYXN0IGJlIGNvbmZpZ3VyYWJsZS4gSSBtYXkgYmUgbWlzc2luZyBhIGtleSBkZXBlbmRlbmN5IG9yIGVuYWJsaW5nIGNvbmZpZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgc291cmNlcywgYW5kIG1heWJlIHNvbWUgbWFpbGluZyBsaXN0IGFyY2hpdmVzLCB0byBjbGFyaWZ5IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTk0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQyLjkwNTQ0MjQxNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTQzNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5SX0FOT05fVEhQU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9MjM5PWVudW0gbm9kZV9zdGF0X2l0ZW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0yNzEtXFx0TlJfRklMRV9QTURNQVBQRUQsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoyNzI6XFx0TlJfQU5PTl9USFBTLFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjczLVxcdE5SX1ZNU0NBTl9XUklURSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MzQ3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bXN0YXRfaXRlbV9wcmludF9pbl90aHAoZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0zNTEtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDozNTI6XFx0cmV0dXJuIGl0ZW0gPT0gTlJfQU5PTl9USFBTIHx8XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0zNTMtXFx0ICAgICAgIGl0ZW0gPT0gTlJfRklMRV9USFBTIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQzLjA0Njk5MTk3OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjk2ODk3OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG1tem9uZS5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbWVtb3J5IHpvbmUgc3RydWN0dXJlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYC4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIHRoYXQgc2VjdGlvbiBhcm91bmQgbGluZSAyNzAgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgZGVmaW5pdGlvbiBJJ20gYWZ0ZXIsIGF0IGxlYXN0IHRvIGdldCByZS1vcmllbnRlZC4gSSByZW1lbWJlciBpdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBtZW1iZXJzIHJlbGF0ZWQgdG8gYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBhcmUgbGlrZWx5IGRlZmluZWQuIEkgd2FudCBhIHF1aWNrIHJldmlldyBvZiBob3cgdGhlIHpvbmVzIGFyZSBvcmdhbml6ZWQgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQ2LjM0Mzg5MjU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2NTpcXHRcXHROUl9GSUxFX0RJUlRZLFxcbiAyNjY6XFx0XFx0TlJfV1JJVEVCQUNLLFxcbiAyNjc6XFx0XFx0TlJfU0hNRU0sXFx0XFx0Lyogc2htZW0gcGFnZXMgKGluY2x1ZGVkIHRtcGZzL0dFTSBwYWdlcykgKi9cXG4gMjY4OlxcdFxcdE5SX1NITUVNX1RIUFMsXFxuIDI2OTpcXHRcXHROUl9TSE1FTV9QTURNQVBQRUQsXFxuIDI3MDpcXHRcXHROUl9GSUxFX1RIUFMsXFxuIDI3MTpcXHRcXHROUl9GSUxFX1BNRE1BUFBFRCxcXG4gMjcyOlxcdFxcdE5SX0FOT05fVEhQUyxcXG4gMjczOlxcdFxcdE5SX1ZNU0NBTl9XUklURSxcXG4gMjc0OlxcdFxcdE5SX1ZNU0NBTl9JTU1FRElBVEUsXFx0LyogUHJpb3JpdGlzZSBmb3IgcmVjbGFpbSB3aGVuIHdyaXRlYmFjayBlbmRzICovXFxuIDI3NTpcXHRcXHROUl9ESVJUSUVELFxcdFxcdC8qIHBhZ2UgZGlydHlpbmdzIHNpbmNlIGJvb3R1cCAqL1xcbiAyNzY6XFx0XFx0TlJfV1JJVFRFTixcXHRcXHQvKiBwYWdlIHdyaXRpbmdzIHNpbmNlIGJvb3R1cCAqL1xcbiAyNzc6XFx0XFx0TlJfVEhST1RUTEVEX1dSSVRURU4sXFx0LyogTlJfV1JJVFRFTiB3aGlsZSByZWNsYWltIHRocm90dGxlZCAqL1xcbiAyNzg6XFx0XFx0TlJfS0VSTkVMX01JU0NfUkVDTEFJTUFCTEUsXFx0LyogcmVjbGFpbWFibGUgbm9uLXNsYWIga2VybmVsIHBhZ2VzICovXFxuIDI3OTpcXHRcXHROUl9GT0xMX1BJTl9BQ1FVSVJFRCxcXHQvKiB2aWE6IHBpbl91c2VyX3BhZ2UoKSwgZ3VwIGZsYWc6IEZPTExfUElOICovXFxuIDI4MDpcXHRcXHROUl9GT0xMX1BJTl9SRUxFQVNFRCxcXHQvKiBwYWdlcyByZXR1cm5lZCB2aWEgdW5waW5fdXNlcl9wYWdlKCkgKi9cXG4gMjgxOlxcdFxcdE5SX1ZNQUxMT0MsXFxuIDI4MjpcXHRcXHROUl9LRVJORUxfU1RBQ0tfS0IsXFx0LyogbWVhc3VyZWQgaW4gS2lCICovXFxuIDI4MzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfU0hBRE9XX0NBTExfU1RBQ0spXFxuIDI4NDpcXHRcXHROUl9LRVJORUxfU0NTX0tCLFxcdC8qIG1lYXN1cmVkIGluIEtpQiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mjo0Ni4zNDQwMTg4NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTg3OTkyNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCBhcyBleHBlY3RlZCwgYE5SX0FOT05fVEhQU2AgaXMgYSBjb25zdGFudCBtZW1iZXIgb2YgdGhlIGVudW0sIHRoYXQncyBqdXN0IGEgZ2l2ZW4uIE5vdywgaXQncyBjbGVhciB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIGNvbmZpZyB0aGF0J3MgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIHRoZSBleGlzdGVuY2Ugb2YgaHVnZSBwYWdlcy4gQWxyaWdodCwgbGV0J3MgbWFwIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgZm9yIERBTU9OIGFuZCB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSBhbGwgZW5hYmxlZCwgdGhhdCdzIHRoZSBiYXNlIHJlcXVpcmVtZW50LlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBgZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNgLCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCwgYW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYXJlIGFsbCBwcmVzZW50LiBZdXAsIHRob3NlIGFyZSBhbGwgYXMgZXhwZWN0ZWQuXG5cbkknbGwgcXVpY2tseSBkbyBhIGZpbmFsIHNhbml0eSBjaGVjayBmb3IgYW55IG90aGVyIHN5bWJvbHMgaW4gYG1tL2RhbW9uYCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgZXZlcnl0aGluZyBpcyBhcyBpdCBzaG91bGQgYmUuIFZlcmlmaWVkIGFuZCBjbGVhci5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODU4LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQ5LjMzMjAxNDI3NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MTE3NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb3NfbmV3X3F1b3RhX2dvYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljICdodWdlcGFnZV9tZW1fYnAnIHRvIERBTU9OIGNvcmUgYW5kIGV4cG9zZXMgaXQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgc2NoZW1lcyBpbnRlcmZhY2UuIEl0IGNvbXB1dGVzIHRoZSByYXRpbyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHRvIGR5bmFtaWNhbGx5IHR1bmUgREFNT1MgcXVvdGFzLiBUaGlzIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiLFxuICAgIFwiZGFtb25fc3lzZnNfYWRkX3NjaGVtZXNcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb3NfbmV3X3F1b3RhX2dvYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljICdodWdlcGFnZV9tZW1fYnAnIHRvIERBTU9OIGNvcmUgYW5kIGV4cG9zZXMgaXQgdGhyb3VnaCB0aGUgREFNT04gc3lzZnMgc2NoZW1lcyBpbnRlcmZhY2UuIEl0IGNvbXB1dGVzIHRoZSByYXRpbyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHRvIGR5bmFtaWNhbGx5IHR1bmUgREFNT1MgcXVvdGFzLiBUaGlzIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDI6NDkuNDIwMTQwNzcxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1MzczODgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQ5LjQyMDYzMzU0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQxNTMyNDA2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMgKERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCwgJ2h1Z2VwYWdlX21lbV9icCcpIHRoYXQgY2FsY3VsYXRlcyB0aGUgcmF0aW8gb2YgaHVnZSBwYWdlcyB0byB1c2VkIG1lbW9yeSB1c2luZyBzdGFuZGFyZCBrZXJuZWwgY291bnRlcnMgKHRvdGFscmFtX3BhZ2VzLCBnbG9iYWxfem9uZV9wYWdlX3N0YXRlLCBhbmQgZ2xvYmFsX25vZGVfcGFnZV9zdGF0ZSkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBmdW5jdGlvbiBgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKClgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBwYWRkaW5nIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWEyNDdmYmYwMDM1YWI3ZmNhNWYxNWQzYzU3MGE1YjEyYjY5MjlkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIxOjQxOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCBhZWQ2Y2IxY2Y0ODMxLi5hOGMxNjM0NzVlZjJiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbkBAIC03MTMsNiArNzEzLDggQEAgbWVjaGFuaXNtIHRyaWVzIHRvIG1ha2UgYGBjdXJyZW50X3ZhbHVlYGAgb2YgYGB0YXJnZXRfbWV0cmljYGAgYmUgc2FtZSB0b1xuICAgYnAgKDEvMTAsMDAwKS5cbiAtIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYDogU2NoZW1lIHRhcmdldCBhY2Nlc3MgcGF0dGVybi1lbGlnaWJsZSBtZW1vcnkgcmF0aW9cbiAgIG9mIGEgbm9kZSBpbiBicCAoMS8xMCwwMDApLlxuKy0gYGBodWdlcGFnZV9tZW1fYnBgYDogVG90YWwgaHVnZSBwYWdlIHRvIHRvdGFsIHVzZWQgbWVtb3J5IHJhdGlvIGluIGJwXG4rICAoMS8xMCwwMDApLlxuIFxuIGBgbmlkYGAgaXMgb3B0aW9uYWxseSByZXF1aXJlZCBmb3IgYGBub2RlX21lbV91c2VkX2JwYGAsIGBgbm9kZV9tZW1fZnJlZV9icGBgLFxuIGBgbm9kZV9tZW1jZ191c2VkX2JwYGAsIGBgbm9kZV9tZW1jZ19mcmVlX2JwYGAgYW5kIGBgbm9kZV9lbGlnaWJsZV9tZW1fYnBgYCB0b1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggMGM4YjdkZGVmOWFiYi4uYjUyNDA1OThlNmZmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMTUzLDYgKzE1Myw3IEBAIGVudW0gZGFtb3NfYWN0aW9uIHtcbiAgKiBAREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlx0SW5hY3RpdmUgdG8gdG90YWwgTFJVIG1lbW9yeSByYXRpby5cbiAgKiBAREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XHRTY2hlbWUtZWxpZ2libGUgbWVtb3J5IHJhdGlvIG9mIGFcbiAgKlx0XHRcdFx0XHRub2RlIGluIGJhc2lzIHBvaW50cyAoMC0xMDAwMCkuXG4rICogQERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDpcdEh1Z2UgcGFnZSB0byB0b3RhbCB1c2VkIG1lbW9yeSByYXRpby5cbiAgKiBATlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTOlx0TnVtYmVyIG9mIERBTU9TIHF1b3RhIGdvYWwgbWV0cmljcy5cbiAgKlxuICAqIE1ldHJpY3MgZXF1YWwgdG8gbGFyZ2VyIHRoYW4gQE5SX0RBTU9TX1FVT1RBX0dPQUxfTUVUUklDUyBhcmUgdW5zdXBwb3J0ZWQuXG5AQCAtMTY3LDYgKzE2OCw3IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuIFx0REFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCxcbiBcdERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcbiBcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQLFxuK1x0REFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLFxuIFx0TlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi45YzBlNDJhMWQyY2ZjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMDA3LDYgKzMwMDcsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChib29sIGFjdGl2ZV9yYXRpbylcbiBcdHJldHVybiBtdWx0X2ZyYWMoaW5hY3RpdmUsIDEwMDAwLCB0b3RhbCk7XG4gfVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB0aHAsIHRvdGFsX3BhZ2VzLCBmcmVlX3BhZ2VzO1xuK1xuK1x0dG90YWxfcGFnZXMgPSB0b3RhbHJhbV9wYWdlcygpO1xuK1x0ZnJlZV9wYWdlcyA9IGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUyk7XG4rXG4rXHRpZiAodG90YWxfcGFnZXMgXHUwMDNjPSBmcmVlX3BhZ2VzKVxuK1x0XHRyZXR1cm4gMTAwMDA7XG4rXG4rXHR0aHAgPSBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0FOT05fVEhQUykgK1xuK1x0XHRcdFx0Z2xvYmFsX25vZGVfcGFnZV9zdGF0ZShOUl9TSE1FTV9USFBTKSArXG4rXHRcdFx0XHRnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKE5SX0ZJTEVfVEhQUyk7XG4rXHRyZXR1cm4gbXVsdF9mcmFjKHRocCwgMTAwMDAsIHRvdGFsX3BhZ2VzIC0gZnJlZV9wYWdlcyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcbiBcdFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbiB7XG5AQCAtMzAzOCw2ICszMDU0LDkgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoYywgcyxcbiBcdFx0XHRcdGdvYWwtXHUwMDNlbmlkKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUDpcbitcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfaHVnZXBhZ2VfbWVtX2JwKCk7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMmY0OTVhOTZiMTdhLi5kOWI4MWQ3YjU5MTBlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0xMjY5LDYgKzEyNjksMTAgQEAgc3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lIGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1tdID0ge1xuIFx0XHQubWV0cmljID0gREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlAsXG4gXHRcdC5uYW1lID0gXCJub2RlX2VsaWdpYmxlX21lbV9icFwiLFxuIFx0fSxcbitcdHtcbitcdFx0Lm1ldHJpYyA9IERBTU9TX1FVT1RBX0hVR0VQQUdFX01FTV9CUCxcbitcdFx0Lm5hbWUgPSBcImh1Z2VwYWdlX21lbV9icFwiLFxuK1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjQ5LjQyMDYzNDQ1MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjUxNjc3ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT1MgUXVvdGEgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBmdXp6aW5nIHNlc3Npb24uIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgYSBuZXcgREFNT1MgcXVvdGEgZ29hbCBtZXRyaWMsIHNwZWNpZmljYWxseSBgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQYCwgZXNzZW50aWFsbHkgdHJhY2tpbmcgaHVnZXBhZ2UgbWVtb3J5IHVzYWdlIGFzIGEgcGVyY2VudGFnZSBvZiBhdmFpbGFibGUgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBmaWxlczogYERvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdGAgZm9yIGRvY3VtZW50YXRpb24sIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIHRvIHVwZGF0ZSB0aGUgYGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljYCBlbnVtLCBhbmQgdGhlbiB0aGUgY29yZSBsb2dpYyBpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gYGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpYCBpcyBpbXBsZW1lbnRlZCwgYW5kIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBpcyB1cGRhdGVkIHRvIGhhbmRsZSB0aGUgbmV3IG1ldHJpYy4gIEZpbmFsbHksIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGFkZHMgdGhlIG1ldHJpYydzIG5hbWUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZS5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCBmb3IgYGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpYC4gIEl0IGNhbGN1bGF0ZXMgdGhlIGh1Z2VwYWdlIG1lbW9yeSBwZXJjZW50YWdlLCB0YWtpbmcgaW50byBhY2NvdW50IGB0b3RhbF9wYWdlc2AsIGBmcmVlX3BhZ2VzYCwgYW5kIHRoZSBudW1iZXIgb2YgaHVnZXBhZ2VzIGN1cnJlbnRseSBpbiB1c2UgKGBOUl9BTk9OX1RIUFNgLCBgTlJfU0hNRU1fVEhQU2AsIGBOUl9GSUxFX1RIUFNgKS4gVGhlIGxvZ2ljIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgY2FsY3VsYXRpbmcgYSBwZXJjZW50YWdlLiBXZSBkbyBzZWUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgYHRvdGFsX3BhZ2VzYCBpcyBsZXNzIHRoYW4gYGZyZWVfcGFnZXNgIHRoZSByZXR1cm4gaXMgMTAwMDAsIGkuZS4sIDEwMCUuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBxdW90YSBnb2FscyBhbmQgaG93IGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBpcyBhY3R1YWxseSBjYWxsZWQuIEknbGwgbmVlZCB0byBleGFtaW5lIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIG1vcmUgY2xvc2VseSBhbmQgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byB0cmFjZSB0aGUgY2FsbHMgYW5kIGRhdGEgZmxvdyBhcm91bmQgdGhpcy4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwb2ludHMgb2YgZW50cnkgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIElzIHRoZXJlIGEgdXNlci1zdXBwbGllZCBpbnB1dCBnb2luZyBpbnRvIHRoZSBjYWxjdWxhdGlvbnM/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIHRoYXQgYXJlIGhhbmRsZWQ/IEkgd2lsbCBmb2N1cyBvbiBmaW5kaW5nIHRoZSBwYXRoIGJldHdlZW4gYW55IHVzZXItcHJvdmlkZWQgY29uZmlndXJhdGlvbiBhbmQgdGhlIGludGVybmFsIHVzZSBvZiB0aGUgY2FsY3VsYXRpb25zIGFuZCBhc3NvY2lhdGVkIGRhdGEuIERlcGVuZGluZyBvbiBob3cgdGhpcyBkYXRhIGlzIGhhbmRsZWQsIEkgY2FuIGRlY2lkZSBpZiBpdCBuZWVkcyBpdHMgb3duIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHRoZSBleGlzdGluZyBEQU1PUyBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mjo1NC42NzIzMTY0MTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDUzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIzND1zdGF0aWNcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWUgZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMzYtXFx0e1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyNzg9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyODU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzKTsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODYtXFx0XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lICptZXRyaWNfbmFtZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI4Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI4ODpcXHRcXHRtZXRyaWNfbmFtZSA9IFxcdTAwMjZkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNbaV07XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyODktXFx0XFx0aWYgKG1ldHJpY19uYW1lLVxcdTAwM2VtZXRyaWMgPT0gZ29hbC1cXHUwMDNlbWV0cmljKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyOTU9c3RhdGljIHNzaXplX3QgdGFyZ2V0X21ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAxLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzAyOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9zX3N5c2ZzX3Fnb2FsX21ldHJpY19uYW1lcyk7IGkrKykge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzAzLVxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMDQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEzMDU6XFx0XFx0bWV0cmljX25hbWUgPSBcXHUwMDI2ZGFtb3Nfc3lzZnNfcWdvYWxfbWV0cmljX25hbWVzW2ldO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzA2LVxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIG1ldHJpY19uYW1lLVxcdTAwM2VuYW1lKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mjo1NC43MTY3NzUyNjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE2MDY3NDYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCoqXG5cbk9rYXksIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgZnVuY3Rpb24uICBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCDigJMgdGhlIGNhbGwgc2l0ZXMg4oCTIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gKmRvKiBhbmQgd2h5IGl0J3MgZXZlbiBuZWVkZWQuIFVuZGVyc3RhbmRpbmcgdGhlICp3aGF0KiBhbmQgdGhlICp3aHkqIGFyZSBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gVGhlbiwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEknbGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpY3MuIFdoYXQgYXJlIGl0cyBpbnB1dHM/IFdoYXQncyB0aGUgbG9naWM/ICBXaGF0IHNpZGUgZWZmZWN0cyBkb2VzIGl0IGhhdmU/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgbW9kaWZ5PyBBbGwgdGhlIGRldGFpbHMgbWF0dGVyLCBiZWNhdXNlIHVsdGltYXRlbHksIEknbGwgbmVlZCB0byBhc3Nlc3MgaXRzIGNvcnJlY3RuZXNzLCBwZXJmb3JtYW5jZSwgYW5kIG1heWJlIGV2ZW4gaXRzIG1haW50YWluYWJpbGl0eS4gSXTigJlzIHRoZSBvbmx5IHdheSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgcGVyZm9ybWluZyBhcyBpbnRlbmRlZC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUsIGFuZCB0aGVuIGRlY2lkZSBob3cgYmVzdCB0byBhcHByb2FjaCB3aGF0ZXZlciB0YXNrIGhhcyBsZWFkIG1lIHRvIHRoaXMgcGllY2Ugb2YgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjU3Ljg3NzQ1MjQ2NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MjA2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzAxMD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9zX2h1Z2VwYWdlX21lbV9icCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwMjUtXFxubW0vZGFtb24vY29yZS5jOjMwMjY6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0zMDI3LVxcdFxcdHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzA2Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19xdW90YV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzA3Mi1cXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XFxubW0vZGFtb24vY29yZS5jOjMwNzM6XFx0XFx0ZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShjLCBzLCBnb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzA3NC1cXHRcXHRoaWdoZXN0X3Njb3JlID0gbWF4KGhpZ2hlc3Rfc2NvcmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQyOjU3LjkyMjA4Nzc0MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjUxNzUzNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBJbml0aWFsaXphdGlvbiBSaXNrcyBpbiB0aGlzIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgaGF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbHVya2luZyBhYm91dCwgYXMgdGhhdCdzIGFsd2F5cyBhIGNvbmNlcm4uIEZpcnN0LCBJIGZvY3VzZWQgb24gdGhlIGBkYW1vc19odWdlcGFnZV9tZW1fYnBgIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMgYHRocGAsIGB0b3RhbF9wYWdlc2AsIGFuZCBgZnJlZV9wYWdlc2AgYXJlIGFsbCBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBTcGVjaWZpY2FsbHk6IGB0b3RhbF9wYWdlc2AgZ2V0cyBgdG90YWxyYW1fcGFnZXMoKWAsIGBmcmVlX3BhZ2VzYCBnZXRzIHRoZSBmcmVlIHBhZ2UgY291bnQgZnJvbSBgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZWAsIGFuZCBgdGhwYCBhY2N1bXVsYXRlcyB0aGUgVEhQIGNvdW50cyBmcm9tIHRoZSBnbG9iYWwgbm9kZSBwYWdlIHN0YXRlcy4gVGhlIGNvcmUgY2FsY3VsYXRpb24gdGhlbiB1c2VzIHRoZXNlIGluaXRpYWxpemVkIHZhbHVlcyBpbiBgbXVsdF9mcmFjYC4gVGhlIHJlc3VsdCBpcyBhc3NpZ25lZCB0byBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCwgYW5kIHRoYXQncyB0aGUgZW5kIG9mIHRoZSBsaW5lLiBTbyBmYXIsIHNvIGdvb2Qg4oCTIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuXG5cbk1vdmluZyBvbiwgdGhlIGFkZGl0aW9uIG9mIHRoZSBgREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQYCBlbnVtIHZhbHVlIGJlZm9yZSBgTlJfREFNT1NfUVVPVEFfR09BTF9NRVRSSUNTYCBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgaW4gaXRzZWxmLiBJdOKAmXMgc2ltcGx5IGV4dGVuZGluZyBhbiBlbnVtZXJhdGlvbi4gU2ltaWxhcmx5LCB0aGUgYWRkaXRpb24gb2YgdGhlIG5ldyBzdGF0aWMgZW50cnkgaW4gdGhlIGBkYW1vc19zeXNmc19xZ29hbF9tZXRyaWNfbmFtZXNgIGFycmF5IGlzIGEgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3IG1ldHJpYyB3aXRoIGl0cyBuYW1lLiBObyBwcm9ibGVtcyB0aGVyZS5cblxuTmV4dCwgSSBsb29rZWQgZm9yIGFueXRoaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIEZvcnR1bmF0ZWx5LCB0aGlzIHBhdGNoIGRvZXNu4oCZdCBzZWVtIHRvIGJlIHB1c2hpbmcgYW55IHN0cnVjdHMgb3V0LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyBvciBnYXJiYWdlIGRhdGEgbGVha2FnZS4gU3lzZnMgcmVhZHMgYW5kIHdyaXRlcyBhcmUgZG9uZSB1c2luZyBmb3JtYXR0ZWQgc3RyaW5ncywgd2hpY2ggYWxsZXZpYXRlcyBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIGZpZWxkcyBlbmRpbmcgdXAgaW4gdGhlIG91dHB1dC4gTW9yZW92ZXIsIHRoZXJlJ3Mgbm8gbWVtb3J5IGFsbG9jYXRpb24gb3IgY2hhbmdlcyB0byBzdHJ1Y3R1cmUgbGF5b3V0cyB0aGF0IHdvdWxkIGNhdXNlIG5ldyB1bmluaXRpYWxpemVkIGZpZWxkcyB0byBiZSBleHBvc2VkLiBBbmQsIEkgc2VlIG5vIGJyYW5jaGluZyBsb2dpYyB0aGF0J3MgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgcGF0Y2ggaXMganVzdCBhZGRpbmcgYSBuZXcgbWV0cmljIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHJlYWRpbHkgYXZhaWxhYmxlIGtlcm5lbCBwYWdlIGNvdW50ZXJzLiBJJ20gc2F0aXNmaWVkIHRoYXQgdGhlcmUgaXMgKipubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzKiogdG8gdXNlciBzcGFjZSBpbiB0aGlzIHBhdGNoLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGVyZeKAmXMgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgaW52b2tlZCBmb3IgdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDAsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQzOjAzLjU3Mzg0NTg4NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBEQU1PUyBxdW90YSBnb2FsIG1ldHJpYyAoREFNT1NfUVVPVEFfSFVHRVBBR0VfTUVNX0JQLCAnaHVnZXBhZ2VfbWVtX2JwJykgdGhhdCBjYWxjdWxhdGVzIHRoZSByYXRpbyBvZiBodWdlIHBhZ2VzIHRvIHVzZWQgbWVtb3J5IHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBjb3VudGVycyAodG90YWxyYW1fcGFnZXMsIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUsIGFuZCBnbG9iYWxfbm9kZV9wYWdlX3N0YXRlKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGZ1bmN0aW9uIGBkYW1vc19odWdlcGFnZV9tZW1fYnAoKWAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHBhZGRpbmcgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IERBTU9TIHF1b3RhIGdvYWwgbWV0cmljIChEQU1PU19RVU9UQV9IVUdFUEFHRV9NRU1fQlAsICdodWdlcGFnZV9tZW1fYnAnKSB0aGF0IGNhbGN1bGF0ZXMgdGhlIHJhdGlvIG9mIGh1Z2UgcGFnZXMgdG8gdXNlZCBtZW1vcnkgdXNpbmcgc3RhbmRhcmQga2VybmVsIGNvdW50ZXJzICh0b3RhbHJhbV9wYWdlcywgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZSwgYW5kIGdsb2JhbF9ub2RlX3BhZ2Vfc3RhdGUpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGluIHRoZSBuZXcgZnVuY3Rpb24gYGRhbW9zX2h1Z2VwYWdlX21lbV9icCgpYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgcGFkZGluZyBsZWFrcyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4mpvw[1] Phase: Succeeded StartedAt: 2026-08-31 21:43:14 +0000 UTC FinishedAt: 2026-08-31 21:43:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 21:43:14 +0000 UTC FinishedAt: 2026-08-31 21:43:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2] Phase: Succeeded StartedAt: 2026-08-31 21:43:14 +0000 UTC FinishedAt: 2026-09-01 01:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:43:14 +0000 UTC FinishedAt: 2026-09-01 01:24:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:43:14 +0000 UTC FinishedAt: 2026-08-31 21:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:43:14 +0000 UTC FinishedAt: 2026-08-31 21:43:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"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-workflow4mpvw/series-workflow4mpvw-convert-artifact-386956756/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:43:36 +0000 UTC FinishedAt: 2026-08-31 21:59:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:43:36 +0000 UTC FinishedAt: 2026-08-31 21:59:43 +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:*dd5b22a9-aa28-48ca-83be-9e49616a1aff,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-workflow4mpvw/series-workflow4mpvw-convert-artifact-386956756/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": "2cbdb956-5513-4328-bfe3-6bcbda7ec45e", "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-workflow4mpvw/series-workflow4mpvw-build-action-2539174226/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:43:36 +0000 UTC FinishedAt: 2026-08-31 21:59:33 +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:*dd5b22a9-aa28-48ca-83be-9e49616a1aff,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-workflow4mpvw/series-workflow4mpvw-convert-artifact-386956756/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": "2cbdb956-5513-4328-bfe3-6bcbda7ec45e", "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-workflow4mpvw/series-workflow4mpvw-build-action-2539174226/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:59:43 +0000 UTC FinishedAt: 2026-08-31 21:59:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:59:43 +0000 UTC FinishedAt: 2026-08-31 21:59:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:59:43 +0000 UTC FinishedAt: 2026-08-31 21:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:59:43 +0000 UTC FinishedAt: 2026-08-31 21:59:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-workflow4mpvw/series-workflow4mpvw-convert-artifact-373403539/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:59:54 +0000 UTC FinishedAt: 2026-08-31 22:01:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 21:59:54 +0000 UTC FinishedAt: 2026-08-31 22:01:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cbdb956-5513-4328-bfe3-6bcbda7ec45e,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-workflow4mpvw/series-workflow4mpvw-build-action-2539174226/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-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:01:49 +0000 UTC FinishedAt: 2026-08-31 22:01:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:01:49 +0000 UTC FinishedAt: 2026-08-31 22:01:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:01:49 +0000 UTC FinishedAt: 2026-08-31 22:17:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:01:49 +0000 UTC FinishedAt: 2026-08-31 22:17:46 +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:*dd5b22a9-aa28-48ca-83be-9e49616a1aff,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-workflow4mpvw/series-workflow4mpvw-convert-artifact-373403539/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": "e081d50c-8ba6-4a90-8b05-be6f88a57978", "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-workflow4mpvw/series-workflow4mpvw-build-action-4028663239/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:01:49 +0000 UTC FinishedAt: 2026-08-31 22:17:36 +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:*dd5b22a9-aa28-48ca-83be-9e49616a1aff,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-workflow4mpvw/series-workflow4mpvw-convert-artifact-373403539/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": "e081d50c-8ba6-4a90-8b05-be6f88a57978", "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-workflow4mpvw/series-workflow4mpvw-build-action-4028663239/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:17:46 +0000 UTC FinishedAt: 2026-08-31 22:17:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:17:46 +0000 UTC FinishedAt: 2026-08-31 22:17:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:17:46 +0000 UTC FinishedAt: 2026-08-31 22:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:17:46 +0000 UTC FinishedAt: 2026-08-31 22:19:29 +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:*e081d50c-8ba6-4a90-8b05-be6f88a57978,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-workflow4mpvw/series-workflow4mpvw-build-action-4028663239/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-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:19:39 +0000 UTC FinishedAt: 2026-09-01 01:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:19:39 +0000 UTC FinishedAt: 2026-09-01 01:24:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"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:*2cbdb956-5513-4328-bfe3-6bcbda7ec45e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e081d50c-8ba6-4a90-8b05-be6f88a57978,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-workflow4mpvw/series-workflow4mpvw-build-action-2539174226/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-workflow4mpvw/series-workflow4mpvw-build-action-4028663239/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:19:39 +0000 UTC FinishedAt: 2026-08-31 22:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:19:39 +0000 UTC FinishedAt: 2026-08-31 22:19:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"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-workflow4mpvw/series-workflow4mpvw-convert-artifact-2472184332/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:19:39 +0000 UTC FinishedAt: 2026-08-31 22:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:19:39 +0000 UTC FinishedAt: 2026-08-31 22:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:19:39 +0000 UTC FinishedAt: 2026-08-31 22:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:19:49 +0000 UTC FinishedAt: 2026-09-01 01:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mpvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_sysfs_set_quota_scores","damon_sysfs_add_schemes","damos_commit_quota_goals","damos_new_quota_goal"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"da6c37ed8beb273e3308e42d4bca3ce11b4432fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","TRANSPARENT_HUGEPAGE"],"series_id":"207c8a69-36ac-4cc3-8268-3e6efd9314bc","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-08-31 22:19:49 +0000 UTC FinishedAt: 2026-09-01 01:24:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cbdb956-5513-4328-bfe3-6bcbda7ec45e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e081d50c-8ba6-4a90-8b05-be6f88a57978,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-workflow4mpvw/series-workflow4mpvw-build-action-2539174226/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-workflow4mpvw/series-workflow4mpvw-build-action-4028663239/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-workflow4mpvw/series-workflow4mpvw-convert-artifact-2472184332/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,}