Name: series-workflow7ffwc Phase: Succeeded StartedAt: 2026-08-01 15:25:46 +0000 UTC FinishedAt: 2026-08-01 19:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[0] Phase: Succeeded StartedAt: 2026-08-01 15:25:46 +0000 UTC FinishedAt: 2026-08-01 15:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 15:25:46 +0000 UTC FinishedAt: 2026-08-01 15:51:13 +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": "99cf84da3838f1613deed700ddfb033163b28106", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "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": "99cf84da3838f1613deed700ddfb033163b28106", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "8f123cc5-1eb3-4cd3-861b-89f025e9ac3e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "try_to_free_mem_cgroup_pages", "user_proactive_reclaim" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgdGhlIG1pbmltdW0gZ2VuZXJhdGlvbiBzZXF1ZW5jZSBpcyBpbmNyZW1lbnRlZCwgaG93IGZvbGlvcyBhcmUgc2Nhbm5lZCBhbmQgaXNvbGF0ZWQsIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgcnVubmluZyBhZ2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDlkMzg4YzljYmU3MjVmNDJiNTBjZWU5ZTUyNjE0OTUzYjIzNWM0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTU6NDg6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGEyNmM4Yjg1NTIyMjIuLjIzM2QyMDA2YTU0MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNTUyLDEwICYjNDM7NTUyLDggQEAgZW51bSB7XG4gICogVGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gbnVtYmVyIGlzIHN0b3JlZCBpbiBtYXhfc2VxIGZvciBib3RoIGFub24gYW5kIGZpbGVcbiAgKiB0eXBlcyBhcyB0aGV5IGFyZSBhZ2VkIG9uIGFuIGVxdWFsIGZvb3RpbmcuIFRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBudW1iZXJzIGFyZVxuICAqIHN0b3JlZCBpbiBtaW5fc2VxW10gc2VwYXJhdGVseSBmb3IgYW5vbiBhbmQgZmlsZSB0eXBlcyBzbyB0aGF0IHRoZXkgY2FuIGJlXG4tICogaW5jcmVtZW50ZWQgaW5kZXBlbmRlbnRseS4gSWRlYWxseSBtaW5fc2VxW10gYXJlIGtlcHQgaW4gc3luYyB3aGVuIGJvdGggYW5vblxuLSAqIGFuZCBmaWxlIHR5cGVzIGFyZSBldmljdGFibGUuIEhvd2V2ZXIsIHRvIGFkYXB0IHRvIHNpdHVhdGlvbnMgbGlrZSBleHRyZW1lXG4tICogc3dhcHBpbmVzcywgdGhleSBhcmUgYWxsb3dlZCB0byBiZSBvdXQgb2Ygc3luYyBieSBhdCBtb3N0XG4tICogTUFYX05SX0dFTlMtTUlOX05SX0dFTlMtMS5cbiYjNDM7ICogaW5jcmVtZW50ZWQgaW5kZXBlbmRlbnRseS4gRm9yIGJvdGggZmlsZSBhbmQgYW5vbnltb3VzIG1lbW9yeSwgdGhlIG1pbmltdW1cbiYjNDM7ICogZ2VuZXJhdGlvbiBtdXN0IGJlIGF0IGxlYXN0IE1JTl9OUl9HRU5TLlxuICAqXG4gICogVGhlIG51bWJlciBvZiBwYWdlcyBpbiBlYWNoIGdlbmVyYXRpb24gaXMgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCB0aGVyZWZvcmVcbiAgKiBjYW4gYmUgdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hlbiByZXNldF9iYXRjaF9zaXplKCkgaXMgcGVuZGluZy5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAxN2QyYjc5M2NiZmM0Li4zOTZlNDdlMzI3YmM4IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMzk4MiwxNiAmIzQzOzM5ODIsNiBAQCBzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdGlmICghc2VxX2luY19mbGFnKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xuLVx0aWYgKHN3YXBwaW5lc3MgXHUwMDI2XHUwMDI2IHN3YXBwaW5lc3MgXHUwMDNjPSBNQVhfU1dBUFBJTkVTUykge1xuLVx0XHR1bnNpZ25lZCBsb25nIHNlcSA9IGxydWdlbi1cdTAwM2VtYXhfc2VxIC0gTUlOX05SX0dFTlM7XG4tXG4tXHRcdGlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXHUwMDNlIHNlcSBcdTAwMjZcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0ZJTEVdIFx1MDAzYyBzZXEpXG4tXHRcdFx0bWluX3NlcVtMUlVfR0VOX0FOT05dID0gc2VxO1xuLVx0XHRlbHNlIGlmIChtaW5fc2VxW0xSVV9HRU5fRklMRV0gXHUwMDNlIHNlcSBcdTAwMjZcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0FOT05dIFx1MDAzYyBzZXEpXG4tXHRcdFx0bWluX3NlcVtMUlVfR0VOX0ZJTEVdID0gc2VxO1xuLVx0fVxuLVxuIFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xuIFx0XHRpZiAobWluX3NlcVt0eXBlXSBcdTAwM2M9IGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTQ3MjcsNyAmIzQzOzQ3MTcsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxuLVx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHApXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHAsXG4mIzQzO1x0XHQgICAgICAgYm9vbCAqZXhoYXVzdGVkKVxuIHtcbiBcdGludCBpO1xuIFx0aW50IGdlbjtcbkBAIC00NzM4LDE1ICYjNDM7NDcyOSwxOCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0aW50IHNraXBwZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtaW5fc2VxID0gbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV07XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiBcdTAwM2UgTUFYX0xSVV9CQVRDSCk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpO1xuIFxuLVx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpXG4mIzQzO1x0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpIHtcbiYjNDM7XHRcdCpleGhhdXN0ZWQgPSB0cnVlO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cbiYjNDM7bmV4dF9nZW46XG4mIzQzO1x0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxKTtcbiBcdGZvciAoaSA9IE1BWF9OUl9aT05FUzsgaSBcdTAwM2UgMDsgaS0tKSB7XG4gXHRcdExJU1RfSEVBRChtb3ZlZCk7XG4gXHRcdGludCBza2lwcGVkX3pvbmUgPSAwO1xuQEAgLTQ3ODgsNiAmIzQzOzQ3ODIsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgZ2VuZXJhdGlvbiBpcyBleGhhdXN0ZWQgYWNyb3NzIGFsbCB6b25lcywgYnV0IHRoZSBzY2FuXG4mIzQzO1x0ICogdGFyZ2V0IGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC4gQ29udGludWUgd2l0aCB0aGUgbmV4dFxuJiM0MztcdCAqIHJlY2xhaW1hYmxlIGdlbmVyYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGkgPT0gMCBcdTAwMjZcdTAwMjYgJiM0MzsmIzQzO21pbl9zZXEgJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNjPSBscnVnZW4tXHUwMDNlbWF4X3NlcSlcbiYjNDM7XHRcdGdvdG8gbmV4dF9nZW47XG4mIzQzO1xuIFx0aXRlbSA9IFBHU0NBTl9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgaXNvbGF0ZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzb3J0ZWQpO1xuQEAgLTQ3OTYsNiAmIzQzOzQ3OTgsMTEgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxuIFx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBzY2FuIGV4aGF1c3RlZCB0aGUgcmVjbGFpbWFibGUgbGlzdHMgYmVmb3JlIHJlYWNoaW5nIHRoZVxuJiM0MztcdCAqIHNjYW4gdGFyZ2V0IG9yIGFjY3VtdWxhdGluZyBlbm91Z2ggaXNvbGF0ZWQgZm9saW9zLlxuJiM0MztcdCAqL1xuJiM0MztcdCpleGhhdXN0ZWQgPSByZW1haW5pbmcgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlzb2xhdGVkIFx1MDAzYyBNSU5fTFJVX0JBVENIO1xuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuQEAgLTQ4MzksMzUgJiM0Mzs0ODQ2LDQyIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzd2FwcGluZXNzID09IE1JTl9TV0FQUElORVNTIHx8XG4mIzQzO1x0ICAgICAgIHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsXG4gXHRcdFx0ICBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXG4ge1xuLVx0aW50IGk7XG4tXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDA7XG4mIzQzO1x0Ym9vbCBzaW5nbGVfdHlwZSA9IGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XG4gXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiYjNDM7XHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XG4mIzQzO1x0Ym9vbCB0cmllZCA9IGZhbHNlLCBleGhhdXN0ZWQ7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4tXHRcdGludCBzY2FubmVkO1xuLVx0XHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuJiM0MztyZXRyeTpcbiYjNDM7XHR0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG4mIzQzO1x0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXG4mIzQzO1x0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCBcdTAwMjZleGhhdXN0ZWQpO1xuIFxuLVx0XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbi1cdFx0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcbiYjNDM7XHR0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkO1xuJiM0MztcdGlmICgqaXNvbGF0ZWQpIHtcbiYjNDM7XHRcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xuJiM0MztcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG4mIzQzO1x0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbiYjNDM7XHR9XG4gXG4tXHRcdHRvdGFsX3NjYW5uZWQgJiM0Mzs9IHNjYW5uZWQ7XG4tXHRcdGlmICgqaXNvbGF0ZWQpIHtcbi1cdFx0XHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcbi1cdFx0XHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHQvKlxuLVx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4tXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzY2FubmVkKVxuLVx0XHRcdHR5cGUgPSAhdHlwZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBvdGhlciB0eXBlIGlmIGFsbG93ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF0cmllZCBcdTAwMjZcdTAwMjYgZXhoYXVzdGVkIFx1MDAyNlx1MDAyNiAhc2luZ2xlX3R5cGUpIHtcbiYjNDM7XHRcdHR5cGUgPSAhdHlwZTtcbiYjNDM7XHRcdHRyaWVkID0gdHJ1ZTtcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbkBAIC00OTY5LDIxICYjNDM7NDk4Myw4MiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHN3YXBwaW5lc3NfaXNfYmFsYW5jZWQoaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmFuZ2UgPSBNQVhfU1dBUFBJTkVTUyAtIE1JTl9TV0FQUElORVNTO1xuJiM0MztcdGludCBtaWRkbGUgPSBNSU5fU1dBUFBJTkVTUyAmIzQzOyByYW5nZSAvIDI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzd2FwcGluZXNzIFx1MDAzZT0gbWlkZGxlIC0gcmFuZ2UgLyA1IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBzd2FwcGluZXNzIFx1MDAzYz0gbWlkZGxlICYjNDM7IHJhbmdlIC8gNTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbHJ1X2dlbl9pbWJhbGFuY2VkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsIHVuc2lnbmVkIGxvbmcgbWluX3NlcSxcbiYjNDM7XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBzZXE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvbGRfcmF0aW8sIGdiO1xuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHN3YXBwaW5lc3MgYmlhcyBmb3Igc2luZ2xlLXR5cGUgcmVjbGFpbSBvciBiYWxhbmNlZCBzd2FwcGluZXNzICovXG4mIzQzO1x0aWYgKGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcykgfHwgc3dhcHBpbmVzc19pc19iYWxhbmNlZChzd2FwcGluZXNzKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogTW9yZSB0aGFuIHR3byBnZW5lcmF0aW9ucyByZW1haW4gdG8gcmVjbGFpbSAqL1xuJiM0MztcdGlmIChtaW5fc2VxICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzYyBtYXhfc2VxKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJ1biBhZ2luZyBpZiB0aGUgb25seSByZW1haW5pbmcgcmVjbGFpbWFibGUgZ2VuZXJhdGlvblxuJiM0MztcdCAqIGhhcyBmZXcgZm9saW9zLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoc2VxID0gbWluX3NlcTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4mIzQzO1x0XHRpbnQgem9uZTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRzaXplICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZXEgJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEpXG4mIzQzO1x0XHRcdHlvdW5nICYjNDM7PSBzaXplO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRvbGQgJiM0Mzs9IHNpemU7XG4mIzQzO1x0fVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ29waWVkIGZyb20gaW5hY3RpdmVfaXNfbG93KCksIGJ1dCB1c2VzIGEgaGlnaGVyIG9sZF9yYXRpbyB0b1xuJiM0MztcdCAqIG1ha2UgYWdpbmcgbGVzcyBhZ2dyZXNzaXZlLlxuJiM0MztcdCAqL1xuJiM0MztcdGdiID0gKHlvdW5nICYjNDM7IG9sZCkgXHUwMDNlXHUwMDNlICgzMCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcdG9sZF9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYikgOiAxO1xuJiM0MztcdG9sZF9yYXRpbyAqPSBNQVhfTlJfR0VOUztcbiYjNDM7XHRyZXR1cm4geW91bmcgXHUwMDNlIG9sZCAqIG9sZF9yYXRpbztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBzaG91bGRfcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxuIFx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuIHtcbiYjNDM7XHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4gXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cbiBcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4mIzQzO1x0LyogcnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBleGhhdXN0ZWQgZm9yIGV4dHJlbWUgc3dhcHBpbmVzcyAqL1xuJiM0MztcdGlmIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxIFx1MDAyNlx1MDAyNiAhc3dhcHBpbmVzc19pc19iYWxhbmNlZChzd2FwcGluZXNzKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiBcdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cbiBcdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi9cbi1cdHJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xuJiM0MztcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xuJiM0MztcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCB0eXBlLCBtYXhfc2VxLCBtaW5fc2VxW3R5cGVdLCBzYywgc3dhcHBpbmVzcyk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgdGhlIG1pbmltdW0gZ2VuZXJhdGlvbiBzZXF1ZW5jZSBpcyBpbmNyZW1lbnRlZCwgaG93IGZvbGlvcyBhcmUgc2Nhbm5lZCBhbmQgaXNvbGF0ZWQsIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgcnVubmluZyBhZ2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDlkMzg4YzljYmU3MjVmNDJiNTBjZWU5ZTUyNjE0OTUzYjIzNWM0MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTU6NDg6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCBhMjZjOGI4NTUyMjIyLi4yMzNkMjAwNmE1NDE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTU1MiwxMCAmIzQzOzU1Miw4IEBAIGVudW0gewogICogVGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gbnVtYmVyIGlzIHN0b3JlZCBpbiBtYXhfc2VxIGZvciBib3RoIGFub24gYW5kIGZpbGUKICAqIHR5cGVzIGFzIHRoZXkgYXJlIGFnZWQgb24gYW4gZXF1YWwgZm9vdGluZy4gVGhlIG9sZGVzdCBnZW5lcmF0aW9uIG51bWJlcnMgYXJlCiAgKiBzdG9yZWQgaW4gbWluX3NlcVtdIHNlcGFyYXRlbHkgZm9yIGFub24gYW5kIGZpbGUgdHlwZXMgc28gdGhhdCB0aGV5IGNhbiBiZQotICogaW5jcmVtZW50ZWQgaW5kZXBlbmRlbnRseS4gSWRlYWxseSBtaW5fc2VxW10gYXJlIGtlcHQgaW4gc3luYyB3aGVuIGJvdGggYW5vbgotICogYW5kIGZpbGUgdHlwZXMgYXJlIGV2aWN0YWJsZS4gSG93ZXZlciwgdG8gYWRhcHQgdG8gc2l0dWF0aW9ucyBsaWtlIGV4dHJlbWUKLSAqIHN3YXBwaW5lc3MsIHRoZXkgYXJlIGFsbG93ZWQgdG8gYmUgb3V0IG9mIHN5bmMgYnkgYXQgbW9zdAotICogTUFYX05SX0dFTlMtTUlOX05SX0dFTlMtMS4KJiM0MzsgKiBpbmNyZW1lbnRlZCBpbmRlcGVuZGVudGx5LiBGb3IgYm90aCBmaWxlIGFuZCBhbm9ueW1vdXMgbWVtb3J5LCB0aGUgbWluaW11bQomIzQzOyAqIGdlbmVyYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBNSU5fTlJfR0VOUy4KICAqCiAgKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGluIGVhY2ggZ2VuZXJhdGlvbiBpcyBldmVudHVhbGx5IGNvbnNpc3RlbnQgYW5kIHRoZXJlZm9yZQogICogY2FuIGJlIHRyYW5zaWVudGx5IG5lZ2F0aXZlIHdoZW4gcmVzZXRfYmF0Y2hfc2l6ZSgpIGlzIHBlbmRpbmcuCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDE3ZDJiNzkzY2JmYzQuLjM5NmU0N2UzMjdiYzggMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0zOTgyLDE2ICYjNDM7Mzk4Miw2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCWlmICghc2VxX2luY19mbGFnKQogCQlyZXR1cm47CiAKLQkvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqLwotCWlmIChzd2FwcGluZXNzICZhbXA7JmFtcDsgc3dhcHBpbmVzcyAmbHQ7PSBNQVhfU1dBUFBJTkVTUykgewotCQl1bnNpZ25lZCBsb25nIHNlcSA9IGxydWdlbi0mZ3Q7bWF4X3NlcSAtIE1JTl9OUl9HRU5TOwotCi0JCWlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gJmd0OyBzZXEgJmFtcDsmYW1wOyBtaW5fc2VxW0xSVV9HRU5fRklMRV0gJmx0OyBzZXEpCi0JCQltaW5fc2VxW0xSVV9HRU5fQU5PTl0gPSBzZXE7Ci0JCWVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSAmZ3Q7IHNlcSAmYW1wOyZhbXA7IG1pbl9zZXFbTFJVX0dFTl9BTk9OXSAmbHQ7IHNlcSkKLQkJCW1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IHNlcTsKLQl9Ci0KIAlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7CiAJCWlmIChtaW5fc2VxW3R5cGVdICZsdDs9IGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSkKIAkJCWNvbnRpbnVlOwpAQCAtNDcyNyw3ICYjNDM7NDcxNyw4IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhCiAKIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCSAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLAotCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHApCiYjNDM7CQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHAsCiYjNDM7CQkgICAgICAgYm9vbCAqZXhoYXVzdGVkKQogewogCWludCBpOwogCWludCBnZW47CkBAIC00NzM4LDE1ICYjNDM7NDcyOSwxOCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCWludCBza2lwcGVkID0gMDsKIAl1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWluX3NlcSA9IGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXTsKIAogCVZNX1dBUk5fT05fT05DRShucl90b19zY2FuICZndDsgTUFYX0xSVV9CQVRDSCk7CiAJVk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTsKIAotCWlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKQomIzQzOwlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykgewomIzQzOwkJKmV4aGF1c3RlZCA9IHRydWU7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKLQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7Ci0KJiM0MztuZXh0X2dlbjoKJiM0MzsJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxKTsKIAlmb3IgKGkgPSBNQVhfTlJfWk9ORVM7IGkgJmd0OyAwOyBpLS0pIHsKIAkJTElTVF9IRUFEKG1vdmVkKTsKIAkJaW50IHNraXBwZWRfem9uZSA9IDA7CkBAIC00Nzg4LDYgJiM0Mzs0NzgyLDE0IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQlicmVhazsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBnZW5lcmF0aW9uIGlzIGV4aGF1c3RlZCBhY3Jvc3MgYWxsIHpvbmVzLCBidXQgdGhlIHNjYW4KJiM0MzsJICogdGFyZ2V0IGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC4gQ29udGludWUgd2l0aCB0aGUgbmV4dAomIzQzOwkgKiByZWNsYWltYWJsZSBnZW5lcmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKGkgPT0gMCAmYW1wOyZhbXA7ICYjNDM7JiM0MzttaW5fc2VxICYjNDM7IE1JTl9OUl9HRU5TICZsdDs9IGxydWdlbi0mZ3Q7bWF4X3NlcSkKJiM0MzsJCWdvdG8gbmV4dF9nZW47CiYjNDM7CiAJaXRlbSA9IFBHU0NBTl9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyk7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIGlzb2xhdGVkKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNvcnRlZCk7CkBAIC00Nzk2LDYgJiM0Mzs0Nzk4LDExIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJc2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsCiAJCQkJdHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgc2NhbiBleGhhdXN0ZWQgdGhlIHJlY2xhaW1hYmxlIGxpc3RzIGJlZm9yZSByZWFjaGluZyB0aGUKJiM0MzsJICogc2NhbiB0YXJnZXQgb3IgYWNjdW11bGF0aW5nIGVub3VnaCBpc29sYXRlZCBmb2xpb3MuCiYjNDM7CSAqLwomIzQzOwkqZXhoYXVzdGVkID0gcmVtYWluaW5nICZndDsgMCAmYW1wOyZhbXA7IGlzb2xhdGVkICZsdDsgTUlOX0xSVV9CQVRDSDsKIAkqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7CiAJcmV0dXJuIHNjYW5uZWQ7CiB9CkBAIC00ODM5LDM1ICYjNDM7NDg0Niw0MiBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiBzd2FwcGluZXNzID09IE1JTl9TV0FQUElORVNTIHx8CiYjNDM7CSAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywKIAkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCwKIAkJCSAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKQogewotCWludCBpOwotCWludCB0b3RhbF9zY2FubmVkID0gMDsKJiM0MzsJYm9vbCBzaW5nbGVfdHlwZSA9IGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7CiAJaW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7CiYjNDM7CWludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjsKJiM0MzsJYm9vbCB0cmllZCA9IGZhbHNlLCBleGhhdXN0ZWQ7CiAKLQlmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7Ci0JCWludCBzY2FubmVkOwotCQlpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpOwomIzQzO3JldHJ5OgomIzQzOwl0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7CiYjNDM7CXNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLAomIzQzOwkJCSAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCAmYW1wO2V4aGF1c3RlZCk7CiAKLQkJc2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsCi0JCQkJICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpOwomIzQzOwl0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkOwomIzQzOwlpZiAoKmlzb2xhdGVkKSB7CiYjNDM7CQkqaXNvbGF0ZV90eXBlID0gdHlwZTsKJiM0MzsJCSppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkOwomIzQzOwkJcmV0dXJuIHRvdGFsX3NjYW5uZWQ7CiYjNDM7CX0KIAotCQl0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkOwotCQlpZiAoKmlzb2xhdGVkKSB7Ci0JCQkqaXNvbGF0ZV90eXBlID0gdHlwZTsKLQkJCSppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyoKLQkJICogSWYgc2Nhbm5lZCAmZ3Q7IDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGUKLQkJICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrCi0JCSAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuCi0JCSAqLwotCQlpZiAoIXNjYW5uZWQpCi0JCQl0eXBlID0gIXR5cGU7CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0bwomIzQzOwkgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0cmllZCAmYW1wOyZhbXA7IGV4aGF1c3RlZCAmYW1wOyZhbXA7ICFzaW5nbGVfdHlwZSkgewomIzQzOwkJdHlwZSA9ICF0eXBlOwomIzQzOwkJdHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byByZXRyeTsKIAl9CiAKIAlyZXR1cm4gdG90YWxfc2Nhbm5lZDsKQEAgLTQ5NjksMjEgJiM0Mzs0OTgzLDgyIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXJldHVybiBzY2FubmVkOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN3YXBwaW5lc3NfaXNfYmFsYW5jZWQoaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwlpbnQgcmFuZ2UgPSBNQVhfU1dBUFBJTkVTUyAtIE1JTl9TV0FQUElORVNTOwomIzQzOwlpbnQgbWlkZGxlID0gTUlOX1NXQVBQSU5FU1MgJiM0MzsgcmFuZ2UgLyAyOwomIzQzOwomIzQzOwlyZXR1cm4gc3dhcHBpbmVzcyAmZ3Q7PSBtaWRkbGUgLSByYW5nZSAvIDUgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc3dhcHBpbmVzcyAmbHQ7PSBtaWRkbGUgJiM0MzsgcmFuZ2UgLyA1OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgdW5zaWduZWQgbG9uZyBtaW5fc2VxLAomIzQzOwkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKQomIzQzO3sKJiM0MzsJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiYjNDM7CXVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBzZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2xkX3JhdGlvLCBnYjsKJiM0MzsKJiM0MzsJLyogU2tpcCBzd2FwcGluZXNzIGJpYXMgZm9yIHNpbmdsZS10eXBlIHJlY2xhaW0gb3IgYmFsYW5jZWQgc3dhcHBpbmVzcyAqLwomIzQzOwlpZiAoaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKSB8fCBzd2FwcGluZXNzX2lzX2JhbGFuY2VkKHN3YXBwaW5lc3MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBNb3JlIHRoYW4gdHdvIGdlbmVyYXRpb25zIHJlbWFpbiB0byByZWNsYWltICovCiYjNDM7CWlmIChtaW5fc2VxICYjNDM7IE1JTl9OUl9HRU5TICZsdDsgbWF4X3NlcSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUnVuIGFnaW5nIGlmIHRoZSBvbmx5IHJlbWFpbmluZyByZWNsYWltYWJsZSBnZW5lcmF0aW9uCiYjNDM7CSAqIGhhcyBmZXcgZm9saW9zLgomIzQzOwkgKi8KJiM0MzsJZm9yIChzZXEgPSBtaW5fc2VxOyBzZXEgJmx0Oz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykgewomIzQzOwkJaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiYjNDM7CQlpbnQgem9uZTsKJiM0MzsKJiM0MzsJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQomIzQzOwkJCXNpemUgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpOwomIzQzOwomIzQzOwkJaWYgKHNlcSAmIzQzOyBNSU5fTlJfR0VOUyAmZ3Q7IG1heF9zZXEpCiYjNDM7CQkJeW91bmcgJiM0Mzs9IHNpemU7CiYjNDM7CQllbHNlCiYjNDM7CQkJb2xkICYjNDM7PSBzaXplOwomIzQzOwl9CiYjNDM7CS8qCiYjNDM7CSAqIENvcGllZCBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBidXQgdXNlcyBhIGhpZ2hlciBvbGRfcmF0aW8gdG8KJiM0MzsJICogbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmUuCiYjNDM7CSAqLwomIzQzOwlnYiA9ICh5b3VuZyAmIzQzOyBvbGQpICZndDsmZ3Q7ICgzMCAtIFBBR0VfU0hJRlQpOwomIzQzOwlvbGRfcmF0aW8gPSBnYiA/IGludF9zcXJ0KDEwICogZ2IpIDogMTsKJiM0MzsJb2xkX3JhdGlvICo9IE1BWF9OUl9HRU5TOwomIzQzOwlyZXR1cm4geW91bmcgJmd0OyBvbGQgKiBvbGRfcmF0aW87CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwKIAkJCSAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKQogewomIzQzOwlpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTsKIAlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwogCiAJLyogaGF2ZSB0byBydW4gYWdpbmcsIHNpbmNlIGV2aWN0aW9uIGlzIG5vdCBwb3NzaWJsZSBhbnltb3JlICovCiAJaWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TICZndDsgbWF4X3NlcSkKIAkJcmV0dXJuIHRydWU7CiAKJiM0MzsJLyogcnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBleGhhdXN0ZWQgZm9yIGV4dHJlbWUgc3dhcHBpbmVzcyAqLwomIzQzOwlpZiAobWluX3NlcVt0eXBlXSAmIzQzOyBNSU5fTlJfR0VOUyAmZ3Q7IG1heF9zZXEgJmFtcDsmYW1wOyAhc3dhcHBpbmVzc19pc19iYWxhbmNlZChzd2FwcGluZXNzKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwogCS8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi8KIAlpZiAoc2MtJmd0O3ByaW9yaXR5ID09IERFRl9QUklPUklUWSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogYmV0dGVyIHRvIHJ1biBhZ2luZyBldmVuIHRob3VnaCBldmljdGlvbiBpcyBzdGlsbCBwb3NzaWJsZSAqLwotCXJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxOwomIzQzOwlpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgJiM0MzsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBSdW4gYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHNldmVyZWx5IGltYmFsYW5jZWQgYWNyb3NzIGdlbnMgKi8KJiM0MzsJcmV0dXJuIGxydV9nZW5faW1iYWxhbmNlZChscnV2ZWMsIHR5cGUsIG1heF9zZXEsIG1pbl9zZXFbdHlwZV0sIHNjLCBzd2FwcGluZXNzKTsKIH0KIAogc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAzMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1HTFJVIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQmIzM5O3MgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYCBhbmQgYGluY2x1ZGUvbGludXgvbW16b25lLmhgLiBBbGFybSBiZWxscyBhcmUgYWxyZWFkeSBnb2luZyBvZmY7IGFueXRoaW5nIG5lYXIgbWVtb3J5IG1hbmFnZW1lbnQgaXMgY3JpdGljYWwgYW5kICphbHdheXMqIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoaXMgb25lIGlzIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggdGhlIE11bHRpLUdlbiBMUlUgcmVjbGFpbSBsb2dpYyAoTUdMUlUpLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZXdvcmtpbmcgc29tZSBrZXkgZnVuY3Rpb25zOiBgdHJ5X3RvX2luY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYGV2aWN0X2ZvbGlvc2AsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AsIGFuZCBpbnRyb2R1Y2luZyBhIGZldyBuZXcgb25lcyBsaWtlIGBpc19zaW5nbGVfdHlwZV9yZWNsYWltYCwgYHN3YXBwaW5lc3NfaXNfYmFsYW5jZWRgLCBhbmQgYGxydV9nZW5faW1iYWxhbmNlZGAuIERlZmluaXRlbHkgYSBoaWdoLXZhbHVlIHRhcmdldC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwcmUtcmVxdWlzaXRlcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIE1HTFJVLiBUeXBpY2FsbHksIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleS4gU28sIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9gIG9yIHBvdGVudGlhbGx5IHJlbGF0ZWQgYXJlYXMsIHRvIGZpbmQgdGhlIGV4YWN0IGRlcGVuZGVuY3kgZm9yIGBMUlVfR0VOYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTA9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMC0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDAxOmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDItXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MDktXG5tbS9LY29uZmlnOjE0MTA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDExLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxNS1cbm1tL0tjb25maWc6MTQxNjpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDE3LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjQtXG5tbS9LY29uZmlnOjE0MjU6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjYtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24gYW5kIEltcGFjdCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgZW5hYmxpbmcgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7cmUgYnVpbGRpbmcgb24uIE5vdywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhlc2UgZmxhZ3MgKmRvZXMqIGluIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgZnVuY3Rpb25zIGFyZSBiZWluZyB0b3VjaGVkPyBPa2F5LCBpdCBsb29rcyBsaWtlIGB0cnlfdG9faW5jX21pbl9zZXFgLCBgc2Nhbl9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBzaG91bGRfcnVuX2FnaW5nYCBhcmUgdGhlIG9uZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXNlIGFyZSBhbGwgc3RhdGljLCBtZWFuaW5nIHRoZXkmIzM5O3JlIGludGVybmFsIHRvIGBtbS92bXNjYW4uY2AuCgpUaGF0JiMzOTtzIGhlbHBmdWwsIGJ1dCB3ZSBuZWVkIHRvIHNlZSB0aGUgKm5vbi1zdGF0aWMqIGVudHJ5IHBvaW50cyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcm5hbCBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZC4gV2UgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy4gU28sIGBldmljdF9mb2xpb3NgLCB0aGF0JiMzOTtzIHRoZSBvbmUgSSYjMzk7bSBtb3N0IGludGVyZXN0ZWQgaW4uIFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBJJiMzOTttIGJldHRpbmcgdGhhdCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBvciBzb21ldGhpbmcgc2ltaWxhciBpcyBpbnZvbHZlZC4gQmV0dGVyIHRvIGp1c3QgY2hlY2sgYG1tL3Ztc2Nhbi5jYCBkaXJlY3RseSB0byBiZSBzdXJlLCB0aGF0JiMzOTtsbCBiZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmljdF9mb2xpb3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDg1NT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4ODktXG5tbS92bXNjYW4uYzo0ODkwOnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDg5MS1cdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmM9NTEzMD1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNTMtXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTE1NDpcdFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmMtNTE1NS1cdFx0aWYgKCFkZWx0YSlcbi0tXG5tbS92bXNjYW4uYz01NzU3PXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU3NzctXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTc3ODpcdFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxubW0vdm1zY2FuLmMtNTc3OS1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGVlcCBEaXZlIGludG8gTFJVIFZlY3RvciBFdmljdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlLiBJdCBzZWVtcyBsaWtlIGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAgZXZlbnR1YWxseSBmdW5uZWwgZG93biB0byBgZXZpY3RfZm9saW9zYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBldmljdGlvbiBsb2dpYywgY2xlYXJseS4gTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHRob3NlIHR3byBmdW5jdGlvbnMsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hlbiogYW5kICp3aHkqIHRoZXNlIGV2aWN0aW9uIHJvdXRpbmVzIGFyZSB0cmlnZ2VyZWQuIFdoYXQgZXZlbnRzIG9yIGNvbmRpdGlvbnMgbGVhZCB0aGUgc3lzdGVtIHRvIGRlY2lkZSBpdCYjMzk7cyB0aW1lIHRvIHJlY2xhaW0gc29tZSBtZW1vcnk/IElzIGl0IGJhc2VkIG9uIGV4cGxpY2l0IHJlcXVlc3RzLCBkZXRlY3RlZCB0aHJlc2hvbGRzLCBvciBhIGJhY2tncm91bmQgcHJvY2Vzcz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGV2aWN0aW9uIHN0cmF0ZWd5LiBUaGlzIGFuYWx5c2lzIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDk1PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEyOS0gKi9cbm1tL3Ztc2Nhbi5jOjUxMzA6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUxMzEte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxNzU9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE5NC1cbm1tL3Ztc2Nhbi5jOjUxOTU6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTE5Ni1cbi0tXG5tbS92bXNjYW4uYz01Mjg2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyOTgtXG5tbS92bXNjYW4uYzo1Mjk5Olx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTMwMC1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRXZhbHVhdGluZyBFdmljdGlvbiBTdHJhdGVnaWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBldmljdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgaXMgYSBzdHJvbmcgY29udGVuZGVyLiBJdCYjMzk7cyBvZnRlbiBlZmZlY3RpdmUsIHNvIGl0JiMzOTtzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gQnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gQmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIHNob3VsZCBkZWZpbml0aXZlbHkgY2hlY2sgaG93IGBydW5fZXZpY3Rpb25gIGludGVyYWN0cywgaG93IGl0IG1pZ2h0IHdvcmsgYXMgYW4gYWx0ZXJuYXRpdmUsIG9yIGhvdyBpdCBtaWdodCBpbmZvcm0gdGhlIHByb2Nlc3MuIEkgbmVlZCBhIGhvbGlzdGljIHZpZXcgYmVmb3JlIG1ha2luZyBhIGRlY2lzaW9uLiBHb3R0YSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mICphbGwqIHBvdGVudGlhbCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydW5fZXZpY3Rpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTc0Nj1zdGF0aWMgaW50IHJ1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU3NTYtXG5tbS92bXNjYW4uYzo1NzU3OnN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxubW0vdm1zY2FuLmMtNTc1OC1cdFx0XHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3ODc9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4MTgtXHRjYXNlICYjMzk7LSYjMzk7OlxubW0vdm1zY2FuLmM6NTgxOTpcdFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcbm1tL3Ztc2Nhbi5jLTU4MjAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gTUdMUlUgRGVidWdnaW5nIGFuZCBTaHJpbmsgTG9naWMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgcnVuX2NtZGAgZnVuY3Rpb24gd2l0aGluIHRoZSBNR0xSVSBkZWJ1Z2ZzIGludGVyZmFjZS4gSXQmIzM5O3Mgb2J2aW91c2x5IGRlc2lnbmVkIGZvciBpbnRlcmFjdGl2ZSBkZWJ1Z2dpbmcgYW5kIHRlc3Rpbmcgb2YgdGhlIE1HTFJVIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCByZWxhdGVzIHRvIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcy4KCk5vdywgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGNhbGxzIHRvIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBTcGVjaWZpY2FsbHksIGRvZXMgdGhpcyBnZXQgaW52b2tlZCBvbmx5IGZyb20gYHNocmlua19scnV2ZWNgIGFuZCBwb3RlbnRpYWxseSBgc2hyaW5rX25vZGVgLCBvciBhcmUgdGhlcmUgb3RoZXIgY2FsbCBwYXRocyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgcHJhY3RpY2Ugd291bGQgYmUgdG8gY29uZmlybSB0aGlzLiBJIHdpbGwgbG9vayBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgb3JpZ2luIHBvaW50cyBvZiB0aGUgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUyMTY9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI4NS1cbm1tL3Ztc2Nhbi5jOjUyODY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01Mjg3LXtcbi0tXG5tbS92bXNjYW4uYz02MDMwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjAzNC1cbm1tL3Ztc2Nhbi5jOjYwMzU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MDM2LXtcbi0tXG5tbS92bXNjYW4uYz02MDQ3PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDU4LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjYwNTk6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYwNjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGF0IHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgc2hyaW5rX2xydXZlY2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgc2hyaW5rX2xydXZlY2AgaXMgY2FsbGluZyBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhhdCYjMzk7cyB0aGUgY29yZSByZWxhdGlvbnNoaXAgaGVyZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCB0aG91Z2gsIGlzIHdoYXQgKnRyaWdnZXJzKiBgc2hyaW5rX2xydXZlY2A/IEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBhbmQgc2NvcGUgYXJlIGxpbWl0ZWQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlIHRoYXQmIzM5O3MgY2FsbGluZyBpdC4gS25vd2luZyB3aGVyZSB0aGlzIGNhbGwgb3JpZ2luYXRlcyB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY29udGV4dCBvbiB0aGUgYnJvYWRlciBMUlUgY2FjaGUmIzM5O3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpZiBJJiMzOTttIGxvb2tpbmcgYXQgb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZyBhIHBvdGVudGlhbCBpc3N1ZS4gTmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIGNoYWluIGFuZCB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDk1PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEyOS0gKi9cbm1tL3Ztc2Nhbi5jOjUxMzA6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUxMzEte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxNzU9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE5NC1cbm1tL3Ztc2Nhbi5jOjUxOTU6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTE5Ni1cbi0tXG5tbS92bXNjYW4uYz01MjE2PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyODUtXG5tbS92bXNjYW4uYzo1Mjg2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTI4Ny17XG4tLVxubW0vdm1zY2FuLmMtNTI5OC1cbm1tL3Ztc2Nhbi5jOjUyOTk6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MzAwLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4tLVxubW0vdm1zY2FuLmM9NjAzMD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMzQtXG5tbS92bXNjYW4uYzo2MDM1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjAzNi17XG4tLVxubW0vdm1zY2FuLmM9NjA0MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwNDYtXG5tbS92bXNjYW4uYzo2MDQ3OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwNDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNTgtXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NjA1OTpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjA2MC1cbi0tXG5tbS92bXNjYW4uYz02MjM4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02Mjk3LVxubW0vdm1zY2FuLmM6NjI5ODpcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyOTktXG4tLVxubW0vdm1zY2FuLmM9Njg5Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY5MjMtXHQgKi9cbm1tL3Ztc2Nhbi5jOjY5MjQ6XHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjkyNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IC0gQSBRdWljayBTY2FuKioKCkFscmlnaHQsIHNvIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBtZWFucywgd2hlcmUgdGhpcyBsZWFkcyB1cy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHNocmlua19ub2RlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAuIFdoYXQgaXMgaXRzIHB1cnBvc2U/IFdoZXJlIGlzIGl0IHVzZWQ/IExldCYjMzk7cyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD04Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL2ludGVybmFsLmgtODctXHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcyk7XG5tbS9pbnRlcm5hbC5oOjg4OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg5LVx0XHRcdFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTI3Mz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0zMTItXHRcdH1cbm1tL21lbWNvbnRyb2wtdjEuYzozMTM6XHRcdHRvdGFsICYjNDM7PSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxubW0vbWVtY29udHJvbC12MS5jLTMxNC1cdFx0XHRcdFx0cGdkYXQsIFx1MDAyNm5yX3NjYW5uZWQpO1xuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MTk9Ym9vbCBwYWdlX2lzX3VubW92YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0xMTQtXHQgKiBpdC4gIEJ1dCBub3csIG1lbW9yeSBvZmZsaW5lIGl0c2VsZiBkb2VzbiYjMzk7dCBjYWxsXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjExNTpcdCAqIHNocmlua19ub2RlX3NsYWJzKCkgYW5kIGl0IHN0aWxsIHRvIGJlIGZpeGVkLlxubW0vcGFnZV9pc29sYXRpb24uYy0xMTYtXHQgKi9cbi0tXG5tbS92bXByZXNzdXJlLmM9NTc9ZW51bSB2bXByZXNzdXJlX2xldmVscyB2bXByZXNzdXJlX2NhbGNfbGV2ZWwodW5zaWduZWQgbG9uZyBzY2FubmVkLFxuLS1cbm1tL3ZtcHJlc3N1cmUuYy02NC1cdCAqIHJlY2xhaW1lZCBjYW4gYmUgZ3JlYXRlciB0aGFuIHNjYW5uZWQgZm9yIHRoaW5ncyBzdWNoIGFzIHJlY2xhaW1lZFxubW0vdm1wcmVzc3VyZS5jOjY1Olx0ICogc2xhYiBwYWdlcy4gc2hyaW5rX25vZGUoKSBqdXN0IGFkZHMgcmVjbGFpbWVkIHBhZ2VzIHdpdGhvdXQgYVxubW0vdm1wcmVzc3VyZS5jLTY2LVx0ICogcmVsYXRlZCBpbmNyZW1lbnQgdG8gc2Nhbm5lZCBwYWdlcy5cbi0tXG5tbS92bXNjYW4uYz0xOTQwPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE5NzgtLypcbm1tL3Ztc2Nhbi5jOjE5Nzk6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMTk4MC0gKiBvZiByZWNsYWltZWQgcGFnZXNcbi0tXG5tbS92bXNjYW4uYz01Mjg2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzMDYtXG5tbS92bXNjYW4uYzo1MzA3OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzA4LXtcbi0tXG5tbS92bXNjYW4uYz02MDM1PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMzktXG5tbS92bXNjYW4uYzo2MDQwOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MDQxLXtcbi0tXG5tbS92bXNjYW4uYz02MTg2PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYyMzctXG5tbS92bXNjYW4uYzo2MjM4OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYyMzkte1xuLS1cbm1tL3Ztc2Nhbi5jLTYzMTYtXG5tbS92bXNjYW4uYzo2MzE3OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjMxOC17XG4tLVxubW0vdm1zY2FuLmMtNjMyNC1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbm1tL3Ztc2Nhbi5jOjYzMjU6XHRcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYzMjYtXG4tLVxubW0vdm1zY2FuLmMtNjM0MS1cbm1tL3Ztc2Nhbi5jOjYzNDI6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYzNDMtXG4tLVxubW0vdm1zY2FuLmM9NjUwMj1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjU4MC1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjY1ODE6XHRcdHNocmlua19ub2RlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjU4Mi1cdH1cbi0tXG5tbS92bXNjYW4uYz02ODQ3PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTItLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njg5Mzp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg5NC1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjkxOS1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxubW0vdm1zY2FuLmM6NjkyMDpcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTY5MjEtXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJiMzOTtzIGFzIHdlbGwuIFdlIGhhY2tcbi0tXG5tbS92bXNjYW4uYz03MDQxPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MDY1LVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6NzA2NjpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTcwNjctXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYz03MTIzPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MTYxLSAqL1xubW0vdm1zY2FuLmM6NzE2MjpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcxNjMtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcxNzgtXHQgKi9cbm1tL3Ztc2Nhbi5jOjcxNzk6XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzE4MC1cbi0tXG5tbS92bXNjYW4uYz03MjM1PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzM0NC1cbm1tL3Ztc2Nhbi5jOjczNDU6XHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xubW0vdm1zY2FuLmMtNzM0Ni1cdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNzM1Ni1cdFx0ICovXG5tbS92bXNjYW4uYzo3MzU3Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MzU4LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9NzkxMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTc5MzgtXHRcdGRvIHtcbm1tL3Ztc2Nhbi5jOjc5Mzk6XHRcdFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTc5NDAtXHRcdH0gd2hpbGUgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2MgbnJfcGFnZXMgXHUwMDI2XHUwMDI2IC0tc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlPSAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NzgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTWVtb3J5IE1hbmFnZW1lbnQgRW50cnkgUG9pbnRzIGFuZCBSZWNsYWltIExvZ2ljKioKCkFscmlnaHQsIHNvIGB0cnlfdG9fZnJlZV9wYWdlc2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBpbml0aWF0ZXMgcGFnZSBmcmVlaW5nLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4gdGhlIGFuYWx5c2lzLiBJdCYjMzk7cyB0aGUgdG9wIGxldmVsIGZ1bmN0aW9uLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkuIFRoZW4sIGBiYWxhbmNlX3BnZGF0YCBpcyB0aGUgbWFpbiBsb29wIGZvciB0aGUga3N3YXBkIGRhZW1vbiwgdGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgdGhlIHBlcnNpc3RlbnQgcHJvY2VzcyB0aGF0IGNvbnN0YW50bHkgbW9uaXRvcnMgYW5kIG1hbmFnZXMgbWVtb3J5IHByZXNzdXJlIGFjcm9zcyB0aGUgc3lzdGVtLgoKYF9fbm9kZV9yZWNsYWltYCBzb3VuZHMgbGlrZSB0aGUgY29yZSBsb2dpYyBmb3IgcmVjbGFpbWluZyBtZW1vcnkgYXQgdGhlIE5VTUEgbm9kZSBsZXZlbC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdoZW4ga3N3YXBkLCBvciBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBuZWVkIHRvIGZyZWUgdXAgbWVtb3J5IGZyb20gYSBzcGVjaWZpYyBub2RlLiBBbmQgZmluYWxseSwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIHNwZWNpZmljYWxseSBmb3IgbWVtb3J5IGNncm91cCByZWNsYWltLiBUaGF0JiMzOTtzIHRhcmdldGVkIGF0IG1lbW9yeSBjb250cm9sIGdyb3VwcywgaGFuZGxpbmcgdGhlaXIgc3BlY2lmaWMgcmVjbGFpbSBkZW1hbmRzLgoKU28sIHdoZXJlIGRvIEkgc3RhcnQ/IExldCYjMzk7cyBkaXZlIGludG8gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgc2VlIGhvdyB0aGUgcGFnZSBmcmVlaW5nIHByb2Nlc3MgdW5mb2xkcy4gVGhhdCBzZWVtcyB0byBiZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIGVudGlyZSBtZW1vcnkgZnJlZWluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mdXNlL2ZpbGUuYz0yMzUxPXN0YXRpYyB2b2lkIGZ1c2Vfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL2Z1c2UvZmlsZS5jLTIzNzEtICogLSBzeW5jKDIpXG5mcy9mdXNlL2ZpbGUuYzoyMzcyOiAqIC0gdHJ5X3RvX2ZyZWVfcGFnZXMoKSB3aXRoIG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUlxuZnMvZnVzZS9maWxlLmMtMjM3My0gKi9cbi0tXG5tbS9pbnRlcm5hbC5oPTY5PXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG5tbS9pbnRlcm5hbC5oOjcwOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxubW0vaW50ZXJuYWwuaC03MS1cdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICptYXNrKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQ5Nj1fX3BlcmZvcm1fcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00NTA4LVxubW0vcGFnZV9hbGxvYy5jOjQ1MDk6XHRwcm9ncmVzcyA9IHRyeV90b19mcmVlX3BhZ2VzKGFjLVx1MDAzZXpvbmVsaXN0LCBvcmRlciwgZ2ZwX21hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNDUxMC1cdFx0XHRcdFx0XHRcdFx0YWMtXHUwMDNlbm9kZW1hc2spO1xuLS1cbm1tL3Ztc2Nhbi5jPTY1OTQ9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NjI0LSAqL1xubW0vdm1zY2FuLmM6NjYyNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxubW0vdm1zY2FuLmMtNjYyNi1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz02NzY3PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NDYtXG5tbS92bXNjYW4uYzo2ODQ3OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNjg0OC1cdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS92bXNjYW4uYy02ODgxLVxubW0vdm1zY2FuLmM6Njg4MjpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02ODgzLVxuLS1cbm1tL3Ztc2Nhbi5jPTY5MzM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02OTY0LVxubW0vdm1zY2FuLmM6Njk2NTpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02OTY2LVxuLS1cbm1tL3Ztc2Nhbi5jPTc3MzE9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzc1MC1cbm1tL3Ztc2Nhbi5jOjc3NTE6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzc1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiBhbmQgTWVtb3J5IFJlY2xhbWF0aW9uKioKCk9rYXksIHNvIGB0cnlfdG9fZnJlZV9wYWdlc2AgZ2V0cyBjYWxsZWQgZnJvbSBgX19wZXJmb3JtX3JlY2xhaW1gIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhpcyBpcyB0aGUgc2xvdyBwYXRoIGZvciBwYWdlIGFsbG9jYXRpb24sIHdoaWNoIGNvbmZpcm1zIGl0cyBpbXBvcnRhbmNlLiBEZWZpbml0ZWx5IGEgdmFsaWQgY29kZSBwYXRoLgoKTGV0JiMzOTtzIHJldmlzaXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSBzZWUgYHRyeV90b19pbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLiBUaGV5JiMzOTtyZSBhbGwgc3RhdGljLCB3aGljaCBsaW1pdHMgdGhlaXIgZGlyZWN0IHVzZWZ1bG5lc3MuIEkgbmVlZCB0byBpZGVudGlmeSBzdWl0YWJsZSBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgYEZvY3VzU3ltYm9sc2AsIHRob3VnaC4KCkkmIzM5O3ZlIGdvdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGBiYWxhbmNlX3BnZGF0YCAod2hpY2ggaXMga3N3YXBkKSwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gSG1tLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGluY3JlZGlibHkgZ2VuZXJpYyDigJMgaXQmIzM5O3MgdGhlIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgcmVjbGFpbS4gV2hpbGUgaXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbiwgaXQmIzM5O3MgcGVyaGFwcyAqdG9vKiBicm9hZC4gSSBuZWVkIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLgoKSSB3b25kZXIgaWYgYGxydV9nZW5fc2hyaW5rX2xydXZlY2Agd291bGQgYmUgbW9yZSB0YXJnZXRlZD8gQnV0IG5vLCBpdCYjMzk7cyBzdGF0aWMuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUgYXJlICpubyogbm9uLXN0YXRpYyBgbHJ1X2dlbl8qYCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGxydV9nZW5fJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk3LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTg6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQ5OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNTAwOnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTAxLVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njc3PXN0cnVjdCBscnVfZ2VuX21lbWNnIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY4Ny1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njg4OnZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2ODk6dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MC1ib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Mjp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTM6dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njk0OnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njk1OnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Njp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTc6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTgtdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02OTk9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwMDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzAxLVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzUxPXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzUyOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc1My17XG4tLVxubW0vdm1zY2FuLmM9MjkyMj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0yOTQwLVxubW0vdm1zY2FuLmM6Mjk0MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk0Mi17XG4tLVxubW0vdm1zY2FuLmMtMjk2Ny1cbm1tL3Ztc2Nhbi5jOjI5Njg6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5Njkte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMDctI2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmM6MzAwODp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTMwMDkte1xuLS1cbm1tL3Ztc2Nhbi5jPTQzNzE9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDQxOC1cbm1tL3Ztc2Nhbi5jOjQ0MTk6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NDIwLXtcbi0tXG5tbS92bXNjYW4uYy00NDQzLVxubW0vdm1zY2FuLmM6NDQ0NDp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NDQ1LXtcbi0tXG5tbS92bXNjYW4uYy00NDU0LVxubW0vdm1zY2FuLmM6NDQ1NTp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NDU2LXtcbi0tXG5tbS92bXNjYW4uYy00NDgwLVxubW0vdm1zY2FuLmM6NDQ4MTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ0ODIte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ1Nzg9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00NjA4LVxubW0vdm1zY2FuLmM6NDYwOTp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYxMC17XG4tLVxubW0vdm1zY2FuLmM9NTkyNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNTkzNi1cbm1tL3Ztc2Nhbi5jOjU5Mzc6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTU5Mzgte1xuLS1cbm1tL3Ztc2Nhbi5jLTU5NDgtXG5tbS92bXNjYW4uYzo1OTQ5OnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01OTUwLXtcbi0tXG5tbS92bXNjYW4uYy01OTcwLVxubW0vdm1zY2FuLmM6NTk3MTp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy01OTcyLXtcbi0tXG5tbS92bXNjYW4uYy01OTgxLVxubW0vdm1zY2FuLmM6NTk4Mjp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy01OTgzLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaD0zNz1zdHJ1Y3QgbWVtY2dfc3RhdHMge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2xydV9nZW5fdXRpbC5oLTQyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbHJ1X2dlbl91dGlsLmg6NDM6dm9pZCBscnVfZ2VuX3JlYWRfbWVtY2dfc3RhdHMoc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cywgY29uc3QgY2hhciAqbWVtY2cpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbHJ1X2dlbl91dGlsLmgtNDQtbG9uZyBscnVfZ2VuX3N1bV9tZW1jZ19zdGF0cyhjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2xydV9nZW5fdXRpbC5oPTQ1PWxvbmcgbHJ1X2dlbl9zdW1fbWVtY2dfc3RhdHNfZm9yX2dlbihpbnQgZ2VuLCBjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2xydV9nZW5fdXRpbC5oOjQ2OnZvaWQgbHJ1X2dlbl9kb19hZ2luZyhzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICptZW1jZyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaC00Ny1pbnQgbHJ1X2dlbl9maW5kX2dlbmVyYXRpb24oY29uc3Qgc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jPTE4MT1zdGF0aWMgdm9pZCBwcmludF9tZW1jZ19zdGF0cyhjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmMtMjAwLS8qIFJlLXJlYWQgbHJ1X2dlbiBkZWJ1Z2ZzIGluZm9ybWF0aW9uIGZvciBAbWVtY2cgaW50byBAc3RhdHMuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jOjIwMTp2b2lkIGxydV9nZW5fcmVhZF9tZW1jZ19zdGF0cyhzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICptZW1jZylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmMtMjAyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jPTI4Mj1zdGF0aWMgdm9pZCBydW5fYWdpbmdfaW1wbCh1bnNpZ25lZCBsb25nIG1lbWNnX2lkLCBpbnQgbm9kZV9pZCwgaW50IG1heF9nZW4pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9scnVfZ2VuX3V0aWwuYy0zMDEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jOjMwMjp2b2lkIGxydV9nZW5fZG9fYWdpbmcoc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cywgY29uc3QgY2hhciAqbWVtY2cpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jLTMwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTUzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBSZWNsYWltIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbWVtb3J5IHJlY2xhaW0gZnVuY3Rpb25zLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGlzbiYjMzk7dCBzdGF0aWMgYW5kIGNhbGxzIGludG8gTUdMUlUgcmVjbGFpbS4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIHNlZSB0aGF0IGBzaHJpbmtfbm9kZWAgKmlzKiBzdGF0aWMsIGJ1dCB0aGVuIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyAqbm90KiBzdGF0aWMuIEhtbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFBlcmhhcHMgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzIGEgbW9yZSByZWxldmFudCBwb2ludCB0byBmb2N1cyBvbiwgYXMgYSBub24tc3RhdGljIHN5bWJvbCBpcyBvZnRlbiBhIG1vcmUgaW1wb3J0YW50IGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSYjMzk7bGwgZmluZCBpdCBpbiBgbW0vdm1zY2FuLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9ODM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9pbnRlcm5hbC5oLTg3LVx0XHRcdFx0XHQgICBpbnQgKnN3YXBwaW5lc3MpO1xubW0vaW50ZXJuYWwuaDo4ODp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vaW50ZXJuYWwuaC04OS1cdFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNzM9c3RhdGljIGludCBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMzEyLVx0XHR9XG5tbS9tZW1jb250cm9sLXYxLmM6MzEzOlx0XHR0b3RhbCAmIzQzOz0gbWVtX2Nncm91cF9zaHJpbmtfbm9kZSh2aWN0aW0sIGdmcF9tYXNrLCBmYWxzZSxcbm1tL21lbWNvbnRyb2wtdjEuYy0zMTQtXHRcdFx0XHRcdHBnZGF0LCBcdTAwMjZucl9zY2FubmVkKTtcbi0tXG5tbS92bXNjYW4uYz02ODQ3PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTItLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njg5Mzp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg5NC1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjEyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBNZW1vcnkgUmVjbGFpbTogQSBQcm9taXNpbmcgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IG1lbW9yeSByZWNsYWltIGluIHRoZSBrZXJuZWwsIGFuZCBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgbWVtb3J5X21heF93cml0ZWAgYW5kIGBtZW1vcnlfaGlnaF93cml0ZWAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHF1aXRlIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHRpZWQgdG8gbWVtb3J5IGxpbWl0cyBiZWluZyByZWFjaGVkLCBlaXRoZXIgbWF4aW11bSBvciBoaWdoIHRocmVzaG9sZHMsIHN1Z2dlc3RzIGl0JiMzOTtzIGEgZ29vZCBzcG90IHRvIHByb2JlIHRoZSByZWNsYWltIG1lY2hhbmlzbXMgdW5kZXIgc3RyZXNzLiBJdCBtYWtlcyBsb2dpY2FsIHNlbnNlIHRvIHN0YXJ0IGhlcmUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIGZyZWUgbWVtb3J5IHdoZW4gdGhlIHN5c3RlbSBpcyB1bmRlciBwcmVzc3VyZS4gVGhlcmVmb3JlLCBJIHNob3VsZCBjYXJlZnVsbHkgYW5hbHl6ZSBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJuYWwgd29ya2luZ3MuIEl0IGFwcGVhcnMgdG8gYmUgYW4gaWRlYWwgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBnaXZlbiBpdHMgY29udGV4dC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD03Mj11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuLS1cbm1tL2ludGVybmFsLmgtODItXG5tbS9pbnRlcm5hbC5oOjgzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg0LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNzcyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNi1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODE3Olx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxOC1cdFx0XHRcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4MzU9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1Mi1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODUzOlx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1NC1cdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzczPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzODgtXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vbWVtY29udHJvbC5jOjIzODk6XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtMjM5MC1cdFx0XHRcdFx0XHRcdGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzEyLVx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9tZW1jb250cm9sLmM6MjcxMzpcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTI3MTQtXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00ODMwPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDg3MS1cbm1tL21lbWNvbnRyb2wuYzo0ODcyOlx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIGhpZ2gsXG5tbS9tZW1jb250cm9sLmMtNDg3My1cdFx0XHRcdFx0R0ZQX0tFUk5FTCwgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4ODk9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5MzAtXHRcdGlmIChucl9yZWNsYWltcykge1xubW0vbWVtY29udHJvbC5jOjQ5MzE6XHRcdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcbm1tL21lbWNvbnRyb2wuYy00OTMyLVx0XHRcdFx0XHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbi0tXG5tbS92bXNjYW4uYz02ODkzPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjkzMi1cbm1tL3Ztc2Nhbi5jOjY5MzM6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY5MzQtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjk3My0jZWxzZVxubW0vdm1zY2FuLmM6Njk3NDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjk3NS1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz04MDM2PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MTA3LVx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xubW0vdm1zY2FuLmM6ODEwODpcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxubW0vdm1zY2FuLmMtODEwOS1cdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njg3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIENncm91cCBNZW1vcnkgTWFuYWdlbWVudCoqCgpgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuLi4gbm93ICp0aGF0JiMzOTtzKiBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBncmFicyBteSBhdHRlbnRpb24uIEl0IGNsZWFybHkgdGFyZ2V0cyBtZW1vcnkgcHJlc3N1cmUgd2l0aGluIGEgY2dyb3VwLiBJIGxpa2UgdGhhdC4gQnV0IHdoYXQgZWxzZSBpcyBpbiBwbGF5IGhlcmU/IEFoLCAqdGhhdCYjMzk7cyogdGhlIGJlYXV0eSBvZiBjZ3JvdXAgdjIsIHRoZXJlIGlzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhhdCYjMzk7cyBpbnZva2VkIHdoZW4gd2Ugd3JpdGUgdG8gYG1lbW9yeS5yZWNsYWltYCwgd2hpY2ggaXMgdGhlIHVzZXIgaW50ZXJmYWNlIHRvIHRyaWdnZXIgbWVtb3J5IHJlY2xhbWF0aW9uLgoKSSBuZWVkIHRvIGRpdmUgaW50byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IGl0IHdvcmtzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NzAzPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NzA0OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNzA1LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwNjU9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTUwNzAtXG5tbS9tZW1jb250cm9sLmM6NTA3MTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNTA3Mi1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9ODAzMD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtODAzNS1cbm1tL3Ztc2Nhbi5jOjgwMzY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtODAzNy1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODE4OT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MTk0LVxubW0vdm1zY2FuLmM6ODE5NTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgxOTYtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzI0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIE1HTFJVIFVzYWJpbGl0eSoqCgpPa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBmb2N1c2luZyBvdXIgZWZmb3J0cy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgLSBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkgd2l0aGluIE1HTFJVIHRoYXQgY291bGQgYmUgaW52b2tlZCBmcm9tIHVzZXJzcGFjZT8gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBgcnVuX2NtZGAgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCBpcyBjYWxsZWQgZnJvbSBkZWJ1Z2ZzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGltZSB0byBkZWx2ZSBpbnRvIGBydW5fY21kYCBhbmQgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydW5fY21kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NDU0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyPTY4PXVzYWdlKCkge1xuLS1cbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNzUtXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyOjc2OnJ1bl9jbWQoKSB7XG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyLTc3LSAgICBpZiBbIFwmIzM0OyRWXCYjMzQ7ID0gMSBdOyB0aGVuXG4tLVxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcj01MzA9cHMzKVxuLS1cbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNTU0LVxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcjo1NTU6ICAgIHJ1bl9jbWQgZGQgaWY9XCYjMzQ7JG9maWxlLmJpblwmIzM0OyBvZj1cJiMzNDskb2ZpbGUuYmluXCYjMzQ7IGNvbnY9bm90cnVuYyAgIFxcXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyLTU1Ni0gICAgICAgIHNraXA9JG92ZXJsYXlfZGVzdCBzZWVrPSRzeXN0ZW1fcmVzZXRfa2VybmVsICAgICAgICAgIFxcXG4tLVxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlci01NTgtXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyOjU1OTogICAgcnVuX2NtZCBkZCBpZj1cJiMzNDskb2ZpbGUuYmluXCYjMzQ7IG9mPVwmIzM0OyRvZmlsZS5iaW5cJiMzNDsgY29udj1ub3RydW5jICAgXFxcbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNTYwLSAgICAgICAgc2tpcD0kc3lzdGVtX3Jlc2V0X292ZXJsYXkgc2Vlaz0kb3ZlcmxheV9kZXN0ICAgICAgICAgXFxcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5jPTQzND1pbnQgY2NwX2NtZF9xdWV1ZV90aHJlYWQodm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5jLTQ1NS1cdFx0LyogRXhlY3V0ZSB0aGUgY29tbWFuZCAqL1xuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYuYzo0NTY6XHRcdGNtZC1cdTAwM2VyZXQgPSBjY3BfcnVuX2NtZChjbWRfcSwgY21kKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LmMtNDU3LVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2Lmg9NjM5PWludCBjY3BfdHJuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB2b2lkICpkYXRhLCBzaXplX3QgbWF4LCBib29sIHdhaXQpO1xuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYuaC02NDAtXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5oOjY0MTppbnQgY2NwX3J1bl9jbWQoc3RydWN0IGNjcF9jbWRfcXVldWUgKmNtZF9xLCBzdHJ1Y3QgY2NwX2NtZCAqY21kKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LmgtNjQyLVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3Atb3BzLmM9MjQ1MD1jY3BfcnVuX2VjY19jbWQoc3RydWN0IGNjcF9jbWRfcXVldWUgKmNtZF9xLCBzdHJ1Y3QgY2NwX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3Atb3BzLmMtMjQ3NS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3Atb3BzLmM6MjQ3NjppbnQgY2NwX3J1bl9jbWQoc3RydWN0IGNjcF9jbWRfcXVldWUgKmNtZF9xLCBzdHJ1Y3QgY2NwX2NtZCAqY21kKVxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1vcHMuYy0yNDc3LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM9MjI3PXN0cnVjdCBnMmRfcnVucXVldWVfbm9kZSB7XG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMjI4LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoyMjk6XHRzdHJ1Y3QgbGlzdF9oZWFkXHRydW5fY21kbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0yMzAtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRldmVudF9saXN0O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYz04MDA9c3RhdGljIHZvaWQgZzJkX2RtYV9zdGFydChzdHJ1Y3QgZzJkX2RhdGEgKmcyZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODAzLVx0c3RydWN0IGcyZF9jbWRsaXN0X25vZGUgKm5vZGUgPVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjgwNDpcdFx0XHRcdGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2cnVucXVldWVfbm9kZS1cdTAwM2VydW5fY21kbGlzdCxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MDUtXHRcdFx0XHRcdFx0c3RydWN0IGcyZF9jbWRsaXN0X25vZGUsIGxpc3QpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYz04MjU9c3RhdGljIHZvaWQgZzJkX2ZyZWVfcnVucXVldWVfbm9kZShzdHJ1Y3QgZzJkX2RhdGEgKmcyZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODMxLVx0LypcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzo4MzI6XHQgKiBjb21tYW5kcyBpbiBydW5fY21kbGlzdCBoYXZlIGJlZW4gY29tcGxldGVkIHNvIHVubWFwIGFsbCBnZW1cbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MzMtXHQgKiBvYmplY3RzIGluIGVhY2ggY29tbWFuZCBub2RlIHNvIHRoYXQgdGhleSBhcmUgdW5yZWZlcmVuY2VkLlxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTgzNC1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjgzNTpcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cnVucXVldWVfbm9kZS1cdTAwM2VydW5fY21kbGlzdCwgbGlzdClcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MzYtXHRcdGcyZF91bm1hcF9jbWRsaXN0X2dlbShnMmQsIG5vZGUsIHJ1bnF1ZXVlX25vZGUtXHUwMDNlZmlscCk7XG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6ODM3Olx0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNnJ1bnF1ZXVlX25vZGUtXHUwMDNlcnVuX2NtZGxpc3QsIFx1MDAyNmcyZC1cdTAwM2VmcmVlX2NtZGxpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTgzOC1cdG11dGV4X3VubG9jayhcdTAwMjZnMmQtXHUwMDNlY21kbGlzdF9tdXRleCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jPTEyOTk9aW50IGV4eW5vc19nMmRfZXhlY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMwNi1cdHN0cnVjdCBnMmRfcnVucXVldWVfbm9kZSAqcnVucXVldWVfbm9kZTtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzA3Olx0c3RydWN0IGxpc3RfaGVhZCAqcnVuX2NtZGxpc3Q7XG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMwOC1cdHN0cnVjdCBsaXN0X2hlYWQgKmV2ZW50X2xpc3Q7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMTMtXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6MTMxNDpcdHJ1bl9jbWRsaXN0ID0gXHUwMDI2cnVucXVldWVfbm9kZS1cdTAwM2VydW5fY21kbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzE1LVx0ZXZlbnRfbGlzdCA9IFx1MDAyNnJ1bnF1ZXVlX25vZGUtXHUwMDNlZXZlbnRfbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzE2Olx0SU5JVF9MSVNUX0hFQUQocnVuX2NtZGxpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMTctXHRJTklUX0xJU1RfSEVBRChldmVudF9saXN0KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMyMC1cbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzIxOlx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZmaWxlX3ByaXYtXHUwMDNlaW51c2VfY21kbGlzdCwgcnVuX2NtZGxpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMjItXHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmZpbGVfcHJpdi1cdTAwM2VldmVudF9saXN0LCBldmVudF9saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzIzLVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjEzMjQ6XHRpZiAobGlzdF9lbXB0eShydW5fY21kbGlzdCkpIHtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzI1LVx0XHRkZXZfZXJyKGcyZC1cdTAwM2VkZXYsIFwmIzM0O3RoZXJlIGlzIG5vIGludXNlIGNtZGxpc3RcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jPTkzOT1pbnQgY29kYV9jaGVja19maXJtd2FyZShzdHJ1Y3QgY29kYV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYy05NjAtXHRcdHJldCA9IC1FSU87XG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYzo5NjE6XHRcdGdvdG8gZXJyX3J1bl9jbWQ7XG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYy05NjItXHR9XG4tLVxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jaGlwcy1tZWRpYS9jb2RhL2NvZGEtYml0LmMtMTAwMS1cbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jOjEwMDI6ZXJyX3J1bl9jbWQ6XG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYy0xMDAzLVx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRldi1cdTAwM2VjbGtfYWhiKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTczPXN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTE3OS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxODA6c3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xODEtXHRcdFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0yMzc9c3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI0My1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoyNDQ6XHRyZXQgPSBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3JlYWQsIGNtZF9kYXRhKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNDUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0yNTc9c3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNjMtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MjY0Olx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXHUwMDNlaW5mby1cdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNjUtfVxuLS1cbmtlcm5lbC9yZWJvb3QuYz04NDA9c3RhdGljIGNvbnN0IGNoYXIgcmVib290X2NtZFtdID0gXCYjMzQ7L3NiaW4vcmVib290XCYjMzQ7O1xua2VybmVsL3JlYm9vdC5jLTg0MS1cbmtlcm5lbC9yZWJvb3QuYzo4NDI6c3RhdGljIGludCBydW5fY21kKGNvbnN0IGNoYXIgKmNtZClcbmtlcm5lbC9yZWJvb3QuYy04NDMte1xuLS1cbmtlcm5lbC9yZWJvb3QuYz04NjI9c3RhdGljIGludCBfX29yZGVybHlfcmVib290KHZvaWQpXG4tLVxua2VybmVsL3JlYm9vdC5jLTg2NS1cbmtlcm5lbC9yZWJvb3QuYzo4NjY6XHRyZXQgPSBydW5fY21kKHJlYm9vdF9jbWQpO1xua2VybmVsL3JlYm9vdC5jLTg2Ny1cbi0tXG5rZXJuZWwvcmVib290LmM9ODc3PXN0YXRpYyBpbnQgX19vcmRlcmx5X3Bvd2Vyb2ZmKGJvb2wgZm9yY2UpXG4tLVxua2VybmVsL3JlYm9vdC5jLTg4MC1cbmtlcm5lbC9yZWJvb3QuYzo4ODE6XHRyZXQgPSBydW5fY21kKHBvd2Vyb2ZmX2NtZCk7XG5rZXJuZWwvcmVib290LmMtODgyLVxuLS1cbm1tL3Ztc2Nhbi5jPTU3NTc9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTc4Ni1cbm1tL3Ztc2Nhbi5jOjU3ODc6c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxubW0vdm1zY2FuLmMtNTc4OC1cdFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcbi0tXG5tbS92bXNjYW4uYz01ODI5PXN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4OTctXG5tbS92bXNjYW4uYzo1ODk4Olx0XHRlcnIgPSBydW5fY21kKGNtZCwgbWVtY2dfaWQsIG5pZCwgc2VxLCBcdTAwMjZzYywgc3dhcHBpbmVzcywgb3B0KTtcbm1tL3Ztc2Nhbi5jLTU4OTktXHRcdGlmIChlcnIpXG4tLVxuc2NyaXB0cy9jb2NjaWNoZWNrPTEzNT1maVxuc2NyaXB0cy9jb2NjaWNoZWNrLTEzNi1cbnNjcmlwdHMvY29jY2ljaGVjazoxMzc6cnVuX2NtZF9wYXJtYXAoKSB7XG5zY3JpcHRzL2NvY2NpY2hlY2stMTM4LVx0aWYgWyAkVkVSQk9TRSAtbmUgMCBdIDsgdGhlblxuLS1cbnNjcmlwdHMvY29jY2ljaGVjay0xNTUtXG5zY3JpcHRzL2NvY2NpY2hlY2s6MTU2OnJ1bl9jbWRfb2xkKCkge1xuc2NyaXB0cy9jb2NjaWNoZWNrLTE1Ny1cdGxvY2FsIGlcbi0tXG5zY3JpcHRzL2NvY2NpY2hlY2stMTcwLVxuc2NyaXB0cy9jb2NjaWNoZWNrOjE3MTpydW5fY21kKCkge1xuc2NyaXB0cy9jb2NjaWNoZWNrLTE3Mi1cdGlmIFsgXCYjMzQ7JFVTRV9KT0JTXCYjMzQ7ID0gXCYjMzQ7eWVzXCYjMzQ7IF07IHRoZW5cbnNjcmlwdHMvY29jY2ljaGVjazoxNzM6XHRcdHJ1bl9jbWRfcGFybWFwICRAXG5zY3JpcHRzL2NvY2NpY2hlY2stMTc0LVx0ZWxzZVxuc2NyaXB0cy9jb2NjaWNoZWNrOjE3NTpcdFx0cnVuX2NtZF9vbGQgJEBcbnNjcmlwdHMvY29jY2ljaGVjay0xNzYtXHRmaVxuLS1cbnNjcmlwdHMvY29jY2ljaGVjaz0xOTE9Y29jY2luZWxsZSAoKSB7XG4tLVxuc2NyaXB0cy9jb2NjaWNoZWNrLTI0Mi0gICAgaWYgWyBcJiMzNDskTU9ERVwmIzM0OyA9IFwmIzM0O2NoYWluXCYjMzQ7IF0gOyB0aGVuXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjQzOlx0cnVuX2NtZCAkU1BBVENIIC1EIHBhdGNoICAgXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNDQtXHRcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgICAgICAgICAgICAgICB8fCBcXFxuc2NyaXB0cy9jb2NjaWNoZWNrOjI0NTpcdHJ1bl9jbWQgJFNQQVRDSCAtRCByZXBvcnQgIFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjQ2LVx0XHQkRkxBR1MgLS1jb2NjaS1maWxlICRDT0NDSSAkT1BUICRPUFRJT05TIC0tbm8tc2hvdy1kaWZmIHx8IFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjQ3Olx0cnVuX2NtZCAkU1BBVENIIC1EIGNvbnRleHQgXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNDgtXHRcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgICAgICAgICAgICAgICB8fCBcXFxuc2NyaXB0cy9jb2NjaWNoZWNrOjI0OTpcdHJ1bl9jbWQgJFNQQVRDSCAtRCBvcmcgICAgIFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjUwLVx0XHQkRkxBR1MgLS1jb2NjaS1maWxlICRDT0NDSSAkT1BUICRPUFRJT05TIC0tbm8tc2hvdy1kaWZmIHx8IGV4aXQgMVxuc2NyaXB0cy9jb2NjaWNoZWNrLTI1MS0gICAgZWxpZiBbIFwmIzM0OyRNT0RFXCYjMzQ7ID0gXCYjMzQ7cmVwJiM0MztjdHh0XCYjMzQ7IF0gOyB0aGVuXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjUyOlx0cnVuX2NtZCAkU1BBVENIIC1EIHJlcG9ydCAgXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNTMtXHRcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgLS1uby1zaG93LWRpZmYgXHUwMDI2XHUwMDI2IFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjU0Olx0cnVuX2NtZCAkU1BBVENIIC1EIGNvbnRleHQgXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNTUtXHRcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgfHwgZXhpdCAxXG5zY3JpcHRzL2NvY2NpY2hlY2stMjU2LSAgICBlbHNlXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjU3Olx0cnVuX2NtZCAkU1BBVENIIC1EICRNT0RFICAgJEZMQUdTIC0tY29jY2ktZmlsZSAkQ09DQ0kgJE9QVCAkT1BUSU9OUyB8fCBleGl0IDFcbnNjcmlwdHMvY29jY2ljaGVjay0yNTgtICAgIGZpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0zOT1maVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC00MC1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6NDE6cnVuX2NtZCgpIHsgIyBjb21tYW5kXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTQyLVx0ZWNobyBcJiMzNDskKlwmIzM0O1xuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g9Nzc9c2V0X3ZhbHVlX29mKCkgeyAjIGtleSBmaWxlXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC03OS1cdFx0dmFsPWB4YmNfZ2V0X3ZhbCAkMSAxYFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDo4MDpcdFx0cnVuX2NtZCBcJiMzNDtlY2hvICYjMzk7JHZhbCYjMzk7IFx1MDAzZVx1MDAzZSAkMlwmIzM0O1xudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC04MS1cdGZpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD04ND1zZXRfYXJyYXlfb2YoKSB7ICMga2V5IGZpbGVcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTg2LVx0XHR4YmNfZ2V0X3ZhbCAkMSB8IHdoaWxlIHJlYWQgbGluZTsgZG9cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6ODc6XHRcdFx0cnVuX2NtZCBcJiMzNDtlY2hvICYjMzk7JGxpbmUmIzM5OyBcdTAwM2VcdTAwM2UgJDJcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtODgtXHRcdGRvbmVcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTE3MD1zZXR1cF9vbmVfaGlzdG9ncmFtKCkgeyAjIHByZWZpeCB0cmlnZ2VyLWZpbGVcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MTcxOlx0cnVuX2NtZCBcJiMzNDtlY2hvICYjMzk7YHByaW50X29uZV9oaXN0b2dyYW0gJHsxfWAmIzM5OyBcdTAwM2VcdTAwM2UgJHsyfVwmIzM0O1xudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0xNzItfVxuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g9MTgzPXNldHVwX2V2ZW50KCkgeyAjIHByZWZpeCBncm91cCBldmVudCBbaW5zdGFuY2VdXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0xOTEtXHRpZiBbIFwmIzM0OyQzXCYjMzQ7ID0gXCYjMzQ7ZW5hYmxlXCYjMzQ7IF07IHRoZW5cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MTkyOlx0XHRydW5fY21kIFwmIzM0O2VjaG8gMSBcdTAwM2UgJHtldmVudGRpcn1cJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMTkzLVx0XHRyZXR1cm5cbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTE5OC1cdFx0eGJjX2dldF92YWwgJHticmFuY2h9LnByb2JlcyB8IHdoaWxlIHJlYWQgbGluZTsgZG9cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MTk5Olx0XHRcdHJ1bl9jbWQgXCYjMzQ7ZWNobyAmIzM5O3A6a3Byb2Jlcy8kMyAkbGluZSYjMzk7IFx1MDAzZVx1MDAzZSAkVFJBQ0VGUy9rcHJvYmVfZXZlbnRzXCYjMzQ7XG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTIwMC1cdFx0ZG9uZVxuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjAyLVx0c3ludGhldGljKVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyMDM6XHRcdHJ1bl9jbWQgXCYjMzQ7ZWNobyAmIzM5O2Bjb21wb3NlX3N5bnRoICQzICR7YnJhbmNofS5maWVsZHNgJiMzOTsgXHUwMDNlXHUwMDNlICRUUkFDRUZTL3N5bnRoZXRpY19ldmVudHNcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjA0LVx0XHQ7O1xuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjEyLVx0aWYgeGJjX2hhc19rZXkgJHticmFuY2h9LmVuYWJsZTsgdGhlblxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyMTM6XHRcdHJ1bl9jbWQgXCYjMzQ7ZWNobyAxIFx1MDAzZSAke2V2ZW50ZGlyfS9lbmFibGVcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjE0LVx0Zmlcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTIxNz1zZXR1cF9ldmVudHMoKSB7ICMgcHJlZml4KFwmIzM0O2Z0cmFjZVwmIzM0OyBvciBcJiMzNDtmdHJhY2UuaW5zdGFuY2UuSU5TVEFOQ0VcJiMzNDspIFtpbnN0YW5jZV1cbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTIyNS1cdFx0aWYgWyBcJiMzNDskMlwmIzM0OyBdOyB0aGVuXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjIyNjpcdFx0XHRydW5fY21kIFwmIzM0O2VjaG8gMSBcdTAwM2UgJFRSQUNFRlMvaW5zdGFuY2VzLyQyL2V2ZW50cy9lbmFibGVcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjI3LVx0XHRlbHNlXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjIyODpcdFx0XHRydW5fY21kIFwmIzM0O2VjaG8gMSBcdTAwM2UgJFRSQUNFRlMvZXZlbnRzL2VuYWJsZVwmIzM0O1xudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0yMjktXHRcdGZpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0yNDQ9c2V0dXBfaW5zdGFuY2UoKSB7ICMgW2luc3RhbmNlXVxuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjYzLVx0aWYgeGJjX2hhc19rZXkgJHtpbnN0YW5jZX0uYWxsb2Nfc25hcHNob3Q7IHRoZW5cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjY0Olx0XHRydW5fY21kIFwmIzM0O2VjaG8gMSBcdTAwM2UgJHtpbnN0YW5jZWRpcn0vc25hcHNob3RcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjY1LVx0Zmlcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI2OS1cdFx0c2l6ZT1gZXZhbCBzaXplMmtiICRzaXplYFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyNzA6XHRcdHJ1bl9jbWQgXCYjMzQ7ZWNobyAkc2l6ZSBcdTAwM2VcdTAwM2UgJHtpbnN0YW5jZWRpcn0vYnVmZmVyX3NpemVfa2JcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjcxLVx0Zmlcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTI3OD1pZiB4YmNfaGFzX2tleSBcJiMzNDtrZXJuZWwuZHVtcF9vbl9vb3BzXCYjMzQ7OyB0aGVuXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0yODAtXHRbIFwmIzM0OyRkdW1wX21vZGVcJiMzNDsgXSBcdTAwMjZcdTAwMjYgZHVtcF9tb2RlPWBldmFsIGVjaG8gJGR1bXBfbW9kZWAgfHwgZHVtcF9tb2RlPTFcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjgxOlx0cnVuX2NtZCBcJiMzNDtlY2hvIFxcXCYjMzQ7JGR1bXBfbW9kZVxcXCYjMzQ7IFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9kdW1wX29uX29vcHNcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjgyLWZpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0yOTU9aWYgeGJjX2hhc19icmFuY2ggXCYjMzQ7ZnRyYWNlLmluc3RhbmNlXCYjMzQ7OyB0aGVuXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI5Ni1cdGZvciBpIGluIGB4YmNfc3Via2V5cyBcJiMzNDtmdHJhY2UuaW5zdGFuY2VcJiMzNDsgMWA7IGRvXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjI5NzpcdFx0cnVuX2NtZCBcJiMzNDtta2RpciAtcCAkVFJBQ0VGUy9pbnN0YW5jZXMvJGlcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjk4LVx0XHRzZXR1cF9pbnN0YW5jZSAkaVxuLS1cbnRvb2xzL3BlcmYvdGVzdHMvc2hlbGwvbGliL2F0dHIucHk9MTQ3PWNsYXNzIFRlc3Qob2JqZWN0KTpcbi0tXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5LTI4MS1cbnRvb2xzL3BlcmYvdGVzdHMvc2hlbGwvbGliL2F0dHIucHk6MjgyOiAgICBkZWYgcnVuX2NtZChzZWxmLCB0ZW1wZGlyKTpcbnRvb2xzL3BlcmYvdGVzdHMvc2hlbGwvbGliL2F0dHIucHktMjgzLSAgICAgICAganVuazEsIGp1bmsyLCBqdW5rMywganVuazQsIG15YXJjaCA9IChvcy51bmFtZSgpKVxuLS1cbnRvb2xzL3BlcmYvdGVzdHMvc2hlbGwvbGliL2F0dHIucHktMzc4LSAgICAgICAgICAgICMgcnVuIHRoZSB0ZXN0IHNjcmlwdFxudG9vbHMvcGVyZi90ZXN0cy9zaGVsbC9saWIvYXR0ci5weTozNzk6ICAgICAgICAgICAgc2VsZi5ydW5fY21kKHRlbXBkaXIpO1xudG9vbHMvcGVyZi90ZXN0cy9zaGVsbC9saWIvYXR0ci5weS0zODAtXG4tLVxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5PTM2PWRlZiBtYWluKGFyZ3Y6IFNlcXVlbmNlW3N0cl0pIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL2t1bml0L3J1bl9jaGVja3MucHktNDUtXHRcdFx0Y29udGludWVcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weTo0NjpcdFx0ZiA9IGV4ZWN1dG9yLnN1Ym1pdChydW5fY21kLCBhcmd2KVxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5LTQ3LVx0XHRmdXR1cmVfdG9fbmFtZVtmXSA9IG5hbWVcbi0tXG50b29scy90ZXN0aW5nL2t1bml0L3J1bl9jaGVja3MucHktNzUtXG50b29scy90ZXN0aW5nL2t1bml0L3J1bl9jaGVja3MucHk6NzY6ZGVmIHJ1bl9jbWQoYXJndjogU2VxdWVuY2Vbc3RyXSkgLVx1MDAzZSBOb25lOlxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5LTc3LVx0c3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJndiwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBjd2Q9QUJTX1RPT0xfUEFUSCwgdGltZW91dD1USU1FT1VUKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM9MjU9c3RydWN0IHZlcml0eV9pbmZvIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTM2LS8qIFJ1biBhIGNvbW1hbmQgYW5kIG9wdGlvbmFsbHkgY2FwdHVyZSB0aGUgZmlyc3QgbGluZSBvZiBzdGRvdXQuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjM3OnN0YXRpYyBpbnQgcnVuX2NtZChjb25zdCBjaGFyICpjbWQsIGNoYXIgKm91dCwgc2l6ZV90IG91dF9zeilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMzgte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM9NTc9c3RhdGljIGJvb2wgaGFzX3ByZXJlcXVpc2l0ZXModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTYzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzo2NDpcdGlmIChydW5fY21kKFwmIzM0O21vZHByb2JlIGxvb3AgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OywgTlVMTCwgMCkgXHUwMDI2XHUwMDI2XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjY1Olx0ICAgIHJ1bl9jbWQoXCYjMzQ7bHMgL2Rldi9sb29wLWNvbnRyb2wgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OywgTlVMTCwgMCkpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtNjYtXHRcdHByaW50ZihcJiMzNDtTS0lQOiBubyBsb29wIGRldmljZSBzdXBwb3J0XFxuXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTY5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzo3MDpcdGlmIChydW5fY21kKFwmIzM0O21vZHByb2JlIGRtLXZlcml0eSAyXHUwMDNlL2Rldi9udWxsXCYjMzQ7LCBOVUxMLCAwKSBcdTAwMjZcdTAwMjZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NzE6XHQgICAgcnVuX2NtZChcJiMzNDtkbXNldHVwIHRhcmdldHMgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgdmVyaXR5XCYjMzQ7LCBOVUxMLCAwKSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy03Mi1cdFx0cHJpbnRmKFwmIzM0O1NLSVA6IGRtLXZlcml0eSBtb2R1bGUgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy03NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NzY6XHRpZiAocnVuX2NtZChcJiMzNDt3aGljaCB2ZXJpdHlzZXR1cCBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcJiMzNDssIE5VTEwsIDApKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTc3LVx0XHRwcmludGYoXCYjMzQ7U0tJUDogdmVyaXR5c2V0dXAgbm90IGZvdW5kXFxuXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jPTg0PXZvaWQgdGVzdF9sc21fYmRldih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTA1LVx0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXCYjMzQ7ZG1zZXR1cCByZW1vdmUgJXMgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OywgRE1fTkFNRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjEwNjpcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTA3LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTMyLVx0XHQgXCYjMzQ7bG9zZXR1cCAtLWZpbmQgLS1zaG93ICVzIDJcdTAwM2UvZGV2L251bGxcJiMzNDssIGRhdGFfaW1nKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTMzOlx0aWYgKCFBU1NFUlRfT0socnVuX2NtZChjbWQsIGRhdGFfbG9vcCwgc2l6ZW9mKGRhdGFfbG9vcCkpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xMzQtXHRcdCAgICAgICBcJiMzNDtsb3NldHVwIGRhdGFcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTM4LVx0XHQgXCYjMzQ7bG9zZXR1cCAtLWZpbmQgLS1zaG93ICVzIDJcdTAwM2UvZGV2L251bGxcJiMzNDssIGhhc2hfaW1nKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTM5Olx0aWYgKCFBU1NFUlRfT0socnVuX2NtZChjbWQsIGhhc2hfbG9vcCwgc2l6ZW9mKGhhc2hfbG9vcCkpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xNDAtXHRcdCAgICAgICBcJiMzNDtsb3NldHVwIGhhc2hcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTQ3LVx0XHQgZGF0YV9sb29wLCBoYXNoX2xvb3ApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoxNDg6XHRpZiAoIUFTU0VSVF9PSyhydW5fY21kKGNtZCwgcm9vdGhhc2gsIHNpemVvZihyb290aGFzaCkpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xNDktXHRcdCAgICAgICBcJiMzNDt2ZXJpdHlzZXR1cCBmb3JtYXRcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTY3LVx0XHQgZGF0YV9sb29wLCBETV9OQU1FLCBoYXNoX2xvb3AsIHJvb3RoYXNoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTY4Olx0aWYgKCFBU1NFUlRfT0socnVuX2NtZChjbWQsIE5VTEwsIDApLCBcJiMzNDt2ZXJpdHlzZXR1cCBvcGVuXCYjMzQ7KSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTY5LVx0XHRnb3RvIHRlYXJkb3duO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTk4LVx0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXCYjMzQ7ZG1zZXR1cCByZW1vdmUgJXMgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OywgRE1fTkFNRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjE5OTpcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjAwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA0LVx0XHRcdCBkYXRhX2xvb3ApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoyMDU6XHRcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA2LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA5LVx0XHRcdCBoYXNoX2xvb3ApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoyMTA6XHRcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjExLVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5PTk3PWNsYXNzIFJlY29yZFZhbHVlUGlja2VyOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTEyMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjEyMTpkZWYgcnVuX2NtZChjbWQsIGpzb249RmFsc2UpOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMTIyLSAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk9MTI4PWRlZiBydW5fanNvbl9jbWQoY21kKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjEyOTogICAgcmV0dXJuIHJ1bl9jbWQoY21kLCBqc29uPVRydWUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0xMzAtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk9MTcyPWNsYXNzIFBvb2woQ29tbW9uSXRlbSk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMTc1LSAgICBkZWYgZGxfc2V0KHNlbGYsIGRsbmFtZSwgc2l6ZSwgdGh0eXBlKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjE3NjogICAgICAgIHJ1bl9jbWQoXCYjMzQ7ZGV2bGluayBzYiBwb29sIHNldCB7fSBzYiB7fSBwb29sIHt9IHNpemUge30gdGh0eXBlIHt9XCYjMzQ7LmZvcm1hdChkbG5hbWUsIHNlbGZbXCYjMzQ7c2JcJiMzNDtdLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMTc3LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZltcJiMzNDtwb29sXCYjMzQ7XSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weT0yMzA9Y2xhc3MgVGNCaW5kKENvbW1vbkl0ZW0pOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTIzNy0gICAgZGVmIGRsX3NldChzZWxmLCBwb29sLCB0aCk6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weToyMzg6ICAgICAgICBydW5fY21kKFwmIzM0O2Rldmxpbmsgc2IgdGMgYmluZCBzZXQge30gc2Ige30gdGMge30gdHlwZSB7fSBwb29sIHt9IHRoIHt9XCYjMzQ7LmZvcm1hdChzZWxmW1wmIzM0O2RscG9ydG5hbWVcJiMzNDtdLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMjM5LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmW1wmIzM0O3NiXCYjMzQ7XSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weT0zMDQ9Y2xhc3MgUG9ydFBvb2woQ29tbW9uSXRlbSk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMzExLSAgICBkZWYgZGxfc2V0KHNlbGYsIHRoKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjMxMjogICAgICAgIHJ1bl9jbWQoXCYjMzQ7ZGV2bGluayBzYiBwb3J0IHBvb2wgc2V0IHt9IHNiIHt9IHBvb2wge30gdGgge31cJiMzNDsuZm9ybWF0KHNlbGZbXCYjMzQ7ZGxwb3J0bmFtZVwmIzM0O10sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0zMTMtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbXCYjMzQ7c2JcJiMzNDtdLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTE5NT1zZXRfcGluZ19ncm91cCgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjAzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjA0OmRvX3J1bl9jbWQoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjA1LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMjI6cnVuX2NtZCgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjMte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjI0Olx0ZG9fcnVuX2NtZCAke05TQV9DTUR9ICQqXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjUtfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjI2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjI3OnJ1bl9jbWRfbnNiKClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIyOC17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMjk6XHRkb19ydW5fY21kICR7TlNCX0NNRH0gJCpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIzMC19XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMzEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMzI6cnVuX2NtZF9uc2MoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjMzLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjIzNDpcdGRvX3J1bl9jbWQgJHtOU0NfQ01EfSAkKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjM1LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaD0yMzc9c2V0dXBfY21kKClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yNDEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyNDI6XHRydW5fY21kICR7Y21kfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjQzLVx0cmM9JD9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaD0yNTk9c2V0dXBfY21kX25zYigpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjYzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjY0Olx0cnVuX2NtZF9uc2IgJHtjbWR9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yNjUtXHRyYz0kP1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTI4MT1zZXR1cF9jbWRfbnNjKClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yODUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyODY6XHRydW5fY21kX25zYyAke2NtZH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTI4Ny1cdHJjPSQ/XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9MzA0PXNldF9zeXNjdGwoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTMwNy1cdGVjaG9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjMwODpcdHJ1bl9jbWQgc3lzY3RsIC1xIC13ICQqXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0zMDktfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTU4ND1pcHY0X3Bpbmdfbm92cmYoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTU5My1cdFx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo1OTQ6XHRcdHJ1bl9jbWQgcGluZyAtYzEgLXcxICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTU5NS1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBvdXRcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC01OTctXHRcdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NTk4Olx0XHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTU5OS1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBvdXQsIGRldmljZSBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjAxLVx0XHRsb2dfc3RhcnRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjYwMjpcdFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfTE9fSVB9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYwMy1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBvdXQsIGFkZHJlc3MgYmluZFwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYxMC1cdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjExOlx0cnVuX2NtZCBwaW5nIC1jIDEgLXcgMSAtciAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02MTItXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIG91dCAoZG9uJiMzOTt0IHJvdXRlKSwgcGVlciBvbiBsaW5rXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjE2LVx0c2hvd19oaW50IFwmIzM0O0ZhaWxzIHNpbmNlIHBlZXIgaXMgbm90IG9uIGxpbmtcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjYxNzpcdHJ1bl9jbWQgcGluZyAtYyAxIC13IDEgLXIgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjE4LVx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDEgXCYjMzQ7cGluZyBvdXQgKGRvbiYjMzk7dCByb3V0ZSksIHBlZXIgbm90IG9uIGxpbmtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02MjUtXHRcdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjI2Olx0XHRydW5fY21kX25zYiBwaW5nIC1jMSAtdzEgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjI3LVx0XHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIGluXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjM1LVx0XHRsb2dfc3RhcnRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjYzNjpcdFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjM3LVx0XHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIGxvY2FsXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjQ1LVx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2NDY6XHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY0Ny1cdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFwmIzM0O3BpbmcgbG9jYWwsIGRldmljZSBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjU1LVx0XHRzaG93X2hpbnQgXCYjMzQ7RmFpbHMgc2luY2UgYWRkcmVzcyBvbiBsb29wYmFjayBkZXZpY2UgaXMgb3V0IG9mIGRldmljZSBzY29wZVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjU2Olx0XHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY1Ny1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDEgXCYjMzQ7cGluZyBsb2NhbCwgZGV2aWNlIGJpbmRcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02NjktXHRhPSR7TlNCX0xPX0lQfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjcwOlx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjcxLVx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDIgXCYjMzQ7cGluZyBvdXQsIGJsb2NrZWQgYnkgcnVsZVwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY3NS1cdCMgY2FzZSBzdWNjZWVkcyBkZXNwaXRlIHRoZSBydWxlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2NzY6XHQjIHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjc3LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY4MC1cdHNob3dfaGludCBcJiMzNDtSZXNwb25zZSBnZW5lcmF0ZXMgSUNNUCAob3IgYXJwIHJlcXVlc3QgaXMgaWdub3JlZCkgZHVlIHRvIGlwIHJ1bGVcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjY4MTpcdHJ1bl9jbWRfbnNiIHBpbmcgLWMxIC13MSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02ODItXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMSBcJiMzNDtwaW5nIGluLCBibG9ja2VkIGJ5IHJ1bGVcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02OTctXHRhPSR7TlNCX0xPX0lQfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6Njk4Olx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjk5LVx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDIgXCYjMzQ7cGluZyBvdXQsIGJsb2NrZWQgYnkgcm91dGVcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03MDMtXHQjIGNhc2Ugc3VjY2VlZHMgZGVzcGl0ZSBub3QgaGF2aW5nIGEgcm91dGUgZm9yIHRoZSBhZGRyZXNzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3MDQ6XHQjIHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzA1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcwOC1cdHNob3dfaGludCBcJiMzNDtSZXNwb25zZSBpcyBkcm9wcGVkIChvciBhcnAgcmVxdWVzdCBpcyBpZ25vcmVkKSBkdWUgdG8gaXAgcm91dGVcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjcwOTpcdHJ1bl9jbWRfbnNiIHBpbmcgLWMxIC13MSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03MTAtXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMSBcJiMzNDtwaW5nIGluLCBibG9ja2VkIGJ5IHJvdXRlXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzE4LVx0YT0ke05TQl9MT19JUH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjcxOTpcdHJ1bl9jbWQgcGluZyAtYzEgLXcxICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcyMC1cdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAyIFwmIzM0O3Bpbmcgb3V0LCB1bnJlYWNoYWJsZSBkZWZhdWx0IHJvdXRlXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzI0LVx0IyBjYXNlIHN1Y2NlZWRzIGRlc3BpdGUgbm90IGhhdmluZyBhIHJvdXRlIGZvciB0aGUgYWRkcmVzc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzI1Olx0IyBydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcyNi19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9NzI4PWlwdjRfcGluZ192cmYoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc0MC1cdFx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NDE6XHRcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7VlJGfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NDItXHRcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFwmIzM0O3Bpbmcgb3V0LCBWUkYgYmluZFwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc0NC1cdFx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NDU6XHRcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzQ2LVx0XHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIG91dCwgZGV2aWNlIGJpbmRcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NDgtXHRcdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzQ5Olx0XHRydW5fY21kIGlwIHZyZiBleGVjICR7VlJGfSBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfSVB9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc1MC1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBvdXQsIHZyZiBkZXZpY2UgJiM0MzsgZGV2IGFkZHJlc3MgYmluZFwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc1Mi1cdFx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NTM6XHRcdHJ1bl9jbWQgaXAgdnJmIGV4ZWMgJHtWUkZ9IHBpbmcgLWMxIC13MSAtSSAke1ZSRl9JUH0gJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzU0LVx0XHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIG91dCwgdnJmIGRldmljZSAmIzQzOyB2cmYgYWRkcmVzcyBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzYyLVx0XHRsb2dfc3RhcnRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjc2MzpcdFx0cnVuX2NtZF9uc2IgcGluZyAtYzEgLXcxICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc2NC1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBpblwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc3My1cdFx0c2hvd19oaW50IFwmIzM0O1NvdXJjZSBhZGRyZXNzIHNob3VsZCBiZSAke2F9XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NzQ6XHRcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7VlJGfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NzUtXHRcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFwmIzM0O3BpbmcgbG9jYWwsIFZSRiBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzgzLVx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3ODQ6XHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc4NS1cdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFwmIzM0O3BpbmcgbG9jYWwsIGRldmljZSBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzkxLVx0XHRzaG93X2hpbnQgXCYjMzQ7RmFpbHMgc2luY2UgYWRkcmVzcyBvbiB2cmYgZGV2aWNlIGlzIG91dCBvZiBkZXZpY2Ugc2NvcGVcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjc5MjpcdFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03OTMtXHRcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAyIFwmIzM0O3BpbmcgbG9jYWwsIGRldmljZSBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtODAzLVx0YT0ke05TQl9MT19JUH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjgwNDpcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7VlJGfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDUtXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMiBcJiMzNDtwaW5nIG91dCwgdnJmIGJpbmQsIGJsb2NrZWQgYnkgcnVsZVwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTgwNy1cdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6ODA4Olx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDktXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMiBcJiMzNDtwaW5nIG91dCwgZGV2aWNlIGJpbmQsIGJsb2NrZWQgYnkgcnVsZVwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTgxMy1cdHNob3dfaGludCBcJiMzNDtSZXNwb25zZSBsb3N0IGR1ZSB0byBpcCBydWxlXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo4MTQ6XHRydW5fY21kX25zYiBwaW5nIC1jMSAtdzEgJHthfVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNR0xSVSYjMzk7cyBLZXJuZWwgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgTUdMUlUgaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBydW5fY21kYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCwgYnV0IGl0JiMzOTtzICpzdGF0aWMqLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBodXJkbGUuIFRoZSBkZWJ1Z2ZzIGludGVyZmFjZSwgYGxydV9nZW5fc2VxX3dyaXRlYCwgY2FsbHMgYHJ1bl9jbWRgLCBidXQgaXQmIzM5O3MgYWxzbyBzdGF0aWMsIHRob3VnaCBpdCYjMzk7cyByZWdpc3RlcmVkIGFzIGEgZmlsZSBvcGVyYXRpb24uIEhtbSwgaXMgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24/CgpMZXQmIzM5O3Mgc2Vl4oCmIEkga25vdyBgbHJ1X2dlbl9kb19hZ2luZ2AgZXhpc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jYCwgYnV0IHRoYXQmIzM5O3MgdXNlcnNwYWNlLCBzbyBpdCYjMzk7cyBub3QgcmVsZXZhbnQgaW4gdGhpcyBjb250ZXh0LgoKUmlnaHQsIGBGb2N1c1N5bWJvbHNgIGFyZSBzdXBwb3NlZCB0byBiZSBrZXJuZWwgZnVuY3Rpb25zISBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoZSBmdW5jdGlvbnMgd2UgY2FuIGZvY3VzIG9uIGFyZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGFuZCBgYmFsYW5jZV9wZ2RhdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaG9va3MsIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcy4KCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLiBZZXMsIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLiBDb25maXJtZWQuIEdvb2QuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGxvb2tzIHRvIGJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gVGhhdCYjMzk7cyBhbm90aGVyIHBvdGVudGlhbCBwb2ludCBvZiBlbnRyeSwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAgaXMgYWxzbyBub24tc3RhdGljLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBtb2RpZmllcyBib3RoIGBtbS92bXNjYW4uY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjcml0aWNhbCBjb2RlIGNoYW5nZXMgYXJlIGdhdGVkIGJ5IHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBkaXJlY3RpdmVzLiBJJiMzOTtsbCBjaGVjayBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDM5ODIgdG8gY29uZmlybSB0aGlzLiBUaGF0IHNob3VsZCB0ZWxsIG1lIGlmIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NjA6XHRcbjM5NjE6XHRcdC8qIGZpbmQgdGhlIG9sZGVzdCBwb3B1bGF0ZWQgZ2VuZXJhdGlvbiAqL1xuMzk2MjpcdFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xuMzk2MzpcdFx0XHR3aGlsZSAobWluX3NlcVt0eXBlXSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2M9IGxydWdlbi1cdTAwM2VtYXhfc2VxKSB7XG4zOTY0Olx0XHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxW3R5cGVdKTtcbjM5NjU6XHRcbjM5NjY6XHRcdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KSB7XG4zOTY3Olx0XHRcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKSlcbjM5Njg6XHRcdFx0XHRcdFx0Z290byBuZXh0O1xuMzk2OTpcdFx0XHRcdH1cbjM5NzA6XHRcbjM5NzE6XHRcdFx0XHRtaW5fc2VxW3R5cGVdJiM0MzsmIzQzOztcbjM5NzI6XHRcdFx0XHRzZXFfaW5jX2ZsYWcgPSB0cnVlO1xuMzk3MzpcdFx0XHR9XG4zOTc0Olx0bmV4dDpcbjM5NzU6XHRcdFx0O1xuMzk3NjpcdFx0fVxuMzk3NzpcdFxuMzk3ODpcdFx0LypcbjM5Nzk6XHRcdCAqIElmIG1pbl9zZXFbdHlwZV0gb2YgYm90aCBhbm9ueW1vdXMgYW5kIGZpbGUgaXMgbm90IGluY3JlYXNlZCxcbjM5ODA6XHRcdCAqIHJldHVybiBoZXJlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNoZWNraW5nIG92ZXJoZWFkIGxhdGVyLlxuMzk4MTpcdFx0ICovXG4zOTgyOlx0XHRpZiAoIXNlcV9pbmNfZmxhZylcbjM5ODM6XHRcdFx0cmV0dXJuO1xuMzk4NDpcdFxuMzk4NTpcdFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xuMzk4NjpcdFx0XHRpZiAobWluX3NlcVt0eXBlXSBcdTAwM2M9IGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKVxuMzk4NzpcdFx0XHRcdGNvbnRpbnVlO1xuMzk4ODpcdFxuMzk4OTpcdFx0XHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xuMzk5MDpcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdLCBtaW5fc2VxW3R5cGVdKTtcbjM5OTE6XHRcdH1cbjM5OTI6XHR9XG4zOTkzOlx0XG4zOTk0Olx0c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4zOTk1Olx0e1xuMzk5NjpcdFx0Ym9vbCBzdWNjZXNzO1xuMzk5NzpcdFx0aW50IHByZXYsIG5leHQ7XG4zOTk4Olx0XHRpbnQgdHlwZSwgem9uZTtcbjM5OTk6XHRcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuNDAwMDpcdHJlc3RhcnQ6XG40MDAxOlx0XHRpZiAoc2VxIFx1MDAzYyBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1heF9zZXEpKVxuNDAwMjpcdFx0XHRyZXR1cm4gZmFsc2U7XG40MDAzOlx0XG40MDA0Olx0XHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbjQwMDU6XHRcbjQwMDY6XHRcdFZNX1dBUk5fT05fT05DRSghc2VxX2lzX3ZhbGlkKGxydXZlYykpO1xuNDAwNzpcdFxuNDAwODpcdFx0c3VjY2VzcyA9IHNlcSA9PSBscnVnZW4tXHUwMDNlbWF4X3NlcTtcbjQwMDk6XHRcdGlmICghc3VjY2VzcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIE1HTFJVIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGhpcyBsb29rcyBsaWtlIEkmIzM5O20gaW5zaWRlIHRoZSBNR0xSVSBjb2RlLCBwZXJmZWN0LiBOb3csIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBXaGF0IGFyZSB0aGUga2V5IHNldHRpbmdzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBrbm93IGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGJpZyBvbmUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlcnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gZW5hYmxpbmcgaXQgYnkgZGVmYXVsdC4gQWgsIHllcywgdGhlcmUgaXQgaXMhIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBsb29rcyBsaWtlIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJdCYjMzk7cyBwcm9iYWJseSB1c2VkIHRvIHNldCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJIHNob3VsZCByZWFsbHkganVtcCBvdmVyIHRvIGBtbS9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGRldGFpbHMgb2YgYExSVV9HRU5gIGFuZCBhbnkgZGVwZW5kZW50IG9wdGlvbnMuIExldCYjMzk7cyBnbyB0YWtlIGEgbG9vayB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDA6XHQjIG11bHRpLWdlbiBMUlUge1xuMTQwMTpcdGNvbmZpZyBMUlVfR0VOXG4xNDAyOlx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDM6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA0Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDU6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwNjpcdFx0aGVscFxuMTQwNzpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQwOTpcdFxuMTQxMDpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTI6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxMzpcdFx0aGVscFxuMTQxNDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE1Olx0XG4xNDE2Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MTc6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDE4Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTk6XHRcdGhlbHBcbjE0MjA6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDIxOlx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDIyOlx0XG4xNDIzOlx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyNDpcdFxuMTQyNTpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyNjpcdFx0ZGVmX2Jvb2wgeVxuMTQyNzpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0Mjg6XHQjIH1cbjE0Mjk6XHRcbjE0MzA6XHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbjE0MzE6XHQgICAgICAgZGVmX2Jvb2wgblxuMTQzMjpcdFxuMTQzMzpcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcbjE0MzQ6XHRcdGRlZl9ib29sIHlcbjE0MzU6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4xNDM2Olx0XHRoZWxwXG4xNDM3Olx0XHQgIEFsbG93IHBlci12bWEgbG9ja2luZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZy5cbjE0Mzg6XHRcbjE0Mzk6XHRcdCAgVGhpcyBmZWF0dXJlIGFsbG93cyBsb2NraW5nIGVhY2ggdmlydHVhbCBtZW1vcnkgYXJlYSBzZXBhcmF0ZWx5IHdoZW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0OTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IFJlY2xhaW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZSBpbiBgRW5hYmxlQ29uZmlnc2Agc2luY2UgdGhleSBzZWVtIGNlbnRyYWwgdG8gdGhpcyBtZW1vcnkgcmVjbGFpbSBjaGFuZ2UuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCwgaW52b2x2aW5nIGNoYW5nZXMgdG8gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBzd2FwcGluZXNzIGNoZWNrcywgaG93IGl0IG1hbmFnZXMgZ2VuZXJhdGlvbiBleGhhdXN0aW9uIGR1cmluZyBmb2xpbyBzY2FucywgcmV0cmllcyB3aXRoIGRpZmZlcmVudCBmb2xpbyB0eXBlcywgYW5kIHRyaWdnZXJzIGFnaW5nIGJhc2VkIG9uIGV4aGF1c3Rpb24gYW5kIGltYmFsYW5jZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byB1bmNvdmVyIGFueSBzdWJ0bGUgYnVncy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIHRoZSBkaXJlY3QgcmVjbGFpbSBlbnRyeSwgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBmb3IgbWVtY2cgcmVjbGFpbS4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFub3RoZXIsIGFzIGlzIGBzaHJpbmtfYWxsX21lbW9yeWAuIEkga25vdyBgYmFsYW5jZV9wZ2RhdGAgKGtzd2FwZCkgaXMgYSBrdGhyZWFkLCBidXQgaXQmIzM5O3Mgbm9uLXN0YXRpYyBzbyBpdCYjMzk7cyBhIHZhbGlkIHRhcmdldCB0b28sIGV2ZW4gaWYgaW5kaXJlY3RseSB0aHJvdWdoIG1lbW9yeSBhbGxvY2F0aW9uLgoKSSYjMzk7bSBsaXN0aW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCBhcyBteSBjb3JlIGZ1enppbmcgdGFyZ2V0cy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBhdmFpbGFiaWxpdHkgb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gOyB5ZXMsIGl0JiMzOTtzIHRoZXJlIGluIGBtbS92bXNjYW4uY2AuIEFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLCB3aGljaCBpcyBhbHNvIGluIGBtbS92bXNjYW4uY2AsIHVzZWQgZm9yIGhpYmVybmF0aW9uLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHByaW9yaXRpemluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcyBtb3JlIGRpcmVjdCByZWNsYWltIGVudHJ5IHBvaW50cy4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgYHN5c19tYWR2aXNlYCB3aXRoIGBNQURWX1BBR0VPVVRgIG9yIGBNQURWX0NPTERgLCB3aGljaCBsZWFkIHRvIGBtYWR2aXNlX3BhZ2VvdXRgIGFuZCB1bHRpbWF0ZWx5IHRvIGByZWNsYWltX3BhZ2VzYC4gVGhhdCYjMzk7cyBhbm90aGVyIHBvdGVudGlhbCB2ZWN0b3IsIHNvIEkgc2hvdWxkIGFuYWx5emUgYHJlY2xhaW1fcGFnZXNgIHRvbyB0byBzZWUgaWYgdGhhdCBzaG91bGQgYWxzbyBiZSBhZGRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9MjU3PXN0YXRpYyB2b2lkIHNneF9yZWNsYWltZXJfd3JpdGUoc3RydWN0IHNneF9lcGNfcGFnZSAqZXBjX3BhZ2UsXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTMwMi0gKi9cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozMDM6c3RhdGljIHZvaWQgc2d4X3JlY2xhaW1fcGFnZXModm9pZClcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDQte1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz0zOTY9dm9pZCBzZ3hfcmVjbGFpbV9kaXJlY3Qodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtMzk4LVx0aWYgKHNneF9zaG91bGRfcmVjbGFpbShTR1hfTlJfTE9XX1BBR0VTKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozOTk6XHRcdHNneF9yZWNsYWltX3BhZ2VzKCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDAwLX1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9NDAyPXN0YXRpYyBpbnQga3NneGQodm9pZCAqcClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDIxLVx0XHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9ISUdIX1BBR0VTKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo0MjI6XHRcdFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy00MjMtXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTU2Nz1zdHJ1Y3Qgc2d4X2VwY19wYWdlICpzZ3hfYWxsb2NfZXBjX3BhZ2Uodm9pZCAqb3duZXIsIGJvb2wgcmVjbGFpbSlcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkwLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjU5MTpcdFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy01OTItXHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jPTM4Nz1zdGF0aWMgdm9pZCBzbGFfZnJlZShzdHJ1Y3Qgc2xhX2FkZHJfdCBzbGEsIHNpemVfdCBsZW4sIGJvb2wgZmlybXdhcmVfc3RhdGUpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDAzLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM6NDA0Olx0XHRcdFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNjYXR0ZXJbaV0pLCAxLCBmYWxzZSk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MDUtXHRcdFx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTQwOC1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jOjQwOTpcdFx0XHRyZXQgPSBzbnBfcmVjbGFpbV9wYWdlcyhzbGFfdG9fcGEoc2xhKSwgMSwgZmFsc2UpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDEwLVx0XHR9XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zNTg9c3RhdGljIGludCBzZXZfd3JpdGVfaW5pdF9leF9maWxlX2lmX3JlcXVpcmVkKGludCBjbWRfaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zODMtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjM4NDppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTM4NS17XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTctfVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0MTg6RVhQT1JUX1NZTUJPTF9HUEwoc25wX3JlY2xhaW1fcGFnZXMpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTktXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQyMD1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDM4LVx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQzOTpcdHNucF9yZWNsYWltX3BhZ2VzKHBhZGRyLCBpLCBsb2NrZWQpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz00Nzk9c3RhdGljIHZvaWQgX19zbnBfZnJlZV9maXJtd2FyZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLCBib29sIGxvY2tlZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ4OC1cdGlmIChzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0ODk6XHQgICAgc25wX3JlY2xhaW1fcGFnZXMocGFkZHIsIG5wYWdlcywgbG9ja2VkKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDkwLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz03MTI9c3RhdGljIGludCBzbnBfdW5tYXBfY21kX2J1Zl9kZXNjKHN0cnVjdCBjbWRfYnVmX2Rlc2MgKmRlc2MpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy03MjEtXHQvKiBUcmFuc2l0aW9uIHRoZSBidWZmZXJzIGJhY2sgdG8gaHlwZXJ2aXNvci1vd25lZC4gKi9cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NzIyOlx0aWYgKHNucF9yZWNsYWltX3BhZ2VzKCpkZXNjLVx1MDAzZXBhZGRyX3B0ciwgbnBhZ2VzLCB0cnVlKSkge1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy03MjMtXHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHJlY2xhaW0gZmlybXdhcmUtb3duZWQgcGFnZXMgd2hpbGUgaXNzdWluZyBTRVYgbGVnYWN5IGNvbW1hbmQuXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTgzMz1zdGF0aWMgaW50IHNucF9yZWNsYWltX2NtZF9idWYoaW50IGNtZCwgdm9pZCAqY21kX2J1Zilcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTg0Mi1cdGlmIChzZXZfY21kX2J1Zl93cml0YWJsZShjbWQpKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo4NDM6XHRcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGNtZF9idWYpLCAxLCB0cnVlKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtODQ0LVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1NT1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTQ5NC1cdFx0ICogVGhpcyBleGVjdXRlcyB3aXRoIHRoZSBzZXZfY21kX211dGV4IGhlbGQgc28gZG93biB0aGUgc3RhY2tcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTQ5NTpcdFx0ICogc25wX3JlY2xhaW1fcGFnZXMobG9ja2VkPWZhbHNlKSBtaWdodCBiZSBuZWVkZWQgKHdoaWNoIGlzIGV4dHJlbWVseVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNDk2LVx0XHQgKiB1bmxpa2VseSkgYnV0IHdpbGwgY2F1c2UgYSBkZWFkbG9jay5cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIzNzI9c3RhdGljIGludCBfX3Nldl9kb19zbnBfcGxhdGZvcm1fc3RhdHVzKHN0cnVjdCBzZXZfdXNlcl9kYXRhX3NucF9zdGF0dXMgKnN0YXR1cyxcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI0MDctXHRcdCAqIFRoZSBzdGF0dXMgcGFnZSB3aWxsIGJlIGluIFJlY2xhaW0gc3RhdGUgb24gc3VjY2Vzcywgb3IgbGVmdFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyNDA4Olx0XHQgKiBpbiBGaXJtd2FyZSBzdGF0ZSBvbiBmYWlsdXJlLiBVc2Ugc25wX3JlY2xhaW1fcGFnZXMoKSB0b1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDA5LVx0XHQgKiB0cmFuc2l0aW9uIGVpdGhlciBjYXNlIGJhY2sgdG8gSHlwZXJ2aXNvci1vd25lZCBzdGF0ZS5cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQxMC1cdFx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI0MTE6XHRcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGRhdGEpLCAxLCB0cnVlKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQxMi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTI4MD12b2lkIG1seDVfcGFnZXNfZGVidWdmc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTAtXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCYjMzQ7ZndfcGFnZXNfcmVjbGFpbV9kaXNjYXJkXCYjMzQ7LCAwNDAwLCBwYWdlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MjkxOlx0XHRcdCAgIFx1MDAyNmRldi1cdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI5Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmM9MTI3PXN0YXRpYyBpbnQgdG91dF9xdWVyeV9kdG9yKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTQ4LVx0TUxYNV9USU1FT1VUX0ZJTEwoZnNtX3JlYWN0aXZhdGVfdG8sIG91dCwgZGV2LCBNTFg1X1RPX0ZTTV9SRUFDVElWQVRFX01TLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdG91dC5jOjE0OTpcdE1MWDVfVElNRU9VVF9GSUxMKHJlY2xhaW1fcGFnZXNfdG8sIG91dCwgZGV2LCBNTFg1X1RPX1JFQ0xBSU1fUEFHRVNfTVMsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTUwLVx0TUxYNV9USU1FT1VUX0ZJTEwocmVjbGFpbV92ZnNfcGFnZXNfdG8sIG91dCwgZGV2LCBNTFg1X1RPX1JFQ0xBSU1fVkZTX1BBR0VTX01TLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NTE4PXN0YXRpYyB1MzIgZndwX2ZpbGxfbWFuYWdlX3BhZ2VzX291dChzdHJ1Y3QgZndfcGFnZSAqZndwLCB1MzIgKm91dCwgdTMyIGluZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NTM2OnN0YXRpYyBpbnQgcmVjbGFpbV9wYWdlc19jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01MzctXHRcdFx0ICAgICB1MzIgKmluLCBpbnQgaW5fc2l6ZSwgdTMyICpvdXQsIGludCBvdXRfc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjU3NTpzdGF0aWMgaW50IHJlY2xhaW1fcGFnZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IGZ1bmNfdmhjYV9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01NzYtXHRcdFx0IGludCBucGFnZXMsIGludCAqbmNsYWltZWQsIGJvb2wgZXZlbnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwNi1cdFx0ICAgICAgbWx4NV9wYWdlX21ndF9tb2RlX2lzX3ZoY2FfaWQoZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NjA3Olx0ZXJyID0gcmVjbGFpbV9wYWdlc19jbWQoZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRsZW4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOC1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02MDktXHRcdG5wYWdlcyA9IE1MWDVfR0VUKG1hbmFnZV9wYWdlc19pbiwgaW4sIGlucHV0X251bV9lbnRyaWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo2MTA6XHRcdGRldi1cdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCAmIzQzOz0gbnBhZ2VzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYxMS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NjQzPXN0YXRpYyB2b2lkIHBhZ2VzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTY1MS1cdGVsc2UgaWYgKHJlcS1cdTAwM2VucGFnZXMgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NjUyOlx0XHRlcnIgPSByZWNsYWltX3BhZ2VzKGRldiwgcmVxLVx1MDAzZWZ1bmNfaWQsIC0xICogcmVxLVx1MDAzZW5wYWdlcywgTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02NTMtXHRcdFx0XHQgICAgdHJ1ZSwgcmVxLVx1MDAzZWVjX2Z1bmN0aW9uKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9ODMwPXN0YXRpYyBpbnQgbWx4NV9yZWNsYWltX3Jvb3RfcGFnZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjg0MjpcdFx0ZXJyID0gcmVjbGFpbV9wYWdlcyhkZXYsIGZ1bmNfdmhjYV9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy04NDMtXHRcdFx0XHQgICAgb3B0aW1hbF9yZWNsYWltZWRfcGFnZXMoKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ2LVx0XHRcdG1seDVfY29yZV93YXJuKGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo4NDc6XHRcdFx0XHQgICAgICAgXCYjMzQ7cmVjbGFpbV9wYWdlcyBlcnIgKCVkKSBmdW5jX3ZoY2FfaWQ9MHgleCBlY19mdW5jPTB4JXhcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ4LVx0XHRcdFx0ICAgICAgIGVyciwgZnVuY192aGNhX2lkLCBlY19mdW5jdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oPTU3Mz1zdHJ1Y3QgbWx4NV9wcml2IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgtNTg3LVx0dTMyXHRcdFx0Z2l2ZV9wYWdlc19kcm9wcGVkO1xuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oOjU4ODpcdHUzMlx0XHRcdHJlY2xhaW1fcGFnZXNfZGlzY2FyZDtcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODktXHRlbnVtIG1seDVfcGFnZV9tZ3RfbW9kZVx0cGFnZV9tZ3RfbW9kZTtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaD0zNDU1PXN0cnVjdCBtbHg1X2lmY19kdG9yX3JlZ19iaXRzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0zNDc1LVxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6MzQ3NjpcdHN0cnVjdCBtbHg1X2lmY19kZWZhdWx0X3RpbWVvdXRfYml0cyByZWNsYWltX3BhZ2VzX3RvO1xuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzQ3Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD0xMDgxPXZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTA4MjppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTA4My12b2lkIHNucF9mcmVlX2Zpcm13YXJlX3BhZ2Uodm9pZCAqYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTExNT1zdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXG4tLVxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTExOS1cbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjExMjA6c3RhdGljIGlubGluZSBpbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC0xMTIxLXtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD00MDk9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX3dyaXRlX2ZvbGlvLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTQzMS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjQzMjpUUkFDRV9FVkVOVChtbV92bXNjYW5fcmVjbGFpbV9wYWdlcyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTQzMy1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzEtXHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG5tbS9kYW1vbi9wYWRkci5jOjI3MjpcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vZGFtb24vcGFkZHIuYy0yNzMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTEyMDU9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgIF9fbXVzdF9jaGVjayB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsXG4tLVxubW0vaW50ZXJuYWwuaC0xMjA4LVxubW0vaW50ZXJuYWwuaDoxMjA5OnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbm1tL2ludGVybmFsLmgtMTIxMC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy00NDItXHRcdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjQ0MzpcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vbWFkdmlzZS5jLTQ0NC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWFkdmlzZS5jLTU2MS1cdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjU2MjpcdFx0cmVjbGFpbV9wYWdlcyhcdTAwMjZmb2xpb19saXN0KTtcbm1tL21hZHZpc2UuYy01NjMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS92bXNjYW4uYz0yMTUzPXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjE3Mi1cdH1cbm1tL3Ztc2Nhbi5jOjIxNzM6XHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5ucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQpO1xubW0vdm1zY2FuLmMtMjE3NC1cbi0tXG5tbS92bXNjYW4uYy0yMTc3LVxubW0vdm1zY2FuLmM6MjE3ODp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbm1tL3Ztc2Nhbi5jLTIxNzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA1NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVyYWN0aW9uIG9mIFBhZ2UgUmVjbGFpbSBhbmQgTUdMUlUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGByZWNsYWltX3BhZ2VzYCBpc24mIzM5O3Qgc3RhdGljIGFuZCBpcyBjYWxsZWQgYnkgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYW5kIGBkYW1vbl9wYV9wYWdlb3V0YC4gSG93ZXZlciwgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBmdW5jdGlvbnMgbGlrZSBgc2Nhbl9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBzaG91bGRfcnVuX2FnaW5nYCwgd2hpY2ggYXJlIGFsbCBkZWVwbHkgaW52b2x2ZWQgaW4gTUdMUlUuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpOb3csIGByZWNsYWltX3BhZ2VzYCBmdXJ0aGVyIGNhbGxzIGByZWNsYWltX2ZvbGlvX2xpc3RgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAuIEFoLCB0aGVyZSYjMzk7cyB0aGUgZGlzdGluY3Rpb24hIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgdGhlIGFjdGl2ZS9pbmFjdGl2ZSBMUlUgcmVjbGFpbSBwYXRoLCB3aGljaCBpc24mIzM5O3QgTUdMUlUgZGlyZWN0bHkuIE1HTFJVIHVzZXMgYGV2aWN0X2ZvbGlvc2AsIHdoaWNoICppbnRlcm5hbGx5KiBjYWxscyBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBBbmQsIGBtYWR2aXNlX3BhZ2VvdXRgIGNhbGxzIGByZWNsYWltX3BhZ2VzYCwgbGVhZGluZyBiYWNrIHRvIGByZWNsYWltX2ZvbGlvX2xpc3RgLiBTbywgYHJlY2xhaW1fcGFnZXNgIGl0c2VsZiBpc24mIzM5O3QgdXNpbmcgTUdMUlUgZGlyZWN0bHk7IGl0JiMzOTtzIHNpbXBseSByZWNsYWltaW5nIHRoZSBzcGVjaWZpYyBmb2xpb3MgcGFzc2VkIHRvIGl0LiBJdCBpcyBNR0xSVSB0aGF0IGFjdHVhbGx5IG1ha2VzIHRoZSBwYWdlIHJlcGxhY2VtZW50IGRlY2lzaW9ucywgZGV0ZXJtaW5pbmcgKndoaWNoKiBwYWdlcyB0byByZWNsYWltLgoKU28sIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdGhhdCB0cmlnZ2VyIE1HTFJVIGZ1bmN0aW9uYWxpdHkgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBzaHJpbmsgdGhlIExSVSBsaXN0cywgc3BlY2lmaWNhbGx5IGBzaHJpbmtfbHJ1dmVjYC4gVGhhdOKAmXMgaXQhIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50ISBTbyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQuIEkgYW0gZ29pbmcgdG8gdXNlOgoKKiAgIGB0cnlfdG9fZnJlZV9wYWdlc2AKKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYAoqICAgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gCiogICBgc2hyaW5rX2FsbF9tZW1vcnlgCgpSaWdodCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhYm91dCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3MgYXZhaWxhYmxlIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gQSBxdWljayBsb29rIGF0IGBtbS92bXNjYW4uY2Agc2hvd3MgaXTigJlzIHRoZXJlLCBhbmQgaXQgZG9lcyBpbmRlZWQgZGVwZW5kIG9uIGBDT05GSUdfTUVNQ0dgLiBKdXN0IHRvIGJlIHNhZmUsIEnigJlsbCBhZGQgYE1FTUNHYCB0byBgRW5hYmxlQ29uZmlnc2AgZXZlbiB0aG91Z2ggaXQmIzM5O3MgdXN1YWxseSBlbmFibGVkIGFueXdheS4gQWx3YXlzIGJldHRlciB0byBiZSBleHBsaWNpdC4gT2theSwgdGltZSB0byBkaXZlIGRlZXBlciBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIGNvbmZpcm0gdGhhdCBldmVyeXRoaW5nIGlzIGFzIGV4cGVjdGVkIHJlZ2FyZGluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwMzA6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG44MDMxOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuODAzMjpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuODAzMzpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG44MDM0Olx0fTtcbjgwMzU6XHRcbjgwMzY6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG44MDM3Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuODAzODpcdHtcbjgwMzk6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjgwNDA6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjgwNDE6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG44MDQyOlx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG44MDQzOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG44MDQ0Olx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG44MDQ1Olx0XG44MDQ2Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuODA0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwNDg6XHRcbjgwNDk6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDEyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEF2YWlsYWJpbGl0eSBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAqKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSXQmIzM5O3MgZGF3bmluZyBvbiBtZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBtaWdodCAqbm90KiBiZSBndWFyZGVkIGJ5IHRoYXQgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIGRpcmVjdGl2ZS4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gU28sIGxldCYjMzk7cyBleHBsb3JlIHdoZXRoZXIgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFjY2Vzc2libGUgZXZlbiB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLgoKSG1tLCBpdCB0YWtlcyBhIGBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2dgIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgZ2l2ZWF3YXkuIEhvd2V2ZXIsIGlmIGBDT05GSUdfTUVNQ0dgIGlzIG9mZiwgdGhlIGtlcm5lbCAqc3RpbGwqIGRlY2xhcmVzIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHJpZ2h0PyBJdCBtaWdodCBiZSBhbiBvcGFxdWUgc3RydWN0IG9yIHBvc3NpYmx5IGFuIGVtcHR5IHN0cnVjdC4gSSBuZWVkIHRvIGNvbmZpcm0gaG93IGl0JiMzOTtzIGhhbmRsZWQgaW4gdGhhdCBzY2VuYXJpby4KCkFscmlnaHQsIGxldCYjMzk7cyBjdXQgdGhlIGNoYXNlLiBJIG5lZWQgdG8gcnVuIGEgcXVpY2sgc2VhcmNoIGZvciBgI2lmZGVmIENPTkZJR19NRU1DR2Agd2l0aGluIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgdHJ1ZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCBmdW5jdGlvbi4gVGhhdCYjMzk7bGwgY2xlYXIgdXAgYW55IHBvdGVudGlhbCBjb25mdXNpb24gYW5kIGdpdmUgbWUgYSBjb25jcmV0ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14jaWZkZWYgQ09ORklHX01FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NDQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTA4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIGlvX2NncnBfc3Vic3lzID0ge1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTE3LVx0LmV4aXQgPSBibGtjZ19leGl0LFxuYmxvY2svYmxrLWNncm91cC5jOjE1MTg6I2lmZGVmIENPTkZJR19NRU1DR1xuYmxvY2svYmxrLWNncm91cC5jLTE1MTktXHQvKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NDM9c3RhdGljIGJsa19zdGF0dXNfdCBsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NzEtXHRcdGNtZC1cdTAwM2VibGtjZ19jc3MgPSBiaW9fYmxrY2dfY3NzKHJxLVx1MDAzZWJpbyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODcyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NzMtXHRcdGlmIChjbWQtXHUwMDNlYmxrY2dfY3NzKSB7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jPTE5PUlPUFRERVNDX01BVENIKF9yZWZjb3VudCwgX19wYWdlX3JlZmNvdW50KTtcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuYzoyMDojaWZkZWYgQ09ORklHX01FTUNHXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMtMjEtSU9QVERFU0NfTUFUQ0gobWVtY2dfZGF0YSwgbWVtY2dfZGF0YSk7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oPTE5PXN0cnVjdCBpb3B0ZGVzYyB7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oLTMxLVx0YXRvbWljX3QgX19wYWdlX3JlZmNvdW50O1xuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oOjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaC0zMy1cdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbi0tXG5mcy9wcm9jL3BhZ2UuYz0yNjE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBrcGFnZWZsYWdzX3Byb2Nfb3BzID0ge1xuLS1cbmZzL3Byb2MvcGFnZS5jLTI2Ni1cbmZzL3Byb2MvcGFnZS5jOjI2NzojaWZkZWYgQ09ORklHX01FTUNHXG5mcy9wcm9jL3BhZ2UuYy0yNjgtc3RhdGljIHNzaXplX3Qga3BhZ2VjZ3JvdXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL3BhZ2UuYz0yODA9c3RhdGljIGludCBfX2luaXQgcHJvY19wYWdlX2luaXQodm9pZClcbi0tXG5mcy9wcm9jL3BhZ2UuYy0yODMtXHRwcm9jX2NyZWF0ZShcJiMzNDtrcGFnZWZsYWdzXCYjMzQ7LCBTX0lSVVNSLCBOVUxMLCBcdTAwMjZrcGFnZWZsYWdzX3Byb2Nfb3BzKTtcbmZzL3Byb2MvcGFnZS5jOjI4NDojaWZkZWYgQ09ORklHX01FTUNHXG5mcy9wcm9jL3BhZ2UuYy0yODUtXHRwcm9jX2NyZWF0ZShcJiMzNDtrcGFnZWNncm91cFwmIzM0OywgU19JUlVTUiwgTlVMTCwgXHUwMDI2a3BhZ2VjZ3JvdXBfcHJvY19vcHMpO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzAwPXN0cnVjdCBicGZfbWFwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMyMC1cdHN0cnVjdCBidGYgKmJ0ZjtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzIxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvYnBmLmgtMzIyLVx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9Mjc4MD1pbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzgxLVx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3ODI6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzgzLXZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9NTE9c3RydWN0IGxpc3RfbHJ1IHtcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC01Mi1cdHN0cnVjdCBsaXN0X2xydV9ub2RlXHQqbm9kZTtcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo1MzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNTQtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuLS1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaD04Mj1pbnQgbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODQtXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6ODU6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTg2LS8qKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTYwPXN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTg5PXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk5LVx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjgtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjk6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTMwLVx0Lyogc2xhYiBzdGF0cyBmb3Igbm1pIGNvbnRleHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0yMDI9c3RydWN0IG1lbV9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI1NjojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNTctXHQvKiBNRU1DR19LTUVNIGZvciBubWkgY29udGV4dCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI4My1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI4NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yODUtXHQvKiBMZWdhY3kgY29uc3VtZXItb3JpZW50ZWQgY291bnRlcnMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0zNTQ9ZW51bSBvYmpleHRfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM2Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjM2ODojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNjktLypcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDc2PXN0cnVjdCBzbGFib2JqX2V4dCB7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDc3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NzgtXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTUwND1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmxydXZlY19saXZlX2xvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1MDUte1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTUwNjojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTA3LVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2Mzk9c3RydWN0IHNvY2s7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2NDEtZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIG1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyNz1zdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MzItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzMzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MzQtYm9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkxOT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkyOC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkzMC11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NDc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01MS1cdF9fdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQsIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTI6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01My1cdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQsIG5yX3BhZ2VzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9ODA9c3RydWN0IHBhZ2Uge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xODYtXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTg3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xODgtXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTQwND1zdHJ1Y3QgZm9saW8ge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MzUtXHRcdFx0YXRvbWljX3QgX3JlZmNvdW50O1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQzNjojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDM3LVx0XHRcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTIxPUZPTElPX01BVENIKF9yZWZjb3VudCwgX3JlZmNvdW50KTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1MjI6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTUyMy1GT0xJT19NQVRDSChtZW1jZ19kYXRhLCBtZW1jZ19kYXRhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTc2PXN0cnVjdCBwdGRlc2Mge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC02MDctXHRhdG9taWNfdCBfX3BhZ2VfcmVmY291bnQ7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NjA4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC02MDktXHR1bnNpZ25lZCBsb25nIHB0X21lbWNnX2RhdGE7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTYyMj1UQUJMRV9NQVRDSChfcmVmY291bnQsIF9fcGFnZV9yZWZjb3VudCk7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NjIzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC02MjQtVEFCTEVfTUFUQ0gobWVtY2dfZGF0YSwgcHRfbWVtY2dfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNzU9c3RydWN0IG1tX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEzMjctI2VuZGlmXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTMyODojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTMyOS1cdFx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxMi1cdFx0XHR1bnNpZ25lZCBsb25nIGJpdG1hcDtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDEzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDE0LVx0XHRcdC8qIHBvaW50cyB0byB0aGUgbWVtY2cgb2YgXCYjMzQ7b3duZXJcJiMzNDsgYWJvdmUgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTUwMj1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTA1LVx0bW0tXHUwMDNlbHJ1X2dlbi5iaXRtYXAgPSAwO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MDY6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1MDctXHRtbS1cdTAwM2VscnVfZ2VuLm1lbWNnID0gTlVMTDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc2ND1zdHJ1Y3QgbHJ1dmVjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5MS0jZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkzLVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE2NjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGdsaXN0X2RhdGEgKmxydXZlY19wZ2RhdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NjUte1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjY2OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY2Ny1cdHJldHVybiBscnV2ZWMtXHUwMDNlcGdkYXQ7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyNj1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDIxLSNlbmRpZlxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEwMjI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMjMtXHR1bnNpZ25lZFx0XHRcdGluX3VzZXJfZmF1bHQ6MTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU0OC1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNTQ5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNTUwLVx0c3RydWN0IG1lbV9jZ3JvdXBcdFx0Km1lbWNnX2luX29vbTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU1Mi1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNTUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNTU0LVx0LyogTnVtYmVyIG9mIHBhZ2VzIHRvIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kOiAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xNjE9ZXh0ZXJuIHZvaWQgZXhlY19tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICopO1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE2Mi1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoxNjM6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE2NC1leHRlcm4gdm9pZCBtbV91cGRhdGVfbmV4dF9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ2Nj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2NfcGluX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NzAtXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDcxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NzItREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtZW1fY2dyb3VwICosIGludF9hY3RpdmVfbWVtY2cpO1xuLS1cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaD04Mj1zdHJ1Y3Qgc2hyaW5rZXIge1xuLS1cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMDYtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg6MTA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMDgtXHQvKiBJRCBpbiBzaHJpbmtlcl9pZHIgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD0yNj1lbnVtIF9zbGFiX2ZsYWdfYml0cyB7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtNDUtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo0NjojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC00Ny1cdF9TTEFCX0FDQ09VTlQsXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMjA0LSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MjA1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2xhYi5oLTIwNi0jIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9NzA4PWVudW0ga21hbGxvY19jYWNoZV90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MjgtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo3Mjk6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9zbGFiLmgtNzMwLVx0S01BTExPQ19DR1JPVVAsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDY3PXN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ3My0jZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ3NDojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00NzUtdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD0xMz1zdHJ1Y3Qgdm1wcmVzc3VyZSB7XG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMTgtXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDoxOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0yMC1cdC8qXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NDM9c3RydWN0IG1lbV9jZ3JvdXA7XG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC00NC1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjQ1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTQ2LXZvaWQgdm1wcmVzc3VyZShnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHRyZWUsXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NTU9ZXh0ZXJuIGVudW0gdm1wcmVzc3VyZV9sZXZlbHMgdm1wcmVzc3VyZV9jYWxjX2xldmVsKHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC01Ny1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTU5LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHByaW8pO1xuLS1cbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg9NTIyPXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdm1fZXZlbnRfbmFtZShlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTUzMS1cbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg6NTMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTMzLVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC00NjAtXHRzdHJ1Y3Qgc29ja2V0XHRcdCpza19zb2NrZXQ7XG5pbmNsdWRlL25ldC9zb2NrLmg6NDYxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbmV0L3NvY2suaC00NjItXHRzdHJ1Y3QgbWVtX2Nncm91cFx0KnNrX21lbWNnO1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yNjg2PXN0YXRpYyBpbmxpbmUgZ2ZwX3QgZ2ZwX21lbWNnX2NoYXJnZSh2b2lkKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0yNjkwLVxuaW5jbHVkZS9uZXQvc29jay5oOjI2OTE6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9uZXQvc29jay5oLTI2OTItc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9za191bmRlcl9tZW1vcnlfcHJlc3N1cmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA1LVxuaW5jbHVkZS9uZXQvc29jay5oOjI3MDY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDctXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MjAzPURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbixcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yMDktXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoyMTA6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjExLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2JlZ2luLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oPTI0OT1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yNTUtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoyNTY6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjU3LURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTE2MD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1jZyhjb25zdCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xNjEte1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjE2MjojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTYzLVx0aWYgKGMtXHUwMDNlb2JqY2cpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTUwMj1pbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MjUtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTI2OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MjctXHRcdGlmIChtZW1jZ19icGZfZW5hYmxlZCgpKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01NDctXHRcdHJldHVybiAtRU5PTUVNO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjU0ODojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTQ5LVx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NjY9dm9pZCBicGZfbWFwX2ZyZWVfaWQoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00ODUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0ODY6I2lmZGVmIENPTkZJR19NRU1DR1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDg3LXN0YXRpYyB2b2lkIGJwZl9tYXBfc2F2ZV9tZW1jZyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NjM3PUJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU2MzgtXHRzdHJ1Y3QgZmlsZSBfX3JjdSAqZXhlX2ZpbGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTYzOTojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTY0MC1cdHN0cnVjdCB0YXNrX3N0cnVjdCBfX3JjdSAqb3duZXI7XG4tLVxua2VybmVsL2V4aXQuYz00Mjk9c3RhdGljIHZvaWQgY29yZWR1bXBfdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbmtlcm5lbC9leGl0LmMtNDU0LVxua2VybmVsL2V4aXQuYzo0NTU6I2lmZGVmIENPTkZJR19NRU1DR1xua2VybmVsL2V4aXQuYy00NTYtLyogZHJvcHMgdGFza2xpc3RfbG9jayBpZiBzdWNjZWVkcyAqL1xuLS1cbmtlcm5lbC9mb3JrLmM9OTE0PXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmR1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9yaWcsIGludCBub2RlKVxuLS1cbmtlcm5lbC9mb3JrLmMtOTk4LVxua2VybmVsL2ZvcmsuYzo5OTk6I2lmZGVmIENPTkZJR19NRU1DR1xua2VybmVsL2ZvcmsuYy0xMDAwLVx0dHNrLVx1MDAzZWFjdGl2ZV9tZW1jZyA9IE5VTEw7XG4tLVxua2VybmVsL2ZvcmsuYz0xMDUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtbV9jbGVhcl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5rZXJuZWwvZm9yay5jLTEwNTQte1xua2VybmVsL2ZvcmsuYzoxMDU1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmtlcm5lbC9mb3JrLmMtMTA1Ni1cdGlmIChtbS1cdTAwM2Vvd25lciA9PSBwKVxuLS1cbmtlcm5lbC9mb3JrLmM9MTA2MT1zdGF0aWMgdm9pZCBtbV9pbml0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5rZXJuZWwvZm9yay5jLTEwNjIte1xua2VybmVsL2ZvcmsuYzoxMDYzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmtlcm5lbC9mb3JrLmMtMTA2NC1cdG1tLVx1MDAzZW93bmVyID0gcDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXHRjZ3JvdXBfcGF0aChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xuLS1cbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL2RlYnVnLmMtOTYtXG5tbS9kZWJ1Zy5jOjk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2RlYnVnLmMtOTgtXHRpZiAoZm9saW8tXHUwMDNlbWVtY2dfZGF0YSlcbi0tXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vZGVidWcuYy0xODgtI2VuZGlmXG5tbS9kZWJ1Zy5jOjE4OTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kZWJ1Zy5jLTE5MC1cdFx0XCYjMzQ7b3duZXIgJXB4IFwmIzM0O1xuLS1cbm1tL2RlYnVnLmMtMjE3LSNlbmRpZlxubW0vZGVidWcuYzoyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vZGVidWcuYy0yMTktXHRcdG1tLVx1MDAzZW93bmVyLFxuLS1cbm1tL2ZvbGlvLmM9MTA2MT12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZm9saW8uYy0xMDcyLVxubW0vZm9saW8uYzoxMDczOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2ZvbGlvLmMtMTA3NC1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2NDI9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzc0NC1cdFx0XHRmb2xpb19zZXRfaWRsZShuZXdfZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzozNzQ1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ni1cdFx0bmV3X2ZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSBmb2xpby1cdTAwM2VtZW1jZ19kYXRhO1xuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jPTQ1PXN0YXRpYyBpbnQgaHdwb2lzb25fZmlsdGVyX2ZsYWdzKHN0cnVjdCBwYWdlICpwKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTY2LSAqL1xubW0vaHdwb2lzb24taW5qZWN0LmM6Njc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHdwb2lzb24taW5qZWN0LmMtNjgtc3RhdGljIHU2NCBod3BvaXNvbl9maWx0ZXJfbWVtY2c7XG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IHBmbl9pbmplY3RfaW5pdCh2b2lkKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTE5MS1cbm1tL2h3cG9pc29uLWluamVjdC5jOjE5MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xOTMtXHRkZWJ1Z2ZzX2NyZWF0ZV91NjQoXCYjMzQ7Y29ycnVwdC1maWx0ZXItbWVtY2dcJiMzNDssIDA2MDAsIGh3cG9pc29uX2Rpcixcbi0tXG5tbS9rZmVuY2UvY29yZS5jPTYxMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBrZmVuY2VfaW5pdF9wb29sKHZvaWQpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy02MzgtXHRcdF9fU2V0UGFnZVNsYWIocGFnZSk7XG5tbS9rZmVuY2UvY29yZS5jOjYzOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9rZmVuY2UvY29yZS5jLTY0MC1cdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4tLVxubW0va2ZlbmNlL2NvcmUuYy03MDYtXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gJiM0MzsgaSk7XG5tbS9rZmVuY2UvY29yZS5jOjcwNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9rZmVuY2UvY29yZS5jLTcwOC1cdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4tLVxubW0va2ZlbmNlL2NvcmUuYz0xMjQ3PXZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtMTI1MC1cbm1tL2tmZW5jZS9jb3JlLmM6MTI1MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9rZmVuY2UvY29yZS5jLTEyNTItXHRLRkVOQ0VfV0FSTl9PTihtZXRhLVx1MDAzZW9ial9leHRzLm9iamNnKTtcbi0tXG5tbS9rZmVuY2Uva2ZlbmNlLmg9NTk9c3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XG4tLVxubW0va2ZlbmNlL2tmZW5jZS5oLTEwNC1cdHUzMiBhbGxvY19zdGFja19oYXNoIF9fZ3VhcmRlZF9ieShcdTAwMjZsb2NrKTtcbm1tL2tmZW5jZS9rZmVuY2UuaDoxMDU6I2lmZGVmIENPTkZJR19NRU1DR1xubW0va2ZlbmNlL2tmZW5jZS5oLTEwNi1cdHN0cnVjdCBzbGFib2JqX2V4dCBvYmpfZXh0cztcbi0tXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMzktXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDEtc3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NDEzPXVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuLS1cbm1tL2xpc3RfbHJ1LmMtNDIxLVxubW0vbGlzdF9scnUuYzo0MjI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYy00MjMtXHRpZiAoKm5yX3RvX3dhbGsgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcbi0tXG5tbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXG4tLVxubW0vbGlzdF9scnUuYy00NjEtXG5tbS9saXN0X2xydS5jOjQ2MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTQ2My1zdGF0aWMgc3RydWN0IGxpc3RfbHJ1X21lbWNnICptZW1jZ19pbml0X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NjctXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTY2OS1cdGlmIChzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jPTY5Mj12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy03MDMtXG5tbS9saXN0X2xydS5jOjcwNDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTcwNS1cdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0yND1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC0yNy0vKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovXG5tbS9tZW1jb250cm9sLXYxLmg6Mjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC12MS5oLTI5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQtXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0yMzYtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcyLVxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTc0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbm1tL21lbWNvbnRyb2wuYzo1OTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTYwMC1cdFBHUEdJTixcbi0tXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtODQ3LVxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODQ5LS8qXG4tLVxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTI4LVxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtOTMwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTExMS1cbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xMTEzLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzEyPXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTcxNy1cbm1tL21lbWNvbnRyb2wuYzoxNzE4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNzE5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmM9MTczOD1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzg0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbWNvbnRyb2wuYzoxNzg1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNzg2LVx0XHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTgzNj12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODU3LVx0XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbm1tL21lbWNvbnRyb2wuYzoxODU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xODU5LVx0ZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NzAtXG5tbS9tZW1jb250cm9sLmM6Mjg3MTojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtMjg3Mi1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmM9MzA5MD1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTAwLVxubW0vbWVtY29udHJvbC5jOjMxMDE6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTMxMDItc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfa21lbV9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jPTQyMTI9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQyMzMtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFx1MDAyNnBhcmVudC1cdTAwM2Vzd2FwLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDIzNDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDIzNS1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gYHZtc2Nhbi5jYCoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJIHRob3VnaHQgSSByZW1lbWJlcmVkIHNlZWluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZGVmaW5lZCBpbiBgbW0vdm1zY2FuLmNgLCBidXQgd2l0aG91dCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhlIGBDT05GSUdfTUVNQ0dgIHNldHRpbmcuIFRoYXQgc2VlbXMuLi4gb2RkLiBJIHdhcyBzdXJlIHRoYXQgcmVsYXRlZCBmZWF0dXJlcyB3ZXJlIGd1YXJkZWQgYnkgdGhhdCBjb25maWd1cmF0aW9uIGZsYWcuIExldCBtZSBxdWlja2x5IGp1bXAgYmFjayBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHRha2UgYW5vdGhlciBsb29rIGFyb3VuZCBsaW5lIDgwMzYuIEkgd2FudCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiBJIGRpZG4mIzM5O3QgbWlzaW50ZXJwcmV0IHRoYXQuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aG9zZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcmVjbGFpbSBtZWNoYW5pc21zIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRob3V0IHRoZSBgQ09ORklHX01FTUNHYCBndWFyZCBjb3VsZCBpbmRpY2F0ZSBhIHByb2JsZW0gb3IgYW4gb3ZlcnNpZ2h0IGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4MDIwOlx0XHRyZXR1cm4gMDtcbjgwMjE6XHR9XG44MDIyOlx0XG44MDIzOlx0I2VuZGlmXG44MDI0Olx0XG44MDI1Olx0ZW51bSB7XG44MDI2Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcbjgwMjc6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuODAyODpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjgwMjk6XHR9O1xuODAzMDpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjgwMzE6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG44MDMyOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG44MDMzOlx0XHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbjgwMzQ6XHR9O1xuODAzNTpcdFxuODAzNjpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbjgwMzc6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG44MDM4Olx0e1xuODAzOTpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuODA0MDpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuODA0MTpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjgwNDI6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjgwNDM6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjgwNDQ6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjgwNDU6XHRcbjgwNDY6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG44MDQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuODA0ODpcdFxuODA0OTpcdFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbjgwNTA6XHRcbjgwNTE6XHRcdG9sZF9idWYgPSBidWY7XG44MDUyOlx0XHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xuODA1MzpcdFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuODA1NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwNTU6XHRcbjgwNTY6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG44MDU3Olx0XG44MDU4Olx0XHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFx1MDAyNmJ1ZiwgXCYjMzQ7IFwmIzM0OykpICE9IE5VTEwpIHtcbjgwNTk6XHRcdFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxuODA2MDpcdFx0XHRcdGNvbnRpbnVlO1xuODA2MTpcdFx0XHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XG44MDYyOlx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcbjgwNjM6XHRcdFx0XHRpZiAobWF0Y2hfaW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNnN3YXBwaW5lc3MpKVxuODA2NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDY1Olx0XHRcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XG44MDY2Olx0XHRcdFx0ICAgIHN3YXBwaW5lc3MgXHUwMDNlIE1BWF9TV0FQUElORVNTKVxuODA2NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDY4Olx0XHRcdFx0YnJlYWs7XG44MDY5Olx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgTWVtb3J5IENncm91cCBGcmVlaW5nIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gKmlzKiBhdmFpbGFibGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUuLi4gdGhlIG5hbWUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGRlZmluaXRlbHkgc3VnZ2VzdHMgbWVtb3J5IGNncm91cCBpbnRlcmFjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIHNlZSBpZiBpdCYjMzk7cyB0aWVkIHRvIHRoZSBgQ09ORklHX01FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBzY29wZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpbmRpbmcgaXQ7IHRoZSBjb2RlIHBhdGggaXMgYG1tL3Ztc2Nhbi5jYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDY5MzMsIGFzIEkgcmVjYWxsLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBlbmFibGVkLCB3aGljaCBJIHN1c3BlY3QgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5MjA6XHRcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbjY5MjE6XHRcdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAmIzM5O3MgYXMgd2VsbC4gV2UgaGFja1xuNjkyMjpcdFx0ICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uXG42OTIzOlx0XHQgKi9cbjY5MjQ6XHRcdHNocmlua19scnV2ZWMobHJ1dmVjLCBcdTAwMjZzYyk7XG42OTI1Olx0XG42OTI2Olx0XHR0cmFjZV9tbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kKHNjLm5yX3JlY2xhaW1lZCwgbWVtY2cpO1xuNjkyNzpcdFxuNjkyODpcdFx0Km5yX3NjYW5uZWQgPSBzYy5ucl9zY2FubmVkO1xuNjkyOTpcdFxuNjkzMDpcdFx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcbjY5MzE6XHR9XG42OTMyOlx0XG42OTMzOlx0dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbjY5MzQ6XHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjY5MzU6XHRcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG42OTM2Olx0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG42OTM3Olx0XHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcylcbjY5Mzg6XHR7XG42OTM5Olx0XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbjY5NDA6XHRcdHVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZztcbjY5NDE6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG42OTQyOlx0XHRcdC5ucl90b19yZWNsYWltID0gbWF4KG5yX3BhZ2VzLCBTV0FQX0NMVVNURVJfTUFYKSxcbjY5NDM6XHRcdFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcbjY5NDQ6XHRcdFx0LmdmcF9tYXNrID0gKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spIFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKSB8XG42OTQ1Olx0XHRcdFx0XHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKSxcbjY5NDY6XHRcdFx0LnJlY2xhaW1faWR4ID0gTUFYX05SX1pPTkVTIC0gMSxcbjY5NDc6XHRcdFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXG42OTQ4Olx0XHRcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcbjY5NDk6XHRcdFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxuNjk1MDpcdFx0XHQubWF5X3VubWFwID0gMSxcbjY5NTE6XHRcdFx0Lm1heV9zd2FwID0gISEocmVjbGFpbV9vcHRpb25zIFx1MDAyNiBNRU1DR19SRUNMQUlNX01BWV9TV0FQKSxcbjY5NTI6XHRcdFx0LnByb2FjdGl2ZSA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcdTAwMjYgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkUpLFxuNjk1MzpcdFx0fTtcbjY5NTQ6XHRcdC8qXG42OTU1Olx0XHQgKiBUcmF2ZXJzZSB0aGUgWk9ORUxJU1RfRkFMTEJBQ0sgem9uZWxpc3Qgb2YgdGhlIGN1cnJlbnQgbm9kZSB0byBwdXRcbjY5NTY6XHRcdCAqIGVxdWFsIHByZXNzdXJlIG9uIGFsbCB0aGUgbm9kZXMuIFRoaXMgaXMgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdFxuNjk1NzpcdFx0ICogdGhlIHJlY2xhaW0gZG9lcyBub3QgYmFpbCBvdXQgZWFybHkuXG42OTU4Olx0XHQgKi9cbjY5NTk6XHRcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG51bWFfbm9kZV9pZCgpLCBzYy5nZnBfbWFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqRGVjb2RpbmcgdGhlIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBGdW5jdGlvbioqLiAgSG9sZCBvbiBhIHNlY29uZCwgaXNuJiMzOTt0IHRoYXQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGZ1bmN0aW9uIGRlZmluZWQgKmluc2lkZSogYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dgIHByZXByb2Nlc3NvciBibG9jaz8gIFRoYXQgd291bGQgbWVhbiBpdCYjMzk7cyBvbmx5IGFjdGl2ZSBpZiBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcywgc28gSSB3aWxsIGRvdWJsZS1jaGVjay4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNjg5MCwganVzdCB0byBjb25maXJtIG15IGluaXRpYWwgaHVuY2guICBVbmRlcnN0YW5kaW5nIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3J1Y2lhbCBmb3IgbWUsIGdpdmVuIHRoZSBtb2R1bGFyIG5hdHVyZSBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgbGlrZWx5IHByb3ZpZGUga2V5IGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXBzIGFyZSBpbnRlZ3JhdGVkLCBhbmQgaG93IHRoYXQgY29kZSBwYXRoIGJlaGF2ZXMgdW5kZXIgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODgwOlx0XHR0cmFjZV9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW4oc2MuZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTtcbjY4ODE6XHRcbjY4ODI6XHRcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG42ODgzOlx0XG42ODg0Olx0XHR0cmFjZV9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kKG5yX3JlY2xhaW1lZCwgTlVMTCk7XG42ODg1Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xuNjg4NjpcdFxuNjg4NzpcdFx0cmV0dXJuIG5yX3JlY2xhaW1lZDtcbjY4ODg6XHR9XG42ODg5Olx0XG42ODkwOlx0I2lmZGVmIENPTkZJR19NRU1DR1xuNjg5MTpcdFxuNjg5MjpcdC8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbjY4OTM6XHR1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuNjg5NDpcdFx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbjY4OTU6XHRcdFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LFxuNjg5NjpcdFx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpXG42ODk3Olx0e1xuNjg5ODpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbjY4OTk6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoYXQgdGhlIGNydWNpYWwgbW9kaWZpY2F0aW9ucyBhcmUgaW5kZWVkIHdpdGhpbiB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIGJsb2NrLiBUaGF0IHNldHRsZXMgaXQ7IEkgbmVlZCB0byBhZGQgYE1FTUNHYCB0byBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm8gcXVlc3Rpb24gdGhlcmUuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2gmIzM5O3MgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgYW5kIHJpZ2h0bHkgc28uIFRoZSBjaGFuZ2VzIHRvdWNoIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIOKAkyBhIGNvcmUgcGllY2Ugb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpbmNsdWRlcyBhbHRlcmF0aW9ucyB0byBob3cgZ2VuZXJhdGlvbiBzZXF1ZW5jZXMgaW5jcmVtZW50LCBmb2xpbyBzY2FubmluZyBhbmQgaXNvbGF0aW9uLCBhbmQgdGhlIGNvbmRpdGlvbnMgZm9yIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zIGFmZmVjdGluZyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIHdoaWNoICpkZWZpbml0ZWx5KiBqdXN0aWZpZXMgZnV6emluZy4KCk15IGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gQW5kIGZvciBgRW5hYmxlQ29uZmlnc2AsIEkmIzM5O2xsIGJlIGluY2x1ZGluZyBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgbm93IGBNRU1DR2AuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBzaHJpbmtfYWxsX21lbW9yeWAuLi4gdGhhdCYjMzk7cyByaW5naW5nIGEgYmVsbC4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhhdCBvbmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBoYWQgaXQgaW4gdGhlICYjMzk7c2FmZSYjMzk7IGxpc3QsIHNvIEkgbmVlZCB0byBjaGVjayBpdHMgY29udGV4dC4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgYWdhaW5zdCBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzczMS4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcyB0aGF0IHdvdWxkIHNoaWZ0IHRoaXMgaW50byB0aGUgJiMzOTtzYWZlJiMzOTsgem9uZS4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NzIwOlx0fVxuNzcyMTpcdFxuNzcyMjpcdCNpZmRlZiBDT05GSUdfSElCRVJOQVRJT05cbjc3MjM6XHQvKlxuNzcyNDpcdCAqIFRyeSB0byBmcmVlIGBucl90b19yZWNsYWltJiMzOTsgb2YgbWVtb3J5LCBzeXN0ZW0td2lkZSwgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mXG43NzI1Olx0ICogZnJlZWQgcGFnZXMuXG43NzI2Olx0ICpcbjc3Mjc6XHQgKiBSYXRoZXIgdGhhbiB0cnlpbmcgdG8gYWdlIExSVXMgdGhlIGFpbSBpcyB0byBwcmVzZXJ2ZSB0aGUgb3ZlcmFsbFxuNzcyODpcdCAqIExSVSBvcmRlciBieSByZWNsYWltaW5nIHByZWZlcmVudGlhbGx5XG43NzI5Olx0ICogaW5hY3RpdmUgXHUwMDNlIGFjdGl2ZSBcdTAwM2UgYWN0aXZlIHJlZmVyZW5jZWQgXHUwMDNlIGFjdGl2ZSBtYXBwZWRcbjc3MzA6XHQgKi9cbjc3MzE6XHR1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbjc3MzI6XHR7XG43NzMzOlx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuNzczNDpcdFx0XHQubnJfdG9fcmVjbGFpbSA9IG5yX3RvX3JlY2xhaW0sXG43NzM1Olx0XHRcdC5nZnBfbWFzayA9IEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxuNzczNjpcdFx0XHQucmVjbGFpbV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxLFxuNzczNzpcdFx0XHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXG43NzM4Olx0XHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbjc3Mzk6XHRcdFx0Lm1heV91bm1hcCA9IDEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDIyCgkJCQkJCQlvdXRwdXQ6IDE1MQoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzZWN0aW9uLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBuZXN0bGVkIHdpdGhpbiBgI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTmAuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBidXQgSSBkb24mIzM5O3QgdGhpbmsgSSBuZWVkIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgSElCRVJOQVRJT05gIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBnZXQgdGhlIGNvZGUgSSBuZWVkIHRvIHJ1bi4gU28sIG15IGxpc3Qgd2lsbCBqdXN0IGluY2x1ZGUgdGhvc2U6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4KCk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG1pZ2h0IGJlIG1pc3NpbmcuIEFoLCBoZXJlIHdlIGdvLCBsb29raW5nIGF0IGBDT05GSUdfTFJVX0dFTmAuIEkgc2VlIHRoYXQgaXQgZGVwZW5kcyBvbiBgTU1VYCwgYnV0IHRoYXQmIzM5O3MgYSBuZWFyIGNlcnRhaW50eSwgYXMgYE1NVWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHZpcnR1YWxseSBhbGwgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlcy4gQW5kIHRoZW4gYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGRlcGVuZHMgb24gYExSVV9HRU5gLCBzbyBpZiBgTFJVX0dFTmAgaXMgdGhlcmUsIHRoZSBlbmFibGVkIHZlcnNpb24gc2hvdWxkIGJlIHRvby4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHNob3VsZCBiZSBhbGwgSSBuZWVkLgoKQWxyaWdodCwgd2l0aCB0aGF0IGNsYXJpZmllZCwgSSYjMzk7bSByZWFkeSB0byBjcmFmdCB0aGUgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGNoYW5nZXMgaG93IHRoZSBtaW5pbXVtIGdlbmVyYXRpb24gc2VxdWVuY2UgaXMgaW5jcmVtZW50ZWQsIGhvdyBmb2xpb3MgYXJlIHNjYW5uZWQgYW5kIGlzb2xhdGVkLCBhbmQgdGhlIGNvbmRpdGlvbnMgZm9yIHJ1bm5pbmcgYWdpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0ODo0OS45MTg5NjY1NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI4MjU3NzUxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ4OjQ5LjkxODk3MzE2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NzU2NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDlkMzg4YzljYmU3MjVmNDJiNTBjZWU5ZTUyNjE0OTUzYjIzNWM0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ4OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggYTI2YzhiODU1MjIyMi4uMjMzZDIwMDZhNTQxNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC01NTIsMTAgKzU1Miw4IEBAIGVudW0ge1xcbiAgKiBUaGUgeW91bmdlc3QgZ2VuZXJhdGlvbiBudW1iZXIgaXMgc3RvcmVkIGluIG1heF9zZXEgZm9yIGJvdGggYW5vbiBhbmQgZmlsZVxcbiAgKiB0eXBlcyBhcyB0aGV5IGFyZSBhZ2VkIG9uIGFuIGVxdWFsIGZvb3RpbmcuIFRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBudW1iZXJzIGFyZVxcbiAgKiBzdG9yZWQgaW4gbWluX3NlcVtdIHNlcGFyYXRlbHkgZm9yIGFub24gYW5kIGZpbGUgdHlwZXMgc28gdGhhdCB0aGV5IGNhbiBiZVxcbi0gKiBpbmNyZW1lbnRlZCBpbmRlcGVuZGVudGx5LiBJZGVhbGx5IG1pbl9zZXFbXSBhcmUga2VwdCBpbiBzeW5jIHdoZW4gYm90aCBhbm9uXFxuLSAqIGFuZCBmaWxlIHR5cGVzIGFyZSBldmljdGFibGUuIEhvd2V2ZXIsIHRvIGFkYXB0IHRvIHNpdHVhdGlvbnMgbGlrZSBleHRyZW1lXFxuLSAqIHN3YXBwaW5lc3MsIHRoZXkgYXJlIGFsbG93ZWQgdG8gYmUgb3V0IG9mIHN5bmMgYnkgYXQgbW9zdFxcbi0gKiBNQVhfTlJfR0VOUy1NSU5fTlJfR0VOUy0xLlxcbisgKiBpbmNyZW1lbnRlZCBpbmRlcGVuZGVudGx5LiBGb3IgYm90aCBmaWxlIGFuZCBhbm9ueW1vdXMgbWVtb3J5LCB0aGUgbWluaW11bVxcbisgKiBnZW5lcmF0aW9uIG11c3QgYmUgYXQgbGVhc3QgTUlOX05SX0dFTlMuXFxuICAqXFxuICAqIFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gZWFjaCBnZW5lcmF0aW9uIGlzIGV2ZW50dWFsbHkgY29uc2lzdGVudCBhbmQgdGhlcmVmb3JlXFxuICAqIGNhbiBiZSB0cmFuc2llbnRseSBuZWdhdGl2ZSB3aGVuIHJlc2V0X2JhdGNoX3NpemUoKSBpcyBwZW5kaW5nLlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMTdkMmI3OTNjYmZjNC4uMzk2ZTQ3ZTMyN2JjOCAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTM5ODIsMTYgKzM5ODIsNiBAQCBzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0aWYgKCFzZXFfaW5jX2ZsYWcpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBscnVfZ2VuX2ZvbGlvICovXFxuLVxcdGlmIChzd2FwcGluZXNzIFxcdTAwMjZcXHUwMDI2IHN3YXBwaW5lc3MgXFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBzZXEgPSBscnVnZW4tXFx1MDAzZW1heF9zZXEgLSBNSU5fTlJfR0VOUztcXG4tXFxuLVxcdFxcdGlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXFx1MDAzZSBzZXEgXFx1MDAyNlxcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0ZJTEVdIFxcdTAwM2Mgc2VxKVxcbi1cXHRcXHRcXHRtaW5fc2VxW0xSVV9HRU5fQU5PTl0gPSBzZXE7XFxuLVxcdFxcdGVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcXHUwMDNlIHNlcSBcXHUwMDI2XFx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXFx1MDAzYyBzZXEpXFxuLVxcdFxcdFxcdG1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IHNlcTtcXG4tXFx0fVxcbi1cXG4gXFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xcbiBcXHRcXHRpZiAobWluX3NlcVt0eXBlXSBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC00NzI3LDcgKzQ3MTcsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxcbiBcXG4gc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLFxcbitcXHRcXHQgICAgICAgYm9vbCAqZXhoYXVzdGVkKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHRpbnQgZ2VuO1xcbkBAIC00NzM4LDE1ICs0NzI5LDE4IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdGludCBza2lwcGVkID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHR1bnNpZ25lZCBsb25nIG1pbl9zZXEgPSBscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV07XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiBcXHUwMDNlIE1BWF9MUlVfQkFUQ0gpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpO1xcbiBcXG4tXFx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpXFxuK1xcdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKSB7XFxuK1xcdFxcdCpleGhhdXN0ZWQgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4tXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbi1cXG4rbmV4dF9nZW46XFxuK1xcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcSk7XFxuIFxcdGZvciAoaSA9IE1BWF9OUl9aT05FUzsgaSBcXHUwMDNlIDA7IGktLSkge1xcbiBcXHRcXHRMSVNUX0hFQUQobW92ZWQpO1xcbiBcXHRcXHRpbnQgc2tpcHBlZF96b25lID0gMDtcXG5AQCAtNDc4OCw2ICs0NzgyLDE0IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGlzIGdlbmVyYXRpb24gaXMgZXhoYXVzdGVkIGFjcm9zcyBhbGwgem9uZXMsIGJ1dCB0aGUgc2NhblxcbitcXHQgKiB0YXJnZXQgaGFzIG5vdCBiZWVuIHJlYWNoZWQgeWV0LiBDb250aW51ZSB3aXRoIHRoZSBuZXh0XFxuK1xcdCAqIHJlY2xhaW1hYmxlIGdlbmVyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoaSA9PSAwIFxcdTAwMjZcXHUwMDI2ICsrbWluX3NlcSArIE1JTl9OUl9HRU5TIFxcdTAwM2M9IGxydWdlbi1cXHUwMDNlbWF4X3NlcSlcXG4rXFx0XFx0Z290byBuZXh0X2dlbjtcXG4rXFxuIFxcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBpc29sYXRlZCk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFRklMTCwgc29ydGVkKTtcXG5AQCAtNDc5Niw2ICs0Nzk4LDExIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxcbiBcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGlzIHNjYW4gZXhoYXVzdGVkIHRoZSByZWNsYWltYWJsZSBsaXN0cyBiZWZvcmUgcmVhY2hpbmcgdGhlXFxuK1xcdCAqIHNjYW4gdGFyZ2V0IG9yIGFjY3VtdWxhdGluZyBlbm91Z2ggaXNvbGF0ZWQgZm9saW9zLlxcbitcXHQgKi9cXG4rXFx0KmV4aGF1c3RlZCA9IHJlbWFpbmluZyBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgaXNvbGF0ZWQgXFx1MDAzYyBNSU5fTFJVX0JBVENIO1xcbiBcXHQqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7XFxuIFxcdHJldHVybiBzY2FubmVkO1xcbiB9XFxuQEAgLTQ4MzksMzUgKzQ4NDYsNDIgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19zaW5nbGVfdHlwZV9yZWNsYWltKGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdHJldHVybiBzd2FwcGluZXNzID09IE1JTl9TV0FQUElORVNTIHx8XFxuK1xcdCAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkLFxcbiBcXHRcXHRcXHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcXG4ge1xcbi1cXHRpbnQgaTtcXG4tXFx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xcbitcXHRib29sIHNpbmdsZV90eXBlID0gaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTtcXG4gXFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuK1xcdGludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjtcXG4rXFx0Ym9vbCB0cmllZCA9IGZhbHNlLCBleGhhdXN0ZWQ7XFxuIFxcbi1cXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XFxuLVxcdFxcdGludCBzY2FubmVkO1xcbi1cXHRcXHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbityZXRyeTpcXG4rXFx0dGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbitcXHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcXG4rXFx0XFx0XFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFxcdTAwMjZleGhhdXN0ZWQpO1xcbiBcXG4tXFx0XFx0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcXG4rXFx0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xcbitcXHRpZiAoKmlzb2xhdGVkKSB7XFxuK1xcdFxcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xcbitcXHRcXHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcXG4rXFx0XFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHRvdGFsX3NjYW5uZWQgKz0gc2Nhbm5lZDtcXG4tXFx0XFx0aWYgKCppc29sYXRlZCkge1xcbi1cXHRcXHRcXHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcXG4tXFx0XFx0XFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElmIHNjYW5uZWQgXFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXFxuLVxcdFxcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xcbi1cXHRcXHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFzY2FubmVkKVxcbi1cXHRcXHRcXHR0eXBlID0gIXR5cGU7XFxuK1xcdC8qXFxuK1xcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xcbitcXHQgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0cmllZCBcXHUwMDI2XFx1MDAyNiBleGhhdXN0ZWQgXFx1MDAyNlxcdTAwMjYgIXNpbmdsZV90eXBlKSB7XFxuK1xcdFxcdHR5cGUgPSAhdHlwZTtcXG4rXFx0XFx0dHJpZWQgPSB0cnVlO1xcbitcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcXG5AQCAtNDk2OSwyMSArNDk4Myw4MiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0cmV0dXJuIHNjYW5uZWQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzd2FwcGluZXNzX2lzX2JhbGFuY2VkKGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdGludCByYW5nZSA9IE1BWF9TV0FQUElORVNTIC0gTUlOX1NXQVBQSU5FU1M7XFxuK1xcdGludCBtaWRkbGUgPSBNSU5fU1dBUFBJTkVTUyArIHJhbmdlIC8gMjtcXG4rXFxuK1xcdHJldHVybiBzd2FwcGluZXNzIFxcdTAwM2U9IG1pZGRsZSAtIHJhbmdlIC8gNSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgc3dhcHBpbmVzcyBcXHUwMDNjPSBtaWRkbGUgKyByYW5nZSAvIDU7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZXEsIHVuc2lnbmVkIGxvbmcgbWluX3NlcSxcXG4rXFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuK1xcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBzZXE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2xkX3JhdGlvLCBnYjtcXG4rXFxuK1xcdC8qIFNraXAgc3dhcHBpbmVzcyBiaWFzIGZvciBzaW5nbGUtdHlwZSByZWNsYWltIG9yIGJhbGFuY2VkIHN3YXBwaW5lc3MgKi9cXG4rXFx0aWYgKGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcykgfHwgc3dhcHBpbmVzc19pc19iYWxhbmNlZChzd2FwcGluZXNzKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogTW9yZSB0aGFuIHR3byBnZW5lcmF0aW9ucyByZW1haW4gdG8gcmVjbGFpbSAqL1xcbitcXHRpZiAobWluX3NlcSArIE1JTl9OUl9HRU5TIFxcdTAwM2MgbWF4X3NlcSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUnVuIGFnaW5nIGlmIHRoZSBvbmx5IHJlbWFpbmluZyByZWNsYWltYWJsZSBnZW5lcmF0aW9uXFxuK1xcdCAqIGhhcyBmZXcgZm9saW9zLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChzZXEgPSBtaW5fc2VxOyBzZXEgXFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcXG4rXFx0XFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gMDtcXG4rXFx0XFx0aW50IHpvbmU7XFxuK1xcbitcXHRcXHRmb3IgKHpvbmUgPSAwOyB6b25lIFxcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXFxuK1xcdFxcdFxcdHNpemUgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXFx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XFxuK1xcbitcXHRcXHRpZiAoc2VxICsgTUlOX05SX0dFTlMgXFx1MDAzZSBtYXhfc2VxKVxcbitcXHRcXHRcXHR5b3VuZyArPSBzaXplO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG9sZCArPSBzaXplO1xcbitcXHR9XFxuK1xcdC8qXFxuK1xcdCAqIENvcGllZCBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBidXQgdXNlcyBhIGhpZ2hlciBvbGRfcmF0aW8gdG9cXG4rXFx0ICogbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmUuXFxuK1xcdCAqL1xcbitcXHRnYiA9ICh5b3VuZyArIG9sZCkgXFx1MDAzZVxcdTAwM2UgKDMwIC0gUEFHRV9TSElGVCk7XFxuK1xcdG9sZF9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYikgOiAxO1xcbitcXHRvbGRfcmF0aW8gKj0gTUFYX05SX0dFTlM7XFxuK1xcdHJldHVybiB5b3VuZyBcXHUwMDNlIG9sZCAqIG9sZF9yYXRpbztcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXFxuIHtcXG4rXFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuIFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuIFxcbiBcXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cXG4gXFx0aWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICsgTUlOX05SX0dFTlMgXFx1MDAzZSBtYXhfc2VxKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuK1xcdC8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkIGZvciBleHRyZW1lIHN3YXBwaW5lc3MgKi9cXG4rXFx0aWYgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNlIG1heF9zZXEgXFx1MDAyNlxcdTAwMjYgIXN3YXBwaW5lc3NfaXNfYmFsYW5jZWQoc3dhcHBpbmVzcykpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0LyogdHJ5IHRvIGF2b2lkIGFnaW5nLCBkbyBnZW50bGUgcmVjbGFpbSBhdCB0aGUgZGVmYXVsdCBwcmlvcml0eSAqL1xcbiBcXHRpZiAoc2MtXFx1MDAzZXByaW9yaXR5ID09IERFRl9QUklPUklUWSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LyogYmV0dGVyIHRvIHJ1biBhZ2luZyBldmVuIHRob3VnaCBldmljdGlvbiBpcyBzdGlsbCBwb3NzaWJsZSAqL1xcbi1cXHRyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xcbitcXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xcbitcXHRyZXR1cm4gbHJ1X2dlbl9pbWJhbGFuY2VkKGxydXZlYywgdHlwZSwgbWF4X3NlcSwgbWluX3NlcVt0eXBlXSwgc2MsIHN3YXBwaW5lc3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0ODo1MC4zMTgyNzI3NzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzI0MjY0NjEwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5ZDM4OGM5Y2JlNzI1ZjQyYjUwY2VlOWU1MjYxNDk1M2IyMzVjNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ4OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGEyNmM4Yjg1NTIyMjIuLjIzM2QyMDA2YTU0MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNTUyLDEwICs1NTIsOCBAQCBlbnVtIHtcbiAgKiBUaGUgeW91bmdlc3QgZ2VuZXJhdGlvbiBudW1iZXIgaXMgc3RvcmVkIGluIG1heF9zZXEgZm9yIGJvdGggYW5vbiBhbmQgZmlsZVxuICAqIHR5cGVzIGFzIHRoZXkgYXJlIGFnZWQgb24gYW4gZXF1YWwgZm9vdGluZy4gVGhlIG9sZGVzdCBnZW5lcmF0aW9uIG51bWJlcnMgYXJlXG4gICogc3RvcmVkIGluIG1pbl9zZXFbXSBzZXBhcmF0ZWx5IGZvciBhbm9uIGFuZCBmaWxlIHR5cGVzIHNvIHRoYXQgdGhleSBjYW4gYmVcbi0gKiBpbmNyZW1lbnRlZCBpbmRlcGVuZGVudGx5LiBJZGVhbGx5IG1pbl9zZXFbXSBhcmUga2VwdCBpbiBzeW5jIHdoZW4gYm90aCBhbm9uXG4tICogYW5kIGZpbGUgdHlwZXMgYXJlIGV2aWN0YWJsZS4gSG93ZXZlciwgdG8gYWRhcHQgdG8gc2l0dWF0aW9ucyBsaWtlIGV4dHJlbWVcbi0gKiBzd2FwcGluZXNzLCB0aGV5IGFyZSBhbGxvd2VkIHRvIGJlIG91dCBvZiBzeW5jIGJ5IGF0IG1vc3Rcbi0gKiBNQVhfTlJfR0VOUy1NSU5fTlJfR0VOUy0xLlxuKyAqIGluY3JlbWVudGVkIGluZGVwZW5kZW50bHkuIEZvciBib3RoIGZpbGUgYW5kIGFub255bW91cyBtZW1vcnksIHRoZSBtaW5pbXVtXG4rICogZ2VuZXJhdGlvbiBtdXN0IGJlIGF0IGxlYXN0IE1JTl9OUl9HRU5TLlxuICAqXG4gICogVGhlIG51bWJlciBvZiBwYWdlcyBpbiBlYWNoIGdlbmVyYXRpb24gaXMgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCB0aGVyZWZvcmVcbiAgKiBjYW4gYmUgdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hlbiByZXNldF9iYXRjaF9zaXplKCkgaXMgcGVuZGluZy5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAxN2QyYjc5M2NiZmM0Li4zOTZlNDdlMzI3YmM4IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMzk4MiwxNiArMzk4Miw2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0aWYgKCFzZXFfaW5jX2ZsYWcpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qIHNlZSB0aGUgY29tbWVudCBvbiBscnVfZ2VuX2ZvbGlvICovXG4tXHRpZiAoc3dhcHBpbmVzcyBcdTAwMjZcdTAwMjYgc3dhcHBpbmVzcyBcdTAwM2M9IE1BWF9TV0FQUElORVNTKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgc2VxID0gbHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSBNSU5fTlJfR0VOUztcbi1cbi1cdFx0aWYgKG1pbl9zZXFbTFJVX0dFTl9BTk9OXSBcdTAwM2Ugc2VxIFx1MDAyNlx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fRklMRV0gXHUwMDNjIHNlcSlcbi1cdFx0XHRtaW5fc2VxW0xSVV9HRU5fQU5PTl0gPSBzZXE7XG4tXHRcdGVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcdTAwM2Ugc2VxIFx1MDAyNlx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXHUwMDNjIHNlcSlcbi1cdFx0XHRtaW5fc2VxW0xSVV9HRU5fRklMRV0gPSBzZXE7XG4tXHR9XG4tXG4gXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4gXHRcdGlmIChtaW5fc2VxW3R5cGVdIFx1MDAzYz0gbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNDcyNyw3ICs0NzE3LDggQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgdGllcixcbi1cdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKVxuK1x0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHAsXG4rXHRcdCAgICAgICBib29sICpleGhhdXN0ZWQpXG4ge1xuIFx0aW50IGk7XG4gXHRpbnQgZ2VuO1xuQEAgLTQ3MzgsMTUgKzQ3MjksMTggQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGludCBza2lwcGVkID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuK1x0dW5zaWduZWQgbG9uZyBtaW5fc2VxID0gbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV07XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiBcdTAwM2UgTUFYX0xSVV9CQVRDSCk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpO1xuIFxuLVx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpXG4rXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykge1xuK1x0XHQqZXhoYXVzdGVkID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cbituZXh0X2dlbjpcbitcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcSk7XG4gXHRmb3IgKGkgPSBNQVhfTlJfWk9ORVM7IGkgXHUwMDNlIDA7IGktLSkge1xuIFx0XHRMSVNUX0hFQUQobW92ZWQpO1xuIFx0XHRpbnQgc2tpcHBlZF96b25lID0gMDtcbkBAIC00Nzg4LDYgKzQ3ODIsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBUaGlzIGdlbmVyYXRpb24gaXMgZXhoYXVzdGVkIGFjcm9zcyBhbGwgem9uZXMsIGJ1dCB0aGUgc2NhblxuK1x0ICogdGFyZ2V0IGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC4gQ29udGludWUgd2l0aCB0aGUgbmV4dFxuK1x0ICogcmVjbGFpbWFibGUgZ2VuZXJhdGlvbi5cbitcdCAqL1xuK1x0aWYgKGkgPT0gMCBcdTAwMjZcdTAwMjYgKyttaW5fc2VxICsgTUlOX05SX0dFTlMgXHUwMDNjPSBscnVnZW4tXHUwMDNlbWF4X3NlcSlcbitcdFx0Z290byBuZXh0X2dlbjtcbitcbiBcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgaXNvbGF0ZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzb3J0ZWQpO1xuQEAgLTQ3OTYsNiArNDc5OCwxMSBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4gXG4rXHQvKlxuK1x0ICogVGhpcyBzY2FuIGV4aGF1c3RlZCB0aGUgcmVjbGFpbWFibGUgbGlzdHMgYmVmb3JlIHJlYWNoaW5nIHRoZVxuK1x0ICogc2NhbiB0YXJnZXQgb3IgYWNjdW11bGF0aW5nIGVub3VnaCBpc29sYXRlZCBmb2xpb3MuXG4rXHQgKi9cbitcdCpleGhhdXN0ZWQgPSByZW1haW5pbmcgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlzb2xhdGVkIFx1MDAzYyBNSU5fTFJVX0JBVENIO1xuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuQEAgLTQ4MzksMzUgKzQ4NDYsNDIgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0cmV0dXJuIHN3YXBwaW5lc3MgPT0gTUlOX1NXQVBQSU5FU1MgfHxcbitcdCAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuK31cbitcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuIFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcbiBcdFx0XHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbiB7XG4tXHRpbnQgaTtcbi1cdGludCB0b3RhbF9zY2FubmVkID0gMDtcbitcdGJvb2wgc2luZ2xlX3R5cGUgPSBpc19zaW5nbGVfdHlwZV9yZWNsYWltKHN3YXBwaW5lc3MpO1xuIFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG4rXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XG4rXHRib29sIHRyaWVkID0gZmFsc2UsIGV4aGF1c3RlZDtcbiBcbi1cdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbi1cdFx0aW50IHNjYW5uZWQ7XG4tXHRcdGludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG4rcmV0cnk6XG4rXHR0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG4rXHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbitcdFx0XHQgICAgICB0eXBlLCB0aWVyLCBsaXN0LCBpc29sYXRlZCwgXHUwMDI2ZXhoYXVzdGVkKTtcbiBcbi1cdFx0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXG4tXHRcdFx0XHQgICAgICB0eXBlLCB0aWVyLCBsaXN0LCBpc29sYXRlZCk7XG4rXHR0b3RhbF9zY2FubmVkICs9IHNjYW5uZWQ7XG4rXHRpZiAoKmlzb2xhdGVkKSB7XG4rXHRcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xuK1x0XHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcbitcdFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XG4rXHR9XG4gXG4tXHRcdHRvdGFsX3NjYW5uZWQgKz0gc2Nhbm5lZDtcbi1cdFx0aWYgKCppc29sYXRlZCkge1xuLVx0XHRcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xuLVx0XHRcdCppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdC8qXG4tXHRcdCAqIElmIHNjYW5uZWQgXHUwMDNlIDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGVcbi1cdFx0ICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrXG4tXHRcdCAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXNjYW5uZWQpXG4tXHRcdFx0dHlwZSA9ICF0eXBlO1xuK1x0LypcbitcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xuK1x0ICogdGhlIG90aGVyIHR5cGUgaWYgYWxsb3dlZC5cbitcdCAqL1xuK1x0aWYgKCF0cmllZCBcdTAwMjZcdTAwMjYgZXhoYXVzdGVkIFx1MDAyNlx1MDAyNiAhc2luZ2xlX3R5cGUpIHtcbitcdFx0dHlwZSA9ICF0eXBlO1xuK1x0XHR0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbkBAIC00OTY5LDIxICs0OTgzLDgyIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzd2FwcGluZXNzX2lzX2JhbGFuY2VkKGludCBzd2FwcGluZXNzKVxuK3tcbitcdGludCByYW5nZSA9IE1BWF9TV0FQUElORVNTIC0gTUlOX1NXQVBQSU5FU1M7XG4rXHRpbnQgbWlkZGxlID0gTUlOX1NXQVBQSU5FU1MgKyByYW5nZSAvIDI7XG4rXG4rXHRyZXR1cm4gc3dhcHBpbmVzcyBcdTAwM2U9IG1pZGRsZSAtIHJhbmdlIC8gNSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBzd2FwcGluZXNzIFx1MDAzYz0gbWlkZGxlICsgcmFuZ2UgLyA1O1xuK31cbitcbitzdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSxcbitcdFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxLCB1bnNpZ25lZCBsb25nIG1pbl9zZXEsXG4rXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbit7XG4rXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbitcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBzZXE7XG4rXHR1bnNpZ25lZCBsb25nIG9sZF9yYXRpbywgZ2I7XG4rXG4rXHQvKiBTa2lwIHN3YXBwaW5lc3MgYmlhcyBmb3Igc2luZ2xlLXR5cGUgcmVjbGFpbSBvciBiYWxhbmNlZCBzd2FwcGluZXNzICovXG4rXHRpZiAoaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKSB8fCBzd2FwcGluZXNzX2lzX2JhbGFuY2VkKHN3YXBwaW5lc3MpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBNb3JlIHRoYW4gdHdvIGdlbmVyYXRpb25zIHJlbWFpbiB0byByZWNsYWltICovXG4rXHRpZiAobWluX3NlcSArIE1JTl9OUl9HRU5TIFx1MDAzYyBtYXhfc2VxKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogUnVuIGFnaW5nIGlmIHRoZSBvbmx5IHJlbWFpbmluZyByZWNsYWltYWJsZSBnZW5lcmF0aW9uXG4rXHQgKiBoYXMgZmV3IGZvbGlvcy5cbitcdCAqL1xuK1x0Zm9yIChzZXEgPSBtaW5fc2VxOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xuK1x0XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuK1x0XHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xuK1x0XHRpbnQgem9uZTtcbitcbitcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4rXHRcdFx0c2l6ZSArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuK1xuK1x0XHRpZiAoc2VxICsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEpXG4rXHRcdFx0eW91bmcgKz0gc2l6ZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG9sZCArPSBzaXplO1xuK1x0fVxuK1x0LypcbitcdCAqIENvcGllZCBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBidXQgdXNlcyBhIGhpZ2hlciBvbGRfcmF0aW8gdG9cbitcdCAqIG1ha2UgYWdpbmcgbGVzcyBhZ2dyZXNzaXZlLlxuK1x0ICovXG4rXHRnYiA9ICh5b3VuZyArIG9sZCkgXHUwMDNlXHUwMDNlICgzMCAtIFBBR0VfU0hJRlQpO1xuK1x0b2xkX3JhdGlvID0gZ2IgPyBpbnRfc3FydCgxMCAqIGdiKSA6IDE7XG4rXHRvbGRfcmF0aW8gKj0gTUFYX05SX0dFTlM7XG4rXHRyZXR1cm4geW91bmcgXHUwMDNlIG9sZCAqIG9sZF9yYXRpbztcbit9XG4rXG4gc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbiBcdFx0XHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4rXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4gXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cbiBcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbitcdC8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkIGZvciBleHRyZW1lIHN3YXBwaW5lc3MgKi9cbitcdGlmIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEgXHUwMDI2XHUwMDI2ICFzd2FwcGluZXNzX2lzX2JhbGFuY2VkKHN3YXBwaW5lc3MpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbiBcdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cbiBcdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi9cbi1cdHJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TID09IG1heF9zZXE7XG4rXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xuK1x0cmV0dXJuIGxydV9nZW5faW1iYWxhbmNlZChscnV2ZWMsIHR5cGUsIG1heF9zZXEsIG1pbl9zZXFbdHlwZV0sIHNjLCBzd2FwcGluZXNzKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ4OjUwLjMxODI3Mzk3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTEwOTY2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCdzIHRvdWNoaW5nIGBtbS92bXNjYW4uY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYC4gQWxhcm0gYmVsbHMgYXJlIGFscmVhZHkgZ29pbmcgb2ZmOyBhbnl0aGluZyBuZWFyIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsIGFuZCAqYWx3YXlzKiBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGlzIG9uZSBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIHJlY2xhaW0gbG9naWMgKE1HTFJVKS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgcmV3b3JraW5nIHNvbWUga2V5IGZ1bmN0aW9uczogYHRyeV90b19pbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLCBhbmQgaW50cm9kdWNpbmcgYSBmZXcgbmV3IG9uZXMgbGlrZSBgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbWAsIGBzd2FwcGluZXNzX2lzX2JhbGFuY2VkYCwgYW5kIGBscnVfZ2VuX2ltYmFsYW5jZWRgLiBEZWZpbml0ZWx5IGEgaGlnaC12YWx1ZSB0YXJnZXQuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwcmUtcmVxdWlzaXRlcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIE1HTFJVLiBUeXBpY2FsbHksIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleS4gU28sIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vYCBvciBwb3RlbnRpYWxseSByZWxhdGVkIGFyZWFzLCB0byBmaW5kIHRoZSBleGFjdCBkZXBlbmRlbmN5IGZvciBgTFJVX0dFTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0ODo1NC40NjkzNzQ5NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1OTI0MDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTA9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDAxOmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAyLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDktXFxubW0vS2NvbmZpZzoxNDEwOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTEtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTUtXFxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE3LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNC1cXG5tbS9LY29uZmlnOjE0MjU6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI2LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDg6NTcuMTI4NjIwNzEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTE5ODQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uIGFuZCBJbXBhY3QqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBlbmFibGluZyBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgYnVpbGRpbmcgb24uIE5vdywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhlc2UgZmxhZ3MgKmRvZXMqIGluIHRoZSBjb2RlLiBMZXQncyBzZWUuLi4gd2hhdCBmdW5jdGlvbnMgYXJlIGJlaW5nIHRvdWNoZWQ/IE9rYXksIGl0IGxvb2tzIGxpa2UgYHRyeV90b19pbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgIGFyZSB0aGUgb25lcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhlc2UgYXJlIGFsbCBzdGF0aWMsIG1lYW5pbmcgdGhleSdyZSBpbnRlcm5hbCB0byBgbW0vdm1zY2FuLmNgLlxuXG5UaGF0J3MgaGVscGZ1bCwgYnV0IHdlIG5lZWQgdG8gc2VlIHRoZSAqbm9uLXN0YXRpYyogZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLiBXZSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBTbywgYGV2aWN0X2ZvbGlvc2AsIHRoYXQncyB0aGUgb25lIEknbSBtb3N0IGludGVyZXN0ZWQgaW4uIFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBJJ20gYmV0dGluZyB0aGF0IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGlzIGludm9sdmVkLiBCZXR0ZXIgdG8ganVzdCBjaGVjayBgbW0vdm1zY2FuLmNgIGRpcmVjdGx5IHRvIGJlIHN1cmUsIHRoYXQnbGwgYmUgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MDEuMDI5ODIxMDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjI1ODEyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4NTU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4ODktXFxubW0vdm1zY2FuLmM6NDg5MDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODkxLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMzA9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNTMtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTE1NDpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTE1NS1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTc1Nz1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NzctXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU3Nzg6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU3NzktXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ5OjAzLjM1MjQwODIzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODkxOTUyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIExSVSBWZWN0b3IgRXZpY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBzeXN0ZW0gaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUuIEl0IHNlZW1zIGxpa2UgYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCBldmVudHVhbGx5IGZ1bm5lbCBkb3duIHRvIGBldmljdF9mb2xpb3NgLiBUaGF0J3MgdGhlIGNvcmUgZXZpY3Rpb24gbG9naWMsIGNsZWFybHkuIE15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB0aG9zZSB0d28gZnVuY3Rpb25zLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiB0aGVzZSBldmljdGlvbiByb3V0aW5lcyBhcmUgdHJpZ2dlcmVkLiBXaGF0IGV2ZW50cyBvciBjb25kaXRpb25zIGxlYWQgdGhlIHN5c3RlbSB0byBkZWNpZGUgaXQncyB0aW1lIHRvIHJlY2xhaW0gc29tZSBtZW1vcnk/IElzIGl0IGJhc2VkIG9uIGV4cGxpY2l0IHJlcXVlc3RzLCBkZXRlY3RlZCB0aHJlc2hvbGRzLCBvciBhIGJhY2tncm91bmQgcHJvY2Vzcz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGV2aWN0aW9uIHN0cmF0ZWd5LiBUaGlzIGFuYWx5c2lzIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgcG9saWN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MDYuNDQxNjA1NDg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjg4Njg1MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTA5NT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEyOS0gKi9cXG5tbS92bXNjYW4uYzo1MTMwOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTEzMS17XFxuLS1cXG5tbS92bXNjYW4uYz01MTc1PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5NC1cXG5tbS92bXNjYW4uYzo1MTk1OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTE5Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyODY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01Mjk4LVxcbm1tL3Ztc2Nhbi5jOjUyOTk6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUzMDAtXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTowOC42NzA0Nzg5NDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzY4NDE4MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipFdmFsdWF0aW5nIEV2aWN0aW9uIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBldmljdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgaXMgYSBzdHJvbmcgY29udGVuZGVyLiBJdCdzIG9mdGVuIGVmZmVjdGl2ZSwgc28gaXQncyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cbkxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBCZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgc2hvdWxkIGRlZmluaXRpdmVseSBjaGVjayBob3cgYHJ1bl9ldmljdGlvbmAgaW50ZXJhY3RzLCBob3cgaXQgbWlnaHQgd29yayBhcyBhbiBhbHRlcm5hdGl2ZSwgb3IgaG93IGl0IG1pZ2h0IGluZm9ybSB0aGUgcHJvY2Vzcy4gSSBuZWVkIGEgaG9saXN0aWMgdmlldyBiZWZvcmUgbWFraW5nIGEgZGVjaXNpb24uIEdvdHRhIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgKmFsbCogcG90ZW50aWFsIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OToxMS40Mzg4OTg4ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDEzNjE2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnVuX2V2aWN0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU3NDY9c3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NTYtXFxubW0vdm1zY2FuLmM6NTc1NzpzdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG5tbS92bXNjYW4uYy01NzU4LVxcdFxcdFxcdGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYz01Nzg3PXN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MTgtXFx0Y2FzZSAnLSc6XFxubW0vdm1zY2FuLmM6NTgxOTpcXHRcXHRlcnIgPSBydW5fZXZpY3Rpb24obHJ1dmVjLCBzZXEsIHNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbm1tL3Ztc2Nhbi5jLTU4MjAtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ5OjEzLjY0MDI2NjU2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY4MjkxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlbHZpbmcgaW50byBNR0xSVSBEZWJ1Z2dpbmcgYW5kIFNocmluayBMb2dpYyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgcnVuX2NtZGAgZnVuY3Rpb24gd2l0aGluIHRoZSBNR0xSVSBkZWJ1Z2ZzIGludGVyZmFjZS4gSXQncyBvYnZpb3VzbHkgZGVzaWduZWQgZm9yIGludGVyYWN0aXZlIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvZiB0aGUgTUdMUlUgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHNocmlua2luZyBwcm9jZXNzLlxuXG5Ob3csIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGNhbGxzIHRvIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBTcGVjaWZpY2FsbHksIGRvZXMgdGhpcyBnZXQgaW52b2tlZCBvbmx5IGZyb20gYHNocmlua19scnV2ZWNgIGFuZCBwb3RlbnRpYWxseSBgc2hyaW5rX25vZGVgLCBvciBhcmUgdGhlcmUgb3RoZXIgY2FsbCBwYXRocyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgcHJhY3RpY2Ugd291bGQgYmUgdG8gY29uZmlybSB0aGlzLiBJIHdpbGwgbG9vayBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgb3JpZ2luIHBvaW50cyBvZiB0aGUgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ5OjE2LjgwODU3MDUzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2Mjk0NzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX3Nocmlua19scnV2ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTIxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyODUtXFxubW0vdm1zY2FuLmM6NTI4NjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01Mjg3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMzQtXFxubW0vdm1zY2FuLmM6NjAzNTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDM2LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwNDc9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjA1OC1cXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmM6NjA1OTpcXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNjA2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MTguODcxNTI0MzEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTcxNzAxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGF0IHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGBzaHJpbmtfbHJ1dmVjYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHNocmlua19scnV2ZWNgIGlzIGNhbGxpbmcgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AuIFRoYXQncyB0aGUgY29yZSByZWxhdGlvbnNoaXAgaGVyZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCB0aG91Z2gsIGlzIHdoYXQgKnRyaWdnZXJzKiBgc2hyaW5rX2xydXZlY2A/IEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0cyB2aXNpYmlsaXR5IGFuZCBzY29wZSBhcmUgbGltaXRlZCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIHBhcnQgb2YgdGhlIGNvZGUgdGhhdCdzIGNhbGxpbmcgaXQuIEtub3dpbmcgd2hlcmUgdGhpcyBjYWxsIG9yaWdpbmF0ZXMgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNvbnRleHQgb24gdGhlIGJyb2FkZXIgTFJVIGNhY2hlJ3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpZiBJJ20gbG9va2luZyBhdCBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nIGEgcG90ZW50aWFsIGlzc3VlLiBOZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MjEuNzY4Njk3NTg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1ODA5Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19scnV2ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTA5NT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEyOS0gKi9cXG5tbS92bXNjYW4uYzo1MTMwOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTEzMS17XFxuLS1cXG5tbS92bXNjYW4uYz01MTc1PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5NC1cXG5tbS92bXNjYW4uYzo1MTk1OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTE5Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyMTY9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01Mjg1LVxcbm1tL3Ztc2Nhbi5jOjUyODY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTI4Ny17XFxuLS1cXG5tbS92bXNjYW4uYy01Mjk4LVxcbm1tL3Ztc2Nhbi5jOjUyOTk6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUzMDAtXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjAzMD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjAzNC1cXG5tbS92bXNjYW4uYzo2MDM1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwMzYte1xcbi0tXFxubW0vdm1zY2FuLmM9NjA0MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjA0Ni1cXG5tbS92bXNjYW4uYzo2MDQ3OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDQ4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNTgtXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjYwNTk6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYwNjAtXFxuLS1cXG5tbS92bXNjYW4uYz02MjM4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyOTctXFxubW0vdm1zY2FuLmM6NjI5ODpcXHRcXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyOTktXFxuLS1cXG5tbS92bXNjYW4uYz02ODkzPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02OTIzLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY5MjQ6XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjkyNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MjMuODg0NTEzMjY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTYxMDczMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IC0gQSBRdWljayBTY2FuKipcblxuQWxyaWdodCwgc28gYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzbid0IHN0YXRpYy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBzZWUgd2hhdCB0aGF0IG1lYW5zLCB3aGVyZSB0aGlzIGxlYWRzIHVzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgc2hyaW5rX25vZGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gV2hhdCBpcyBpdHMgcHVycG9zZT8gV2hlcmUgaXMgaXQgdXNlZD8gTGV0J3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNTgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OToyNi41ODA2MjQxNzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTY0OTM3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD04Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vaW50ZXJuYWwuaC04Ny1cXHRcXHRcXHRcXHRcXHQgICBpbnQgKnN3YXBwaW5lc3MpO1xcbm1tL2ludGVybmFsLmg6ODg6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9pbnRlcm5hbC5oLTg5LVxcdFxcdFxcdFxcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI3Mz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTMxMi1cXHRcXHR9XFxubW0vbWVtY29udHJvbC12MS5jOjMxMzpcXHRcXHR0b3RhbCArPSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0zMTQtXFx0XFx0XFx0XFx0XFx0cGdkYXQsIFxcdTAwMjZucl9zY2FubmVkKTtcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MTk9Ym9vbCBwYWdlX2lzX3VubW92YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTExNC1cXHQgKiBpdC4gIEJ1dCBub3csIG1lbW9yeSBvZmZsaW5lIGl0c2VsZiBkb2Vzbid0IGNhbGxcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjExNTpcXHQgKiBzaHJpbmtfbm9kZV9zbGFicygpIGFuZCBpdCBzdGlsbCB0byBiZSBmaXhlZC5cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTExNi1cXHQgKi9cXG4tLVxcbm1tL3ZtcHJlc3N1cmUuYz01Nz1lbnVtIHZtcHJlc3N1cmVfbGV2ZWxzIHZtcHJlc3N1cmVfY2FsY19sZXZlbCh1bnNpZ25lZCBsb25nIHNjYW5uZWQsXFxuLS1cXG5tbS92bXByZXNzdXJlLmMtNjQtXFx0ICogcmVjbGFpbWVkIGNhbiBiZSBncmVhdGVyIHRoYW4gc2Nhbm5lZCBmb3IgdGhpbmdzIHN1Y2ggYXMgcmVjbGFpbWVkXFxubW0vdm1wcmVzc3VyZS5jOjY1OlxcdCAqIHNsYWIgcGFnZXMuIHNocmlua19ub2RlKCkganVzdCBhZGRzIHJlY2xhaW1lZCBwYWdlcyB3aXRob3V0IGFcXG5tbS92bXByZXNzdXJlLmMtNjYtXFx0ICogcmVsYXRlZCBpbmNyZW1lbnQgdG8gc2Nhbm5lZCBwYWdlcy5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTE5NDA9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xOTc4LS8qXFxubW0vdm1zY2FuLmM6MTk3OTogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMTk4MC0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyODY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MzA2LVxcbm1tL3Ztc2Nhbi5jOjUzMDc6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MzA4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzU9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDM5LVxcbm1tL3Ztc2Nhbi5jOjYwNDA6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDQxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxODY9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MjM3LVxcbm1tL3Ztc2Nhbi5jOjYyMzg6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYyMzkte1xcbi0tXFxubW0vdm1zY2FuLmMtNjMxNi1cXG5tbS92bXNjYW4uYzo2MzE3OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYzMTgte1xcbi0tXFxubW0vdm1zY2FuLmMtNjMyNC1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYzMjU6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYzMjYtXFxuLS1cXG5tbS92bXNjYW4uYy02MzQxLVxcbm1tL3Ztc2Nhbi5jOjYzNDI6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjM0My1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY1MDI9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjU4MC1cXHRcXHRsYXN0X3BnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo2NTgxOlxcdFxcdHNocmlua19ub2RlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02NTgyLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NDc9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02ODkyLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2ODkzOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg5NC1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS92bXNjYW4uYy02OTE5LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY5MjA6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjkyMS1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NzA0MT1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDY1LVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo3MDY2OlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNzA2Ny1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYz03MTIzPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNjEtICovXFxubW0vdm1zY2FuLmM6NzE2MjpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MTYzLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNzgtXFx0ICovXFxubW0vdm1zY2FuLmM6NzE3OTpcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTcxODAtXFxuLS1cXG5tbS92bXNjYW4uYz03MjM1PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MzQ0LVxcbm1tL3Ztc2Nhbi5jOjczNDU6XFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxubW0vdm1zY2FuLmMtNzM0Ni1cXHRcXHRzYy5ucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNTYtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzM1NzpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTczNTgtXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc5MTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MzgtXFx0XFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjc5Mzk6XFx0XFx0XFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy03OTQwLVxcdFxcdH0gd2hpbGUgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzYyBucl9wYWdlcyBcXHUwMDI2XFx1MDAyNiAtLXNjLVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNlPSAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MjguNzM3MTI0MzM4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTg3OTQ3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipNZW1vcnkgTWFuYWdlbWVudCBFbnRyeSBQb2ludHMgYW5kIFJlY2xhaW0gTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaW5pdGlhdGVzIHBhZ2UgZnJlZWluZy4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4gdGhlIGFuYWx5c2lzLiBJdCdzIHRoZSB0b3AgbGV2ZWwgZnVuY3Rpb24sIGlmIEkgcmVjYWxsIGNvcnJlY3RseS4gVGhlbiwgYGJhbGFuY2VfcGdkYXRgIGlzIHRoZSBtYWluIGxvb3AgZm9yIHRoZSBrc3dhcGQgZGFlbW9uLCB0aGF0IG1ha2VzIHNlbnNlLiBJdCdzIHRoZSBwZXJzaXN0ZW50IHByb2Nlc3MgdGhhdCBjb25zdGFudGx5IG1vbml0b3JzIGFuZCBtYW5hZ2VzIG1lbW9yeSBwcmVzc3VyZSBhY3Jvc3MgdGhlIHN5c3RlbS5cblxuYF9fbm9kZV9yZWNsYWltYCBzb3VuZHMgbGlrZSB0aGUgY29yZSBsb2dpYyBmb3IgcmVjbGFpbWluZyBtZW1vcnkgYXQgdGhlIE5VTUEgbm9kZSBsZXZlbC4gVGhhdCdzIGxpa2VseSB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNhbGxlZCB3aGVuIGtzd2FwZCwgb3Igb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgbmVlZCB0byBmcmVlIHVwIG1lbW9yeSBmcm9tIGEgc3BlY2lmaWMgbm9kZS4gQW5kIGZpbmFsbHksIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBzcGVjaWZpY2FsbHkgZm9yIG1lbW9yeSBjZ3JvdXAgcmVjbGFpbS4gVGhhdCdzIHRhcmdldGVkIGF0IG1lbW9yeSBjb250cm9sIGdyb3VwcywgaGFuZGxpbmcgdGhlaXIgc3BlY2lmaWMgcmVjbGFpbSBkZW1hbmRzLlxuXG5Tbywgd2hlcmUgZG8gSSBzdGFydD8gTGV0J3MgZGl2ZSBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIHNlZSBob3cgdGhlIHBhZ2UgZnJlZWluZyBwcm9jZXNzIHVuZm9sZHMuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBlbnRpcmUgbWVtb3J5IGZyZWVpbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTozMy42NTU5MjMwNzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTU1MzgyNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX2ZyZWVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9maWxlLmM9MjM1MT1zdGF0aWMgdm9pZCBmdXNlX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTIzNzEtICogLSBzeW5jKDIpXFxuZnMvZnVzZS9maWxlLmM6MjM3MjogKiAtIHRyeV90b19mcmVlX3BhZ2VzKCkgd2l0aCBvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSXFxuZnMvZnVzZS9maWxlLmMtMjM3My0gKi9cXG4tLVxcbm1tL2ludGVybmFsLmg9Njk9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcXG5tbS9pbnRlcm5hbC5oOjcwOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbm1tL2ludGVybmFsLmgtNzEtXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm1hc2spO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0OTY9X19wZXJmb3JtX3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00NTA4LVxcbm1tL3BhZ2VfYWxsb2MuYzo0NTA5OlxcdHByb2dyZXNzID0gdHJ5X3RvX2ZyZWVfcGFnZXMoYWMtXFx1MDAzZXpvbmVsaXN0LCBvcmRlciwgZ2ZwX21hc2ssXFxubW0vcGFnZV9hbGxvYy5jLTQ1MTAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY1OTQ9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2MjQtICovXFxubW0vdm1zY2FuLmM6NjYyNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbm1tL3Ztc2Nhbi5jLTY2MjYtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3Njc9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02ODQ2LVxcbm1tL3Ztc2Nhbi5jOjY4NDc6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNjg0OC1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS92bXNjYW4uYy02ODgxLVxcbm1tL3Ztc2Nhbi5jOjY4ODI6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjg4My1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY5MzM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NjQtXFxubW0vdm1zY2FuLmM6Njk2NTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02OTY2LVxcbi0tXFxubW0vdm1zY2FuLmM9NzczMT11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3NTAtXFxubW0vdm1zY2FuLmM6Nzc1MTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03NzUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTozNS43NzE0Njc0MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwNzQxMDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBBbGxvY2F0aW9uIGFuZCBNZW1vcnkgUmVjbGFtYXRpb24qKlxuXG5Pa2F5LCBzbyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGdldHMgY2FsbGVkIGZyb20gYF9fcGVyZm9ybV9yZWNsYWltYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgaXMgdGhlIHNsb3cgcGF0aCBmb3IgcGFnZSBhbGxvY2F0aW9uLCB3aGljaCBjb25maXJtcyBpdHMgaW1wb3J0YW5jZS4gRGVmaW5pdGVseSBhIHZhbGlkIGNvZGUgcGF0aC5cblxuTGV0J3MgcmV2aXNpdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIHNlZSBgdHJ5X3RvX2luY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYGV2aWN0X2ZvbGlvc2AsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AuIFRoZXkncmUgYWxsIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIGRpcmVjdCB1c2VmdWxuZXNzLiBJIG5lZWQgdG8gaWRlbnRpZnkgc3VpdGFibGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIGBGb2N1c1N5bWJvbHNgLCB0aG91Z2guXG5cbkkndmUgZ290IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYGJhbGFuY2VfcGdkYXRgICh3aGljaCBpcyBrc3dhcGQpLCBhbmQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLiBIbW0sIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgaW5jcmVkaWJseSBnZW5lcmljIOKAkyBpdCdzIHRoZSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIHJlY2xhaW0uIFdoaWxlIGl0J3MgYSBob3QtcGF0aCBmdW5jdGlvbiwgaXQncyBwZXJoYXBzICp0b28qIGJyb2FkLiBJIG5lZWQgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuXG5cbkkgd29uZGVyIGlmIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIHdvdWxkIGJlIG1vcmUgdGFyZ2V0ZWQ/IEJ1dCBubywgaXQncyBzdGF0aWMuIExldCdzIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgKm5vKiBub24tc3RhdGljIGBscnVfZ2VuXypgIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6NDAuOTc4ODgxNTI4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUxMjc4ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGxydV9nZW5fXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTctXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTg6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTk6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MDA6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTAxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02Nzc9c3RydWN0IGxydV9nZW5fbWVtY2cge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02ODctXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2ODg6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2ODk6dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTAtYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Mjp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkzOnZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTQ6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njk1OnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTY6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Nzp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTgtdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njk5PWJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzAwOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzAxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03NTE9c3RhdGljIGlubGluZVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzUyOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NTMte1xcbi0tXFxubW0vdm1zY2FuLmM9MjkyMj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDAtXFxubW0vdm1zY2FuLmM6Mjk0MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NDIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk2Ny1cXG5tbS92bXNjYW4uYzoyOTY4OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMjk2OS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDA3LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDA4OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMDkte1xcbi0tXFxubW0vdm1zY2FuLmM9NDM3MT1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0MTgtXFxubW0vdm1zY2FuLmM6NDQxOTp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NDIwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NDMtXFxubW0vdm1zY2FuLmM6NDQ0NDp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ0NS17XFxuLS1cXG5tbS92bXNjYW4uYy00NDU0LVxcbm1tL3Ztc2Nhbi5jOjQ0NTU6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ0NTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDQ4MC1cXG5tbS92bXNjYW4uYzo0NDgxOnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ0ODIte1xcbi0tXFxubW0vdm1zY2FuLmM9NDU3OD1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDYwOC1cXG5tbS92bXNjYW4uYzo0NjA5OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYxMC17XFxuLS1cXG5tbS92bXNjYW4uYz01OTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MzYtXFxubW0vdm1zY2FuLmM6NTkzNzp2b2lkIGxydV9nZW5faW5pdF9wZ2RhdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTU5Mzgte1xcbi0tXFxubW0vdm1zY2FuLmMtNTk0OC1cXG5tbS92bXNjYW4uYzo1OTQ5OnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtNTk1MC17XFxuLS1cXG5tbS92bXNjYW4uYy01OTcwLVxcbm1tL3Ztc2Nhbi5jOjU5NzE6dm9pZCBscnVfZ2VuX2luaXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTU5NzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNTk4MS1cXG5tbS92bXNjYW4uYzo1OTgyOnZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy01OTgzLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2xydV9nZW5fdXRpbC5oPTM3PXN0cnVjdCBtZW1jZ19zdGF0cyB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaC00Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaDo0Mzp2b2lkIGxydV9nZW5fcmVhZF9tZW1jZ19zdGF0cyhzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICptZW1jZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbHJ1X2dlbl91dGlsLmgtNDQtbG9uZyBscnVfZ2VuX3N1bV9tZW1jZ19zdGF0cyhjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaD00NT1sb25nIGxydV9nZW5fc3VtX21lbWNnX3N0YXRzX2Zvcl9nZW4oaW50IGdlbiwgY29uc3Qgc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbHJ1X2dlbl91dGlsLmg6NDY6dm9pZCBscnVfZ2VuX2RvX2FnaW5nKHN0cnVjdCBtZW1jZ19zdGF0cyAqc3RhdHMsIGNvbnN0IGNoYXIgKm1lbWNnKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaC00Ny1pbnQgbHJ1X2dlbl9maW5kX2dlbmVyYXRpb24oY29uc3Qgc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmM9MTgxPXN0YXRpYyB2b2lkIHByaW50X21lbWNnX3N0YXRzKGNvbnN0IHN0cnVjdCBtZW1jZ19zdGF0cyAqc3RhdHMsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jLTIwMC0vKiBSZS1yZWFkIGxydV9nZW4gZGVidWdmcyBpbmZvcm1hdGlvbiBmb3IgQG1lbWNnIGludG8gQHN0YXRzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmM6MjAxOnZvaWQgbHJ1X2dlbl9yZWFkX21lbWNnX3N0YXRzKHN0cnVjdCBtZW1jZ19zdGF0cyAqc3RhdHMsIGNvbnN0IGNoYXIgKm1lbWNnKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmMtMjAyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmM9MjgyPXN0YXRpYyB2b2lkIHJ1bl9hZ2luZ19pbXBsKHVuc2lnbmVkIGxvbmcgbWVtY2dfaWQsIGludCBub2RlX2lkLCBpbnQgbWF4X2dlbilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmMtMzAxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmM6MzAyOnZvaWQgbHJ1X2dlbl9kb19hZ2luZyhzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICptZW1jZylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jLTMwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ5OjQzLjMzMDE2NDU2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA4MjUzNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgUmVjbGFpbSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBtZW1vcnkgcmVjbGFpbSBmdW5jdGlvbnMsIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgaXNuJ3Qgc3RhdGljIGFuZCBjYWxscyBpbnRvIE1HTFJVIHJlY2xhaW0uIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIHNlZSB0aGF0IGBzaHJpbmtfbm9kZWAgKmlzKiBzdGF0aWMsIGJ1dCB0aGVuIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyAqbm90KiBzdGF0aWMuIEhtbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gUGVyaGFwcyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgaXMgYSBtb3JlIHJlbGV2YW50IHBvaW50IHRvIGZvY3VzIG9uLCBhcyBhIG5vbi1zdGF0aWMgc3ltYm9sIGlzIG9mdGVuIGEgbW9yZSBpbXBvcnRhbnQgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZC4gTGV0J3MgZGlnIGRlZXBlci4gSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLiBJJ2xsIGZpbmQgaXQgaW4gYG1tL3Ztc2Nhbi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTo0Ni45Mzg0MjExNDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDY2MDEyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTgzPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTg3LVxcdFxcdFxcdFxcdFxcdCAgIGludCAqc3dhcHBpbmVzcyk7XFxubW0vaW50ZXJuYWwuaDo4ODp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2ludGVybmFsLmgtODktXFx0XFx0XFx0XFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjczPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMzEyLVxcdFxcdH1cXG5tbS9tZW1jb250cm9sLXYxLmM6MzEzOlxcdFxcdHRvdGFsICs9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUodmljdGltLCBnZnBfbWFzaywgZmFsc2UsXFxubW0vbWVtY29udHJvbC12MS5jLTMxNC1cXHRcXHRcXHRcXHRcXHRwZ2RhdCwgXFx1MDAyNm5yX3NjYW5uZWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9Njg0Nz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4OTItLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY4OTM6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODk0LVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6NDkuMTQ1MDI3MTk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTQ5MjA3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBNZW1vcnkgUmVjbGFpbTogQSBQcm9taXNpbmcgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiBtZW1vcnkgcmVjbGFpbSBpbiB0aGUga2VybmVsLCBhbmQgSSd2ZSBpZGVudGlmaWVkIGEgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgbWVtb3J5X21heF93cml0ZWAgYW5kIGBtZW1vcnlfaGlnaF93cml0ZWAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHF1aXRlIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGl0J3MgdGllZCB0byBtZW1vcnkgbGltaXRzIGJlaW5nIHJlYWNoZWQsIGVpdGhlciBtYXhpbXVtIG9yIGhpZ2ggdGhyZXNob2xkcywgc3VnZ2VzdHMgaXQncyBhIGdvb2Qgc3BvdCB0byBwcm9iZSB0aGUgcmVjbGFpbSBtZWNoYW5pc21zIHVuZGVyIHN0cmVzcy4gSXQgbWFrZXMgbG9naWNhbCBzZW5zZSB0byBzdGFydCBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiB3b3VsZCBiZSByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBmcmVlIG1lbW9yeSB3aGVuIHRoZSBzeXN0ZW0gaXMgdW5kZXIgcHJlc3N1cmUuIFRoZXJlZm9yZSwgSSBzaG91bGQgY2FyZWZ1bGx5IGFuYWx5emUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHRvIHVuZGVyc3RhbmQgaXRzIGludGVybmFsIHdvcmtpbmdzLiBJdCBhcHBlYXJzIHRvIGJlIGFuIGlkZWFsIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gaXRzIGNvbnRleHQuIFRoaXMgaXMgd2hlcmUgSSdsbCBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjEyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6NTIuOTU5OTUxNjQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyNTM3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD03Mj11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbi0tXFxubW0vaW50ZXJuYWwuaC04Mi1cXG5tbS9pbnRlcm5hbC5oOjgzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vaW50ZXJuYWwuaC04NC1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE3NzI9c3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4MTYtXFxubW0vbWVtY29udHJvbC12MS5jOjE4MTc6XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODE4LVxcdFxcdFxcdFxcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTgzNT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NTItXFxubW0vbWVtY29udHJvbC12MS5jOjE4NTM6XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODU0LVxcdFxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjM3Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWNsYWltX2hpZ2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzODgtXFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL21lbWNvbnRyb2wuYzoyMzg5OlxcdFxcdG5yX3JlY2xhaW1lZCArPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyxcXG5tbS9tZW1jb250cm9sLmMtMjM5MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI3MTItXFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL21lbWNvbnRyb2wuYzoyNzEzOlxcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODMwPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00ODcxLVxcbm1tL21lbWNvbnRyb2wuYzo0ODcyOlxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzIC0gaGlnaCxcXG5tbS9tZW1jb250cm9sLmMtNDg3My1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODg5PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5MzAtXFx0XFx0aWYgKG5yX3JlY2xhaW1zKSB7XFxubW0vbWVtY29udHJvbC5jOjQ5MzE6XFx0XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcXG5tbS9tZW1jb250cm9sLmMtNDkzMi1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4OTM9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5MzItXFxubW0vdm1zY2FuLmM6NjkzMzp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY5MzQtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NzMtI2Vsc2VcXG5tbS92bXNjYW4uYzo2OTc0OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjk3NS1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9ODAzNj1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MTA3LVxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XFxubW0vdm1zY2FuLmM6ODEwODpcXHRcXHRcXHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTgxMDktXFx0XFx0XFx0XFx0XFx0XFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTo1NS4xODI0OTQ5MDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzc0MzA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIENncm91cCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbmB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4uLiBub3cgKnRoYXQncyogYSBmdW5jdGlvbiBuYW1lIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCBjbGVhcmx5IHRhcmdldHMgbWVtb3J5IHByZXNzdXJlIHdpdGhpbiBhIGNncm91cC4gSSBsaWtlIHRoYXQuIEJ1dCB3aGF0IGVsc2UgaXMgaW4gcGxheSBoZXJlPyBBaCwgKnRoYXQncyogdGhlIGJlYXV0eSBvZiBjZ3JvdXAgdjIsIHRoZXJlIGlzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhhdCdzIGludm9rZWQgd2hlbiB3ZSB3cml0ZSB0byBgbWVtb3J5LnJlY2xhaW1gLCB3aGljaCBpcyB0aGUgdXNlciBpbnRlcmZhY2UgdG8gdHJpZ2dlciBtZW1vcnkgcmVjbGFtYXRpb24uXG5cbkkgbmVlZCB0byBkaXZlIGludG8gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCB3b3JrcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc2ODcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTo1OC40MTAyNDA4NTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQzNjIyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTcwMz1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XFxubW0vaW50ZXJuYWwuaDo3MDQ6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL2ludGVybmFsLmgtNzA1LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA2NT1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDcwLVxcbm1tL21lbWNvbnRyb2wuYzo1MDcxOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XFxubW0vbWVtY29udHJvbC5jLTUwNzItXFx0aWYgKHJldClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMzA9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtODAzNS1cXG5tbS92bXNjYW4uYzo4MDM2OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy04MDM3LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgxODk9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MTk0LVxcbm1tL3Ztc2Nhbi5jOjgxOTU6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgxOTYtXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MDowMC44MTQ2MDg4ODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxNTU3MjEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeHBsb3JpbmcgTUdMUlUgVXNhYmlsaXR5KipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNpbmcgb3VyIGVmZm9ydHMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIC0gYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IHdpdGhpbiBNR0xSVSB0aGF0IGNvdWxkIGJlIGludm9rZWQgZnJvbSB1c2Vyc3BhY2U/IExldCdzIGRpZyBkZWVwZXIuIFRoZSBgcnVuX2NtZGAgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCBpcyBjYWxsZWQgZnJvbSBkZWJ1Z2ZzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGltZSB0byBkZWx2ZSBpbnRvIGBydW5fY21kYCBhbmQgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMyNCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjA0LjMzMDE4OTAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQzNzQ3NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ1bl9jbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NDU0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyPTY4PXVzYWdlKCkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlci03NS1cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyOjc2OnJ1bl9jbWQoKSB7XFxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlci03Ny0gICAgaWYgWyBcXFwiJFZcXFwiID0gMSBdOyB0aGVuXFxuLS1cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyPTUzMD1wczMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyLTU1NC1cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyOjU1NTogICAgcnVuX2NtZCBkZCBpZj1cXFwiJG9maWxlLmJpblxcXCIgb2Y9XFxcIiRvZmlsZS5iaW5cXFwiIGNvbnY9bm90cnVuYyAgIFxcXFxcXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyLTU1Ni0gICAgICAgIHNraXA9JG92ZXJsYXlfZGVzdCBzZWVrPSRzeXN0ZW1fcmVzZXRfa2VybmVsICAgICAgICAgIFxcXFxcXG4tLVxcbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNTU4LVxcbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXI6NTU5OiAgICBydW5fY21kIGRkIGlmPVxcXCIkb2ZpbGUuYmluXFxcIiBvZj1cXFwiJG9maWxlLmJpblxcXCIgY29udj1ub3RydW5jICAgXFxcXFxcbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNTYwLSAgICAgICAgc2tpcD0kc3lzdGVtX3Jlc2V0X292ZXJsYXkgc2Vlaz0kb3ZlcmxheV9kZXN0ICAgICAgICAgXFxcXFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYuYz00MzQ9aW50IGNjcF9jbWRfcXVldWVfdGhyZWFkKHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5jLTQ1NS1cXHRcXHQvKiBFeGVjdXRlIHRoZSBjb21tYW5kICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYuYzo0NTY6XFx0XFx0Y21kLVxcdTAwM2VyZXQgPSBjY3BfcnVuX2NtZChjbWRfcSwgY21kKTtcXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5jLTQ1Ny1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2Lmg9NjM5PWludCBjY3BfdHJuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB2b2lkICpkYXRhLCBzaXplX3QgbWF4LCBib29sIHdhaXQpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LmgtNjQwLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2Lmg6NjQxOmludCBjY3BfcnVuX2NtZChzdHJ1Y3QgY2NwX2NtZF9xdWV1ZSAqY21kX3EsIHN0cnVjdCBjY3BfY21kICpjbWQpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LmgtNjQyLVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1vcHMuYz0yNDUwPWNjcF9ydW5fZWNjX2NtZChzdHJ1Y3QgY2NwX2NtZF9xdWV1ZSAqY21kX3EsIHN0cnVjdCBjY3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLW9wcy5jLTI0NzUtXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1vcHMuYzoyNDc2OmludCBjY3BfcnVuX2NtZChzdHJ1Y3QgY2NwX2NtZF9xdWV1ZSAqY21kX3EsIHN0cnVjdCBjY3BfY21kICpjbWQpXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1vcHMuYy0yNDc3LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYz0yMjc9c3RydWN0IGcyZF9ydW5xdWV1ZV9ub2RlIHtcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMjI4LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoyMjk6XFx0c3RydWN0IGxpc3RfaGVhZFxcdHJ1bl9jbWRsaXN0O1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0yMzAtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGV2ZW50X2xpc3Q7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM9ODAwPXN0YXRpYyB2b2lkIGcyZF9kbWFfc3RhcnQoc3RydWN0IGcyZF9kYXRhICpnMmQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODAzLVxcdHN0cnVjdCBnMmRfY21kbGlzdF9ub2RlICpub2RlID1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6ODA0OlxcdFxcdFxcdFxcdGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnJ1bnF1ZXVlX25vZGUtXFx1MDAzZXJ1bl9jbWRsaXN0LFxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MDUtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGcyZF9jbWRsaXN0X25vZGUsIGxpc3QpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jPTgyNT1zdGF0aWMgdm9pZCBnMmRfZnJlZV9ydW5xdWV1ZV9ub2RlKHN0cnVjdCBnMmRfZGF0YSAqZzJkLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTgzMS1cXHQvKlxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzo4MzI6XFx0ICogY29tbWFuZHMgaW4gcnVuX2NtZGxpc3QgaGF2ZSBiZWVuIGNvbXBsZXRlZCBzbyB1bm1hcCBhbGwgZ2VtXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTgzMy1cXHQgKiBvYmplY3RzIGluIGVhY2ggY29tbWFuZCBub2RlIHNvIHRoYXQgdGhleSBhcmUgdW5yZWZlcmVuY2VkLlxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MzQtXFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjgzNTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFxcdTAwMjZydW5xdWV1ZV9ub2RlLVxcdTAwM2VydW5fY21kbGlzdCwgbGlzdClcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODM2LVxcdFxcdGcyZF91bm1hcF9jbWRsaXN0X2dlbShnMmQsIG5vZGUsIHJ1bnF1ZXVlX25vZGUtXFx1MDAzZWZpbHApO1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzo4Mzc6XFx0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFxcdTAwMjZydW5xdWV1ZV9ub2RlLVxcdTAwM2VydW5fY21kbGlzdCwgXFx1MDAyNmcyZC1cXHUwMDNlZnJlZV9jbWRsaXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODM4LVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZzJkLVxcdTAwM2VjbWRsaXN0X211dGV4KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYz0xMjk5PWludCBleHlub3NfZzJkX2V4ZWNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsIHZvaWQgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMwNi1cXHRzdHJ1Y3QgZzJkX3J1bnF1ZXVlX25vZGUgKnJ1bnF1ZXVlX25vZGU7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjEzMDc6XFx0c3RydWN0IGxpc3RfaGVhZCAqcnVuX2NtZGxpc3Q7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMDgtXFx0c3RydWN0IGxpc3RfaGVhZCAqZXZlbnRfbGlzdDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzEzLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzE0OlxcdHJ1bl9jbWRsaXN0ID0gXFx1MDAyNnJ1bnF1ZXVlX25vZGUtXFx1MDAzZXJ1bl9jbWRsaXN0O1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzE1LVxcdGV2ZW50X2xpc3QgPSBcXHUwMDI2cnVucXVldWVfbm9kZS1cXHUwMDNlZXZlbnRfbGlzdDtcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6MTMxNjpcXHRJTklUX0xJU1RfSEVBRChydW5fY21kbGlzdCk7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMTctXFx0SU5JVF9MSVNUX0hFQUQoZXZlbnRfbGlzdCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMyMC1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6MTMyMTpcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZmaWxlX3ByaXYtXFx1MDAzZWludXNlX2NtZGxpc3QsIHJ1bl9jbWRsaXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMyMi1cXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZmaWxlX3ByaXYtXFx1MDAzZWV2ZW50X2xpc3QsIGV2ZW50X2xpc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzIzLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzI0OlxcdGlmIChsaXN0X2VtcHR5KHJ1bl9jbWRsaXN0KSkge1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzI1LVxcdFxcdGRldl9lcnIoZzJkLVxcdTAwM2VkZXYsIFxcXCJ0aGVyZSBpcyBubyBpbnVzZSBjbWRsaXN0XFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jPTkzOT1pbnQgY29kYV9jaGVja19maXJtd2FyZShzdHJ1Y3QgY29kYV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jLTk2MC1cXHRcXHRyZXQgPSAtRUlPO1xcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jOjk2MTpcXHRcXHRnb3RvIGVycl9ydW5fY21kO1xcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jLTk2Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYy0xMDAxLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jOjEwMDI6ZXJyX3J1bl9jbWQ6XFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jaGlwcy1tZWRpYS9jb2RhL2NvZGEtYml0LmMtMTAwMy1cXHRjbGtfZGlzYWJsZV91bnByZXBhcmUoZGV2LVxcdTAwM2VjbGtfYWhiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xNzM9c3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xNzktXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjE4MDpzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xODEtXFx0XFx0XFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTIzNz1zdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNDMtXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjI0NDpcXHRyZXQgPSBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VjbWRfcmVhZCwgY21kX2RhdGEpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0yNTc9c3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI2My1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MjY0OlxcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMjY1LX1cXG4tLVxcbmtlcm5lbC9yZWJvb3QuYz04NDA9c3RhdGljIGNvbnN0IGNoYXIgcmVib290X2NtZFtdID0gXFxcIi9zYmluL3JlYm9vdFxcXCI7XFxua2VybmVsL3JlYm9vdC5jLTg0MS1cXG5rZXJuZWwvcmVib290LmM6ODQyOnN0YXRpYyBpbnQgcnVuX2NtZChjb25zdCBjaGFyICpjbWQpXFxua2VybmVsL3JlYm9vdC5jLTg0My17XFxuLS1cXG5rZXJuZWwvcmVib290LmM9ODYyPXN0YXRpYyBpbnQgX19vcmRlcmx5X3JlYm9vdCh2b2lkKVxcbi0tXFxua2VybmVsL3JlYm9vdC5jLTg2NS1cXG5rZXJuZWwvcmVib290LmM6ODY2OlxcdHJldCA9IHJ1bl9jbWQocmVib290X2NtZCk7XFxua2VybmVsL3JlYm9vdC5jLTg2Ny1cXG4tLVxcbmtlcm5lbC9yZWJvb3QuYz04Nzc9c3RhdGljIGludCBfX29yZGVybHlfcG93ZXJvZmYoYm9vbCBmb3JjZSlcXG4tLVxcbmtlcm5lbC9yZWJvb3QuYy04ODAtXFxua2VybmVsL3JlYm9vdC5jOjg4MTpcXHRyZXQgPSBydW5fY21kKHBvd2Vyb2ZmX2NtZCk7XFxua2VybmVsL3JlYm9vdC5jLTg4Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3NTc9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy01Nzg2LVxcbm1tL3Ztc2Nhbi5jOjU3ODc6c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTU3ODgtXFx0XFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4Mjk9c3RhdGljIHNzaXplX3QgbHJ1X2dlbl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsXFxuLS1cXG5tbS92bXNjYW4uYy01ODk3LVxcbm1tL3Ztc2Nhbi5jOjU4OTg6XFx0XFx0ZXJyID0gcnVuX2NtZChjbWQsIG1lbWNnX2lkLCBuaWQsIHNlcSwgXFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbm1tL3Ztc2Nhbi5jLTU4OTktXFx0XFx0aWYgKGVycilcXG4tLVxcbnNjcmlwdHMvY29jY2ljaGVjaz0xMzU9ZmlcXG5zY3JpcHRzL2NvY2NpY2hlY2stMTM2LVxcbnNjcmlwdHMvY29jY2ljaGVjazoxMzc6cnVuX2NtZF9wYXJtYXAoKSB7XFxuc2NyaXB0cy9jb2NjaWNoZWNrLTEzOC1cXHRpZiBbICRWRVJCT1NFIC1uZSAwIF0gOyB0aGVuXFxuLS1cXG5zY3JpcHRzL2NvY2NpY2hlY2stMTU1LVxcbnNjcmlwdHMvY29jY2ljaGVjazoxNTY6cnVuX2NtZF9vbGQoKSB7XFxuc2NyaXB0cy9jb2NjaWNoZWNrLTE1Ny1cXHRsb2NhbCBpXFxuLS1cXG5zY3JpcHRzL2NvY2NpY2hlY2stMTcwLVxcbnNjcmlwdHMvY29jY2ljaGVjazoxNzE6cnVuX2NtZCgpIHtcXG5zY3JpcHRzL2NvY2NpY2hlY2stMTcyLVxcdGlmIFsgXFxcIiRVU0VfSk9CU1xcXCIgPSBcXFwieWVzXFxcIiBdOyB0aGVuXFxuc2NyaXB0cy9jb2NjaWNoZWNrOjE3MzpcXHRcXHRydW5fY21kX3Bhcm1hcCAkQFxcbnNjcmlwdHMvY29jY2ljaGVjay0xNzQtXFx0ZWxzZVxcbnNjcmlwdHMvY29jY2ljaGVjazoxNzU6XFx0XFx0cnVuX2NtZF9vbGQgJEBcXG5zY3JpcHRzL2NvY2NpY2hlY2stMTc2LVxcdGZpXFxuLS1cXG5zY3JpcHRzL2NvY2NpY2hlY2s9MTkxPWNvY2NpbmVsbGUgKCkge1xcbi0tXFxuc2NyaXB0cy9jb2NjaWNoZWNrLTI0Mi0gICAgaWYgWyBcXFwiJE1PREVcXFwiID0gXFxcImNoYWluXFxcIiBdIDsgdGhlblxcbnNjcmlwdHMvY29jY2ljaGVjazoyNDM6XFx0cnVuX2NtZCAkU1BBVENIIC1EIHBhdGNoICAgXFxcXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNDQtXFx0XFx0JEZMQUdTIC0tY29jY2ktZmlsZSAkQ09DQ0kgJE9QVCAkT1BUSU9OUyAgICAgICAgICAgICAgIHx8IFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjQ1OlxcdHJ1bl9jbWQgJFNQQVRDSCAtRCByZXBvcnQgIFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjQ2LVxcdFxcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgLS1uby1zaG93LWRpZmYgfHwgXFxcXFxcbnNjcmlwdHMvY29jY2ljaGVjazoyNDc6XFx0cnVuX2NtZCAkU1BBVENIIC1EIGNvbnRleHQgXFxcXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNDgtXFx0XFx0JEZMQUdTIC0tY29jY2ktZmlsZSAkQ09DQ0kgJE9QVCAkT1BUSU9OUyAgICAgICAgICAgICAgIHx8IFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjQ5OlxcdHJ1bl9jbWQgJFNQQVRDSCAtRCBvcmcgICAgIFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjUwLVxcdFxcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgLS1uby1zaG93LWRpZmYgfHwgZXhpdCAxXFxuc2NyaXB0cy9jb2NjaWNoZWNrLTI1MS0gICAgZWxpZiBbIFxcXCIkTU9ERVxcXCIgPSBcXFwicmVwK2N0eHRcXFwiIF0gOyB0aGVuXFxuc2NyaXB0cy9jb2NjaWNoZWNrOjI1MjpcXHRydW5fY21kICRTUEFUQ0ggLUQgcmVwb3J0ICBcXFxcXFxuc2NyaXB0cy9jb2NjaWNoZWNrLTI1My1cXHRcXHQkRkxBR1MgLS1jb2NjaS1maWxlICRDT0NDSSAkT1BUICRPUFRJT05TIC0tbm8tc2hvdy1kaWZmIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjU0OlxcdHJ1bl9jbWQgJFNQQVRDSCAtRCBjb250ZXh0IFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjU1LVxcdFxcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgfHwgZXhpdCAxXFxuc2NyaXB0cy9jb2NjaWNoZWNrLTI1Ni0gICAgZWxzZVxcbnNjcmlwdHMvY29jY2ljaGVjazoyNTc6XFx0cnVuX2NtZCAkU1BBVENIIC1EICRNT0RFICAgJEZMQUdTIC0tY29jY2ktZmlsZSAkQ09DQ0kgJE9QVCAkT1BUSU9OUyB8fCBleGl0IDFcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjU4LSAgICBmaVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0zOT1maVxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtNDAtXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDo0MTpydW5fY21kKCkgeyAjIGNvbW1hbmRcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTQyLVxcdGVjaG8gXFxcIiQqXFxcIlxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD03Nz1zZXRfdmFsdWVfb2YoKSB7ICMga2V5IGZpbGVcXG4tLVxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtNzktXFx0XFx0dmFsPWB4YmNfZ2V0X3ZhbCAkMSAxYFxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6ODA6XFx0XFx0cnVuX2NtZCBcXFwiZWNobyAnJHZhbCcgXFx1MDAzZVxcdTAwM2UgJDJcXFwiXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC04MS1cXHRmaVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD04ND1zZXRfYXJyYXlfb2YoKSB7ICMga2V5IGZpbGVcXG4tLVxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtODYtXFx0XFx0eGJjX2dldF92YWwgJDEgfCB3aGlsZSByZWFkIGxpbmU7IGRvXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDo4NzpcXHRcXHRcXHRydW5fY21kIFxcXCJlY2hvICckbGluZScgXFx1MDAzZVxcdTAwM2UgJDJcXFwiXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC04OC1cXHRcXHRkb25lXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTE3MD1zZXR1cF9vbmVfaGlzdG9ncmFtKCkgeyAjIHByZWZpeCB0cmlnZ2VyLWZpbGVcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjE3MTpcXHRydW5fY21kIFxcXCJlY2hvICdgcHJpbnRfb25lX2hpc3RvZ3JhbSAkezF9YCcgXFx1MDAzZVxcdTAwM2UgJHsyfVxcXCJcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTE3Mi19XFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTE4Mz1zZXR1cF9ldmVudCgpIHsgIyBwcmVmaXggZ3JvdXAgZXZlbnQgW2luc3RhbmNlXVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0xOTEtXFx0aWYgWyBcXFwiJDNcXFwiID0gXFxcImVuYWJsZVxcXCIgXTsgdGhlblxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MTkyOlxcdFxcdHJ1bl9jbWQgXFxcImVjaG8gMSBcXHUwMDNlICR7ZXZlbnRkaXJ9XFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMTkzLVxcdFxcdHJldHVyblxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0xOTgtXFx0XFx0eGJjX2dldF92YWwgJHticmFuY2h9LnByb2JlcyB8IHdoaWxlIHJlYWQgbGluZTsgZG9cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjE5OTpcXHRcXHRcXHRydW5fY21kIFxcXCJlY2hvICdwOmtwcm9iZXMvJDMgJGxpbmUnIFxcdTAwM2VcXHUwMDNlICRUUkFDRUZTL2twcm9iZV9ldmVudHNcXFwiXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0yMDAtXFx0XFx0ZG9uZVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0yMDItXFx0c3ludGhldGljKVxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjAzOlxcdFxcdHJ1bl9jbWQgXFxcImVjaG8gJ2Bjb21wb3NlX3N5bnRoICQzICR7YnJhbmNofS5maWVsZHNgJyBcXHUwMDNlXFx1MDAzZSAkVFJBQ0VGUy9zeW50aGV0aWNfZXZlbnRzXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjA0LVxcdFxcdDs7XFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTIxMi1cXHRpZiB4YmNfaGFzX2tleSAke2JyYW5jaH0uZW5hYmxlOyB0aGVuXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyMTM6XFx0XFx0cnVuX2NtZCBcXFwiZWNobyAxIFxcdTAwM2UgJHtldmVudGRpcn0vZW5hYmxlXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjE0LVxcdGZpXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTIxNz1zZXR1cF9ldmVudHMoKSB7ICMgcHJlZml4KFxcXCJmdHJhY2VcXFwiIG9yIFxcXCJmdHJhY2UuaW5zdGFuY2UuSU5TVEFOQ0VcXFwiKSBbaW5zdGFuY2VdXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTIyNS1cXHRcXHRpZiBbIFxcXCIkMlxcXCIgXTsgdGhlblxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjI2OlxcdFxcdFxcdHJ1bl9jbWQgXFxcImVjaG8gMSBcXHUwMDNlICRUUkFDRUZTL2luc3RhbmNlcy8kMi9ldmVudHMvZW5hYmxlXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjI3LVxcdFxcdGVsc2VcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjIyODpcXHRcXHRcXHRydW5fY21kIFxcXCJlY2hvIDEgXFx1MDAzZSAkVFJBQ0VGUy9ldmVudHMvZW5hYmxlXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjI5LVxcdFxcdGZpXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTI0ND1zZXR1cF9pbnN0YW5jZSgpIHsgIyBbaW5zdGFuY2VdXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI2My1cXHRpZiB4YmNfaGFzX2tleSAke2luc3RhbmNlfS5hbGxvY19zbmFwc2hvdDsgdGhlblxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjY0OlxcdFxcdHJ1bl9jbWQgXFxcImVjaG8gMSBcXHUwMDNlICR7aW5zdGFuY2VkaXJ9L3NuYXBzaG90XFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjY1LVxcdGZpXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI2OS1cXHRcXHRzaXplPWBldmFsIHNpemUya2IgJHNpemVgXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyNzA6XFx0XFx0cnVuX2NtZCBcXFwiZWNobyAkc2l6ZSBcXHUwMDNlXFx1MDAzZSAke2luc3RhbmNlZGlyfS9idWZmZXJfc2l6ZV9rYlxcXCJcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI3MS1cXHRmaVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0yNzg9aWYgeGJjX2hhc19rZXkgXFxcImtlcm5lbC5kdW1wX29uX29vcHNcXFwiOyB0aGVuXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI4MC1cXHRbIFxcXCIkZHVtcF9tb2RlXFxcIiBdIFxcdTAwMjZcXHUwMDI2IGR1bXBfbW9kZT1gZXZhbCBlY2hvICRkdW1wX21vZGVgIHx8IGR1bXBfbW9kZT0xXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyODE6XFx0cnVuX2NtZCBcXFwiZWNobyBcXFxcXFxcIiRkdW1wX21vZGVcXFxcXFxcIiBcXHUwMDNlIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2R1bXBfb25fb29wc1xcXCJcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI4Mi1maVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0yOTU9aWYgeGJjX2hhc19icmFuY2ggXFxcImZ0cmFjZS5pbnN0YW5jZVxcXCI7IHRoZW5cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI5Ni1cXHRmb3IgaSBpbiBgeGJjX3N1YmtleXMgXFxcImZ0cmFjZS5pbnN0YW5jZVxcXCIgMWA7IGRvXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyOTc6XFx0XFx0cnVuX2NtZCBcXFwibWtkaXIgLXAgJFRSQUNFRlMvaW5zdGFuY2VzLyRpXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjk4LVxcdFxcdHNldHVwX2luc3RhbmNlICRpXFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5PTE0Nz1jbGFzcyBUZXN0KG9iamVjdCk6XFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5LTI4MS1cXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5OjI4MjogICAgZGVmIHJ1bl9jbWQoc2VsZiwgdGVtcGRpcik6XFxudG9vbHMvcGVyZi90ZXN0cy9zaGVsbC9saWIvYXR0ci5weS0yODMtICAgICAgICBqdW5rMSwganVuazIsIGp1bmszLCBqdW5rNCwgbXlhcmNoID0gKG9zLnVuYW1lKCkpXFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5LTM3OC0gICAgICAgICAgICAjIHJ1biB0aGUgdGVzdCBzY3JpcHRcXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5OjM3OTogICAgICAgICAgICBzZWxmLnJ1bl9jbWQodGVtcGRpcik7XFxudG9vbHMvcGVyZi90ZXN0cy9zaGVsbC9saWIvYXR0ci5weS0zODAtXFxuLS1cXG50b29scy90ZXN0aW5nL2t1bml0L3J1bl9jaGVja3MucHk9MzY9ZGVmIG1haW4oYXJndjogU2VxdWVuY2Vbc3RyXSkgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weS00NS1cXHRcXHRcXHRjb250aW51ZVxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weTo0NjpcXHRcXHRmID0gZXhlY3V0b3Iuc3VibWl0KHJ1bl9jbWQsIGFyZ3YpXFxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5LTQ3LVxcdFxcdGZ1dHVyZV90b19uYW1lW2ZdID0gbmFtZVxcbi0tXFxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5LTc1LVxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weTo3NjpkZWYgcnVuX2NtZChhcmd2OiBTZXF1ZW5jZVtzdHJdKSAtXFx1MDAzZSBOb25lOlxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weS03Ny1cXHRzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmd2LCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIGN3ZD1BQlNfVE9PTF9QQVRILCB0aW1lb3V0PVRJTUVPVVQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jPTI1PXN0cnVjdCB2ZXJpdHlfaW5mbyB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTM2LS8qIFJ1biBhIGNvbW1hbmQgYW5kIG9wdGlvbmFsbHkgY2FwdHVyZSB0aGUgZmlyc3QgbGluZSBvZiBzdGRvdXQuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzozNzpzdGF0aWMgaW50IHJ1bl9jbWQoY29uc3QgY2hhciAqY21kLCBjaGFyICpvdXQsIHNpemVfdCBvdXRfc3opXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0zOC17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jPTU3PXN0YXRpYyBib29sIGhhc19wcmVyZXF1aXNpdGVzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTYzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NjQ6XFx0aWYgKHJ1bl9jbWQoXFxcIm1vZHByb2JlIGxvb3AgMlxcdTAwM2UvZGV2L251bGxcXFwiLCBOVUxMLCAwKSBcXHUwMDI2XFx1MDAyNlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NjU6XFx0ICAgIHJ1bl9jbWQoXFxcImxzIC9kZXYvbG9vcC1jb250cm9sIDJcXHUwMDNlL2Rldi9udWxsXFxcIiwgTlVMTCwgMCkpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTY2LVxcdFxcdHByaW50ZihcXFwiU0tJUDogbm8gbG9vcCBkZXZpY2Ugc3VwcG9ydFxcXFxuXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTY5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NzA6XFx0aWYgKHJ1bl9jbWQoXFxcIm1vZHByb2JlIGRtLXZlcml0eSAyXFx1MDAzZS9kZXYvbnVsbFxcXCIsIE5VTEwsIDApIFxcdTAwMjZcXHUwMDI2XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzo3MTpcXHQgICAgcnVuX2NtZChcXFwiZG1zZXR1cCB0YXJnZXRzIDJcXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcSB2ZXJpdHlcXFwiLCBOVUxMLCAwKSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtNzItXFx0XFx0cHJpbnRmKFxcXCJTS0lQOiBkbS12ZXJpdHkgbW9kdWxlIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy03NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjc2OlxcdGlmIChydW5fY21kKFxcXCJ3aGljaCB2ZXJpdHlzZXR1cCBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXFwiLCBOVUxMLCAwKSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtNzctXFx0XFx0cHJpbnRmKFxcXCJTS0lQOiB2ZXJpdHlzZXR1cCBub3QgZm91bmRcXFxcblxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYz04ND12b2lkIHRlc3RfbHNtX2JkZXYodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTA1LVxcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFxcXCJkbXNldHVwIHJlbW92ZSAlcyAyXFx1MDAzZS9kZXYvbnVsbFxcXCIsIERNX05BTUUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTA2OlxcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTEwNy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTMyLVxcdFxcdCBcXFwibG9zZXR1cCAtLWZpbmQgLS1zaG93ICVzIDJcXHUwMDNlL2Rldi9udWxsXFxcIiwgZGF0YV9pbWcpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTMzOlxcdGlmICghQVNTRVJUX09LKHJ1bl9jbWQoY21kLCBkYXRhX2xvb3AsIHNpemVvZihkYXRhX2xvb3ApKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTEzNC1cXHRcXHQgICAgICAgXFxcImxvc2V0dXAgZGF0YVxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xMzgtXFx0XFx0IFxcXCJsb3NldHVwIC0tZmluZCAtLXNob3cgJXMgMlxcdTAwM2UvZGV2L251bGxcXFwiLCBoYXNoX2ltZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoxMzk6XFx0aWYgKCFBU1NFUlRfT0socnVuX2NtZChjbWQsIGhhc2hfbG9vcCwgc2l6ZW9mKGhhc2hfbG9vcCkpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTQwLVxcdFxcdCAgICAgICBcXFwibG9zZXR1cCBoYXNoXFxcIikpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTE0Ny1cXHRcXHQgZGF0YV9sb29wLCBoYXNoX2xvb3ApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTQ4OlxcdGlmICghQVNTRVJUX09LKHJ1bl9jbWQoY21kLCByb290aGFzaCwgc2l6ZW9mKHJvb3RoYXNoKSksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xNDktXFx0XFx0ICAgICAgIFxcXCJ2ZXJpdHlzZXR1cCBmb3JtYXRcXFwiKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTY3LVxcdFxcdCBkYXRhX2xvb3AsIERNX05BTUUsIGhhc2hfbG9vcCwgcm9vdGhhc2gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTY4OlxcdGlmICghQVNTRVJUX09LKHJ1bl9jbWQoY21kLCBOVUxMLCAwKSwgXFxcInZlcml0eXNldHVwIG9wZW5cXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTE2OS1cXHRcXHRnb3RvIHRlYXJkb3duO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xOTgtXFx0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXFxcImRtc2V0dXAgcmVtb3ZlICVzIDJcXHUwMDNlL2Rldi9udWxsXFxcIiwgRE1fTkFNRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoxOTk6XFx0cnVuX2NtZChjbWQsIE5VTEwsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjAwLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0yMDQtXFx0XFx0XFx0IGRhdGFfbG9vcCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoyMDU6XFx0XFx0cnVuX2NtZChjbWQsIE5VTEwsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA2LVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA5LVxcdFxcdFxcdCBoYXNoX2xvb3ApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MjEwOlxcdFxcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTIxMS1cXHR9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weT05Nz1jbGFzcyBSZWNvcmRWYWx1ZVBpY2tlcjpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTEyMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weToxMjE6ZGVmIHJ1bl9jbWQoY21kLCBqc29uPUZhbHNlKTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0xMjItICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5PTEyOD1kZWYgcnVuX2pzb25fY21kKGNtZCk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk6MTI5OiAgICByZXR1cm4gcnVuX2NtZChjbWQsIGpzb249VHJ1ZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0xMzAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weT0xNzI9Y2xhc3MgUG9vbChDb21tb25JdGVtKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTE3NS0gICAgZGVmIGRsX3NldChzZWxmLCBkbG5hbWUsIHNpemUsIHRodHlwZSk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk6MTc2OiAgICAgICAgcnVuX2NtZChcXFwiZGV2bGluayBzYiBwb29sIHNldCB7fSBzYiB7fSBwb29sIHt9IHNpemUge30gdGh0eXBlIHt9XFxcIi5mb3JtYXQoZGxuYW1lLCBzZWxmW1xcXCJzYlxcXCJdLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTE3Ny0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbXFxcInBvb2xcXFwiXSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5PTIzMD1jbGFzcyBUY0JpbmQoQ29tbW9uSXRlbSk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0yMzctICAgIGRlZiBkbF9zZXQoc2VsZiwgcG9vbCwgdGgpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjIzODogICAgICAgIHJ1bl9jbWQoXFxcImRldmxpbmsgc2IgdGMgYmluZCBzZXQge30gc2Ige30gdGMge30gdHlwZSB7fSBwb29sIHt9IHRoIHt9XFxcIi5mb3JtYXQoc2VsZltcXFwiZGxwb3J0bmFtZVxcXCJdLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTIzOS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZltcXFwic2JcXFwiXSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5PTMwND1jbGFzcyBQb3J0UG9vbChDb21tb25JdGVtKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTMxMS0gICAgZGVmIGRsX3NldChzZWxmLCB0aCk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk6MzEyOiAgICAgICAgcnVuX2NtZChcXFwiZGV2bGluayBzYiBwb3J0IHBvb2wgc2V0IHt9IHNiIHt9IHBvb2wge30gdGgge31cXFwiLmZvcm1hdChzZWxmW1xcXCJkbHBvcnRuYW1lXFxcIl0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMzEzLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmW1xcXCJzYlxcXCJdLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9MTk1PXNldF9waW5nX2dyb3VwKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIwMy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMDQ6ZG9fcnVuX2NtZCgpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjA1LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIyMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMjI6cnVuX2NtZCgpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjIzLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMjQ6XFx0ZG9fcnVuX2NtZCAke05TQV9DTUR9ICQqXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjI1LX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjI3OnJ1bl9jbWRfbnNiKClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjgte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjIyOTpcXHRkb19ydW5fY21kICR7TlNCX0NNRH0gJCpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMzAtfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIzMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMzI6cnVuX2NtZF9uc2MoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIzMy17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjM0OlxcdGRvX3J1bl9jbWQgJHtOU0NfQ01EfSAkKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIzNS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaD0yMzc9c2V0dXBfY21kKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTI0MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyNDI6XFx0cnVuX2NtZCAke2NtZH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yNDMtXFx0cmM9JD9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTI1OT1zZXR1cF9jbWRfbnNiKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTI2My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyNjQ6XFx0cnVuX2NtZF9uc2IgJHtjbWR9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjY1LVxcdHJjPSQ/XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaD0yODE9c2V0dXBfY21kX25zYygpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yODUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6Mjg2OlxcdHJ1bl9jbWRfbnNjICR7Y21kfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTI4Ny1cXHRyYz0kP1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9MzA0PXNldF9zeXNjdGwoKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMzA3LVxcdGVjaG9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDozMDg6XFx0cnVuX2NtZCBzeXNjdGwgLXEgLXcgJCpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0zMDktfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9NTg0PWlwdjRfcGluZ19ub3ZyZigpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC01OTMtXFx0XFx0bG9nX3N0YXJ0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NTk0OlxcdFxcdHJ1bl9jbWQgcGluZyAtYzEgLXcxICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC01OTUtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0XFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNTk3LVxcdFxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjU5ODpcXHRcXHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC01OTktXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0LCBkZXZpY2UgYmluZFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYwMS1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2MDI6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfTE9fSVB9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02MDMtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0LCBhZGRyZXNzIGJpbmRcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02MTAtXFx0bG9nX3N0YXJ0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjExOlxcdHJ1bl9jbWQgcGluZyAtYyAxIC13IDEgLXIgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYxMi1cXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcXFwicGluZyBvdXQgKGRvbid0IHJvdXRlKSwgcGVlciBvbiBsaW5rXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjE2LVxcdHNob3dfaGludCBcXFwiRmFpbHMgc2luY2UgcGVlciBpcyBub3Qgb24gbGlua1xcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2MTc6XFx0cnVuX2NtZCBwaW5nIC1jIDEgLXcgMSAtciAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjE4LVxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAxIFxcXCJwaW5nIG91dCAoZG9uJ3Qgcm91dGUpLCBwZWVyIG5vdCBvbiBsaW5rXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjI1LVxcdFxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjYyNjpcXHRcXHRydW5fY21kX25zYiBwaW5nIC1jMSAtdzEgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYyNy1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcXFwicGluZyBpblxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYzNS1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2MzY6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYzNy1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcXFwicGluZyBsb2NhbFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY0NS1cXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2NDY6XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjQ3LVxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFxcXCJwaW5nIGxvY2FsLCBkZXZpY2UgYmluZFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY1NS1cXHRcXHRzaG93X2hpbnQgXFxcIkZhaWxzIHNpbmNlIGFkZHJlc3Mgb24gbG9vcGJhY2sgZGV2aWNlIGlzIG91dCBvZiBkZXZpY2Ugc2NvcGVcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjU2OlxcdFxcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY1Ny1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMSBcXFwicGluZyBsb2NhbCwgZGV2aWNlIGJpbmRcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02NjktXFx0YT0ke05TQl9MT19JUH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2NzA6XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY3MS1cXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMiBcXFwicGluZyBvdXQsIGJsb2NrZWQgYnkgcnVsZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY3NS1cXHQjIGNhc2Ugc3VjY2VlZHMgZGVzcGl0ZSB0aGUgcnVsZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjY3NjpcXHQjIHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY3Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY4MC1cXHRzaG93X2hpbnQgXFxcIlJlc3BvbnNlIGdlbmVyYXRlcyBJQ01QIChvciBhcnAgcmVxdWVzdCBpcyBpZ25vcmVkKSBkdWUgdG8gaXAgcnVsZVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2ODE6XFx0cnVuX2NtZF9uc2IgcGluZyAtYzEgLXcxICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02ODItXFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDEgXFxcInBpbmcgaW4sIGJsb2NrZWQgYnkgcnVsZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY5Ny1cXHRhPSR7TlNCX0xPX0lQfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjY5ODpcXHRydW5fY21kIHBpbmcgLWMxIC13MSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjk5LVxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAyIFxcXCJwaW5nIG91dCwgYmxvY2tlZCBieSByb3V0ZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcwMy1cXHQjIGNhc2Ugc3VjY2VlZHMgZGVzcGl0ZSBub3QgaGF2aW5nIGEgcm91dGUgZm9yIHRoZSBhZGRyZXNzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzA0OlxcdCMgcnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzA1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzA4LVxcdHNob3dfaGludCBcXFwiUmVzcG9uc2UgaXMgZHJvcHBlZCAob3IgYXJwIHJlcXVlc3QgaXMgaWdub3JlZCkgZHVlIHRvIGlwIHJvdXRlXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjcwOTpcXHRydW5fY21kX25zYiBwaW5nIC1jMSAtdzEgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcxMC1cXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMSBcXFwicGluZyBpbiwgYmxvY2tlZCBieSByb3V0ZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcxOC1cXHRhPSR7TlNCX0xPX0lQfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjcxOTpcXHRydW5fY21kIHBpbmcgLWMxIC13MSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzIwLVxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAyIFxcXCJwaW5nIG91dCwgdW5yZWFjaGFibGUgZGVmYXVsdCByb3V0ZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcyNC1cXHQjIGNhc2Ugc3VjY2VlZHMgZGVzcGl0ZSBub3QgaGF2aW5nIGEgcm91dGUgZm9yIHRoZSBhZGRyZXNzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzI1OlxcdCMgcnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzI2LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTcyOD1pcHY0X3BpbmdfdnJmKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc0MC1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NDE6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtWUkZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NDItXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0LCBWUkYgYmluZFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc0NC1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NDU6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzQ2LVxcdFxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFxcXCJwaW5nIG91dCwgZGV2aWNlIGJpbmRcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NDgtXFx0XFx0bG9nX3N0YXJ0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzQ5OlxcdFxcdHJ1bl9jbWQgaXAgdnJmIGV4ZWMgJHtWUkZ9IHBpbmcgLWMxIC13MSAtSSAke05TQV9JUH0gJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc1MC1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcXFwicGluZyBvdXQsIHZyZiBkZXZpY2UgKyBkZXYgYWRkcmVzcyBiaW5kXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzUyLVxcdFxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjc1MzpcXHRcXHRydW5fY21kIGlwIHZyZiBleGVjICR7VlJGfSBwaW5nIC1jMSAtdzEgLUkgJHtWUkZfSVB9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NTQtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0LCB2cmYgZGV2aWNlICsgdnJmIGFkZHJlc3MgYmluZFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc2Mi1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NjM6XFx0XFx0cnVuX2NtZF9uc2IgcGluZyAtYzEgLXcxICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NjQtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgaW5cXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NzMtXFx0XFx0c2hvd19oaW50IFxcXCJTb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgJHthfVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NzQ6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtWUkZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NzUtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgbG9jYWwsIFZSRiBiaW5kXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzgzLVxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjc4NDpcXHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03ODUtXFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgbG9jYWwsIGRldmljZSBiaW5kXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzkxLVxcdFxcdHNob3dfaGludCBcXFwiRmFpbHMgc2luY2UgYWRkcmVzcyBvbiB2cmYgZGV2aWNlIGlzIG91dCBvZiBkZXZpY2Ugc2NvcGVcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzkyOlxcdFxcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc5My1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMiBcXFwicGluZyBsb2NhbCwgZGV2aWNlIGJpbmRcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDMtXFx0YT0ke05TQl9MT19JUH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo4MDQ6XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtWUkZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDUtXFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDIgXFxcInBpbmcgb3V0LCB2cmYgYmluZCwgYmxvY2tlZCBieSBydWxlXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtODA3LVxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjgwODpcXHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDktXFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDIgXFxcInBpbmcgb3V0LCBkZXZpY2UgYmluZCwgYmxvY2tlZCBieSBydWxlXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtODEzLVxcdHNob3dfaGludCBcXFwiUmVzcG9uc2UgbG9zdCBkdWUgdG8gaXAgcnVsZVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo4MTQ6XFx0cnVuX2NtZF9uc2IgcGluZyAtYzEgLXcxICR7YX1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MDYuNDczOTQzOTc3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1OTU1NTEyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1HTFJVJ3MgS2VybmVsIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBNR0xSVSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNvcmUgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYHJ1bl9jbWRgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBidXQgaXQncyAqc3RhdGljKi4gVGhhdCdzIHRoZSBmaXJzdCBodXJkbGUuIFRoZSBkZWJ1Z2ZzIGludGVyZmFjZSwgYGxydV9nZW5fc2VxX3dyaXRlYCwgY2FsbHMgYHJ1bl9jbWRgLCBidXQgaXQncyBhbHNvIHN0YXRpYywgdGhvdWdoIGl0J3MgcmVnaXN0ZXJlZCBhcyBhIGZpbGUgb3BlcmF0aW9uLiBIbW0sIGlzIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9uP1xuXG5MZXQncyBzZWXigKYgSSBrbm93IGBscnVfZ2VuX2RvX2FnaW5nYCBleGlzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmNgLCBidXQgdGhhdCdzIHVzZXJzcGFjZSwgc28gaXQncyBub3QgcmVsZXZhbnQgaW4gdGhpcyBjb250ZXh0LlxuXG5SaWdodCwgYEZvY3VzU3ltYm9sc2AgYXJlIHN1cHBvc2VkIHRvIGJlIGtlcm5lbCBmdW5jdGlvbnMhIFRoYXQncyB0aGUga2V5LiBUaGUgZnVuY3Rpb25zIHdlIGNhbiBmb2N1cyBvbiBhcmU6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYGJhbGFuY2VfcGdkYXRgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGhvb2tzLCB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMuXG5cbkxldCdzIGNvbmZpcm0gdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQuIFllcywgaXQncyBkZWZpbmVkIGluIGBtbS92bXNjYW4uY2AgYW5kIGRlY2xhcmVkIGluIGBtbS9pbnRlcm5hbC5oYC4gQ29uZmlybWVkLiBHb29kLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGxvb2tzIHRvIGJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gVGhhdCdzIGFub3RoZXIgcG90ZW50aWFsIHBvaW50IG9mIGVudHJ5LCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCBpcyBhbHNvIG5vbi1zdGF0aWMuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYm90aCBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY3JpdGljYWwgY29kZSBjaGFuZ2VzIGFyZSBnYXRlZCBieSB0aGUgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgZGlyZWN0aXZlcy4gSSdsbCBjaGVjayBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDM5ODIgdG8gY29uZmlybSB0aGlzLiBUaGF0IHNob3VsZCB0ZWxsIG1lIGlmIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjEzLjA2OTQ5ODI2NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk2MDpcXHRcXG4zOTYxOlxcdFxcdC8qIGZpbmQgdGhlIG9sZGVzdCBwb3B1bGF0ZWQgZ2VuZXJhdGlvbiAqL1xcbjM5NjI6XFx0XFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xcbjM5NjM6XFx0XFx0XFx0d2hpbGUgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1heF9zZXEpIHtcXG4zOTY0OlxcdFxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XFxuMzk2NTpcXHRcXG4zOTY2OlxcdFxcdFxcdFxcdGZvciAoem9uZSA9IDA7IHpvbmUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKykge1xcbjM5Njc6XFx0XFx0XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZscnVnZW4tXFx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKSlcXG4zOTY4OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4zOTY5OlxcdFxcdFxcdFxcdH1cXG4zOTcwOlxcdFxcbjM5NzE6XFx0XFx0XFx0XFx0bWluX3NlcVt0eXBlXSsrO1xcbjM5NzI6XFx0XFx0XFx0XFx0c2VxX2luY19mbGFnID0gdHJ1ZTtcXG4zOTczOlxcdFxcdFxcdH1cXG4zOTc0OlxcdG5leHQ6XFxuMzk3NTpcXHRcXHRcXHQ7XFxuMzk3NjpcXHRcXHR9XFxuMzk3NzpcXHRcXG4zOTc4OlxcdFxcdC8qXFxuMzk3OTpcXHRcXHQgKiBJZiBtaW5fc2VxW3R5cGVdIG9mIGJvdGggYW5vbnltb3VzIGFuZCBmaWxlIGlzIG5vdCBpbmNyZWFzZWQsXFxuMzk4MDpcXHRcXHQgKiByZXR1cm4gaGVyZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjaGVja2luZyBvdmVyaGVhZCBsYXRlci5cXG4zOTgxOlxcdFxcdCAqL1xcbjM5ODI6XFx0XFx0aWYgKCFzZXFfaW5jX2ZsYWcpXFxuMzk4MzpcXHRcXHRcXHRyZXR1cm47XFxuMzk4NDpcXHRcXG4zOTg1OlxcdFxcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcXG4zOTg2OlxcdFxcdFxcdGlmIChtaW5fc2VxW3R5cGVdIFxcdTAwM2M9IGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSlcXG4zOTg3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM5ODg6XFx0XFxuMzk4OTpcXHRcXHRcXHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xcbjM5OTA6XFx0XFx0XFx0V1JJVEVfT05DRShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0sIG1pbl9zZXFbdHlwZV0pO1xcbjM5OTE6XFx0XFx0fVxcbjM5OTI6XFx0fVxcbjM5OTM6XFx0XFxuMzk5NDpcXHRzdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4zOTk1OlxcdHtcXG4zOTk2OlxcdFxcdGJvb2wgc3VjY2VzcztcXG4zOTk3OlxcdFxcdGludCBwcmV2LCBuZXh0O1xcbjM5OTg6XFx0XFx0aW50IHR5cGUsIHpvbmU7XFxuMzk5OTpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbjQwMDA6XFx0cmVzdGFydDpcXG40MDAxOlxcdFxcdGlmIChzZXEgXFx1MDAzYyBSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2VtYXhfc2VxKSlcXG40MDAyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG40MDAzOlxcdFxcbjQwMDQ6XFx0XFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuNDAwNTpcXHRcXG40MDA2OlxcdFxcdFZNX1dBUk5fT05fT05DRSghc2VxX2lzX3ZhbGlkKGxydXZlYykpO1xcbjQwMDc6XFx0XFxuNDAwODpcXHRcXHRzdWNjZXNzID0gc2VxID09IGxydWdlbi1cXHUwMDNlbWF4X3NlcTtcXG40MDA5OlxcdFxcdGlmICghc3VjY2VzcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MTMuMDY5OTYzMDUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzA0NDg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNR0xSVSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGhpcyBsb29rcyBsaWtlIEknbSBpbnNpZGUgdGhlIE1HTFJVIGNvZGUsIHBlcmZlY3QuIE5vdywgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gV2hhdCBhcmUgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkga25vdyBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBiaWcgb25lLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciwgZXNwZWNpYWxseSByZWxhdGVkIHRvIGVuYWJsaW5nIGl0IGJ5IGRlZmF1bHQuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzISBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgbG9va3MgbGlrZSBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBJdCdzIHByb2JhYmx5IHVzZWQgdG8gc2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUbyBiZSBjb21wbGV0ZWx5IHN1cmUsIEkgc2hvdWxkIHJlYWxseSBqdW1wIG92ZXIgdG8gYG1tL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGV0YWlscyBvZiBgTFJVX0dFTmAgYW5kIGFueSBkZXBlbmRlbnQgb3B0aW9ucy4gTGV0J3MgZ28gdGFrZSBhIGxvb2sgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjE2Ljc0MDQxNTU1NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDAwOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwMTpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDI6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDAzOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNDpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwNTpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA2OlxcdFxcdGhlbHBcXG4xNDA3OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQwODpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDA5OlxcdFxcbjE0MTA6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxMjpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDEzOlxcdFxcdGhlbHBcXG4xNDE0OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTU6XFx0XFxuMTQxNjpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MTc6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MTg6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxOTpcXHRcXHRoZWxwXFxuMTQyMDpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MjE6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MjI6XFx0XFxuMTQyMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MjQ6XFx0XFxuMTQyNTpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDI2OlxcdFxcdGRlZl9ib29sIHlcXG4xNDI3OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDI4OlxcdCMgfVxcbjE0Mjk6XFx0XFxuMTQzMDpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcXG4xNDMxOlxcdCAgICAgICBkZWZfYm9vbCBuXFxuMTQzMjpcXHRcXG4xNDMzOlxcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcXG4xNDM0OlxcdFxcdGRlZl9ib29sIHlcXG4xNDM1OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXFx1MDAyNlxcdTAwMjYgTU1VIFxcdTAwMjZcXHUwMDI2IFNNUFxcbjE0MzY6XFx0XFx0aGVscFxcbjE0Mzc6XFx0XFx0ICBBbGxvdyBwZXItdm1hIGxvY2tpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcuXFxuMTQzODpcXHRcXG4xNDM5OlxcdFxcdCAgVGhpcyBmZWF0dXJlIGFsbG93cyBsb2NraW5nIGVhY2ggdmlydHVhbCBtZW1vcnkgYXJlYSBzZXBhcmF0ZWx5IHdoZW5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MTYuNzQwNTE4NDc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNTkyNTMxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IFJlY2xhaW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgYXJlIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSdsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZSBpbiBgRW5hYmxlQ29uZmlnc2Agc2luY2UgdGhleSBzZWVtIGNlbnRyYWwgdG8gdGhpcyBtZW1vcnkgcmVjbGFpbSBjaGFuZ2UuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGl0c2VsZiBhbmQgaXQncyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCwgaW52b2x2aW5nIGNoYW5nZXMgdG8gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBzd2FwcGluZXNzIGNoZWNrcywgaG93IGl0IG1hbmFnZXMgZ2VuZXJhdGlvbiBleGhhdXN0aW9uIGR1cmluZyBmb2xpbyBzY2FucywgcmV0cmllcyB3aXRoIGRpZmZlcmVudCBmb2xpbyB0eXBlcywgYW5kIHRyaWdnZXJzIGFnaW5nIGJhc2VkIG9uIGV4aGF1c3Rpb24gYW5kIGltYmFsYW5jZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byB1bmNvdmVyIGFueSBzdWJ0bGUgYnVncy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEknbSBmb2N1c2luZyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIHRoZSBkaXJlY3QgcmVjbGFpbSBlbnRyeSwgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBmb3IgbWVtY2cgcmVjbGFpbS4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFub3RoZXIsIGFzIGlzIGBzaHJpbmtfYWxsX21lbW9yeWAuIEkga25vdyBgYmFsYW5jZV9wZ2RhdGAgKGtzd2FwZCkgaXMgYSBrdGhyZWFkLCBidXQgaXQncyBub24tc3RhdGljIHNvIGl0J3MgYSB2YWxpZCB0YXJnZXQgdG9vLCBldmVuIGlmIGluZGlyZWN0bHkgdGhyb3VnaCBtZW1vcnkgYWxsb2NhdGlvbi5cblxuSSdtIGxpc3RpbmcgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFzIG15IGNvcmUgZnV6emluZyB0YXJnZXRzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYDsgeWVzLCBpdCdzIHRoZXJlIGluIGBtbS92bXNjYW4uY2AuIEFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLCB3aGljaCBpcyBhbHNvIGluIGBtbS92bXNjYW4uY2AsIHVzZWQgZm9yIGhpYmVybmF0aW9uLiBJJ20gbGVhbmluZyB0b3dhcmQgcHJpb3JpdGl6aW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFzIG1vcmUgZGlyZWN0IHJlY2xhaW0gZW50cnkgcG9pbnRzLlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgYHN5c19tYWR2aXNlYCB3aXRoIGBNQURWX1BBR0VPVVRgIG9yIGBNQURWX0NPTERgLCB3aGljaCBsZWFkIHRvIGBtYWR2aXNlX3BhZ2VvdXRgIGFuZCB1bHRpbWF0ZWx5IHRvIGByZWNsYWltX3BhZ2VzYC4gVGhhdCdzIGFub3RoZXIgcG90ZW50aWFsIHZlY3Rvciwgc28gSSBzaG91bGQgYW5hbHl6ZSBgcmVjbGFpbV9wYWdlc2AgdG9vIHRvIHNlZSBpZiB0aGF0IHNob3VsZCBhbHNvIGJlIGFkZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ5MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjI1LjA5OTc3NDc3NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNzM2OTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNsYWltX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz0yNTc9c3RhdGljIHZvaWQgc2d4X3JlY2xhaW1lcl93cml0ZShzdHJ1Y3Qgc2d4X2VwY19wYWdlICplcGNfcGFnZSxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDItICovXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjMwMzpzdGF0aWMgdm9pZCBzZ3hfcmVjbGFpbV9wYWdlcyh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDQte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTM5Nj12b2lkIHNneF9yZWNsYWltX2RpcmVjdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTM5OC1cXHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9MT1dfUEFHRVMpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozOTk6XFx0XFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDAwLX1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz00MDI9c3RhdGljIGludCBrc2d4ZCh2b2lkICpwKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQyMS1cXHRcXHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9ISUdIX1BBR0VTKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6NDIyOlxcdFxcdFxcdHNneF9yZWNsYWltX3BhZ2VzKCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQyMy1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz01Njc9c3RydWN0IHNneF9lcGNfcGFnZSAqc2d4X2FsbG9jX2VwY19wYWdlKHZvaWQgKm93bmVyLCBib29sIHJlY2xhaW0pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkwLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo1OTE6XFx0XFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkyLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9Mzg3PXN0YXRpYyB2b2lkIHNsYV9mcmVlKHN0cnVjdCBzbGFfYWRkcl90IHNsYSwgc2l6ZV90IGxlbiwgYm9vbCBmaXJtd2FyZV9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTQwMy1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo0MDQ6XFx0XFx0XFx0XFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNjYXR0ZXJbaV0pLCAxLCBmYWxzZSk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDA1LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MDgtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo0MDk6XFx0XFx0XFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNsYSksIDEsIGZhbHNlKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MTAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zNTg9c3RhdGljIGludCBzZXZfd3JpdGVfaW5pdF9leF9maWxlX2lmX3JlcXVpcmVkKGludCBjbWRfaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTM4My1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjM4NDppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zODUte1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTctfVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NDE4OkVYUE9SVF9TWU1CT0xfR1BMKHNucF9yZWNsYWltX3BhZ2VzKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQxOS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQyMD1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MzgtXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0Mzk6XFx0c25wX3JlY2xhaW1fcGFnZXMocGFkZHIsIGksIGxvY2tlZCk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQ3OT1zdGF0aWMgdm9pZCBfX3NucF9mcmVlX2Zpcm13YXJlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00ODgtXFx0aWYgKHNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0ODk6XFx0ICAgIHNucF9yZWNsYWltX3BhZ2VzKHBhZGRyLCBucGFnZXMsIGxvY2tlZCkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00OTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz03MTI9c3RhdGljIGludCBzbnBfdW5tYXBfY21kX2J1Zl9kZXNjKHN0cnVjdCBjbWRfYnVmX2Rlc2MgKmRlc2MpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTcyMS1cXHQvKiBUcmFuc2l0aW9uIHRoZSBidWZmZXJzIGJhY2sgdG8gaHlwZXJ2aXNvci1vd25lZC4gKi9cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjcyMjpcXHRpZiAoc25wX3JlY2xhaW1fcGFnZXMoKmRlc2MtXFx1MDAzZXBhZGRyX3B0ciwgbnBhZ2VzLCB0cnVlKSkge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNzIzLVxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byByZWNsYWltIGZpcm13YXJlLW93bmVkIHBhZ2VzIHdoaWxlIGlzc3VpbmcgU0VWIGxlZ2FjeSBjb21tYW5kLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTgzMz1zdGF0aWMgaW50IHNucF9yZWNsYWltX2NtZF9idWYoaW50IGNtZCwgdm9pZCAqY21kX2J1ZilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtODQyLVxcdGlmIChzZXZfY21kX2J1Zl93cml0YWJsZShjbWQpKVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6ODQzOlxcdFxcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGNtZF9idWYpLCAxLCB0cnVlKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTg0NC1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1NT1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNDk0LVxcdFxcdCAqIFRoaXMgZXhlY3V0ZXMgd2l0aCB0aGUgc2V2X2NtZF9tdXRleCBoZWxkIHNvIGRvd24gdGhlIHN0YWNrXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNDk1OlxcdFxcdCAqIHNucF9yZWNsYWltX3BhZ2VzKGxvY2tlZD1mYWxzZSkgbWlnaHQgYmUgbmVlZGVkICh3aGljaCBpcyBleHRyZW1lbHlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE0OTYtXFx0XFx0ICogdW5saWtlbHkpIGJ1dCB3aWxsIGNhdXNlIGEgZGVhZGxvY2suXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIzNzI9c3RhdGljIGludCBfX3Nldl9kb19zbnBfcGxhdGZvcm1fc3RhdHVzKHN0cnVjdCBzZXZfdXNlcl9kYXRhX3NucF9zdGF0dXMgKnN0YXR1cyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQwNy1cXHRcXHQgKiBUaGUgc3RhdHVzIHBhZ2Ugd2lsbCBiZSBpbiBSZWNsYWltIHN0YXRlIG9uIHN1Y2Nlc3MsIG9yIGxlZnRcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI0MDg6XFx0XFx0ICogaW4gRmlybXdhcmUgc3RhdGUgb24gZmFpbHVyZS4gVXNlIHNucF9yZWNsYWltX3BhZ2VzKCkgdG9cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI0MDktXFx0XFx0ICogdHJhbnNpdGlvbiBlaXRoZXIgY2FzZSBiYWNrIHRvIEh5cGVydmlzb3Itb3duZWQgc3RhdGUuXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDEwLVxcdFxcdCAqL1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjQxMTpcXHRcXHRpZiAoc25wX3JlY2xhaW1fcGFnZXMoX19wYShkYXRhKSwgMSwgdHJ1ZSkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDEyLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz0yODA9dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTAtXFx0ZGVidWdmc19jcmVhdGVfdTMyKFxcXCJmd19wYWdlc19yZWNsYWltX2Rpc2NhcmRcXFwiLCAwNDAwLCBwYWdlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjI5MTpcXHRcXHRcXHQgICBcXHUwMDI2ZGV2LVxcdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmM9MTI3PXN0YXRpYyBpbnQgdG91dF9xdWVyeV9kdG9yKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3RvdXQuYy0xNDgtXFx0TUxYNV9USU1FT1VUX0ZJTEwoZnNtX3JlYWN0aXZhdGVfdG8sIG91dCwgZGV2LCBNTFg1X1RPX0ZTTV9SRUFDVElWQVRFX01TLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3RvdXQuYzoxNDk6XFx0TUxYNV9USU1FT1VUX0ZJTEwocmVjbGFpbV9wYWdlc190bywgb3V0LCBkZXYsIE1MWDVfVE9fUkVDTEFJTV9QQUdFU19NUywgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTUwLVxcdE1MWDVfVElNRU9VVF9GSUxMKHJlY2xhaW1fdmZzX3BhZ2VzX3RvLCBvdXQsIGRldiwgTUxYNV9UT19SRUNMQUlNX1ZGU19QQUdFU19NUywgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NTE4PXN0YXRpYyB1MzIgZndwX2ZpbGxfbWFuYWdlX3BhZ2VzX291dChzdHJ1Y3QgZndfcGFnZSAqZndwLCB1MzIgKm91dCwgdTMyIGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTUzNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NTM2OnN0YXRpYyBpbnQgcmVjbGFpbV9wYWdlc19jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTM3LVxcdFxcdFxcdCAgICAgdTMyICppbiwgaW50IGluX3NpemUsIHUzMiAqb3V0LCBpbnQgb3V0X3NpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo1NzU6c3RhdGljIGludCByZWNsYWltX3BhZ2VzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBmdW5jX3ZoY2FfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTU3Ni1cXHRcXHRcXHQgaW50IG5wYWdlcywgaW50ICpuY2xhaW1lZCwgYm9vbCBldmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02MDYtXFx0XFx0ICAgICAgbWx4NV9wYWdlX21ndF9tb2RlX2lzX3ZoY2FfaWQoZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjYwNzpcXHRlcnIgPSByZWNsYWltX3BhZ2VzX2NtZChkZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dGxlbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOC1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOS1cXHRcXHRucGFnZXMgPSBNTFg1X0dFVChtYW5hZ2VfcGFnZXNfaW4sIGluLCBpbnB1dF9udW1fZW50cmllcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjYxMDpcXHRcXHRkZXYtXFx1MDAzZXByaXYucmVjbGFpbV9wYWdlc19kaXNjYXJkICs9IG5wYWdlcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNjExLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYz02NDM9c3RhdGljIHZvaWQgcGFnZXNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02NTEtXFx0ZWxzZSBpZiAocmVxLVxcdTAwM2VucGFnZXMgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo2NTI6XFx0XFx0ZXJyID0gcmVjbGFpbV9wYWdlcyhkZXYsIHJlcS1cXHUwMDNlZnVuY19pZCwgLTEgKiByZXEtXFx1MDAzZW5wYWdlcywgTlVMTCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNjUzLVxcdFxcdFxcdFxcdCAgICB0cnVlLCByZXEtXFx1MDAzZWVjX2Z1bmN0aW9uKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYz04MzA9c3RhdGljIGludCBtbHg1X3JlY2xhaW1fcm9vdF9wYWdlcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTg0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6ODQyOlxcdFxcdGVyciA9IHJlY2xhaW1fcGFnZXMoZGV2LCBmdW5jX3ZoY2FfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTg0My1cXHRcXHRcXHRcXHQgICAgb3B0aW1hbF9yZWNsYWltZWRfcGFnZXMoKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy04NDYtXFx0XFx0XFx0bWx4NV9jb3JlX3dhcm4oZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo4NDc6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJyZWNsYWltX3BhZ2VzIGVyciAoJWQpIGZ1bmNfdmhjYV9pZD0weCV4IGVjX2Z1bmM9MHgleFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ4LVxcdFxcdFxcdFxcdCAgICAgICBlcnIsIGZ1bmNfdmhjYV9pZCwgZWNfZnVuY3Rpb24pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oPTU3Mz1zdHJ1Y3QgbWx4NV9wcml2IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODctXFx0dTMyXFx0XFx0XFx0Z2l2ZV9wYWdlc19kcm9wcGVkO1xcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaDo1ODg6XFx0dTMyXFx0XFx0XFx0cmVjbGFpbV9wYWdlc19kaXNjYXJkO1xcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODktXFx0ZW51bSBtbHg1X3BhZ2VfbWd0X21vZGVcXHRwYWdlX21ndF9tb2RlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9MzQ1NT1zdHJ1Y3QgbWx4NV9pZmNfZHRvcl9yZWdfYml0cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0zNDc1LVxcbmluY2x1ZGUvbGludXgvbWx4NS9tbHg1X2lmYy5oOjM0NzY6XFx0c3RydWN0IG1seDVfaWZjX2RlZmF1bHRfdGltZW91dF9iaXRzIHJlY2xhaW1fcGFnZXNfdG87XFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzQ3Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oPTEwODE9dm9pZCAqc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoZ2ZwX3QgbWFzayk7XFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTA4MjppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpO1xcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTEwODMtdm9pZCBzbnBfZnJlZV9maXJtd2FyZV9wYWdlKHZvaWQgKmFkZHIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTExNT1zdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC0xMTE5LVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjExMjA6c3RhdGljIGlubGluZSBpbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTEyMS17XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD00MDk9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX3dyaXRlX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtNDMxLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjQzMjpUUkFDRV9FVkVOVChtbV92bXNjYW5fcmVjbGFpbV9wYWdlcyxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC00MzMtXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI3MS1cXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MjcyOlxcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9kYW1vbi9wYWRkci5jLTI3My1cXHRjb25kX3Jlc2NoZWQoKTtcXG4tLVxcbm1tL2ludGVybmFsLmg9MTIwNT1leHRlcm4gdW5zaWduZWQgbG9uZyAgX19tdXN0X2NoZWNrIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTIwOC1cXG5tbS9pbnRlcm5hbC5oOjEyMDk6dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpO1xcbm1tL2ludGVybmFsLmgtMTIxMC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNDQyLVxcdFxcdGlmIChwYWdlb3V0KVxcbm1tL21hZHZpc2UuYzo0NDM6XFx0XFx0XFx0cmVjbGFpbV9wYWdlcyhcXHUwMDI2Zm9saW9fbGlzdCk7XFxubW0vbWFkdmlzZS5jLTQ0NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21hZHZpc2UuYy01NjEtXFx0aWYgKHBhZ2VvdXQpXFxubW0vbWFkdmlzZS5jOjU2MjpcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9tYWR2aXNlLmMtNTYzLVxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjE1Mz1zdGF0aWMgdW5zaWduZWQgaW50IHJlY2xhaW1fZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMjE3Mi1cXHR9XFxubW0vdm1zY2FuLmM6MjE3MzpcXHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MubnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCk7XFxubW0vdm1zY2FuLmMtMjE3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTIxNzctXFxubW0vdm1zY2FuLmM6MjE3ODp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG5tbS92bXNjYW4uYy0yMTc5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MjYuNjE3MTUwOTAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjk1NzE4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlcmFjdGlvbiBvZiBQYWdlIFJlY2xhaW0gYW5kIE1HTFJVKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHJlY2xhaW1fcGFnZXNgIGlzbid0IHN0YXRpYyBhbmQgaXMgY2FsbGVkIGJ5IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGFuZCBgZGFtb25fcGFfcGFnZW91dGAuIEhvd2V2ZXIsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgZnVuY3Rpb25zIGxpa2UgYHNjYW5fZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYGV2aWN0X2ZvbGlvc2AsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AsIHdoaWNoIGFyZSBhbGwgZGVlcGx5IGludm9sdmVkIGluIE1HTFJVLiBUaGlzIGlzIGludGVyZXN0aW5nLlxuXG5Ob3csIGByZWNsYWltX3BhZ2VzYCBmdXJ0aGVyIGNhbGxzIGByZWNsYWltX2ZvbGlvX2xpc3RgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAuIEFoLCB0aGVyZSdzIHRoZSBkaXN0aW5jdGlvbiEgYHNocmlua19mb2xpb19saXN0YCBpcyB0aGUgYWN0aXZlL2luYWN0aXZlIExSVSByZWNsYWltIHBhdGgsIHdoaWNoIGlzbid0IE1HTFJVIGRpcmVjdGx5LiBNR0xSVSB1c2VzIGBldmljdF9mb2xpb3NgLCB3aGljaCAqaW50ZXJuYWxseSogY2FsbHMgYHNocmlua19mb2xpb19saXN0YC4gQW5kLCBgbWFkdmlzZV9wYWdlb3V0YCBjYWxscyBgcmVjbGFpbV9wYWdlc2AsIGxlYWRpbmcgYmFjayB0byBgcmVjbGFpbV9mb2xpb19saXN0YC4gU28sIGByZWNsYWltX3BhZ2VzYCBpdHNlbGYgaXNuJ3QgdXNpbmcgTUdMUlUgZGlyZWN0bHk7IGl0J3Mgc2ltcGx5IHJlY2xhaW1pbmcgdGhlIHNwZWNpZmljIGZvbGlvcyBwYXNzZWQgdG8gaXQuIEl0IGlzIE1HTFJVIHRoYXQgYWN0dWFsbHkgbWFrZXMgdGhlIHBhZ2UgcmVwbGFjZW1lbnQgZGVjaXNpb25zLCBkZXRlcm1pbmluZyAqd2hpY2gqIHBhZ2VzIHRvIHJlY2xhaW0uXG5cblNvLCB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciBNR0xSVSBmdW5jdGlvbmFsaXR5IGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgc2hyaW5rIHRoZSBMUlUgbGlzdHMsIHNwZWNpZmljYWxseSBgc2hyaW5rX2xydXZlY2AuIFRoYXTigJlzIGl0ISBUaGF0J3MgdGhlIGVudHJ5IHBvaW50ISBTbyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQuIEkgYW0gZ29pbmcgdG8gdXNlOlxuXG4qICAgYHRyeV90b19mcmVlX3BhZ2VzYFxuKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYFxuKiAgIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYFxuKiAgIGBzaHJpbmtfYWxsX21lbW9yeWBcblxuUmlnaHQsIGxldCdzIGRvdWJsZS1jaGVjayBhYm91dCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBhdmFpbGFibGUgd2hlbiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBBIHF1aWNrIGxvb2sgYXQgYG1tL3Ztc2Nhbi5jYCBzaG93cyBpdOKAmXMgdGhlcmUsIGFuZCBpdCBkb2VzIGluZGVlZCBkZXBlbmQgb24gYENPTkZJR19NRU1DR2AuIEp1c3QgdG8gYmUgc2FmZSwgSeKAmWxsIGFkZCBgTUVNQ0dgIHRvIGBFbmFibGVDb25maWdzYCBldmVuIHRob3VnaCBpdCdzIHVzdWFsbHkgZW5hYmxlZCBhbnl3YXkuIEFsd2F5cyBiZXR0ZXIgdG8gYmUgZXhwbGljaXQuIE9rYXksIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBjb25maXJtIHRoYXQgZXZlcnl0aGluZyBpcyBhcyBleHBlY3RlZCByZWdhcmRpbmcgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MDozMy45NDY3MjU3NzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjgwMzA6XFx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbjgwMzE6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcXFwic3dhcHBpbmVzcz0lZFxcXCJ9LFxcbjgwMzI6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXFxcInN3YXBwaW5lc3M9bWF4XFxcIn0sXFxuODAzMzpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG44MDM0OlxcdH07XFxuODAzNTpcXHRcXG44MDM2OlxcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG44MDM3OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG44MDM4OlxcdHtcXG44MDM5OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG44MDQwOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcXG44MDQxOlxcdFxcdGludCBzd2FwcGluZXNzID0gLTE7XFxuODA0MjpcXHRcXHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XFxuODA0MzpcXHRcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuODA0NDpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuODA0NTpcXHRcXG44MDQ2OlxcdFxcdGlmICghYnVmIHx8ICghbWVtY2cgXFx1MDAyNlxcdTAwMjYgIXBnZGF0KSB8fCAobWVtY2cgXFx1MDAyNlxcdTAwMjYgcGdkYXQpKVxcbjgwNDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODA0ODpcXHRcXG44MDQ5OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjMzLjk0NzAwNDAxOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk4OTI1ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEF2YWlsYWJpbGl0eSBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJdCdzIGRhd25pbmcgb24gbWUgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgbWlnaHQgKm5vdCogYmUgZ3VhcmRlZCBieSB0aGF0IGAjaWZkZWYgQ09ORklHX01FTUNHYCBkaXJlY3RpdmUuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gU28sIGxldCdzIGV4cGxvcmUgd2hldGhlciBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYWNjZXNzaWJsZSBldmVuIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuXG5cbkhtbSwgaXQgdGFrZXMgYSBgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYCBhcmd1bWVudCwgd2hpY2ggaXMgdGhlIGdpdmVhd2F5LiBIb3dldmVyLCBpZiBgQ09ORklHX01FTUNHYCBpcyBvZmYsIHRoZSBrZXJuZWwgKnN0aWxsKiBkZWNsYXJlcyBgc3RydWN0IG1lbV9jZ3JvdXBgLCByaWdodD8gSXQgbWlnaHQgYmUgYW4gb3BhcXVlIHN0cnVjdCBvciBwb3NzaWJseSBhbiBlbXB0eSBzdHJ1Y3QuIEkgbmVlZCB0byBjb25maXJtIGhvdyBpdCdzIGhhbmRsZWQgaW4gdGhhdCBzY2VuYXJpby5cblxuQWxyaWdodCwgbGV0J3MgY3V0IHRoZSBjaGFzZS4gSSBuZWVkIHRvIHJ1biBhIHF1aWNrIHNlYXJjaCBmb3IgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHRvIHVuZGVyc3RhbmQgdGhlIHRydWUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQnbGwgY2xlYXIgdXAgYW55IHBvdGVudGlhbCBjb25mdXNpb24gYW5kIGdpdmUgbWUgYSBjb25jcmV0ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDEyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MzguMTQ1OTMyNDEzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwNjAxNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4jaWZkZWYgQ09ORklHX01FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzQ0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5ibG9jay9ibGstY2dyb3VwLmM9MTUwOD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTE3LVxcdC5leGl0ID0gYmxrY2dfZXhpdCxcXG5ibG9jay9ibGstY2dyb3VwLmM6MTUxODojaWZkZWYgQ09ORklHX01FTUNHXFxuYmxvY2svYmxrLWNncm91cC5jLTE1MTktXFx0LypcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NDM9c3RhdGljIGJsa19zdGF0dXNfdCBsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg3MS1cXHRcXHRjbWQtXFx1MDAzZWJsa2NnX2NzcyA9IGJpb19ibGtjZ19jc3MocnEtXFx1MDAzZWJpbyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3MjojaWZkZWYgQ09ORklHX01FTUNHXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg3My1cXHRcXHRpZiAoY21kLVxcdTAwM2VibGtjZ19jc3MpIHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuYz0xOT1JT1BUREVTQ19NQVRDSChfcmVmY291bnQsIF9fcGFnZV9yZWZjb3VudCk7XFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jOjIwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMtMjEtSU9QVERFU0NfTUFUQ0gobWVtY2dfZGF0YSwgbWVtY2dfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmg9MTk9c3RydWN0IGlvcHRkZXNjIHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaC0zMS1cXHRhdG9taWNfdCBfX3BhZ2VfcmVmY291bnQ7XFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oOjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmgtMzMtXFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2VmbGFnc19wcm9jX29wcyA9IHtcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTI2Ni1cXG5mcy9wcm9jL3BhZ2UuYzoyNjc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmZzL3Byb2MvcGFnZS5jLTI2OC1zdGF0aWMgc3NpemVfdCBrcGFnZWNncm91cF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjgwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0yODMtXFx0cHJvY19jcmVhdGUoXFxcImtwYWdlZmxhZ3NcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2a3BhZ2VmbGFnc19wcm9jX29wcyk7XFxuZnMvcHJvYy9wYWdlLmM6Mjg0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5mcy9wcm9jL3BhZ2UuYy0yODUtXFx0cHJvY19jcmVhdGUoXFxcImtwYWdlY2dyb3VwXFxcIiwgU19JUlVTUiwgTlVMTCwgXFx1MDAyNmtwYWdlY2dyb3VwX3Byb2Nfb3BzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzAwPXN0cnVjdCBicGZfbWFwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzIwLVxcdHN0cnVjdCBidGYgKmJ0ZjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMyMTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMjItXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0yNzgwPWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzgxLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyNzgyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3ODMtdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oPTUxPXN0cnVjdCBsaXN0X2xydSB7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTUyLVxcdHN0cnVjdCBsaXN0X2xydV9ub2RlXFx0Km5vZGU7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNTQtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9ODI9aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODQtXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjg1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODYtLyoqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02MD1zdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04OT1zdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTktXFx0LypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjk6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzMC1cXHQvKiBzbGFiIHN0YXRzIGZvciBubWkgY29udGV4dCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MjAyPXN0cnVjdCBtZW1fY2dyb3VwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1NS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNTY6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1Ny1cXHQvKiBNRU1DR19LTUVNIGZvciBubWkgY29udGV4dCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjgzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI4NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVxcdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MzU0PWVudW0gb2JqZXh0X2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM2Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozNjg6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM2OS0vKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ3Nj1zdHJ1Y3Qgc2xhYm9ial9leHQge1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE0Nzc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NzgtXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTUwND1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmxydXZlY19saXZlX2xvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTA1LXtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNTA2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTA3LVxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2Mzk9c3RydWN0IHNvY2s7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTY0MDojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTY0MS1leHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgbWVtY2dfc29ja2V0c19lbmFibGVkX2tleTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3Mjc9c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MzItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTczMzojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTczNC1ib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5MTk9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkyOC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTMwLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTQ3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01MS1cXHRfX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1MjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01My1cXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9ODA9c3RydWN0IHBhZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE4Ni1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTg3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTg4LVxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD00MDQ9c3RydWN0IGZvbGlvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MzUtXFx0XFx0XFx0YXRvbWljX3QgX3JlZmNvdW50O1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo0MzY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MzctXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTUyMT1GT0xJT19NQVRDSChfcmVmY291bnQsIF9yZWZjb3VudCk7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjUyMjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTUyMy1GT0xJT19NQVRDSChtZW1jZ19kYXRhLCBtZW1jZ19kYXRhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD01NzY9c3RydWN0IHB0ZGVzYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjA3LVxcdGF0b21pY190IF9fcGFnZV9yZWZjb3VudDtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NjA4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjA5LVxcdHVuc2lnbmVkIGxvbmcgcHRfbWVtY2dfZGF0YTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD02MjI9VEFCTEVfTUFUQ0goX3JlZmNvdW50LCBfX3BhZ2VfcmVmY291bnQpO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo2MjM6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC02MjQtVEFCTEVfTUFUQ0gobWVtY2dfZGF0YSwgcHRfbWVtY2dfZGF0YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTE3NT1zdHJ1Y3QgbW1fc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMzI3LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMzI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTMyOS1cXHRcXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MTItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBiaXRtYXA7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0MTM6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDE0LVxcdFxcdFxcdC8qIHBvaW50cyB0byB0aGUgbWVtY2cgb2YgXFxcIm93bmVyXFxcIiBhYm92ZSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1MDI9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTA1LVxcdG1tLVxcdTAwM2VscnVfZ2VuLmJpdG1hcCA9IDA7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MDY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTA3LVxcdG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnID0gTlVMTDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzY0PXN0cnVjdCBscnV2ZWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTEtI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3OTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkzLVxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE2NjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGdsaXN0X2RhdGEgKmxydXZlY19wZ2RhdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjY1LXtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE2NjY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY2Ny1cXHRyZXR1cm4gbHJ1dmVjLVxcdTAwM2VwZ2RhdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDIxLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDIyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyMy1cXHR1bnNpZ25lZFxcdFxcdFxcdGluX3VzZXJfZmF1bHQ6MTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNTQ4LVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNTQ5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU1MC1cXHRzdHJ1Y3QgbWVtX2Nncm91cFxcdFxcdCptZW1jZ19pbl9vb207XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU1Mi1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU1MzojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NTQtXFx0LyogTnVtYmVyIG9mIHBhZ2VzIHRvIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kOiAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTE2MT1leHRlcm4gdm9pZCBleGVjX21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE2Mi1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTYzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTY0LWV4dGVybiB2b2lkIG1tX3VwZGF0ZV9uZXh0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00NjY9c3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX3Bpbl9yZXN0b3JlKHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NzAtXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ3MTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ3Mi1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1lbV9jZ3JvdXAgKiwgaW50X2FjdGl2ZV9tZW1jZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg9ODI9c3RydWN0IHNocmlua2VyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMDYtXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaDoxMDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMDgtXFx0LyogSUQgaW4gc2hyaW5rZXJfaWRyICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD0yNj1lbnVtIF9zbGFiX2ZsYWdfYml0cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC00NS0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo0NjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNDctXFx0X1NMQUJfQUNDT1VOVCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTIwNC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMDU6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTIwNi0jIGRlZmluZSBTTEFCX0FDQ09VTlRcXHRcXHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfQUNDT1VOVClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oPTcwOD1lbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MjgtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6NzI5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MzAtXFx0S01BTExPQ19DR1JPVVAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00Njc9c3RhdGljIGlubGluZSBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00NzMtI2VuZGlmIC8qIENPTkZJR19TV0FQICovXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDc0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00NzUtdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oPTEzPXN0cnVjdCB2bXByZXNzdXJlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTE4LVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjE5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0yMC1cXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NDM9c3RydWN0IG1lbV9jZ3JvdXA7XFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNDQtXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6NDU6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTQ2LXZvaWQgdm1wcmVzc3VyZShnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHRyZWUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD01NT1leHRlcm4gZW51bSB2bXByZXNzdXJlX2xldmVscyB2bXByZXNzdXJlX2NhbGNfbGV2ZWwodW5zaWduZWQgbG9uZyBzY2FubmVkLFxcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNTctXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6NTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTU5LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHByaW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD01MjI9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp2bV9ldmVudF9uYW1lKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC01MzEtXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaDo1MzI6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTMzLVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtNDYwLVxcdHN0cnVjdCBzb2NrZXRcXHRcXHQqc2tfc29ja2V0O1xcbmluY2x1ZGUvbmV0L3NvY2suaDo0NjE6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbmV0L3NvY2suaC00NjItXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHQqc2tfbWVtY2c7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MjY4Nj1zdGF0aWMgaW5saW5lIGdmcF90IGdmcF9tZW1jZ19jaGFyZ2Uodm9pZClcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNjkwLVxcbmluY2x1ZGUvbmV0L3NvY2suaDoyNjkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjY5Mi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTI3MDI9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2tfdW5kZXJfbWVtb3J5X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA1LVxcbmluY2x1ZGUvbmV0L3NvY2suaDoyNzA2OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwNy1cXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0yMDM9REVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjA5LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjIxMDojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjExLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2JlZ2luLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MjQ5PURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjU1LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjI1NjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjU3LURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MTYwPXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbWNnKGNvbnN0IHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xNjEte1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoxNjI6I2lmZGVmIENPTkZJR19NRU1DR1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xNjMtXFx0aWYgKGMtXFx1MDAzZW9iamNnKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTUwMj1pbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUyNS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTI2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTI3LVxcdFxcdGlmIChtZW1jZ19icGZfZW5hYmxlZCgpKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU0Ny1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTQ4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTQ5LVxcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NjY9dm9pZCBicGZfbWFwX2ZyZWVfaWQoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4NS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0ODY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4Ny1zdGF0aWMgdm9pZCBicGZfbWFwX3NhdmVfbWVtY2coc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NjM3PUJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjM4LVxcdHN0cnVjdCBmaWxlIF9fcmN1ICpleGVfZmlsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTYzOTojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NDAtXFx0c3RydWN0IHRhc2tfc3RydWN0IF9fcmN1ICpvd25lcjtcXG4tLVxcbmtlcm5lbC9leGl0LmM9NDI5PXN0YXRpYyB2b2lkIGNvcmVkdW1wX3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcXG4tLVxcbmtlcm5lbC9leGl0LmMtNDU0LVxcbmtlcm5lbC9leGl0LmM6NDU1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvZXhpdC5jLTQ1Ni0vKiBkcm9wcyB0YXNrbGlzdF9sb2NrIGlmIHN1Y2NlZWRzICovXFxuLS1cXG5rZXJuZWwvZm9yay5jPTkxND1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpkdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpvcmlnLCBpbnQgbm9kZSlcXG4tLVxcbmtlcm5lbC9mb3JrLmMtOTk4LVxcbmtlcm5lbC9mb3JrLmM6OTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvZm9yay5jLTEwMDAtXFx0dHNrLVxcdTAwM2VhY3RpdmVfbWVtY2cgPSBOVUxMO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0xMDUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtbV9jbGVhcl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTA1NC17XFxua2VybmVsL2ZvcmsuYzoxMDU1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvZm9yay5jLTEwNTYtXFx0aWYgKG1tLVxcdTAwM2Vvd25lciA9PSBwKVxcbi0tXFxua2VybmVsL2ZvcmsuYz0xMDYxPXN0YXRpYyB2b2lkIG1tX2luaXRfb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG5rZXJuZWwvZm9yay5jLTEwNjIte1xcbmtlcm5lbC9mb3JrLmM6MTA2MzojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2ZvcmsuYy0xMDY0LVxcdG1tLVxcdTAwM2Vvd25lciA9IHA7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDgte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEwLVxcdGNncm91cF9wYXRoKG1lbWNnLVxcdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xcbi0tXFxubW0vZGVidWcuYz03MD1zdGF0aWMgdm9pZCBfX2R1bXBfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9kZWJ1Zy5jLTk2LVxcbm1tL2RlYnVnLmM6OTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtOTgtXFx0aWYgKGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhKVxcbi0tXFxubW0vZGVidWcuYz0xNzU9dm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vZGVidWcuYy0xODgtI2VuZGlmXFxubW0vZGVidWcuYzoxODk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtMTkwLVxcdFxcdFxcXCJvd25lciAlcHggXFxcIlxcbi0tXFxubW0vZGVidWcuYy0yMTctI2VuZGlmXFxubW0vZGVidWcuYzoyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtMjE5LVxcdFxcdG1tLVxcdTAwM2Vvd25lcixcXG4tLVxcbm1tL2ZvbGlvLmM9MTA2MT12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9mb2xpby5jLTEwNzItXFxubW0vZm9saW8uYzoxMDczOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9mb2xpby5jLTEwNzQtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2NDI9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzQ0LVxcdFxcdFxcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzozNzQ1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9odWdlX21lbW9yeS5jLTM3NDYtXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gZm9saW8tXFx1MDAzZW1lbWNnX2RhdGE7XFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz00NT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl9mbGFncyhzdHJ1Y3QgcGFnZSAqcClcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTY2LSAqL1xcbm1tL2h3cG9pc29uLWluamVjdC5jOjY3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9od3BvaXNvbi1pbmplY3QuYy02OC1zdGF0aWMgdTY0IGh3cG9pc29uX2ZpbHRlcl9tZW1jZztcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jPTE2Mj1zdGF0aWMgaW50IF9faW5pdCBwZm5faW5qZWN0X2luaXQodm9pZClcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5MS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYzoxOTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5My1cXHRkZWJ1Z2ZzX2NyZWF0ZV91NjQoXFxcImNvcnJ1cHQtZmlsdGVyLW1lbWNnXFxcIiwgMDYwMCwgaHdwb2lzb25fZGlyLFxcbi0tXFxubW0va2ZlbmNlL2NvcmUuYz02MTE9c3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy02MzgtXFx0XFx0X19TZXRQYWdlU2xhYihwYWdlKTtcXG5tbS9rZmVuY2UvY29yZS5jOjYzOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0va2ZlbmNlL2NvcmUuYy02NDAtXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTcwNi1cXHRcXHRwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuICsgaSk7XFxubW0va2ZlbmNlL2NvcmUuYzo3MDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2tmZW5jZS9jb3JlLmMtNzA4LVxcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xcbi0tXFxubW0va2ZlbmNlL2NvcmUuYz0xMjQ3PXZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy0xMjUwLVxcbm1tL2tmZW5jZS9jb3JlLmM6MTI1MTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0va2ZlbmNlL2NvcmUuYy0xMjUyLVxcdEtGRU5DRV9XQVJOX09OKG1ldGEtXFx1MDAzZW9ial9leHRzLm9iamNnKTtcXG4tLVxcbm1tL2tmZW5jZS9rZmVuY2UuaD01OT1zdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcXG4tLVxcbm1tL2tmZW5jZS9rZmVuY2UuaC0xMDQtXFx0dTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KFxcdTAwMjZsb2NrKTtcXG5tbS9rZmVuY2Uva2ZlbmNlLmg6MTA1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9rZmVuY2Uva2ZlbmNlLmgtMTA2LVxcdHN0cnVjdCBzbGFib2JqX2V4dCBvYmpfZXh0cztcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9Mjk9c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycV9vZmYsXFxuLS1cXG5tbS9saXN0X2xydS5jLTM5LVxcbm1tL2xpc3RfbHJ1LmM6NDA6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNDEtc3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xcbi0tXFxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTQyMS1cXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00MjMtXFx0aWYgKCpucl90b193YWxrIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKSB7XFxuLS1cXG5tbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxuLS1cXG5tbS9saXN0X2xydS5jLTQ2MS1cXG5tbS9saXN0X2xydS5jOjQ2MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00NjMtc3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2Ny1cXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy02NjktXFx0aWYgKHNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYz02OTI9dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy03MDMtXFxubW0vbGlzdF9scnUuYzo3MDQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNzA1LVxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0yND1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTI3LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cXG5tbS9tZW1jb250cm9sLXYxLmg6Mjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wtdjEuaC0yOS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNC1cXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzItXFxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjAwLVxcdFBHUEdJTixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04MzI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg0Ny1cXG5tbS9tZW1jb250cm9sLmM6ODQ4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtODQ5LS8qXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTE2PXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTkyOC1cXG5tbS9tZW1jb250cm9sLmM6OTI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtOTMwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTA0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExMTEtXFxubW0vbWVtY29udHJvbC5jOjExMTI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xMTEzLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE3MTI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MTctXFxubW0vbWVtY29udHJvbC5jOjE3MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzE5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzM4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTc4NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSsrKSB7XFxubW0vbWVtY29udHJvbC5jOjE3ODU6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzg2LVxcdFxcdGlmIChtZW1jZ192bV9ldmVudF9zdGF0W2ldID09IFBHUEdJTiB8fFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE4MzY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODU3LVxcdFxcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX1NXQVBfTUFYXSkpO1xcbm1tL21lbWNvbnRyb2wuYzoxODU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTg1OS1cXHRlbHNlIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NzAtXFxubW0vbWVtY29udHJvbC5jOjI4NzE6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0yODcyLXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMwOTA9c3RydWN0IG9ial9jZ3JvdXAgKmdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTAwLVxcbm1tL21lbWNvbnRyb2wuYzozMTAxOiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtMzEwMi1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9rbWVtX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MjEyPW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyMzMtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyMzQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjM1LVxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MzkuODM2NTM5MDc2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY3NjE1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBgdm1zY2FuLmNgKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSSB0aG91Z2h0IEkgcmVtZW1iZXJlZCBzZWVpbmcgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGRlZmluZWQgaW4gYG1tL3Ztc2Nhbi5jYCwgYnV0IHdpdGhvdXQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBgQ09ORklHX01FTUNHYCBzZXR0aW5nLiBUaGF0IHNlZW1zLi4uIG9kZC4gSSB3YXMgc3VyZSB0aGF0IHJlbGF0ZWQgZmVhdHVyZXMgd2VyZSBndWFyZGVkIGJ5IHRoYXQgY29uZmlndXJhdGlvbiBmbGFnLiBMZXQgbWUgcXVpY2tseSBqdW1wIGJhY2sgaW50byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGFub3RoZXIgbG9vayBhcm91bmQgbGluZSA4MDM2LiBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBkaWRuJ3QgbWlzaW50ZXJwcmV0IHRoYXQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRob3NlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWNsYWltIG1lY2hhbmlzbXMgYW5kIG1lbW9yeSBjb250cm9sIGdyb3VwcywgYW5kIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGhvdXQgdGhlIGBDT05GSUdfTUVNQ0dgIGd1YXJkIGNvdWxkIGluZGljYXRlIGEgcHJvYmxlbSBvciBhbiBvdmVyc2lnaHQgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6NDMuOTgzMzAzODcyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MDIwOlxcdFxcdHJldHVybiAwO1xcbjgwMjE6XFx0fVxcbjgwMjI6XFx0XFxuODAyMzpcXHQjZW5kaWZcXG44MDI0OlxcdFxcbjgwMjU6XFx0ZW51bSB7XFxuODAyNjpcXHRcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcXG44MDI3OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxcbjgwMjg6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcXG44MDI5OlxcdH07XFxuODAzMDpcXHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuODAzMTpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFxcXCJzd2FwcGluZXNzPSVkXFxcIn0sXFxuODAzMjpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcXFwic3dhcHBpbmVzcz1tYXhcXFwifSxcXG44MDMzOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fTlVMTCwgTlVMTCB9LFxcbjgwMzQ6XFx0fTtcXG44MDM1OlxcdFxcbjgwMzY6XFx0aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbjgwMzc6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbjgwMzg6XFx0e1xcbjgwMzk6XFx0XFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbjgwNDA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xcbjgwNDE6XFx0XFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcXG44MDQyOlxcdFxcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcXG44MDQzOlxcdFxcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcXG44MDQ0OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcXG44MDQ1OlxcdFxcbjgwNDY6XFx0XFx0aWYgKCFidWYgfHwgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcXHUwMDI2XFx1MDAyNiBwZ2RhdCkpXFxuODA0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDQ4OlxcdFxcbjgwNDk6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG44MDUwOlxcdFxcbjgwNTE6XFx0XFx0b2xkX2J1ZiA9IGJ1ZjtcXG44MDUyOlxcdFxcdG5yX3RvX3JlY2xhaW0gPSBtZW1wYXJzZShidWYsIFxcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xcbjgwNTM6XFx0XFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxcbjgwNTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODA1NTpcXHRcXG44MDU2OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuODA1NzpcXHRcXG44MDU4OlxcdFxcdHdoaWxlICgoc3RhcnQgPSBzdHJzZXAoXFx1MDAyNmJ1ZiwgXFxcIiBcXFwiKSkgIT0gTlVMTCkge1xcbjgwNTk6XFx0XFx0XFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxcbjgwNjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuODA2MTpcXHRcXHRcXHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XFxuODA2MjpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XFxuODA2MzpcXHRcXHRcXHRcXHRpZiAobWF0Y2hfaW50KFxcdTAwMjZhcmdzWzBdLCBcXHUwMDI2c3dhcHBpbmVzcykpXFxuODA2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDY1OlxcdFxcdFxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2MgTUlOX1NXQVBQSU5FU1MgfHxcXG44MDY2OlxcdFxcdFxcdFxcdCAgICBzd2FwcGluZXNzIFxcdTAwM2UgTUFYX1NXQVBQSU5FU1MpXFxuODA2NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDY4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjgwNjk6XFx0XFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6NDMuOTgzNjQ3NjAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDgzMzUxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgTWVtb3J5IENncm91cCBGcmVlaW5nIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uICppcyogYXZhaWxhYmxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUuLi4gdGhlIG5hbWUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGRlZmluaXRlbHkgc3VnZ2VzdHMgbWVtb3J5IGNncm91cCBpbnRlcmFjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIHNlZSBpZiBpdCdzIHRpZWQgdG8gdGhlIGBDT05GSUdfTUVNQ0dgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBLbm93aW5nIHdoZXJlIGl0J3MgZGVmaW5lZCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgc2NvcGUuIExldCdzIHN0YXJ0IGJ5IGZpbmRpbmcgaXQ7IHRoZSBjb2RlIHBhdGggaXMgYG1tL3Ztc2Nhbi5jYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDY5MzMsIGFzIEkgcmVjYWxsLiBOb3csIGxldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgaWYgbWVtb3J5IGNncm91cHMgYXJlIGVuYWJsZWQsIHdoaWNoIEkgc3VzcGVjdCBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1MDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjQ3LjYzMTk4NjQ5NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjkyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjkyMDpcXHRcXHQgKiBpZiB3ZSBkb24ndCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcXG42OTIxOlxcdFxcdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAncyBhcyB3ZWxsLiBXZSBoYWNrXFxuNjkyMjpcXHRcXHQgKiB0aGUgcHJpb3JpdHkgYW5kIG1ha2UgaXQgemVyby5cXG42OTIzOlxcdFxcdCAqL1xcbjY5MjQ6XFx0XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFxcdTAwMjZzYyk7XFxuNjkyNTpcXHRcXG42OTI2OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9lbmQoc2MubnJfcmVjbGFpbWVkLCBtZW1jZyk7XFxuNjkyNzpcXHRcXG42OTI4OlxcdFxcdCpucl9zY2FubmVkID0gc2MubnJfc2Nhbm5lZDtcXG42OTI5OlxcdFxcbjY5MzA6XFx0XFx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcXG42OTMxOlxcdH1cXG42OTMyOlxcdFxcbjY5MzM6XFx0dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG42OTM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuNjkzNTpcXHRcXHRcXHRcXHRcXHRcXHQgICBnZnBfdCBnZnBfbWFzayxcXG42OTM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXFxuNjkzNzpcXHRcXHRcXHRcXHRcXHRcXHQgICBpbnQgKnN3YXBwaW5lc3MpXFxuNjkzODpcXHR7XFxuNjkzOTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcXG42OTQwOlxcdFxcdHVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZztcXG42OTQxOlxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuNjk0MjpcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXFxuNjk0MzpcXHRcXHRcXHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzLFxcbjY5NDQ6XFx0XFx0XFx0LmdmcF9tYXNrID0gKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxcbjY5NDU6XFx0XFx0XFx0XFx0XFx0KEdGUF9ISUdIVVNFUl9NT1ZBQkxFIFxcdTAwMjYgfkdGUF9SRUNMQUlNX01BU0spLFxcbjY5NDY6XFx0XFx0XFx0LnJlY2xhaW1faWR4ID0gTUFYX05SX1pPTkVTIC0gMSxcXG42OTQ3OlxcdFxcdFxcdC50YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnLFxcbjY5NDg6XFx0XFx0XFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxcbjY5NDk6XFx0XFx0XFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxcbjY5NTA6XFx0XFx0XFx0Lm1heV91bm1hcCA9IDEsXFxuNjk1MTpcXHRcXHRcXHQubWF5X3N3YXAgPSAhIShyZWNsYWltX29wdGlvbnMgXFx1MDAyNiBNRU1DR19SRUNMQUlNX01BWV9TV0FQKSxcXG42OTUyOlxcdFxcdFxcdC5wcm9hY3RpdmUgPSAhIShyZWNsYWltX29wdGlvbnMgXFx1MDAyNiBNRU1DR19SRUNMQUlNX1BST0FDVElWRSksXFxuNjk1MzpcXHRcXHR9O1xcbjY5NTQ6XFx0XFx0LypcXG42OTU1OlxcdFxcdCAqIFRyYXZlcnNlIHRoZSBaT05FTElTVF9GQUxMQkFDSyB6b25lbGlzdCBvZiB0aGUgY3VycmVudCBub2RlIHRvIHB1dFxcbjY5NTY6XFx0XFx0ICogZXF1YWwgcHJlc3N1cmUgb24gYWxsIHRoZSBub2Rlcy4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0XFxuNjk1NzpcXHRcXHQgKiB0aGUgcmVjbGFpbSBkb2VzIG5vdCBiYWlsIG91dCBlYXJseS5cXG42OTU4OlxcdFxcdCAqL1xcbjY5NTk6XFx0XFx0c3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobnVtYV9ub2RlX2lkKCksIHNjLmdmcF9tYXNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6NDcuNjMyMjY3OTY1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjI0MTI1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipEZWNvZGluZyB0aGUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIEZ1bmN0aW9uKiouICBIb2xkIG9uIGEgc2Vjb25kLCBpc24ndCB0aGF0IGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBmdW5jdGlvbiBkZWZpbmVkICppbnNpZGUqIGFuIGAjaWZkZWYgQ09ORklHX01FTUNHYCBwcmVwcm9jZXNzb3IgYmxvY2s/ICBUaGF0IHdvdWxkIG1lYW4gaXQncyBvbmx5IGFjdGl2ZSBpZiBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcywgc28gSSB3aWxsIGRvdWJsZS1jaGVjay4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA2ODkwLCBqdXN0IHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBodW5jaC4gIFVuZGVyc3RhbmRpbmcgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBjcnVjaWFsIGZvciBtZSwgZ2l2ZW4gdGhlIG1vZHVsYXIgbmF0dXJlIG9mIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBrZXkgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHMgYXJlIGludGVncmF0ZWQsIGFuZCBob3cgdGhhdCBjb2RlIHBhdGggYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MDo1MS40NTQ2ODM1ODZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY4ODA6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luKHNjLmdmcF9tYXNrLCBvcmRlciwgTlVMTCk7XFxuNjg4MTpcXHRcXG42ODgyOlxcdFxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbjY4ODM6XFx0XFxuNjg4NDpcXHRcXHR0cmFjZV9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kKG5yX3JlY2xhaW1lZCwgTlVMTCk7XFxuNjg4NTpcXHRcXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xcbjY4ODY6XFx0XFxuNjg4NzpcXHRcXHRyZXR1cm4gbnJfcmVjbGFpbWVkO1xcbjY4ODg6XFx0fVxcbjY4ODk6XFx0XFxuNjg5MDpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuNjg5MTpcXHRcXG42ODkyOlxcdC8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG42ODkzOlxcdHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuNjg5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuNjg5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LFxcbjY4OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZClcXG42ODk3OlxcdHtcXG42ODk4OlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuNjg5OTpcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MDo1MS40NTUxMTQyODZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU3MjE3MzA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTUdMUlUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgdGhhdCB0aGUgY3J1Y2lhbCBtb2RpZmljYXRpb25zIGFyZSBpbmRlZWQgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19NRU1DR2AgYmxvY2suIFRoYXQgc2V0dGxlcyBpdDsgSSBuZWVkIHRvIGFkZCBgTUVNQ0dgIHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBxdWVzdGlvbiB0aGVyZS5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2gncyBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCBhbmQgcmlnaHRseSBzby4gVGhlIGNoYW5nZXMgdG91Y2ggdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMg4oCTIGEgY29yZSBwaWVjZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGluY2x1ZGVzIGFsdGVyYXRpb25zIHRvIGhvdyBnZW5lcmF0aW9uIHNlcXVlbmNlcyBpbmNyZW1lbnQsIGZvbGlvIHNjYW5uaW5nIGFuZCBpc29sYXRpb24sIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgYWdpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgYWZmZWN0aW5nIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgd2hpY2ggKmRlZmluaXRlbHkqIGp1c3RpZmllcyBmdXp6aW5nLlxuXG5NeSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIEFuZCBmb3IgYEVuYWJsZUNvbmZpZ3NgLCBJJ2xsIGJlIGluY2x1ZGluZyBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgbm93IGBNRU1DR2AuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYHNocmlua19hbGxfbWVtb3J5YC4uLiB0aGF0J3MgcmluZ2luZyBhIGJlbGwuIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoYXQgb25lLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGFkIGl0IGluIHRoZSAnc2FmZScgbGlzdCwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBjb250ZXh0LiBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBhZ2FpbnN0IGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3NzMxLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGFueSBkZXBlbmRlbmNpZXMgdGhhdCB3b3VsZCBzaGlmdCB0aGlzIGludG8gdGhlICdzYWZlJyB6b25lLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMDk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6NTcuMDI3MjkwMzM5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NzIwOlxcdH1cXG43NzIxOlxcdFxcbjc3MjI6XFx0I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxcbjc3MjM6XFx0LypcXG43NzI0OlxcdCAqIFRyeSB0byBmcmVlIGBucl90b19yZWNsYWltJyBvZiBtZW1vcnksIHN5c3RlbS13aWRlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2ZcXG43NzI1OlxcdCAqIGZyZWVkIHBhZ2VzLlxcbjc3MjY6XFx0ICpcXG43NzI3OlxcdCAqIFJhdGhlciB0aGFuIHRyeWluZyB0byBhZ2UgTFJVcyB0aGUgYWltIGlzIHRvIHByZXNlcnZlIHRoZSBvdmVyYWxsXFxuNzcyODpcXHQgKiBMUlUgb3JkZXIgYnkgcmVjbGFpbWluZyBwcmVmZXJlbnRpYWxseVxcbjc3Mjk6XFx0ICogaW5hY3RpdmUgXFx1MDAzZSBhY3RpdmUgXFx1MDAzZSBhY3RpdmUgcmVmZXJlbmNlZCBcXHUwMDNlIGFjdGl2ZSBtYXBwZWRcXG43NzMwOlxcdCAqL1xcbjc3MzE6XFx0dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuNzczMjpcXHR7XFxuNzczMzpcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbjc3MzQ6XFx0XFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBucl90b19yZWNsYWltLFxcbjc3MzU6XFx0XFx0XFx0LmdmcF9tYXNrID0gR0ZQX0hJR0hVU0VSX01PVkFCTEUsXFxuNzczNjpcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxLFxcbjc3Mzc6XFx0XFx0XFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxcbjc3Mzg6XFx0XFx0XFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxcbjc3Mzk6XFx0XFx0XFx0Lm1heV91bm1hcCA9IDEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjU3LjAyODA0Njk3OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ0NDc1OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzZWN0aW9uLCBhbmQgaXQncyBkZWZpbml0ZWx5IG5lc3RsZWQgd2l0aGluIGAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OYC4gVGhhdCdzIGdvb2QgdG8ga25vdywgYnV0IEkgZG9uJ3QgdGhpbmsgSSBuZWVkIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgSElCRVJOQVRJT05gIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBnZXQgdGhlIGNvZGUgSSBuZWVkIHRvIHJ1bi4gU28sIG15IGxpc3Qgd2lsbCBqdXN0IGluY2x1ZGUgdGhvc2U6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgbGV0J3MganVzdCBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBtaXNzaW5nLiBBaCwgaGVyZSB3ZSBnbywgbG9va2luZyBhdCBgQ09ORklHX0xSVV9HRU5gLiBJIHNlZSB0aGF0IGl0IGRlcGVuZHMgb24gYE1NVWAsIGJ1dCB0aGF0J3MgYSBuZWFyIGNlcnRhaW50eSwgYXMgYE1NVWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHZpcnR1YWxseSBhbGwgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlcy4gQW5kIHRoZW4gYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGRlcGVuZHMgb24gYExSVV9HRU5gLCBzbyBpZiBgTFJVX0dFTmAgaXMgdGhlcmUsIHRoZSBlbmFibGVkIHZlcnNpb24gc2hvdWxkIGJlIHRvby4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHNob3VsZCBiZSBhbGwgSSBuZWVkLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY2xhcmlmaWVkLCBJJ20gcmVhZHkgdG8gY3JhZnQgdGhlIHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzAyMiwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MTowMi42NzI1MjYyOTFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjIwNDYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7ffwc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 15:25:46 +0000 UTC FinishedAt: 2026-08-01 15:51:03 +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": "99cf84da3838f1613deed700ddfb033163b28106", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "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": "99cf84da3838f1613deed700ddfb033163b28106", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "8f123cc5-1eb3-4cd3-861b-89f025e9ac3e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_pages", "try_to_free_mem_cgroup_pages", "user_proactive_reclaim" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgdGhlIG1pbmltdW0gZ2VuZXJhdGlvbiBzZXF1ZW5jZSBpcyBpbmNyZW1lbnRlZCwgaG93IGZvbGlvcyBhcmUgc2Nhbm5lZCBhbmQgaXNvbGF0ZWQsIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgcnVubmluZyBhZ2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDlkMzg4YzljYmU3MjVmNDJiNTBjZWU5ZTUyNjE0OTUzYjIzNWM0MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTU6NDg6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGEyNmM4Yjg1NTIyMjIuLjIzM2QyMDA2YTU0MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNTUyLDEwICYjNDM7NTUyLDggQEAgZW51bSB7XG4gICogVGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gbnVtYmVyIGlzIHN0b3JlZCBpbiBtYXhfc2VxIGZvciBib3RoIGFub24gYW5kIGZpbGVcbiAgKiB0eXBlcyBhcyB0aGV5IGFyZSBhZ2VkIG9uIGFuIGVxdWFsIGZvb3RpbmcuIFRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBudW1iZXJzIGFyZVxuICAqIHN0b3JlZCBpbiBtaW5fc2VxW10gc2VwYXJhdGVseSBmb3IgYW5vbiBhbmQgZmlsZSB0eXBlcyBzbyB0aGF0IHRoZXkgY2FuIGJlXG4tICogaW5jcmVtZW50ZWQgaW5kZXBlbmRlbnRseS4gSWRlYWxseSBtaW5fc2VxW10gYXJlIGtlcHQgaW4gc3luYyB3aGVuIGJvdGggYW5vblxuLSAqIGFuZCBmaWxlIHR5cGVzIGFyZSBldmljdGFibGUuIEhvd2V2ZXIsIHRvIGFkYXB0IHRvIHNpdHVhdGlvbnMgbGlrZSBleHRyZW1lXG4tICogc3dhcHBpbmVzcywgdGhleSBhcmUgYWxsb3dlZCB0byBiZSBvdXQgb2Ygc3luYyBieSBhdCBtb3N0XG4tICogTUFYX05SX0dFTlMtTUlOX05SX0dFTlMtMS5cbiYjNDM7ICogaW5jcmVtZW50ZWQgaW5kZXBlbmRlbnRseS4gRm9yIGJvdGggZmlsZSBhbmQgYW5vbnltb3VzIG1lbW9yeSwgdGhlIG1pbmltdW1cbiYjNDM7ICogZ2VuZXJhdGlvbiBtdXN0IGJlIGF0IGxlYXN0IE1JTl9OUl9HRU5TLlxuICAqXG4gICogVGhlIG51bWJlciBvZiBwYWdlcyBpbiBlYWNoIGdlbmVyYXRpb24gaXMgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCB0aGVyZWZvcmVcbiAgKiBjYW4gYmUgdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hlbiByZXNldF9iYXRjaF9zaXplKCkgaXMgcGVuZGluZy5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAxN2QyYjc5M2NiZmM0Li4zOTZlNDdlMzI3YmM4IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMzk4MiwxNiAmIzQzOzM5ODIsNiBAQCBzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdGlmICghc2VxX2luY19mbGFnKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xuLVx0aWYgKHN3YXBwaW5lc3MgXHUwMDI2XHUwMDI2IHN3YXBwaW5lc3MgXHUwMDNjPSBNQVhfU1dBUFBJTkVTUykge1xuLVx0XHR1bnNpZ25lZCBsb25nIHNlcSA9IGxydWdlbi1cdTAwM2VtYXhfc2VxIC0gTUlOX05SX0dFTlM7XG4tXG4tXHRcdGlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXHUwMDNlIHNlcSBcdTAwMjZcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0ZJTEVdIFx1MDAzYyBzZXEpXG4tXHRcdFx0bWluX3NlcVtMUlVfR0VOX0FOT05dID0gc2VxO1xuLVx0XHRlbHNlIGlmIChtaW5fc2VxW0xSVV9HRU5fRklMRV0gXHUwMDNlIHNlcSBcdTAwMjZcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0FOT05dIFx1MDAzYyBzZXEpXG4tXHRcdFx0bWluX3NlcVtMUlVfR0VOX0ZJTEVdID0gc2VxO1xuLVx0fVxuLVxuIFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xuIFx0XHRpZiAobWluX3NlcVt0eXBlXSBcdTAwM2M9IGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTQ3MjcsNyAmIzQzOzQ3MTcsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxuLVx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHApXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHAsXG4mIzQzO1x0XHQgICAgICAgYm9vbCAqZXhoYXVzdGVkKVxuIHtcbiBcdGludCBpO1xuIFx0aW50IGdlbjtcbkBAIC00NzM4LDE1ICYjNDM7NDcyOSwxOCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0aW50IHNraXBwZWQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtaW5fc2VxID0gbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV07XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiBcdTAwM2UgTUFYX0xSVV9CQVRDSCk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpO1xuIFxuLVx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpXG4mIzQzO1x0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpIHtcbiYjNDM7XHRcdCpleGhhdXN0ZWQgPSB0cnVlO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cbiYjNDM7bmV4dF9nZW46XG4mIzQzO1x0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxKTtcbiBcdGZvciAoaSA9IE1BWF9OUl9aT05FUzsgaSBcdTAwM2UgMDsgaS0tKSB7XG4gXHRcdExJU1RfSEVBRChtb3ZlZCk7XG4gXHRcdGludCBza2lwcGVkX3pvbmUgPSAwO1xuQEAgLTQ3ODgsNiAmIzQzOzQ3ODIsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgZ2VuZXJhdGlvbiBpcyBleGhhdXN0ZWQgYWNyb3NzIGFsbCB6b25lcywgYnV0IHRoZSBzY2FuXG4mIzQzO1x0ICogdGFyZ2V0IGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC4gQ29udGludWUgd2l0aCB0aGUgbmV4dFxuJiM0MztcdCAqIHJlY2xhaW1hYmxlIGdlbmVyYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGkgPT0gMCBcdTAwMjZcdTAwMjYgJiM0MzsmIzQzO21pbl9zZXEgJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNjPSBscnVnZW4tXHUwMDNlbWF4X3NlcSlcbiYjNDM7XHRcdGdvdG8gbmV4dF9nZW47XG4mIzQzO1xuIFx0aXRlbSA9IFBHU0NBTl9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgaXNvbGF0ZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzb3J0ZWQpO1xuQEAgLTQ3OTYsNiAmIzQzOzQ3OTgsMTEgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxuIFx0XHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBzY2FuIGV4aGF1c3RlZCB0aGUgcmVjbGFpbWFibGUgbGlzdHMgYmVmb3JlIHJlYWNoaW5nIHRoZVxuJiM0MztcdCAqIHNjYW4gdGFyZ2V0IG9yIGFjY3VtdWxhdGluZyBlbm91Z2ggaXNvbGF0ZWQgZm9saW9zLlxuJiM0MztcdCAqL1xuJiM0MztcdCpleGhhdXN0ZWQgPSByZW1haW5pbmcgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlzb2xhdGVkIFx1MDAzYyBNSU5fTFJVX0JBVENIO1xuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuQEAgLTQ4MzksMzUgJiM0Mzs0ODQ2LDQyIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzd2FwcGluZXNzID09IE1JTl9TV0FQUElORVNTIHx8XG4mIzQzO1x0ICAgICAgIHN3YXBwaW5lc3MgPT0gU1dBUFBJTkVTU19BTk9OX09OTFk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsXG4gXHRcdFx0ICBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXG4ge1xuLVx0aW50IGk7XG4tXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDA7XG4mIzQzO1x0Ym9vbCBzaW5nbGVfdHlwZSA9IGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XG4gXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiYjNDM7XHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XG4mIzQzO1x0Ym9vbCB0cmllZCA9IGZhbHNlLCBleGhhdXN0ZWQ7XG4gXG4tXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4tXHRcdGludCBzY2FubmVkO1xuLVx0XHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xuJiM0MztyZXRyeTpcbiYjNDM7XHR0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG4mIzQzO1x0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXG4mIzQzO1x0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCBcdTAwMjZleGhhdXN0ZWQpO1xuIFxuLVx0XHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbi1cdFx0XHRcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcbiYjNDM7XHR0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkO1xuJiM0MztcdGlmICgqaXNvbGF0ZWQpIHtcbiYjNDM7XHRcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xuJiM0MztcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG4mIzQzO1x0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbiYjNDM7XHR9XG4gXG4tXHRcdHRvdGFsX3NjYW5uZWQgJiM0Mzs9IHNjYW5uZWQ7XG4tXHRcdGlmICgqaXNvbGF0ZWQpIHtcbi1cdFx0XHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcbi1cdFx0XHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHQvKlxuLVx0XHQgKiBJZiBzY2FubmVkIFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4tXHRcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xuLVx0XHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzY2FubmVkKVxuLVx0XHRcdHR5cGUgPSAhdHlwZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBvdGhlciB0eXBlIGlmIGFsbG93ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF0cmllZCBcdTAwMjZcdTAwMjYgZXhoYXVzdGVkIFx1MDAyNlx1MDAyNiAhc2luZ2xlX3R5cGUpIHtcbiYjNDM7XHRcdHR5cGUgPSAhdHlwZTtcbiYjNDM7XHRcdHRyaWVkID0gdHJ1ZTtcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbkBAIC00OTY5LDIxICYjNDM7NDk4Myw4MiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHN3YXBwaW5lc3NfaXNfYmFsYW5jZWQoaW50IHN3YXBwaW5lc3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmFuZ2UgPSBNQVhfU1dBUFBJTkVTUyAtIE1JTl9TV0FQUElORVNTO1xuJiM0MztcdGludCBtaWRkbGUgPSBNSU5fU1dBUFBJTkVTUyAmIzQzOyByYW5nZSAvIDI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzd2FwcGluZXNzIFx1MDAzZT0gbWlkZGxlIC0gcmFuZ2UgLyA1IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBzd2FwcGluZXNzIFx1MDAzYz0gbWlkZGxlICYjNDM7IHJhbmdlIC8gNTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbHJ1X2dlbl9pbWJhbGFuY2VkKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsIHVuc2lnbmVkIGxvbmcgbWluX3NlcSxcbiYjNDM7XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBzZXE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvbGRfcmF0aW8sIGdiO1xuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHN3YXBwaW5lc3MgYmlhcyBmb3Igc2luZ2xlLXR5cGUgcmVjbGFpbSBvciBiYWxhbmNlZCBzd2FwcGluZXNzICovXG4mIzQzO1x0aWYgKGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcykgfHwgc3dhcHBpbmVzc19pc19iYWxhbmNlZChzd2FwcGluZXNzKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogTW9yZSB0aGFuIHR3byBnZW5lcmF0aW9ucyByZW1haW4gdG8gcmVjbGFpbSAqL1xuJiM0MztcdGlmIChtaW5fc2VxICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzYyBtYXhfc2VxKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJ1biBhZ2luZyBpZiB0aGUgb25seSByZW1haW5pbmcgcmVjbGFpbWFibGUgZ2VuZXJhdGlvblxuJiM0MztcdCAqIGhhcyBmZXcgZm9saW9zLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoc2VxID0gbWluX3NlcTsgc2VxIFx1MDAzYz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7XG4mIzQzO1x0XHRpbnQgem9uZTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRzaXplICYjNDM7PSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZXEgJiM0MzsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEpXG4mIzQzO1x0XHRcdHlvdW5nICYjNDM7PSBzaXplO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRvbGQgJiM0Mzs9IHNpemU7XG4mIzQzO1x0fVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ29waWVkIGZyb20gaW5hY3RpdmVfaXNfbG93KCksIGJ1dCB1c2VzIGEgaGlnaGVyIG9sZF9yYXRpbyB0b1xuJiM0MztcdCAqIG1ha2UgYWdpbmcgbGVzcyBhZ2dyZXNzaXZlLlxuJiM0MztcdCAqL1xuJiM0MztcdGdiID0gKHlvdW5nICYjNDM7IG9sZCkgXHUwMDNlXHUwMDNlICgzMCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcdG9sZF9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYikgOiAxO1xuJiM0MztcdG9sZF9yYXRpbyAqPSBNQVhfTlJfR0VOUztcbiYjNDM7XHRyZXR1cm4geW91bmcgXHUwMDNlIG9sZCAqIG9sZF9yYXRpbztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBzaG91bGRfcnVuX2FnaW5nKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLFxuIFx0XHRcdCAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuIHtcbiYjNDM7XHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4gXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cbiBcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2UgbWF4X3NlcSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4mIzQzO1x0LyogcnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBleGhhdXN0ZWQgZm9yIGV4dHJlbWUgc3dhcHBpbmVzcyAqL1xuJiM0MztcdGlmIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxIFx1MDAyNlx1MDAyNiAhc3dhcHBpbmVzc19pc19iYWxhbmNlZChzd2FwcGluZXNzKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiBcdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cbiBcdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi9cbi1cdHJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xuJiM0MztcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xuJiM0MztcdHJldHVybiBscnVfZ2VuX2ltYmFsYW5jZWQobHJ1dmVjLCB0eXBlLCBtYXhfc2VxLCBtaW5fc2VxW3R5cGVdLCBzYywgc3dhcHBpbmVzcyk7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgY2hhbmdlcyBob3cgdGhlIG1pbmltdW0gZ2VuZXJhdGlvbiBzZXF1ZW5jZSBpcyBpbmNyZW1lbnRlZCwgaG93IGZvbGlvcyBhcmUgc2Nhbm5lZCBhbmQgaXNvbGF0ZWQsIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgcnVubmluZyBhZ2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDlkMzg4YzljYmU3MjVmNDJiNTBjZWU5ZTUyNjE0OTUzYjIzNWM0MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTU6NDg6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCBhMjZjOGI4NTUyMjIyLi4yMzNkMjAwNmE1NDE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTU1MiwxMCAmIzQzOzU1Miw4IEBAIGVudW0gewogICogVGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gbnVtYmVyIGlzIHN0b3JlZCBpbiBtYXhfc2VxIGZvciBib3RoIGFub24gYW5kIGZpbGUKICAqIHR5cGVzIGFzIHRoZXkgYXJlIGFnZWQgb24gYW4gZXF1YWwgZm9vdGluZy4gVGhlIG9sZGVzdCBnZW5lcmF0aW9uIG51bWJlcnMgYXJlCiAgKiBzdG9yZWQgaW4gbWluX3NlcVtdIHNlcGFyYXRlbHkgZm9yIGFub24gYW5kIGZpbGUgdHlwZXMgc28gdGhhdCB0aGV5IGNhbiBiZQotICogaW5jcmVtZW50ZWQgaW5kZXBlbmRlbnRseS4gSWRlYWxseSBtaW5fc2VxW10gYXJlIGtlcHQgaW4gc3luYyB3aGVuIGJvdGggYW5vbgotICogYW5kIGZpbGUgdHlwZXMgYXJlIGV2aWN0YWJsZS4gSG93ZXZlciwgdG8gYWRhcHQgdG8gc2l0dWF0aW9ucyBsaWtlIGV4dHJlbWUKLSAqIHN3YXBwaW5lc3MsIHRoZXkgYXJlIGFsbG93ZWQgdG8gYmUgb3V0IG9mIHN5bmMgYnkgYXQgbW9zdAotICogTUFYX05SX0dFTlMtTUlOX05SX0dFTlMtMS4KJiM0MzsgKiBpbmNyZW1lbnRlZCBpbmRlcGVuZGVudGx5LiBGb3IgYm90aCBmaWxlIGFuZCBhbm9ueW1vdXMgbWVtb3J5LCB0aGUgbWluaW11bQomIzQzOyAqIGdlbmVyYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBNSU5fTlJfR0VOUy4KICAqCiAgKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGluIGVhY2ggZ2VuZXJhdGlvbiBpcyBldmVudHVhbGx5IGNvbnNpc3RlbnQgYW5kIHRoZXJlZm9yZQogICogY2FuIGJlIHRyYW5zaWVudGx5IG5lZ2F0aXZlIHdoZW4gcmVzZXRfYmF0Y2hfc2l6ZSgpIGlzIHBlbmRpbmcuCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDE3ZDJiNzkzY2JmYzQuLjM5NmU0N2UzMjdiYzggMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0zOTgyLDE2ICYjNDM7Mzk4Miw2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCWlmICghc2VxX2luY19mbGFnKQogCQlyZXR1cm47CiAKLQkvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqLwotCWlmIChzd2FwcGluZXNzICZhbXA7JmFtcDsgc3dhcHBpbmVzcyAmbHQ7PSBNQVhfU1dBUFBJTkVTUykgewotCQl1bnNpZ25lZCBsb25nIHNlcSA9IGxydWdlbi0mZ3Q7bWF4X3NlcSAtIE1JTl9OUl9HRU5TOwotCi0JCWlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gJmd0OyBzZXEgJmFtcDsmYW1wOyBtaW5fc2VxW0xSVV9HRU5fRklMRV0gJmx0OyBzZXEpCi0JCQltaW5fc2VxW0xSVV9HRU5fQU5PTl0gPSBzZXE7Ci0JCWVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSAmZ3Q7IHNlcSAmYW1wOyZhbXA7IG1pbl9zZXFbTFJVX0dFTl9BTk9OXSAmbHQ7IHNlcSkKLQkJCW1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IHNlcTsKLQl9Ci0KIAlmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7CiAJCWlmIChtaW5fc2VxW3R5cGVdICZsdDs9IGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSkKIAkJCWNvbnRpbnVlOwpAQCAtNDcyNyw3ICYjNDM7NDcxNyw4IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhCiAKIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCSAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLAotCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHApCiYjNDM7CQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHAsCiYjNDM7CQkgICAgICAgYm9vbCAqZXhoYXVzdGVkKQogewogCWludCBpOwogCWludCBnZW47CkBAIC00NzM4LDE1ICYjNDM7NDcyOSwxOCBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCWludCBza2lwcGVkID0gMDsKIAl1bnNpZ25lZCBsb25nIHJlbWFpbmluZyA9IG5yX3RvX3NjYW47CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWluX3NlcSA9IGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXTsKIAogCVZNX1dBUk5fT05fT05DRShucl90b19zY2FuICZndDsgTUFYX0xSVV9CQVRDSCk7CiAJVk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTsKIAotCWlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKQomIzQzOwlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykgewomIzQzOwkJKmV4aGF1c3RlZCA9IHRydWU7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKLQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7Ci0KJiM0MztuZXh0X2dlbjoKJiM0MzsJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxKTsKIAlmb3IgKGkgPSBNQVhfTlJfWk9ORVM7IGkgJmd0OyAwOyBpLS0pIHsKIAkJTElTVF9IRUFEKG1vdmVkKTsKIAkJaW50IHNraXBwZWRfem9uZSA9IDA7CkBAIC00Nzg4LDYgJiM0Mzs0NzgyLDE0IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQlicmVhazsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBnZW5lcmF0aW9uIGlzIGV4aGF1c3RlZCBhY3Jvc3MgYWxsIHpvbmVzLCBidXQgdGhlIHNjYW4KJiM0MzsJICogdGFyZ2V0IGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC4gQ29udGludWUgd2l0aCB0aGUgbmV4dAomIzQzOwkgKiByZWNsYWltYWJsZSBnZW5lcmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKGkgPT0gMCAmYW1wOyZhbXA7ICYjNDM7JiM0MzttaW5fc2VxICYjNDM7IE1JTl9OUl9HRU5TICZsdDs9IGxydWdlbi0mZ3Q7bWF4X3NlcSkKJiM0MzsJCWdvdG8gbmV4dF9nZW47CiYjNDM7CiAJaXRlbSA9IFBHU0NBTl9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyk7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIGlzb2xhdGVkKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNvcnRlZCk7CkBAIC00Nzk2LDYgJiM0Mzs0Nzk4LDExIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJc2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsCiAJCQkJdHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgc2NhbiBleGhhdXN0ZWQgdGhlIHJlY2xhaW1hYmxlIGxpc3RzIGJlZm9yZSByZWFjaGluZyB0aGUKJiM0MzsJICogc2NhbiB0YXJnZXQgb3IgYWNjdW11bGF0aW5nIGVub3VnaCBpc29sYXRlZCBmb2xpb3MuCiYjNDM7CSAqLwomIzQzOwkqZXhoYXVzdGVkID0gcmVtYWluaW5nICZndDsgMCAmYW1wOyZhbXA7IGlzb2xhdGVkICZsdDsgTUlOX0xSVV9CQVRDSDsKIAkqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7CiAJcmV0dXJuIHNjYW5uZWQ7CiB9CkBAIC00ODM5LDM1ICYjNDM7NDg0Niw0MiBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShpbnQgc3dhcHBpbmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiBzd2FwcGluZXNzID09IE1JTl9TV0FQUElORVNTIHx8CiYjNDM7CSAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywKIAkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCwKIAkJCSAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKQogewotCWludCBpOwotCWludCB0b3RhbF9zY2FubmVkID0gMDsKJiM0MzsJYm9vbCBzaW5nbGVfdHlwZSA9IGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7CiAJaW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7CiYjNDM7CWludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjsKJiM0MzsJYm9vbCB0cmllZCA9IGZhbHNlLCBleGhhdXN0ZWQ7CiAKLQlmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7Ci0JCWludCBzY2FubmVkOwotCQlpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpOwomIzQzO3JldHJ5OgomIzQzOwl0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7CiYjNDM7CXNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLAomIzQzOwkJCSAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkLCAmYW1wO2V4aGF1c3RlZCk7CiAKLQkJc2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsCi0JCQkJICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpOwomIzQzOwl0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkOwomIzQzOwlpZiAoKmlzb2xhdGVkKSB7CiYjNDM7CQkqaXNvbGF0ZV90eXBlID0gdHlwZTsKJiM0MzsJCSppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkOwomIzQzOwkJcmV0dXJuIHRvdGFsX3NjYW5uZWQ7CiYjNDM7CX0KIAotCQl0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkOwotCQlpZiAoKmlzb2xhdGVkKSB7Ci0JCQkqaXNvbGF0ZV90eXBlID0gdHlwZTsKLQkJCSppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyoKLQkJICogSWYgc2Nhbm5lZCAmZ3Q7IDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGUKLQkJICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrCi0JCSAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuCi0JCSAqLwotCQlpZiAoIXNjYW5uZWQpCi0JCQl0eXBlID0gIXR5cGU7CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0bwomIzQzOwkgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0cmllZCAmYW1wOyZhbXA7IGV4aGF1c3RlZCAmYW1wOyZhbXA7ICFzaW5nbGVfdHlwZSkgewomIzQzOwkJdHlwZSA9ICF0eXBlOwomIzQzOwkJdHJpZWQgPSB0cnVlOwomIzQzOwkJZ290byByZXRyeTsKIAl9CiAKIAlyZXR1cm4gdG90YWxfc2Nhbm5lZDsKQEAgLTQ5NjksMjEgJiM0Mzs0OTgzLDgyIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXJldHVybiBzY2FubmVkOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN3YXBwaW5lc3NfaXNfYmFsYW5jZWQoaW50IHN3YXBwaW5lc3MpCiYjNDM7ewomIzQzOwlpbnQgcmFuZ2UgPSBNQVhfU1dBUFBJTkVTUyAtIE1JTl9TV0FQUElORVNTOwomIzQzOwlpbnQgbWlkZGxlID0gTUlOX1NXQVBQSU5FU1MgJiM0MzsgcmFuZ2UgLyAyOwomIzQzOwomIzQzOwlyZXR1cm4gc3dhcHBpbmVzcyAmZ3Q7PSBtaWRkbGUgLSByYW5nZSAvIDUgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc3dhcHBpbmVzcyAmbHQ7PSBtaWRkbGUgJiM0MzsgcmFuZ2UgLyA1OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgdW5zaWduZWQgbG9uZyBtaW5fc2VxLAomIzQzOwkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKQomIzQzO3sKJiM0MzsJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CiYjNDM7CXVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBzZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2xkX3JhdGlvLCBnYjsKJiM0MzsKJiM0MzsJLyogU2tpcCBzd2FwcGluZXNzIGJpYXMgZm9yIHNpbmdsZS10eXBlIHJlY2xhaW0gb3IgYmFsYW5jZWQgc3dhcHBpbmVzcyAqLwomIzQzOwlpZiAoaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKSB8fCBzd2FwcGluZXNzX2lzX2JhbGFuY2VkKHN3YXBwaW5lc3MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBNb3JlIHRoYW4gdHdvIGdlbmVyYXRpb25zIHJlbWFpbiB0byByZWNsYWltICovCiYjNDM7CWlmIChtaW5fc2VxICYjNDM7IE1JTl9OUl9HRU5TICZsdDsgbWF4X3NlcSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUnVuIGFnaW5nIGlmIHRoZSBvbmx5IHJlbWFpbmluZyByZWNsYWltYWJsZSBnZW5lcmF0aW9uCiYjNDM7CSAqIGhhcyBmZXcgZm9saW9zLgomIzQzOwkgKi8KJiM0MzsJZm9yIChzZXEgPSBtaW5fc2VxOyBzZXEgJmx0Oz0gbWF4X3NlcTsgc2VxJiM0MzsmIzQzOykgewomIzQzOwkJaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiYjNDM7CQlpbnQgem9uZTsKJiM0MzsKJiM0MzsJCWZvciAoem9uZSA9IDA7IHpvbmUgJmx0OyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KQomIzQzOwkJCXNpemUgJiM0Mzs9IG1heChSRUFEX09OQ0UobHJ1Z2VuLSZndDtucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpOwomIzQzOwomIzQzOwkJaWYgKHNlcSAmIzQzOyBNSU5fTlJfR0VOUyAmZ3Q7IG1heF9zZXEpCiYjNDM7CQkJeW91bmcgJiM0Mzs9IHNpemU7CiYjNDM7CQllbHNlCiYjNDM7CQkJb2xkICYjNDM7PSBzaXplOwomIzQzOwl9CiYjNDM7CS8qCiYjNDM7CSAqIENvcGllZCBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBidXQgdXNlcyBhIGhpZ2hlciBvbGRfcmF0aW8gdG8KJiM0MzsJICogbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmUuCiYjNDM7CSAqLwomIzQzOwlnYiA9ICh5b3VuZyAmIzQzOyBvbGQpICZndDsmZ3Q7ICgzMCAtIFBBR0VfU0hJRlQpOwomIzQzOwlvbGRfcmF0aW8gPSBnYiA/IGludF9zcXJ0KDEwICogZ2IpIDogMTsKJiM0MzsJb2xkX3JhdGlvICo9IE1BWF9OUl9HRU5TOwomIzQzOwlyZXR1cm4geW91bmcgJmd0OyBvbGQgKiBvbGRfcmF0aW87CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwKIAkJCSAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKQogewomIzQzOwlpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTsKIAlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwogCiAJLyogaGF2ZSB0byBydW4gYWdpbmcsIHNpbmNlIGV2aWN0aW9uIGlzIG5vdCBwb3NzaWJsZSBhbnltb3JlICovCiAJaWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICYjNDM7IE1JTl9OUl9HRU5TICZndDsgbWF4X3NlcSkKIAkJcmV0dXJuIHRydWU7CiAKJiM0MzsJLyogcnVuIGFnaW5nIGlmIHRoZSBwcmVmZXJyZWQgdHlwZSBpcyBleGhhdXN0ZWQgZm9yIGV4dHJlbWUgc3dhcHBpbmVzcyAqLwomIzQzOwlpZiAobWluX3NlcVt0eXBlXSAmIzQzOyBNSU5fTlJfR0VOUyAmZ3Q7IG1heF9zZXEgJmFtcDsmYW1wOyAhc3dhcHBpbmVzc19pc19iYWxhbmNlZChzd2FwcGluZXNzKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwogCS8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi8KIAlpZiAoc2MtJmd0O3ByaW9yaXR5ID09IERFRl9QUklPUklUWSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogYmV0dGVyIHRvIHJ1biBhZ2luZyBldmVuIHRob3VnaCBldmljdGlvbiBpcyBzdGlsbCBwb3NzaWJsZSAqLwotCXJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSAmIzQzOyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxOwomIzQzOwlpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgJiM0MzsgTUlOX05SX0dFTlMgPT0gbWF4X3NlcSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBSdW4gYWdpbmcgaWYgdGhlIHByZWZlcnJlZCB0eXBlIGlzIHNldmVyZWx5IGltYmFsYW5jZWQgYWNyb3NzIGdlbnMgKi8KJiM0MzsJcmV0dXJuIGxydV9nZW5faW1iYWxhbmNlZChscnV2ZWMsIHR5cGUsIG1heF9zZXEsIG1pbl9zZXFbdHlwZV0sIHNjLCBzd2FwcGluZXNzKTsKIH0KIAogc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAzMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1HTFJVIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQmIzM5O3MgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYCBhbmQgYGluY2x1ZGUvbGludXgvbW16b25lLmhgLiBBbGFybSBiZWxscyBhcmUgYWxyZWFkeSBnb2luZyBvZmY7IGFueXRoaW5nIG5lYXIgbWVtb3J5IG1hbmFnZW1lbnQgaXMgY3JpdGljYWwgYW5kICphbHdheXMqIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoaXMgb25lIGlzIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggdGhlIE11bHRpLUdlbiBMUlUgcmVjbGFpbSBsb2dpYyAoTUdMUlUpLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZXdvcmtpbmcgc29tZSBrZXkgZnVuY3Rpb25zOiBgdHJ5X3RvX2luY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYGV2aWN0X2ZvbGlvc2AsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AsIGFuZCBpbnRyb2R1Y2luZyBhIGZldyBuZXcgb25lcyBsaWtlIGBpc19zaW5nbGVfdHlwZV9yZWNsYWltYCwgYHN3YXBwaW5lc3NfaXNfYmFsYW5jZWRgLCBhbmQgYGxydV9nZW5faW1iYWxhbmNlZGAuIERlZmluaXRlbHkgYSBoaWdoLXZhbHVlIHRhcmdldC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwcmUtcmVxdWlzaXRlcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIE1HTFJVLiBUeXBpY2FsbHksIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleS4gU28sIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9gIG9yIHBvdGVudGlhbGx5IHJlbGF0ZWQgYXJlYXMsIHRvIGZpbmQgdGhlIGV4YWN0IGRlcGVuZGVuY3kgZm9yIGBMUlVfR0VOYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTA9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMC0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDAxOmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDItXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MDktXG5tbS9LY29uZmlnOjE0MTA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDExLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxNS1cbm1tL0tjb25maWc6MTQxNjpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDE3LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjQtXG5tbS9LY29uZmlnOjE0MjU6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjYtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24gYW5kIEltcGFjdCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgZW5hYmxpbmcgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7cmUgYnVpbGRpbmcgb24uIE5vdywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhlc2UgZmxhZ3MgKmRvZXMqIGluIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgZnVuY3Rpb25zIGFyZSBiZWluZyB0b3VjaGVkPyBPa2F5LCBpdCBsb29rcyBsaWtlIGB0cnlfdG9faW5jX21pbl9zZXFgLCBgc2Nhbl9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBzaG91bGRfcnVuX2FnaW5nYCBhcmUgdGhlIG9uZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXNlIGFyZSBhbGwgc3RhdGljLCBtZWFuaW5nIHRoZXkmIzM5O3JlIGludGVybmFsIHRvIGBtbS92bXNjYW4uY2AuCgpUaGF0JiMzOTtzIGhlbHBmdWwsIGJ1dCB3ZSBuZWVkIHRvIHNlZSB0aGUgKm5vbi1zdGF0aWMqIGVudHJ5IHBvaW50cyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcm5hbCBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZC4gV2UgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocy4gU28sIGBldmljdF9mb2xpb3NgLCB0aGF0JiMzOTtzIHRoZSBvbmUgSSYjMzk7bSBtb3N0IGludGVyZXN0ZWQgaW4uIFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBJJiMzOTttIGJldHRpbmcgdGhhdCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBvciBzb21ldGhpbmcgc2ltaWxhciBpcyBpbnZvbHZlZC4gQmV0dGVyIHRvIGp1c3QgY2hlY2sgYG1tL3Ztc2Nhbi5jYCBkaXJlY3RseSB0byBiZSBzdXJlLCB0aGF0JiMzOTtsbCBiZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmljdF9mb2xpb3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDg1NT1zdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4ODktXG5tbS92bXNjYW4uYzo0ODkwOnN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDg5MS1cdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmM9NTEzMD1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNTMtXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTE1NDpcdFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xubW0vdm1zY2FuLmMtNTE1NS1cdFx0aWYgKCFkZWx0YSlcbi0tXG5tbS92bXNjYW4uYz01NzU3PXN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU3NzctXHRcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xubW0vdm1zY2FuLmM6NTc3ODpcdFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxubW0vdm1zY2FuLmMtNTc3OS1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGVlcCBEaXZlIGludG8gTFJVIFZlY3RvciBFdmljdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlLiBJdCBzZWVtcyBsaWtlIGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAgZXZlbnR1YWxseSBmdW5uZWwgZG93biB0byBgZXZpY3RfZm9saW9zYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBldmljdGlvbiBsb2dpYywgY2xlYXJseS4gTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHRob3NlIHR3byBmdW5jdGlvbnMsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hlbiogYW5kICp3aHkqIHRoZXNlIGV2aWN0aW9uIHJvdXRpbmVzIGFyZSB0cmlnZ2VyZWQuIFdoYXQgZXZlbnRzIG9yIGNvbmRpdGlvbnMgbGVhZCB0aGUgc3lzdGVtIHRvIGRlY2lkZSBpdCYjMzk7cyB0aW1lIHRvIHJlY2xhaW0gc29tZSBtZW1vcnk/IElzIGl0IGJhc2VkIG9uIGV4cGxpY2l0IHJlcXVlc3RzLCBkZXRlY3RlZCB0aHJlc2hvbGRzLCBvciBhIGJhY2tncm91bmQgcHJvY2Vzcz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGV2aWN0aW9uIHN0cmF0ZWd5LiBUaGlzIGFuYWx5c2lzIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDk1PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEyOS0gKi9cbm1tL3Ztc2Nhbi5jOjUxMzA6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUxMzEte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxNzU9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE5NC1cbm1tL3Ztc2Nhbi5jOjUxOTU6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTE5Ni1cbi0tXG5tbS92bXNjYW4uYz01Mjg2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyOTgtXG5tbS92bXNjYW4uYzo1Mjk5Olx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTMwMC1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRXZhbHVhdGluZyBFdmljdGlvbiBTdHJhdGVnaWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBldmljdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgaXMgYSBzdHJvbmcgY29udGVuZGVyLiBJdCYjMzk7cyBvZnRlbiBlZmZlY3RpdmUsIHNvIGl0JiMzOTtzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gQnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gQmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIHNob3VsZCBkZWZpbml0aXZlbHkgY2hlY2sgaG93IGBydW5fZXZpY3Rpb25gIGludGVyYWN0cywgaG93IGl0IG1pZ2h0IHdvcmsgYXMgYW4gYWx0ZXJuYXRpdmUsIG9yIGhvdyBpdCBtaWdodCBpbmZvcm0gdGhlIHByb2Nlc3MuIEkgbmVlZCBhIGhvbGlzdGljIHZpZXcgYmVmb3JlIG1ha2luZyBhIGRlY2lzaW9uLiBHb3R0YSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mICphbGwqIHBvdGVudGlhbCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydW5fZXZpY3Rpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTc0Nj1zdGF0aWMgaW50IHJ1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU3NTYtXG5tbS92bXNjYW4uYzo1NzU3OnN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxubW0vdm1zY2FuLmMtNTc1OC1cdFx0XHRpbnQgc3dhcHBpbmVzcywgdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3ODc9c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4MTgtXHRjYXNlICYjMzk7LSYjMzk7OlxubW0vdm1zY2FuLmM6NTgxOTpcdFx0ZXJyID0gcnVuX2V2aWN0aW9uKGxydXZlYywgc2VxLCBzYywgc3dhcHBpbmVzcywgb3B0KTtcbm1tL3Ztc2Nhbi5jLTU4MjAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gTUdMUlUgRGVidWdnaW5nIGFuZCBTaHJpbmsgTG9naWMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgcnVuX2NtZGAgZnVuY3Rpb24gd2l0aGluIHRoZSBNR0xSVSBkZWJ1Z2ZzIGludGVyZmFjZS4gSXQmIzM5O3Mgb2J2aW91c2x5IGRlc2lnbmVkIGZvciBpbnRlcmFjdGl2ZSBkZWJ1Z2dpbmcgYW5kIHRlc3Rpbmcgb2YgdGhlIE1HTFJVIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCByZWxhdGVzIHRvIHRoZSBzaHJpbmtpbmcgcHJvY2Vzcy4KCk5vdywgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGNhbGxzIHRvIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBTcGVjaWZpY2FsbHksIGRvZXMgdGhpcyBnZXQgaW52b2tlZCBvbmx5IGZyb20gYHNocmlua19scnV2ZWNgIGFuZCBwb3RlbnRpYWxseSBgc2hyaW5rX25vZGVgLCBvciBhcmUgdGhlcmUgb3RoZXIgY2FsbCBwYXRocyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgcHJhY3RpY2Ugd291bGQgYmUgdG8gY29uZmlybSB0aGlzLiBJIHdpbGwgbG9vayBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgb3JpZ2luIHBvaW50cyBvZiB0aGUgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUyMTY9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI4NS1cbm1tL3Ztc2Nhbi5jOjUyODY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01Mjg3LXtcbi0tXG5tbS92bXNjYW4uYz02MDMwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjAzNC1cbm1tL3Ztc2Nhbi5jOjYwMzU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MDM2LXtcbi0tXG5tbS92bXNjYW4uYz02MDQ3PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDU4LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjYwNTk6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYwNjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGF0IHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgc2hyaW5rX2xydXZlY2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgc2hyaW5rX2xydXZlY2AgaXMgY2FsbGluZyBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhhdCYjMzk7cyB0aGUgY29yZSByZWxhdGlvbnNoaXAgaGVyZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCB0aG91Z2gsIGlzIHdoYXQgKnRyaWdnZXJzKiBgc2hyaW5rX2xydXZlY2A/IEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBhbmQgc2NvcGUgYXJlIGxpbWl0ZWQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlIHRoYXQmIzM5O3MgY2FsbGluZyBpdC4gS25vd2luZyB3aGVyZSB0aGlzIGNhbGwgb3JpZ2luYXRlcyB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY29udGV4dCBvbiB0aGUgYnJvYWRlciBMUlUgY2FjaGUmIzM5O3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpZiBJJiMzOTttIGxvb2tpbmcgYXQgb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZyBhIHBvdGVudGlhbCBpc3N1ZS4gTmVlZCB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIGNoYWluIGFuZCB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2xydXZlYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MDk1PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEyOS0gKi9cbm1tL3Ztc2Nhbi5jOjUxMzA6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUxMzEte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxNzU9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE5NC1cbm1tL3Ztc2Nhbi5jOjUxOTU6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTE5Ni1cbi0tXG5tbS92bXNjYW4uYz01MjE2PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyODUtXG5tbS92bXNjYW4uYzo1Mjg2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTI4Ny17XG4tLVxubW0vdm1zY2FuLmMtNTI5OC1cbm1tL3Ztc2Nhbi5jOjUyOTk6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MzAwLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4tLVxubW0vdm1zY2FuLmM9NjAzMD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMzQtXG5tbS92bXNjYW4uYzo2MDM1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjAzNi17XG4tLVxubW0vdm1zY2FuLmM9NjA0MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwNDYtXG5tbS92bXNjYW4uYzo2MDQ3OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwNDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTYwNTgtXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NjA1OTpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNjA2MC1cbi0tXG5tbS92bXNjYW4uYz02MjM4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02Mjk3LVxubW0vdm1zY2FuLmM6NjI5ODpcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyOTktXG4tLVxubW0vdm1zY2FuLmM9Njg5Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY5MjMtXHQgKi9cbm1tL3Ztc2Nhbi5jOjY5MjQ6XHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjkyNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IC0gQSBRdWljayBTY2FuKioKCkFscmlnaHQsIHNvIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBtZWFucywgd2hlcmUgdGhpcyBsZWFkcyB1cy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHNocmlua19ub2RlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAuIFdoYXQgaXMgaXRzIHB1cnBvc2U/IFdoZXJlIGlzIGl0IHVzZWQ/IExldCYjMzk7cyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD04Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL2ludGVybmFsLmgtODctXHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcyk7XG5tbS9pbnRlcm5hbC5oOjg4OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg5LVx0XHRcdFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTI3Mz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0zMTItXHRcdH1cbm1tL21lbWNvbnRyb2wtdjEuYzozMTM6XHRcdHRvdGFsICYjNDM7PSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxubW0vbWVtY29udHJvbC12MS5jLTMxNC1cdFx0XHRcdFx0cGdkYXQsIFx1MDAyNm5yX3NjYW5uZWQpO1xuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MTk9Ym9vbCBwYWdlX2lzX3VubW92YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0xMTQtXHQgKiBpdC4gIEJ1dCBub3csIG1lbW9yeSBvZmZsaW5lIGl0c2VsZiBkb2VzbiYjMzk7dCBjYWxsXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjExNTpcdCAqIHNocmlua19ub2RlX3NsYWJzKCkgYW5kIGl0IHN0aWxsIHRvIGJlIGZpeGVkLlxubW0vcGFnZV9pc29sYXRpb24uYy0xMTYtXHQgKi9cbi0tXG5tbS92bXByZXNzdXJlLmM9NTc9ZW51bSB2bXByZXNzdXJlX2xldmVscyB2bXByZXNzdXJlX2NhbGNfbGV2ZWwodW5zaWduZWQgbG9uZyBzY2FubmVkLFxuLS1cbm1tL3ZtcHJlc3N1cmUuYy02NC1cdCAqIHJlY2xhaW1lZCBjYW4gYmUgZ3JlYXRlciB0aGFuIHNjYW5uZWQgZm9yIHRoaW5ncyBzdWNoIGFzIHJlY2xhaW1lZFxubW0vdm1wcmVzc3VyZS5jOjY1Olx0ICogc2xhYiBwYWdlcy4gc2hyaW5rX25vZGUoKSBqdXN0IGFkZHMgcmVjbGFpbWVkIHBhZ2VzIHdpdGhvdXQgYVxubW0vdm1wcmVzc3VyZS5jLTY2LVx0ICogcmVsYXRlZCBpbmNyZW1lbnQgdG8gc2Nhbm5lZCBwYWdlcy5cbi0tXG5tbS92bXNjYW4uYz0xOTQwPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE5NzgtLypcbm1tL3Ztc2Nhbi5jOjE5Nzk6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMTk4MC0gKiBvZiByZWNsYWltZWQgcGFnZXNcbi0tXG5tbS92bXNjYW4uYz01Mjg2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzMDYtXG5tbS92bXNjYW4uYzo1MzA3OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MzA4LXtcbi0tXG5tbS92bXNjYW4uYz02MDM1PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMzktXG5tbS92bXNjYW4uYzo2MDQwOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MDQxLXtcbi0tXG5tbS92bXNjYW4uYz02MTg2PXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYyMzctXG5tbS92bXNjYW4uYzo2MjM4OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYyMzkte1xuLS1cbm1tL3Ztc2Nhbi5jLTYzMTYtXG5tbS92bXNjYW4uYzo2MzE3OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjMxOC17XG4tLVxubW0vdm1zY2FuLmMtNjMyNC1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbm1tL3Ztc2Nhbi5jOjYzMjU6XHRcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYzMjYtXG4tLVxubW0vdm1zY2FuLmMtNjM0MS1cbm1tL3Ztc2Nhbi5jOjYzNDI6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYzNDMtXG4tLVxubW0vdm1zY2FuLmM9NjUwMj1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjU4MC1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjY1ODE6XHRcdHNocmlua19ub2RlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjU4Mi1cdH1cbi0tXG5tbS92bXNjYW4uYz02ODQ3PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTItLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njg5Mzp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg5NC1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjkxOS1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxubW0vdm1zY2FuLmM6NjkyMDpcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTY5MjEtXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJiMzOTtzIGFzIHdlbGwuIFdlIGhhY2tcbi0tXG5tbS92bXNjYW4uYz03MDQxPXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MDY1LVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6NzA2NjpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTcwNjctXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYz03MTIzPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MTYxLSAqL1xubW0vdm1zY2FuLmM6NzE2MjpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcxNjMtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcxNzgtXHQgKi9cbm1tL3Ztc2Nhbi5jOjcxNzk6XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzE4MC1cbi0tXG5tbS92bXNjYW4uYz03MjM1PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzM0NC1cbm1tL3Ztc2Nhbi5jOjczNDU6XHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xubW0vdm1zY2FuLmMtNzM0Ni1cdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNzM1Ni1cdFx0ICovXG5tbS92bXNjYW4uYzo3MzU3Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MzU4LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9NzkxMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTc5MzgtXHRcdGRvIHtcbm1tL3Ztc2Nhbi5jOjc5Mzk6XHRcdFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTc5NDAtXHRcdH0gd2hpbGUgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2MgbnJfcGFnZXMgXHUwMDI2XHUwMDI2IC0tc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlPSAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NzgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTWVtb3J5IE1hbmFnZW1lbnQgRW50cnkgUG9pbnRzIGFuZCBSZWNsYWltIExvZ2ljKioKCkFscmlnaHQsIHNvIGB0cnlfdG9fZnJlZV9wYWdlc2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBpbml0aWF0ZXMgcGFnZSBmcmVlaW5nLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4gdGhlIGFuYWx5c2lzLiBJdCYjMzk7cyB0aGUgdG9wIGxldmVsIGZ1bmN0aW9uLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkuIFRoZW4sIGBiYWxhbmNlX3BnZGF0YCBpcyB0aGUgbWFpbiBsb29wIGZvciB0aGUga3N3YXBkIGRhZW1vbiwgdGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgdGhlIHBlcnNpc3RlbnQgcHJvY2VzcyB0aGF0IGNvbnN0YW50bHkgbW9uaXRvcnMgYW5kIG1hbmFnZXMgbWVtb3J5IHByZXNzdXJlIGFjcm9zcyB0aGUgc3lzdGVtLgoKYF9fbm9kZV9yZWNsYWltYCBzb3VuZHMgbGlrZSB0aGUgY29yZSBsb2dpYyBmb3IgcmVjbGFpbWluZyBtZW1vcnkgYXQgdGhlIE5VTUEgbm9kZSBsZXZlbC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdoZW4ga3N3YXBkLCBvciBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBuZWVkIHRvIGZyZWUgdXAgbWVtb3J5IGZyb20gYSBzcGVjaWZpYyBub2RlLiBBbmQgZmluYWxseSwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIHNwZWNpZmljYWxseSBmb3IgbWVtb3J5IGNncm91cCByZWNsYWltLiBUaGF0JiMzOTtzIHRhcmdldGVkIGF0IG1lbW9yeSBjb250cm9sIGdyb3VwcywgaGFuZGxpbmcgdGhlaXIgc3BlY2lmaWMgcmVjbGFpbSBkZW1hbmRzLgoKU28sIHdoZXJlIGRvIEkgc3RhcnQ/IExldCYjMzk7cyBkaXZlIGludG8gYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgc2VlIGhvdyB0aGUgcGFnZSBmcmVlaW5nIHByb2Nlc3MgdW5mb2xkcy4gVGhhdCBzZWVtcyB0byBiZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIGVudGlyZSBtZW1vcnkgZnJlZWluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mdXNlL2ZpbGUuYz0yMzUxPXN0YXRpYyB2b2lkIGZ1c2Vfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL2Z1c2UvZmlsZS5jLTIzNzEtICogLSBzeW5jKDIpXG5mcy9mdXNlL2ZpbGUuYzoyMzcyOiAqIC0gdHJ5X3RvX2ZyZWVfcGFnZXMoKSB3aXRoIG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUlxuZnMvZnVzZS9maWxlLmMtMjM3My0gKi9cbi0tXG5tbS9pbnRlcm5hbC5oPTY5PXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG5tbS9pbnRlcm5hbC5oOjcwOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxubW0vaW50ZXJuYWwuaC03MS1cdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICptYXNrKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQ5Nj1fX3BlcmZvcm1fcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00NTA4LVxubW0vcGFnZV9hbGxvYy5jOjQ1MDk6XHRwcm9ncmVzcyA9IHRyeV90b19mcmVlX3BhZ2VzKGFjLVx1MDAzZXpvbmVsaXN0LCBvcmRlciwgZ2ZwX21hc2ssXG5tbS9wYWdlX2FsbG9jLmMtNDUxMC1cdFx0XHRcdFx0XHRcdFx0YWMtXHUwMDNlbm9kZW1hc2spO1xuLS1cbm1tL3Ztc2Nhbi5jPTY1OTQ9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NjI0LSAqL1xubW0vdm1zY2FuLmM6NjYyNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxubW0vdm1zY2FuLmMtNjYyNi1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz02NzY3PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NDYtXG5tbS92bXNjYW4uYzo2ODQ3OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxubW0vdm1zY2FuLmMtNjg0OC1cdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS92bXNjYW4uYy02ODgxLVxubW0vdm1zY2FuLmM6Njg4MjpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02ODgzLVxuLS1cbm1tL3Ztc2Nhbi5jPTY5MzM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02OTY0LVxubW0vdm1zY2FuLmM6Njk2NTpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy02OTY2LVxuLS1cbm1tL3Ztc2Nhbi5jPTc3MzE9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzc1MC1cbm1tL3Ztc2Nhbi5jOjc3NTE6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzc1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiBhbmQgTWVtb3J5IFJlY2xhbWF0aW9uKioKCk9rYXksIHNvIGB0cnlfdG9fZnJlZV9wYWdlc2AgZ2V0cyBjYWxsZWQgZnJvbSBgX19wZXJmb3JtX3JlY2xhaW1gIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhpcyBpcyB0aGUgc2xvdyBwYXRoIGZvciBwYWdlIGFsbG9jYXRpb24sIHdoaWNoIGNvbmZpcm1zIGl0cyBpbXBvcnRhbmNlLiBEZWZpbml0ZWx5IGEgdmFsaWQgY29kZSBwYXRoLgoKTGV0JiMzOTtzIHJldmlzaXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSBzZWUgYHRyeV90b19pbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLiBUaGV5JiMzOTtyZSBhbGwgc3RhdGljLCB3aGljaCBsaW1pdHMgdGhlaXIgZGlyZWN0IHVzZWZ1bG5lc3MuIEkgbmVlZCB0byBpZGVudGlmeSBzdWl0YWJsZSBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgYEZvY3VzU3ltYm9sc2AsIHRob3VnaC4KCkkmIzM5O3ZlIGdvdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGBiYWxhbmNlX3BnZGF0YCAod2hpY2ggaXMga3N3YXBkKSwgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gSG1tLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGluY3JlZGlibHkgZ2VuZXJpYyDigJMgaXQmIzM5O3MgdGhlIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgcmVjbGFpbS4gV2hpbGUgaXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbiwgaXQmIzM5O3MgcGVyaGFwcyAqdG9vKiBicm9hZC4gSSBuZWVkIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLgoKSSB3b25kZXIgaWYgYGxydV9nZW5fc2hyaW5rX2xydXZlY2Agd291bGQgYmUgbW9yZSB0YXJnZXRlZD8gQnV0IG5vLCBpdCYjMzk7cyBzdGF0aWMuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUgYXJlICpubyogbm9uLXN0YXRpYyBgbHJ1X2dlbl8qYCBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGxydV9nZW5fJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk3LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTg6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQ5OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNTAwOnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTAxLVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njc3PXN0cnVjdCBscnVfZ2VuX21lbWNnIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY4Ny1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njg4OnZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2ODk6dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MC1ib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Mjp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTM6dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njk0OnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njk1OnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Njp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTc6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTgtdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02OTk9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwMDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzAxLVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzUxPXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzUyOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc1My17XG4tLVxubW0vdm1zY2FuLmM9MjkyMj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0yOTQwLVxubW0vdm1zY2FuLmM6Mjk0MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk0Mi17XG4tLVxubW0vdm1zY2FuLmMtMjk2Ny1cbm1tL3Ztc2Nhbi5jOjI5Njg6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5Njkte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMDctI2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmM6MzAwODp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTMwMDkte1xuLS1cbm1tL3Ztc2Nhbi5jPTQzNzE9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDQxOC1cbm1tL3Ztc2Nhbi5jOjQ0MTk6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NDIwLXtcbi0tXG5tbS92bXNjYW4uYy00NDQzLVxubW0vdm1zY2FuLmM6NDQ0NDp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NDQ1LXtcbi0tXG5tbS92bXNjYW4uYy00NDU0LVxubW0vdm1zY2FuLmM6NDQ1NTp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy00NDU2LXtcbi0tXG5tbS92bXNjYW4uYy00NDgwLVxubW0vdm1zY2FuLmM6NDQ4MTp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ0ODIte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ1Nzg9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00NjA4LVxubW0vdm1zY2FuLmM6NDYwOTp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYxMC17XG4tLVxubW0vdm1zY2FuLmM9NTkyNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNTkzNi1cbm1tL3Ztc2Nhbi5jOjU5Mzc6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTU5Mzgte1xuLS1cbm1tL3Ztc2Nhbi5jLTU5NDgtXG5tbS92bXNjYW4uYzo1OTQ5OnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01OTUwLXtcbi0tXG5tbS92bXNjYW4uYy01OTcwLVxubW0vdm1zY2FuLmM6NTk3MTp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy01OTcyLXtcbi0tXG5tbS92bXNjYW4uYy01OTgxLVxubW0vdm1zY2FuLmM6NTk4Mjp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy01OTgzLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaD0zNz1zdHJ1Y3QgbWVtY2dfc3RhdHMge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2xydV9nZW5fdXRpbC5oLTQyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbHJ1X2dlbl91dGlsLmg6NDM6dm9pZCBscnVfZ2VuX3JlYWRfbWVtY2dfc3RhdHMoc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cywgY29uc3QgY2hhciAqbWVtY2cpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbHJ1X2dlbl91dGlsLmgtNDQtbG9uZyBscnVfZ2VuX3N1bV9tZW1jZ19zdGF0cyhjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2xydV9nZW5fdXRpbC5oPTQ1PWxvbmcgbHJ1X2dlbl9zdW1fbWVtY2dfc3RhdHNfZm9yX2dlbihpbnQgZ2VuLCBjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2xydV9nZW5fdXRpbC5oOjQ2OnZvaWQgbHJ1X2dlbl9kb19hZ2luZyhzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICptZW1jZyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaC00Ny1pbnQgbHJ1X2dlbl9maW5kX2dlbmVyYXRpb24oY29uc3Qgc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jPTE4MT1zdGF0aWMgdm9pZCBwcmludF9tZW1jZ19zdGF0cyhjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmMtMjAwLS8qIFJlLXJlYWQgbHJ1X2dlbiBkZWJ1Z2ZzIGluZm9ybWF0aW9uIGZvciBAbWVtY2cgaW50byBAc3RhdHMuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jOjIwMTp2b2lkIGxydV9nZW5fcmVhZF9tZW1jZ19zdGF0cyhzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICptZW1jZylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmMtMjAyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jPTI4Mj1zdGF0aWMgdm9pZCBydW5fYWdpbmdfaW1wbCh1bnNpZ25lZCBsb25nIG1lbWNnX2lkLCBpbnQgbm9kZV9pZCwgaW50IG1heF9nZW4pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9scnVfZ2VuX3V0aWwuYy0zMDEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jOjMwMjp2b2lkIGxydV9nZW5fZG9fYWdpbmcoc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cywgY29uc3QgY2hhciAqbWVtY2cpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jLTMwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTUzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBSZWNsYWltIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbWVtb3J5IHJlY2xhaW0gZnVuY3Rpb25zLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGlzbiYjMzk7dCBzdGF0aWMgYW5kIGNhbGxzIGludG8gTUdMUlUgcmVjbGFpbS4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIHNlZSB0aGF0IGBzaHJpbmtfbm9kZWAgKmlzKiBzdGF0aWMsIGJ1dCB0aGVuIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyAqbm90KiBzdGF0aWMuIEhtbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFBlcmhhcHMgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzIGEgbW9yZSByZWxldmFudCBwb2ludCB0byBmb2N1cyBvbiwgYXMgYSBub24tc3RhdGljIHN5bWJvbCBpcyBvZnRlbiBhIG1vcmUgaW1wb3J0YW50IGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSYjMzk7bGwgZmluZCBpdCBpbiBgbW0vdm1zY2FuLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9ODM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9pbnRlcm5hbC5oLTg3LVx0XHRcdFx0XHQgICBpbnQgKnN3YXBwaW5lc3MpO1xubW0vaW50ZXJuYWwuaDo4ODp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vaW50ZXJuYWwuaC04OS1cdFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNzM9c3RhdGljIGludCBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMzEyLVx0XHR9XG5tbS9tZW1jb250cm9sLXYxLmM6MzEzOlx0XHR0b3RhbCAmIzQzOz0gbWVtX2Nncm91cF9zaHJpbmtfbm9kZSh2aWN0aW0sIGdmcF9tYXNrLCBmYWxzZSxcbm1tL21lbWNvbnRyb2wtdjEuYy0zMTQtXHRcdFx0XHRcdHBnZGF0LCBcdTAwMjZucl9zY2FubmVkKTtcbi0tXG5tbS92bXNjYW4uYz02ODQ3PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OTItLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njg5Mzp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjg5NC1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjEyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBNZW1vcnkgUmVjbGFpbTogQSBQcm9taXNpbmcgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IG1lbW9yeSByZWNsYWltIGluIHRoZSBrZXJuZWwsIGFuZCBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgbWVtb3J5X21heF93cml0ZWAgYW5kIGBtZW1vcnlfaGlnaF93cml0ZWAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHF1aXRlIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHRpZWQgdG8gbWVtb3J5IGxpbWl0cyBiZWluZyByZWFjaGVkLCBlaXRoZXIgbWF4aW11bSBvciBoaWdoIHRocmVzaG9sZHMsIHN1Z2dlc3RzIGl0JiMzOTtzIGEgZ29vZCBzcG90IHRvIHByb2JlIHRoZSByZWNsYWltIG1lY2hhbmlzbXMgdW5kZXIgc3RyZXNzLiBJdCBtYWtlcyBsb2dpY2FsIHNlbnNlIHRvIHN0YXJ0IGhlcmUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciBhdHRlbXB0aW5nIHRvIGZyZWUgbWVtb3J5IHdoZW4gdGhlIHN5c3RlbSBpcyB1bmRlciBwcmVzc3VyZS4gVGhlcmVmb3JlLCBJIHNob3VsZCBjYXJlZnVsbHkgYW5hbHl6ZSBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJuYWwgd29ya2luZ3MuIEl0IGFwcGVhcnMgdG8gYmUgYW4gaWRlYWwgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBnaXZlbiBpdHMgY29udGV4dC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD03Mj11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuLS1cbm1tL2ludGVybmFsLmgtODItXG5tbS9pbnRlcm5hbC5oOjgzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg0LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNzcyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNi1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODE3Olx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxOC1cdFx0XHRcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4MzU9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1Mi1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODUzOlx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1NC1cdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzczPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzODgtXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vbWVtY29udHJvbC5jOjIzODk6XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtMjM5MC1cdFx0XHRcdFx0XHRcdGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzEyLVx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9tZW1jb250cm9sLmM6MjcxMzpcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTI3MTQtXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00ODMwPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDg3MS1cbm1tL21lbWNvbnRyb2wuYzo0ODcyOlx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIGhpZ2gsXG5tbS9tZW1jb250cm9sLmMtNDg3My1cdFx0XHRcdFx0R0ZQX0tFUk5FTCwgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4ODk9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5MzAtXHRcdGlmIChucl9yZWNsYWltcykge1xubW0vbWVtY29udHJvbC5jOjQ5MzE6XHRcdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcbm1tL21lbWNvbnRyb2wuYy00OTMyLVx0XHRcdFx0XHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbi0tXG5tbS92bXNjYW4uYz02ODkzPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjkzMi1cbm1tL3Ztc2Nhbi5jOjY5MzM6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY5MzQtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjk3My0jZWxzZVxubW0vdm1zY2FuLmM6Njk3NDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjk3NS1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz04MDM2PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MTA3LVx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xubW0vdm1zY2FuLmM6ODEwODpcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxubW0vdm1zY2FuLmMtODEwOS1cdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njg3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIENncm91cCBNZW1vcnkgTWFuYWdlbWVudCoqCgpgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuLi4gbm93ICp0aGF0JiMzOTtzKiBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBncmFicyBteSBhdHRlbnRpb24uIEl0IGNsZWFybHkgdGFyZ2V0cyBtZW1vcnkgcHJlc3N1cmUgd2l0aGluIGEgY2dyb3VwLiBJIGxpa2UgdGhhdC4gQnV0IHdoYXQgZWxzZSBpcyBpbiBwbGF5IGhlcmU/IEFoLCAqdGhhdCYjMzk7cyogdGhlIGJlYXV0eSBvZiBjZ3JvdXAgdjIsIHRoZXJlIGlzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhhdCYjMzk7cyBpbnZva2VkIHdoZW4gd2Ugd3JpdGUgdG8gYG1lbW9yeS5yZWNsYWltYCwgd2hpY2ggaXMgdGhlIHVzZXIgaW50ZXJmYWNlIHRvIHRyaWdnZXIgbWVtb3J5IHJlY2xhbWF0aW9uLgoKSSBuZWVkIHRvIGRpdmUgaW50byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IGl0IHdvcmtzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NzAzPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NzA0OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNzA1LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwNjU9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTUwNzAtXG5tbS9tZW1jb250cm9sLmM6NTA3MTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNTA3Mi1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9ODAzMD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtODAzNS1cbm1tL3Ztc2Nhbi5jOjgwMzY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtODAzNy1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODE4OT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MTk0LVxubW0vdm1zY2FuLmM6ODE5NTpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgxOTYtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzI0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIE1HTFJVIFVzYWJpbGl0eSoqCgpPa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBmb2N1c2luZyBvdXIgZWZmb3J0cy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgLSBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHkgd2l0aGluIE1HTFJVIHRoYXQgY291bGQgYmUgaW52b2tlZCBmcm9tIHVzZXJzcGFjZT8gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBgcnVuX2NtZGAgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCBpcyBjYWxsZWQgZnJvbSBkZWJ1Z2ZzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGltZSB0byBkZWx2ZSBpbnRvIGBydW5fY21kYCBhbmQgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydW5fY21kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NDU0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyPTY4PXVzYWdlKCkge1xuLS1cbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNzUtXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyOjc2OnJ1bl9jbWQoKSB7XG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyLTc3LSAgICBpZiBbIFwmIzM0OyRWXCYjMzQ7ID0gMSBdOyB0aGVuXG4tLVxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcj01MzA9cHMzKVxuLS1cbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNTU0LVxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcjo1NTU6ICAgIHJ1bl9jbWQgZGQgaWY9XCYjMzQ7JG9maWxlLmJpblwmIzM0OyBvZj1cJiMzNDskb2ZpbGUuYmluXCYjMzQ7IGNvbnY9bm90cnVuYyAgIFxcXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyLTU1Ni0gICAgICAgIHNraXA9JG92ZXJsYXlfZGVzdCBzZWVrPSRzeXN0ZW1fcmVzZXRfa2VybmVsICAgICAgICAgIFxcXG4tLVxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlci01NTgtXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyOjU1OTogICAgcnVuX2NtZCBkZCBpZj1cJiMzNDskb2ZpbGUuYmluXCYjMzQ7IG9mPVwmIzM0OyRvZmlsZS5iaW5cJiMzNDsgY29udj1ub3RydW5jICAgXFxcbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNTYwLSAgICAgICAgc2tpcD0kc3lzdGVtX3Jlc2V0X292ZXJsYXkgc2Vlaz0kb3ZlcmxheV9kZXN0ICAgICAgICAgXFxcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5jPTQzND1pbnQgY2NwX2NtZF9xdWV1ZV90aHJlYWQodm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5jLTQ1NS1cdFx0LyogRXhlY3V0ZSB0aGUgY29tbWFuZCAqL1xuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYuYzo0NTY6XHRcdGNtZC1cdTAwM2VyZXQgPSBjY3BfcnVuX2NtZChjbWRfcSwgY21kKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LmMtNDU3LVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2Lmg9NjM5PWludCBjY3BfdHJuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB2b2lkICpkYXRhLCBzaXplX3QgbWF4LCBib29sIHdhaXQpO1xuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYuaC02NDAtXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5oOjY0MTppbnQgY2NwX3J1bl9jbWQoc3RydWN0IGNjcF9jbWRfcXVldWUgKmNtZF9xLCBzdHJ1Y3QgY2NwX2NtZCAqY21kKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LmgtNjQyLVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3Atb3BzLmM9MjQ1MD1jY3BfcnVuX2VjY19jbWQoc3RydWN0IGNjcF9jbWRfcXVldWUgKmNtZF9xLCBzdHJ1Y3QgY2NwX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3Atb3BzLmMtMjQ3NS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3Atb3BzLmM6MjQ3NjppbnQgY2NwX3J1bl9jbWQoc3RydWN0IGNjcF9jbWRfcXVldWUgKmNtZF9xLCBzdHJ1Y3QgY2NwX2NtZCAqY21kKVxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1vcHMuYy0yNDc3LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM9MjI3PXN0cnVjdCBnMmRfcnVucXVldWVfbm9kZSB7XG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMjI4LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoyMjk6XHRzdHJ1Y3QgbGlzdF9oZWFkXHRydW5fY21kbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0yMzAtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRldmVudF9saXN0O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYz04MDA9c3RhdGljIHZvaWQgZzJkX2RtYV9zdGFydChzdHJ1Y3QgZzJkX2RhdGEgKmcyZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODAzLVx0c3RydWN0IGcyZF9jbWRsaXN0X25vZGUgKm5vZGUgPVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjgwNDpcdFx0XHRcdGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2cnVucXVldWVfbm9kZS1cdTAwM2VydW5fY21kbGlzdCxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MDUtXHRcdFx0XHRcdFx0c3RydWN0IGcyZF9jbWRsaXN0X25vZGUsIGxpc3QpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYz04MjU9c3RhdGljIHZvaWQgZzJkX2ZyZWVfcnVucXVldWVfbm9kZShzdHJ1Y3QgZzJkX2RhdGEgKmcyZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODMxLVx0LypcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzo4MzI6XHQgKiBjb21tYW5kcyBpbiBydW5fY21kbGlzdCBoYXZlIGJlZW4gY29tcGxldGVkIHNvIHVubWFwIGFsbCBnZW1cbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MzMtXHQgKiBvYmplY3RzIGluIGVhY2ggY29tbWFuZCBub2RlIHNvIHRoYXQgdGhleSBhcmUgdW5yZWZlcmVuY2VkLlxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTgzNC1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjgzNTpcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2cnVucXVldWVfbm9kZS1cdTAwM2VydW5fY21kbGlzdCwgbGlzdClcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MzYtXHRcdGcyZF91bm1hcF9jbWRsaXN0X2dlbShnMmQsIG5vZGUsIHJ1bnF1ZXVlX25vZGUtXHUwMDNlZmlscCk7XG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6ODM3Olx0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNnJ1bnF1ZXVlX25vZGUtXHUwMDNlcnVuX2NtZGxpc3QsIFx1MDAyNmcyZC1cdTAwM2VmcmVlX2NtZGxpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTgzOC1cdG11dGV4X3VubG9jayhcdTAwMjZnMmQtXHUwMDNlY21kbGlzdF9tdXRleCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jPTEyOTk9aW50IGV4eW5vc19nMmRfZXhlY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMwNi1cdHN0cnVjdCBnMmRfcnVucXVldWVfbm9kZSAqcnVucXVldWVfbm9kZTtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzA3Olx0c3RydWN0IGxpc3RfaGVhZCAqcnVuX2NtZGxpc3Q7XG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMwOC1cdHN0cnVjdCBsaXN0X2hlYWQgKmV2ZW50X2xpc3Q7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMTMtXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6MTMxNDpcdHJ1bl9jbWRsaXN0ID0gXHUwMDI2cnVucXVldWVfbm9kZS1cdTAwM2VydW5fY21kbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzE1LVx0ZXZlbnRfbGlzdCA9IFx1MDAyNnJ1bnF1ZXVlX25vZGUtXHUwMDNlZXZlbnRfbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzE2Olx0SU5JVF9MSVNUX0hFQUQocnVuX2NtZGxpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMTctXHRJTklUX0xJU1RfSEVBRChldmVudF9saXN0KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMyMC1cbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzIxOlx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZmaWxlX3ByaXYtXHUwMDNlaW51c2VfY21kbGlzdCwgcnVuX2NtZGxpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMjItXHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmZpbGVfcHJpdi1cdTAwM2VldmVudF9saXN0LCBldmVudF9saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzIzLVxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjEzMjQ6XHRpZiAobGlzdF9lbXB0eShydW5fY21kbGlzdCkpIHtcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzI1LVx0XHRkZXZfZXJyKGcyZC1cdTAwM2VkZXYsIFwmIzM0O3RoZXJlIGlzIG5vIGludXNlIGNtZGxpc3RcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jPTkzOT1pbnQgY29kYV9jaGVja19maXJtd2FyZShzdHJ1Y3QgY29kYV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYy05NjAtXHRcdHJldCA9IC1FSU87XG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYzo5NjE6XHRcdGdvdG8gZXJyX3J1bl9jbWQ7XG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYy05NjItXHR9XG4tLVxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jaGlwcy1tZWRpYS9jb2RhL2NvZGEtYml0LmMtMTAwMS1cbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jOjEwMDI6ZXJyX3J1bl9jbWQ6XG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYy0xMDAzLVx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRldi1cdTAwM2VjbGtfYWhiKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTczPXN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTE3OS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxODA6c3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xODEtXHRcdFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0yMzc9c3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI0My1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoyNDQ6XHRyZXQgPSBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3JlYWQsIGNtZF9kYXRhKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNDUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0yNTc9c3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNjMtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MjY0Olx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXHUwMDNlaW5mby1cdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNjUtfVxuLS1cbmtlcm5lbC9yZWJvb3QuYz04NDA9c3RhdGljIGNvbnN0IGNoYXIgcmVib290X2NtZFtdID0gXCYjMzQ7L3NiaW4vcmVib290XCYjMzQ7O1xua2VybmVsL3JlYm9vdC5jLTg0MS1cbmtlcm5lbC9yZWJvb3QuYzo4NDI6c3RhdGljIGludCBydW5fY21kKGNvbnN0IGNoYXIgKmNtZClcbmtlcm5lbC9yZWJvb3QuYy04NDMte1xuLS1cbmtlcm5lbC9yZWJvb3QuYz04NjI9c3RhdGljIGludCBfX29yZGVybHlfcmVib290KHZvaWQpXG4tLVxua2VybmVsL3JlYm9vdC5jLTg2NS1cbmtlcm5lbC9yZWJvb3QuYzo4NjY6XHRyZXQgPSBydW5fY21kKHJlYm9vdF9jbWQpO1xua2VybmVsL3JlYm9vdC5jLTg2Ny1cbi0tXG5rZXJuZWwvcmVib290LmM9ODc3PXN0YXRpYyBpbnQgX19vcmRlcmx5X3Bvd2Vyb2ZmKGJvb2wgZm9yY2UpXG4tLVxua2VybmVsL3JlYm9vdC5jLTg4MC1cbmtlcm5lbC9yZWJvb3QuYzo4ODE6XHRyZXQgPSBydW5fY21kKHBvd2Vyb2ZmX2NtZCk7XG5rZXJuZWwvcmVib290LmMtODgyLVxuLS1cbm1tL3Ztc2Nhbi5jPTU3NTc9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTc4Ni1cbm1tL3Ztc2Nhbi5jOjU3ODc6c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxubW0vdm1zY2FuLmMtNTc4OC1cdFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcbi0tXG5tbS92bXNjYW4uYz01ODI5PXN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU4OTctXG5tbS92bXNjYW4uYzo1ODk4Olx0XHRlcnIgPSBydW5fY21kKGNtZCwgbWVtY2dfaWQsIG5pZCwgc2VxLCBcdTAwMjZzYywgc3dhcHBpbmVzcywgb3B0KTtcbm1tL3Ztc2Nhbi5jLTU4OTktXHRcdGlmIChlcnIpXG4tLVxuc2NyaXB0cy9jb2NjaWNoZWNrPTEzNT1maVxuc2NyaXB0cy9jb2NjaWNoZWNrLTEzNi1cbnNjcmlwdHMvY29jY2ljaGVjazoxMzc6cnVuX2NtZF9wYXJtYXAoKSB7XG5zY3JpcHRzL2NvY2NpY2hlY2stMTM4LVx0aWYgWyAkVkVSQk9TRSAtbmUgMCBdIDsgdGhlblxuLS1cbnNjcmlwdHMvY29jY2ljaGVjay0xNTUtXG5zY3JpcHRzL2NvY2NpY2hlY2s6MTU2OnJ1bl9jbWRfb2xkKCkge1xuc2NyaXB0cy9jb2NjaWNoZWNrLTE1Ny1cdGxvY2FsIGlcbi0tXG5zY3JpcHRzL2NvY2NpY2hlY2stMTcwLVxuc2NyaXB0cy9jb2NjaWNoZWNrOjE3MTpydW5fY21kKCkge1xuc2NyaXB0cy9jb2NjaWNoZWNrLTE3Mi1cdGlmIFsgXCYjMzQ7JFVTRV9KT0JTXCYjMzQ7ID0gXCYjMzQ7eWVzXCYjMzQ7IF07IHRoZW5cbnNjcmlwdHMvY29jY2ljaGVjazoxNzM6XHRcdHJ1bl9jbWRfcGFybWFwICRAXG5zY3JpcHRzL2NvY2NpY2hlY2stMTc0LVx0ZWxzZVxuc2NyaXB0cy9jb2NjaWNoZWNrOjE3NTpcdFx0cnVuX2NtZF9vbGQgJEBcbnNjcmlwdHMvY29jY2ljaGVjay0xNzYtXHRmaVxuLS1cbnNjcmlwdHMvY29jY2ljaGVjaz0xOTE9Y29jY2luZWxsZSAoKSB7XG4tLVxuc2NyaXB0cy9jb2NjaWNoZWNrLTI0Mi0gICAgaWYgWyBcJiMzNDskTU9ERVwmIzM0OyA9IFwmIzM0O2NoYWluXCYjMzQ7IF0gOyB0aGVuXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjQzOlx0cnVuX2NtZCAkU1BBVENIIC1EIHBhdGNoICAgXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNDQtXHRcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgICAgICAgICAgICAgICB8fCBcXFxuc2NyaXB0cy9jb2NjaWNoZWNrOjI0NTpcdHJ1bl9jbWQgJFNQQVRDSCAtRCByZXBvcnQgIFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjQ2LVx0XHQkRkxBR1MgLS1jb2NjaS1maWxlICRDT0NDSSAkT1BUICRPUFRJT05TIC0tbm8tc2hvdy1kaWZmIHx8IFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjQ3Olx0cnVuX2NtZCAkU1BBVENIIC1EIGNvbnRleHQgXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNDgtXHRcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgICAgICAgICAgICAgICB8fCBcXFxuc2NyaXB0cy9jb2NjaWNoZWNrOjI0OTpcdHJ1bl9jbWQgJFNQQVRDSCAtRCBvcmcgICAgIFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjUwLVx0XHQkRkxBR1MgLS1jb2NjaS1maWxlICRDT0NDSSAkT1BUICRPUFRJT05TIC0tbm8tc2hvdy1kaWZmIHx8IGV4aXQgMVxuc2NyaXB0cy9jb2NjaWNoZWNrLTI1MS0gICAgZWxpZiBbIFwmIzM0OyRNT0RFXCYjMzQ7ID0gXCYjMzQ7cmVwJiM0MztjdHh0XCYjMzQ7IF0gOyB0aGVuXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjUyOlx0cnVuX2NtZCAkU1BBVENIIC1EIHJlcG9ydCAgXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNTMtXHRcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgLS1uby1zaG93LWRpZmYgXHUwMDI2XHUwMDI2IFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjU0Olx0cnVuX2NtZCAkU1BBVENIIC1EIGNvbnRleHQgXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNTUtXHRcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgfHwgZXhpdCAxXG5zY3JpcHRzL2NvY2NpY2hlY2stMjU2LSAgICBlbHNlXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjU3Olx0cnVuX2NtZCAkU1BBVENIIC1EICRNT0RFICAgJEZMQUdTIC0tY29jY2ktZmlsZSAkQ09DQ0kgJE9QVCAkT1BUSU9OUyB8fCBleGl0IDFcbnNjcmlwdHMvY29jY2ljaGVjay0yNTgtICAgIGZpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0zOT1maVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC00MC1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6NDE6cnVuX2NtZCgpIHsgIyBjb21tYW5kXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTQyLVx0ZWNobyBcJiMzNDskKlwmIzM0O1xuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g9Nzc9c2V0X3ZhbHVlX29mKCkgeyAjIGtleSBmaWxlXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC03OS1cdFx0dmFsPWB4YmNfZ2V0X3ZhbCAkMSAxYFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDo4MDpcdFx0cnVuX2NtZCBcJiMzNDtlY2hvICYjMzk7JHZhbCYjMzk7IFx1MDAzZVx1MDAzZSAkMlwmIzM0O1xudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC04MS1cdGZpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD04ND1zZXRfYXJyYXlfb2YoKSB7ICMga2V5IGZpbGVcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTg2LVx0XHR4YmNfZ2V0X3ZhbCAkMSB8IHdoaWxlIHJlYWQgbGluZTsgZG9cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6ODc6XHRcdFx0cnVuX2NtZCBcJiMzNDtlY2hvICYjMzk7JGxpbmUmIzM5OyBcdTAwM2VcdTAwM2UgJDJcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtODgtXHRcdGRvbmVcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTE3MD1zZXR1cF9vbmVfaGlzdG9ncmFtKCkgeyAjIHByZWZpeCB0cmlnZ2VyLWZpbGVcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MTcxOlx0cnVuX2NtZCBcJiMzNDtlY2hvICYjMzk7YHByaW50X29uZV9oaXN0b2dyYW0gJHsxfWAmIzM5OyBcdTAwM2VcdTAwM2UgJHsyfVwmIzM0O1xudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0xNzItfVxuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g9MTgzPXNldHVwX2V2ZW50KCkgeyAjIHByZWZpeCBncm91cCBldmVudCBbaW5zdGFuY2VdXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0xOTEtXHRpZiBbIFwmIzM0OyQzXCYjMzQ7ID0gXCYjMzQ7ZW5hYmxlXCYjMzQ7IF07IHRoZW5cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MTkyOlx0XHRydW5fY21kIFwmIzM0O2VjaG8gMSBcdTAwM2UgJHtldmVudGRpcn1cJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMTkzLVx0XHRyZXR1cm5cbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTE5OC1cdFx0eGJjX2dldF92YWwgJHticmFuY2h9LnByb2JlcyB8IHdoaWxlIHJlYWQgbGluZTsgZG9cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MTk5Olx0XHRcdHJ1bl9jbWQgXCYjMzQ7ZWNobyAmIzM5O3A6a3Byb2Jlcy8kMyAkbGluZSYjMzk7IFx1MDAzZVx1MDAzZSAkVFJBQ0VGUy9rcHJvYmVfZXZlbnRzXCYjMzQ7XG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTIwMC1cdFx0ZG9uZVxuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjAyLVx0c3ludGhldGljKVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyMDM6XHRcdHJ1bl9jbWQgXCYjMzQ7ZWNobyAmIzM5O2Bjb21wb3NlX3N5bnRoICQzICR7YnJhbmNofS5maWVsZHNgJiMzOTsgXHUwMDNlXHUwMDNlICRUUkFDRUZTL3N5bnRoZXRpY19ldmVudHNcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjA0LVx0XHQ7O1xuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjEyLVx0aWYgeGJjX2hhc19rZXkgJHticmFuY2h9LmVuYWJsZTsgdGhlblxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyMTM6XHRcdHJ1bl9jbWQgXCYjMzQ7ZWNobyAxIFx1MDAzZSAke2V2ZW50ZGlyfS9lbmFibGVcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjE0LVx0Zmlcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTIxNz1zZXR1cF9ldmVudHMoKSB7ICMgcHJlZml4KFwmIzM0O2Z0cmFjZVwmIzM0OyBvciBcJiMzNDtmdHJhY2UuaW5zdGFuY2UuSU5TVEFOQ0VcJiMzNDspIFtpbnN0YW5jZV1cbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTIyNS1cdFx0aWYgWyBcJiMzNDskMlwmIzM0OyBdOyB0aGVuXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjIyNjpcdFx0XHRydW5fY21kIFwmIzM0O2VjaG8gMSBcdTAwM2UgJFRSQUNFRlMvaW5zdGFuY2VzLyQyL2V2ZW50cy9lbmFibGVcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjI3LVx0XHRlbHNlXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjIyODpcdFx0XHRydW5fY21kIFwmIzM0O2VjaG8gMSBcdTAwM2UgJFRSQUNFRlMvZXZlbnRzL2VuYWJsZVwmIzM0O1xudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0yMjktXHRcdGZpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0yNDQ9c2V0dXBfaW5zdGFuY2UoKSB7ICMgW2luc3RhbmNlXVxuLS1cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjYzLVx0aWYgeGJjX2hhc19rZXkgJHtpbnN0YW5jZX0uYWxsb2Nfc25hcHNob3Q7IHRoZW5cbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjY0Olx0XHRydW5fY21kIFwmIzM0O2VjaG8gMSBcdTAwM2UgJHtpbnN0YW5jZWRpcn0vc25hcHNob3RcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjY1LVx0Zmlcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI2OS1cdFx0c2l6ZT1gZXZhbCBzaXplMmtiICRzaXplYFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyNzA6XHRcdHJ1bl9jbWQgXCYjMzQ7ZWNobyAkc2l6ZSBcdTAwM2VcdTAwM2UgJHtpbnN0YW5jZWRpcn0vYnVmZmVyX3NpemVfa2JcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjcxLVx0Zmlcbi0tXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTI3OD1pZiB4YmNfaGFzX2tleSBcJiMzNDtrZXJuZWwuZHVtcF9vbl9vb3BzXCYjMzQ7OyB0aGVuXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0yODAtXHRbIFwmIzM0OyRkdW1wX21vZGVcJiMzNDsgXSBcdTAwMjZcdTAwMjYgZHVtcF9tb2RlPWBldmFsIGVjaG8gJGR1bXBfbW9kZWAgfHwgZHVtcF9tb2RlPTFcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjgxOlx0cnVuX2NtZCBcJiMzNDtlY2hvIFxcXCYjMzQ7JGR1bXBfbW9kZVxcXCYjMzQ7IFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9kdW1wX29uX29vcHNcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjgyLWZpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0yOTU9aWYgeGJjX2hhc19icmFuY2ggXCYjMzQ7ZnRyYWNlLmluc3RhbmNlXCYjMzQ7OyB0aGVuXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI5Ni1cdGZvciBpIGluIGB4YmNfc3Via2V5cyBcJiMzNDtmdHJhY2UuaW5zdGFuY2VcJiMzNDsgMWA7IGRvXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjI5NzpcdFx0cnVuX2NtZCBcJiMzNDtta2RpciAtcCAkVFJBQ0VGUy9pbnN0YW5jZXMvJGlcJiMzNDtcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjk4LVx0XHRzZXR1cF9pbnN0YW5jZSAkaVxuLS1cbnRvb2xzL3BlcmYvdGVzdHMvc2hlbGwvbGliL2F0dHIucHk9MTQ3PWNsYXNzIFRlc3Qob2JqZWN0KTpcbi0tXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5LTI4MS1cbnRvb2xzL3BlcmYvdGVzdHMvc2hlbGwvbGliL2F0dHIucHk6MjgyOiAgICBkZWYgcnVuX2NtZChzZWxmLCB0ZW1wZGlyKTpcbnRvb2xzL3BlcmYvdGVzdHMvc2hlbGwvbGliL2F0dHIucHktMjgzLSAgICAgICAganVuazEsIGp1bmsyLCBqdW5rMywganVuazQsIG15YXJjaCA9IChvcy51bmFtZSgpKVxuLS1cbnRvb2xzL3BlcmYvdGVzdHMvc2hlbGwvbGliL2F0dHIucHktMzc4LSAgICAgICAgICAgICMgcnVuIHRoZSB0ZXN0IHNjcmlwdFxudG9vbHMvcGVyZi90ZXN0cy9zaGVsbC9saWIvYXR0ci5weTozNzk6ICAgICAgICAgICAgc2VsZi5ydW5fY21kKHRlbXBkaXIpO1xudG9vbHMvcGVyZi90ZXN0cy9zaGVsbC9saWIvYXR0ci5weS0zODAtXG4tLVxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5PTM2PWRlZiBtYWluKGFyZ3Y6IFNlcXVlbmNlW3N0cl0pIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL2t1bml0L3J1bl9jaGVja3MucHktNDUtXHRcdFx0Y29udGludWVcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weTo0NjpcdFx0ZiA9IGV4ZWN1dG9yLnN1Ym1pdChydW5fY21kLCBhcmd2KVxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5LTQ3LVx0XHRmdXR1cmVfdG9fbmFtZVtmXSA9IG5hbWVcbi0tXG50b29scy90ZXN0aW5nL2t1bml0L3J1bl9jaGVja3MucHktNzUtXG50b29scy90ZXN0aW5nL2t1bml0L3J1bl9jaGVja3MucHk6NzY6ZGVmIHJ1bl9jbWQoYXJndjogU2VxdWVuY2Vbc3RyXSkgLVx1MDAzZSBOb25lOlxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5LTc3LVx0c3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJndiwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBjd2Q9QUJTX1RPT0xfUEFUSCwgdGltZW91dD1USU1FT1VUKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM9MjU9c3RydWN0IHZlcml0eV9pbmZvIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTM2LS8qIFJ1biBhIGNvbW1hbmQgYW5kIG9wdGlvbmFsbHkgY2FwdHVyZSB0aGUgZmlyc3QgbGluZSBvZiBzdGRvdXQuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjM3OnN0YXRpYyBpbnQgcnVuX2NtZChjb25zdCBjaGFyICpjbWQsIGNoYXIgKm91dCwgc2l6ZV90IG91dF9zeilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMzgte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM9NTc9c3RhdGljIGJvb2wgaGFzX3ByZXJlcXVpc2l0ZXModm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTYzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzo2NDpcdGlmIChydW5fY21kKFwmIzM0O21vZHByb2JlIGxvb3AgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OywgTlVMTCwgMCkgXHUwMDI2XHUwMDI2XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjY1Olx0ICAgIHJ1bl9jbWQoXCYjMzQ7bHMgL2Rldi9sb29wLWNvbnRyb2wgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OywgTlVMTCwgMCkpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtNjYtXHRcdHByaW50ZihcJiMzNDtTS0lQOiBubyBsb29wIGRldmljZSBzdXBwb3J0XFxuXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTY5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzo3MDpcdGlmIChydW5fY21kKFwmIzM0O21vZHByb2JlIGRtLXZlcml0eSAyXHUwMDNlL2Rldi9udWxsXCYjMzQ7LCBOVUxMLCAwKSBcdTAwMjZcdTAwMjZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NzE6XHQgICAgcnVuX2NtZChcJiMzNDtkbXNldHVwIHRhcmdldHMgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgdmVyaXR5XCYjMzQ7LCBOVUxMLCAwKSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy03Mi1cdFx0cHJpbnRmKFwmIzM0O1NLSVA6IGRtLXZlcml0eSBtb2R1bGUgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy03NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NzY6XHRpZiAocnVuX2NtZChcJiMzNDt3aGljaCB2ZXJpdHlzZXR1cCBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcJiMzNDssIE5VTEwsIDApKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTc3LVx0XHRwcmludGYoXCYjMzQ7U0tJUDogdmVyaXR5c2V0dXAgbm90IGZvdW5kXFxuXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jPTg0PXZvaWQgdGVzdF9sc21fYmRldih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTA1LVx0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXCYjMzQ7ZG1zZXR1cCByZW1vdmUgJXMgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OywgRE1fTkFNRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjEwNjpcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTA3LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTMyLVx0XHQgXCYjMzQ7bG9zZXR1cCAtLWZpbmQgLS1zaG93ICVzIDJcdTAwM2UvZGV2L251bGxcJiMzNDssIGRhdGFfaW1nKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTMzOlx0aWYgKCFBU1NFUlRfT0socnVuX2NtZChjbWQsIGRhdGFfbG9vcCwgc2l6ZW9mKGRhdGFfbG9vcCkpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xMzQtXHRcdCAgICAgICBcJiMzNDtsb3NldHVwIGRhdGFcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTM4LVx0XHQgXCYjMzQ7bG9zZXR1cCAtLWZpbmQgLS1zaG93ICVzIDJcdTAwM2UvZGV2L251bGxcJiMzNDssIGhhc2hfaW1nKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTM5Olx0aWYgKCFBU1NFUlRfT0socnVuX2NtZChjbWQsIGhhc2hfbG9vcCwgc2l6ZW9mKGhhc2hfbG9vcCkpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xNDAtXHRcdCAgICAgICBcJiMzNDtsb3NldHVwIGhhc2hcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTQ3LVx0XHQgZGF0YV9sb29wLCBoYXNoX2xvb3ApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoxNDg6XHRpZiAoIUFTU0VSVF9PSyhydW5fY21kKGNtZCwgcm9vdGhhc2gsIHNpemVvZihyb290aGFzaCkpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xNDktXHRcdCAgICAgICBcJiMzNDt2ZXJpdHlzZXR1cCBmb3JtYXRcJiMzNDspKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTY3LVx0XHQgZGF0YV9sb29wLCBETV9OQU1FLCBoYXNoX2xvb3AsIHJvb3RoYXNoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTY4Olx0aWYgKCFBU1NFUlRfT0socnVuX2NtZChjbWQsIE5VTEwsIDApLCBcJiMzNDt2ZXJpdHlzZXR1cCBvcGVuXCYjMzQ7KSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTY5LVx0XHRnb3RvIHRlYXJkb3duO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTk4LVx0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXCYjMzQ7ZG1zZXR1cCByZW1vdmUgJXMgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OywgRE1fTkFNRSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjE5OTpcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjAwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA0LVx0XHRcdCBkYXRhX2xvb3ApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoyMDU6XHRcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA2LVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA5LVx0XHRcdCBoYXNoX2xvb3ApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoyMTA6XHRcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjExLVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5PTk3PWNsYXNzIFJlY29yZFZhbHVlUGlja2VyOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTEyMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjEyMTpkZWYgcnVuX2NtZChjbWQsIGpzb249RmFsc2UpOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMTIyLSAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk9MTI4PWRlZiBydW5fanNvbl9jbWQoY21kKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjEyOTogICAgcmV0dXJuIHJ1bl9jbWQoY21kLCBqc29uPVRydWUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0xMzAtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk9MTcyPWNsYXNzIFBvb2woQ29tbW9uSXRlbSk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMTc1LSAgICBkZWYgZGxfc2V0KHNlbGYsIGRsbmFtZSwgc2l6ZSwgdGh0eXBlKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjE3NjogICAgICAgIHJ1bl9jbWQoXCYjMzQ7ZGV2bGluayBzYiBwb29sIHNldCB7fSBzYiB7fSBwb29sIHt9IHNpemUge30gdGh0eXBlIHt9XCYjMzQ7LmZvcm1hdChkbG5hbWUsIHNlbGZbXCYjMzQ7c2JcJiMzNDtdLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMTc3LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZltcJiMzNDtwb29sXCYjMzQ7XSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weT0yMzA9Y2xhc3MgVGNCaW5kKENvbW1vbkl0ZW0pOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTIzNy0gICAgZGVmIGRsX3NldChzZWxmLCBwb29sLCB0aCk6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weToyMzg6ICAgICAgICBydW5fY21kKFwmIzM0O2Rldmxpbmsgc2IgdGMgYmluZCBzZXQge30gc2Ige30gdGMge30gdHlwZSB7fSBwb29sIHt9IHRoIHt9XCYjMzQ7LmZvcm1hdChzZWxmW1wmIzM0O2RscG9ydG5hbWVcJiMzNDtdLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMjM5LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmW1wmIzM0O3NiXCYjMzQ7XSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weT0zMDQ9Y2xhc3MgUG9ydFBvb2woQ29tbW9uSXRlbSk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMzExLSAgICBkZWYgZGxfc2V0KHNlbGYsIHRoKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjMxMjogICAgICAgIHJ1bl9jbWQoXCYjMzQ7ZGV2bGluayBzYiBwb3J0IHBvb2wgc2V0IHt9IHNiIHt9IHBvb2wge30gdGgge31cJiMzNDsuZm9ybWF0KHNlbGZbXCYjMzQ7ZGxwb3J0bmFtZVwmIzM0O10sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0zMTMtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbXCYjMzQ7c2JcJiMzNDtdLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTE5NT1zZXRfcGluZ19ncm91cCgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjAzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjA0OmRvX3J1bl9jbWQoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjA1LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMjI6cnVuX2NtZCgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjMte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjI0Olx0ZG9fcnVuX2NtZCAke05TQV9DTUR9ICQqXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjUtfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjI2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjI3OnJ1bl9jbWRfbnNiKClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIyOC17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMjk6XHRkb19ydW5fY21kICR7TlNCX0NNRH0gJCpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIzMC19XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMzEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMzI6cnVuX2NtZF9uc2MoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjMzLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjIzNDpcdGRvX3J1bl9jbWQgJHtOU0NfQ01EfSAkKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjM1LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaD0yMzc9c2V0dXBfY21kKClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yNDEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyNDI6XHRydW5fY21kICR7Y21kfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjQzLVx0cmM9JD9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaD0yNTk9c2V0dXBfY21kX25zYigpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjYzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjY0Olx0cnVuX2NtZF9uc2IgJHtjbWR9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yNjUtXHRyYz0kP1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTI4MT1zZXR1cF9jbWRfbnNjKClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yODUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyODY6XHRydW5fY21kX25zYyAke2NtZH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTI4Ny1cdHJjPSQ/XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9MzA0PXNldF9zeXNjdGwoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTMwNy1cdGVjaG9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjMwODpcdHJ1bl9jbWQgc3lzY3RsIC1xIC13ICQqXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0zMDktfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTU4ND1pcHY0X3Bpbmdfbm92cmYoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTU5My1cdFx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo1OTQ6XHRcdHJ1bl9jbWQgcGluZyAtYzEgLXcxICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTU5NS1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBvdXRcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC01OTctXHRcdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NTk4Olx0XHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTU5OS1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBvdXQsIGRldmljZSBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjAxLVx0XHRsb2dfc3RhcnRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjYwMjpcdFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfTE9fSVB9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYwMy1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBvdXQsIGFkZHJlc3MgYmluZFwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYxMC1cdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjExOlx0cnVuX2NtZCBwaW5nIC1jIDEgLXcgMSAtciAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02MTItXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIG91dCAoZG9uJiMzOTt0IHJvdXRlKSwgcGVlciBvbiBsaW5rXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjE2LVx0c2hvd19oaW50IFwmIzM0O0ZhaWxzIHNpbmNlIHBlZXIgaXMgbm90IG9uIGxpbmtcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjYxNzpcdHJ1bl9jbWQgcGluZyAtYyAxIC13IDEgLXIgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjE4LVx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDEgXCYjMzQ7cGluZyBvdXQgKGRvbiYjMzk7dCByb3V0ZSksIHBlZXIgbm90IG9uIGxpbmtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02MjUtXHRcdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjI2Olx0XHRydW5fY21kX25zYiBwaW5nIC1jMSAtdzEgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjI3LVx0XHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIGluXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjM1LVx0XHRsb2dfc3RhcnRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjYzNjpcdFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjM3LVx0XHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIGxvY2FsXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjQ1LVx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2NDY6XHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY0Ny1cdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFwmIzM0O3BpbmcgbG9jYWwsIGRldmljZSBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjU1LVx0XHRzaG93X2hpbnQgXCYjMzQ7RmFpbHMgc2luY2UgYWRkcmVzcyBvbiBsb29wYmFjayBkZXZpY2UgaXMgb3V0IG9mIGRldmljZSBzY29wZVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjU2Olx0XHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY1Ny1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDEgXCYjMzQ7cGluZyBsb2NhbCwgZGV2aWNlIGJpbmRcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02NjktXHRhPSR7TlNCX0xPX0lQfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjcwOlx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjcxLVx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDIgXCYjMzQ7cGluZyBvdXQsIGJsb2NrZWQgYnkgcnVsZVwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY3NS1cdCMgY2FzZSBzdWNjZWVkcyBkZXNwaXRlIHRoZSBydWxlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2NzY6XHQjIHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjc3LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY4MC1cdHNob3dfaGludCBcJiMzNDtSZXNwb25zZSBnZW5lcmF0ZXMgSUNNUCAob3IgYXJwIHJlcXVlc3QgaXMgaWdub3JlZCkgZHVlIHRvIGlwIHJ1bGVcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjY4MTpcdHJ1bl9jbWRfbnNiIHBpbmcgLWMxIC13MSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02ODItXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMSBcJiMzNDtwaW5nIGluLCBibG9ja2VkIGJ5IHJ1bGVcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02OTctXHRhPSR7TlNCX0xPX0lQfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6Njk4Olx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjk5LVx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDIgXCYjMzQ7cGluZyBvdXQsIGJsb2NrZWQgYnkgcm91dGVcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03MDMtXHQjIGNhc2Ugc3VjY2VlZHMgZGVzcGl0ZSBub3QgaGF2aW5nIGEgcm91dGUgZm9yIHRoZSBhZGRyZXNzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3MDQ6XHQjIHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzA1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcwOC1cdHNob3dfaGludCBcJiMzNDtSZXNwb25zZSBpcyBkcm9wcGVkIChvciBhcnAgcmVxdWVzdCBpcyBpZ25vcmVkKSBkdWUgdG8gaXAgcm91dGVcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjcwOTpcdHJ1bl9jbWRfbnNiIHBpbmcgLWMxIC13MSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03MTAtXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMSBcJiMzNDtwaW5nIGluLCBibG9ja2VkIGJ5IHJvdXRlXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzE4LVx0YT0ke05TQl9MT19JUH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjcxOTpcdHJ1bl9jbWQgcGluZyAtYzEgLXcxICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcyMC1cdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAyIFwmIzM0O3Bpbmcgb3V0LCB1bnJlYWNoYWJsZSBkZWZhdWx0IHJvdXRlXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzI0LVx0IyBjYXNlIHN1Y2NlZWRzIGRlc3BpdGUgbm90IGhhdmluZyBhIHJvdXRlIGZvciB0aGUgYWRkcmVzc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzI1Olx0IyBydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcyNi19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9NzI4PWlwdjRfcGluZ192cmYoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc0MC1cdFx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NDE6XHRcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7VlJGfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NDItXHRcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFwmIzM0O3Bpbmcgb3V0LCBWUkYgYmluZFwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc0NC1cdFx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NDU6XHRcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzQ2LVx0XHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIG91dCwgZGV2aWNlIGJpbmRcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NDgtXHRcdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzQ5Olx0XHRydW5fY21kIGlwIHZyZiBleGVjICR7VlJGfSBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfSVB9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc1MC1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBvdXQsIHZyZiBkZXZpY2UgJiM0MzsgZGV2IGFkZHJlc3MgYmluZFwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc1Mi1cdFx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NTM6XHRcdHJ1bl9jbWQgaXAgdnJmIGV4ZWMgJHtWUkZ9IHBpbmcgLWMxIC13MSAtSSAke1ZSRl9JUH0gJHthfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzU0LVx0XHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcJiMzNDtwaW5nIG91dCwgdnJmIGRldmljZSAmIzQzOyB2cmYgYWRkcmVzcyBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzYyLVx0XHRsb2dfc3RhcnRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjc2MzpcdFx0cnVuX2NtZF9uc2IgcGluZyAtYzEgLXcxICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc2NC1cdFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXCYjMzQ7cGluZyBpblwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc3My1cdFx0c2hvd19oaW50IFwmIzM0O1NvdXJjZSBhZGRyZXNzIHNob3VsZCBiZSAke2F9XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NzQ6XHRcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7VlJGfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NzUtXHRcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFwmIzM0O3BpbmcgbG9jYWwsIFZSRiBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzgzLVx0bG9nX3N0YXJ0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3ODQ6XHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc4NS1cdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFwmIzM0O3BpbmcgbG9jYWwsIGRldmljZSBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzkxLVx0XHRzaG93X2hpbnQgXCYjMzQ7RmFpbHMgc2luY2UgYWRkcmVzcyBvbiB2cmYgZGV2aWNlIGlzIG91dCBvZiBkZXZpY2Ugc2NvcGVcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjc5MjpcdFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03OTMtXHRcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAyIFwmIzM0O3BpbmcgbG9jYWwsIGRldmljZSBiaW5kXCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtODAzLVx0YT0ke05TQl9MT19JUH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjgwNDpcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7VlJGfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDUtXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMiBcJiMzNDtwaW5nIG91dCwgdnJmIGJpbmQsIGJsb2NrZWQgYnkgcnVsZVwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTgwNy1cdGxvZ19zdGFydFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6ODA4Olx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDktXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMiBcJiMzNDtwaW5nIG91dCwgZGV2aWNlIGJpbmQsIGJsb2NrZWQgYnkgcnVsZVwmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTgxMy1cdHNob3dfaGludCBcJiMzNDtSZXNwb25zZSBsb3N0IGR1ZSB0byBpcCBydWxlXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo4MTQ6XHRydW5fY21kX25zYiBwaW5nIC1jMSAtdzEgJHthfVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNR0xSVSYjMzk7cyBLZXJuZWwgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgTUdMUlUgaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBydW5fY21kYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCwgYnV0IGl0JiMzOTtzICpzdGF0aWMqLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBodXJkbGUuIFRoZSBkZWJ1Z2ZzIGludGVyZmFjZSwgYGxydV9nZW5fc2VxX3dyaXRlYCwgY2FsbHMgYHJ1bl9jbWRgLCBidXQgaXQmIzM5O3MgYWxzbyBzdGF0aWMsIHRob3VnaCBpdCYjMzk7cyByZWdpc3RlcmVkIGFzIGEgZmlsZSBvcGVyYXRpb24uIEhtbSwgaXMgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24/CgpMZXQmIzM5O3Mgc2Vl4oCmIEkga25vdyBgbHJ1X2dlbl9kb19hZ2luZ2AgZXhpc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jYCwgYnV0IHRoYXQmIzM5O3MgdXNlcnNwYWNlLCBzbyBpdCYjMzk7cyBub3QgcmVsZXZhbnQgaW4gdGhpcyBjb250ZXh0LgoKUmlnaHQsIGBGb2N1c1N5bWJvbHNgIGFyZSBzdXBwb3NlZCB0byBiZSBrZXJuZWwgZnVuY3Rpb25zISBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoZSBmdW5jdGlvbnMgd2UgY2FuIGZvY3VzIG9uIGFyZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGFuZCBgYmFsYW5jZV9wZ2RhdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaG9va3MsIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcy4KCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIG5vbi1zdGF0aWMgYW5kIG5vdCBpbmxpbmVkLiBZZXMsIGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLiBDb25maXJtZWQuIEdvb2QuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGxvb2tzIHRvIGJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gVGhhdCYjMzk7cyBhbm90aGVyIHBvdGVudGlhbCBwb2ludCBvZiBlbnRyeSwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAgaXMgYWxzbyBub24tc3RhdGljLgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBtb2RpZmllcyBib3RoIGBtbS92bXNjYW4uY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjcml0aWNhbCBjb2RlIGNoYW5nZXMgYXJlIGdhdGVkIGJ5IHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBkaXJlY3RpdmVzLiBJJiMzOTtsbCBjaGVjayBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDM5ODIgdG8gY29uZmlybSB0aGlzLiBUaGF0IHNob3VsZCB0ZWxsIG1lIGlmIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NjA6XHRcbjM5NjE6XHRcdC8qIGZpbmQgdGhlIG9sZGVzdCBwb3B1bGF0ZWQgZ2VuZXJhdGlvbiAqL1xuMzk2MjpcdFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xuMzk2MzpcdFx0XHR3aGlsZSAobWluX3NlcVt0eXBlXSAmIzQzOyBNSU5fTlJfR0VOUyBcdTAwM2M9IGxydWdlbi1cdTAwM2VtYXhfc2VxKSB7XG4zOTY0Olx0XHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxW3R5cGVdKTtcbjM5NjU6XHRcbjM5NjY6XHRcdFx0XHRmb3IgKHpvbmUgPSAwOyB6b25lIFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUmIzQzOyYjNDM7KSB7XG4zOTY3Olx0XHRcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKSlcbjM5Njg6XHRcdFx0XHRcdFx0Z290byBuZXh0O1xuMzk2OTpcdFx0XHRcdH1cbjM5NzA6XHRcbjM5NzE6XHRcdFx0XHRtaW5fc2VxW3R5cGVdJiM0MzsmIzQzOztcbjM5NzI6XHRcdFx0XHRzZXFfaW5jX2ZsYWcgPSB0cnVlO1xuMzk3MzpcdFx0XHR9XG4zOTc0Olx0bmV4dDpcbjM5NzU6XHRcdFx0O1xuMzk3NjpcdFx0fVxuMzk3NzpcdFxuMzk3ODpcdFx0LypcbjM5Nzk6XHRcdCAqIElmIG1pbl9zZXFbdHlwZV0gb2YgYm90aCBhbm9ueW1vdXMgYW5kIGZpbGUgaXMgbm90IGluY3JlYXNlZCxcbjM5ODA6XHRcdCAqIHJldHVybiBoZXJlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNoZWNraW5nIG92ZXJoZWFkIGxhdGVyLlxuMzk4MTpcdFx0ICovXG4zOTgyOlx0XHRpZiAoIXNlcV9pbmNfZmxhZylcbjM5ODM6XHRcdFx0cmV0dXJuO1xuMzk4NDpcdFxuMzk4NTpcdFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xuMzk4NjpcdFx0XHRpZiAobWluX3NlcVt0eXBlXSBcdTAwM2M9IGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKVxuMzk4NzpcdFx0XHRcdGNvbnRpbnVlO1xuMzk4ODpcdFxuMzk4OTpcdFx0XHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xuMzk5MDpcdFx0XHRXUklURV9PTkNFKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdLCBtaW5fc2VxW3R5cGVdKTtcbjM5OTE6XHRcdH1cbjM5OTI6XHR9XG4zOTkzOlx0XG4zOTk0Olx0c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4zOTk1Olx0e1xuMzk5NjpcdFx0Ym9vbCBzdWNjZXNzO1xuMzk5NzpcdFx0aW50IHByZXYsIG5leHQ7XG4zOTk4Olx0XHRpbnQgdHlwZSwgem9uZTtcbjM5OTk6XHRcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuNDAwMDpcdHJlc3RhcnQ6XG40MDAxOlx0XHRpZiAoc2VxIFx1MDAzYyBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1heF9zZXEpKVxuNDAwMjpcdFx0XHRyZXR1cm4gZmFsc2U7XG40MDAzOlx0XG40MDA0Olx0XHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbjQwMDU6XHRcbjQwMDY6XHRcdFZNX1dBUk5fT05fT05DRSghc2VxX2lzX3ZhbGlkKGxydXZlYykpO1xuNDAwNzpcdFxuNDAwODpcdFx0c3VjY2VzcyA9IHNlcSA9PSBscnVnZW4tXHUwMDNlbWF4X3NlcTtcbjQwMDk6XHRcdGlmICghc3VjY2VzcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIE1HTFJVIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGhpcyBsb29rcyBsaWtlIEkmIzM5O20gaW5zaWRlIHRoZSBNR0xSVSBjb2RlLCBwZXJmZWN0LiBOb3csIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBXaGF0IGFyZSB0aGUga2V5IHNldHRpbmdzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBrbm93IGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGJpZyBvbmUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlcnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gZW5hYmxpbmcgaXQgYnkgZGVmYXVsdC4gQWgsIHllcywgdGhlcmUgaXQgaXMhIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBsb29rcyBsaWtlIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJdCYjMzk7cyBwcm9iYWJseSB1c2VkIHRvIHNldCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJIHNob3VsZCByZWFsbHkganVtcCBvdmVyIHRvIGBtbS9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGRldGFpbHMgb2YgYExSVV9HRU5gIGFuZCBhbnkgZGVwZW5kZW50IG9wdGlvbnMuIExldCYjMzk7cyBnbyB0YWtlIGEgbG9vayB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDA6XHQjIG11bHRpLWdlbiBMUlUge1xuMTQwMTpcdGNvbmZpZyBMUlVfR0VOXG4xNDAyOlx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDM6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA0Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDU6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwNjpcdFx0aGVscFxuMTQwNzpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQwOTpcdFxuMTQxMDpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTI6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxMzpcdFx0aGVscFxuMTQxNDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE1Olx0XG4xNDE2Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MTc6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDE4Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTk6XHRcdGhlbHBcbjE0MjA6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDIxOlx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDIyOlx0XG4xNDIzOlx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyNDpcdFxuMTQyNTpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyNjpcdFx0ZGVmX2Jvb2wgeVxuMTQyNzpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0Mjg6XHQjIH1cbjE0Mjk6XHRcbjE0MzA6XHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbjE0MzE6XHQgICAgICAgZGVmX2Jvb2wgblxuMTQzMjpcdFxuMTQzMzpcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcbjE0MzQ6XHRcdGRlZl9ib29sIHlcbjE0MzU6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4xNDM2Olx0XHRoZWxwXG4xNDM3Olx0XHQgIEFsbG93IHBlci12bWEgbG9ja2luZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZy5cbjE0Mzg6XHRcbjE0Mzk6XHRcdCAgVGhpcyBmZWF0dXJlIGFsbG93cyBsb2NraW5nIGVhY2ggdmlydHVhbCBtZW1vcnkgYXJlYSBzZXBhcmF0ZWx5IHdoZW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0OTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IFJlY2xhaW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZSBpbiBgRW5hYmxlQ29uZmlnc2Agc2luY2UgdGhleSBzZWVtIGNlbnRyYWwgdG8gdGhpcyBtZW1vcnkgcmVjbGFpbSBjaGFuZ2UuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCwgaW52b2x2aW5nIGNoYW5nZXMgdG8gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBzd2FwcGluZXNzIGNoZWNrcywgaG93IGl0IG1hbmFnZXMgZ2VuZXJhdGlvbiBleGhhdXN0aW9uIGR1cmluZyBmb2xpbyBzY2FucywgcmV0cmllcyB3aXRoIGRpZmZlcmVudCBmb2xpbyB0eXBlcywgYW5kIHRyaWdnZXJzIGFnaW5nIGJhc2VkIG9uIGV4aGF1c3Rpb24gYW5kIGltYmFsYW5jZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byB1bmNvdmVyIGFueSBzdWJ0bGUgYnVncy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIHRoZSBkaXJlY3QgcmVjbGFpbSBlbnRyeSwgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBmb3IgbWVtY2cgcmVjbGFpbS4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFub3RoZXIsIGFzIGlzIGBzaHJpbmtfYWxsX21lbW9yeWAuIEkga25vdyBgYmFsYW5jZV9wZ2RhdGAgKGtzd2FwZCkgaXMgYSBrdGhyZWFkLCBidXQgaXQmIzM5O3Mgbm9uLXN0YXRpYyBzbyBpdCYjMzk7cyBhIHZhbGlkIHRhcmdldCB0b28sIGV2ZW4gaWYgaW5kaXJlY3RseSB0aHJvdWdoIG1lbW9yeSBhbGxvY2F0aW9uLgoKSSYjMzk7bSBsaXN0aW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCBhcyBteSBjb3JlIGZ1enppbmcgdGFyZ2V0cy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBhdmFpbGFiaWxpdHkgb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gOyB5ZXMsIGl0JiMzOTtzIHRoZXJlIGluIGBtbS92bXNjYW4uY2AuIEFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLCB3aGljaCBpcyBhbHNvIGluIGBtbS92bXNjYW4uY2AsIHVzZWQgZm9yIGhpYmVybmF0aW9uLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHByaW9yaXRpemluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcyBtb3JlIGRpcmVjdCByZWNsYWltIGVudHJ5IHBvaW50cy4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgYHN5c19tYWR2aXNlYCB3aXRoIGBNQURWX1BBR0VPVVRgIG9yIGBNQURWX0NPTERgLCB3aGljaCBsZWFkIHRvIGBtYWR2aXNlX3BhZ2VvdXRgIGFuZCB1bHRpbWF0ZWx5IHRvIGByZWNsYWltX3BhZ2VzYC4gVGhhdCYjMzk7cyBhbm90aGVyIHBvdGVudGlhbCB2ZWN0b3IsIHNvIEkgc2hvdWxkIGFuYWx5emUgYHJlY2xhaW1fcGFnZXNgIHRvbyB0byBzZWUgaWYgdGhhdCBzaG91bGQgYWxzbyBiZSBhZGRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9MjU3PXN0YXRpYyB2b2lkIHNneF9yZWNsYWltZXJfd3JpdGUoc3RydWN0IHNneF9lcGNfcGFnZSAqZXBjX3BhZ2UsXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTMwMi0gKi9cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozMDM6c3RhdGljIHZvaWQgc2d4X3JlY2xhaW1fcGFnZXModm9pZClcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDQte1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz0zOTY9dm9pZCBzZ3hfcmVjbGFpbV9kaXJlY3Qodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtMzk4LVx0aWYgKHNneF9zaG91bGRfcmVjbGFpbShTR1hfTlJfTE9XX1BBR0VTKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozOTk6XHRcdHNneF9yZWNsYWltX3BhZ2VzKCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDAwLX1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9NDAyPXN0YXRpYyBpbnQga3NneGQodm9pZCAqcClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDIxLVx0XHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9ISUdIX1BBR0VTKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo0MjI6XHRcdFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy00MjMtXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTU2Nz1zdHJ1Y3Qgc2d4X2VwY19wYWdlICpzZ3hfYWxsb2NfZXBjX3BhZ2Uodm9pZCAqb3duZXIsIGJvb2wgcmVjbGFpbSlcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkwLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjU5MTpcdFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy01OTItXHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jPTM4Nz1zdGF0aWMgdm9pZCBzbGFfZnJlZShzdHJ1Y3Qgc2xhX2FkZHJfdCBzbGEsIHNpemVfdCBsZW4sIGJvb2wgZmlybXdhcmVfc3RhdGUpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDAzLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM6NDA0Olx0XHRcdFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNjYXR0ZXJbaV0pLCAxLCBmYWxzZSk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MDUtXHRcdFx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTQwOC1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jOjQwOTpcdFx0XHRyZXQgPSBzbnBfcmVjbGFpbV9wYWdlcyhzbGFfdG9fcGEoc2xhKSwgMSwgZmFsc2UpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDEwLVx0XHR9XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zNTg9c3RhdGljIGludCBzZXZfd3JpdGVfaW5pdF9leF9maWxlX2lmX3JlcXVpcmVkKGludCBjbWRfaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zODMtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjM4NDppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTM4NS17XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTctfVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0MTg6RVhQT1JUX1NZTUJPTF9HUEwoc25wX3JlY2xhaW1fcGFnZXMpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTktXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQyMD1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDM4LVx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQzOTpcdHNucF9yZWNsYWltX3BhZ2VzKHBhZGRyLCBpLCBsb2NrZWQpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz00Nzk9c3RhdGljIHZvaWQgX19zbnBfZnJlZV9maXJtd2FyZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLCBib29sIGxvY2tlZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ4OC1cdGlmIChzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0ODk6XHQgICAgc25wX3JlY2xhaW1fcGFnZXMocGFkZHIsIG5wYWdlcywgbG9ja2VkKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDkwLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz03MTI9c3RhdGljIGludCBzbnBfdW5tYXBfY21kX2J1Zl9kZXNjKHN0cnVjdCBjbWRfYnVmX2Rlc2MgKmRlc2MpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy03MjEtXHQvKiBUcmFuc2l0aW9uIHRoZSBidWZmZXJzIGJhY2sgdG8gaHlwZXJ2aXNvci1vd25lZC4gKi9cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NzIyOlx0aWYgKHNucF9yZWNsYWltX3BhZ2VzKCpkZXNjLVx1MDAzZXBhZGRyX3B0ciwgbnBhZ2VzLCB0cnVlKSkge1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy03MjMtXHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHJlY2xhaW0gZmlybXdhcmUtb3duZWQgcGFnZXMgd2hpbGUgaXNzdWluZyBTRVYgbGVnYWN5IGNvbW1hbmQuXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTgzMz1zdGF0aWMgaW50IHNucF9yZWNsYWltX2NtZF9idWYoaW50IGNtZCwgdm9pZCAqY21kX2J1Zilcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTg0Mi1cdGlmIChzZXZfY21kX2J1Zl93cml0YWJsZShjbWQpKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo4NDM6XHRcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGNtZF9idWYpLCAxLCB0cnVlKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtODQ0LVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1NT1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTQ5NC1cdFx0ICogVGhpcyBleGVjdXRlcyB3aXRoIHRoZSBzZXZfY21kX211dGV4IGhlbGQgc28gZG93biB0aGUgc3RhY2tcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTQ5NTpcdFx0ICogc25wX3JlY2xhaW1fcGFnZXMobG9ja2VkPWZhbHNlKSBtaWdodCBiZSBuZWVkZWQgKHdoaWNoIGlzIGV4dHJlbWVseVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNDk2LVx0XHQgKiB1bmxpa2VseSkgYnV0IHdpbGwgY2F1c2UgYSBkZWFkbG9jay5cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIzNzI9c3RhdGljIGludCBfX3Nldl9kb19zbnBfcGxhdGZvcm1fc3RhdHVzKHN0cnVjdCBzZXZfdXNlcl9kYXRhX3NucF9zdGF0dXMgKnN0YXR1cyxcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI0MDctXHRcdCAqIFRoZSBzdGF0dXMgcGFnZSB3aWxsIGJlIGluIFJlY2xhaW0gc3RhdGUgb24gc3VjY2Vzcywgb3IgbGVmdFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyNDA4Olx0XHQgKiBpbiBGaXJtd2FyZSBzdGF0ZSBvbiBmYWlsdXJlLiBVc2Ugc25wX3JlY2xhaW1fcGFnZXMoKSB0b1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDA5LVx0XHQgKiB0cmFuc2l0aW9uIGVpdGhlciBjYXNlIGJhY2sgdG8gSHlwZXJ2aXNvci1vd25lZCBzdGF0ZS5cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQxMC1cdFx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI0MTE6XHRcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGRhdGEpLCAxLCB0cnVlKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQxMi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTI4MD12b2lkIG1seDVfcGFnZXNfZGVidWdmc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTAtXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCYjMzQ7ZndfcGFnZXNfcmVjbGFpbV9kaXNjYXJkXCYjMzQ7LCAwNDAwLCBwYWdlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MjkxOlx0XHRcdCAgIFx1MDAyNmRldi1cdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI5Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmM9MTI3PXN0YXRpYyBpbnQgdG91dF9xdWVyeV9kdG9yKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTQ4LVx0TUxYNV9USU1FT1VUX0ZJTEwoZnNtX3JlYWN0aXZhdGVfdG8sIG91dCwgZGV2LCBNTFg1X1RPX0ZTTV9SRUFDVElWQVRFX01TLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdG91dC5jOjE0OTpcdE1MWDVfVElNRU9VVF9GSUxMKHJlY2xhaW1fcGFnZXNfdG8sIG91dCwgZGV2LCBNTFg1X1RPX1JFQ0xBSU1fUEFHRVNfTVMsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTUwLVx0TUxYNV9USU1FT1VUX0ZJTEwocmVjbGFpbV92ZnNfcGFnZXNfdG8sIG91dCwgZGV2LCBNTFg1X1RPX1JFQ0xBSU1fVkZTX1BBR0VTX01TLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NTE4PXN0YXRpYyB1MzIgZndwX2ZpbGxfbWFuYWdlX3BhZ2VzX291dChzdHJ1Y3QgZndfcGFnZSAqZndwLCB1MzIgKm91dCwgdTMyIGluZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NTM2OnN0YXRpYyBpbnQgcmVjbGFpbV9wYWdlc19jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01MzctXHRcdFx0ICAgICB1MzIgKmluLCBpbnQgaW5fc2l6ZSwgdTMyICpvdXQsIGludCBvdXRfc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjU3NTpzdGF0aWMgaW50IHJlY2xhaW1fcGFnZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IGZ1bmNfdmhjYV9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01NzYtXHRcdFx0IGludCBucGFnZXMsIGludCAqbmNsYWltZWQsIGJvb2wgZXZlbnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwNi1cdFx0ICAgICAgbWx4NV9wYWdlX21ndF9tb2RlX2lzX3ZoY2FfaWQoZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NjA3Olx0ZXJyID0gcmVjbGFpbV9wYWdlc19jbWQoZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRsZW4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOC1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02MDktXHRcdG5wYWdlcyA9IE1MWDVfR0VUKG1hbmFnZV9wYWdlc19pbiwgaW4sIGlucHV0X251bV9lbnRyaWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo2MTA6XHRcdGRldi1cdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCAmIzQzOz0gbnBhZ2VzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYxMS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NjQzPXN0YXRpYyB2b2lkIHBhZ2VzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTY1MS1cdGVsc2UgaWYgKHJlcS1cdTAwM2VucGFnZXMgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NjUyOlx0XHRlcnIgPSByZWNsYWltX3BhZ2VzKGRldiwgcmVxLVx1MDAzZWZ1bmNfaWQsIC0xICogcmVxLVx1MDAzZW5wYWdlcywgTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02NTMtXHRcdFx0XHQgICAgdHJ1ZSwgcmVxLVx1MDAzZWVjX2Z1bmN0aW9uKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9ODMwPXN0YXRpYyBpbnQgbWx4NV9yZWNsYWltX3Jvb3RfcGFnZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjg0MjpcdFx0ZXJyID0gcmVjbGFpbV9wYWdlcyhkZXYsIGZ1bmNfdmhjYV9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy04NDMtXHRcdFx0XHQgICAgb3B0aW1hbF9yZWNsYWltZWRfcGFnZXMoKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ2LVx0XHRcdG1seDVfY29yZV93YXJuKGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo4NDc6XHRcdFx0XHQgICAgICAgXCYjMzQ7cmVjbGFpbV9wYWdlcyBlcnIgKCVkKSBmdW5jX3ZoY2FfaWQ9MHgleCBlY19mdW5jPTB4JXhcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ4LVx0XHRcdFx0ICAgICAgIGVyciwgZnVuY192aGNhX2lkLCBlY19mdW5jdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oPTU3Mz1zdHJ1Y3QgbWx4NV9wcml2IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgtNTg3LVx0dTMyXHRcdFx0Z2l2ZV9wYWdlc19kcm9wcGVkO1xuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oOjU4ODpcdHUzMlx0XHRcdHJlY2xhaW1fcGFnZXNfZGlzY2FyZDtcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODktXHRlbnVtIG1seDVfcGFnZV9tZ3RfbW9kZVx0cGFnZV9tZ3RfbW9kZTtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaD0zNDU1PXN0cnVjdCBtbHg1X2lmY19kdG9yX3JlZ19iaXRzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0zNDc1LVxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6MzQ3NjpcdHN0cnVjdCBtbHg1X2lmY19kZWZhdWx0X3RpbWVvdXRfYml0cyByZWNsYWltX3BhZ2VzX3RvO1xuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzQ3Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD0xMDgxPXZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTA4MjppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTA4My12b2lkIHNucF9mcmVlX2Zpcm13YXJlX3BhZ2Uodm9pZCAqYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTExNT1zdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXG4tLVxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTExOS1cbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjExMjA6c3RhdGljIGlubGluZSBpbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC0xMTIxLXtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD00MDk9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX3dyaXRlX2ZvbGlvLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTQzMS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjQzMjpUUkFDRV9FVkVOVChtbV92bXNjYW5fcmVjbGFpbV9wYWdlcyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTQzMy1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzEtXHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG5tbS9kYW1vbi9wYWRkci5jOjI3MjpcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vZGFtb24vcGFkZHIuYy0yNzMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTEyMDU9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgIF9fbXVzdF9jaGVjayB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsXG4tLVxubW0vaW50ZXJuYWwuaC0xMjA4LVxubW0vaW50ZXJuYWwuaDoxMjA5OnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbm1tL2ludGVybmFsLmgtMTIxMC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy00NDItXHRcdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjQ0MzpcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vbWFkdmlzZS5jLTQ0NC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWFkdmlzZS5jLTU2MS1cdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjU2MjpcdFx0cmVjbGFpbV9wYWdlcyhcdTAwMjZmb2xpb19saXN0KTtcbm1tL21hZHZpc2UuYy01NjMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS92bXNjYW4uYz0yMTUzPXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjE3Mi1cdH1cbm1tL3Ztc2Nhbi5jOjIxNzM6XHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5ucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQpO1xubW0vdm1zY2FuLmMtMjE3NC1cbi0tXG5tbS92bXNjYW4uYy0yMTc3LVxubW0vdm1zY2FuLmM6MjE3ODp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbm1tL3Ztc2Nhbi5jLTIxNzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA1NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVyYWN0aW9uIG9mIFBhZ2UgUmVjbGFpbSBhbmQgTUdMUlUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGByZWNsYWltX3BhZ2VzYCBpc24mIzM5O3Qgc3RhdGljIGFuZCBpcyBjYWxsZWQgYnkgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgYW5kIGBkYW1vbl9wYV9wYWdlb3V0YC4gSG93ZXZlciwgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBmdW5jdGlvbnMgbGlrZSBgc2Nhbl9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb3NgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBzaG91bGRfcnVuX2FnaW5nYCwgd2hpY2ggYXJlIGFsbCBkZWVwbHkgaW52b2x2ZWQgaW4gTUdMUlUuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpOb3csIGByZWNsYWltX3BhZ2VzYCBmdXJ0aGVyIGNhbGxzIGByZWNsYWltX2ZvbGlvX2xpc3RgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAuIEFoLCB0aGVyZSYjMzk7cyB0aGUgZGlzdGluY3Rpb24hIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgdGhlIGFjdGl2ZS9pbmFjdGl2ZSBMUlUgcmVjbGFpbSBwYXRoLCB3aGljaCBpc24mIzM5O3QgTUdMUlUgZGlyZWN0bHkuIE1HTFJVIHVzZXMgYGV2aWN0X2ZvbGlvc2AsIHdoaWNoICppbnRlcm5hbGx5KiBjYWxscyBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBBbmQsIGBtYWR2aXNlX3BhZ2VvdXRgIGNhbGxzIGByZWNsYWltX3BhZ2VzYCwgbGVhZGluZyBiYWNrIHRvIGByZWNsYWltX2ZvbGlvX2xpc3RgLiBTbywgYHJlY2xhaW1fcGFnZXNgIGl0c2VsZiBpc24mIzM5O3QgdXNpbmcgTUdMUlUgZGlyZWN0bHk7IGl0JiMzOTtzIHNpbXBseSByZWNsYWltaW5nIHRoZSBzcGVjaWZpYyBmb2xpb3MgcGFzc2VkIHRvIGl0LiBJdCBpcyBNR0xSVSB0aGF0IGFjdHVhbGx5IG1ha2VzIHRoZSBwYWdlIHJlcGxhY2VtZW50IGRlY2lzaW9ucywgZGV0ZXJtaW5pbmcgKndoaWNoKiBwYWdlcyB0byByZWNsYWltLgoKU28sIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgdGhhdCB0cmlnZ2VyIE1HTFJVIGZ1bmN0aW9uYWxpdHkgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBzaHJpbmsgdGhlIExSVSBsaXN0cywgc3BlY2lmaWNhbGx5IGBzaHJpbmtfbHJ1dmVjYC4gVGhhdOKAmXMgaXQhIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50ISBTbyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQuIEkgYW0gZ29pbmcgdG8gdXNlOgoKKiAgIGB0cnlfdG9fZnJlZV9wYWdlc2AKKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYAoqICAgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gCiogICBgc2hyaW5rX2FsbF9tZW1vcnlgCgpSaWdodCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhYm91dCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3MgYXZhaWxhYmxlIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gQSBxdWljayBsb29rIGF0IGBtbS92bXNjYW4uY2Agc2hvd3MgaXTigJlzIHRoZXJlLCBhbmQgaXQgZG9lcyBpbmRlZWQgZGVwZW5kIG9uIGBDT05GSUdfTUVNQ0dgLiBKdXN0IHRvIGJlIHNhZmUsIEnigJlsbCBhZGQgYE1FTUNHYCB0byBgRW5hYmxlQ29uZmlnc2AgZXZlbiB0aG91Z2ggaXQmIzM5O3MgdXN1YWxseSBlbmFibGVkIGFueXdheS4gQWx3YXlzIGJldHRlciB0byBiZSBleHBsaWNpdC4gT2theSwgdGltZSB0byBkaXZlIGRlZXBlciBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIGNvbmZpcm0gdGhhdCBldmVyeXRoaW5nIGlzIGFzIGV4cGVjdGVkIHJlZ2FyZGluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwMzA6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG44MDMxOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuODAzMjpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuODAzMzpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG44MDM0Olx0fTtcbjgwMzU6XHRcbjgwMzY6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG44MDM3Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuODAzODpcdHtcbjgwMzk6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjgwNDA6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjgwNDE6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG44MDQyOlx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG44MDQzOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG44MDQ0Olx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG44MDQ1Olx0XG44MDQ2Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuODA0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwNDg6XHRcbjgwNDk6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDEyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEF2YWlsYWJpbGl0eSBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAqKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSXQmIzM5O3MgZGF3bmluZyBvbiBtZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBtaWdodCAqbm90KiBiZSBndWFyZGVkIGJ5IHRoYXQgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIGRpcmVjdGl2ZS4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gU28sIGxldCYjMzk7cyBleHBsb3JlIHdoZXRoZXIgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFjY2Vzc2libGUgZXZlbiB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkLgoKSG1tLCBpdCB0YWtlcyBhIGBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2dgIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgZ2l2ZWF3YXkuIEhvd2V2ZXIsIGlmIGBDT05GSUdfTUVNQ0dgIGlzIG9mZiwgdGhlIGtlcm5lbCAqc3RpbGwqIGRlY2xhcmVzIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHJpZ2h0PyBJdCBtaWdodCBiZSBhbiBvcGFxdWUgc3RydWN0IG9yIHBvc3NpYmx5IGFuIGVtcHR5IHN0cnVjdC4gSSBuZWVkIHRvIGNvbmZpcm0gaG93IGl0JiMzOTtzIGhhbmRsZWQgaW4gdGhhdCBzY2VuYXJpby4KCkFscmlnaHQsIGxldCYjMzk7cyBjdXQgdGhlIGNoYXNlLiBJIG5lZWQgdG8gcnVuIGEgcXVpY2sgc2VhcmNoIGZvciBgI2lmZGVmIENPTkZJR19NRU1DR2Agd2l0aGluIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgdHJ1ZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCBmdW5jdGlvbi4gVGhhdCYjMzk7bGwgY2xlYXIgdXAgYW55IHBvdGVudGlhbCBjb25mdXNpb24gYW5kIGdpdmUgbWUgYSBjb25jcmV0ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14jaWZkZWYgQ09ORklHX01FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NDQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTA4PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIGlvX2NncnBfc3Vic3lzID0ge1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTE3LVx0LmV4aXQgPSBibGtjZ19leGl0LFxuYmxvY2svYmxrLWNncm91cC5jOjE1MTg6I2lmZGVmIENPTkZJR19NRU1DR1xuYmxvY2svYmxrLWNncm91cC5jLTE1MTktXHQvKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NDM9c3RhdGljIGJsa19zdGF0dXNfdCBsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NzEtXHRcdGNtZC1cdTAwM2VibGtjZ19jc3MgPSBiaW9fYmxrY2dfY3NzKHJxLVx1MDAzZWJpbyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODcyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NzMtXHRcdGlmIChjbWQtXHUwMDNlYmxrY2dfY3NzKSB7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jPTE5PUlPUFRERVNDX01BVENIKF9yZWZjb3VudCwgX19wYWdlX3JlZmNvdW50KTtcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuYzoyMDojaWZkZWYgQ09ORklHX01FTUNHXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMtMjEtSU9QVERFU0NfTUFUQ0gobWVtY2dfZGF0YSwgbWVtY2dfZGF0YSk7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oPTE5PXN0cnVjdCBpb3B0ZGVzYyB7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oLTMxLVx0YXRvbWljX3QgX19wYWdlX3JlZmNvdW50O1xuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oOjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaC0zMy1cdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbi0tXG5mcy9wcm9jL3BhZ2UuYz0yNjE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBrcGFnZWZsYWdzX3Byb2Nfb3BzID0ge1xuLS1cbmZzL3Byb2MvcGFnZS5jLTI2Ni1cbmZzL3Byb2MvcGFnZS5jOjI2NzojaWZkZWYgQ09ORklHX01FTUNHXG5mcy9wcm9jL3BhZ2UuYy0yNjgtc3RhdGljIHNzaXplX3Qga3BhZ2VjZ3JvdXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL3BhZ2UuYz0yODA9c3RhdGljIGludCBfX2luaXQgcHJvY19wYWdlX2luaXQodm9pZClcbi0tXG5mcy9wcm9jL3BhZ2UuYy0yODMtXHRwcm9jX2NyZWF0ZShcJiMzNDtrcGFnZWZsYWdzXCYjMzQ7LCBTX0lSVVNSLCBOVUxMLCBcdTAwMjZrcGFnZWZsYWdzX3Byb2Nfb3BzKTtcbmZzL3Byb2MvcGFnZS5jOjI4NDojaWZkZWYgQ09ORklHX01FTUNHXG5mcy9wcm9jL3BhZ2UuYy0yODUtXHRwcm9jX2NyZWF0ZShcJiMzNDtrcGFnZWNncm91cFwmIzM0OywgU19JUlVTUiwgTlVMTCwgXHUwMDI2a3BhZ2VjZ3JvdXBfcHJvY19vcHMpO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzAwPXN0cnVjdCBicGZfbWFwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMyMC1cdHN0cnVjdCBidGYgKmJ0ZjtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzIxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvYnBmLmgtMzIyLVx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9Mjc4MD1pbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzgxLVx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3ODI6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzgzLXZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9NTE9c3RydWN0IGxpc3RfbHJ1IHtcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC01Mi1cdHN0cnVjdCBsaXN0X2xydV9ub2RlXHQqbm9kZTtcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo1MzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNTQtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuLS1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaD04Mj1pbnQgbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODQtXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg6ODU6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTg2LS8qKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTYwPXN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTg5PXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk5LVx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjgtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjk6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTMwLVx0Lyogc2xhYiBzdGF0cyBmb3Igbm1pIGNvbnRleHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0yMDI9c3RydWN0IG1lbV9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI1NjojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNTctXHQvKiBNRU1DR19LTUVNIGZvciBubWkgY29udGV4dCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI4My1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI4NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yODUtXHQvKiBMZWdhY3kgY29uc3VtZXItb3JpZW50ZWQgY291bnRlcnMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0zNTQ9ZW51bSBvYmpleHRfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM2Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjM2ODojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNjktLypcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDc2PXN0cnVjdCBzbGFib2JqX2V4dCB7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDc3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NzgtXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTUwND1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmxydXZlY19saXZlX2xvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1MDUte1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTUwNjojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTA3LVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2Mzk9c3RydWN0IHNvY2s7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2NDEtZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIG1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyNz1zdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MzItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzMzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MzQtYm9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkxOT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkyOC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkzMC11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NDc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01MS1cdF9fdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQsIG5yX3BhZ2VzKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTI6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01My1cdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQsIG5yX3BhZ2VzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9ODA9c3RydWN0IHBhZ2Uge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xODYtXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTg3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xODgtXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTQwND1zdHJ1Y3QgZm9saW8ge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MzUtXHRcdFx0YXRvbWljX3QgX3JlZmNvdW50O1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQzNjojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDM3LVx0XHRcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTIxPUZPTElPX01BVENIKF9yZWZjb3VudCwgX3JlZmNvdW50KTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1MjI6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTUyMy1GT0xJT19NQVRDSChtZW1jZ19kYXRhLCBtZW1jZ19kYXRhKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTc2PXN0cnVjdCBwdGRlc2Mge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC02MDctXHRhdG9taWNfdCBfX3BhZ2VfcmVmY291bnQ7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NjA4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC02MDktXHR1bnNpZ25lZCBsb25nIHB0X21lbWNnX2RhdGE7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTYyMj1UQUJMRV9NQVRDSChfcmVmY291bnQsIF9fcGFnZV9yZWZjb3VudCk7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NjIzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC02MjQtVEFCTEVfTUFUQ0gobWVtY2dfZGF0YSwgcHRfbWVtY2dfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNzU9c3RydWN0IG1tX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEzMjctI2VuZGlmXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTMyODojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTMyOS1cdFx0Lypcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxMi1cdFx0XHR1bnNpZ25lZCBsb25nIGJpdG1hcDtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDEzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDE0LVx0XHRcdC8qIHBvaW50cyB0byB0aGUgbWVtY2cgb2YgXCYjMzQ7b3duZXJcJiMzNDsgYWJvdmUgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTUwMj1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTA1LVx0bW0tXHUwMDNlbHJ1X2dlbi5iaXRtYXAgPSAwO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MDY6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1MDctXHRtbS1cdTAwM2VscnVfZ2VuLm1lbWNnID0gTlVMTDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc2ND1zdHJ1Y3QgbHJ1dmVjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5MS0jZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkzLVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE2NjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGdsaXN0X2RhdGEgKmxydXZlY19wZ2RhdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NjUte1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjY2OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY2Ny1cdHJldHVybiBscnV2ZWMtXHUwMDNlcGdkYXQ7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyNj1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDIxLSNlbmRpZlxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEwMjI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMjMtXHR1bnNpZ25lZFx0XHRcdGluX3VzZXJfZmF1bHQ6MTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU0OC1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNTQ5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNTUwLVx0c3RydWN0IG1lbV9jZ3JvdXBcdFx0Km1lbWNnX2luX29vbTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU1Mi1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNTUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNTU0LVx0LyogTnVtYmVyIG9mIHBhZ2VzIHRvIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kOiAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xNjE9ZXh0ZXJuIHZvaWQgZXhlY19tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICopO1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE2Mi1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoxNjM6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE2NC1leHRlcm4gdm9pZCBtbV91cGRhdGVfbmV4dF9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ2Nj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2NfcGluX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NzAtXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDcxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NzItREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtZW1fY2dyb3VwICosIGludF9hY3RpdmVfbWVtY2cpO1xuLS1cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaD04Mj1zdHJ1Y3Qgc2hyaW5rZXIge1xuLS1cbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMDYtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg6MTA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMDgtXHQvKiBJRCBpbiBzaHJpbmtlcl9pZHIgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD0yNj1lbnVtIF9zbGFiX2ZsYWdfYml0cyB7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtNDUtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo0NjojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC00Ny1cdF9TTEFCX0FDQ09VTlQsXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMjA0LSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MjA1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2xhYi5oLTIwNi0jIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9NzA4PWVudW0ga21hbGxvY19jYWNoZV90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MjgtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo3Mjk6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9zbGFiLmgtNzMwLVx0S01BTExPQ19DR1JPVVAsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDY3PXN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ3My0jZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ3NDojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00NzUtdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD0xMz1zdHJ1Y3Qgdm1wcmVzc3VyZSB7XG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMTgtXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDoxOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0yMC1cdC8qXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NDM9c3RydWN0IG1lbV9jZ3JvdXA7XG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC00NC1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjQ1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTQ2LXZvaWQgdm1wcmVzc3VyZShnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHRyZWUsXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NTU9ZXh0ZXJuIGVudW0gdm1wcmVzc3VyZV9sZXZlbHMgdm1wcmVzc3VyZV9jYWxjX2xldmVsKHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC01Ny1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTU5LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHByaW8pO1xuLS1cbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg9NTIyPXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdm1fZXZlbnRfbmFtZShlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTUzMS1cbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg6NTMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTMzLVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC00NjAtXHRzdHJ1Y3Qgc29ja2V0XHRcdCpza19zb2NrZXQ7XG5pbmNsdWRlL25ldC9zb2NrLmg6NDYxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbmV0L3NvY2suaC00NjItXHRzdHJ1Y3QgbWVtX2Nncm91cFx0KnNrX21lbWNnO1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yNjg2PXN0YXRpYyBpbmxpbmUgZ2ZwX3QgZ2ZwX21lbWNnX2NoYXJnZSh2b2lkKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0yNjkwLVxuaW5jbHVkZS9uZXQvc29jay5oOjI2OTE6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9uZXQvc29jay5oLTI2OTItc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9za191bmRlcl9tZW1vcnlfcHJlc3N1cmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA1LVxuaW5jbHVkZS9uZXQvc29jay5oOjI3MDY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDctXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MjAzPURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbixcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yMDktXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoyMTA6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjExLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2JlZ2luLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oPTI0OT1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0yNTUtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoyNTY6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjU3LURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTE2MD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1jZyhjb25zdCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xNjEte1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjE2MjojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTYzLVx0aWYgKGMtXHUwMDNlb2JqY2cpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTUwMj1pbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MjUtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTI2OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MjctXHRcdGlmIChtZW1jZ19icGZfZW5hYmxlZCgpKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01NDctXHRcdHJldHVybiAtRU5PTUVNO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjU0ODojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTQ5LVx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NjY9dm9pZCBicGZfbWFwX2ZyZWVfaWQoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00ODUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0ODY6I2lmZGVmIENPTkZJR19NRU1DR1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDg3LXN0YXRpYyB2b2lkIGJwZl9tYXBfc2F2ZV9tZW1jZyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NjM3PUJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU2MzgtXHRzdHJ1Y3QgZmlsZSBfX3JjdSAqZXhlX2ZpbGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTYzOTojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTY0MC1cdHN0cnVjdCB0YXNrX3N0cnVjdCBfX3JjdSAqb3duZXI7XG4tLVxua2VybmVsL2V4aXQuYz00Mjk9c3RhdGljIHZvaWQgY29yZWR1bXBfdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbmtlcm5lbC9leGl0LmMtNDU0LVxua2VybmVsL2V4aXQuYzo0NTU6I2lmZGVmIENPTkZJR19NRU1DR1xua2VybmVsL2V4aXQuYy00NTYtLyogZHJvcHMgdGFza2xpc3RfbG9jayBpZiBzdWNjZWVkcyAqL1xuLS1cbmtlcm5lbC9mb3JrLmM9OTE0PXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmR1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9yaWcsIGludCBub2RlKVxuLS1cbmtlcm5lbC9mb3JrLmMtOTk4LVxua2VybmVsL2ZvcmsuYzo5OTk6I2lmZGVmIENPTkZJR19NRU1DR1xua2VybmVsL2ZvcmsuYy0xMDAwLVx0dHNrLVx1MDAzZWFjdGl2ZV9tZW1jZyA9IE5VTEw7XG4tLVxua2VybmVsL2ZvcmsuYz0xMDUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtbV9jbGVhcl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5rZXJuZWwvZm9yay5jLTEwNTQte1xua2VybmVsL2ZvcmsuYzoxMDU1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmtlcm5lbC9mb3JrLmMtMTA1Ni1cdGlmIChtbS1cdTAwM2Vvd25lciA9PSBwKVxuLS1cbmtlcm5lbC9mb3JrLmM9MTA2MT1zdGF0aWMgdm9pZCBtbV9pbml0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5rZXJuZWwvZm9yay5jLTEwNjIte1xua2VybmVsL2ZvcmsuYzoxMDYzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmtlcm5lbC9mb3JrLmMtMTA2NC1cdG1tLVx1MDAzZW93bmVyID0gcDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXHRjZ3JvdXBfcGF0aChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xuLS1cbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL2RlYnVnLmMtOTYtXG5tbS9kZWJ1Zy5jOjk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2RlYnVnLmMtOTgtXHRpZiAoZm9saW8tXHUwMDNlbWVtY2dfZGF0YSlcbi0tXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vZGVidWcuYy0xODgtI2VuZGlmXG5tbS9kZWJ1Zy5jOjE4OTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kZWJ1Zy5jLTE5MC1cdFx0XCYjMzQ7b3duZXIgJXB4IFwmIzM0O1xuLS1cbm1tL2RlYnVnLmMtMjE3LSNlbmRpZlxubW0vZGVidWcuYzoyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vZGVidWcuYy0yMTktXHRcdG1tLVx1MDAzZW93bmVyLFxuLS1cbm1tL2ZvbGlvLmM9MTA2MT12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZm9saW8uYy0xMDcyLVxubW0vZm9saW8uYzoxMDczOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2ZvbGlvLmMtMTA3NC1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2NDI9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzc0NC1cdFx0XHRmb2xpb19zZXRfaWRsZShuZXdfZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzozNzQ1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ni1cdFx0bmV3X2ZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSBmb2xpby1cdTAwM2VtZW1jZ19kYXRhO1xuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jPTQ1PXN0YXRpYyBpbnQgaHdwb2lzb25fZmlsdGVyX2ZsYWdzKHN0cnVjdCBwYWdlICpwKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTY2LSAqL1xubW0vaHdwb2lzb24taW5qZWN0LmM6Njc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHdwb2lzb24taW5qZWN0LmMtNjgtc3RhdGljIHU2NCBod3BvaXNvbl9maWx0ZXJfbWVtY2c7XG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IHBmbl9pbmplY3RfaW5pdCh2b2lkKVxuLS1cbm1tL2h3cG9pc29uLWluamVjdC5jLTE5MS1cbm1tL2h3cG9pc29uLWluamVjdC5jOjE5MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xOTMtXHRkZWJ1Z2ZzX2NyZWF0ZV91NjQoXCYjMzQ7Y29ycnVwdC1maWx0ZXItbWVtY2dcJiMzNDssIDA2MDAsIGh3cG9pc29uX2Rpcixcbi0tXG5tbS9rZmVuY2UvY29yZS5jPTYxMT1zdGF0aWMgdW5zaWduZWQgbG9uZyBrZmVuY2VfaW5pdF9wb29sKHZvaWQpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy02MzgtXHRcdF9fU2V0UGFnZVNsYWIocGFnZSk7XG5tbS9rZmVuY2UvY29yZS5jOjYzOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9rZmVuY2UvY29yZS5jLTY0MC1cdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4tLVxubW0va2ZlbmNlL2NvcmUuYy03MDYtXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gJiM0MzsgaSk7XG5tbS9rZmVuY2UvY29yZS5jOjcwNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9rZmVuY2UvY29yZS5jLTcwOC1cdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4tLVxubW0va2ZlbmNlL2NvcmUuYz0xMjQ3PXZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtMTI1MC1cbm1tL2tmZW5jZS9jb3JlLmM6MTI1MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9rZmVuY2UvY29yZS5jLTEyNTItXHRLRkVOQ0VfV0FSTl9PTihtZXRhLVx1MDAzZW9ial9leHRzLm9iamNnKTtcbi0tXG5tbS9rZmVuY2Uva2ZlbmNlLmg9NTk9c3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XG4tLVxubW0va2ZlbmNlL2tmZW5jZS5oLTEwNC1cdHUzMiBhbGxvY19zdGFja19oYXNoIF9fZ3VhcmRlZF9ieShcdTAwMjZsb2NrKTtcbm1tL2tmZW5jZS9rZmVuY2UuaDoxMDU6I2lmZGVmIENPTkZJR19NRU1DR1xubW0va2ZlbmNlL2tmZW5jZS5oLTEwNi1cdHN0cnVjdCBzbGFib2JqX2V4dCBvYmpfZXh0cztcbi0tXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxuLS1cbm1tL2xpc3RfbHJ1LmMtMzktXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDEtc3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xuLS1cbm1tL2xpc3RfbHJ1LmM9NDEzPXVuc2lnbmVkIGxvbmcgbGlzdF9scnVfd2Fsa19ub2RlKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBpbnQgbmlkLFxuLS1cbm1tL2xpc3RfbHJ1LmMtNDIxLVxubW0vbGlzdF9scnUuYzo0MjI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYy00MjMtXHRpZiAoKm5yX3RvX3dhbGsgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxpc3RfbHJ1X21lbWNnX2F3YXJlKGxydSkpIHtcbi0tXG5tbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXG4tLVxubW0vbGlzdF9scnUuYy00NjEtXG5tbS9saXN0X2xydS5jOjQ2MjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTQ2My1zdGF0aWMgc3RydWN0IGxpc3RfbHJ1X21lbWNnICptZW1jZ19pbml0X2xpc3RfbHJ1X29uZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXG4tLVxubW0vbGlzdF9scnUuYy02NjctXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTY2OS1cdGlmIChzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jPTY5Mj12b2lkIGxpc3RfbHJ1X2Rlc3Ryb3koc3RydWN0IGxpc3RfbHJ1ICpscnUpXG4tLVxubW0vbGlzdF9scnUuYy03MDMtXG5tbS9saXN0X2xydS5jOjcwNDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9saXN0X2xydS5jLTcwNS1cdGxydS1cdTAwM2VzaHJpbmtlcl9pZCA9IC0xO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0yND1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC0yNy0vKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovXG5tbS9tZW1jb250cm9sLXYxLmg6Mjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC12MS5oLTI5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQtXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0yMzYtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcyLVxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTc0LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbm1tL21lbWNvbnRyb2wuYzo1OTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTYwMC1cdFBHUEdJTixcbi0tXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtODQ3LVxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODQ5LS8qXG4tLVxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTI4LVxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtOTMwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTExMS1cbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xMTEzLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzEyPXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTcxNy1cbm1tL21lbWNvbnRyb2wuYzoxNzE4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNzE5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmM9MTczOD1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzg0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbWNvbnRyb2wuYzoxNzg1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNzg2LVx0XHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTgzNj12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODU3LVx0XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbm1tL21lbWNvbnRyb2wuYzoxODU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xODU5LVx0ZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NzAtXG5tbS9tZW1jb250cm9sLmM6Mjg3MTojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtMjg3Mi1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmM9MzA5MD1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTAwLVxubW0vbWVtY29udHJvbC5jOjMxMDE6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xubW0vbWVtY29udHJvbC5jLTMxMDItc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfa21lbV9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jPTQyMTI9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQyMzMtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFx1MDAyNnBhcmVudC1cdTAwM2Vzd2FwLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDIzNDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDIzNS1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gYHZtc2Nhbi5jYCoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJIHRob3VnaHQgSSByZW1lbWJlcmVkIHNlZWluZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZGVmaW5lZCBpbiBgbW0vdm1zY2FuLmNgLCBidXQgd2l0aG91dCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhlIGBDT05GSUdfTUVNQ0dgIHNldHRpbmcuIFRoYXQgc2VlbXMuLi4gb2RkLiBJIHdhcyBzdXJlIHRoYXQgcmVsYXRlZCBmZWF0dXJlcyB3ZXJlIGd1YXJkZWQgYnkgdGhhdCBjb25maWd1cmF0aW9uIGZsYWcuIExldCBtZSBxdWlja2x5IGp1bXAgYmFjayBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHRha2UgYW5vdGhlciBsb29rIGFyb3VuZCBsaW5lIDgwMzYuIEkgd2FudCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiBJIGRpZG4mIzM5O3QgbWlzaW50ZXJwcmV0IHRoYXQuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aG9zZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcmVjbGFpbSBtZWNoYW5pc21zIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRob3V0IHRoZSBgQ09ORklHX01FTUNHYCBndWFyZCBjb3VsZCBpbmRpY2F0ZSBhIHByb2JsZW0gb3IgYW4gb3ZlcnNpZ2h0IGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4MDIwOlx0XHRyZXR1cm4gMDtcbjgwMjE6XHR9XG44MDIyOlx0XG44MDIzOlx0I2VuZGlmXG44MDI0Olx0XG44MDI1Olx0ZW51bSB7XG44MDI2Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcbjgwMjc6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuODAyODpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjgwMjk6XHR9O1xuODAzMDpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjgwMzE6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG44MDMyOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG44MDMzOlx0XHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbjgwMzQ6XHR9O1xuODAzNTpcdFxuODAzNjpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbjgwMzc6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG44MDM4Olx0e1xuODAzOTpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuODA0MDpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuODA0MTpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjgwNDI6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjgwNDM6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjgwNDQ6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjgwNDU6XHRcbjgwNDY6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG44MDQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuODA0ODpcdFxuODA0OTpcdFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbjgwNTA6XHRcbjgwNTE6XHRcdG9sZF9idWYgPSBidWY7XG44MDUyOlx0XHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xuODA1MzpcdFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuODA1NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwNTU6XHRcbjgwNTY6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG44MDU3Olx0XG44MDU4Olx0XHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFx1MDAyNmJ1ZiwgXCYjMzQ7IFwmIzM0OykpICE9IE5VTEwpIHtcbjgwNTk6XHRcdFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxuODA2MDpcdFx0XHRcdGNvbnRpbnVlO1xuODA2MTpcdFx0XHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XG44MDYyOlx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcbjgwNjM6XHRcdFx0XHRpZiAobWF0Y2hfaW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNnN3YXBwaW5lc3MpKVxuODA2NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDY1Olx0XHRcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XG44MDY2Olx0XHRcdFx0ICAgIHN3YXBwaW5lc3MgXHUwMDNlIE1BWF9TV0FQUElORVNTKVxuODA2NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDY4Olx0XHRcdFx0YnJlYWs7XG44MDY5Olx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgTWVtb3J5IENncm91cCBGcmVlaW5nIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gKmlzKiBhdmFpbGFibGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUuLi4gdGhlIG5hbWUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGRlZmluaXRlbHkgc3VnZ2VzdHMgbWVtb3J5IGNncm91cCBpbnRlcmFjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIHNlZSBpZiBpdCYjMzk7cyB0aWVkIHRvIHRoZSBgQ09ORklHX01FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBzY29wZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpbmRpbmcgaXQ7IHRoZSBjb2RlIHBhdGggaXMgYG1tL3Ztc2Nhbi5jYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDY5MzMsIGFzIEkgcmVjYWxsLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBlbmFibGVkLCB3aGljaCBJIHN1c3BlY3QgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5MjA6XHRcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbjY5MjE6XHRcdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAmIzM5O3MgYXMgd2VsbC4gV2UgaGFja1xuNjkyMjpcdFx0ICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uXG42OTIzOlx0XHQgKi9cbjY5MjQ6XHRcdHNocmlua19scnV2ZWMobHJ1dmVjLCBcdTAwMjZzYyk7XG42OTI1Olx0XG42OTI2Olx0XHR0cmFjZV9tbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kKHNjLm5yX3JlY2xhaW1lZCwgbWVtY2cpO1xuNjkyNzpcdFxuNjkyODpcdFx0Km5yX3NjYW5uZWQgPSBzYy5ucl9zY2FubmVkO1xuNjkyOTpcdFxuNjkzMDpcdFx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcbjY5MzE6XHR9XG42OTMyOlx0XG42OTMzOlx0dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbjY5MzQ6XHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjY5MzU6XHRcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG42OTM2Olx0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG42OTM3Olx0XHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcylcbjY5Mzg6XHR7XG42OTM5Olx0XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbjY5NDA6XHRcdHVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZztcbjY5NDE6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG42OTQyOlx0XHRcdC5ucl90b19yZWNsYWltID0gbWF4KG5yX3BhZ2VzLCBTV0FQX0NMVVNURVJfTUFYKSxcbjY5NDM6XHRcdFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcbjY5NDQ6XHRcdFx0LmdmcF9tYXNrID0gKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spIFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKSB8XG42OTQ1Olx0XHRcdFx0XHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKSxcbjY5NDY6XHRcdFx0LnJlY2xhaW1faWR4ID0gTUFYX05SX1pPTkVTIC0gMSxcbjY5NDc6XHRcdFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXG42OTQ4Olx0XHRcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcbjY5NDk6XHRcdFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxuNjk1MDpcdFx0XHQubWF5X3VubWFwID0gMSxcbjY5NTE6XHRcdFx0Lm1heV9zd2FwID0gISEocmVjbGFpbV9vcHRpb25zIFx1MDAyNiBNRU1DR19SRUNMQUlNX01BWV9TV0FQKSxcbjY5NTI6XHRcdFx0LnByb2FjdGl2ZSA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcdTAwMjYgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkUpLFxuNjk1MzpcdFx0fTtcbjY5NTQ6XHRcdC8qXG42OTU1Olx0XHQgKiBUcmF2ZXJzZSB0aGUgWk9ORUxJU1RfRkFMTEJBQ0sgem9uZWxpc3Qgb2YgdGhlIGN1cnJlbnQgbm9kZSB0byBwdXRcbjY5NTY6XHRcdCAqIGVxdWFsIHByZXNzdXJlIG9uIGFsbCB0aGUgbm9kZXMuIFRoaXMgaXMgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdFxuNjk1NzpcdFx0ICogdGhlIHJlY2xhaW0gZG9lcyBub3QgYmFpbCBvdXQgZWFybHkuXG42OTU4Olx0XHQgKi9cbjY5NTk6XHRcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KG51bWFfbm9kZV9pZCgpLCBzYy5nZnBfbWFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqRGVjb2RpbmcgdGhlIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBGdW5jdGlvbioqLiAgSG9sZCBvbiBhIHNlY29uZCwgaXNuJiMzOTt0IHRoYXQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGZ1bmN0aW9uIGRlZmluZWQgKmluc2lkZSogYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dgIHByZXByb2Nlc3NvciBibG9jaz8gIFRoYXQgd291bGQgbWVhbiBpdCYjMzk7cyBvbmx5IGFjdGl2ZSBpZiBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcywgc28gSSB3aWxsIGRvdWJsZS1jaGVjay4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNjg5MCwganVzdCB0byBjb25maXJtIG15IGluaXRpYWwgaHVuY2guICBVbmRlcnN0YW5kaW5nIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgY3J1Y2lhbCBmb3IgbWUsIGdpdmVuIHRoZSBtb2R1bGFyIG5hdHVyZSBvZiB0aGUga2VybmVsLiBUaGlzIHdpbGwgbGlrZWx5IHByb3ZpZGUga2V5IGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXBzIGFyZSBpbnRlZ3JhdGVkLCBhbmQgaG93IHRoYXQgY29kZSBwYXRoIGJlaGF2ZXMgdW5kZXIgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2ODgwOlx0XHR0cmFjZV9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW4oc2MuZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTtcbjY4ODE6XHRcbjY4ODI6XHRcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG42ODgzOlx0XG42ODg0Olx0XHR0cmFjZV9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kKG5yX3JlY2xhaW1lZCwgTlVMTCk7XG42ODg1Olx0XHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xuNjg4NjpcdFxuNjg4NzpcdFx0cmV0dXJuIG5yX3JlY2xhaW1lZDtcbjY4ODg6XHR9XG42ODg5Olx0XG42ODkwOlx0I2lmZGVmIENPTkZJR19NRU1DR1xuNjg5MTpcdFxuNjg5MjpcdC8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbjY4OTM6XHR1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuNjg5NDpcdFx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbjY4OTU6XHRcdFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LFxuNjg5NjpcdFx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpXG42ODk3Olx0e1xuNjg5ODpcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbjY4OTk6XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoYXQgdGhlIGNydWNpYWwgbW9kaWZpY2F0aW9ucyBhcmUgaW5kZWVkIHdpdGhpbiB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIGJsb2NrLiBUaGF0IHNldHRsZXMgaXQ7IEkgbmVlZCB0byBhZGQgYE1FTUNHYCB0byBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTm8gcXVlc3Rpb24gdGhlcmUuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2gmIzM5O3MgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgYW5kIHJpZ2h0bHkgc28uIFRoZSBjaGFuZ2VzIHRvdWNoIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSByZWNsYWltIGxvZ2ljIOKAkyBhIGNvcmUgcGllY2Ugb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpbmNsdWRlcyBhbHRlcmF0aW9ucyB0byBob3cgZ2VuZXJhdGlvbiBzZXF1ZW5jZXMgaW5jcmVtZW50LCBmb2xpbyBzY2FubmluZyBhbmQgaXNvbGF0aW9uLCBhbmQgdGhlIGNvbmRpdGlvbnMgZm9yIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zIGFmZmVjdGluZyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIHdoaWNoICpkZWZpbml0ZWx5KiBqdXN0aWZpZXMgZnV6emluZy4KCk15IGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gQW5kIGZvciBgRW5hYmxlQ29uZmlnc2AsIEkmIzM5O2xsIGJlIGluY2x1ZGluZyBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgbm93IGBNRU1DR2AuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBzaHJpbmtfYWxsX21lbW9yeWAuLi4gdGhhdCYjMzk7cyByaW5naW5nIGEgYmVsbC4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhhdCBvbmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBoYWQgaXQgaW4gdGhlICYjMzk7c2FmZSYjMzk7IGxpc3QsIHNvIEkgbmVlZCB0byBjaGVjayBpdHMgY29udGV4dC4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgYWdhaW5zdCBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzczMS4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcyB0aGF0IHdvdWxkIHNoaWZ0IHRoaXMgaW50byB0aGUgJiMzOTtzYWZlJiMzOTsgem9uZS4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NzIwOlx0fVxuNzcyMTpcdFxuNzcyMjpcdCNpZmRlZiBDT05GSUdfSElCRVJOQVRJT05cbjc3MjM6XHQvKlxuNzcyNDpcdCAqIFRyeSB0byBmcmVlIGBucl90b19yZWNsYWltJiMzOTsgb2YgbWVtb3J5LCBzeXN0ZW0td2lkZSwgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mXG43NzI1Olx0ICogZnJlZWQgcGFnZXMuXG43NzI2Olx0ICpcbjc3Mjc6XHQgKiBSYXRoZXIgdGhhbiB0cnlpbmcgdG8gYWdlIExSVXMgdGhlIGFpbSBpcyB0byBwcmVzZXJ2ZSB0aGUgb3ZlcmFsbFxuNzcyODpcdCAqIExSVSBvcmRlciBieSByZWNsYWltaW5nIHByZWZlcmVudGlhbGx5XG43NzI5Olx0ICogaW5hY3RpdmUgXHUwMDNlIGFjdGl2ZSBcdTAwM2UgYWN0aXZlIHJlZmVyZW5jZWQgXHUwMDNlIGFjdGl2ZSBtYXBwZWRcbjc3MzA6XHQgKi9cbjc3MzE6XHR1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbjc3MzI6XHR7XG43NzMzOlx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuNzczNDpcdFx0XHQubnJfdG9fcmVjbGFpbSA9IG5yX3RvX3JlY2xhaW0sXG43NzM1Olx0XHRcdC5nZnBfbWFzayA9IEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxuNzczNjpcdFx0XHQucmVjbGFpbV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxLFxuNzczNzpcdFx0XHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXG43NzM4Olx0XHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbjc3Mzk6XHRcdFx0Lm1heV91bm1hcCA9IDEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDIyCgkJCQkJCQlvdXRwdXQ6IDE1MQoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzZWN0aW9uLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBuZXN0bGVkIHdpdGhpbiBgI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTmAuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBidXQgSSBkb24mIzM5O3QgdGhpbmsgSSBuZWVkIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgSElCRVJOQVRJT05gIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBnZXQgdGhlIGNvZGUgSSBuZWVkIHRvIHJ1bi4gU28sIG15IGxpc3Qgd2lsbCBqdXN0IGluY2x1ZGUgdGhvc2U6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4KCk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG1pZ2h0IGJlIG1pc3NpbmcuIEFoLCBoZXJlIHdlIGdvLCBsb29raW5nIGF0IGBDT05GSUdfTFJVX0dFTmAuIEkgc2VlIHRoYXQgaXQgZGVwZW5kcyBvbiBgTU1VYCwgYnV0IHRoYXQmIzM5O3MgYSBuZWFyIGNlcnRhaW50eSwgYXMgYE1NVWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHZpcnR1YWxseSBhbGwgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlcy4gQW5kIHRoZW4gYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGRlcGVuZHMgb24gYExSVV9HRU5gLCBzbyBpZiBgTFJVX0dFTmAgaXMgdGhlcmUsIHRoZSBlbmFibGVkIHZlcnNpb24gc2hvdWxkIGJlIHRvby4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHNob3VsZCBiZSBhbGwgSSBuZWVkLgoKQWxyaWdodCwgd2l0aCB0aGF0IGNsYXJpZmllZCwgSSYjMzk7bSByZWFkeSB0byBjcmFmdCB0aGUgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGNoYW5nZXMgaG93IHRoZSBtaW5pbXVtIGdlbmVyYXRpb24gc2VxdWVuY2UgaXMgaW5jcmVtZW50ZWQsIGhvdyBmb2xpb3MgYXJlIHNjYW5uZWQgYW5kIGlzb2xhdGVkLCBhbmQgdGhlIGNvbmRpdGlvbnMgZm9yIHJ1bm5pbmcgYWdpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0ODo0OS45MTg5NjY1NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI4MjU3NzUxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ4OjQ5LjkxODk3MzE2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NzU2NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDlkMzg4YzljYmU3MjVmNDJiNTBjZWU5ZTUyNjE0OTUzYjIzNWM0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ4OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggYTI2YzhiODU1MjIyMi4uMjMzZDIwMDZhNTQxNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC01NTIsMTAgKzU1Miw4IEBAIGVudW0ge1xcbiAgKiBUaGUgeW91bmdlc3QgZ2VuZXJhdGlvbiBudW1iZXIgaXMgc3RvcmVkIGluIG1heF9zZXEgZm9yIGJvdGggYW5vbiBhbmQgZmlsZVxcbiAgKiB0eXBlcyBhcyB0aGV5IGFyZSBhZ2VkIG9uIGFuIGVxdWFsIGZvb3RpbmcuIFRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBudW1iZXJzIGFyZVxcbiAgKiBzdG9yZWQgaW4gbWluX3NlcVtdIHNlcGFyYXRlbHkgZm9yIGFub24gYW5kIGZpbGUgdHlwZXMgc28gdGhhdCB0aGV5IGNhbiBiZVxcbi0gKiBpbmNyZW1lbnRlZCBpbmRlcGVuZGVudGx5LiBJZGVhbGx5IG1pbl9zZXFbXSBhcmUga2VwdCBpbiBzeW5jIHdoZW4gYm90aCBhbm9uXFxuLSAqIGFuZCBmaWxlIHR5cGVzIGFyZSBldmljdGFibGUuIEhvd2V2ZXIsIHRvIGFkYXB0IHRvIHNpdHVhdGlvbnMgbGlrZSBleHRyZW1lXFxuLSAqIHN3YXBwaW5lc3MsIHRoZXkgYXJlIGFsbG93ZWQgdG8gYmUgb3V0IG9mIHN5bmMgYnkgYXQgbW9zdFxcbi0gKiBNQVhfTlJfR0VOUy1NSU5fTlJfR0VOUy0xLlxcbisgKiBpbmNyZW1lbnRlZCBpbmRlcGVuZGVudGx5LiBGb3IgYm90aCBmaWxlIGFuZCBhbm9ueW1vdXMgbWVtb3J5LCB0aGUgbWluaW11bVxcbisgKiBnZW5lcmF0aW9uIG11c3QgYmUgYXQgbGVhc3QgTUlOX05SX0dFTlMuXFxuICAqXFxuICAqIFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gZWFjaCBnZW5lcmF0aW9uIGlzIGV2ZW50dWFsbHkgY29uc2lzdGVudCBhbmQgdGhlcmVmb3JlXFxuICAqIGNhbiBiZSB0cmFuc2llbnRseSBuZWdhdGl2ZSB3aGVuIHJlc2V0X2JhdGNoX3NpemUoKSBpcyBwZW5kaW5nLlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMTdkMmI3OTNjYmZjNC4uMzk2ZTQ3ZTMyN2JjOCAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTM5ODIsMTYgKzM5ODIsNiBAQCBzdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0aWYgKCFzZXFfaW5jX2ZsYWcpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBscnVfZ2VuX2ZvbGlvICovXFxuLVxcdGlmIChzd2FwcGluZXNzIFxcdTAwMjZcXHUwMDI2IHN3YXBwaW5lc3MgXFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBzZXEgPSBscnVnZW4tXFx1MDAzZW1heF9zZXEgLSBNSU5fTlJfR0VOUztcXG4tXFxuLVxcdFxcdGlmIChtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXFx1MDAzZSBzZXEgXFx1MDAyNlxcdTAwMjYgbWluX3NlcVtMUlVfR0VOX0ZJTEVdIFxcdTAwM2Mgc2VxKVxcbi1cXHRcXHRcXHRtaW5fc2VxW0xSVV9HRU5fQU5PTl0gPSBzZXE7XFxuLVxcdFxcdGVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcXHUwMDNlIHNlcSBcXHUwMDI2XFx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXFx1MDAzYyBzZXEpXFxuLVxcdFxcdFxcdG1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IHNlcTtcXG4tXFx0fVxcbi1cXG4gXFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xcbiBcXHRcXHRpZiAobWluX3NlcVt0eXBlXSBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC00NzI3LDcgKzQ3MTcsOCBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxcbiBcXG4gc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgdHlwZSwgaW50IHRpZXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkcClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwLFxcbitcXHRcXHQgICAgICAgYm9vbCAqZXhoYXVzdGVkKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHRpbnQgZ2VuO1xcbkBAIC00NzM4LDE1ICs0NzI5LDE4IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdGludCBza2lwcGVkID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmcgPSBucl90b19zY2FuO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHR1bnNpZ25lZCBsb25nIG1pbl9zZXEgPSBscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV07XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiBcXHUwMDNlIE1BWF9MUlVfQkFUQ0gpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpO1xcbiBcXG4tXFx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpXFxuK1xcdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKSB7XFxuK1xcdFxcdCpleGhhdXN0ZWQgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4tXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbi1cXG4rbmV4dF9nZW46XFxuK1xcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcSk7XFxuIFxcdGZvciAoaSA9IE1BWF9OUl9aT05FUzsgaSBcXHUwMDNlIDA7IGktLSkge1xcbiBcXHRcXHRMSVNUX0hFQUQobW92ZWQpO1xcbiBcXHRcXHRpbnQgc2tpcHBlZF96b25lID0gMDtcXG5AQCAtNDc4OCw2ICs0NzgyLDE0IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGlzIGdlbmVyYXRpb24gaXMgZXhoYXVzdGVkIGFjcm9zcyBhbGwgem9uZXMsIGJ1dCB0aGUgc2NhblxcbitcXHQgKiB0YXJnZXQgaGFzIG5vdCBiZWVuIHJlYWNoZWQgeWV0LiBDb250aW51ZSB3aXRoIHRoZSBuZXh0XFxuK1xcdCAqIHJlY2xhaW1hYmxlIGdlbmVyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoaSA9PSAwIFxcdTAwMjZcXHUwMDI2ICsrbWluX3NlcSArIE1JTl9OUl9HRU5TIFxcdTAwM2M9IGxydWdlbi1cXHUwMDNlbWF4X3NlcSlcXG4rXFx0XFx0Z290byBuZXh0X2dlbjtcXG4rXFxuIFxcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBpc29sYXRlZCk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFRklMTCwgc29ydGVkKTtcXG5AQCAtNDc5Niw2ICs0Nzk4LDExIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdHNjYW5uZWQsIHNraXBwZWQsIGlzb2xhdGVkLFxcbiBcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGlzIHNjYW4gZXhoYXVzdGVkIHRoZSByZWNsYWltYWJsZSBsaXN0cyBiZWZvcmUgcmVhY2hpbmcgdGhlXFxuK1xcdCAqIHNjYW4gdGFyZ2V0IG9yIGFjY3VtdWxhdGluZyBlbm91Z2ggaXNvbGF0ZWQgZm9saW9zLlxcbitcXHQgKi9cXG4rXFx0KmV4aGF1c3RlZCA9IHJlbWFpbmluZyBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgaXNvbGF0ZWQgXFx1MDAzYyBNSU5fTFJVX0JBVENIO1xcbiBcXHQqaXNvbGF0ZWRwID0gaXNvbGF0ZWQ7XFxuIFxcdHJldHVybiBzY2FubmVkO1xcbiB9XFxuQEAgLTQ4MzksMzUgKzQ4NDYsNDIgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19zaW5nbGVfdHlwZV9yZWNsYWltKGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdHJldHVybiBzd2FwcGluZXNzID09IE1JTl9TV0FQUElORVNTIHx8XFxuK1xcdCAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkLFxcbiBcXHRcXHRcXHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcXG4ge1xcbi1cXHRpbnQgaTtcXG4tXFx0aW50IHRvdGFsX3NjYW5uZWQgPSAwO1xcbitcXHRib29sIHNpbmdsZV90eXBlID0gaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKTtcXG4gXFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuK1xcdGludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjtcXG4rXFx0Ym9vbCB0cmllZCA9IGZhbHNlLCBleGhhdXN0ZWQ7XFxuIFxcbi1cXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XFxuLVxcdFxcdGludCBzY2FubmVkO1xcbi1cXHRcXHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbityZXRyeTpcXG4rXFx0dGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbitcXHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcXG4rXFx0XFx0XFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQsIFxcdTAwMjZleGhhdXN0ZWQpO1xcbiBcXG4tXFx0XFx0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcXG4rXFx0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xcbitcXHRpZiAoKmlzb2xhdGVkKSB7XFxuK1xcdFxcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xcbitcXHRcXHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcXG4rXFx0XFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHRvdGFsX3NjYW5uZWQgKz0gc2Nhbm5lZDtcXG4tXFx0XFx0aWYgKCppc29sYXRlZCkge1xcbi1cXHRcXHRcXHQqaXNvbGF0ZV90eXBlID0gdHlwZTtcXG4tXFx0XFx0XFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElmIHNjYW5uZWQgXFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXFxuLVxcdFxcdCAqIG90aGVyIHR5cGUsIGFzIHRoaXMgdHlwZSByZW1haW5zIHN1ZmZpY2llbnQuIEZhbGxpbmcgYmFja1xcbi1cXHRcXHQgKiB0b28gcmVhZGlseSBjYW4gZGlzcnVwdCB0aGUgcG9zaXRpdmVfY3RybF9lcnIoKSBiaWFzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFzY2FubmVkKVxcbi1cXHRcXHRcXHR0eXBlID0gIXR5cGU7XFxuK1xcdC8qXFxuK1xcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xcbitcXHQgKiB0aGUgb3RoZXIgdHlwZSBpZiBhbGxvd2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0cmllZCBcXHUwMDI2XFx1MDAyNiBleGhhdXN0ZWQgXFx1MDAyNlxcdTAwMjYgIXNpbmdsZV90eXBlKSB7XFxuK1xcdFxcdHR5cGUgPSAhdHlwZTtcXG4rXFx0XFx0dHJpZWQgPSB0cnVlO1xcbitcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcXG5AQCAtNDk2OSwyMSArNDk4Myw4MiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0cmV0dXJuIHNjYW5uZWQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzd2FwcGluZXNzX2lzX2JhbGFuY2VkKGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdGludCByYW5nZSA9IE1BWF9TV0FQUElORVNTIC0gTUlOX1NXQVBQSU5FU1M7XFxuK1xcdGludCBtaWRkbGUgPSBNSU5fU1dBUFBJTkVTUyArIHJhbmdlIC8gMjtcXG4rXFxuK1xcdHJldHVybiBzd2FwcGluZXNzIFxcdTAwM2U9IG1pZGRsZSAtIHJhbmdlIC8gNSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgc3dhcHBpbmVzcyBcXHUwMDNjPSBtaWRkbGUgKyByYW5nZSAvIDU7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGxydV9nZW5faW1iYWxhbmNlZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZXEsIHVuc2lnbmVkIGxvbmcgbWluX3NlcSxcXG4rXFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbit7XFxuK1xcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuK1xcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBzZXE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2xkX3JhdGlvLCBnYjtcXG4rXFxuK1xcdC8qIFNraXAgc3dhcHBpbmVzcyBiaWFzIGZvciBzaW5nbGUtdHlwZSByZWNsYWltIG9yIGJhbGFuY2VkIHN3YXBwaW5lc3MgKi9cXG4rXFx0aWYgKGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcykgfHwgc3dhcHBpbmVzc19pc19iYWxhbmNlZChzd2FwcGluZXNzKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogTW9yZSB0aGFuIHR3byBnZW5lcmF0aW9ucyByZW1haW4gdG8gcmVjbGFpbSAqL1xcbitcXHRpZiAobWluX3NlcSArIE1JTl9OUl9HRU5TIFxcdTAwM2MgbWF4X3NlcSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUnVuIGFnaW5nIGlmIHRoZSBvbmx5IHJlbWFpbmluZyByZWNsYWltYWJsZSBnZW5lcmF0aW9uXFxuK1xcdCAqIGhhcyBmZXcgZm9saW9zLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChzZXEgPSBtaW5fc2VxOyBzZXEgXFx1MDAzYz0gbWF4X3NlcTsgc2VxKyspIHtcXG4rXFx0XFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gMDtcXG4rXFx0XFx0aW50IHpvbmU7XFxuK1xcbitcXHRcXHRmb3IgKHpvbmUgPSAwOyB6b25lIFxcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXFxuK1xcdFxcdFxcdHNpemUgKz0gbWF4KFJFQURfT05DRShscnVnZW4tXFx1MDAzZW5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0pLCAwTCk7XFxuK1xcbitcXHRcXHRpZiAoc2VxICsgTUlOX05SX0dFTlMgXFx1MDAzZSBtYXhfc2VxKVxcbitcXHRcXHRcXHR5b3VuZyArPSBzaXplO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG9sZCArPSBzaXplO1xcbitcXHR9XFxuK1xcdC8qXFxuK1xcdCAqIENvcGllZCBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBidXQgdXNlcyBhIGhpZ2hlciBvbGRfcmF0aW8gdG9cXG4rXFx0ICogbWFrZSBhZ2luZyBsZXNzIGFnZ3Jlc3NpdmUuXFxuK1xcdCAqL1xcbitcXHRnYiA9ICh5b3VuZyArIG9sZCkgXFx1MDAzZVxcdTAwM2UgKDMwIC0gUEFHRV9TSElGVCk7XFxuK1xcdG9sZF9yYXRpbyA9IGdiID8gaW50X3NxcnQoMTAgKiBnYikgOiAxO1xcbitcXHRvbGRfcmF0aW8gKj0gTUFYX05SX0dFTlM7XFxuK1xcdHJldHVybiB5b3VuZyBcXHUwMDNlIG9sZCAqIG9sZF9yYXRpbztcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXFxuIHtcXG4rXFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuIFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuIFxcbiBcXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cXG4gXFx0aWYgKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpICsgTUlOX05SX0dFTlMgXFx1MDAzZSBtYXhfc2VxKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuK1xcdC8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkIGZvciBleHRyZW1lIHN3YXBwaW5lc3MgKi9cXG4rXFx0aWYgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNlIG1heF9zZXEgXFx1MDAyNlxcdTAwMjYgIXN3YXBwaW5lc3NfaXNfYmFsYW5jZWQoc3dhcHBpbmVzcykpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0LyogdHJ5IHRvIGF2b2lkIGFnaW5nLCBkbyBnZW50bGUgcmVjbGFpbSBhdCB0aGUgZGVmYXVsdCBwcmlvcml0eSAqL1xcbiBcXHRpZiAoc2MtXFx1MDAzZXByaW9yaXR5ID09IERFRl9QUklPUklUWSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LyogYmV0dGVyIHRvIHJ1biBhZ2luZyBldmVuIHRob3VnaCBldmljdGlvbiBpcyBzdGlsbCBwb3NzaWJsZSAqL1xcbi1cXHRyZXR1cm4gZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxO1xcbitcXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xcbitcXHRyZXR1cm4gbHJ1X2dlbl9pbWJhbGFuY2VkKGxydXZlYywgdHlwZSwgbWF4X3NlcSwgbWluX3NlcVt0eXBlXSwgc2MsIHN3YXBwaW5lc3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0ODo1MC4zMTgyNzI3NzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzI0MjY0NjEwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5ZDM4OGM5Y2JlNzI1ZjQyYjUwY2VlOWU1MjYxNDk1M2IyMzVjNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ4OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGEyNmM4Yjg1NTIyMjIuLjIzM2QyMDA2YTU0MTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNTUyLDEwICs1NTIsOCBAQCBlbnVtIHtcbiAgKiBUaGUgeW91bmdlc3QgZ2VuZXJhdGlvbiBudW1iZXIgaXMgc3RvcmVkIGluIG1heF9zZXEgZm9yIGJvdGggYW5vbiBhbmQgZmlsZVxuICAqIHR5cGVzIGFzIHRoZXkgYXJlIGFnZWQgb24gYW4gZXF1YWwgZm9vdGluZy4gVGhlIG9sZGVzdCBnZW5lcmF0aW9uIG51bWJlcnMgYXJlXG4gICogc3RvcmVkIGluIG1pbl9zZXFbXSBzZXBhcmF0ZWx5IGZvciBhbm9uIGFuZCBmaWxlIHR5cGVzIHNvIHRoYXQgdGhleSBjYW4gYmVcbi0gKiBpbmNyZW1lbnRlZCBpbmRlcGVuZGVudGx5LiBJZGVhbGx5IG1pbl9zZXFbXSBhcmUga2VwdCBpbiBzeW5jIHdoZW4gYm90aCBhbm9uXG4tICogYW5kIGZpbGUgdHlwZXMgYXJlIGV2aWN0YWJsZS4gSG93ZXZlciwgdG8gYWRhcHQgdG8gc2l0dWF0aW9ucyBsaWtlIGV4dHJlbWVcbi0gKiBzd2FwcGluZXNzLCB0aGV5IGFyZSBhbGxvd2VkIHRvIGJlIG91dCBvZiBzeW5jIGJ5IGF0IG1vc3Rcbi0gKiBNQVhfTlJfR0VOUy1NSU5fTlJfR0VOUy0xLlxuKyAqIGluY3JlbWVudGVkIGluZGVwZW5kZW50bHkuIEZvciBib3RoIGZpbGUgYW5kIGFub255bW91cyBtZW1vcnksIHRoZSBtaW5pbXVtXG4rICogZ2VuZXJhdGlvbiBtdXN0IGJlIGF0IGxlYXN0IE1JTl9OUl9HRU5TLlxuICAqXG4gICogVGhlIG51bWJlciBvZiBwYWdlcyBpbiBlYWNoIGdlbmVyYXRpb24gaXMgZXZlbnR1YWxseSBjb25zaXN0ZW50IGFuZCB0aGVyZWZvcmVcbiAgKiBjYW4gYmUgdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hlbiByZXNldF9iYXRjaF9zaXplKCkgaXMgcGVuZGluZy5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAxN2QyYjc5M2NiZmM0Li4zOTZlNDdlMzI3YmM4IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMzk4MiwxNiArMzk4Miw2IEBAIHN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0aWYgKCFzZXFfaW5jX2ZsYWcpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qIHNlZSB0aGUgY29tbWVudCBvbiBscnVfZ2VuX2ZvbGlvICovXG4tXHRpZiAoc3dhcHBpbmVzcyBcdTAwMjZcdTAwMjYgc3dhcHBpbmVzcyBcdTAwM2M9IE1BWF9TV0FQUElORVNTKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgc2VxID0gbHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSBNSU5fTlJfR0VOUztcbi1cbi1cdFx0aWYgKG1pbl9zZXFbTFJVX0dFTl9BTk9OXSBcdTAwM2Ugc2VxIFx1MDAyNlx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fRklMRV0gXHUwMDNjIHNlcSlcbi1cdFx0XHRtaW5fc2VxW0xSVV9HRU5fQU5PTl0gPSBzZXE7XG4tXHRcdGVsc2UgaWYgKG1pbl9zZXFbTFJVX0dFTl9GSUxFXSBcdTAwM2Ugc2VxIFx1MDAyNlx1MDAyNiBtaW5fc2VxW0xSVV9HRU5fQU5PTl0gXHUwMDNjIHNlcSlcbi1cdFx0XHRtaW5fc2VxW0xSVV9HRU5fRklMRV0gPSBzZXE7XG4tXHR9XG4tXG4gXHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZSh0eXBlLCBzd2FwcGluZXNzKSB7XG4gXHRcdGlmIChtaW5fc2VxW3R5cGVdIFx1MDAzYz0gbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNDcyNyw3ICs0NzE3LDggQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCB0eXBlLCBpbnQgdGllcixcbi1cdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKVxuK1x0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHAsXG4rXHRcdCAgICAgICBib29sICpleGhhdXN0ZWQpXG4ge1xuIFx0aW50IGk7XG4gXHRpbnQgZ2VuO1xuQEAgLTQ3MzgsMTUgKzQ3MjksMTggQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGludCBza2lwcGVkID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuK1x0dW5zaWduZWQgbG9uZyBtaW5fc2VxID0gbHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV07XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiBcdTAwM2UgTUFYX0xSVV9CQVRDSCk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpO1xuIFxuLVx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpXG4rXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykge1xuK1x0XHQqZXhoYXVzdGVkID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cbituZXh0X2dlbjpcbitcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcSk7XG4gXHRmb3IgKGkgPSBNQVhfTlJfWk9ORVM7IGkgXHUwMDNlIDA7IGktLSkge1xuIFx0XHRMSVNUX0hFQUQobW92ZWQpO1xuIFx0XHRpbnQgc2tpcHBlZF96b25lID0gMDtcbkBAIC00Nzg4LDYgKzQ3ODIsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBUaGlzIGdlbmVyYXRpb24gaXMgZXhoYXVzdGVkIGFjcm9zcyBhbGwgem9uZXMsIGJ1dCB0aGUgc2NhblxuK1x0ICogdGFyZ2V0IGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC4gQ29udGludWUgd2l0aCB0aGUgbmV4dFxuK1x0ICogcmVjbGFpbWFibGUgZ2VuZXJhdGlvbi5cbitcdCAqL1xuK1x0aWYgKGkgPT0gMCBcdTAwMjZcdTAwMjYgKyttaW5fc2VxICsgTUlOX05SX0dFTlMgXHUwMDNjPSBscnVnZW4tXHUwMDNlbWF4X3NlcSlcbitcdFx0Z290byBuZXh0X2dlbjtcbitcbiBcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgaXNvbGF0ZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzb3J0ZWQpO1xuQEAgLTQ3OTYsNiArNDc5OCwxMSBAQCBzdGF0aWMgaW50IHNjYW5fZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0c2Nhbm5lZCwgc2tpcHBlZCwgaXNvbGF0ZWQsXG4gXHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG4gXG4rXHQvKlxuK1x0ICogVGhpcyBzY2FuIGV4aGF1c3RlZCB0aGUgcmVjbGFpbWFibGUgbGlzdHMgYmVmb3JlIHJlYWNoaW5nIHRoZVxuK1x0ICogc2NhbiB0YXJnZXQgb3IgYWNjdW11bGF0aW5nIGVub3VnaCBpc29sYXRlZCBmb2xpb3MuXG4rXHQgKi9cbitcdCpleGhhdXN0ZWQgPSByZW1haW5pbmcgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlzb2xhdGVkIFx1MDAzYyBNSU5fTFJVX0JBVENIO1xuIFx0Kmlzb2xhdGVkcCA9IGlzb2xhdGVkO1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuQEAgLTQ4MzksMzUgKzQ4NDYsNDIgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGlzX3NpbmdsZV90eXBlX3JlY2xhaW0oaW50IHN3YXBwaW5lc3MpXG4re1xuK1x0cmV0dXJuIHN3YXBwaW5lc3MgPT0gTUlOX1NXQVBQSU5FU1MgfHxcbitcdCAgICAgICBzd2FwcGluZXNzID09IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuK31cbitcbiBzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxuIFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcbiBcdFx0XHQgIGludCAqaXNvbGF0ZV90eXBlLCBpbnQgKmlzb2xhdGVfc2Nhbm5lZClcbiB7XG4tXHRpbnQgaTtcbi1cdGludCB0b3RhbF9zY2FubmVkID0gMDtcbitcdGJvb2wgc2luZ2xlX3R5cGUgPSBpc19zaW5nbGVfdHlwZV9yZWNsYWltKHN3YXBwaW5lc3MpO1xuIFx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG4rXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDAsIHNjYW5uZWQsIHRpZXI7XG4rXHRib29sIHRyaWVkID0gZmFsc2UsIGV4aGF1c3RlZDtcbiBcbi1cdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbi1cdFx0aW50IHNjYW5uZWQ7XG4tXHRcdGludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG4rcmV0cnk6XG4rXHR0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG4rXHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcbitcdFx0XHQgICAgICB0eXBlLCB0aWVyLCBsaXN0LCBpc29sYXRlZCwgXHUwMDI2ZXhoYXVzdGVkKTtcbiBcbi1cdFx0c2Nhbm5lZCA9IHNjYW5fZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsXG4tXHRcdFx0XHQgICAgICB0eXBlLCB0aWVyLCBsaXN0LCBpc29sYXRlZCk7XG4rXHR0b3RhbF9zY2FubmVkICs9IHNjYW5uZWQ7XG4rXHRpZiAoKmlzb2xhdGVkKSB7XG4rXHRcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xuK1x0XHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcbitcdFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XG4rXHR9XG4gXG4tXHRcdHRvdGFsX3NjYW5uZWQgKz0gc2Nhbm5lZDtcbi1cdFx0aWYgKCppc29sYXRlZCkge1xuLVx0XHRcdCppc29sYXRlX3R5cGUgPSB0eXBlO1xuLVx0XHRcdCppc29sYXRlX3NjYW5uZWQgPSBzY2FubmVkO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdC8qXG4tXHRcdCAqIElmIHNjYW5uZWQgXHUwMDNlIDAgYW5kIGlzb2xhdGVkID09IDAsIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGVcbi1cdFx0ICogb3RoZXIgdHlwZSwgYXMgdGhpcyB0eXBlIHJlbWFpbnMgc3VmZmljaWVudC4gRmFsbGluZyBiYWNrXG4tXHRcdCAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXNjYW5uZWQpXG4tXHRcdFx0dHlwZSA9ICF0eXBlO1xuK1x0LypcbitcdCAqIFdlIGFyZSBydW5uaW5nIG91dCBvZiB0aGUgY3VycmVudCByZWNsYWltIHR5cGUuIEZhbGwgYmFjayB0b1xuK1x0ICogdGhlIG90aGVyIHR5cGUgaWYgYWxsb3dlZC5cbitcdCAqL1xuK1x0aWYgKCF0cmllZCBcdTAwMjZcdTAwMjYgZXhoYXVzdGVkIFx1MDAyNlx1MDAyNiAhc2luZ2xlX3R5cGUpIHtcbitcdFx0dHlwZSA9ICF0eXBlO1xuK1x0XHR0cmllZCA9IHRydWU7XG4rXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbkBAIC00OTY5LDIxICs0OTgzLDgyIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzd2FwcGluZXNzX2lzX2JhbGFuY2VkKGludCBzd2FwcGluZXNzKVxuK3tcbitcdGludCByYW5nZSA9IE1BWF9TV0FQUElORVNTIC0gTUlOX1NXQVBQSU5FU1M7XG4rXHRpbnQgbWlkZGxlID0gTUlOX1NXQVBQSU5FU1MgKyByYW5nZSAvIDI7XG4rXG4rXHRyZXR1cm4gc3dhcHBpbmVzcyBcdTAwM2U9IG1pZGRsZSAtIHJhbmdlIC8gNSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBzd2FwcGluZXNzIFx1MDAzYz0gbWlkZGxlICsgcmFuZ2UgLyA1O1xuK31cbitcbitzdGF0aWMgYm9vbCBscnVfZ2VuX2ltYmFsYW5jZWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSxcbitcdFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxLCB1bnNpZ25lZCBsb25nIG1pbl9zZXEsXG4rXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbit7XG4rXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbitcdHVuc2lnbmVkIGxvbmcgeW91bmcgPSAwLCBvbGQgPSAwLCBzZXE7XG4rXHR1bnNpZ25lZCBsb25nIG9sZF9yYXRpbywgZ2I7XG4rXG4rXHQvKiBTa2lwIHN3YXBwaW5lc3MgYmlhcyBmb3Igc2luZ2xlLXR5cGUgcmVjbGFpbSBvciBiYWxhbmNlZCBzd2FwcGluZXNzICovXG4rXHRpZiAoaXNfc2luZ2xlX3R5cGVfcmVjbGFpbShzd2FwcGluZXNzKSB8fCBzd2FwcGluZXNzX2lzX2JhbGFuY2VkKHN3YXBwaW5lc3MpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBNb3JlIHRoYW4gdHdvIGdlbmVyYXRpb25zIHJlbWFpbiB0byByZWNsYWltICovXG4rXHRpZiAobWluX3NlcSArIE1JTl9OUl9HRU5TIFx1MDAzYyBtYXhfc2VxKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKlxuK1x0ICogUnVuIGFnaW5nIGlmIHRoZSBvbmx5IHJlbWFpbmluZyByZWNsYWltYWJsZSBnZW5lcmF0aW9uXG4rXHQgKiBoYXMgZmV3IGZvbGlvcy5cbitcdCAqL1xuK1x0Zm9yIChzZXEgPSBtaW5fc2VxOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xuK1x0XHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuK1x0XHR1bnNpZ25lZCBsb25nIHNpemUgPSAwO1xuK1x0XHRpbnQgem9uZTtcbitcbitcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lKyspXG4rXHRcdFx0c2l6ZSArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi1cdTAwM2Vucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKSwgMEwpO1xuK1xuK1x0XHRpZiAoc2VxICsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEpXG4rXHRcdFx0eW91bmcgKz0gc2l6ZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG9sZCArPSBzaXplO1xuK1x0fVxuK1x0LypcbitcdCAqIENvcGllZCBmcm9tIGluYWN0aXZlX2lzX2xvdygpLCBidXQgdXNlcyBhIGhpZ2hlciBvbGRfcmF0aW8gdG9cbitcdCAqIG1ha2UgYWdpbmcgbGVzcyBhZ2dyZXNzaXZlLlxuK1x0ICovXG4rXHRnYiA9ICh5b3VuZyArIG9sZCkgXHUwMDNlXHUwMDNlICgzMCAtIFBBR0VfU0hJRlQpO1xuK1x0b2xkX3JhdGlvID0gZ2IgPyBpbnRfc3FydCgxMCAqIGdiKSA6IDE7XG4rXHRvbGRfcmF0aW8gKj0gTUFYX05SX0dFTlM7XG4rXHRyZXR1cm4geW91bmcgXHUwMDNlIG9sZCAqIG9sZF9yYXRpbztcbit9XG4rXG4gc3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcbiBcdFx0XHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbiB7XG4rXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbiBcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4gXG4gXHQvKiBoYXZlIHRvIHJ1biBhZ2luZywgc2luY2UgZXZpY3Rpb24gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUgKi9cbiBcdGlmIChldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TIFx1MDAzZSBtYXhfc2VxKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbitcdC8qIHJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgZXhoYXVzdGVkIGZvciBleHRyZW1lIHN3YXBwaW5lc3MgKi9cbitcdGlmIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXHUwMDNlIG1heF9zZXEgXHUwMDI2XHUwMDI2ICFzd2FwcGluZXNzX2lzX2JhbGFuY2VkKHN3YXBwaW5lc3MpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbiBcdC8qIHRyeSB0byBhdm9pZCBhZ2luZywgZG8gZ2VudGxlIHJlY2xhaW0gYXQgdGhlIGRlZmF1bHQgcHJpb3JpdHkgKi9cbiBcdGlmIChzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIGJldHRlciB0byBydW4gYWdpbmcgZXZlbiB0aG91Z2ggZXZpY3Rpb24gaXMgc3RpbGwgcG9zc2libGUgKi9cbi1cdHJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9HRU5TID09IG1heF9zZXE7XG4rXHRpZiAoZXZpY3RhYmxlX21pbl9zZXEobWluX3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA9PSBtYXhfc2VxKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qIFJ1biBhZ2luZyBpZiB0aGUgcHJlZmVycmVkIHR5cGUgaXMgc2V2ZXJlbHkgaW1iYWxhbmNlZCBhY3Jvc3MgZ2VucyAqL1xuK1x0cmV0dXJuIGxydV9nZW5faW1iYWxhbmNlZChscnV2ZWMsIHR5cGUsIG1heF9zZXEsIG1pbl9zZXFbdHlwZV0sIHNjLCBzd2FwcGluZXNzKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ4OjUwLjMxODI3Mzk3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTEwOTY2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCdzIHRvdWNoaW5nIGBtbS92bXNjYW4uY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYC4gQWxhcm0gYmVsbHMgYXJlIGFscmVhZHkgZ29pbmcgb2ZmOyBhbnl0aGluZyBuZWFyIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsIGFuZCAqYWx3YXlzKiBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGlzIG9uZSBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIHJlY2xhaW0gbG9naWMgKE1HTFJVKS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgcmV3b3JraW5nIHNvbWUga2V5IGZ1bmN0aW9uczogYHRyeV90b19pbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgLCBhbmQgaW50cm9kdWNpbmcgYSBmZXcgbmV3IG9uZXMgbGlrZSBgaXNfc2luZ2xlX3R5cGVfcmVjbGFpbWAsIGBzd2FwcGluZXNzX2lzX2JhbGFuY2VkYCwgYW5kIGBscnVfZ2VuX2ltYmFsYW5jZWRgLiBEZWZpbml0ZWx5IGEgaGlnaC12YWx1ZSB0YXJnZXQuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwcmUtcmVxdWlzaXRlcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIE1HTFJVLiBUeXBpY2FsbHksIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIGtleS4gU28sIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vYCBvciBwb3RlbnRpYWxseSByZWxhdGVkIGFyZWFzLCB0byBmaW5kIHRoZSBleGFjdCBkZXBlbmRlbmN5IGZvciBgTFJVX0dFTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0ODo1NC40NjkzNzQ5NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1OTI0MDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTA9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDAxOmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAyLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDktXFxubW0vS2NvbmZpZzoxNDEwOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTEtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTUtXFxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE3LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNC1cXG5tbS9LY29uZmlnOjE0MjU6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI2LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDg6NTcuMTI4NjIwNzEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTE5ODQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uIGFuZCBJbXBhY3QqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBlbmFibGluZyBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGZvdW5kYXRpb24gd2UncmUgYnVpbGRpbmcgb24uIE5vdywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxpbmcgdGhlc2UgZmxhZ3MgKmRvZXMqIGluIHRoZSBjb2RlLiBMZXQncyBzZWUuLi4gd2hhdCBmdW5jdGlvbnMgYXJlIGJlaW5nIHRvdWNoZWQ/IE9rYXksIGl0IGxvb2tzIGxpa2UgYHRyeV90b19pbmNfbWluX3NlcWAsIGBzY2FuX2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvc2AsIGBldmljdF9mb2xpb3NgLCBhbmQgYHNob3VsZF9ydW5fYWdpbmdgIGFyZSB0aGUgb25lcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhlc2UgYXJlIGFsbCBzdGF0aWMsIG1lYW5pbmcgdGhleSdyZSBpbnRlcm5hbCB0byBgbW0vdm1zY2FuLmNgLlxuXG5UaGF0J3MgaGVscGZ1bCwgYnV0IHdlIG5lZWQgdG8gc2VlIHRoZSAqbm9uLXN0YXRpYyogZW50cnkgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLiBXZSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBTbywgYGV2aWN0X2ZvbGlvc2AsIHRoYXQncyB0aGUgb25lIEknbSBtb3N0IGludGVyZXN0ZWQgaW4uIFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBJJ20gYmV0dGluZyB0aGF0IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGlzIGludm9sdmVkLiBCZXR0ZXIgdG8ganVzdCBjaGVjayBgbW0vdm1zY2FuLmNgIGRpcmVjdGx5IHRvIGJlIHN1cmUsIHRoYXQnbGwgYmUgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MDEuMDI5ODIxMDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjI1ODEyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4NTU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4ODktXFxubW0vdm1zY2FuLmM6NDg5MDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODkxLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMzA9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNTMtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTE1NDpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTE1NS1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTc1Nz1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NzctXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU3Nzg6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU3NzktXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ5OjAzLjM1MjQwODIzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODkxOTUyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIExSVSBWZWN0b3IgRXZpY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBzeXN0ZW0gaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUuIEl0IHNlZW1zIGxpa2UgYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCBldmVudHVhbGx5IGZ1bm5lbCBkb3duIHRvIGBldmljdF9mb2xpb3NgLiBUaGF0J3MgdGhlIGNvcmUgZXZpY3Rpb24gbG9naWMsIGNsZWFybHkuIE15IG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB0aG9zZSB0d28gZnVuY3Rpb25zLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiB0aGVzZSBldmljdGlvbiByb3V0aW5lcyBhcmUgdHJpZ2dlcmVkLiBXaGF0IGV2ZW50cyBvciBjb25kaXRpb25zIGxlYWQgdGhlIHN5c3RlbSB0byBkZWNpZGUgaXQncyB0aW1lIHRvIHJlY2xhaW0gc29tZSBtZW1vcnk/IElzIGl0IGJhc2VkIG9uIGV4cGxpY2l0IHJlcXVlc3RzLCBkZXRlY3RlZCB0aHJlc2hvbGRzLCBvciBhIGJhY2tncm91bmQgcHJvY2Vzcz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGV2aWN0aW9uIHN0cmF0ZWd5LiBUaGlzIGFuYWx5c2lzIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgcG9saWN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MDYuNDQxNjA1NDg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjg4Njg1MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTA5NT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEyOS0gKi9cXG5tbS92bXNjYW4uYzo1MTMwOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTEzMS17XFxuLS1cXG5tbS92bXNjYW4uYz01MTc1PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5NC1cXG5tbS92bXNjYW4uYzo1MTk1OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTE5Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyODY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01Mjk4LVxcbm1tL3Ztc2Nhbi5jOjUyOTk6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUzMDAtXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTowOC42NzA0Nzg5NDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzY4NDE4MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipFdmFsdWF0aW5nIEV2aWN0aW9uIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBldmljdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgaXMgYSBzdHJvbmcgY29udGVuZGVyLiBJdCdzIG9mdGVuIGVmZmVjdGl2ZSwgc28gaXQncyBhIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cbkxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBCZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgc2hvdWxkIGRlZmluaXRpdmVseSBjaGVjayBob3cgYHJ1bl9ldmljdGlvbmAgaW50ZXJhY3RzLCBob3cgaXQgbWlnaHQgd29yayBhcyBhbiBhbHRlcm5hdGl2ZSwgb3IgaG93IGl0IG1pZ2h0IGluZm9ybSB0aGUgcHJvY2Vzcy4gSSBuZWVkIGEgaG9saXN0aWMgdmlldyBiZWZvcmUgbWFraW5nIGEgZGVjaXNpb24uIEdvdHRhIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgKmFsbCogcG90ZW50aWFsIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OToxMS40Mzg4OTg4ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDEzNjE2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnVuX2V2aWN0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU3NDY9c3RhdGljIGludCBydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NTYtXFxubW0vdm1zY2FuLmM6NTc1NzpzdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG5tbS92bXNjYW4uYy01NzU4LVxcdFxcdFxcdGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYz01Nzg3PXN0YXRpYyBpbnQgcnVuX2NtZChjaGFyIGNtZCwgdTY0IG1lbWNnX2lkLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MTgtXFx0Y2FzZSAnLSc6XFxubW0vdm1zY2FuLmM6NTgxOTpcXHRcXHRlcnIgPSBydW5fZXZpY3Rpb24obHJ1dmVjLCBzZXEsIHNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbm1tL3Ztc2Nhbi5jLTU4MjAtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ5OjEzLjY0MDI2NjU2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY4MjkxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlbHZpbmcgaW50byBNR0xSVSBEZWJ1Z2dpbmcgYW5kIFNocmluayBMb2dpYyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgcnVuX2NtZGAgZnVuY3Rpb24gd2l0aGluIHRoZSBNR0xSVSBkZWJ1Z2ZzIGludGVyZmFjZS4gSXQncyBvYnZpb3VzbHkgZGVzaWduZWQgZm9yIGludGVyYWN0aXZlIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvZiB0aGUgTUdMUlUgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHNocmlua2luZyBwcm9jZXNzLlxuXG5Ob3csIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGNhbGxzIHRvIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBTcGVjaWZpY2FsbHksIGRvZXMgdGhpcyBnZXQgaW52b2tlZCBvbmx5IGZyb20gYHNocmlua19scnV2ZWNgIGFuZCBwb3RlbnRpYWxseSBgc2hyaW5rX25vZGVgLCBvciBhcmUgdGhlcmUgb3RoZXIgY2FsbCBwYXRocyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEJlc3QgcHJhY3RpY2Ugd291bGQgYmUgdG8gY29uZmlybSB0aGlzLiBJIHdpbGwgbG9vayBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgb3JpZ2luIHBvaW50cyBvZiB0aGUgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ5OjE2LjgwODU3MDUzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2Mjk0NzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX3Nocmlua19scnV2ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTIxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyODUtXFxubW0vdm1zY2FuLmM6NTI4NjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01Mjg3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMzQtXFxubW0vdm1zY2FuLmM6NjAzNTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDM2LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwNDc9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjA1OC1cXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmM6NjA1OTpcXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNjA2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MTguODcxNTI0MzEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTcxNzAxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGF0IHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGBzaHJpbmtfbHJ1dmVjYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHNocmlua19scnV2ZWNgIGlzIGNhbGxpbmcgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AuIFRoYXQncyB0aGUgY29yZSByZWxhdGlvbnNoaXAgaGVyZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCB0aG91Z2gsIGlzIHdoYXQgKnRyaWdnZXJzKiBgc2hyaW5rX2xydXZlY2A/IEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0cyB2aXNpYmlsaXR5IGFuZCBzY29wZSBhcmUgbGltaXRlZCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIHBhcnQgb2YgdGhlIGNvZGUgdGhhdCdzIGNhbGxpbmcgaXQuIEtub3dpbmcgd2hlcmUgdGhpcyBjYWxsIG9yaWdpbmF0ZXMgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNvbnRleHQgb24gdGhlIGJyb2FkZXIgTFJVIGNhY2hlJ3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpZiBJJ20gbG9va2luZyBhdCBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nIGEgcG90ZW50aWFsIGlzc3VlLiBOZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MjEuNzY4Njk3NTg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1ODA5Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19scnV2ZWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTA5NT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEyOS0gKi9cXG5tbS92bXNjYW4uYzo1MTMwOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTEzMS17XFxuLS1cXG5tbS92bXNjYW4uYz01MTc1PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5NC1cXG5tbS92bXNjYW4uYzo1MTk1OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTE5Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyMTY9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01Mjg1LVxcbm1tL3Ztc2Nhbi5jOjUyODY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTI4Ny17XFxuLS1cXG5tbS92bXNjYW4uYy01Mjk4LVxcbm1tL3Ztc2Nhbi5jOjUyOTk6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUzMDAtXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjAzMD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjAzNC1cXG5tbS92bXNjYW4uYzo2MDM1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwMzYte1xcbi0tXFxubW0vdm1zY2FuLmM9NjA0MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjA0Ni1cXG5tbS92bXNjYW4uYzo2MDQ3OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDQ4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwNTgtXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjYwNTk6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYwNjAtXFxuLS1cXG5tbS92bXNjYW4uYz02MjM4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyOTctXFxubW0vdm1zY2FuLmM6NjI5ODpcXHRcXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyOTktXFxuLS1cXG5tbS92bXNjYW4uYz02ODkzPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02OTIzLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY5MjQ6XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjkyNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MjMuODg0NTEzMjY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTYxMDczMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IC0gQSBRdWljayBTY2FuKipcblxuQWxyaWdodCwgc28gYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzbid0IHN0YXRpYy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBzZWUgd2hhdCB0aGF0IG1lYW5zLCB3aGVyZSB0aGlzIGxlYWRzIHVzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgc2hyaW5rX25vZGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gV2hhdCBpcyBpdHMgcHVycG9zZT8gV2hlcmUgaXMgaXQgdXNlZD8gTGV0J3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNTgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OToyNi41ODA2MjQxNzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTY0OTM3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD04Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vaW50ZXJuYWwuaC04Ny1cXHRcXHRcXHRcXHRcXHQgICBpbnQgKnN3YXBwaW5lc3MpO1xcbm1tL2ludGVybmFsLmg6ODg6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9pbnRlcm5hbC5oLTg5LVxcdFxcdFxcdFxcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI3Mz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTMxMi1cXHRcXHR9XFxubW0vbWVtY29udHJvbC12MS5jOjMxMzpcXHRcXHR0b3RhbCArPSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0zMTQtXFx0XFx0XFx0XFx0XFx0cGdkYXQsIFxcdTAwMjZucl9zY2FubmVkKTtcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MTk9Ym9vbCBwYWdlX2lzX3VubW92YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTExNC1cXHQgKiBpdC4gIEJ1dCBub3csIG1lbW9yeSBvZmZsaW5lIGl0c2VsZiBkb2Vzbid0IGNhbGxcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjExNTpcXHQgKiBzaHJpbmtfbm9kZV9zbGFicygpIGFuZCBpdCBzdGlsbCB0byBiZSBmaXhlZC5cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTExNi1cXHQgKi9cXG4tLVxcbm1tL3ZtcHJlc3N1cmUuYz01Nz1lbnVtIHZtcHJlc3N1cmVfbGV2ZWxzIHZtcHJlc3N1cmVfY2FsY19sZXZlbCh1bnNpZ25lZCBsb25nIHNjYW5uZWQsXFxuLS1cXG5tbS92bXByZXNzdXJlLmMtNjQtXFx0ICogcmVjbGFpbWVkIGNhbiBiZSBncmVhdGVyIHRoYW4gc2Nhbm5lZCBmb3IgdGhpbmdzIHN1Y2ggYXMgcmVjbGFpbWVkXFxubW0vdm1wcmVzc3VyZS5jOjY1OlxcdCAqIHNsYWIgcGFnZXMuIHNocmlua19ub2RlKCkganVzdCBhZGRzIHJlY2xhaW1lZCBwYWdlcyB3aXRob3V0IGFcXG5tbS92bXByZXNzdXJlLmMtNjYtXFx0ICogcmVsYXRlZCBpbmNyZW1lbnQgdG8gc2Nhbm5lZCBwYWdlcy5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTE5NDA9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xOTc4LS8qXFxubW0vdm1zY2FuLmM6MTk3OTogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMTk4MC0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyODY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MzA2LVxcbm1tL3Ztc2Nhbi5jOjUzMDc6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MzA4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzU9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDM5LVxcbm1tL3Ztc2Nhbi5jOjYwNDA6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02MDQxLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxODY9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MjM3LVxcbm1tL3Ztc2Nhbi5jOjYyMzg6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYyMzkte1xcbi0tXFxubW0vdm1zY2FuLmMtNjMxNi1cXG5tbS92bXNjYW4uYzo2MzE3OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYzMTgte1xcbi0tXFxubW0vdm1zY2FuLmMtNjMyNC1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYzMjU6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYzMjYtXFxuLS1cXG5tbS92bXNjYW4uYy02MzQxLVxcbm1tL3Ztc2Nhbi5jOjYzNDI6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjM0My1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY1MDI9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjU4MC1cXHRcXHRsYXN0X3BnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo2NTgxOlxcdFxcdHNocmlua19ub2RlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02NTgyLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NDc9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02ODkyLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2ODkzOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg5NC1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS92bXNjYW4uYy02OTE5LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY5MjA6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjkyMS1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NzA0MT1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDY1LVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo3MDY2OlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNzA2Ny1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYz03MTIzPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNjEtICovXFxubW0vdm1zY2FuLmM6NzE2MjpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MTYzLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxNzgtXFx0ICovXFxubW0vdm1zY2FuLmM6NzE3OTpcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTcxODAtXFxuLS1cXG5tbS92bXNjYW4uYz03MjM1PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MzQ0LVxcbm1tL3Ztc2Nhbi5jOjczNDU6XFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxubW0vdm1zY2FuLmMtNzM0Ni1cXHRcXHRzYy5ucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNTYtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzM1NzpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTczNTgtXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc5MTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MzgtXFx0XFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjc5Mzk6XFx0XFx0XFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy03OTQwLVxcdFxcdH0gd2hpbGUgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzYyBucl9wYWdlcyBcXHUwMDI2XFx1MDAyNiAtLXNjLVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNlPSAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6MjguNzM3MTI0MzM4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTg3OTQ3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipNZW1vcnkgTWFuYWdlbWVudCBFbnRyeSBQb2ludHMgYW5kIFJlY2xhaW0gTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaW5pdGlhdGVzIHBhZ2UgZnJlZWluZy4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4gdGhlIGFuYWx5c2lzLiBJdCdzIHRoZSB0b3AgbGV2ZWwgZnVuY3Rpb24sIGlmIEkgcmVjYWxsIGNvcnJlY3RseS4gVGhlbiwgYGJhbGFuY2VfcGdkYXRgIGlzIHRoZSBtYWluIGxvb3AgZm9yIHRoZSBrc3dhcGQgZGFlbW9uLCB0aGF0IG1ha2VzIHNlbnNlLiBJdCdzIHRoZSBwZXJzaXN0ZW50IHByb2Nlc3MgdGhhdCBjb25zdGFudGx5IG1vbml0b3JzIGFuZCBtYW5hZ2VzIG1lbW9yeSBwcmVzc3VyZSBhY3Jvc3MgdGhlIHN5c3RlbS5cblxuYF9fbm9kZV9yZWNsYWltYCBzb3VuZHMgbGlrZSB0aGUgY29yZSBsb2dpYyBmb3IgcmVjbGFpbWluZyBtZW1vcnkgYXQgdGhlIE5VTUEgbm9kZSBsZXZlbC4gVGhhdCdzIGxpa2VseSB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNhbGxlZCB3aGVuIGtzd2FwZCwgb3Igb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgbmVlZCB0byBmcmVlIHVwIG1lbW9yeSBmcm9tIGEgc3BlY2lmaWMgbm9kZS4gQW5kIGZpbmFsbHksIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBzcGVjaWZpY2FsbHkgZm9yIG1lbW9yeSBjZ3JvdXAgcmVjbGFpbS4gVGhhdCdzIHRhcmdldGVkIGF0IG1lbW9yeSBjb250cm9sIGdyb3VwcywgaGFuZGxpbmcgdGhlaXIgc3BlY2lmaWMgcmVjbGFpbSBkZW1hbmRzLlxuXG5Tbywgd2hlcmUgZG8gSSBzdGFydD8gTGV0J3MgZGl2ZSBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIHNlZSBob3cgdGhlIHBhZ2UgZnJlZWluZyBwcm9jZXNzIHVuZm9sZHMuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBlbnRpcmUgbWVtb3J5IGZyZWVpbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTozMy42NTU5MjMwNzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTU1MzgyNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX2ZyZWVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9maWxlLmM9MjM1MT1zdGF0aWMgdm9pZCBmdXNlX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTIzNzEtICogLSBzeW5jKDIpXFxuZnMvZnVzZS9maWxlLmM6MjM3MjogKiAtIHRyeV90b19mcmVlX3BhZ2VzKCkgd2l0aCBvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSXFxuZnMvZnVzZS9maWxlLmMtMjM3My0gKi9cXG4tLVxcbm1tL2ludGVybmFsLmg9Njk9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcXG5tbS9pbnRlcm5hbC5oOjcwOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbm1tL2ludGVybmFsLmgtNzEtXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm1hc2spO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0OTY9X19wZXJmb3JtX3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00NTA4LVxcbm1tL3BhZ2VfYWxsb2MuYzo0NTA5OlxcdHByb2dyZXNzID0gdHJ5X3RvX2ZyZWVfcGFnZXMoYWMtXFx1MDAzZXpvbmVsaXN0LCBvcmRlciwgZ2ZwX21hc2ssXFxubW0vcGFnZV9hbGxvYy5jLTQ1MTAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY1OTQ9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2MjQtICovXFxubW0vdm1zY2FuLmM6NjYyNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbm1tL3Ztc2Nhbi5jLTY2MjYtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3Njc9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02ODQ2LVxcbm1tL3Ztc2Nhbi5jOjY4NDc6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNjg0OC1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS92bXNjYW4uYy02ODgxLVxcbm1tL3Ztc2Nhbi5jOjY4ODI6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjg4My1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY5MzM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NjQtXFxubW0vdm1zY2FuLmM6Njk2NTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02OTY2LVxcbi0tXFxubW0vdm1zY2FuLmM9NzczMT11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3NTAtXFxubW0vdm1zY2FuLmM6Nzc1MTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy03NzUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTozNS43NzE0Njc0MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwNzQxMDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBBbGxvY2F0aW9uIGFuZCBNZW1vcnkgUmVjbGFtYXRpb24qKlxuXG5Pa2F5LCBzbyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGdldHMgY2FsbGVkIGZyb20gYF9fcGVyZm9ybV9yZWNsYWltYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgaXMgdGhlIHNsb3cgcGF0aCBmb3IgcGFnZSBhbGxvY2F0aW9uLCB3aGljaCBjb25maXJtcyBpdHMgaW1wb3J0YW5jZS4gRGVmaW5pdGVseSBhIHZhbGlkIGNvZGUgcGF0aC5cblxuTGV0J3MgcmV2aXNpdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIHNlZSBgdHJ5X3RvX2luY19taW5fc2VxYCwgYHNjYW5fZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYGV2aWN0X2ZvbGlvc2AsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AuIFRoZXkncmUgYWxsIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIGRpcmVjdCB1c2VmdWxuZXNzLiBJIG5lZWQgdG8gaWRlbnRpZnkgc3VpdGFibGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIGBGb2N1c1N5bWJvbHNgLCB0aG91Z2guXG5cbkkndmUgZ290IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYGJhbGFuY2VfcGdkYXRgICh3aGljaCBpcyBrc3dhcGQpLCBhbmQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLiBIbW0sIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgaW5jcmVkaWJseSBnZW5lcmljIOKAkyBpdCdzIHRoZSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIHJlY2xhaW0uIFdoaWxlIGl0J3MgYSBob3QtcGF0aCBmdW5jdGlvbiwgaXQncyBwZXJoYXBzICp0b28qIGJyb2FkLiBJIG5lZWQgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuXG5cbkkgd29uZGVyIGlmIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIHdvdWxkIGJlIG1vcmUgdGFyZ2V0ZWQ/IEJ1dCBubywgaXQncyBzdGF0aWMuIExldCdzIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgKm5vKiBub24tc3RhdGljIGBscnVfZ2VuXypgIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6NDAuOTc4ODgxNTI4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUxMjc4ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGxydV9nZW5fXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTctXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTg6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTk6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MDA6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTAxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02Nzc9c3RydWN0IGxydV9nZW5fbWVtY2cge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02ODctXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2ODg6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2ODk6dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTAtYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Mjp2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkzOnZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTQ6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Njk1OnZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTY6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Nzp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTgtdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njk5PWJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzAwOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzAxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03NTE9c3RhdGljIGlubGluZVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzUyOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NTMte1xcbi0tXFxubW0vdm1zY2FuLmM9MjkyMj1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDAtXFxubW0vdm1zY2FuLmM6Mjk0MTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NDIte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk2Ny1cXG5tbS92bXNjYW4uYzoyOTY4OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vdm1zY2FuLmMtMjk2OS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDA3LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDA4OnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMDkte1xcbi0tXFxubW0vdm1zY2FuLmM9NDM3MT1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0MTgtXFxubW0vdm1zY2FuLmM6NDQxOTp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NDIwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NDMtXFxubW0vdm1zY2FuLmM6NDQ0NDp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ0NS17XFxuLS1cXG5tbS92bXNjYW4uYy00NDU0LVxcbm1tL3Ztc2Nhbi5jOjQ0NTU6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ0NTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDQ4MC1cXG5tbS92bXNjYW4uYzo0NDgxOnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ0ODIte1xcbi0tXFxubW0vdm1zY2FuLmM9NDU3OD1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDYwOC1cXG5tbS92bXNjYW4uYzo0NjA5OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYxMC17XFxuLS1cXG5tbS92bXNjYW4uYz01OTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxydV9nZW5fcm9fZm9wcyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MzYtXFxubW0vdm1zY2FuLmM6NTkzNzp2b2lkIGxydV9nZW5faW5pdF9wZ2RhdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbm1tL3Ztc2Nhbi5jLTU5Mzgte1xcbi0tXFxubW0vdm1zY2FuLmMtNTk0OC1cXG5tbS92bXNjYW4uYzo1OTQ5OnZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtNTk1MC17XFxuLS1cXG5tbS92bXNjYW4uYy01OTcwLVxcbm1tL3Ztc2Nhbi5jOjU5NzE6dm9pZCBscnVfZ2VuX2luaXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTU5NzIte1xcbi0tXFxubW0vdm1zY2FuLmMtNTk4MS1cXG5tbS92bXNjYW4uYzo1OTgyOnZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy01OTgzLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2xydV9nZW5fdXRpbC5oPTM3PXN0cnVjdCBtZW1jZ19zdGF0cyB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaC00Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaDo0Mzp2b2lkIGxydV9nZW5fcmVhZF9tZW1jZ19zdGF0cyhzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICptZW1jZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbHJ1X2dlbl91dGlsLmgtNDQtbG9uZyBscnVfZ2VuX3N1bV9tZW1jZ19zdGF0cyhjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaD00NT1sb25nIGxydV9nZW5fc3VtX21lbWNnX3N0YXRzX2Zvcl9nZW4oaW50IGdlbiwgY29uc3Qgc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbHJ1X2dlbl91dGlsLmg6NDY6dm9pZCBscnVfZ2VuX2RvX2FnaW5nKHN0cnVjdCBtZW1jZ19zdGF0cyAqc3RhdHMsIGNvbnN0IGNoYXIgKm1lbWNnKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9scnVfZ2VuX3V0aWwuaC00Ny1pbnQgbHJ1X2dlbl9maW5kX2dlbmVyYXRpb24oY29uc3Qgc3RydWN0IG1lbWNnX3N0YXRzICpzdGF0cyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmM9MTgxPXN0YXRpYyB2b2lkIHByaW50X21lbWNnX3N0YXRzKGNvbnN0IHN0cnVjdCBtZW1jZ19zdGF0cyAqc3RhdHMsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jLTIwMC0vKiBSZS1yZWFkIGxydV9nZW4gZGVidWdmcyBpbmZvcm1hdGlvbiBmb3IgQG1lbWNnIGludG8gQHN0YXRzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmM6MjAxOnZvaWQgbHJ1X2dlbl9yZWFkX21lbWNnX3N0YXRzKHN0cnVjdCBtZW1jZ19zdGF0cyAqc3RhdHMsIGNvbnN0IGNoYXIgKm1lbWNnKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmMtMjAyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmM9MjgyPXN0YXRpYyB2b2lkIHJ1bl9hZ2luZ19pbXBsKHVuc2lnbmVkIGxvbmcgbWVtY2dfaWQsIGludCBub2RlX2lkLCBpbnQgbWF4X2dlbilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmMtMzAxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmM6MzAyOnZvaWQgbHJ1X2dlbl9kb19hZ2luZyhzdHJ1Y3QgbWVtY2dfc3RhdHMgKnN0YXRzLCBjb25zdCBjaGFyICptZW1jZylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xydV9nZW5fdXRpbC5jLTMwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ5OjQzLjMzMDE2NDU2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA4MjUzNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgUmVjbGFpbSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBtZW1vcnkgcmVjbGFpbSBmdW5jdGlvbnMsIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgaXNuJ3Qgc3RhdGljIGFuZCBjYWxscyBpbnRvIE1HTFJVIHJlY2xhaW0uIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIHNlZSB0aGF0IGBzaHJpbmtfbm9kZWAgKmlzKiBzdGF0aWMsIGJ1dCB0aGVuIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyAqbm90KiBzdGF0aWMuIEhtbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gUGVyaGFwcyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgaXMgYSBtb3JlIHJlbGV2YW50IHBvaW50IHRvIGZvY3VzIG9uLCBhcyBhIG5vbi1zdGF0aWMgc3ltYm9sIGlzIG9mdGVuIGEgbW9yZSBpbXBvcnRhbnQgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZC4gTGV0J3MgZGlnIGRlZXBlci4gSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLiBJJ2xsIGZpbmQgaXQgaW4gYG1tL3Ztc2Nhbi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTo0Ni45Mzg0MjExNDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDY2MDEyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTgzPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTg3LVxcdFxcdFxcdFxcdFxcdCAgIGludCAqc3dhcHBpbmVzcyk7XFxubW0vaW50ZXJuYWwuaDo4ODp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL2ludGVybmFsLmgtODktXFx0XFx0XFx0XFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjczPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMzEyLVxcdFxcdH1cXG5tbS9tZW1jb250cm9sLXYxLmM6MzEzOlxcdFxcdHRvdGFsICs9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUodmljdGltLCBnZnBfbWFzaywgZmFsc2UsXFxubW0vbWVtY29udHJvbC12MS5jLTMxNC1cXHRcXHRcXHRcXHRcXHRwZ2RhdCwgXFx1MDAyNm5yX3NjYW5uZWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9Njg0Nz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4OTItLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY4OTM6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODk0LVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6NDkuMTQ1MDI3MTk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTQ5MjA3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBNZW1vcnkgUmVjbGFpbTogQSBQcm9taXNpbmcgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiBtZW1vcnkgcmVjbGFpbSBpbiB0aGUga2VybmVsLCBhbmQgSSd2ZSBpZGVudGlmaWVkIGEgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgbWVtb3J5X21heF93cml0ZWAgYW5kIGBtZW1vcnlfaGlnaF93cml0ZWAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHF1aXRlIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGl0J3MgdGllZCB0byBtZW1vcnkgbGltaXRzIGJlaW5nIHJlYWNoZWQsIGVpdGhlciBtYXhpbXVtIG9yIGhpZ2ggdGhyZXNob2xkcywgc3VnZ2VzdHMgaXQncyBhIGdvb2Qgc3BvdCB0byBwcm9iZSB0aGUgcmVjbGFpbSBtZWNoYW5pc21zIHVuZGVyIHN0cmVzcy4gSXQgbWFrZXMgbG9naWNhbCBzZW5zZSB0byBzdGFydCBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiB3b3VsZCBiZSByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBmcmVlIG1lbW9yeSB3aGVuIHRoZSBzeXN0ZW0gaXMgdW5kZXIgcHJlc3N1cmUuIFRoZXJlZm9yZSwgSSBzaG91bGQgY2FyZWZ1bGx5IGFuYWx5emUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHRvIHVuZGVyc3RhbmQgaXRzIGludGVybmFsIHdvcmtpbmdzLiBJdCBhcHBlYXJzIHRvIGJlIGFuIGlkZWFsIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gaXRzIGNvbnRleHQuIFRoaXMgaXMgd2hlcmUgSSdsbCBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjEyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDk6NTIuOTU5OTUxNjQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyNTM3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD03Mj11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbi0tXFxubW0vaW50ZXJuYWwuaC04Mi1cXG5tbS9pbnRlcm5hbC5oOjgzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vaW50ZXJuYWwuaC04NC1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE3NzI9c3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4MTYtXFxubW0vbWVtY29udHJvbC12MS5jOjE4MTc6XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODE4LVxcdFxcdFxcdFxcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTgzNT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NTItXFxubW0vbWVtY29udHJvbC12MS5jOjE4NTM6XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODU0LVxcdFxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjM3Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWNsYWltX2hpZ2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzODgtXFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL21lbWNvbnRyb2wuYzoyMzg5OlxcdFxcdG5yX3JlY2xhaW1lZCArPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyxcXG5tbS9tZW1jb250cm9sLmMtMjM5MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI3MTItXFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL21lbWNvbnRyb2wuYzoyNzEzOlxcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODMwPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00ODcxLVxcbm1tL21lbWNvbnRyb2wuYzo0ODcyOlxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzIC0gaGlnaCxcXG5tbS9tZW1jb250cm9sLmMtNDg3My1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODg5PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5MzAtXFx0XFx0aWYgKG5yX3JlY2xhaW1zKSB7XFxubW0vbWVtY29udHJvbC5jOjQ5MzE6XFx0XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcXG5tbS9tZW1jb250cm9sLmMtNDkzMi1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4OTM9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5MzItXFxubW0vdm1zY2FuLmM6NjkzMzp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY5MzQtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NzMtI2Vsc2VcXG5tbS92bXNjYW4uYzo2OTc0OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjk3NS1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9ODAzNj1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MTA3LVxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XFxubW0vdm1zY2FuLmM6ODEwODpcXHRcXHRcXHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTgxMDktXFx0XFx0XFx0XFx0XFx0XFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTo1NS4xODI0OTQ5MDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzc0MzA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIENncm91cCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbmB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4uLiBub3cgKnRoYXQncyogYSBmdW5jdGlvbiBuYW1lIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCBjbGVhcmx5IHRhcmdldHMgbWVtb3J5IHByZXNzdXJlIHdpdGhpbiBhIGNncm91cC4gSSBsaWtlIHRoYXQuIEJ1dCB3aGF0IGVsc2UgaXMgaW4gcGxheSBoZXJlPyBBaCwgKnRoYXQncyogdGhlIGJlYXV0eSBvZiBjZ3JvdXAgdjIsIHRoZXJlIGlzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhhdCdzIGludm9rZWQgd2hlbiB3ZSB3cml0ZSB0byBgbWVtb3J5LnJlY2xhaW1gLCB3aGljaCBpcyB0aGUgdXNlciBpbnRlcmZhY2UgdG8gdHJpZ2dlciBtZW1vcnkgcmVjbGFtYXRpb24uXG5cbkkgbmVlZCB0byBkaXZlIGludG8gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCB3b3JrcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc2ODcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0OTo1OC40MTAyNDA4NTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDQzNjIyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTcwMz1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XFxubW0vaW50ZXJuYWwuaDo3MDQ6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL2ludGVybmFsLmgtNzA1LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA2NT1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDcwLVxcbm1tL21lbWNvbnRyb2wuYzo1MDcxOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XFxubW0vbWVtY29udHJvbC5jLTUwNzItXFx0aWYgKHJldClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMzA9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtODAzNS1cXG5tbS92bXNjYW4uYzo4MDM2OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy04MDM3LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgxODk9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MTk0LVxcbm1tL3Ztc2Nhbi5jOjgxOTU6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgxOTYtXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MDowMC44MTQ2MDg4ODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxNTU3MjEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeHBsb3JpbmcgTUdMUlUgVXNhYmlsaXR5KipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNpbmcgb3VyIGVmZm9ydHMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIC0gYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IHdpdGhpbiBNR0xSVSB0aGF0IGNvdWxkIGJlIGludm9rZWQgZnJvbSB1c2Vyc3BhY2U/IExldCdzIGRpZyBkZWVwZXIuIFRoZSBgcnVuX2NtZGAgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCBpcyBjYWxsZWQgZnJvbSBkZWJ1Z2ZzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGltZSB0byBkZWx2ZSBpbnRvIGBydW5fY21kYCBhbmQgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMyNCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjA0LjMzMDE4OTAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQzNzQ3NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ1bl9jbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NDU0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyPTY4PXVzYWdlKCkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlci03NS1cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyOjc2OnJ1bl9jbWQoKSB7XFxuYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlci03Ny0gICAgaWYgWyBcXFwiJFZcXFwiID0gMSBdOyB0aGVuXFxuLS1cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyPTUzMD1wczMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyLTU1NC1cXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyOjU1NTogICAgcnVuX2NtZCBkZCBpZj1cXFwiJG9maWxlLmJpblxcXCIgb2Y9XFxcIiRvZmlsZS5iaW5cXFwiIGNvbnY9bm90cnVuYyAgIFxcXFxcXG5hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyLTU1Ni0gICAgICAgIHNraXA9JG92ZXJsYXlfZGVzdCBzZWVrPSRzeXN0ZW1fcmVzZXRfa2VybmVsICAgICAgICAgIFxcXFxcXG4tLVxcbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNTU4LVxcbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXI6NTU5OiAgICBydW5fY21kIGRkIGlmPVxcXCIkb2ZpbGUuYmluXFxcIiBvZj1cXFwiJG9maWxlLmJpblxcXCIgY29udj1ub3RydW5jICAgXFxcXFxcbmFyY2gvcG93ZXJwYy9ib290L3dyYXBwZXItNTYwLSAgICAgICAgc2tpcD0kc3lzdGVtX3Jlc2V0X292ZXJsYXkgc2Vlaz0kb3ZlcmxheV9kZXN0ICAgICAgICAgXFxcXFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYuYz00MzQ9aW50IGNjcF9jbWRfcXVldWVfdGhyZWFkKHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5jLTQ1NS1cXHRcXHQvKiBFeGVjdXRlIHRoZSBjb21tYW5kICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYuYzo0NTY6XFx0XFx0Y21kLVxcdTAwM2VyZXQgPSBjY3BfcnVuX2NtZChjbWRfcSwgY21kKTtcXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi5jLTQ1Ny1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2Lmg9NjM5PWludCBjY3BfdHJuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB2b2lkICpkYXRhLCBzaXplX3QgbWF4LCBib29sIHdhaXQpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LmgtNjQwLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2Lmg6NjQxOmludCBjY3BfcnVuX2NtZChzdHJ1Y3QgY2NwX2NtZF9xdWV1ZSAqY21kX3EsIHN0cnVjdCBjY3BfY21kICpjbWQpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LmgtNjQyLVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1vcHMuYz0yNDUwPWNjcF9ydW5fZWNjX2NtZChzdHJ1Y3QgY2NwX2NtZF9xdWV1ZSAqY21kX3EsIHN0cnVjdCBjY3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLW9wcy5jLTI0NzUtXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1vcHMuYzoyNDc2OmludCBjY3BfcnVuX2NtZChzdHJ1Y3QgY2NwX2NtZF9xdWV1ZSAqY21kX3EsIHN0cnVjdCBjY3BfY21kICpjbWQpXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1vcHMuYy0yNDc3LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYz0yMjc9c3RydWN0IGcyZF9ydW5xdWV1ZV9ub2RlIHtcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMjI4LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoyMjk6XFx0c3RydWN0IGxpc3RfaGVhZFxcdHJ1bl9jbWRsaXN0O1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0yMzAtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGV2ZW50X2xpc3Q7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM9ODAwPXN0YXRpYyB2b2lkIGcyZF9kbWFfc3RhcnQoc3RydWN0IGcyZF9kYXRhICpnMmQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODAzLVxcdHN0cnVjdCBnMmRfY21kbGlzdF9ub2RlICpub2RlID1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6ODA0OlxcdFxcdFxcdFxcdGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnJ1bnF1ZXVlX25vZGUtXFx1MDAzZXJ1bl9jbWRsaXN0LFxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MDUtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGcyZF9jbWRsaXN0X25vZGUsIGxpc3QpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jPTgyNT1zdGF0aWMgdm9pZCBnMmRfZnJlZV9ydW5xdWV1ZV9ub2RlKHN0cnVjdCBnMmRfZGF0YSAqZzJkLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTgzMS1cXHQvKlxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzo4MzI6XFx0ICogY29tbWFuZHMgaW4gcnVuX2NtZGxpc3QgaGF2ZSBiZWVuIGNvbXBsZXRlZCBzbyB1bm1hcCBhbGwgZ2VtXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTgzMy1cXHQgKiBvYmplY3RzIGluIGVhY2ggY29tbWFuZCBub2RlIHNvIHRoYXQgdGhleSBhcmUgdW5yZWZlcmVuY2VkLlxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy04MzQtXFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjgzNTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFxcdTAwMjZydW5xdWV1ZV9ub2RlLVxcdTAwM2VydW5fY21kbGlzdCwgbGlzdClcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODM2LVxcdFxcdGcyZF91bm1hcF9jbWRsaXN0X2dlbShnMmQsIG5vZGUsIHJ1bnF1ZXVlX25vZGUtXFx1MDAzZWZpbHApO1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzo4Mzc6XFx0bGlzdF9zcGxpY2VfdGFpbF9pbml0KFxcdTAwMjZydW5xdWV1ZV9ub2RlLVxcdTAwM2VydW5fY21kbGlzdCwgXFx1MDAyNmcyZC1cXHUwMDNlZnJlZV9jbWRsaXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtODM4LVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZzJkLVxcdTAwM2VjbWRsaXN0X211dGV4KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYz0xMjk5PWludCBleHlub3NfZzJkX2V4ZWNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsIHZvaWQgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMwNi1cXHRzdHJ1Y3QgZzJkX3J1bnF1ZXVlX25vZGUgKnJ1bnF1ZXVlX25vZGU7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jOjEzMDc6XFx0c3RydWN0IGxpc3RfaGVhZCAqcnVuX2NtZGxpc3Q7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMDgtXFx0c3RydWN0IGxpc3RfaGVhZCAqZXZlbnRfbGlzdDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzEzLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzE0OlxcdHJ1bl9jbWRsaXN0ID0gXFx1MDAyNnJ1bnF1ZXVlX25vZGUtXFx1MDAzZXJ1bl9jbWRsaXN0O1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzE1LVxcdGV2ZW50X2xpc3QgPSBcXHUwMDI2cnVucXVldWVfbm9kZS1cXHUwMDNlZXZlbnRfbGlzdDtcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6MTMxNjpcXHRJTklUX0xJU1RfSEVBRChydW5fY21kbGlzdCk7XFxuZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2cyZC5jLTEzMTctXFx0SU5JVF9MSVNUX0hFQUQoZXZlbnRfbGlzdCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMyMC1cXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmM6MTMyMTpcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZmaWxlX3ByaXYtXFx1MDAzZWludXNlX2NtZGxpc3QsIHJ1bl9jbWRsaXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZzJkLmMtMTMyMi1cXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZmaWxlX3ByaXYtXFx1MDAzZWV2ZW50X2xpc3QsIGV2ZW50X2xpc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzIzLVxcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYzoxMzI0OlxcdGlmIChsaXN0X2VtcHR5KHJ1bl9jbWRsaXN0KSkge1xcbmRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9nMmQuYy0xMzI1LVxcdFxcdGRldl9lcnIoZzJkLVxcdTAwM2VkZXYsIFxcXCJ0aGVyZSBpcyBubyBpbnVzZSBjbWRsaXN0XFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jPTkzOT1pbnQgY29kYV9jaGVja19maXJtd2FyZShzdHJ1Y3QgY29kYV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jLTk2MC1cXHRcXHRyZXQgPSAtRUlPO1xcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jOjk2MTpcXHRcXHRnb3RvIGVycl9ydW5fY21kO1xcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jLTk2Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NoaXBzLW1lZGlhL2NvZGEvY29kYS1iaXQuYy0xMDAxLVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY2hpcHMtbWVkaWEvY29kYS9jb2RhLWJpdC5jOjEwMDI6ZXJyX3J1bl9jbWQ6XFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jaGlwcy1tZWRpYS9jb2RhL2NvZGEtYml0LmMtMTAwMy1cXHRjbGtfZGlzYWJsZV91bnByZXBhcmUoZGV2LVxcdTAwM2VjbGtfYWhiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xNzM9c3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xNzktXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjE4MDpzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xODEtXFx0XFx0XFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTIzNz1zdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNDMtXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjI0NDpcXHRyZXQgPSBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VjbWRfcmVhZCwgY21kX2RhdGEpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0yNTc9c3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI2My1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MjY0OlxcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMjY1LX1cXG4tLVxcbmtlcm5lbC9yZWJvb3QuYz04NDA9c3RhdGljIGNvbnN0IGNoYXIgcmVib290X2NtZFtdID0gXFxcIi9zYmluL3JlYm9vdFxcXCI7XFxua2VybmVsL3JlYm9vdC5jLTg0MS1cXG5rZXJuZWwvcmVib290LmM6ODQyOnN0YXRpYyBpbnQgcnVuX2NtZChjb25zdCBjaGFyICpjbWQpXFxua2VybmVsL3JlYm9vdC5jLTg0My17XFxuLS1cXG5rZXJuZWwvcmVib290LmM9ODYyPXN0YXRpYyBpbnQgX19vcmRlcmx5X3JlYm9vdCh2b2lkKVxcbi0tXFxua2VybmVsL3JlYm9vdC5jLTg2NS1cXG5rZXJuZWwvcmVib290LmM6ODY2OlxcdHJldCA9IHJ1bl9jbWQocmVib290X2NtZCk7XFxua2VybmVsL3JlYm9vdC5jLTg2Ny1cXG4tLVxcbmtlcm5lbC9yZWJvb3QuYz04Nzc9c3RhdGljIGludCBfX29yZGVybHlfcG93ZXJvZmYoYm9vbCBmb3JjZSlcXG4tLVxcbmtlcm5lbC9yZWJvb3QuYy04ODAtXFxua2VybmVsL3JlYm9vdC5jOjg4MTpcXHRyZXQgPSBydW5fY21kKHBvd2Vyb2ZmX2NtZCk7XFxua2VybmVsL3JlYm9vdC5jLTg4Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3NTc9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy01Nzg2LVxcbm1tL3Ztc2Nhbi5jOjU3ODc6c3RhdGljIGludCBydW5fY21kKGNoYXIgY21kLCB1NjQgbWVtY2dfaWQsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTU3ODgtXFx0XFx0ICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG9wdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4Mjk9c3RhdGljIHNzaXplX3QgbHJ1X2dlbl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsXFxuLS1cXG5tbS92bXNjYW4uYy01ODk3LVxcbm1tL3Ztc2Nhbi5jOjU4OTg6XFx0XFx0ZXJyID0gcnVuX2NtZChjbWQsIG1lbWNnX2lkLCBuaWQsIHNlcSwgXFx1MDAyNnNjLCBzd2FwcGluZXNzLCBvcHQpO1xcbm1tL3Ztc2Nhbi5jLTU4OTktXFx0XFx0aWYgKGVycilcXG4tLVxcbnNjcmlwdHMvY29jY2ljaGVjaz0xMzU9ZmlcXG5zY3JpcHRzL2NvY2NpY2hlY2stMTM2LVxcbnNjcmlwdHMvY29jY2ljaGVjazoxMzc6cnVuX2NtZF9wYXJtYXAoKSB7XFxuc2NyaXB0cy9jb2NjaWNoZWNrLTEzOC1cXHRpZiBbICRWRVJCT1NFIC1uZSAwIF0gOyB0aGVuXFxuLS1cXG5zY3JpcHRzL2NvY2NpY2hlY2stMTU1LVxcbnNjcmlwdHMvY29jY2ljaGVjazoxNTY6cnVuX2NtZF9vbGQoKSB7XFxuc2NyaXB0cy9jb2NjaWNoZWNrLTE1Ny1cXHRsb2NhbCBpXFxuLS1cXG5zY3JpcHRzL2NvY2NpY2hlY2stMTcwLVxcbnNjcmlwdHMvY29jY2ljaGVjazoxNzE6cnVuX2NtZCgpIHtcXG5zY3JpcHRzL2NvY2NpY2hlY2stMTcyLVxcdGlmIFsgXFxcIiRVU0VfSk9CU1xcXCIgPSBcXFwieWVzXFxcIiBdOyB0aGVuXFxuc2NyaXB0cy9jb2NjaWNoZWNrOjE3MzpcXHRcXHRydW5fY21kX3Bhcm1hcCAkQFxcbnNjcmlwdHMvY29jY2ljaGVjay0xNzQtXFx0ZWxzZVxcbnNjcmlwdHMvY29jY2ljaGVjazoxNzU6XFx0XFx0cnVuX2NtZF9vbGQgJEBcXG5zY3JpcHRzL2NvY2NpY2hlY2stMTc2LVxcdGZpXFxuLS1cXG5zY3JpcHRzL2NvY2NpY2hlY2s9MTkxPWNvY2NpbmVsbGUgKCkge1xcbi0tXFxuc2NyaXB0cy9jb2NjaWNoZWNrLTI0Mi0gICAgaWYgWyBcXFwiJE1PREVcXFwiID0gXFxcImNoYWluXFxcIiBdIDsgdGhlblxcbnNjcmlwdHMvY29jY2ljaGVjazoyNDM6XFx0cnVuX2NtZCAkU1BBVENIIC1EIHBhdGNoICAgXFxcXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNDQtXFx0XFx0JEZMQUdTIC0tY29jY2ktZmlsZSAkQ09DQ0kgJE9QVCAkT1BUSU9OUyAgICAgICAgICAgICAgIHx8IFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjQ1OlxcdHJ1bl9jbWQgJFNQQVRDSCAtRCByZXBvcnQgIFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjQ2LVxcdFxcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgLS1uby1zaG93LWRpZmYgfHwgXFxcXFxcbnNjcmlwdHMvY29jY2ljaGVjazoyNDc6XFx0cnVuX2NtZCAkU1BBVENIIC1EIGNvbnRleHQgXFxcXFxcbnNjcmlwdHMvY29jY2ljaGVjay0yNDgtXFx0XFx0JEZMQUdTIC0tY29jY2ktZmlsZSAkQ09DQ0kgJE9QVCAkT1BUSU9OUyAgICAgICAgICAgICAgIHx8IFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjQ5OlxcdHJ1bl9jbWQgJFNQQVRDSCAtRCBvcmcgICAgIFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjUwLVxcdFxcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgLS1uby1zaG93LWRpZmYgfHwgZXhpdCAxXFxuc2NyaXB0cy9jb2NjaWNoZWNrLTI1MS0gICAgZWxpZiBbIFxcXCIkTU9ERVxcXCIgPSBcXFwicmVwK2N0eHRcXFwiIF0gOyB0aGVuXFxuc2NyaXB0cy9jb2NjaWNoZWNrOjI1MjpcXHRydW5fY21kICRTUEFUQ0ggLUQgcmVwb3J0ICBcXFxcXFxuc2NyaXB0cy9jb2NjaWNoZWNrLTI1My1cXHRcXHQkRkxBR1MgLS1jb2NjaS1maWxlICRDT0NDSSAkT1BUICRPUFRJT05TIC0tbm8tc2hvdy1kaWZmIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2s6MjU0OlxcdHJ1bl9jbWQgJFNQQVRDSCAtRCBjb250ZXh0IFxcXFxcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjU1LVxcdFxcdCRGTEFHUyAtLWNvY2NpLWZpbGUgJENPQ0NJICRPUFQgJE9QVElPTlMgfHwgZXhpdCAxXFxuc2NyaXB0cy9jb2NjaWNoZWNrLTI1Ni0gICAgZWxzZVxcbnNjcmlwdHMvY29jY2ljaGVjazoyNTc6XFx0cnVuX2NtZCAkU1BBVENIIC1EICRNT0RFICAgJEZMQUdTIC0tY29jY2ktZmlsZSAkQ09DQ0kgJE9QVCAkT1BUSU9OUyB8fCBleGl0IDFcXG5zY3JpcHRzL2NvY2NpY2hlY2stMjU4LSAgICBmaVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0zOT1maVxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtNDAtXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDo0MTpydW5fY21kKCkgeyAjIGNvbW1hbmRcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTQyLVxcdGVjaG8gXFxcIiQqXFxcIlxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD03Nz1zZXRfdmFsdWVfb2YoKSB7ICMga2V5IGZpbGVcXG4tLVxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtNzktXFx0XFx0dmFsPWB4YmNfZ2V0X3ZhbCAkMSAxYFxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6ODA6XFx0XFx0cnVuX2NtZCBcXFwiZWNobyAnJHZhbCcgXFx1MDAzZVxcdTAwM2UgJDJcXFwiXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC04MS1cXHRmaVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD04ND1zZXRfYXJyYXlfb2YoKSB7ICMga2V5IGZpbGVcXG4tLVxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtODYtXFx0XFx0eGJjX2dldF92YWwgJDEgfCB3aGlsZSByZWFkIGxpbmU7IGRvXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDo4NzpcXHRcXHRcXHRydW5fY21kIFxcXCJlY2hvICckbGluZScgXFx1MDAzZVxcdTAwM2UgJDJcXFwiXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC04OC1cXHRcXHRkb25lXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTE3MD1zZXR1cF9vbmVfaGlzdG9ncmFtKCkgeyAjIHByZWZpeCB0cmlnZ2VyLWZpbGVcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjE3MTpcXHRydW5fY21kIFxcXCJlY2hvICdgcHJpbnRfb25lX2hpc3RvZ3JhbSAkezF9YCcgXFx1MDAzZVxcdTAwM2UgJHsyfVxcXCJcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTE3Mi19XFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTE4Mz1zZXR1cF9ldmVudCgpIHsgIyBwcmVmaXggZ3JvdXAgZXZlbnQgW2luc3RhbmNlXVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0xOTEtXFx0aWYgWyBcXFwiJDNcXFwiID0gXFxcImVuYWJsZVxcXCIgXTsgdGhlblxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MTkyOlxcdFxcdHJ1bl9jbWQgXFxcImVjaG8gMSBcXHUwMDNlICR7ZXZlbnRkaXJ9XFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMTkzLVxcdFxcdHJldHVyblxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0xOTgtXFx0XFx0eGJjX2dldF92YWwgJHticmFuY2h9LnByb2JlcyB8IHdoaWxlIHJlYWQgbGluZTsgZG9cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjE5OTpcXHRcXHRcXHRydW5fY21kIFxcXCJlY2hvICdwOmtwcm9iZXMvJDMgJGxpbmUnIFxcdTAwM2VcXHUwMDNlICRUUkFDRUZTL2twcm9iZV9ldmVudHNcXFwiXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0yMDAtXFx0XFx0ZG9uZVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaC0yMDItXFx0c3ludGhldGljKVxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjAzOlxcdFxcdHJ1bl9jbWQgXFxcImVjaG8gJ2Bjb21wb3NlX3N5bnRoICQzICR7YnJhbmNofS5maWVsZHNgJyBcXHUwMDNlXFx1MDAzZSAkVFJBQ0VGUy9zeW50aGV0aWNfZXZlbnRzXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjA0LVxcdFxcdDs7XFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTIxMi1cXHRpZiB4YmNfaGFzX2tleSAke2JyYW5jaH0uZW5hYmxlOyB0aGVuXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyMTM6XFx0XFx0cnVuX2NtZCBcXFwiZWNobyAxIFxcdTAwM2UgJHtldmVudGRpcn0vZW5hYmxlXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjE0LVxcdGZpXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTIxNz1zZXR1cF9ldmVudHMoKSB7ICMgcHJlZml4KFxcXCJmdHJhY2VcXFwiIG9yIFxcXCJmdHJhY2UuaW5zdGFuY2UuSU5TVEFOQ0VcXFwiKSBbaW5zdGFuY2VdXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTIyNS1cXHRcXHRpZiBbIFxcXCIkMlxcXCIgXTsgdGhlblxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjI2OlxcdFxcdFxcdHJ1bl9jbWQgXFxcImVjaG8gMSBcXHUwMDNlICRUUkFDRUZTL2luc3RhbmNlcy8kMi9ldmVudHMvZW5hYmxlXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjI3LVxcdFxcdGVsc2VcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoOjIyODpcXHRcXHRcXHRydW5fY21kIFxcXCJlY2hvIDEgXFx1MDAzZSAkVFJBQ0VGUy9ldmVudHMvZW5hYmxlXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjI5LVxcdFxcdGZpXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoPTI0ND1zZXR1cF9pbnN0YW5jZSgpIHsgIyBbaW5zdGFuY2VdXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI2My1cXHRpZiB4YmNfaGFzX2tleSAke2luc3RhbmNlfS5hbGxvY19zbmFwc2hvdDsgdGhlblxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2g6MjY0OlxcdFxcdHJ1bl9jbWQgXFxcImVjaG8gMSBcXHUwMDNlICR7aW5zdGFuY2VkaXJ9L3NuYXBzaG90XFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjY1LVxcdGZpXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI2OS1cXHRcXHRzaXplPWBldmFsIHNpemUya2IgJHNpemVgXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyNzA6XFx0XFx0cnVuX2NtZCBcXFwiZWNobyAkc2l6ZSBcXHUwMDNlXFx1MDAzZSAke2luc3RhbmNlZGlyfS9idWZmZXJfc2l6ZV9rYlxcXCJcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI3MS1cXHRmaVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0yNzg9aWYgeGJjX2hhc19rZXkgXFxcImtlcm5lbC5kdW1wX29uX29vcHNcXFwiOyB0aGVuXFxuLS1cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI4MC1cXHRbIFxcXCIkZHVtcF9tb2RlXFxcIiBdIFxcdTAwMjZcXHUwMDI2IGR1bXBfbW9kZT1gZXZhbCBlY2hvICRkdW1wX21vZGVgIHx8IGR1bXBfbW9kZT0xXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyODE6XFx0cnVuX2NtZCBcXFwiZWNobyBcXFxcXFxcIiRkdW1wX21vZGVcXFxcXFxcIiBcXHUwMDNlIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2R1bXBfb25fb29wc1xcXCJcXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI4Mi1maVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaD0yOTU9aWYgeGJjX2hhc19icmFuY2ggXFxcImZ0cmFjZS5pbnN0YW5jZVxcXCI7IHRoZW5cXG50b29scy9ib290Y29uZmlnL3NjcmlwdHMvYmNvbmYyZnRyYWNlLnNoLTI5Ni1cXHRmb3IgaSBpbiBgeGJjX3N1YmtleXMgXFxcImZ0cmFjZS5pbnN0YW5jZVxcXCIgMWA7IGRvXFxudG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzL2Jjb25mMmZ0cmFjZS5zaDoyOTc6XFx0XFx0cnVuX2NtZCBcXFwibWtkaXIgLXAgJFRSQUNFRlMvaW5zdGFuY2VzLyRpXFxcIlxcbnRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy9iY29uZjJmdHJhY2Uuc2gtMjk4LVxcdFxcdHNldHVwX2luc3RhbmNlICRpXFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5PTE0Nz1jbGFzcyBUZXN0KG9iamVjdCk6XFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5LTI4MS1cXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5OjI4MjogICAgZGVmIHJ1bl9jbWQoc2VsZiwgdGVtcGRpcik6XFxudG9vbHMvcGVyZi90ZXN0cy9zaGVsbC9saWIvYXR0ci5weS0yODMtICAgICAgICBqdW5rMSwganVuazIsIGp1bmszLCBqdW5rNCwgbXlhcmNoID0gKG9zLnVuYW1lKCkpXFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5LTM3OC0gICAgICAgICAgICAjIHJ1biB0aGUgdGVzdCBzY3JpcHRcXG50b29scy9wZXJmL3Rlc3RzL3NoZWxsL2xpYi9hdHRyLnB5OjM3OTogICAgICAgICAgICBzZWxmLnJ1bl9jbWQodGVtcGRpcik7XFxudG9vbHMvcGVyZi90ZXN0cy9zaGVsbC9saWIvYXR0ci5weS0zODAtXFxuLS1cXG50b29scy90ZXN0aW5nL2t1bml0L3J1bl9jaGVja3MucHk9MzY9ZGVmIG1haW4oYXJndjogU2VxdWVuY2Vbc3RyXSkgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weS00NS1cXHRcXHRcXHRjb250aW51ZVxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weTo0NjpcXHRcXHRmID0gZXhlY3V0b3Iuc3VibWl0KHJ1bl9jbWQsIGFyZ3YpXFxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5LTQ3LVxcdFxcdGZ1dHVyZV90b19uYW1lW2ZdID0gbmFtZVxcbi0tXFxudG9vbHMvdGVzdGluZy9rdW5pdC9ydW5fY2hlY2tzLnB5LTc1LVxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weTo3NjpkZWYgcnVuX2NtZChhcmd2OiBTZXF1ZW5jZVtzdHJdKSAtXFx1MDAzZSBOb25lOlxcbnRvb2xzL3Rlc3Rpbmcva3VuaXQvcnVuX2NoZWNrcy5weS03Ny1cXHRzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmd2LCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIGN3ZD1BQlNfVE9PTF9QQVRILCB0aW1lb3V0PVRJTUVPVVQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jPTI1PXN0cnVjdCB2ZXJpdHlfaW5mbyB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTM2LS8qIFJ1biBhIGNvbW1hbmQgYW5kIG9wdGlvbmFsbHkgY2FwdHVyZSB0aGUgZmlyc3QgbGluZSBvZiBzdGRvdXQuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzozNzpzdGF0aWMgaW50IHJ1bl9jbWQoY29uc3QgY2hhciAqY21kLCBjaGFyICpvdXQsIHNpemVfdCBvdXRfc3opXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0zOC17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jPTU3PXN0YXRpYyBib29sIGhhc19wcmVyZXF1aXNpdGVzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTYzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NjQ6XFx0aWYgKHJ1bl9jbWQoXFxcIm1vZHByb2JlIGxvb3AgMlxcdTAwM2UvZGV2L251bGxcXFwiLCBOVUxMLCAwKSBcXHUwMDI2XFx1MDAyNlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NjU6XFx0ICAgIHJ1bl9jbWQoXFxcImxzIC9kZXYvbG9vcC1jb250cm9sIDJcXHUwMDNlL2Rldi9udWxsXFxcIiwgTlVMTCwgMCkpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTY2LVxcdFxcdHByaW50ZihcXFwiU0tJUDogbm8gbG9vcCBkZXZpY2Ugc3VwcG9ydFxcXFxuXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTY5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6NzA6XFx0aWYgKHJ1bl9jbWQoXFxcIm1vZHByb2JlIGRtLXZlcml0eSAyXFx1MDAzZS9kZXYvbnVsbFxcXCIsIE5VTEwsIDApIFxcdTAwMjZcXHUwMDI2XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzo3MTpcXHQgICAgcnVuX2NtZChcXFwiZG1zZXR1cCB0YXJnZXRzIDJcXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcSB2ZXJpdHlcXFwiLCBOVUxMLCAwKSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtNzItXFx0XFx0cHJpbnRmKFxcXCJTS0lQOiBkbS12ZXJpdHkgbW9kdWxlIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy03NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jOjc2OlxcdGlmIChydW5fY21kKFxcXCJ3aGljaCB2ZXJpdHlzZXR1cCBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXFwiLCBOVUxMLCAwKSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtNzctXFx0XFx0cHJpbnRmKFxcXCJTS0lQOiB2ZXJpdHlzZXR1cCBub3QgZm91bmRcXFxcblxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYz04ND12b2lkIHRlc3RfbHNtX2JkZXYodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTA1LVxcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFxcXCJkbXNldHVwIHJlbW92ZSAlcyAyXFx1MDAzZS9kZXYvbnVsbFxcXCIsIERNX05BTUUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTA2OlxcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTEwNy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTMyLVxcdFxcdCBcXFwibG9zZXR1cCAtLWZpbmQgLS1zaG93ICVzIDJcXHUwMDNlL2Rldi9udWxsXFxcIiwgZGF0YV9pbWcpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTMzOlxcdGlmICghQVNTRVJUX09LKHJ1bl9jbWQoY21kLCBkYXRhX2xvb3AsIHNpemVvZihkYXRhX2xvb3ApKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTEzNC1cXHRcXHQgICAgICAgXFxcImxvc2V0dXAgZGF0YVxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xMzgtXFx0XFx0IFxcXCJsb3NldHVwIC0tZmluZCAtLXNob3cgJXMgMlxcdTAwM2UvZGV2L251bGxcXFwiLCBoYXNoX2ltZyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoxMzk6XFx0aWYgKCFBU1NFUlRfT0socnVuX2NtZChjbWQsIGhhc2hfbG9vcCwgc2l6ZW9mKGhhc2hfbG9vcCkpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTQwLVxcdFxcdCAgICAgICBcXFwibG9zZXR1cCBoYXNoXFxcIikpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTE0Ny1cXHRcXHQgZGF0YV9sb29wLCBoYXNoX2xvb3ApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTQ4OlxcdGlmICghQVNTRVJUX09LKHJ1bl9jbWQoY21kLCByb290aGFzaCwgc2l6ZW9mKHJvb3RoYXNoKSksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xNDktXFx0XFx0ICAgICAgIFxcXCJ2ZXJpdHlzZXR1cCBmb3JtYXRcXFwiKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMTY3LVxcdFxcdCBkYXRhX2xvb3AsIERNX05BTUUsIGhhc2hfbG9vcCwgcm9vdGhhc2gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MTY4OlxcdGlmICghQVNTRVJUX09LKHJ1bl9jbWQoY21kLCBOVUxMLCAwKSwgXFxcInZlcml0eXNldHVwIG9wZW5cXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTE2OS1cXHRcXHRnb3RvIHRlYXJkb3duO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0xOTgtXFx0c25wcmludGYoY21kLCBzaXplb2YoY21kKSwgXFxcImRtc2V0dXAgcmVtb3ZlICVzIDJcXHUwMDNlL2Rldi9udWxsXFxcIiwgRE1fTkFNRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoxOTk6XFx0cnVuX2NtZChjbWQsIE5VTEwsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjAwLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYy0yMDQtXFx0XFx0XFx0IGRhdGFfbG9vcCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbHNtX2JkZXYuYzoyMDU6XFx0XFx0cnVuX2NtZChjbWQsIE5VTEwsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA2LVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmMtMjA5LVxcdFxcdFxcdCBoYXNoX2xvb3ApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xzbV9iZGV2LmM6MjEwOlxcdFxcdHJ1bl9jbWQoY21kLCBOVUxMLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sc21fYmRldi5jLTIxMS1cXHR9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weT05Nz1jbGFzcyBSZWNvcmRWYWx1ZVBpY2tlcjpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTEyMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weToxMjE6ZGVmIHJ1bl9jbWQoY21kLCBqc29uPUZhbHNlKTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0xMjItICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5PTEyOD1kZWYgcnVuX2pzb25fY21kKGNtZCk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk6MTI5OiAgICByZXR1cm4gcnVuX2NtZChjbWQsIGpzb249VHJ1ZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0xMzAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weT0xNzI9Y2xhc3MgUG9vbChDb21tb25JdGVtKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTE3NS0gICAgZGVmIGRsX3NldChzZWxmLCBkbG5hbWUsIHNpemUsIHRodHlwZSk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk6MTc2OiAgICAgICAgcnVuX2NtZChcXFwiZGV2bGluayBzYiBwb29sIHNldCB7fSBzYiB7fSBwb29sIHt9IHNpemUge30gdGh0eXBlIHt9XFxcIi5mb3JtYXQoZGxuYW1lLCBzZWxmW1xcXCJzYlxcXCJdLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTE3Ny0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbXFxcInBvb2xcXFwiXSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5PTIzMD1jbGFzcyBUY0JpbmQoQ29tbW9uSXRlbSk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9tbHhzdy9zaGFyZWRidWZmZXJfY29uZmlndXJhdGlvbi5weS0yMzctICAgIGRlZiBkbF9zZXQoc2VsZiwgcG9vbCwgdGgpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5OjIzODogICAgICAgIHJ1bl9jbWQoXFxcImRldmxpbmsgc2IgdGMgYmluZCBzZXQge30gc2Ige30gdGMge30gdHlwZSB7fSBwb29sIHt9IHRoIHt9XFxcIi5mb3JtYXQoc2VsZltcXFwiZGxwb3J0bmFtZVxcXCJdLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTIzOS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZltcXFwic2JcXFwiXSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5PTMwND1jbGFzcyBQb3J0UG9vbChDb21tb25JdGVtKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L21seHN3L3NoYXJlZGJ1ZmZlcl9jb25maWd1cmF0aW9uLnB5LTMxMS0gICAgZGVmIGRsX3NldChzZWxmLCB0aCk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHk6MzEyOiAgICAgICAgcnVuX2NtZChcXFwiZGV2bGluayBzYiBwb3J0IHBvb2wgc2V0IHt9IHNiIHt9IHBvb2wge30gdGgge31cXFwiLmZvcm1hdChzZWxmW1xcXCJkbHBvcnRuYW1lXFxcIl0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbWx4c3cvc2hhcmVkYnVmZmVyX2NvbmZpZ3VyYXRpb24ucHktMzEzLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmW1xcXCJzYlxcXCJdLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9MTk1PXNldF9waW5nX2dyb3VwKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIwMy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMDQ6ZG9fcnVuX2NtZCgpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjA1LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIyMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMjI6cnVuX2NtZCgpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjIzLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMjQ6XFx0ZG9fcnVuX2NtZCAke05TQV9DTUR9ICQqXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjI1LX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjI3OnJ1bl9jbWRfbnNiKClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMjgte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjIyOTpcXHRkb19ydW5fY21kICR7TlNCX0NNRH0gJCpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yMzAtfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIzMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyMzI6cnVuX2NtZF9uc2MoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIzMy17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6MjM0OlxcdGRvX3J1bl9jbWQgJHtOU0NfQ01EfSAkKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTIzNS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaD0yMzc9c2V0dXBfY21kKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTI0MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyNDI6XFx0cnVuX2NtZCAke2NtZH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yNDMtXFx0cmM9JD9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTI1OT1zZXR1cF9jbWRfbnNiKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTI2My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDoyNjQ6XFx0cnVuX2NtZF9uc2IgJHtjbWR9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMjY1LVxcdHJjPSQ/XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaD0yODE9c2V0dXBfY21kX25zYygpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0yODUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6Mjg2OlxcdHJ1bl9jbWRfbnNjICR7Y21kfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTI4Ny1cXHRyYz0kP1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9MzA0PXNldF9zeXNjdGwoKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtMzA3LVxcdGVjaG9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDozMDg6XFx0cnVuX2NtZCBzeXNjdGwgLXEgLXcgJCpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC0zMDktfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g9NTg0PWlwdjRfcGluZ19ub3ZyZigpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC01OTMtXFx0XFx0bG9nX3N0YXJ0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NTk0OlxcdFxcdHJ1bl9jbWQgcGluZyAtYzEgLXcxICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC01OTUtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0XFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNTk3LVxcdFxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjU5ODpcXHRcXHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC01OTktXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0LCBkZXZpY2UgYmluZFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYwMS1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2MDI6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfTE9fSVB9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02MDMtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0LCBhZGRyZXNzIGJpbmRcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02MTAtXFx0bG9nX3N0YXJ0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjExOlxcdHJ1bl9jbWQgcGluZyAtYyAxIC13IDEgLXIgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYxMi1cXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcXFwicGluZyBvdXQgKGRvbid0IHJvdXRlKSwgcGVlciBvbiBsaW5rXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjE2LVxcdHNob3dfaGludCBcXFwiRmFpbHMgc2luY2UgcGVlciBpcyBub3Qgb24gbGlua1xcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2MTc6XFx0cnVuX2NtZCBwaW5nIC1jIDEgLXcgMSAtciAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjE4LVxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAxIFxcXCJwaW5nIG91dCAoZG9uJ3Qgcm91dGUpLCBwZWVyIG5vdCBvbiBsaW5rXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjI1LVxcdFxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjYyNjpcXHRcXHRydW5fY21kX25zYiBwaW5nIC1jMSAtdzEgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYyNy1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcXFwicGluZyBpblxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYzNS1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2MzY6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTYzNy1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcXFwicGluZyBsb2NhbFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY0NS1cXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2NDY6XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjQ3LVxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFxcXCJwaW5nIGxvY2FsLCBkZXZpY2UgYmluZFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY1NS1cXHRcXHRzaG93X2hpbnQgXFxcIkZhaWxzIHNpbmNlIGFkZHJlc3Mgb24gbG9vcGJhY2sgZGV2aWNlIGlzIG91dCBvZiBkZXZpY2Ugc2NvcGVcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NjU2OlxcdFxcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY1Ny1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMSBcXFwicGluZyBsb2NhbCwgZGV2aWNlIGJpbmRcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02NjktXFx0YT0ke05TQl9MT19JUH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2NzA6XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY3MS1cXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMiBcXFwicGluZyBvdXQsIGJsb2NrZWQgYnkgcnVsZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY3NS1cXHQjIGNhc2Ugc3VjY2VlZHMgZGVzcGl0ZSB0aGUgcnVsZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjY3NjpcXHQjIHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY3Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY4MC1cXHRzaG93X2hpbnQgXFxcIlJlc3BvbnNlIGdlbmVyYXRlcyBJQ01QIChvciBhcnAgcmVxdWVzdCBpcyBpZ25vcmVkKSBkdWUgdG8gaXAgcnVsZVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo2ODE6XFx0cnVuX2NtZF9uc2IgcGluZyAtYzEgLXcxICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC02ODItXFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDEgXFxcInBpbmcgaW4sIGJsb2NrZWQgYnkgcnVsZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTY5Ny1cXHRhPSR7TlNCX0xPX0lQfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjY5ODpcXHRydW5fY21kIHBpbmcgLWMxIC13MSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNjk5LVxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAyIFxcXCJwaW5nIG91dCwgYmxvY2tlZCBieSByb3V0ZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcwMy1cXHQjIGNhc2Ugc3VjY2VlZHMgZGVzcGl0ZSBub3QgaGF2aW5nIGEgcm91dGUgZm9yIHRoZSBhZGRyZXNzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzA0OlxcdCMgcnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzA1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzA4LVxcdHNob3dfaGludCBcXFwiUmVzcG9uc2UgaXMgZHJvcHBlZCAob3IgYXJwIHJlcXVlc3QgaXMgaWdub3JlZCkgZHVlIHRvIGlwIHJvdXRlXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjcwOTpcXHRydW5fY21kX25zYiBwaW5nIC1jMSAtdzEgJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcxMC1cXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMSBcXFwicGluZyBpbiwgYmxvY2tlZCBieSByb3V0ZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcxOC1cXHRhPSR7TlNCX0xPX0lQfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjcxOTpcXHRydW5fY21kIHBpbmcgLWMxIC13MSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzIwLVxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAyIFxcXCJwaW5nIG91dCwgdW5yZWFjaGFibGUgZGVmYXVsdCByb3V0ZVxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTcyNC1cXHQjIGNhc2Ugc3VjY2VlZHMgZGVzcGl0ZSBub3QgaGF2aW5nIGEgcm91dGUgZm9yIHRoZSBhZGRyZXNzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzI1OlxcdCMgcnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzI2LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoPTcyOD1pcHY0X3BpbmdfdnJmKClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc0MC1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NDE6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtWUkZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NDItXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0LCBWUkYgYmluZFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc0NC1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NDU6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtOU0FfREVWfSAke2F9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzQ2LVxcdFxcdGxvZ190ZXN0X2FkZHIgJHthfSAkPyAwIFxcXCJwaW5nIG91dCwgZGV2aWNlIGJpbmRcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NDgtXFx0XFx0bG9nX3N0YXJ0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzQ5OlxcdFxcdHJ1bl9jbWQgaXAgdnJmIGV4ZWMgJHtWUkZ9IHBpbmcgLWMxIC13MSAtSSAke05TQV9JUH0gJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc1MC1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMCBcXFwicGluZyBvdXQsIHZyZiBkZXZpY2UgKyBkZXYgYWRkcmVzcyBiaW5kXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzUyLVxcdFxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjc1MzpcXHRcXHRydW5fY21kIGlwIHZyZiBleGVjICR7VlJGfSBwaW5nIC1jMSAtdzEgLUkgJHtWUkZfSVB9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NTQtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgb3V0LCB2cmYgZGV2aWNlICsgdnJmIGFkZHJlc3MgYmluZFxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc2Mi1cXHRcXHRsb2dfc3RhcnRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NjM6XFx0XFx0cnVuX2NtZF9uc2IgcGluZyAtYzEgLXcxICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NjQtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgaW5cXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NzMtXFx0XFx0c2hvd19oaW50IFxcXCJTb3VyY2UgYWRkcmVzcyBzaG91bGQgYmUgJHthfVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo3NzQ6XFx0XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtWUkZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03NzUtXFx0XFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgbG9jYWwsIFZSRiBiaW5kXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzgzLVxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjc4NDpcXHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC03ODUtXFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDAgXFxcInBpbmcgbG9jYWwsIGRldmljZSBiaW5kXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtNzkxLVxcdFxcdHNob3dfaGludCBcXFwiRmFpbHMgc2luY2UgYWRkcmVzcyBvbiB2cmYgZGV2aWNlIGlzIG91dCBvZiBkZXZpY2Ugc2NvcGVcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2g6NzkyOlxcdFxcdHJ1bl9jbWQgcGluZyAtYzEgLXcxIC1JICR7TlNBX0RFVn0gJHthfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoLTc5My1cXHRcXHRsb2dfdGVzdF9hZGRyICR7YX0gJD8gMiBcXFwicGluZyBsb2NhbCwgZGV2aWNlIGJpbmRcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDMtXFx0YT0ke05TQl9MT19JUH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo4MDQ6XFx0cnVuX2NtZCBwaW5nIC1jMSAtdzEgLUkgJHtWUkZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDUtXFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDIgXFxcInBpbmcgb3V0LCB2cmYgYmluZCwgYmxvY2tlZCBieSBydWxlXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtODA3LVxcdGxvZ19zdGFydFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mY25hbC10ZXN0LnNoOjgwODpcXHRydW5fY21kIHBpbmcgLWMxIC13MSAtSSAke05TQV9ERVZ9ICR7YX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaC04MDktXFx0bG9nX3Rlc3RfYWRkciAke2F9ICQ/IDIgXFxcInBpbmcgb3V0LCBkZXZpY2UgYmluZCwgYmxvY2tlZCBieSBydWxlXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZjbmFsLXRlc3Quc2gtODEzLVxcdHNob3dfaGludCBcXFwiUmVzcG9uc2UgbG9zdCBkdWUgdG8gaXAgcnVsZVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmNuYWwtdGVzdC5zaDo4MTQ6XFx0cnVuX2NtZF9uc2IgcGluZyAtYzEgLXcxICR7YX1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MDYuNDczOTQzOTc3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1OTU1NTEyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1HTFJVJ3MgS2VybmVsIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBNR0xSVSBpbXBsZW1lbnRhdGlvbi4gVGhlIGNvcmUgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYHJ1bl9jbWRgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLCBidXQgaXQncyAqc3RhdGljKi4gVGhhdCdzIHRoZSBmaXJzdCBodXJkbGUuIFRoZSBkZWJ1Z2ZzIGludGVyZmFjZSwgYGxydV9nZW5fc2VxX3dyaXRlYCwgY2FsbHMgYHJ1bl9jbWRgLCBidXQgaXQncyBhbHNvIHN0YXRpYywgdGhvdWdoIGl0J3MgcmVnaXN0ZXJlZCBhcyBhIGZpbGUgb3BlcmF0aW9uLiBIbW0sIGlzIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9uP1xuXG5MZXQncyBzZWXigKYgSSBrbm93IGBscnVfZ2VuX2RvX2FnaW5nYCBleGlzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbHJ1X2dlbl91dGlsLmNgLCBidXQgdGhhdCdzIHVzZXJzcGFjZSwgc28gaXQncyBub3QgcmVsZXZhbnQgaW4gdGhpcyBjb250ZXh0LlxuXG5SaWdodCwgYEZvY3VzU3ltYm9sc2AgYXJlIHN1cHBvc2VkIHRvIGJlIGtlcm5lbCBmdW5jdGlvbnMhIFRoYXQncyB0aGUga2V5LiBUaGUgZnVuY3Rpb25zIHdlIGNhbiBmb2N1cyBvbiBhcmU6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYGJhbGFuY2VfcGdkYXRgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGhvb2tzLCB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMuXG5cbkxldCdzIGNvbmZpcm0gdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQuIFllcywgaXQncyBkZWZpbmVkIGluIGBtbS92bXNjYW4uY2AgYW5kIGRlY2xhcmVkIGluIGBtbS9pbnRlcm5hbC5oYC4gQ29uZmlybWVkLiBHb29kLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGxvb2tzIHRvIGJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gVGhhdCdzIGFub3RoZXIgcG90ZW50aWFsIHBvaW50IG9mIGVudHJ5LCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCBpcyBhbHNvIG5vbi1zdGF0aWMuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYm90aCBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY3JpdGljYWwgY29kZSBjaGFuZ2VzIGFyZSBnYXRlZCBieSB0aGUgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgZGlyZWN0aXZlcy4gSSdsbCBjaGVjayBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDM5ODIgdG8gY29uZmlybSB0aGlzLiBUaGF0IHNob3VsZCB0ZWxsIG1lIGlmIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjEzLjA2OTQ5ODI2NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk2MDpcXHRcXG4zOTYxOlxcdFxcdC8qIGZpbmQgdGhlIG9sZGVzdCBwb3B1bGF0ZWQgZ2VuZXJhdGlvbiAqL1xcbjM5NjI6XFx0XFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykge1xcbjM5NjM6XFx0XFx0XFx0d2hpbGUgKG1pbl9zZXFbdHlwZV0gKyBNSU5fTlJfR0VOUyBcXHUwMDNjPSBscnVnZW4tXFx1MDAzZW1heF9zZXEpIHtcXG4zOTY0OlxcdFxcdFxcdFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWluX3NlcVt0eXBlXSk7XFxuMzk2NTpcXHRcXG4zOTY2OlxcdFxcdFxcdFxcdGZvciAoem9uZSA9IDA7IHpvbmUgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHpvbmUrKykge1xcbjM5Njc6XFx0XFx0XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZscnVnZW4tXFx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKSlcXG4zOTY4OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4zOTY5OlxcdFxcdFxcdFxcdH1cXG4zOTcwOlxcdFxcbjM5NzE6XFx0XFx0XFx0XFx0bWluX3NlcVt0eXBlXSsrO1xcbjM5NzI6XFx0XFx0XFx0XFx0c2VxX2luY19mbGFnID0gdHJ1ZTtcXG4zOTczOlxcdFxcdFxcdH1cXG4zOTc0OlxcdG5leHQ6XFxuMzk3NTpcXHRcXHRcXHQ7XFxuMzk3NjpcXHRcXHR9XFxuMzk3NzpcXHRcXG4zOTc4OlxcdFxcdC8qXFxuMzk3OTpcXHRcXHQgKiBJZiBtaW5fc2VxW3R5cGVdIG9mIGJvdGggYW5vbnltb3VzIGFuZCBmaWxlIGlzIG5vdCBpbmNyZWFzZWQsXFxuMzk4MDpcXHRcXHQgKiByZXR1cm4gaGVyZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjaGVja2luZyBvdmVyaGVhZCBsYXRlci5cXG4zOTgxOlxcdFxcdCAqL1xcbjM5ODI6XFx0XFx0aWYgKCFzZXFfaW5jX2ZsYWcpXFxuMzk4MzpcXHRcXHRcXHRyZXR1cm47XFxuMzk4NDpcXHRcXG4zOTg1OlxcdFxcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3MpIHtcXG4zOTg2OlxcdFxcdFxcdGlmIChtaW5fc2VxW3R5cGVdIFxcdTAwM2M9IGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSlcXG4zOTg3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM5ODg6XFx0XFxuMzk4OTpcXHRcXHRcXHRyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRydWUpO1xcbjM5OTA6XFx0XFx0XFx0V1JJVEVfT05DRShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0sIG1pbl9zZXFbdHlwZV0pO1xcbjM5OTE6XFx0XFx0fVxcbjM5OTI6XFx0fVxcbjM5OTM6XFx0XFxuMzk5NDpcXHRzdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcylcXG4zOTk1OlxcdHtcXG4zOTk2OlxcdFxcdGJvb2wgc3VjY2VzcztcXG4zOTk3OlxcdFxcdGludCBwcmV2LCBuZXh0O1xcbjM5OTg6XFx0XFx0aW50IHR5cGUsIHpvbmU7XFxuMzk5OTpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbjQwMDA6XFx0cmVzdGFydDpcXG40MDAxOlxcdFxcdGlmIChzZXEgXFx1MDAzYyBSRUFEX09OQ0UobHJ1Z2VuLVxcdTAwM2VtYXhfc2VxKSlcXG40MDAyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG40MDAzOlxcdFxcbjQwMDQ6XFx0XFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuNDAwNTpcXHRcXG40MDA2OlxcdFxcdFZNX1dBUk5fT05fT05DRSghc2VxX2lzX3ZhbGlkKGxydXZlYykpO1xcbjQwMDc6XFx0XFxuNDAwODpcXHRcXHRzdWNjZXNzID0gc2VxID09IGxydWdlbi1cXHUwMDNlbWF4X3NlcTtcXG40MDA5OlxcdFxcdGlmICghc3VjY2VzcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MTMuMDY5OTYzMDUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzA0NDg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNR0xSVSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGhpcyBsb29rcyBsaWtlIEknbSBpbnNpZGUgdGhlIE1HTFJVIGNvZGUsIHBlcmZlY3QuIE5vdywgbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gV2hhdCBhcmUgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkga25vdyBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBiaWcgb25lLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciwgZXNwZWNpYWxseSByZWxhdGVkIHRvIGVuYWJsaW5nIGl0IGJ5IGRlZmF1bHQuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzISBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgbG9va3MgbGlrZSBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBJdCdzIHByb2JhYmx5IHVzZWQgdG8gc2V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUbyBiZSBjb21wbGV0ZWx5IHN1cmUsIEkgc2hvdWxkIHJlYWxseSBqdW1wIG92ZXIgdG8gYG1tL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGV0YWlscyBvZiBgTFJVX0dFTmAgYW5kIGFueSBkZXBlbmRlbnQgb3B0aW9ucy4gTGV0J3MgZ28gdGFrZSBhIGxvb2sgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjE2Ljc0MDQxNTU1NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDAwOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwMTpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDI6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDAzOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNDpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwNTpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA2OlxcdFxcdGhlbHBcXG4xNDA3OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQwODpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDA5OlxcdFxcbjE0MTA6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxMjpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDEzOlxcdFxcdGhlbHBcXG4xNDE0OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTU6XFx0XFxuMTQxNjpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MTc6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MTg6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxOTpcXHRcXHRoZWxwXFxuMTQyMDpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MjE6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MjI6XFx0XFxuMTQyMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MjQ6XFx0XFxuMTQyNTpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDI2OlxcdFxcdGRlZl9ib29sIHlcXG4xNDI3OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDI4OlxcdCMgfVxcbjE0Mjk6XFx0XFxuMTQzMDpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcXG4xNDMxOlxcdCAgICAgICBkZWZfYm9vbCBuXFxuMTQzMjpcXHRcXG4xNDMzOlxcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcXG4xNDM0OlxcdFxcdGRlZl9ib29sIHlcXG4xNDM1OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXFx1MDAyNlxcdTAwMjYgTU1VIFxcdTAwMjZcXHUwMDI2IFNNUFxcbjE0MzY6XFx0XFx0aGVscFxcbjE0Mzc6XFx0XFx0ICBBbGxvdyBwZXItdm1hIGxvY2tpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcuXFxuMTQzODpcXHRcXG4xNDM5OlxcdFxcdCAgVGhpcyBmZWF0dXJlIGFsbG93cyBsb2NraW5nIGVhY2ggdmlydHVhbCBtZW1vcnkgYXJlYSBzZXBhcmF0ZWx5IHdoZW5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MTYuNzQwNTE4NDc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNTkyNTMxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTWVtb3J5IFJlY2xhaW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgYXJlIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSdsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZSBpbiBgRW5hYmxlQ29uZmlnc2Agc2luY2UgdGhleSBzZWVtIGNlbnRyYWwgdG8gdGhpcyBtZW1vcnkgcmVjbGFpbSBjaGFuZ2UuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGl0c2VsZiBhbmQgaXQncyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCwgaW52b2x2aW5nIGNoYW5nZXMgdG8gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBzd2FwcGluZXNzIGNoZWNrcywgaG93IGl0IG1hbmFnZXMgZ2VuZXJhdGlvbiBleGhhdXN0aW9uIGR1cmluZyBmb2xpbyBzY2FucywgcmV0cmllcyB3aXRoIGRpZmZlcmVudCBmb2xpbyB0eXBlcywgYW5kIHRyaWdnZXJzIGFnaW5nIGJhc2VkIG9uIGV4aGF1c3Rpb24gYW5kIGltYmFsYW5jZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byB1bmNvdmVyIGFueSBzdWJ0bGUgYnVncy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEknbSBmb2N1c2luZyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIHRoZSBkaXJlY3QgcmVjbGFpbSBlbnRyeSwgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBpcyBmb3IgbWVtY2cgcmVjbGFpbS4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFub3RoZXIsIGFzIGlzIGBzaHJpbmtfYWxsX21lbW9yeWAuIEkga25vdyBgYmFsYW5jZV9wZ2RhdGAgKGtzd2FwZCkgaXMgYSBrdGhyZWFkLCBidXQgaXQncyBub24tc3RhdGljIHNvIGl0J3MgYSB2YWxpZCB0YXJnZXQgdG9vLCBldmVuIGlmIGluZGlyZWN0bHkgdGhyb3VnaCBtZW1vcnkgYWxsb2NhdGlvbi5cblxuSSdtIGxpc3RpbmcgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFzIG15IGNvcmUgZnV6emluZyB0YXJnZXRzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYDsgeWVzLCBpdCdzIHRoZXJlIGluIGBtbS92bXNjYW4uY2AuIEFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLCB3aGljaCBpcyBhbHNvIGluIGBtbS92bXNjYW4uY2AsIHVzZWQgZm9yIGhpYmVybmF0aW9uLiBJJ20gbGVhbmluZyB0b3dhcmQgcHJpb3JpdGl6aW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFzIG1vcmUgZGlyZWN0IHJlY2xhaW0gZW50cnkgcG9pbnRzLlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgYHN5c19tYWR2aXNlYCB3aXRoIGBNQURWX1BBR0VPVVRgIG9yIGBNQURWX0NPTERgLCB3aGljaCBsZWFkIHRvIGBtYWR2aXNlX3BhZ2VvdXRgIGFuZCB1bHRpbWF0ZWx5IHRvIGByZWNsYWltX3BhZ2VzYC4gVGhhdCdzIGFub3RoZXIgcG90ZW50aWFsIHZlY3Rvciwgc28gSSBzaG91bGQgYW5hbHl6ZSBgcmVjbGFpbV9wYWdlc2AgdG9vIHRvIHNlZSBpZiB0aGF0IHNob3VsZCBhbHNvIGJlIGFkZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ5MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjI1LjA5OTc3NDc3NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNzM2OTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNsYWltX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz0yNTc9c3RhdGljIHZvaWQgc2d4X3JlY2xhaW1lcl93cml0ZShzdHJ1Y3Qgc2d4X2VwY19wYWdlICplcGNfcGFnZSxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDItICovXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjMwMzpzdGF0aWMgdm9pZCBzZ3hfcmVjbGFpbV9wYWdlcyh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDQte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTM5Nj12b2lkIHNneF9yZWNsYWltX2RpcmVjdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTM5OC1cXHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9MT1dfUEFHRVMpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozOTk6XFx0XFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDAwLX1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz00MDI9c3RhdGljIGludCBrc2d4ZCh2b2lkICpwKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQyMS1cXHRcXHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9ISUdIX1BBR0VTKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6NDIyOlxcdFxcdFxcdHNneF9yZWNsYWltX3BhZ2VzKCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQyMy1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz01Njc9c3RydWN0IHNneF9lcGNfcGFnZSAqc2d4X2FsbG9jX2VwY19wYWdlKHZvaWQgKm93bmVyLCBib29sIHJlY2xhaW0pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkwLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo1OTE6XFx0XFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkyLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9Mzg3PXN0YXRpYyB2b2lkIHNsYV9mcmVlKHN0cnVjdCBzbGFfYWRkcl90IHNsYSwgc2l6ZV90IGxlbiwgYm9vbCBmaXJtd2FyZV9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTQwMy1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo0MDQ6XFx0XFx0XFx0XFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNjYXR0ZXJbaV0pLCAxLCBmYWxzZSk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDA1LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MDgtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo0MDk6XFx0XFx0XFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNsYSksIDEsIGZhbHNlKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MTAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zNTg9c3RhdGljIGludCBzZXZfd3JpdGVfaW5pdF9leF9maWxlX2lmX3JlcXVpcmVkKGludCBjbWRfaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTM4My1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjM4NDppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zODUte1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTctfVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NDE4OkVYUE9SVF9TWU1CT0xfR1BMKHNucF9yZWNsYWltX3BhZ2VzKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQxOS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQyMD1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MzgtXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0Mzk6XFx0c25wX3JlY2xhaW1fcGFnZXMocGFkZHIsIGksIGxvY2tlZCk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQ3OT1zdGF0aWMgdm9pZCBfX3NucF9mcmVlX2Zpcm13YXJlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00ODgtXFx0aWYgKHNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0ODk6XFx0ICAgIHNucF9yZWNsYWltX3BhZ2VzKHBhZGRyLCBucGFnZXMsIGxvY2tlZCkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00OTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz03MTI9c3RhdGljIGludCBzbnBfdW5tYXBfY21kX2J1Zl9kZXNjKHN0cnVjdCBjbWRfYnVmX2Rlc2MgKmRlc2MpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTcyMS1cXHQvKiBUcmFuc2l0aW9uIHRoZSBidWZmZXJzIGJhY2sgdG8gaHlwZXJ2aXNvci1vd25lZC4gKi9cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjcyMjpcXHRpZiAoc25wX3JlY2xhaW1fcGFnZXMoKmRlc2MtXFx1MDAzZXBhZGRyX3B0ciwgbnBhZ2VzLCB0cnVlKSkge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNzIzLVxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byByZWNsYWltIGZpcm13YXJlLW93bmVkIHBhZ2VzIHdoaWxlIGlzc3VpbmcgU0VWIGxlZ2FjeSBjb21tYW5kLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTgzMz1zdGF0aWMgaW50IHNucF9yZWNsYWltX2NtZF9idWYoaW50IGNtZCwgdm9pZCAqY21kX2J1ZilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtODQyLVxcdGlmIChzZXZfY21kX2J1Zl93cml0YWJsZShjbWQpKVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6ODQzOlxcdFxcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGNtZF9idWYpLCAxLCB0cnVlKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTg0NC1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1NT1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNDk0LVxcdFxcdCAqIFRoaXMgZXhlY3V0ZXMgd2l0aCB0aGUgc2V2X2NtZF9tdXRleCBoZWxkIHNvIGRvd24gdGhlIHN0YWNrXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNDk1OlxcdFxcdCAqIHNucF9yZWNsYWltX3BhZ2VzKGxvY2tlZD1mYWxzZSkgbWlnaHQgYmUgbmVlZGVkICh3aGljaCBpcyBleHRyZW1lbHlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE0OTYtXFx0XFx0ICogdW5saWtlbHkpIGJ1dCB3aWxsIGNhdXNlIGEgZGVhZGxvY2suXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIzNzI9c3RhdGljIGludCBfX3Nldl9kb19zbnBfcGxhdGZvcm1fc3RhdHVzKHN0cnVjdCBzZXZfdXNlcl9kYXRhX3NucF9zdGF0dXMgKnN0YXR1cyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQwNy1cXHRcXHQgKiBUaGUgc3RhdHVzIHBhZ2Ugd2lsbCBiZSBpbiBSZWNsYWltIHN0YXRlIG9uIHN1Y2Nlc3MsIG9yIGxlZnRcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI0MDg6XFx0XFx0ICogaW4gRmlybXdhcmUgc3RhdGUgb24gZmFpbHVyZS4gVXNlIHNucF9yZWNsYWltX3BhZ2VzKCkgdG9cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI0MDktXFx0XFx0ICogdHJhbnNpdGlvbiBlaXRoZXIgY2FzZSBiYWNrIHRvIEh5cGVydmlzb3Itb3duZWQgc3RhdGUuXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDEwLVxcdFxcdCAqL1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjQxMTpcXHRcXHRpZiAoc25wX3JlY2xhaW1fcGFnZXMoX19wYShkYXRhKSwgMSwgdHJ1ZSkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDEyLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz0yODA9dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTAtXFx0ZGVidWdmc19jcmVhdGVfdTMyKFxcXCJmd19wYWdlc19yZWNsYWltX2Rpc2NhcmRcXFwiLCAwNDAwLCBwYWdlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjI5MTpcXHRcXHRcXHQgICBcXHUwMDI2ZGV2LVxcdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmM9MTI3PXN0YXRpYyBpbnQgdG91dF9xdWVyeV9kdG9yKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3RvdXQuYy0xNDgtXFx0TUxYNV9USU1FT1VUX0ZJTEwoZnNtX3JlYWN0aXZhdGVfdG8sIG91dCwgZGV2LCBNTFg1X1RPX0ZTTV9SRUFDVElWQVRFX01TLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3RvdXQuYzoxNDk6XFx0TUxYNV9USU1FT1VUX0ZJTEwocmVjbGFpbV9wYWdlc190bywgb3V0LCBkZXYsIE1MWDVfVE9fUkVDTEFJTV9QQUdFU19NUywgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTUwLVxcdE1MWDVfVElNRU9VVF9GSUxMKHJlY2xhaW1fdmZzX3BhZ2VzX3RvLCBvdXQsIGRldiwgTUxYNV9UT19SRUNMQUlNX1ZGU19QQUdFU19NUywgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NTE4PXN0YXRpYyB1MzIgZndwX2ZpbGxfbWFuYWdlX3BhZ2VzX291dChzdHJ1Y3QgZndfcGFnZSAqZndwLCB1MzIgKm91dCwgdTMyIGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTUzNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NTM2OnN0YXRpYyBpbnQgcmVjbGFpbV9wYWdlc19jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTM3LVxcdFxcdFxcdCAgICAgdTMyICppbiwgaW50IGluX3NpemUsIHUzMiAqb3V0LCBpbnQgb3V0X3NpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo1NzU6c3RhdGljIGludCByZWNsYWltX3BhZ2VzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBmdW5jX3ZoY2FfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTU3Ni1cXHRcXHRcXHQgaW50IG5wYWdlcywgaW50ICpuY2xhaW1lZCwgYm9vbCBldmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02MDYtXFx0XFx0ICAgICAgbWx4NV9wYWdlX21ndF9tb2RlX2lzX3ZoY2FfaWQoZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjYwNzpcXHRlcnIgPSByZWNsYWltX3BhZ2VzX2NtZChkZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dGxlbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOC1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOS1cXHRcXHRucGFnZXMgPSBNTFg1X0dFVChtYW5hZ2VfcGFnZXNfaW4sIGluLCBpbnB1dF9udW1fZW50cmllcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjYxMDpcXHRcXHRkZXYtXFx1MDAzZXByaXYucmVjbGFpbV9wYWdlc19kaXNjYXJkICs9IG5wYWdlcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNjExLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYz02NDM9c3RhdGljIHZvaWQgcGFnZXNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02NTEtXFx0ZWxzZSBpZiAocmVxLVxcdTAwM2VucGFnZXMgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo2NTI6XFx0XFx0ZXJyID0gcmVjbGFpbV9wYWdlcyhkZXYsIHJlcS1cXHUwMDNlZnVuY19pZCwgLTEgKiByZXEtXFx1MDAzZW5wYWdlcywgTlVMTCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNjUzLVxcdFxcdFxcdFxcdCAgICB0cnVlLCByZXEtXFx1MDAzZWVjX2Z1bmN0aW9uKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYz04MzA9c3RhdGljIGludCBtbHg1X3JlY2xhaW1fcm9vdF9wYWdlcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTg0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6ODQyOlxcdFxcdGVyciA9IHJlY2xhaW1fcGFnZXMoZGV2LCBmdW5jX3ZoY2FfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTg0My1cXHRcXHRcXHRcXHQgICAgb3B0aW1hbF9yZWNsYWltZWRfcGFnZXMoKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy04NDYtXFx0XFx0XFx0bWx4NV9jb3JlX3dhcm4oZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo4NDc6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJyZWNsYWltX3BhZ2VzIGVyciAoJWQpIGZ1bmNfdmhjYV9pZD0weCV4IGVjX2Z1bmM9MHgleFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ4LVxcdFxcdFxcdFxcdCAgICAgICBlcnIsIGZ1bmNfdmhjYV9pZCwgZWNfZnVuY3Rpb24pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oPTU3Mz1zdHJ1Y3QgbWx4NV9wcml2IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODctXFx0dTMyXFx0XFx0XFx0Z2l2ZV9wYWdlc19kcm9wcGVkO1xcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaDo1ODg6XFx0dTMyXFx0XFx0XFx0cmVjbGFpbV9wYWdlc19kaXNjYXJkO1xcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODktXFx0ZW51bSBtbHg1X3BhZ2VfbWd0X21vZGVcXHRwYWdlX21ndF9tb2RlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9MzQ1NT1zdHJ1Y3QgbWx4NV9pZmNfZHRvcl9yZWdfYml0cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0zNDc1LVxcbmluY2x1ZGUvbGludXgvbWx4NS9tbHg1X2lmYy5oOjM0NzY6XFx0c3RydWN0IG1seDVfaWZjX2RlZmF1bHRfdGltZW91dF9iaXRzIHJlY2xhaW1fcGFnZXNfdG87XFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzQ3Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oPTEwODE9dm9pZCAqc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoZ2ZwX3QgbWFzayk7XFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTA4MjppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpO1xcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTEwODMtdm9pZCBzbnBfZnJlZV9maXJtd2FyZV9wYWdlKHZvaWQgKmFkZHIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTExNT1zdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC0xMTE5LVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjExMjA6c3RhdGljIGlubGluZSBpbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTEyMS17XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD00MDk9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX3dyaXRlX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtNDMxLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjQzMjpUUkFDRV9FVkVOVChtbV92bXNjYW5fcmVjbGFpbV9wYWdlcyxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC00MzMtXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI3MS1cXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MjcyOlxcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9kYW1vbi9wYWRkci5jLTI3My1cXHRjb25kX3Jlc2NoZWQoKTtcXG4tLVxcbm1tL2ludGVybmFsLmg9MTIwNT1leHRlcm4gdW5zaWduZWQgbG9uZyAgX19tdXN0X2NoZWNrIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTIwOC1cXG5tbS9pbnRlcm5hbC5oOjEyMDk6dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpO1xcbm1tL2ludGVybmFsLmgtMTIxMC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNDQyLVxcdFxcdGlmIChwYWdlb3V0KVxcbm1tL21hZHZpc2UuYzo0NDM6XFx0XFx0XFx0cmVjbGFpbV9wYWdlcyhcXHUwMDI2Zm9saW9fbGlzdCk7XFxubW0vbWFkdmlzZS5jLTQ0NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21hZHZpc2UuYy01NjEtXFx0aWYgKHBhZ2VvdXQpXFxubW0vbWFkdmlzZS5jOjU2MjpcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9tYWR2aXNlLmMtNTYzLVxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjE1Mz1zdGF0aWMgdW5zaWduZWQgaW50IHJlY2xhaW1fZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMjE3Mi1cXHR9XFxubW0vdm1zY2FuLmM6MjE3MzpcXHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MubnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCk7XFxubW0vdm1zY2FuLmMtMjE3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTIxNzctXFxubW0vdm1zY2FuLmM6MjE3ODp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG5tbS92bXNjYW4uYy0yMTc5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MjYuNjE3MTUwOTAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjk1NzE4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlcmFjdGlvbiBvZiBQYWdlIFJlY2xhaW0gYW5kIE1HTFJVKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHJlY2xhaW1fcGFnZXNgIGlzbid0IHN0YXRpYyBhbmQgaXMgY2FsbGVkIGJ5IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGFuZCBgZGFtb25fcGFfcGFnZW91dGAuIEhvd2V2ZXIsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgZnVuY3Rpb25zIGxpa2UgYHNjYW5fZm9saW9zYCwgYGlzb2xhdGVfZm9saW9zYCwgYGV2aWN0X2ZvbGlvc2AsIGFuZCBgc2hvdWxkX3J1bl9hZ2luZ2AsIHdoaWNoIGFyZSBhbGwgZGVlcGx5IGludm9sdmVkIGluIE1HTFJVLiBUaGlzIGlzIGludGVyZXN0aW5nLlxuXG5Ob3csIGByZWNsYWltX3BhZ2VzYCBmdXJ0aGVyIGNhbGxzIGByZWNsYWltX2ZvbGlvX2xpc3RgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAuIEFoLCB0aGVyZSdzIHRoZSBkaXN0aW5jdGlvbiEgYHNocmlua19mb2xpb19saXN0YCBpcyB0aGUgYWN0aXZlL2luYWN0aXZlIExSVSByZWNsYWltIHBhdGgsIHdoaWNoIGlzbid0IE1HTFJVIGRpcmVjdGx5LiBNR0xSVSB1c2VzIGBldmljdF9mb2xpb3NgLCB3aGljaCAqaW50ZXJuYWxseSogY2FsbHMgYHNocmlua19mb2xpb19saXN0YC4gQW5kLCBgbWFkdmlzZV9wYWdlb3V0YCBjYWxscyBgcmVjbGFpbV9wYWdlc2AsIGxlYWRpbmcgYmFjayB0byBgcmVjbGFpbV9mb2xpb19saXN0YC4gU28sIGByZWNsYWltX3BhZ2VzYCBpdHNlbGYgaXNuJ3QgdXNpbmcgTUdMUlUgZGlyZWN0bHk7IGl0J3Mgc2ltcGx5IHJlY2xhaW1pbmcgdGhlIHNwZWNpZmljIGZvbGlvcyBwYXNzZWQgdG8gaXQuIEl0IGlzIE1HTFJVIHRoYXQgYWN0dWFsbHkgbWFrZXMgdGhlIHBhZ2UgcmVwbGFjZW1lbnQgZGVjaXNpb25zLCBkZXRlcm1pbmluZyAqd2hpY2gqIHBhZ2VzIHRvIHJlY2xhaW0uXG5cblNvLCB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciBNR0xSVSBmdW5jdGlvbmFsaXR5IGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgc2hyaW5rIHRoZSBMUlUgbGlzdHMsIHNwZWNpZmljYWxseSBgc2hyaW5rX2xydXZlY2AuIFRoYXTigJlzIGl0ISBUaGF0J3MgdGhlIGVudHJ5IHBvaW50ISBTbyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQuIEkgYW0gZ29pbmcgdG8gdXNlOlxuXG4qICAgYHRyeV90b19mcmVlX3BhZ2VzYFxuKiAgIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYFxuKiAgIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYFxuKiAgIGBzaHJpbmtfYWxsX21lbW9yeWBcblxuUmlnaHQsIGxldCdzIGRvdWJsZS1jaGVjayBhYm91dCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBhdmFpbGFibGUgd2hlbiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBBIHF1aWNrIGxvb2sgYXQgYG1tL3Ztc2Nhbi5jYCBzaG93cyBpdOKAmXMgdGhlcmUsIGFuZCBpdCBkb2VzIGluZGVlZCBkZXBlbmQgb24gYENPTkZJR19NRU1DR2AuIEp1c3QgdG8gYmUgc2FmZSwgSeKAmWxsIGFkZCBgTUVNQ0dgIHRvIGBFbmFibGVDb25maWdzYCBldmVuIHRob3VnaCBpdCdzIHVzdWFsbHkgZW5hYmxlZCBhbnl3YXkuIEFsd2F5cyBiZXR0ZXIgdG8gYmUgZXhwbGljaXQuIE9rYXksIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBjb25maXJtIHRoYXQgZXZlcnl0aGluZyBpcyBhcyBleHBlY3RlZCByZWdhcmRpbmcgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MDozMy45NDY3MjU3NzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjgwMzA6XFx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbjgwMzE6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcXFwic3dhcHBpbmVzcz0lZFxcXCJ9LFxcbjgwMzI6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXFxcInN3YXBwaW5lc3M9bWF4XFxcIn0sXFxuODAzMzpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG44MDM0OlxcdH07XFxuODAzNTpcXHRcXG44MDM2OlxcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG44MDM3OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG44MDM4OlxcdHtcXG44MDM5OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG44MDQwOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcXG44MDQxOlxcdFxcdGludCBzd2FwcGluZXNzID0gLTE7XFxuODA0MjpcXHRcXHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XFxuODA0MzpcXHRcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuODA0NDpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuODA0NTpcXHRcXG44MDQ2OlxcdFxcdGlmICghYnVmIHx8ICghbWVtY2cgXFx1MDAyNlxcdTAwMjYgIXBnZGF0KSB8fCAobWVtY2cgXFx1MDAyNlxcdTAwMjYgcGdkYXQpKVxcbjgwNDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODA0ODpcXHRcXG44MDQ5OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjMzLjk0NzAwNDAxOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk4OTI1ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEF2YWlsYWJpbGl0eSBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJdCdzIGRhd25pbmcgb24gbWUgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgbWlnaHQgKm5vdCogYmUgZ3VhcmRlZCBieSB0aGF0IGAjaWZkZWYgQ09ORklHX01FTUNHYCBkaXJlY3RpdmUuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gU28sIGxldCdzIGV4cGxvcmUgd2hldGhlciBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYWNjZXNzaWJsZSBldmVuIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQuXG5cbkhtbSwgaXQgdGFrZXMgYSBgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYCBhcmd1bWVudCwgd2hpY2ggaXMgdGhlIGdpdmVhd2F5LiBIb3dldmVyLCBpZiBgQ09ORklHX01FTUNHYCBpcyBvZmYsIHRoZSBrZXJuZWwgKnN0aWxsKiBkZWNsYXJlcyBgc3RydWN0IG1lbV9jZ3JvdXBgLCByaWdodD8gSXQgbWlnaHQgYmUgYW4gb3BhcXVlIHN0cnVjdCBvciBwb3NzaWJseSBhbiBlbXB0eSBzdHJ1Y3QuIEkgbmVlZCB0byBjb25maXJtIGhvdyBpdCdzIGhhbmRsZWQgaW4gdGhhdCBzY2VuYXJpby5cblxuQWxyaWdodCwgbGV0J3MgY3V0IHRoZSBjaGFzZS4gSSBuZWVkIHRvIHJ1biBhIHF1aWNrIHNlYXJjaCBmb3IgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHRvIHVuZGVyc3RhbmQgdGhlIHRydWUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQnbGwgY2xlYXIgdXAgYW55IHBvdGVudGlhbCBjb25mdXNpb24gYW5kIGdpdmUgbWUgYSBjb25jcmV0ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDEyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MzguMTQ1OTMyNDEzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwNjAxNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4jaWZkZWYgQ09ORklHX01FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzQ0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5ibG9jay9ibGstY2dyb3VwLmM9MTUwOD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTE3LVxcdC5leGl0ID0gYmxrY2dfZXhpdCxcXG5ibG9jay9ibGstY2dyb3VwLmM6MTUxODojaWZkZWYgQ09ORklHX01FTUNHXFxuYmxvY2svYmxrLWNncm91cC5jLTE1MTktXFx0LypcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4NDM9c3RhdGljIGJsa19zdGF0dXNfdCBsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg3MS1cXHRcXHRjbWQtXFx1MDAzZWJsa2NnX2NzcyA9IGJpb19ibGtjZ19jc3MocnEtXFx1MDAzZWJpbyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3MjojaWZkZWYgQ09ORklHX01FTUNHXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg3My1cXHRcXHRpZiAoY21kLVxcdTAwM2VibGtjZ19jc3MpIHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuYz0xOT1JT1BUREVTQ19NQVRDSChfcmVmY291bnQsIF9fcGFnZV9yZWZjb3VudCk7XFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jOjIwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmMtMjEtSU9QVERFU0NfTUFUQ0gobWVtY2dfZGF0YSwgbWVtY2dfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmg9MTk9c3RydWN0IGlvcHRkZXNjIHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaC0zMS1cXHRhdG9taWNfdCBfX3BhZ2VfcmVmY291bnQ7XFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oOjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmgtMzMtXFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2VmbGFnc19wcm9jX29wcyA9IHtcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTI2Ni1cXG5mcy9wcm9jL3BhZ2UuYzoyNjc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmZzL3Byb2MvcGFnZS5jLTI2OC1zdGF0aWMgc3NpemVfdCBrcGFnZWNncm91cF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjgwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0yODMtXFx0cHJvY19jcmVhdGUoXFxcImtwYWdlZmxhZ3NcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2a3BhZ2VmbGFnc19wcm9jX29wcyk7XFxuZnMvcHJvYy9wYWdlLmM6Mjg0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5mcy9wcm9jL3BhZ2UuYy0yODUtXFx0cHJvY19jcmVhdGUoXFxcImtwYWdlY2dyb3VwXFxcIiwgU19JUlVTUiwgTlVMTCwgXFx1MDAyNmtwYWdlY2dyb3VwX3Byb2Nfb3BzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzAwPXN0cnVjdCBicGZfbWFwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzIwLVxcdHN0cnVjdCBidGYgKmJ0ZjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMyMTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMjItXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0yNzgwPWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzgxLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyNzgyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3ODMtdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oPTUxPXN0cnVjdCBsaXN0X2xydSB7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTUyLVxcdHN0cnVjdCBsaXN0X2xydV9ub2RlXFx0Km5vZGU7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNTQtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9ODI9aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODQtXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjg1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODYtLyoqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02MD1zdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04OT1zdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTktXFx0LypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjk6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzMC1cXHQvKiBzbGFiIHN0YXRzIGZvciBubWkgY29udGV4dCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MjAyPXN0cnVjdCBtZW1fY2dyb3VwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1NS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNTY6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1Ny1cXHQvKiBNRU1DR19LTUVNIGZvciBubWkgY29udGV4dCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjgzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI4NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVxcdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MzU0PWVudW0gb2JqZXh0X2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM2Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozNjg6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM2OS0vKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ3Nj1zdHJ1Y3Qgc2xhYm9ial9leHQge1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE0Nzc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NzgtXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTUwND1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmxydXZlY19saXZlX2xvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTA1LXtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNTA2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTA3LVxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2Mzk9c3RydWN0IHNvY2s7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTY0MDojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTY0MS1leHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgbWVtY2dfc29ja2V0c19lbmFibGVkX2tleTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE3Mjc9c3RhdGljIGlubGluZSBpbnQgc2hyaW5rZXJfaWQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MzItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTczMzojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTczNC1ib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5MTk9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkyOC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTMwLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTQ3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01MS1cXHRfX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1MjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01My1cXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9ODA9c3RydWN0IHBhZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE4Ni1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTg3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTg4LVxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD00MDQ9c3RydWN0IGZvbGlvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MzUtXFx0XFx0XFx0YXRvbWljX3QgX3JlZmNvdW50O1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo0MzY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MzctXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTUyMT1GT0xJT19NQVRDSChfcmVmY291bnQsIF9yZWZjb3VudCk7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjUyMjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTUyMy1GT0xJT19NQVRDSChtZW1jZ19kYXRhLCBtZW1jZ19kYXRhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD01NzY9c3RydWN0IHB0ZGVzYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjA3LVxcdGF0b21pY190IF9fcGFnZV9yZWZjb3VudDtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NjA4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjA5LVxcdHVuc2lnbmVkIGxvbmcgcHRfbWVtY2dfZGF0YTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD02MjI9VEFCTEVfTUFUQ0goX3JlZmNvdW50LCBfX3BhZ2VfcmVmY291bnQpO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo2MjM6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC02MjQtVEFCTEVfTUFUQ0gobWVtY2dfZGF0YSwgcHRfbWVtY2dfZGF0YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTE3NT1zdHJ1Y3QgbW1fc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMzI3LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMzI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTMyOS1cXHRcXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MTItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBiaXRtYXA7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0MTM6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDE0LVxcdFxcdFxcdC8qIHBvaW50cyB0byB0aGUgbWVtY2cgb2YgXFxcIm93bmVyXFxcIiBhYm92ZSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1MDI9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTA1LVxcdG1tLVxcdTAwM2VscnVfZ2VuLmJpdG1hcCA9IDA7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MDY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTA3LVxcdG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnID0gTlVMTDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzY0PXN0cnVjdCBscnV2ZWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTEtI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3OTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzkzLVxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE2NjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGdsaXN0X2RhdGEgKmxydXZlY19wZ2RhdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjY1LXtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE2NjY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY2Ny1cXHRyZXR1cm4gbHJ1dmVjLVxcdTAwM2VwZ2RhdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDIxLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDIyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyMy1cXHR1bnNpZ25lZFxcdFxcdFxcdGluX3VzZXJfZmF1bHQ6MTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNTQ4LVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNTQ5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU1MC1cXHRzdHJ1Y3QgbWVtX2Nncm91cFxcdFxcdCptZW1jZ19pbl9vb207XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU1Mi1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU1MzojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NTQtXFx0LyogTnVtYmVyIG9mIHBhZ2VzIHRvIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kOiAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTE2MT1leHRlcm4gdm9pZCBleGVjX21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBtbV9zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE2Mi1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTYzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTY0LWV4dGVybiB2b2lkIG1tX3VwZGF0ZV9uZXh0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00NjY9c3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX3Bpbl9yZXN0b3JlKHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NzAtXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ3MTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ3Mi1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1lbV9jZ3JvdXAgKiwgaW50X2FjdGl2ZV9tZW1jZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg9ODI9c3RydWN0IHNocmlua2VyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMDYtXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaDoxMDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2hyaW5rZXIuaC0xMDgtXFx0LyogSUQgaW4gc2hyaW5rZXJfaWRyICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD0yNj1lbnVtIF9zbGFiX2ZsYWdfYml0cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC00NS0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo0NjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNDctXFx0X1NMQUJfQUNDT1VOVCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTIwNC0gKi9cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMDU6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTIwNi0jIGRlZmluZSBTTEFCX0FDQ09VTlRcXHRcXHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfQUNDT1VOVClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oPTcwOD1lbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MjgtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6NzI5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MzAtXFx0S01BTExPQ19DR1JPVVAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00Njc9c3RhdGljIGlubGluZSBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00NzMtI2VuZGlmIC8qIENPTkZJR19TV0FQICovXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDc0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00NzUtdm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oPTEzPXN0cnVjdCB2bXByZXNzdXJlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTE4LVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjE5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0yMC1cXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NDM9c3RydWN0IG1lbV9jZ3JvdXA7XFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNDQtXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6NDU6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTQ2LXZvaWQgdm1wcmVzc3VyZShnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHRyZWUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD01NT1leHRlcm4gZW51bSB2bXByZXNzdXJlX2xldmVscyB2bXByZXNzdXJlX2NhbGNfbGV2ZWwodW5zaWduZWQgbG9uZyBzY2FubmVkLFxcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNTctXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6NTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTU5LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHByaW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD01MjI9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp2bV9ldmVudF9uYW1lKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC01MzEtXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaDo1MzI6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTMzLVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtNDYwLVxcdHN0cnVjdCBzb2NrZXRcXHRcXHQqc2tfc29ja2V0O1xcbmluY2x1ZGUvbmV0L3NvY2suaDo0NjE6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbmV0L3NvY2suaC00NjItXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHQqc2tfbWVtY2c7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MjY4Nj1zdGF0aWMgaW5saW5lIGdmcF90IGdmcF9tZW1jZ19jaGFyZ2Uodm9pZClcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNjkwLVxcbmluY2x1ZGUvbmV0L3NvY2suaDoyNjkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjY5Mi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTI3MDI9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2tfdW5kZXJfbWVtb3J5X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA1LVxcbmluY2x1ZGUvbmV0L3NvY2suaDoyNzA2OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwNy1cXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0yMDM9REVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjA5LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjIxMDojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjExLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2JlZ2luLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9MjQ5PURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjU1LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjI1NjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMjU3LURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MTYwPXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbWNnKGNvbnN0IHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xNjEte1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoxNjI6I2lmZGVmIENPTkZJR19NRU1DR1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xNjMtXFx0aWYgKGMtXFx1MDAzZW9iamNnKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTUwMj1pbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUyNS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTI2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTI3LVxcdFxcdGlmIChtZW1jZ19icGZfZW5hYmxlZCgpKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU0Ny1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTQ4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTQ5LVxcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NjY9dm9pZCBicGZfbWFwX2ZyZWVfaWQoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4NS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0ODY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ4Ny1zdGF0aWMgdm9pZCBicGZfbWFwX3NhdmVfbWVtY2coc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NjM3PUJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjM4LVxcdHN0cnVjdCBmaWxlIF9fcmN1ICpleGVfZmlsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTYzOTojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NDAtXFx0c3RydWN0IHRhc2tfc3RydWN0IF9fcmN1ICpvd25lcjtcXG4tLVxcbmtlcm5lbC9leGl0LmM9NDI5PXN0YXRpYyB2b2lkIGNvcmVkdW1wX3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcXG4tLVxcbmtlcm5lbC9leGl0LmMtNDU0LVxcbmtlcm5lbC9leGl0LmM6NDU1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvZXhpdC5jLTQ1Ni0vKiBkcm9wcyB0YXNrbGlzdF9sb2NrIGlmIHN1Y2NlZWRzICovXFxuLS1cXG5rZXJuZWwvZm9yay5jPTkxND1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpkdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpvcmlnLCBpbnQgbm9kZSlcXG4tLVxcbmtlcm5lbC9mb3JrLmMtOTk4LVxcbmtlcm5lbC9mb3JrLmM6OTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvZm9yay5jLTEwMDAtXFx0dHNrLVxcdTAwM2VhY3RpdmVfbWVtY2cgPSBOVUxMO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0xMDUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtbV9jbGVhcl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTA1NC17XFxua2VybmVsL2ZvcmsuYzoxMDU1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvZm9yay5jLTEwNTYtXFx0aWYgKG1tLVxcdTAwM2Vvd25lciA9PSBwKVxcbi0tXFxua2VybmVsL2ZvcmsuYz0xMDYxPXN0YXRpYyB2b2lkIG1tX2luaXRfb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG5rZXJuZWwvZm9yay5jLTEwNjIte1xcbmtlcm5lbC9mb3JrLmM6MTA2MzojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2ZvcmsuYy0xMDY0LVxcdG1tLVxcdTAwM2Vvd25lciA9IHA7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMDgte1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTEwLVxcdGNncm91cF9wYXRoKG1lbWNnLVxcdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xcbi0tXFxubW0vZGVidWcuYz03MD1zdGF0aWMgdm9pZCBfX2R1bXBfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9kZWJ1Zy5jLTk2LVxcbm1tL2RlYnVnLmM6OTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtOTgtXFx0aWYgKGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhKVxcbi0tXFxubW0vZGVidWcuYz0xNzU9dm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vZGVidWcuYy0xODgtI2VuZGlmXFxubW0vZGVidWcuYzoxODk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtMTkwLVxcdFxcdFxcXCJvd25lciAlcHggXFxcIlxcbi0tXFxubW0vZGVidWcuYy0yMTctI2VuZGlmXFxubW0vZGVidWcuYzoyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RlYnVnLmMtMjE5LVxcdFxcdG1tLVxcdTAwM2Vvd25lcixcXG4tLVxcbm1tL2ZvbGlvLmM9MTA2MT12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9mb2xpby5jLTEwNzItXFxubW0vZm9saW8uYzoxMDczOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9mb2xpby5jLTEwNzQtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2NDI9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzQ0LVxcdFxcdFxcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzozNzQ1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9odWdlX21lbW9yeS5jLTM3NDYtXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gZm9saW8tXFx1MDAzZW1lbWNnX2RhdGE7XFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz00NT1zdGF0aWMgaW50IGh3cG9pc29uX2ZpbHRlcl9mbGFncyhzdHJ1Y3QgcGFnZSAqcClcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTY2LSAqL1xcbm1tL2h3cG9pc29uLWluamVjdC5jOjY3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9od3BvaXNvbi1pbmplY3QuYy02OC1zdGF0aWMgdTY0IGh3cG9pc29uX2ZpbHRlcl9tZW1jZztcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jPTE2Mj1zdGF0aWMgaW50IF9faW5pdCBwZm5faW5qZWN0X2luaXQodm9pZClcXG4tLVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5MS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYzoxOTI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5My1cXHRkZWJ1Z2ZzX2NyZWF0ZV91NjQoXFxcImNvcnJ1cHQtZmlsdGVyLW1lbWNnXFxcIiwgMDYwMCwgaHdwb2lzb25fZGlyLFxcbi0tXFxubW0va2ZlbmNlL2NvcmUuYz02MTE9c3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy02MzgtXFx0XFx0X19TZXRQYWdlU2xhYihwYWdlKTtcXG5tbS9rZmVuY2UvY29yZS5jOjYzOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0va2ZlbmNlL2NvcmUuYy02NDAtXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTcwNi1cXHRcXHRwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuICsgaSk7XFxubW0va2ZlbmNlL2NvcmUuYzo3MDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2tmZW5jZS9jb3JlLmMtNzA4LVxcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xcbi0tXFxubW0va2ZlbmNlL2NvcmUuYz0xMjQ3PXZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy0xMjUwLVxcbm1tL2tmZW5jZS9jb3JlLmM6MTI1MTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0va2ZlbmNlL2NvcmUuYy0xMjUyLVxcdEtGRU5DRV9XQVJOX09OKG1ldGEtXFx1MDAzZW9ial9leHRzLm9iamNnKTtcXG4tLVxcbm1tL2tmZW5jZS9rZmVuY2UuaD01OT1zdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcXG4tLVxcbm1tL2tmZW5jZS9rZmVuY2UuaC0xMDQtXFx0dTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KFxcdTAwMjZsb2NrKTtcXG5tbS9rZmVuY2Uva2ZlbmNlLmg6MTA1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9rZmVuY2Uva2ZlbmNlLmgtMTA2LVxcdHN0cnVjdCBzbGFib2JqX2V4dCBvYmpfZXh0cztcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9Mjk9c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycV9vZmYsXFxuLS1cXG5tbS9saXN0X2xydS5jLTM5LVxcbm1tL2xpc3RfbHJ1LmM6NDA6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNDEtc3RhdGljIExJU1RfSEVBRChtZW1jZ19saXN0X2xydXMpO1xcbi0tXFxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTQyMS1cXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00MjMtXFx0aWYgKCpucl90b193YWxrIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKSB7XFxuLS1cXG5tbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxuLS1cXG5tbS9saXN0X2xydS5jLTQ2MS1cXG5tbS9saXN0X2xydS5jOjQ2MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00NjMtc3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2Ny1cXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy02NjktXFx0aWYgKHNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYz02OTI9dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy03MDMtXFxubW0vbGlzdF9scnUuYzo3MDQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNzA1LVxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0yND1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTI3LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cXG5tbS9tZW1jb250cm9sLXYxLmg6Mjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wtdjEuaC0yOS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNC1cXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzItXFxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjAwLVxcdFBHUEdJTixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04MzI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg0Ny1cXG5tbS9tZW1jb250cm9sLmM6ODQ4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtODQ5LS8qXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTE2PXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTkyOC1cXG5tbS9tZW1jb250cm9sLmM6OTI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtOTMwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTA0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExMTEtXFxubW0vbWVtY29udHJvbC5jOjExMTI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xMTEzLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE3MTI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MTctXFxubW0vbWVtY29udHJvbC5jOjE3MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzE5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzM4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTc4NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSsrKSB7XFxubW0vbWVtY29udHJvbC5jOjE3ODU6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzg2LVxcdFxcdGlmIChtZW1jZ192bV9ldmVudF9zdGF0W2ldID09IFBHUEdJTiB8fFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE4MzY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODU3LVxcdFxcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX1NXQVBfTUFYXSkpO1xcbm1tL21lbWNvbnRyb2wuYzoxODU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTg1OS1cXHRlbHNlIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyB2b2lkIGNvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NzAtXFxubW0vbWVtY29udHJvbC5jOjI4NzE6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0yODcyLXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMwOTA9c3RydWN0IG9ial9jZ3JvdXAgKmdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTAwLVxcbm1tL21lbWNvbnRyb2wuYzozMTAxOiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtMzEwMi1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9rbWVtX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MjEyPW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyMzMtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyMzQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjM1LVxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6MzkuODM2NTM5MDc2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY3NjE1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBgdm1zY2FuLmNgKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSSB0aG91Z2h0IEkgcmVtZW1iZXJlZCBzZWVpbmcgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGRlZmluZWQgaW4gYG1tL3Ztc2Nhbi5jYCwgYnV0IHdpdGhvdXQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBgQ09ORklHX01FTUNHYCBzZXR0aW5nLiBUaGF0IHNlZW1zLi4uIG9kZC4gSSB3YXMgc3VyZSB0aGF0IHJlbGF0ZWQgZmVhdHVyZXMgd2VyZSBndWFyZGVkIGJ5IHRoYXQgY29uZmlndXJhdGlvbiBmbGFnLiBMZXQgbWUgcXVpY2tseSBqdW1wIGJhY2sgaW50byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGFub3RoZXIgbG9vayBhcm91bmQgbGluZSA4MDM2LiBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBkaWRuJ3QgbWlzaW50ZXJwcmV0IHRoYXQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRob3NlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWNsYWltIG1lY2hhbmlzbXMgYW5kIG1lbW9yeSBjb250cm9sIGdyb3VwcywgYW5kIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGhvdXQgdGhlIGBDT05GSUdfTUVNQ0dgIGd1YXJkIGNvdWxkIGluZGljYXRlIGEgcHJvYmxlbSBvciBhbiBvdmVyc2lnaHQgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6NDMuOTgzMzAzODcyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MDIwOlxcdFxcdHJldHVybiAwO1xcbjgwMjE6XFx0fVxcbjgwMjI6XFx0XFxuODAyMzpcXHQjZW5kaWZcXG44MDI0OlxcdFxcbjgwMjU6XFx0ZW51bSB7XFxuODAyNjpcXHRcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcXG44MDI3OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxcbjgwMjg6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcXG44MDI5OlxcdH07XFxuODAzMDpcXHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuODAzMTpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFxcXCJzd2FwcGluZXNzPSVkXFxcIn0sXFxuODAzMjpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcXFwic3dhcHBpbmVzcz1tYXhcXFwifSxcXG44MDMzOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fTlVMTCwgTlVMTCB9LFxcbjgwMzQ6XFx0fTtcXG44MDM1OlxcdFxcbjgwMzY6XFx0aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbjgwMzc6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbjgwMzg6XFx0e1xcbjgwMzk6XFx0XFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbjgwNDA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xcbjgwNDE6XFx0XFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcXG44MDQyOlxcdFxcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcXG44MDQzOlxcdFxcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcXG44MDQ0OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcXG44MDQ1OlxcdFxcbjgwNDY6XFx0XFx0aWYgKCFidWYgfHwgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcXHUwMDI2XFx1MDAyNiBwZ2RhdCkpXFxuODA0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDQ4OlxcdFxcbjgwNDk6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG44MDUwOlxcdFxcbjgwNTE6XFx0XFx0b2xkX2J1ZiA9IGJ1ZjtcXG44MDUyOlxcdFxcdG5yX3RvX3JlY2xhaW0gPSBtZW1wYXJzZShidWYsIFxcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xcbjgwNTM6XFx0XFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxcbjgwNTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODA1NTpcXHRcXG44MDU2OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuODA1NzpcXHRcXG44MDU4OlxcdFxcdHdoaWxlICgoc3RhcnQgPSBzdHJzZXAoXFx1MDAyNmJ1ZiwgXFxcIiBcXFwiKSkgIT0gTlVMTCkge1xcbjgwNTk6XFx0XFx0XFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxcbjgwNjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuODA2MTpcXHRcXHRcXHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XFxuODA2MjpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XFxuODA2MzpcXHRcXHRcXHRcXHRpZiAobWF0Y2hfaW50KFxcdTAwMjZhcmdzWzBdLCBcXHUwMDI2c3dhcHBpbmVzcykpXFxuODA2NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDY1OlxcdFxcdFxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2MgTUlOX1NXQVBQSU5FU1MgfHxcXG44MDY2OlxcdFxcdFxcdFxcdCAgICBzd2FwcGluZXNzIFxcdTAwM2UgTUFYX1NXQVBQSU5FU1MpXFxuODA2NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDY4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjgwNjk6XFx0XFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6NDMuOTgzNjQ3NjAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDgzMzUxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgTWVtb3J5IENncm91cCBGcmVlaW5nIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uICppcyogYXZhaWxhYmxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUuLi4gdGhlIG5hbWUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGRlZmluaXRlbHkgc3VnZ2VzdHMgbWVtb3J5IGNncm91cCBpbnRlcmFjdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIHNlZSBpZiBpdCdzIHRpZWQgdG8gdGhlIGBDT05GSUdfTUVNQ0dgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBLbm93aW5nIHdoZXJlIGl0J3MgZGVmaW5lZCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgc2NvcGUuIExldCdzIHN0YXJ0IGJ5IGZpbmRpbmcgaXQ7IHRoZSBjb2RlIHBhdGggaXMgYG1tL3Ztc2Nhbi5jYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDY5MzMsIGFzIEkgcmVjYWxsLiBOb3csIGxldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgaWYgbWVtb3J5IGNncm91cHMgYXJlIGVuYWJsZWQsIHdoaWNoIEkgc3VzcGVjdCBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1MDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjQ3LjYzMTk4NjQ5NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjkyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjkyMDpcXHRcXHQgKiBpZiB3ZSBkb24ndCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcXG42OTIxOlxcdFxcdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAncyBhcyB3ZWxsLiBXZSBoYWNrXFxuNjkyMjpcXHRcXHQgKiB0aGUgcHJpb3JpdHkgYW5kIG1ha2UgaXQgemVyby5cXG42OTIzOlxcdFxcdCAqL1xcbjY5MjQ6XFx0XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFxcdTAwMjZzYyk7XFxuNjkyNTpcXHRcXG42OTI2OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9lbmQoc2MubnJfcmVjbGFpbWVkLCBtZW1jZyk7XFxuNjkyNzpcXHRcXG42OTI4OlxcdFxcdCpucl9zY2FubmVkID0gc2MubnJfc2Nhbm5lZDtcXG42OTI5OlxcdFxcbjY5MzA6XFx0XFx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcXG42OTMxOlxcdH1cXG42OTMyOlxcdFxcbjY5MzM6XFx0dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG42OTM0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuNjkzNTpcXHRcXHRcXHRcXHRcXHRcXHQgICBnZnBfdCBnZnBfbWFzayxcXG42OTM2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXFxuNjkzNzpcXHRcXHRcXHRcXHRcXHRcXHQgICBpbnQgKnN3YXBwaW5lc3MpXFxuNjkzODpcXHR7XFxuNjkzOTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcXG42OTQwOlxcdFxcdHVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZztcXG42OTQxOlxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuNjk0MjpcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXFxuNjk0MzpcXHRcXHRcXHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzLFxcbjY5NDQ6XFx0XFx0XFx0LmdmcF9tYXNrID0gKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxcbjY5NDU6XFx0XFx0XFx0XFx0XFx0KEdGUF9ISUdIVVNFUl9NT1ZBQkxFIFxcdTAwMjYgfkdGUF9SRUNMQUlNX01BU0spLFxcbjY5NDY6XFx0XFx0XFx0LnJlY2xhaW1faWR4ID0gTUFYX05SX1pPTkVTIC0gMSxcXG42OTQ3OlxcdFxcdFxcdC50YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnLFxcbjY5NDg6XFx0XFx0XFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxcbjY5NDk6XFx0XFx0XFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxcbjY5NTA6XFx0XFx0XFx0Lm1heV91bm1hcCA9IDEsXFxuNjk1MTpcXHRcXHRcXHQubWF5X3N3YXAgPSAhIShyZWNsYWltX29wdGlvbnMgXFx1MDAyNiBNRU1DR19SRUNMQUlNX01BWV9TV0FQKSxcXG42OTUyOlxcdFxcdFxcdC5wcm9hY3RpdmUgPSAhIShyZWNsYWltX29wdGlvbnMgXFx1MDAyNiBNRU1DR19SRUNMQUlNX1BST0FDVElWRSksXFxuNjk1MzpcXHRcXHR9O1xcbjY5NTQ6XFx0XFx0LypcXG42OTU1OlxcdFxcdCAqIFRyYXZlcnNlIHRoZSBaT05FTElTVF9GQUxMQkFDSyB6b25lbGlzdCBvZiB0aGUgY3VycmVudCBub2RlIHRvIHB1dFxcbjY5NTY6XFx0XFx0ICogZXF1YWwgcHJlc3N1cmUgb24gYWxsIHRoZSBub2Rlcy4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0XFxuNjk1NzpcXHRcXHQgKiB0aGUgcmVjbGFpbSBkb2VzIG5vdCBiYWlsIG91dCBlYXJseS5cXG42OTU4OlxcdFxcdCAqL1xcbjY5NTk6XFx0XFx0c3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobnVtYV9ub2RlX2lkKCksIHNjLmdmcF9tYXNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6NDcuNjMyMjY3OTY1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjI0MTI1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipEZWNvZGluZyB0aGUgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIEZ1bmN0aW9uKiouICBIb2xkIG9uIGEgc2Vjb25kLCBpc24ndCB0aGF0IGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBmdW5jdGlvbiBkZWZpbmVkICppbnNpZGUqIGFuIGAjaWZkZWYgQ09ORklHX01FTUNHYCBwcmVwcm9jZXNzb3IgYmxvY2s/ICBUaGF0IHdvdWxkIG1lYW4gaXQncyBvbmx5IGFjdGl2ZSBpZiBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcywgc28gSSB3aWxsIGRvdWJsZS1jaGVjay4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA2ODkwLCBqdXN0IHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBodW5jaC4gIFVuZGVyc3RhbmRpbmcgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBjcnVjaWFsIGZvciBtZSwgZ2l2ZW4gdGhlIG1vZHVsYXIgbmF0dXJlIG9mIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBrZXkgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHMgYXJlIGludGVncmF0ZWQsIGFuZCBob3cgdGhhdCBjb2RlIHBhdGggYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MDo1MS40NTQ2ODM1ODZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY4ODA6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luKHNjLmdmcF9tYXNrLCBvcmRlciwgTlVMTCk7XFxuNjg4MTpcXHRcXG42ODgyOlxcdFxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbjY4ODM6XFx0XFxuNjg4NDpcXHRcXHR0cmFjZV9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kKG5yX3JlY2xhaW1lZCwgTlVMTCk7XFxuNjg4NTpcXHRcXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xcbjY4ODY6XFx0XFxuNjg4NzpcXHRcXHRyZXR1cm4gbnJfcmVjbGFpbWVkO1xcbjY4ODg6XFx0fVxcbjY4ODk6XFx0XFxuNjg5MDpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuNjg5MTpcXHRcXG42ODkyOlxcdC8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG42ODkzOlxcdHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuNjg5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuNjg5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LFxcbjY4OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZClcXG42ODk3OlxcdHtcXG42ODk4OlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuNjg5OTpcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MDo1MS40NTUxMTQyODZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU3MjE3MzA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTUdMUlUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbnBvaW50ZWQgdGhhdCB0aGUgY3J1Y2lhbCBtb2RpZmljYXRpb25zIGFyZSBpbmRlZWQgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19NRU1DR2AgYmxvY2suIFRoYXQgc2V0dGxlcyBpdDsgSSBuZWVkIHRvIGFkZCBgTUVNQ0dgIHRvIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBxdWVzdGlvbiB0aGVyZS5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2gncyBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCBhbmQgcmlnaHRseSBzby4gVGhlIGNoYW5nZXMgdG91Y2ggdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMg4oCTIGEgY29yZSBwaWVjZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGluY2x1ZGVzIGFsdGVyYXRpb25zIHRvIGhvdyBnZW5lcmF0aW9uIHNlcXVlbmNlcyBpbmNyZW1lbnQsIGZvbGlvIHNjYW5uaW5nIGFuZCBpc29sYXRpb24sIGFuZCB0aGUgY29uZGl0aW9ucyBmb3IgYWdpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgYWZmZWN0aW5nIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgd2hpY2ggKmRlZmluaXRlbHkqIGp1c3RpZmllcyBmdXp6aW5nLlxuXG5NeSBgRm9jdXNTeW1ib2xzYCBhcmUgY2xlYXJseSBkZWZpbmVkOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIEFuZCBmb3IgYEVuYWJsZUNvbmZpZ3NgLCBJJ2xsIGJlIGluY2x1ZGluZyBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgbm93IGBNRU1DR2AuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYHNocmlua19hbGxfbWVtb3J5YC4uLiB0aGF0J3MgcmluZ2luZyBhIGJlbGwuIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoYXQgb25lLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGFkIGl0IGluIHRoZSAnc2FmZScgbGlzdCwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBjb250ZXh0LiBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCBhZ2FpbnN0IGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA3NzMxLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGFueSBkZXBlbmRlbmNpZXMgdGhhdCB3b3VsZCBzaGlmdCB0aGlzIGludG8gdGhlICdzYWZlJyB6b25lLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMDk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NTA6NTcuMDI3MjkwMzM5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NzIwOlxcdH1cXG43NzIxOlxcdFxcbjc3MjI6XFx0I2lmZGVmIENPTkZJR19ISUJFUk5BVElPTlxcbjc3MjM6XFx0LypcXG43NzI0OlxcdCAqIFRyeSB0byBmcmVlIGBucl90b19yZWNsYWltJyBvZiBtZW1vcnksIHN5c3RlbS13aWRlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2ZcXG43NzI1OlxcdCAqIGZyZWVkIHBhZ2VzLlxcbjc3MjY6XFx0ICpcXG43NzI3OlxcdCAqIFJhdGhlciB0aGFuIHRyeWluZyB0byBhZ2UgTFJVcyB0aGUgYWltIGlzIHRvIHByZXNlcnZlIHRoZSBvdmVyYWxsXFxuNzcyODpcXHQgKiBMUlUgb3JkZXIgYnkgcmVjbGFpbWluZyBwcmVmZXJlbnRpYWxseVxcbjc3Mjk6XFx0ICogaW5hY3RpdmUgXFx1MDAzZSBhY3RpdmUgXFx1MDAzZSBhY3RpdmUgcmVmZXJlbmNlZCBcXHUwMDNlIGFjdGl2ZSBtYXBwZWRcXG43NzMwOlxcdCAqL1xcbjc3MzE6XFx0dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuNzczMjpcXHR7XFxuNzczMzpcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbjc3MzQ6XFx0XFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBucl90b19yZWNsYWltLFxcbjc3MzU6XFx0XFx0XFx0LmdmcF9tYXNrID0gR0ZQX0hJR0hVU0VSX01PVkFCTEUsXFxuNzczNjpcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxLFxcbjc3Mzc6XFx0XFx0XFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxcbjc3Mzg6XFx0XFx0XFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxcbjc3Mzk6XFx0XFx0XFx0Lm1heV91bm1hcCA9IDEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjUwOjU3LjAyODA0Njk3OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ0NDc1OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzZWN0aW9uLCBhbmQgaXQncyBkZWZpbml0ZWx5IG5lc3RsZWQgd2l0aGluIGAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OYC4gVGhhdCdzIGdvb2QgdG8ga25vdywgYnV0IEkgZG9uJ3QgdGhpbmsgSSBuZWVkIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgSElCRVJOQVRJT05gIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBnZXQgdGhlIGNvZGUgSSBuZWVkIHRvIHJ1bi4gU28sIG15IGxpc3Qgd2lsbCBqdXN0IGluY2x1ZGUgdGhvc2U6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgbGV0J3MganVzdCBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBtaXNzaW5nLiBBaCwgaGVyZSB3ZSBnbywgbG9va2luZyBhdCBgQ09ORklHX0xSVV9HRU5gLiBJIHNlZSB0aGF0IGl0IGRlcGVuZHMgb24gYE1NVWAsIGJ1dCB0aGF0J3MgYSBuZWFyIGNlcnRhaW50eSwgYXMgYE1NVWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHZpcnR1YWxseSBhbGwgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlcy4gQW5kIHRoZW4gYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGRlcGVuZHMgb24gYExSVV9HRU5gLCBzbyBpZiBgTFJVX0dFTmAgaXMgdGhlcmUsIHRoZSBlbmFibGVkIHZlcnNpb24gc2hvdWxkIGJlIHRvby4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHNob3VsZCBiZSBhbGwgSSBuZWVkLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY2xhcmlmaWVkLCBJJ20gcmVhZHkgdG8gY3JhZnQgdGhlIHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzAyMiwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo1MTowMi42NzI1MjYyOTFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjIwNDYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX3BhZ2VzXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBjaGFuZ2VzIGhvdyB0aGUgbWluaW11bSBnZW5lcmF0aW9uIHNlcXVlbmNlIGlzIGluY3JlbWVudGVkLCBob3cgZm9saW9zIGFyZSBzY2FubmVkIGFuZCBpc29sYXRlZCwgYW5kIHRoZSBjb25kaXRpb25zIGZvciBydW5uaW5nIGFnaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7ffwc[1] Phase: Succeeded StartedAt: 2026-08-01 15:51:13 +0000 UTC FinishedAt: 2026-08-01 15:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 15:51:13 +0000 UTC FinishedAt: 2026-08-01 15:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2] Phase: Succeeded StartedAt: 2026-08-01 15:51:13 +0000 UTC FinishedAt: 2026-08-01 19:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 15:51:13 +0000 UTC FinishedAt: 2026-08-01 19:37:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 15:51:13 +0000 UTC FinishedAt: 2026-08-01 15:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 15:51:13 +0000 UTC FinishedAt: 2026-08-01 15:51:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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-workflow7ffwc/series-workflow7ffwc-convert-artifact-236930261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 15:51:23 +0000 UTC FinishedAt: 2026-08-01 16:09:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 15:51:23 +0000 UTC FinishedAt: 2026-08-01 16:09:58 +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:*539d9575-09a4-49d1-9321-e3fbcfd68fa2,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-workflow7ffwc/series-workflow7ffwc-convert-artifact-236930261/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": "08ff4f74-85f7-4ea5-9e74-c35830b90c29", "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-workflow7ffwc/series-workflow7ffwc-build-action-3625643835/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 15:51:23 +0000 UTC FinishedAt: 2026-08-01 16:09:48 +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:*539d9575-09a4-49d1-9321-e3fbcfd68fa2,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-workflow7ffwc/series-workflow7ffwc-convert-artifact-236930261/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": "08ff4f74-85f7-4ea5-9e74-c35830b90c29", "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-workflow7ffwc/series-workflow7ffwc-build-action-3625643835/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:09:58 +0000 UTC FinishedAt: 2026-08-01 16:09:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:09:58 +0000 UTC FinishedAt: 2026-08-01 16:09:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:09:58 +0000 UTC FinishedAt: 2026-08-01 16:10:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:09:58 +0000 UTC FinishedAt: 2026-08-01 16:10:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-workflow7ffwc/series-workflow7ffwc-convert-artifact-30895792/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:10:08 +0000 UTC FinishedAt: 2026-08-01 16:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:10:08 +0000 UTC FinishedAt: 2026-08-01 16:12:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08ff4f74-85f7-4ea5-9e74-c35830b90c29,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-workflow7ffwc/series-workflow7ffwc-build-action-3625643835/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-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:12:31 +0000 UTC FinishedAt: 2026-08-01 16:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:12:31 +0000 UTC FinishedAt: 2026-08-01 16:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:12:31 +0000 UTC FinishedAt: 2026-08-01 16:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:12:31 +0000 UTC FinishedAt: 2026-08-01 16:31:40 +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:*539d9575-09a4-49d1-9321-e3fbcfd68fa2,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-workflow7ffwc/series-workflow7ffwc-convert-artifact-30895792/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": "81eb48a9-3014-42d9-8390-255a04ecedbd", "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-workflow7ffwc/series-workflow7ffwc-build-action-1295861932/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:12:31 +0000 UTC FinishedAt: 2026-08-01 16:31:30 +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:*539d9575-09a4-49d1-9321-e3fbcfd68fa2,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-workflow7ffwc/series-workflow7ffwc-convert-artifact-30895792/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": "81eb48a9-3014-42d9-8390-255a04ecedbd", "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-workflow7ffwc/series-workflow7ffwc-build-action-1295861932/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:31:40 +0000 UTC FinishedAt: 2026-08-01 16:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:31:40 +0000 UTC FinishedAt: 2026-08-01 16:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:31:40 +0000 UTC FinishedAt: 2026-08-01 16:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:31:40 +0000 UTC FinishedAt: 2026-08-01 16:33:23 +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:*81eb48a9-3014-42d9-8390-255a04ecedbd,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-workflow7ffwc/series-workflow7ffwc-build-action-1295861932/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-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:33:33 +0000 UTC FinishedAt: 2026-08-01 19:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:33:33 +0000 UTC FinishedAt: 2026-08-01 19:37:37 +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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"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:*08ff4f74-85f7-4ea5-9e74-c35830b90c29,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*81eb48a9-3014-42d9-8390-255a04ecedbd,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-workflow7ffwc/series-workflow7ffwc-build-action-3625643835/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-workflow7ffwc/series-workflow7ffwc-build-action-1295861932/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:33:33 +0000 UTC FinishedAt: 2026-08-01 16:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:33:33 +0000 UTC FinishedAt: 2026-08-01 16:33:47 +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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"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-workflow7ffwc/series-workflow7ffwc-convert-artifact-338293545/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:33:33 +0000 UTC FinishedAt: 2026-08-01 16:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:33:33 +0000 UTC FinishedAt: 2026-08-01 16:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:33:34 +0000 UTC FinishedAt: 2026-08-01 16:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:33:57 +0000 UTC FinishedAt: 2026-08-01 19:37:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ffwc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["try_to_free_pages","try_to_free_mem_cgroup_pages","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cf84da3838f1613deed700ddfb033163b28106","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"8f123cc5-1eb3-4cd3-861b-89f025e9ac3e","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-01 16:33:57 +0000 UTC FinishedAt: 2026-08-01 19:37:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08ff4f74-85f7-4ea5-9e74-c35830b90c29,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*81eb48a9-3014-42d9-8390-255a04ecedbd,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-workflow7ffwc/series-workflow7ffwc-build-action-3625643835/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-workflow7ffwc/series-workflow7ffwc-build-action-1295861932/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-workflow7ffwc/series-workflow7ffwc-convert-artifact-338293545/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,}