Name: series-workflow8vmvn Phase: Succeeded StartedAt: 2026-08-12 12:58:14 +0000 UTC FinishedAt: 2026-08-12 15:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[0] Phase: Succeeded StartedAt: 2026-08-12 12:58:14 +0000 UTC FinishedAt: 2026-08-12 13:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 12:58:14 +0000 UTC FinishedAt: 2026-08-12 13:03:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "e0f6b4a4-8640-4718-b237-b1b29362bbd4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kvm_xen_set_evtchn_fast", "kvm_arch_set_irq_inatomic" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvY2tpbmcgaXNzdWUgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgcGFyYW1ldGVyIHRvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgpYC4gV2hlbiBjYWxsZWQgaW4gYW4gYXRvbWljIGNvbnRleHQsIGl0IG5vdyB1c2VzIGByZWFkX3RyeWxvY2soKWAgaW5zdGVhZCBvZiBgcmVhZF9sb2NrX2lycXNhdmUoKWAgdG8gcHJldmVudCBkZWFkbG9ja3Mgb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgd2hpY2ggYXJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSB0byBoYW5kbGUgYXRvbWljIGNvbnRleHRzIHByb3Blcmx5IGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIGZsYWcgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YC4gVGhpcyBhZmZlY3RzIGlycWZkIGluamVjdGlvbiBhbmQgWGVuIHRpbWVyIGNhbGxiYWNrcywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YTkwOTc0NTBkNGU2NTQxNDA5MzkyZTFjNWY5YWQ0NjdhOGI5MmRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTM6MDA6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jXG5pbmRleCBjYjhhYzRiOWIwZDc0Li45YWVmMTE1MjkzYjRiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2lycS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaXJxLmNcbkBAIC0yNjcsNyAmIzQzOzI2Nyw3IEBAIGludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuIFx0XHRpZiAoIWxldmVsKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbi1cdFx0cmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUtXHUwMDNleGVuX2V2dGNobiwga3ZtKTtcbiYjNDM7XHRcdHJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLVx1MDAzZXhlbl9ldnRjaG4sIGt2bSwgdHJ1ZSk7XG4gI2VuZGlmXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDY5NGIzMWMxZmNjOWEuLjE0OTg4YWU3MTBhMmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhlbl90aW1lcl9jYWxsYmFjayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gXHRlLnBvcnQgPSB2Y3B1LVx1MDAzZWFyY2gueGVuLnRpbWVyX3ZpcnE7XG4gXHRlLnByaW9yaXR5ID0gS1ZNX0lSUV9ST1VUSU5HX1hFTl9FVlRDSE5fUFJJT18yTEVWRUw7XG4gXG4tXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUsIHZjcHUtXHUwMDNla3ZtKTtcbiYjNDM7XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUsIHZjcHUtXHUwMDNla3ZtLCB0cnVlKTtcbiBcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnhlbi50aW1lcl9leHBpcmVzID0gMDtcbiBcdFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xuQEAgLTE3OTIsNyAmIzQzOzE3OTIsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuICAqIEl0IGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20ga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYygpLCB3aGVyZSB0aGVcbiAgKiBvbmx5IGNoZWNrIG9uIGl0cyByZXR1cm4gdmFsdWUgaXMgYSBjb21wYXJpc29uIHdpdGggLUVXT1VMREJMT0NLJiMzOTsuXG4gICovXG4taW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpXG4ge1xuIFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG5AQCAtMTgxOSw3ICYjNDM7MTgxOSwxNSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFxuLVx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoaW5fYXRvbWljKSB7XG4mIzQzO1x0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0XHRpZiAoIXJlYWRfdHJ5bG9jayhcdTAwMjZncGMtXHUwMDNlbG9jaykpIHtcbiYjNDM7XHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0MztcdFx0XHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHR9XG4gXHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKVxuIFx0XHRnb3RvIG91dF9yY3U7XG4gXG5AQCAtMTg1Myw3ICYjNDM7MTg2MSwxOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGdwYyA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlO1xuIFxuLVx0XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKGluX2F0b21pYykge1xuJiM0MztcdFx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0XHRcdGlmICghcmVhZF90cnlsb2NrKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKSkge1xuJiM0MztcdFx0XHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpKVxuJiM0MztcdFx0XHRcdFx0a2lja192Y3B1ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogQ291bGQgbm90IGFjY2VzcyB0aGUgdmNwdV9pbmZvLiBTZXQgdGhlIGJpdCBpbi1rZXJuZWxcbkBAIC0xODg4LDYgJiM0MzsxOTA3LDcgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcbiAgb3V0X3JjdTpcbiBcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7IG91dF9yY3Vfbm9fbG9jazpcbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4gXG4gXHRpZiAoa2lja192Y3B1KSB7XG5AQCAtMTkwMyw3ICYjNDM7MTkyMyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGJvb2wgbW1fYm9ycm93ZWQgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbi1cdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG4mIzQzO1x0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtLCBmYWxzZSk7XG4gXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG5AQCAtMTkzNyw3ICYjNDM7MTk1Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XG4gXHRcdGludCBpZHg7XG4gXG4tXHRcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG4mIzQzO1x0XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbiBcdFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcbiBcdFx0XHRicmVhaztcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcbmluZGV4IDU5ZTYxMjhhN2JkM2MuLjEzZDM0YTA2ZjMyNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uaFxuQEAgLTMyLDcgJiM0MzszMiw3IEBAIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7XG4gdm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSxcbi1cdFx0XHQgICAgc3RydWN0IGt2bSAqa3ZtKTtcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpO1xuIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0IHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuIFx0XHRcdCBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gWGVuIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnkgdG8gaGFuZGxlIGF0b21pYyBjb250ZXh0cyBwcm9wZXJseSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBmbGFnIHRvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAuIFRoaXMgYWZmZWN0cyBpcnFmZCBpbmplY3Rpb24gYW5kIFhlbiB0aW1lciBjYWxsYmFja3MsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gS1ZNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGE5MDk3NDUwZDRlNjU0MTQwOTM5MmUxYzVmOWFkNDY3YThiOTJkYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEzOjAwOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jCmluZGV4IGNiOGFjNGI5YjBkNzQuLjlhZWYxMTUyOTNiNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaXJxLmMKQEAgLTI2Nyw3ICYjNDM7MjY3LDcgQEAgaW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCiAJCWlmICghbGV2ZWwpCiAJCQlyZXR1cm4gLTE7CiAKLQkJcmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KCZhbXA7ZS0mZ3Q7eGVuX2V2dGNobiwga3ZtKTsKJiM0MzsJCXJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgmYW1wO2UtJmd0O3hlbl9ldnRjaG4sIGt2bSwgdHJ1ZSk7CiAjZW5kaWYKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA2OTRiMzFjMWZjYzlhLi4xNDk4OGFlNzEwYTJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKQogCWUucG9ydCA9IHZjcHUtJmd0O2FyY2gueGVuLnRpbWVyX3ZpcnE7CiAJZS5wcmlvcml0eSA9IEtWTV9JUlFfUk9VVElOR19YRU5fRVZUQ0hOX1BSSU9fMkxFVkVMOwogCi0JcmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgmYW1wO2UsIHZjcHUtJmd0O2t2bSk7CiYjNDM7CXJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoJmFtcDtlLCB2Y3B1LSZndDtrdm0sIHRydWUpOwogCWlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHsKIAkJdmNwdS0mZ3Q7YXJjaC54ZW4udGltZXJfZXhwaXJlcyA9IDA7CiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKQEAgLTE3OTIsNyAmIzQzOzE3OTIsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogICogSXQgaXMgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKCksIHdoZXJlIHRoZQogICogb25seSBjaGVjayBvbiBpdHMgcmV0dXJuIHZhbHVlIGlzIGEgY29tcGFyaXNvbiB3aXRoIC1FV09VTERCTE9DSyYjMzk7LgogICovCi1pbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO2ludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKQogewogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKQEAgLTE4MTksNyAmIzQzOzE4MTksMTUgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAogCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKIAotCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWlmIChpbl9hdG9taWMpIHsKJiM0MzsJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCWlmICghcmVhZF90cnlsb2NrKCZhbXA7Z3BjLSZndDtsb2NrKSkgewomIzQzOwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0MzsJCQlnb3RvIG91dF9yY3Vfbm9fbG9jazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CX0KIAlpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKQogCQlnb3RvIG91dF9yY3U7CiAKQEAgLTE4NTMsNyAmIzQzOzE4NjEsMTggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlncGMgPSAmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZTsKIAotCQlyZWFkX2xvY2tfaXJxc2F2ZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKGluX2F0b21pYykgewomIzQzOwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCQlpZiAoIXJlYWRfdHJ5bG9jaygmYW1wO2dwYy0mZ3Q7bG9jaykpIHsKJiM0MzsJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwKJiM0MzsJCQkJCQkgICAgICAmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkpCiYjNDM7CQkJCQlraWNrX3ZjcHUgPSB0cnVlOwomIzQzOwkJCQlnb3RvIG91dF9yY3Vfbm9fbG9jazsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl9CiAJCWlmICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHsKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgYWNjZXNzIHRoZSB2Y3B1X2luZm8uIFNldCB0aGUgYml0IGluLWtlcm5lbApAQCAtMTg4OCw2ICYjNDM7MTkwNyw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAKICBvdXRfcmN1OgogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtncGMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzsgb3V0X3JjdV9ub19sb2NrOgogCXNyY3VfcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O3NyY3UsIGlkeCk7CiAKIAlpZiAoa2lja192Y3B1KSB7CkBAIC0xOTAzLDcgJiM0MzsxOTIzLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCWJvb2wgbW1fYm9ycm93ZWQgPSBmYWxzZTsKIAlpbnQgcmM7CiAKLQlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pOwomIzQzOwlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTsKIAlpZiAocmMgIT0gLUVXT1VMREJMT0NLKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE5MzcsNyAmIzQzOzE5NTcsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwogCQlpbnQgaWR4OwogCi0JCXJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7CiYjNDM7CQlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTsKIAkJaWYgKHJjICE9IC1FV09VTERCTE9DSykKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmgKaW5kZXggNTllNjEyOGE3YmQzYy4uMTNkMzRhMDZmMzI1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uaApAQCAtMzIsNyAmIzQzOzMyLDcgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLAotCQkJICAgIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CQkJICAgIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpOwogaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwKIAkJCSBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKIAkJCSBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFhlbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIHdpdGhpbiB0aGUgS1ZNIFhlbiBlbXVsYXRpb24gY29kZS4gVGhleSYjMzk7cmUgYWRkaW5nIGEgYm9vbGVhbiwgYGluX2F0b21pY2AsIHdoaWNoIGlzIGEgY2xldmVyIG1vdmUuIEJhc2ljYWxseSwgaWYgd2UmIzM5O3JlIGluIGFuIGF0b21pYyBjb250ZXh0LCBsaWtlIHdpdGhpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciBvciBhIHRpbWVyIGNhbGxiYWNrLCB3ZSBuZWVkIHRvIGJlICp2ZXJ5KiBjYXJlZnVsIGFib3V0IGxvY2tpbmcuIFRoZXkmIzM5O3JlIHVzaW5nIGByZWFkX3RyeWxvY2tgIGluc3RlYWQgb2YgYHJlYWRfbG9ja19pcnFzYXZlYCB3aGVuIGBpbl9hdG9taWNgIGlzIHNldCB0byBhdm9pZCBzbGVlcGluZyBvciwgZXZlbiB3b3JzZSwgY2F1c2luZyBhIGRlYWRsb2NrLiBTbWFydC4KClRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgYXMgdGhhdCYjMzk7cyBleHBsaWNpdGx5IGFuIGF0b21pYyBjb250ZXh0LCBhbmQgYWxzbyBmcm9tIGB4ZW5fdGltZXJfY2FsbGJhY2tgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aW1lcnMgY2FuIHRyaWdnZXIgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQsIGFuZCBhbHNvIHRoZSBvcmlnaW5hbCBga3ZtX3hlbl9zZXRfZXZ0Y2huYC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgdGFyZ2V0ZWQgYXQgdGhlIEtWTSBYZW4gZW11bGF0aW9uIGxheWVyLCBzbyBpdCYjMzk7cyBhIGRpcmVjdCBjb25jZXJuIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgS1ZNLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGFsdGVyaW5nIGxvY2tpbmcgYmVoYXZpb3Igd2l0aGluIGFuIGVudmlyb25tZW50IHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSBhIGd1ZXN0LCBpdOKAmXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByb2NrIHNvbGlkLgoKTGV0IG1lIGdvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBhY3R1YWxseSBjb25maWd1cmUgdGhpcyBLVk0gWGVuIGVtdWxhdGlvbi4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgYXJjaC94ODYva3ZtL0tjb25maWdgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLVk1fWEVOIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uIGlzIGBLVk1fWEVOYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgaW50ZXJlc3RpbmcgY2hvaWNlLiYjMzQ7IEdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXMsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gYXNzZXNzICp3aHkqIHRoaXMgY29uZmlnIGlzIHVzZWQgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBhcmUgYWZmZWN0ZWQuIFdoYXQgYXJlIHRoZSBzdXBwb3J0aW5nIGNvbXBvbmVudHMgbmVjZXNzYXJ5IGZvciBgS1ZNX1hFTmAgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBUaGlzIGNvdWxkIHJhbmdlIGZyb20gc3BlY2lmaWMga2VybmVsIG1vZHVsZXMsIHRvIHBhcnRpY3VsYXIgaGFyZHdhcmUgc3VwcG9ydCByZXF1aXJlbWVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9YRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTS1YZW4gTG9ja2luZyBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL2lycS5jYCwgYGFyY2gveDg2L2t2bS94ZW4uY2AsIGFuZCBgYXJjaC94ODYva3ZtL3hlbi5oYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgYSBtb2RlcmF0ZWx5IHNpZ25pZmljYW50IGNoYW5nZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gS1ZNIGFuZCB0aGUgWGVuIGh5cGVydmlzb3IuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBub3cgdGFraW5nIGFuIGBpbl9hdG9taWNgIGJvb2xlYW4uCgpUaGUgcmVhbCBrZXkgaGVyZSBpcyBob3cgdGhlIGxvY2tpbmcgaGFzIGJlZW4gYWx0ZXJlZC4gIFVzaW5nIGBsb2NhbF9pcnFfc2F2ZWAgYW5kIGByZWFkX3RyeWxvY2tgICppbnN0ZWFkIG9mKiBgcmVhZF9sb2NrX2lycXNhdmVgIHdoZW4gYGluX2F0b21pY2AgaXMgdHJ1ZSBpcyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGxvY2tpbmcgc2VtYW50aWNzLiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZyB0byBleHBsb3JlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB1bmRlciBsb2FkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBmdW5jdGlvbiBpcyB1c2VkLiBJJiMzOTttIHNlZWluZyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgKGluIGBhcmNoL3g4Ni9rdm0vaXJxLmNgKSBhbmQgYHhlbl90aW1lcl9jYWxsYmFja2AgKGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgKSB3aXRoIGBpbl9hdG9taWMgPSB0cnVlYCwgYW5kIGZyb20gYGt2bV94ZW5fc2V0X2V2dGNobmAgd2l0aCBgaW5fYXRvbWljID0gZmFsc2VgLiBHb3QgaXQuCgpUaGlzIGRlcGVuZHMgb24gdGhlIGBLVk1fWEVOYCBjb25maWcgb3B0aW9uIOKAkyB0aGF0JiMzOTtzIGV4cGVjdGVkLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIGZvY3VzIHN5bWJvbHMuICBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGlzIHRoZSBoZWFydCBvZiBpdCwgb2J2aW91c2x5LiAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGNhbGxzIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAuICBga3ZtX3hlbl9zZXRfZXZ0Y2huYCBpcyB3b3J0aCBhIGxvb2sgYXMgd2VsbCBhcyBpdCBpbnRlcmFjdHMgd2l0aCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGV4cG9ydGVkIHN5bWJvbHMgb3Igc3RhdGljLiAqQ2hlY2tzKi4gIE9rYXksICBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGlzICpub3QqIHN0YXRpYyDigJMgZGVmaW5lZCBpbiBgeGVuLmNgIGFuZCBkZWNsYXJlZCBpbiBgeGVuLmhgLiBHb29kLiBJIG5lZWRlZCB0byBjaGVjay4KCkFscmlnaHQsICBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaXMgbm90IHN0YXRpYywgc28gdGhhdCBpcyBmaW5lLiBDaGVja2luZyBga3ZtX3hlbl9zZXRfZXZ0Y2huYCAuLi4gdGhhdCBvbmUgKmlzKiBzdGF0aWMuIFNhbWUgd2l0aCBgeGVuX3RpbWVyX2NhbGxiYWNrYC4KClNvIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGFyZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgS1ZNX1hFTmAuICBZZXAsIGl0IGRlcGVuZHMgb24gYEtWTWAsIHdoaWNoIGlzIGV4cGVjdGVkLiAgSSYjMzk7bGwgc2NhbiB0aHJvdWdoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AganVzdCB0byBjb25maXJtIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCB0aGUgZGVwZW5kZW5jaWVzIG9yIGV4dHJhIGNvbmZpZyBmbGFncyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1hFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gWGVuIEV2ZW50IENoYW5uZWwgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIHdpdGhpbiB0aGUgS1ZNIFhlbiBlbXVsYXRpb24gY29kZSwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGFuIGBpbl9hdG9taWNgIGJvb2xlYW4uIFdoZW4gdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLCBpdCYjMzk7cyB1dGlsaXppbmcgYGxvY2FsX2lycV9zYXZlYCBhbmQgYHJlYWRfdHJ5bG9ja2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJZiBpdCYjMzk7cyBmYWxzZSwgdGhlIGNvZGUgZ29lcyB3aXRoIGByZWFkX2xvY2tfaXJxc2F2ZWAuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgbG9ja2luZyBzdHJhdGVneSB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBLVk0sIEkga25vdyB0aGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRob3NlIEtWTSBpb2N0bHMg4oCTIHRoZSBvbmVzIGxpa2UgYEtWTV9JUlFfUk9VVElOR19YRU5fRVZUQ0hOYCwgc28gaXQmIzM5O3MgcG90ZW50aWFsbHkgZXhwb3NlZC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBLVk1fWEVOYCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaGVyZSwgYXMgeW91JiMzOTtkIGV4cGVjdC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGFuZCBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgaXRzZWxmIGlzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3MgYWxzbyBjYWxsZWQgZnJvbSBvdGhlciBmdW5jdGlvbnMgbGlrZSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGB4ZW5fdGltZXJfY2FsbGJhY2tgIGFuZCBhbHNvIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGt2bV94ZW5fc2V0X2V2dGNobmAsIHdoaWNoIEkgc2hvdWxkIGxvb2sgYXQgbW9yZSBjbG9zZWx5LiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyB0aGlzLiBMZXQgbWUgc2VlLi4uIGBrdm1feGVuX3NldF9ldnRjaG5gIGFuZCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2Agc2VlbSBsaWtlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMsIGFuZCBwb3RlbnRpYWxseSBgeGVuX3RpbWVyX2NhbGxiYWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhvc2UgaXMgdGhlIGJlc3QgdG8gdGFyZ2V0LiBGaXJzdCwgSSB3aWxsIGxvb2sgYXQgYGt2bV94ZW5fc2V0X2V2dGNobmAuIE5vdywgaXMgaXQgc3RhdGljPyBMZXQgbWUgZmluZCB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ZW4uYy0zMS1cbmFyY2gveDg2L2t2bS94ZW4uYzozMjpzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYva3ZtL3hlbi5jLTMzLXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTA4PXZvaWQga3ZtX3hlbl9pbmplY3RfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTExNy1cbmFyY2gveDg2L2t2bS94ZW4uYzoxMTg6XHRcdGt2bV94ZW5fc2V0X2V2dGNobihcdTAwMjZlLCB2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTE5LVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xMjU9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhlbl90aW1lcl9jYWxsYmFjayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTEzOS1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNDA6XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUsIHZjcHUtXHUwMDNla3ZtLCB0cnVlKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNDEtXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTE3NzQ9c3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc5NC0gKi9cbmFyY2gveDg2L2t2bS94ZW4uYzoxNzk1OmludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTYte1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTIwLVxuYXJjaC94ODYva3ZtL3hlbi5jOjE5MjE6c3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjIte1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTI1LVxuYXJjaC94ODYva3ZtL3hlbi5jOjE5MjY6XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTI3LVx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk1OS1cbmFyY2gveDg2L2t2bS94ZW4uYzoxOTYwOlx0XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTYxLVx0XHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xOTc2PXN0YXRpYyBpbnQgZXZ0Y2huX3NldF9mbihzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTgxLVxuYXJjaC94ODYva3ZtL3hlbi5jOjE5ODI6XHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huKFx1MDAyNmUtXHUwMDNleGVuX2V2dGNobiwga3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTgzLX1cbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjAzOT1pbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKnV4ZSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA1NS1cbmFyY2gveDg2L2t2bS94ZW4uYzoyMDU2Olx0cmV0ID0ga3ZtX3hlbl9zZXRfZXZ0Y2huKFx1MDAyNmUsIGt2bSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA1Ny1cbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjI4NT1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMDgtXHRpZiAoZXZ0Y2huZmQtXHUwMDNlZGVsaXZlci5wb3J0LnBvcnQpIHtcbmFyY2gveDg2L2t2bS94ZW4uYzoyMzA5Olx0XHRpbnQgcmV0ID0ga3ZtX3hlbl9zZXRfZXZ0Y2huKFx1MDAyNmV2dGNobmZkLVx1MDAzZWRlbGl2ZXIucG9ydCwgdmNwdS1cdTAwM2Vrdm0pO1xuYXJjaC94ODYva3ZtL3hlbi5jLTIzMTAtXHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5PVENPTk4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBYZW4gRXZlbnQgQ2hhbm5lbCBhbmQgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBzeW1ib2xzOiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGFuZCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgaW1wb3J0YW50IGFuZCBhY2Nlc3NpYmxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEtWTS9YZW4gaW50ZXJhY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZWlyIGluY2x1c2lvbi4KCkl0IGxvb2tzIGxpa2UgYm90aCBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFyZSBjb25maWd1cmVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcy4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB3aGV0aGVyIGBLVk1gIGFsb25lIGlzIHN1ZmZpY2llbnQsIG9yIGlmIGBLVk1fWDg2YCBvciBhbm90aGVyIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb24gaXMgcmVxdWlyZWQsIGFzIHdlbGwuIFNpbmNlIGBLVk1fWEVOYCBpcyBzcGVjaWZpY2FsbHkgZGVkaWNhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIGBLVk1gIGlzIHRoZSBiYXNlLCBJJiMzOTtsbCByZXR1cm4gYm90aCBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFzIHRoZSBkZXRlcm1pbmluZyBmYWN0b3JzLgoKTm93LCBqdXN0IHRvIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgZml0cyBpbiwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgaXRzIGxvY2F0aW9uIGluIGBhcmNoL3g4Ni9rdm0vaXJxLmNgIHRvIGNvbmZpcm0gbXkgbWVudGFsIG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lycS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pcnEuYz0yMjU9aW50IGt2bV9zZXRfbXNpKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gveDg2L2t2bS9pcnEuYy0yNDAtXG5hcmNoL3g4Ni9rdm0vaXJxLmM6MjQxOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuYXJjaC94ODYva3ZtL2lycS5jLTI0Mi1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTkyPWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xMDgtLypcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjEwOTogKiBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljOiBmYXN0LXBhdGggZm9yIGlycWZkIGluamVjdGlvblxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTEwLSAqL1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM6MTExOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTEyLVx0XHRcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaXJxZmQuYz00ND1pbnQga3ZtX3NldF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaXJxZmQuYy02OS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pcnFmZC5jOjcwOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuYXJjaC9sb29uZ2FyY2gva3ZtL2lycWZkLmMtNzEtXHRcdHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jPTEwMjI9aW50IGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIHUzMiBpcnEsIGludCBsZXZlbCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTEwMzItXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jOjEwMzM6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmlycV9lbnRyeSxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMtMTAzNC1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmM9MTE5PWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMTQ5LVxuYXJjaC9yaXNjdi9rdm0vdm0uYzoxNTA6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTE1MS1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zNjkzPWludCBfX2luaXQga3ZtX3MzOTBfZ2liX2luaXQodTggbmlzYylcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDgtLypcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc0OTogKiBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljOiBmYXN0LXBhdGggZm9yIGlycWZkIGluamVjdGlvblxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzUwLSAqL1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzUxOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzUyLVx0XHRcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmM9MjI1PWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjQwLVxuYXJjaC94ODYva3ZtL2lycS5jOjI0MTppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbmFyY2gveDg2L2t2bS9pcnEuYy0yNDItXHRcdFx0ICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xNzc0PXN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTEtICpcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzkyOiAqIEl0IGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20ga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYygpLCB3aGVyZSB0aGVcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzkzLSAqIG9ubHkgY2hlY2sgb24gaXRzIHJldHVybiB2YWx1ZSBpcyBhIGNvbXBhcmlzb24gd2l0aCAtRVdPVUxEQkxPQ0smIzM5Oy5cbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTgwND1pbnQga3ZtX3NldF9tc2koc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmlycV9lbnRyeSwgc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE4MDUtXHRcdGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE4MDY6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTgwNy1cdFx0XHQgICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCxcbi0tXG52aXJ0L2t2bS9ldmVudGZkLmM9MTc5PXN0YXRpYyB2b2lkIGlycWZkX2RlYWN0aXZhdGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKVxuLS1cbnZpcnQva3ZtL2V2ZW50ZmQuYy0xODktXG52aXJ0L2t2bS9ldmVudGZkLmM6MTkwOmludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhcbnZpcnQva3ZtL2V2ZW50ZmQuYy0xOTEtXHRcdFx0XHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqaXJxLFxuLS1cbnZpcnQva3ZtL2V2ZW50ZmQuYz0yMDM9aXJxZmRfd2FrZXVwKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSlcbi0tXG52aXJ0L2t2bS9ldmVudGZkLmMtMjM1LVx0XHRpZiAodW5saWtlbHkoIWlycWZkX2lzX2FjdGl2ZShpcnFmZCkpIHx8XG52aXJ0L2t2bS9ldmVudGZkLmM6MjM2Olx0XHQgICAga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhcdTAwMjZpcnEsIGt2bSxcbnZpcnQva3ZtL2V2ZW50ZmQuYy0yMzctXHRcdFx0XHRcdCAgICAgIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwgMSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX3NldF9ldnRjaG5fZmFzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmM9MTI1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xMzktXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQwOlx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLCB2Y3B1LVx1MDAzZWt2bSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQxLVx0aWYgKHJjICE9IC1FV09VTERCTE9DSykge1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xNzc0PXN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTQtICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTc5NTppbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtLCBib29sIGluX2F0b21pYylcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzk2LXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTkyMT1zdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjUtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTkyNjpcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjctXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTU5LVxuYXJjaC94ODYva3ZtL3hlbi5jOjE5NjA6XHRcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE5NjEtXHRcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODEzCgkJCQkJCQlvdXRwdXQ6IDEyNwoJCQkJCQkJdGhvdWdodHM6IDk5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gWGVuIEV2ZW50IENoYW5uZWwgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBJIHNlZSBpdCYjMzk7cyBtb2RpZnlpbmcgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlIGNvcmUgY2hhbmdlIGludHJvZHVjZXMgYSBgYm9vbGVhbiBpbl9hdG9taWNgIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGxvY2tpbmcgc3RyYXRlZ3kuIElmIGBpbl9hdG9taWNgIGlzIHRydWUsIHdlJiMzOTtyZSB1c2luZyBhIHRyeS1sb2NrIGFwcHJvYWNoOiBgbG9jYWxfaXJxX3NhdmVgIHdpdGggYHJlYWRfdHJ5bG9ja2AsIGZhbGxpbmcgYmFjay9iYWlsaW5nIGlmIHRoZSBsb2NrIGZhaWxzLiBJZiBgaW5fYXRvbWljYCBpcyBmYWxzZSwgaXQmIzM5O3MgdGhlIG1vcmUgc3RhbmRhcmQgYHJlYWRfbG9ja19pcnFzYXZlYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEtWTSBYZW4gZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgaGFuZGxpbmcgYXRvbWljIGNvbnRleHRzIGdyYWNlZnVsbHkuCgpJdCBhcHBlYXJzIHRoaXMgYWZmZWN0cyBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGNhbGxlZCBmcm9tIGBpcnFmZF93YWtldXBgLCBhbmQgYWxzbyBgeGVuX3RpbWVyX2NhbGxiYWNrYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBhbiBocnRpbWVyIGNvbnRleHQuIFRoZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGxpa2VseSBhdm9pZGluZyBkZWFkbG9ja3Mgb3IgbG9ja2RlcCB3YXJuaW5ncyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdW5zYWZlIGxvY2sgdXNhZ2Ugd2l0aGluIHRoZXNlIGF0b21pYyBjb250ZXh0cy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0aGUgZml4LgoKVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgYEtWTWAgYW5kIGBLVk1fWEVOYC4KCk15IHByaW1hcnkgZm9jdXMgaXMgbm93IG9uIHRoZXNlIHN5bWJvbHM6IGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYGt2bV94ZW5fc2V0X2V2dGNobmAgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLgoKSSYjMzk7bGwgZG91YmxlIGNoZWNrIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCBpbiBgYXJjaC94ODYva3ZtL2lycS5jYC4gQWgsIHRoZXJlIGl0IGlzOiBpdCBjYWxscyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoJmFtcDtlLSZndDt4ZW5fZXZ0Y2huLCBrdm0sIHRydWUpYC4gU28gdGhhdCBjb25maXJtcyB0aGUgYXRvbWljIGNvbnRleHQgdXNhZ2UuCgpUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgS1ZNIFhlbiBldmVudCBjaGFubmVscyBhcmUgZGVsaXZlcmVkLCBkaXJlY3RseSBpbXBhY3RpbmcgaG93IGludGVycnVwdHMgYXJlIGluamVjdGVkIGFuZCB0aW1lcnMgYXJlIGhhbmRsZWQsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzeXN0ZW0gc3RhYmlsaXR5LgoKQ29uZmlncyBhZ2FpbjogYEtWTWAsIGBLVk1fWEVOYC4KCkZvY3VzIFN5bWJvbHMgKGFnYWluKTogYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huYCwgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLgoKSG9sZCBvbiwgYHhlbl90aW1lcl9jYWxsYmFja2AgaXMgc3RhdGljLiBTaW5jZSB0aGUgcHJvbXB0IHByZWZlcnMgbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgaXQgbG9va3MgbGlrZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGlzIG5vdCBzdGF0aWMgKGl0JiMzOTtzIGV4cG9ydGVkIGluIGB4ZW4uaGApLiBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaXMgYWxzbyBub3Qgc3RhdGljLiBga3ZtX3hlbl9zZXRfZXZ0Y2huYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdoeSBpdCBnZXRzIGxlc3MgYXR0ZW50aW9uLiBBbmQsIHRoZXJlIGlzIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAgd2hpY2ggaXMgbm90IHN0YXRpYyBhbmQgaXMgcmVsZXZhbnQuIExldCBtZSBjaGVjayBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgIGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgIHJlYWwgcXVpY2suIExvb2tzIGxpa2UgaXQgY2FsbHMgYGt2bV94ZW5fc2V0X2V2dGNobmAuIExldCYjMzk7cyBjaGVjayBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaW4gYGFyY2gveDg2L2t2bS9pcnEuY2AgYWdhaW4ganVzdCB0byBiZSBzdXJlLgoKSSYjMzk7bGwgc3RpY2sgd2l0aCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGFuZCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgYXMgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGZvciBub3cuCgpDb25maWdzIG9uZSBsYXN0IHRpbWU6IGBLVk1gLCBgS1ZNX1hFTmAuCgpEZXBlbmRlbmN5IGNoZWNrLi4uIGBLVk1fWEVOYCAqZG9lcyogZGVwZW5kIG9uIGBLVk1gLCBldmVuIGlmIGl0IGlzbiYjMzk7dCBleHBsaWNpdGx5IHN0YXRlZCBpbiB0aGF0IHNob3J0IGdyZXAgb3V0cHV0LiBMZXQgbWUgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBjb25maXJtLiBZZXAsIHVuZGVyIGBpZiBWSVJUVUFMSVpBVElPTmAuLi5pdCBkb2VzIGluZGVlZC4KCkFscmlnaHQsIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV94ZW5fc2V0X2V2dGNobl9mYXN0JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IHRvIGhhbmRsZSBhdG9taWMgY29udGV4dHMgcHJvcGVybHkgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgZmxhZyB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLiBUaGlzIGFmZmVjdHMgaXJxZmQgaW5qZWN0aW9uIGFuZCBYZW4gdGltZXIgY2FsbGJhY2tzLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3NldF9ldnRjaG5fZmFzdCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSB0byBoYW5kbGUgYXRvbWljIGNvbnRleHRzIHByb3Blcmx5IGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIGZsYWcgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YC4gVGhpcyBhZmZlY3RzIGlycWZkIGluamVjdGlvbiBhbmQgWGVuIHRpbWVyIGNhbGxiYWNrcywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBwYXJhbWV0ZXIgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KClgLiBXaGVuIGNhbGxlZCBpbiBhbiBhdG9taWMgY29udGV4dCwgaXQgbm93IHVzZXMgYHJlYWRfdHJ5bG9jaygpYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZSgpYCB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGE5MDk3NDUwZDRlNjU0MTQwOTM5MmUxYzVmOWFkNDY3YThiOTJkYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEzOjAwOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jCmluZGV4IGNiOGFjNGI5YjBkNzQuLjlhZWYxMTUyOTNiNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaXJxLmMKQEAgLTI2Nyw3ICYjNDM7MjY3LDcgQEAgaW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCiAJCWlmICghbGV2ZWwpCiAJCQlyZXR1cm4gLTE7CiAKLQkJcmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KCZhbXA7ZS0mZ3Q7eGVuX2V2dGNobiwga3ZtKTsKJiM0MzsJCXJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgmYW1wO2UtJmd0O3hlbl9ldnRjaG4sIGt2bSwgdHJ1ZSk7CiAjZW5kaWYKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA2OTRiMzFjMWZjYzlhLi4xNDk4OGFlNzEwYTJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKQogCWUucG9ydCA9IHZjcHUtJmd0O2FyY2gueGVuLnRpbWVyX3ZpcnE7CiAJZS5wcmlvcml0eSA9IEtWTV9JUlFfUk9VVElOR19YRU5fRVZUQ0hOX1BSSU9fMkxFVkVMOwogCi0JcmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgmYW1wO2UsIHZjcHUtJmd0O2t2bSk7CiYjNDM7CXJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoJmFtcDtlLCB2Y3B1LSZndDtrdm0sIHRydWUpOwogCWlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHsKIAkJdmNwdS0mZ3Q7YXJjaC54ZW4udGltZXJfZXhwaXJlcyA9IDA7CiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKQEAgLTE3OTIsNyAmIzQzOzE3OTIsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogICogSXQgaXMgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKCksIHdoZXJlIHRoZQogICogb25seSBjaGVjayBvbiBpdHMgcmV0dXJuIHZhbHVlIGlzIGEgY29tcGFyaXNvbiB3aXRoIC1FV09VTERCTE9DSyYjMzk7LgogICovCi1pbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO2ludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKQogewogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKQEAgLTE4MTksNyAmIzQzOzE4MTksMTUgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAogCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKIAotCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWlmIChpbl9hdG9taWMpIHsKJiM0MzsJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCWlmICghcmVhZF90cnlsb2NrKCZhbXA7Z3BjLSZndDtsb2NrKSkgewomIzQzOwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0MzsJCQlnb3RvIG91dF9yY3Vfbm9fbG9jazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CX0KIAlpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKQogCQlnb3RvIG91dF9yY3U7CiAKQEAgLTE4NTMsNyAmIzQzOzE4NjEsMTggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlncGMgPSAmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZTsKIAotCQlyZWFkX2xvY2tfaXJxc2F2ZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKGluX2F0b21pYykgewomIzQzOwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCQlpZiAoIXJlYWRfdHJ5bG9jaygmYW1wO2dwYy0mZ3Q7bG9jaykpIHsKJiM0MzsJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwKJiM0MzsJCQkJCQkgICAgICAmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkpCiYjNDM7CQkJCQlraWNrX3ZjcHUgPSB0cnVlOwomIzQzOwkJCQlnb3RvIG91dF9yY3Vfbm9fbG9jazsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl9CiAJCWlmICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHsKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgYWNjZXNzIHRoZSB2Y3B1X2luZm8uIFNldCB0aGUgYml0IGluLWtlcm5lbApAQCAtMTg4OCw2ICYjNDM7MTkwNyw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAKICBvdXRfcmN1OgogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtncGMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzsgb3V0X3JjdV9ub19sb2NrOgogCXNyY3VfcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O3NyY3UsIGlkeCk7CiAKIAlpZiAoa2lja192Y3B1KSB7CkBAIC0xOTAzLDcgJiM0MzsxOTIzLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCWJvb2wgbW1fYm9ycm93ZWQgPSBmYWxzZTsKIAlpbnQgcmM7CiAKLQlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pOwomIzQzOwlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTsKIAlpZiAocmMgIT0gLUVXT1VMREJMT0NLKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE5MzcsNyAmIzQzOzE5NTcsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwogCQlpbnQgaWR4OwogCi0JCXJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7CiYjNDM7CQlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTsKIAkJaWYgKHJjICE9IC1FV09VTERCTE9DSykKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmgKaW5kZXggNTllNjEyOGE3YmQzYy4uMTNkMzRhMDZmMzI1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uaApAQCAtMzIsNyAmIzQzOzMyLDcgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLAotCQkJICAgIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CQkJICAgIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpOwogaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwKIAkJCSBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKIAkJCSBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg3CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvY2tpbmcgaXNzdWUgZml4LiBUaGUgcGF0Y2ggdGFyZ2V0cyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgYGJvb2wgaW5fYXRvbWljYCBwYXJhbWV0ZXIuIFRoaXMgcGFyYW1ldGVyJiMzOTtzIHB1cnBvc2UgaXMgaW1tZWRpYXRlbHkgY2xlYXI6IHRvIGNvbmRpdGlvbmFsbHkgYWRqdXN0IHRoZSBsb2NraW5nIG1lY2hhbmlzbSBiYXNlZCBvbiB0aGUgZXhlY3V0aW9uIGNvbnRleHQuCgpTcGVjaWZpY2FsbHksIHdoZW4gYGluX2F0b21pY2AgaXMgdHJ1ZSwgdGhlIGNvZGUgbm93IHVzZXMgYHJlYWRfdHJ5bG9ja2AgaW5zdGVhZCBvZiBgcmVhZF9sb2NrX2lycXNhdmVgLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4gYHJlYWRfbG9ja19pcnFzYXZlYCBoYXMgdGhlIHBvdGVudGlhbCB0byBzbGVlcCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlIHdpdGhpbiBhbiBhdG9taWMgY29udGV4dCwgYW5kIGNhbiBsZWFkIHRvIGRlYWRsb2Nrcy4gYHJlYWRfdHJ5bG9ja2AsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBub24tYmxvY2tpbmcuIElmIGl0IGNhbiYjMzk7dCBhY3F1aXJlIHRoZSBsb2NrIGltbWVkaWF0ZWx5LCBpdCBzaW1wbHkgcmV0dXJucy4KClRoZSBpbnRlbnQgaGVyZSBpcyBvYnZpb3VzLiBJIHNlZSBhIGNsZWFyIGF0dGVtcHQgdG8gYXZvaWQgc2xlZXBpbmcgb3IgZGVhZGxvY2tpbmcgd2l0aGluIHBvdGVudGlhbGx5IGF0b21pYyBzZWN0aW9ucyBvZiBjb2RlLiBUaGlzIGlzIGEgdmVyeSBjb21tb24gYW5kIGNyaXRpY2FsIHR5cGUgb2YgZml4LCB3aGljaCBpbXByb3ZlcyBvdmVyYWxsIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGlzIGlzIGluZGVlZCB3aGF0IGlzIGhhcHBlbmluZy4gVGhlIHBhdGNoIG5vdGVzIHRoYXQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLCBib3RoIHdpdGggYGluX2F0b21pYyA9IHRydWVgLiBJdCYjMzk7cyBhbHNvIGNhbGxlZCBmcm9tIGBrdm1feGVuX3NldF9ldnRjaG5gIHdpdGggYGluX2F0b21pYyA9IGZhbHNlYC4gVGhpcyBjb25maXJtcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3I6IHRoZSBvcHRpbWl6ZWQgbG9jayBpcyBhcHBsaWVkIGluIHRoZSBjb250ZXh0cyB3aGVyZSBpdCBpcyBuZWNlc3NhcnkuCgpUaGUgYWN0dWFsIGNvZGUgY2hhbmdlIGlzIHdoYXQgc29saWRpZmllcyB0aGlzIHVuZGVyc3RhbmRpbmc6CgpgYGBjCglpZiAoaW5fYXRvbWljKSB7CgkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwoJCWlmICghcmVhZF90cnlsb2NrKCZhbXA7Z3BjLSZndDtsb2NrKSkgewoJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CgkJCWdvdG8gb3V0X3JjdV9ub19sb2NrOwoJCX0KCX0gZWxzZSB7CgkJcmVhZF9sb2NrX2lycXNhdmUoJmFtcDtncGMtJmd0O2xvY2ssIGZsYWdzKTsKCX0KYGBgCgpUaGlzIHNuaXBwZXQgZG9lcyBleGFjdGx5IHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gZG86IHVzZXMgYHJlYWRfdHJ5bG9ja2Agd2l0aCBsb2NhbCBJUlEgZGlzYWJsaW5nIHRvIGF0b21pY2FsbHkgYXR0ZW1wdCBhY3F1aXJpbmcgdGhlIGxvY2suIElmIGl0IGZhaWxzLCBpdCByZXN0b3JlcyB0aGUgcHJldmlvdXMgSVJRIHN0YXRlIGFuZCBleGl0cy4gSWYgaXQgc3VjY2VlZHMsIGl0JiMzOTtzIHNhZmUgdG8gcHJvY2VlZC4KCkkgc2VlIG5vdGhpbmcgaGVyZSB0aGF0IHJhaXNlcyBhbnkgZmxhZ3MgZm9yIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZy9zY2hlZHVsaW5nIG9wdGltaXphdGlvbiB0byBhdm9pZCBhIHBvdGVudGlhbCBpc3N1ZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhci4gKipOZWVkc0tNU0FOIHNob3VsZCBiZSBzZXQgdG8gZmFsc2UqKiBpbiB0aGlzIGNhc2UuIE15IHJlYXNvbmluZyBpcyB0aGUgcGF0Y2ggaXMgZXhjbHVzaXZlbHkgcmVsYXRlZCB0byBpbXByb3ZpbmcgbG9ja2luZyB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBsb2NraW5nIGlzc3VlIGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIHBhcmFtZXRlciB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoKWAuIFdoZW4gY2FsbGVkIGluIGFuIGF0b21pYyBjb250ZXh0LCBpdCBub3cgdXNlcyBgcmVhZF90cnlsb2NrKClgIGluc3RlYWQgb2YgYHJlYWRfbG9ja19pcnFzYXZlKClgIHRvIHByZXZlbnQgZGVhZGxvY2tzIG9yIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0LiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHdoaWNoIGFyZSB0aGUgcHJpbWFyeSB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBwYXJhbWV0ZXIgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KClgLiBXaGVuIGNhbGxlZCBpbiBhbiBhdG9taWMgY29udGV4dCwgaXQgbm93IHVzZXMgYHJlYWRfdHJ5bG9jaygpYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZSgpYCB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDA6MzIuMjQ2MzUwNjE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODc4NzM3NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsb2NraW5nIGlzc3VlIGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIHBhcmFtZXRlciB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoKWAuIFdoZW4gY2FsbGVkIGluIGFuIGF0b21pYyBjb250ZXh0LCBpdCBub3cgdXNlcyBgcmVhZF90cnlsb2NrKClgIGluc3RlYWQgb2YgYHJlYWRfbG9ja19pcnFzYXZlKClgIHRvIHByZXZlbnQgZGVhZGxvY2tzIG9yIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0LiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHdoaWNoIGFyZSB0aGUgcHJpbWFyeSB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSB0byBoYW5kbGUgYXRvbWljIGNvbnRleHRzIHByb3Blcmx5IGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIGZsYWcgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YC4gVGhpcyBhZmZlY3RzIGlycWZkIGluamVjdGlvbiBhbmQgWGVuIHRpbWVyIGNhbGxiYWNrcywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAwOjMyLjI0NjM1NzcyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NzMwNDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRhOTA5NzQ1MGQ0ZTY1NDE0MDkzOTJlMWM1ZjlhZDQ2N2E4YjkyZGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTM6MDA6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jXFxuaW5kZXggY2I4YWM0YjliMGQ3NC4uOWFlZjExNTI5M2I0YiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmNcXG5AQCAtMjY3LDcgKzI2Nyw3IEBAIGludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbiBcXHRcXHRpZiAoIWxldmVsKVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbi1cXHRcXHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUtXFx1MDAzZXhlbl9ldnRjaG4sIGt2bSk7XFxuK1xcdFxcdHJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcXHUwMDI2ZS1cXHUwMDNleGVuX2V2dGNobiwga3ZtLCB0cnVlKTtcXG4gI2VuZGlmXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5pbmRleCA2OTRiMzFjMWZjYzlhLi4xNDk4OGFlNzEwYTJkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uY1xcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xcbkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhlbl90aW1lcl9jYWxsYmFjayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuIFxcdGUucG9ydCA9IHZjcHUtXFx1MDAzZWFyY2gueGVuLnRpbWVyX3ZpcnE7XFxuIFxcdGUucHJpb3JpdHkgPSBLVk1fSVJRX1JPVVRJTkdfWEVOX0VWVENITl9QUklPXzJMRVZFTDtcXG4gXFxuLVxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSk7XFxuK1xcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSwgdHJ1ZSk7XFxuIFxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHtcXG4gXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC54ZW4udGltZXJfZXhwaXJlcyA9IDA7XFxuIFxcdFxcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcXG5AQCAtMTc5Miw3ICsxNzkyLDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcXG4gICogSXQgaXMgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKCksIHdoZXJlIHRoZVxcbiAgKiBvbmx5IGNoZWNrIG9uIGl0cyByZXR1cm4gdmFsdWUgaXMgYSBjb21wYXJpc29uIHdpdGggLUVXT1VMREJMT0NLJy5cXG4gICovXFxuLWludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuK2ludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKVxcbiB7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG5AQCAtMTgxOSw3ICsxODE5LDE1IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcbiBcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG4gXFxuLVxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKGluX2F0b21pYykge1xcbitcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdFxcdGlmICghcmVhZF90cnlsb2NrKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spKSB7XFxuK1xcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcmN1X25vX2xvY2s7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVhZF9sb2NrX2lycXNhdmUoXFx1MDAyNmdwYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHR9XFxuIFxcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXFxuIFxcdFxcdGdvdG8gb3V0X3JjdTtcXG4gXFxuQEAgLTE4NTMsNyArMTg2MSwxOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0Z3BjID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZTtcXG4gXFxuLVxcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aWYgKGluX2F0b21pYykge1xcbitcXHRcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdFxcdFxcdGlmICghcmVhZF90cnlsb2NrKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spKSB7XFxuK1xcdFxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpKVxcbitcXHRcXHRcXHRcXHRcXHRraWNrX3ZjcHUgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZWFkX2xvY2tfaXJxc2F2ZShcXHUwMDI2Z3BjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBDb3VsZCBub3QgYWNjZXNzIHRoZSB2Y3B1X2luZm8uIFNldCB0aGUgYml0IGluLWtlcm5lbFxcbkBAIC0xODg4LDYgKzE5MDcsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gIG91dF9yY3U6XFxuIFxcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdwYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbisgb3V0X3JjdV9ub19sb2NrOlxcbiBcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuIFxcbiBcXHRpZiAoa2lja192Y3B1KSB7XFxuQEAgLTE5MDMsNyArMTkyMyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0Ym9vbCBtbV9ib3Jyb3dlZCA9IGZhbHNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbi1cXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pO1xcbitcXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcXG4gXFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG5AQCAtMTkzNyw3ICsxOTU3LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xcbiBcXHRcXHRpbnQgaWR4O1xcbiBcXG4tXFx0XFx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtKTtcXG4rXFx0XFx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtLCBmYWxzZSk7XFxuIFxcdFxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5oIGIvYXJjaC94ODYva3ZtL3hlbi5oXFxuaW5kZXggNTllNjEyOGE3YmQzYy4uMTNkMzRhMDZmMzI1NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmhcXG5AQCAtMzIsNyArMzIsNyBAQCB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pO1xcbiB2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtICprdm0pO1xcbitcXHRcXHRcXHQgICAgc3RydWN0IGt2bSAqa3ZtLCBib29sIGluX2F0b21pYyk7XFxuIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4gXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKnVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDA6MzMuNzM0NjMwNjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU4MDI3NTkyNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IHRvIGhhbmRsZSBhdG9taWMgY29udGV4dHMgcHJvcGVybHkgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgZmxhZyB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLiBUaGlzIGFmZmVjdHMgaXJxZmQgaW5qZWN0aW9uIGFuZCBYZW4gdGltZXIgY2FsbGJhY2tzLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGE5MDk3NDUwZDRlNjU0MTQwOTM5MmUxYzVmOWFkNDY3YThiOTJkY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDEzOjAwOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jXG5pbmRleCBjYjhhYzRiOWIwZDc0Li45YWVmMTE1MjkzYjRiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2lycS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmNcbkBAIC0yNjcsNyArMjY3LDcgQEAgaW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG4gXHRcdGlmICghbGV2ZWwpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZS1cdTAwM2V4ZW5fZXZ0Y2huLCBrdm0pO1xuK1x0XHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZS1cdTAwM2V4ZW5fZXZ0Y2huLCBrdm0sIHRydWUpO1xuICNlbmRpZlxuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhLi4xNDk4OGFlNzEwYTJkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhlbl90aW1lcl9jYWxsYmFjayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gXHRlLnBvcnQgPSB2Y3B1LVx1MDAzZWFyY2gueGVuLnRpbWVyX3ZpcnE7XG4gXHRlLnByaW9yaXR5ID0gS1ZNX0lSUV9ST1VUSU5HX1hFTl9FVlRDSE5fUFJJT18yTEVWRUw7XG4gXG4tXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUsIHZjcHUtXHUwMDNla3ZtKTtcbitcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZSwgdmNwdS1cdTAwM2Vrdm0sIHRydWUpO1xuIFx0aWYgKHJjICE9IC1FV09VTERCTE9DSykge1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2gueGVuLnRpbWVyX2V4cGlyZXMgPSAwO1xuIFx0XHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG5AQCAtMTc5Miw3ICsxNzkyLDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbiAgKiBJdCBpcyBhbHNvIGNhbGxlZCBkaXJlY3RseSBmcm9tIGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoKSwgd2hlcmUgdGhlXG4gICogb25seSBjaGVjayBvbiBpdHMgcmV0dXJuIHZhbHVlIGlzIGEgY29tcGFyaXNvbiB3aXRoIC1FV09VTERCTE9DSycuXG4gICovXG4taW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbitpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtLCBib29sIGluX2F0b21pYylcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbkBAIC0xODE5LDcgKzE4MTksMTUgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiBcbi1cdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoaW5fYXRvbWljKSB7XG4rXHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdFx0aWYgKCFyZWFkX3RyeWxvY2soXHUwMDI2Z3BjLVx1MDAzZWxvY2spKSB7XG4rXHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1x0XHRcdGdvdG8gb3V0X3JjdV9ub19sb2NrO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0fVxuIFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgUEFHRV9TSVpFKSlcbiBcdFx0Z290byBvdXRfcmN1O1xuIFxuQEAgLTE4NTMsNyArMTg2MSwxOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGdwYyA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlO1xuIFxuLVx0XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoaW5fYXRvbWljKSB7XG4rXHRcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0XHRcdGlmICghcmVhZF90cnlsb2NrKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKSkge1xuK1x0XHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1x0XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpKVxuK1x0XHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuK1x0XHRcdFx0Z290byBvdXRfcmN1X25vX2xvY2s7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdH1cbiBcdFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogQ291bGQgbm90IGFjY2VzcyB0aGUgdmNwdV9pbmZvLiBTZXQgdGhlIGJpdCBpbi1rZXJuZWxcbkBAIC0xODg4LDYgKzE5MDcsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFxuICBvdXRfcmN1OlxuIFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuKyBvdXRfcmN1X25vX2xvY2s6XG4gXHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuIFxuIFx0aWYgKGtpY2tfdmNwdSkge1xuQEAgLTE5MDMsNyArMTkyMyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGJvb2wgbW1fYm9ycm93ZWQgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbi1cdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG4rXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbiBcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXG4gXHRcdHJldHVybiByYztcbiBcbkBAIC0xOTM3LDcgKzE5NTcsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuIFx0XHRpbnQgaWR4O1xuIFxuLVx0XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pO1xuK1x0XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbiBcdFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcbiBcdFx0XHRicmVhaztcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcbmluZGV4IDU5ZTYxMjhhN2JkM2MuLjEzZDM0YTA2ZjMyNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uaFxuQEAgLTMyLDcgKzMyLDcgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTtcbiB2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLFxuLVx0XHRcdCAgICBzdHJ1Y3Qga3ZtICprdm0pO1xuK1x0XHRcdCAgICBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKTtcbiBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbiBcdFx0XHQgY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqdWUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDA6MzMuNzM0NjMyOTU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwOTQ4NTA0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFhlbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCB3aXRoaW4gdGhlIEtWTSBYZW4gZW11bGF0aW9uIGNvZGUuIFRoZXkncmUgYWRkaW5nIGEgYm9vbGVhbiwgYGluX2F0b21pY2AsIHdoaWNoIGlzIGEgY2xldmVyIG1vdmUuIEJhc2ljYWxseSwgaWYgd2UncmUgaW4gYW4gYXRvbWljIGNvbnRleHQsIGxpa2Ugd2l0aGluIGFuIGludGVycnVwdCBoYW5kbGVyIG9yIGEgdGltZXIgY2FsbGJhY2ssIHdlIG5lZWQgdG8gYmUgKnZlcnkqIGNhcmVmdWwgYWJvdXQgbG9ja2luZy4gVGhleSdyZSB1c2luZyBgcmVhZF90cnlsb2NrYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZWAgd2hlbiBgaW5fYXRvbWljYCBpcyBzZXQgdG8gYXZvaWQgc2xlZXBpbmcgb3IsIGV2ZW4gd29yc2UsIGNhdXNpbmcgYSBkZWFkbG9jay4gU21hcnQuXG5cblRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgYXMgdGhhdCdzIGV4cGxpY2l0bHkgYW4gYXRvbWljIGNvbnRleHQsIGFuZCBhbHNvIGZyb20gYHhlbl90aW1lcl9jYWxsYmFja2AsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRpbWVycyBjYW4gdHJpZ2dlciBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCwgYW5kIGFsc28gdGhlIG9yaWdpbmFsIGBrdm1feGVuX3NldF9ldnRjaG5gLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgdGFyZ2V0ZWQgYXQgdGhlIEtWTSBYZW4gZW11bGF0aW9uIGxheWVyLCBzbyBpdCdzIGEgZGlyZWN0IGNvbmNlcm4gZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBLVk0uIEdpdmVuIHRoYXQgaXQncyBhbHRlcmluZyBsb2NraW5nIGJlaGF2aW9yIHdpdGhpbiBhbiBlbnZpcm9ubWVudCB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gYSBndWVzdCwgaXTigJlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9jayBzb2xpZC5cblxuTGV0IG1lIGdvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBhY3R1YWxseSBjb25maWd1cmUgdGhpcyBLVk0gWGVuIGVtdWxhdGlvbi4gSSdsbCBzdGFydCB3aXRoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMDo0Ny44Mjk0ODYxMzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0NDkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMDo0Ny45MDI5ODA2MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAzNzc3MzUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk1fWEVOIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24gaXMgYEtWTV9YRU5gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBpbnRlcmVzdGluZyBjaG9pY2UuXCIgR2l2ZW4gbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEkgaGF2ZSB0byBhc3Nlc3MgKndoeSogdGhpcyBjb25maWcgaXMgdXNlZCBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGFyZSBhZmZlY3RlZC4gV2hhdCBhcmUgdGhlIHN1cHBvcnRpbmcgY29tcG9uZW50cyBuZWNlc3NhcnkgZm9yIGBLVk1fWEVOYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoaXMgY291bGQgcmFuZ2UgZnJvbSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcywgdG8gcGFydGljdWxhciBoYXJkd2FyZSBzdXBwb3J0IHJlcXVpcmVtZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAxOjAxLjk0MDc1ODg1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI4MDI0MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDE6MDMuMjY4Nzg4MzMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQzNzk5MDA2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNLVhlbiBMb2NraW5nIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2t2bS9pcnEuY2AsIGBhcmNoL3g4Ni9rdm0veGVuLmNgLCBhbmQgYGFyY2gveDg2L2t2bS94ZW4uaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHN1Z2dlc3RzIGl0J3MgYSBtb2RlcmF0ZWx5IHNpZ25pZmljYW50IGNoYW5nZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gS1ZNIGFuZCB0aGUgWGVuIGh5cGVydmlzb3IuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBub3cgdGFraW5nIGFuIGBpbl9hdG9taWNgIGJvb2xlYW4uXG5cblRoZSByZWFsIGtleSBoZXJlIGlzIGhvdyB0aGUgbG9ja2luZyBoYXMgYmVlbiBhbHRlcmVkLiAgVXNpbmcgYGxvY2FsX2lycV9zYXZlYCBhbmQgYHJlYWRfdHJ5bG9ja2AgKmluc3RlYWQgb2YqIGByZWFkX2xvY2tfaXJxc2F2ZWAgd2hlbiBgaW5fYXRvbWljYCBpcyB0cnVlIGlzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gbG9ja2luZyBzZW1hbnRpY3MuIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEl0IGNvdWxkIGJlIGludGVyZXN0aW5nIHVuZGVyIGxvYWQuXG5cbk5vdywgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBmdW5jdGlvbiBpcyB1c2VkLiBJJ20gc2VlaW5nIGl0J3MgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIChpbiBgYXJjaC94ODYva3ZtL2lycS5jYCkgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgIChpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCkgd2l0aCBgaW5fYXRvbWljID0gdHJ1ZWAsIGFuZCBmcm9tIGBrdm1feGVuX3NldF9ldnRjaG5gIHdpdGggYGluX2F0b21pYyA9IGZhbHNlYC4gR290IGl0LlxuXG5UaGlzIGRlcGVuZHMgb24gdGhlIGBLVk1fWEVOYCBjb25maWcgb3B0aW9uIOKAkyB0aGF0J3MgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3Mgc29saWRpZnkgdGhlIGZvY3VzIHN5bWJvbHMuICBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGlzIHRoZSBoZWFydCBvZiBpdCwgb2J2aW91c2x5LiAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGNhbGxzIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAuICBga3ZtX3hlbl9zZXRfZXZ0Y2huYCBpcyB3b3J0aCBhIGxvb2sgYXMgd2VsbCBhcyBpdCBpbnRlcmFjdHMgd2l0aCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgZXhwb3J0ZWQgc3ltYm9scyBvciBzdGF0aWMuICpDaGVja3MqLiAgT2theSwgIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgaXMgKm5vdCogc3RhdGljIOKAkyBkZWZpbmVkIGluIGB4ZW4uY2AgYW5kIGRlY2xhcmVkIGluIGB4ZW4uaGAuIEdvb2QuIEkgbmVlZGVkIHRvIGNoZWNrLlxuXG5BbHJpZ2h0LCAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIG5vdCBzdGF0aWMsIHNvIHRoYXQgaXMgZmluZS4gQ2hlY2tpbmcgYGt2bV94ZW5fc2V0X2V2dGNobmAgLi4uIHRoYXQgb25lICppcyogc3RhdGljLiBTYW1lIHdpdGggYHhlbl90aW1lcl9jYWxsYmFja2AuXG5cblNvIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBJJ20gZ29pbmcgdG8gdHJhY2sgYXJlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9YRU5gLiAgWWVwLCBpdCBkZXBlbmRzIG9uIGBLVk1gLCB3aGljaCBpcyBleHBlY3RlZC4gIEknbGwgc2NhbiB0aHJvdWdoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AganVzdCB0byBjb25maXJtIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCB0aGUgZGVwZW5kZW5jaWVzIG9yIGV4dHJhIGNvbmZpZyBmbGFncyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMToyNy42NDg2OTEyMTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MjUzNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDE6MjcuODUyOTUxNTE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAyMjMwNzg3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gWGVuIEV2ZW50IENoYW5uZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgd2l0aGluIHRoZSBLVk0gWGVuIGVtdWxhdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYW4gYGluX2F0b21pY2AgYm9vbGVhbi4gV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRvIHRydWUsIGl0J3MgdXRpbGl6aW5nIGBsb2NhbF9pcnFfc2F2ZWAgYW5kIGByZWFkX3RyeWxvY2tgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSWYgaXQncyBmYWxzZSwgdGhlIGNvZGUgZ29lcyB3aXRoIGByZWFkX2xvY2tfaXJxc2F2ZWAuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgbG9ja2luZyBzdHJhdGVneSB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtWTSwgSSBrbm93IHRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhvc2UgS1ZNIGlvY3RscyDigJMgdGhlIG9uZXMgbGlrZSBgS1ZNX0lSUV9ST1VUSU5HX1hFTl9FVlRDSE5gLCBzbyBpdCdzIHBvdGVudGlhbGx5IGV4cG9zZWQuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIGBLVk1fWEVOYCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaGVyZSwgYXMgeW91J2QgZXhwZWN0LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGl0c2VsZiBpcyBtb2RpZmllZCwgYnV0IGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBvdGhlciBmdW5jdGlvbnMgbGlrZSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGB4ZW5fdGltZXJfY2FsbGJhY2tgIGFuZCBhbHNvIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGt2bV94ZW5fc2V0X2V2dGNobmAsIHdoaWNoIEkgc2hvdWxkIGxvb2sgYXQgbW9yZSBjbG9zZWx5LiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyB0aGlzLiBMZXQgbWUgc2VlLi4uIGBrdm1feGVuX3NldF9ldnRjaG5gIGFuZCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2Agc2VlbSBsaWtlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMsIGFuZCBwb3RlbnRpYWxseSBgeGVuX3RpbWVyX2NhbGxiYWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhvc2UgaXMgdGhlIGJlc3QgdG8gdGFyZ2V0LiBGaXJzdCwgSSB3aWxsIGxvb2sgYXQgYGt2bV94ZW5fc2V0X2V2dGNobmAuIE5vdywgaXMgaXQgc3RhdGljPyBMZXQgbWUgZmluZCB0aGF0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMTo0OC4wNzYwMzI0ODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxOTA0ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fc2V0X2V2dGNoblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jLTMxLVxcbmFyY2gveDg2L2t2bS94ZW4uYzozMjpzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0zMy1zdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTA4PXZvaWQga3ZtX3hlbl9pbmplY3RfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTE3LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxMTg6XFx0XFx0a3ZtX3hlbl9zZXRfZXZ0Y2huKFxcdTAwMjZlLCB2Y3B1LVxcdTAwM2Vrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xMTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTI1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEzOS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQwOlxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSwgdHJ1ZSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0MS1cXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTc3ND1zdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTQtICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE3OTU6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTYte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjAtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE5MjE6c3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTIyLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTI1LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTI2OlxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTI3LVxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk1OS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk2MDpcXHRcXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk2MS1cXHRcXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTE5NzY9c3RhdGljIGludCBldnRjaG5fc2V0X2ZuKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk4MS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk4MjpcXHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huKFxcdTAwMjZlLVxcdTAwM2V4ZW5fZXZ0Y2huLCBrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTgzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0yMDM5PWludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqdXhlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIwNTUtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIwNTY6XFx0cmV0ID0ga3ZtX3hlbl9zZXRfZXZ0Y2huKFxcdTAwMjZlLCBrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0yMDU3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTIyODU9c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMDgtXFx0aWYgKGV2dGNobmZkLVxcdTAwM2VkZWxpdmVyLnBvcnQucG9ydCkge1xcbmFyY2gveDg2L2t2bS94ZW4uYzoyMzA5OlxcdFxcdGludCByZXQgPSBrdm1feGVuX3NldF9ldnRjaG4oXFx1MDAyNmV2dGNobmZkLVxcdTAwM2VkZWxpdmVyLnBvcnQsIHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMTAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTk9UQ09OTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDE6NDguMTY3OTQ2MzIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTUxMDAwMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gWGVuIEV2ZW50IENoYW5uZWwgYW5kIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHN5bWJvbHM6IGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIGltcG9ydGFudCBhbmQgYWNjZXNzaWJsZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBLVk0vWGVuIGludGVyYWN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGVpciBpbmNsdXNpb24uXG5cbkl0IGxvb2tzIGxpa2UgYm90aCBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFyZSBjb25maWd1cmVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcy4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB3aGV0aGVyIGBLVk1gIGFsb25lIGlzIHN1ZmZpY2llbnQsIG9yIGlmIGBLVk1fWDg2YCBvciBhbm90aGVyIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb24gaXMgcmVxdWlyZWQsIGFzIHdlbGwuIFNpbmNlIGBLVk1fWEVOYCBpcyBzcGVjaWZpY2FsbHkgZGVkaWNhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIGBLVk1gIGlzIHRoZSBiYXNlLCBJJ2xsIHJldHVybiBib3RoIGBLVk1gIGFuZCBgS1ZNX1hFTmAgYXMgdGhlIGRldGVybWluaW5nIGZhY3RvcnMuXG5cbk5vdywganVzdCB0byB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGZpdHMgaW4sIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgaXRzIGxvY2F0aW9uIGluIGBhcmNoL3g4Ni9rdm0vaXJxLmNgIHRvIGNvbmZpcm0gbXkgbWVudGFsIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzY4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAyOjA2LjMxODk1MDA0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODQ0MzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pcnEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaXJxLmM9MjI1PWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy0yNDAtXFxuYXJjaC94ODYva3ZtL2lycS5jOjI0MTppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjQyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDI6MDcuNjY3Mzk4NTI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODY3NzUxNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6ODU0MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDI6MjcuNTM1MTUzMDU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcxODA3NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTkyPWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTEwOC0vKlxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjEwOTogKiBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljOiBmYXN0LXBhdGggZm9yIGlycWZkIGluamVjdGlvblxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTExMC0gKi9cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxMTE6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTEyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pcnFmZC5jPTQ0PWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2lycWZkLmMtNjktXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2lycWZkLmM6NzA6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2lycWZkLmMtNzEtXFx0XFx0c3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYz0xMDIyPWludCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCB1MzIgaXJxLCBpbnQgbGV2ZWwsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTEwMzItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYzoxMDMzOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICppcnFfZW50cnksXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0xMDM0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92bS5jPTExOT1pbnQga3ZtX3NldF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMTQ5LVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmM6MTUwOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMTUxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzY5Mz1pbnQgX19pbml0IGt2bV9zMzkwX2dpYl9pbml0KHU4IG5pc2MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDgtLypcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NDk6ICoga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYzogZmFzdC1wYXRoIGZvciBpcnFmZCBpbmplY3Rpb25cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NTAtICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzUxOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc1Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmM9MjI1PWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy0yNDAtXFxuYXJjaC94ODYva3ZtL2lycS5jOjI0MTppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjQyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xNzc0PXN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc5MS0gKlxcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzkyOiAqIEl0IGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20ga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYygpLCB3aGVyZSB0aGVcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc5My0gKiBvbmx5IGNoZWNrIG9uIGl0cyByZXR1cm4gdmFsdWUgaXMgYSBjb21wYXJpc29uIHdpdGggLUVXT1VMREJMT0NLJy5cXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xODA0PWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqaXJxX2VudHJ5LCBzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE4MDUtXFx0XFx0aW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cyk7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE4MDY6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE4MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsXFxuLS1cXG52aXJ0L2t2bS9ldmVudGZkLmM9MTc5PXN0YXRpYyB2b2lkIGlycWZkX2RlYWN0aXZhdGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKVxcbi0tXFxudmlydC9rdm0vZXZlbnRmZC5jLTE4OS1cXG52aXJ0L2t2bS9ldmVudGZkLmM6MTkwOmludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhcXG52aXJ0L2t2bS9ldmVudGZkLmMtMTkxLVxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICppcnEsXFxuLS1cXG52aXJ0L2t2bS9ldmVudGZkLmM9MjAzPWlycWZkX3dha2V1cCh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpXFxuLS1cXG52aXJ0L2t2bS9ldmVudGZkLmMtMjM1LVxcdFxcdGlmICh1bmxpa2VseSghaXJxZmRfaXNfYWN0aXZlKGlycWZkKSkgfHxcXG52aXJ0L2t2bS9ldmVudGZkLmM6MjM2OlxcdFxcdCAgICBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKFxcdTAwMjZpcnEsIGt2bSxcXG52aXJ0L2t2bS9ldmVudGZkLmMtMjM3LVxcdFxcdFxcdFxcdFxcdCAgICAgIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwgMSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDI6MjkuOTA2OTc2NzA0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzQ4NTc2MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTAyNDcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAyOjQzLjY1NTU1NTAxMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNzE0NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veGVuLmM9MTI1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEzOS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQwOlxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSwgdHJ1ZSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0MS1cXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTc3ND1zdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTQtICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE3OTU6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTYte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTE5MjE9c3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjUtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE5MjY6XFx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjctXFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTU5LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTYwOlxcdFxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTYxLVxcdFxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAyOjQzLjg2NzI3NDU4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc3NTc0MTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLVk0gWGVuIEV2ZW50IENoYW5uZWwgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSBzZWUgaXQncyBtb2RpZnlpbmcgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlIGNvcmUgY2hhbmdlIGludHJvZHVjZXMgYSBgYm9vbGVhbiBpbl9hdG9taWNgIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpdCdzIGEgY29uZGl0aW9uYWwgbG9ja2luZyBzdHJhdGVneS4gSWYgYGluX2F0b21pY2AgaXMgdHJ1ZSwgd2UncmUgdXNpbmcgYSB0cnktbG9jayBhcHByb2FjaDogYGxvY2FsX2lycV9zYXZlYCB3aXRoIGByZWFkX3RyeWxvY2tgLCBmYWxsaW5nIGJhY2svYmFpbGluZyBpZiB0aGUgbG9jayBmYWlscy4gSWYgYGluX2F0b21pY2AgaXMgZmFsc2UsIGl0J3MgdGhlIG1vcmUgc3RhbmRhcmQgYHJlYWRfbG9ja19pcnFzYXZlYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEtWTSBYZW4gZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgaGFuZGxpbmcgYXRvbWljIGNvbnRleHRzIGdyYWNlZnVsbHkuXG5cbkl0IGFwcGVhcnMgdGhpcyBhZmZlY3RzIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgY2FsbGVkIGZyb20gYGlycWZkX3dha2V1cGAsIGFuZCBhbHNvIGB4ZW5fdGltZXJfY2FsbGJhY2tgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIGFuIGhydGltZXIgY29udGV4dC4gVGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgbGlrZWx5IGF2b2lkaW5nIGRlYWRsb2NrcyBvciBsb2NrZGVwIHdhcm5pbmdzIHRoYXQgY291bGQgYXJpc2UgZnJvbSB1bnNhZmUgbG9jayB1c2FnZSB3aXRoaW4gdGhlc2UgYXRvbWljIGNvbnRleHRzLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRoZSBmaXguXG5cblRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBLVk1gIGFuZCBgS1ZNX1hFTmAuXG5cbk15IHByaW1hcnkgZm9jdXMgaXMgbm93IG9uIHRoZXNlIHN5bWJvbHM6IGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYGt2bV94ZW5fc2V0X2V2dGNobmAgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLlxuXG5JJ2xsIGRvdWJsZSBjaGVjayBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaW4gYGFyY2gveDg2L2t2bS9pcnEuY2AuIEFoLCB0aGVyZSBpdCBpczogaXQgY2FsbHMgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUtXHUwMDNleGVuX2V2dGNobiwga3ZtLCB0cnVlKWAuIFNvIHRoYXQgY29uZmlybXMgdGhlIGF0b21pYyBjb250ZXh0IHVzYWdlLlxuXG5UaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBLVk0gWGVuIGV2ZW50IGNoYW5uZWxzIGFyZSBkZWxpdmVyZWQsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIHRpbWVycyBhcmUgaGFuZGxlZCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHN5c3RlbSBzdGFiaWxpdHkuXG5cbkNvbmZpZ3MgYWdhaW46IGBLVk1gLCBgS1ZNX1hFTmAuXG5cbkZvY3VzIFN5bWJvbHMgKGFnYWluKTogYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huYCwgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLlxuXG5Ib2xkIG9uLCBgeGVuX3RpbWVyX2NhbGxiYWNrYCBpcyBzdGF0aWMuIFNpbmNlIHRoZSBwcm9tcHQgcHJlZmVycyBub24tc3RhdGljIGVudHJ5cG9pbnRzLCBpdCBsb29rcyBsaWtlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgaXMgbm90IHN0YXRpYyAoaXQncyBleHBvcnRlZCBpbiBgeGVuLmhgKS4gYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIGFsc28gbm90IHN0YXRpYy4gYGt2bV94ZW5fc2V0X2V2dGNobmAgaXMgc3RhdGljLCB3aGljaCBpcyB3aHkgaXQgZ2V0cyBsZXNzIGF0dGVudGlvbi4gQW5kLCB0aGVyZSBpcyBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgIHdoaWNoIGlzIG5vdCBzdGF0aWMgYW5kIGlzIHJlbGV2YW50LiBMZXQgbWUgY2hlY2sgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCByZWFsIHF1aWNrLiBMb29rcyBsaWtlIGl0IGNhbGxzIGBrdm1feGVuX3NldF9ldnRjaG5gLiBMZXQncyBjaGVjayBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaW4gYGFyY2gveDg2L2t2bS9pcnEuY2AgYWdhaW4ganVzdCB0byBiZSBzdXJlLlxuXG5JJ2xsIHN0aWNrIHdpdGggYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBhbmQgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGFzIHByaW1hcnkgZm9jdXMgc3ltYm9scyBmb3Igbm93LlxuXG5Db25maWdzIG9uZSBsYXN0IHRpbWU6IGBLVk1gLCBgS1ZNX1hFTmAuXG5cbkRlcGVuZGVuY3kgY2hlY2suLi4gYEtWTV9YRU5gICpkb2VzKiBkZXBlbmQgb24gYEtWTWAsIGV2ZW4gaWYgaXQgaXNuJ3QgZXhwbGljaXRseSBzdGF0ZWQgaW4gdGhhdCBzaG9ydCBncmVwIG91dHB1dC4gTGV0IG1lIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybS4gWWVwLCB1bmRlciBgaWYgVklSVFVBTElaQVRJT05gLi4uaXQgZG9lcyBpbmRlZWQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODEzLCJPdXRwdXRUb2tlbnMiOjEyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMzoxMS42NDMwMjY4NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxOTI5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IHRvIGhhbmRsZSBhdG9taWMgY29udGV4dHMgcHJvcGVybHkgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgZmxhZyB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLiBUaGlzIGFmZmVjdHMgaXJxZmQgaW5qZWN0aW9uIGFuZCBYZW4gdGltZXIgY2FsbGJhY2tzLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9YRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1feGVuX3NldF9ldnRjaG5fZmFzdFwiLFxuICAgIFwia3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSB0byBoYW5kbGUgYXRvbWljIGNvbnRleHRzIHByb3Blcmx5IGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIGZsYWcgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YC4gVGhpcyBhZmZlY3RzIGlycWZkIGluamVjdGlvbiBhbmQgWGVuIHRpbWVyIGNhbGxiYWNrcywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAzOjExLjc2MjIyNzUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzYyODQ1MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDM6MTEuNzYyODA3NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTM2MjI1OTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBwYXJhbWV0ZXIgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KClgLiBXaGVuIGNhbGxlZCBpbiBhbiBhdG9taWMgY29udGV4dCwgaXQgbm93IHVzZXMgYHJlYWRfdHJ5bG9jaygpYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZSgpYCB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YTkwOTc0NTBkNGU2NTQxNDA5MzkyZTFjNWY5YWQ0NjdhOGI5MmRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTM6MDA6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaXJxLmMgYi9hcmNoL3g4Ni9rdm0vaXJxLmNcbmluZGV4IGNiOGFjNGI5YjBkNzQuLjlhZWYxMTUyOTNiNGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmNcbisrKyBiL2FyY2gveDg2L2t2bS9pcnEuY1xuQEAgLTI2Nyw3ICsyNjcsNyBAQCBpbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbiBcdFx0aWYgKCFsZXZlbClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdHJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLVx1MDAzZXhlbl9ldnRjaG4sIGt2bSk7XG4rXHRcdHJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLVx1MDAzZXhlbl9ldnRjaG4sIGt2bSwgdHJ1ZSk7XG4gI2VuZGlmXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDY5NGIzMWMxZmNjOWEuLjE0OTg4YWU3MTBhMmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgeGVuX3RpbWVyX2NhbGxiYWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdGUucG9ydCA9IHZjcHUtXHUwMDNlYXJjaC54ZW4udGltZXJfdmlycTtcbiBcdGUucHJpb3JpdHkgPSBLVk1fSVJRX1JPVVRJTkdfWEVOX0VWVENITl9QUklPXzJMRVZFTDtcbiBcbi1cdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZSwgdmNwdS1cdTAwM2Vrdm0pO1xuK1x0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLCB2Y3B1LVx1MDAzZWt2bSwgdHJ1ZSk7XG4gXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC54ZW4udGltZXJfZXhwaXJlcyA9IDA7XG4gXHRcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbkBAIC0xNzkyLDcgKzE3OTIsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuICAqIEl0IGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20ga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYygpLCB3aGVyZSB0aGVcbiAgKiBvbmx5IGNoZWNrIG9uIGl0cyByZXR1cm4gdmFsdWUgaXMgYSBjb21wYXJpc29uIHdpdGggLUVXT1VMREJMT0NLJy5cbiAgKi9cbi1pbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuK2ludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKVxuIHtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuQEAgLTE4MTksNyArMTgxOSwxNSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFxuLVx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGlmIChpbl9hdG9taWMpIHtcbitcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0XHRpZiAoIXJlYWRfdHJ5bG9jayhcdTAwMjZncGMtXHUwMDNlbG9jaykpIHtcbitcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXHRcdFx0Z290byBvdXRfcmN1X25vX2xvY2s7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHR9XG4gXHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKVxuIFx0XHRnb3RvIG91dF9yY3U7XG4gXG5AQCAtMTg1Myw3ICsxODYxLDE4IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0Z3BjID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGU7XG4gXG4tXHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGlmIChpbl9hdG9taWMpIHtcbitcdFx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHRcdFx0aWYgKCFyZWFkX3RyeWxvY2soXHUwMDI2Z3BjLVx1MDAzZWxvY2spKSB7XG4rXHRcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCxcbitcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkpXG4rXHRcdFx0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4rXHRcdFx0XHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0fVxuIFx0XHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBDb3VsZCBub3QgYWNjZXNzIHRoZSB2Y3B1X2luZm8uIFNldCB0aGUgYml0IGluLWtlcm5lbFxuQEAgLTE4ODgsNiArMTkwNyw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gIG91dF9yY3U6XG4gXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rIG91dF9yY3Vfbm9fbG9jazpcbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4gXG4gXHRpZiAoa2lja192Y3B1KSB7XG5AQCAtMTkwMyw3ICsxOTIzLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0Ym9vbCBtbV9ib3Jyb3dlZCA9IGZhbHNlO1xuIFx0aW50IHJjO1xuIFxuLVx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtKTtcbitcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xuIFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuQEAgLTE5MzcsNyArMTk1Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XG4gXHRcdGludCBpZHg7XG4gXG4tXHRcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG4rXHRcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xuIFx0XHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuIFx0XHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaFxuaW5kZXggNTllNjEyOGE3YmQzYy4uMTNkMzRhMDZmMzI1NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uaFxuKysrIGIvYXJjaC94ODYva3ZtL3hlbi5oXG5AQCAtMzIsNyArMzIsNyBAQCB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV94ZW5fZGVzdHJveV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSk7XG4rXHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpO1xuIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0IHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuIFx0XHRcdCBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMzoxMS43NjI4MDgzN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzYyMjMzNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvY2tpbmcgaXNzdWUgZml4LiBUaGUgcGF0Y2ggdGFyZ2V0cyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgYGJvb2wgaW5fYXRvbWljYCBwYXJhbWV0ZXIuIFRoaXMgcGFyYW1ldGVyJ3MgcHVycG9zZSBpcyBpbW1lZGlhdGVseSBjbGVhcjogdG8gY29uZGl0aW9uYWxseSBhZGp1c3QgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGJhc2VkIG9uIHRoZSBleGVjdXRpb24gY29udGV4dC5cblxuU3BlY2lmaWNhbGx5LCB3aGVuIGBpbl9hdG9taWNgIGlzIHRydWUsIHRoZSBjb2RlIG5vdyB1c2VzIGByZWFkX3RyeWxvY2tgIGluc3RlYWQgb2YgYHJlYWRfbG9ja19pcnFzYXZlYC4gVGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIGByZWFkX2xvY2tfaXJxc2F2ZWAgaGFzIHRoZSBwb3RlbnRpYWwgdG8gc2xlZXAsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZSB3aXRoaW4gYW4gYXRvbWljIGNvbnRleHQsIGFuZCBjYW4gbGVhZCB0byBkZWFkbG9ja3MuIGByZWFkX3RyeWxvY2tgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgbm9uLWJsb2NraW5nLiBJZiBpdCBjYW4ndCBhY3F1aXJlIHRoZSBsb2NrIGltbWVkaWF0ZWx5LCBpdCBzaW1wbHkgcmV0dXJucy5cblxuVGhlIGludGVudCBoZXJlIGlzIG9idmlvdXMuIEkgc2VlIGEgY2xlYXIgYXR0ZW1wdCB0byBhdm9pZCBzbGVlcGluZyBvciBkZWFkbG9ja2luZyB3aXRoaW4gcG90ZW50aWFsbHkgYXRvbWljIHNlY3Rpb25zIG9mIGNvZGUuIFRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiBhbmQgY3JpdGljYWwgdHlwZSBvZiBmaXgsIHdoaWNoIGltcHJvdmVzIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhhdCB0aGlzIGlzIGluZGVlZCB3aGF0IGlzIGhhcHBlbmluZy4gVGhlIHBhdGNoIG5vdGVzIHRoYXQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLCBib3RoIHdpdGggYGluX2F0b21pYyA9IHRydWVgLiBJdCdzIGFsc28gY2FsbGVkIGZyb20gYGt2bV94ZW5fc2V0X2V2dGNobmAgd2l0aCBgaW5fYXRvbWljID0gZmFsc2VgLiBUaGlzIGNvbmZpcm1zIHRoZSBleHBlY3RlZCBiZWhhdmlvcjogdGhlIG9wdGltaXplZCBsb2NrIGlzIGFwcGxpZWQgaW4gdGhlIGNvbnRleHRzIHdoZXJlIGl0IGlzIG5lY2Vzc2FyeS5cblxuVGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBpcyB3aGF0IHNvbGlkaWZpZXMgdGhpcyB1bmRlcnN0YW5kaW5nOlxuXG5gYGBjXG5cdGlmIChpbl9hdG9taWMpIHtcblx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG5cdFx0aWYgKCFyZWFkX3RyeWxvY2soXHUwMDI2Z3BjLVx1MDAzZWxvY2spKSB7XG5cdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG5cdFx0XHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcblx0fVxuYGBgXG5cblRoaXMgc25pcHBldCBkb2VzIGV4YWN0bHkgd2hhdCBpdCdzIHN1cHBvc2VkIHRvIGRvOiB1c2VzIGByZWFkX3RyeWxvY2tgIHdpdGggbG9jYWwgSVJRIGRpc2FibGluZyB0byBhdG9taWNhbGx5IGF0dGVtcHQgYWNxdWlyaW5nIHRoZSBsb2NrLiBJZiBpdCBmYWlscywgaXQgcmVzdG9yZXMgdGhlIHByZXZpb3VzIElSUSBzdGF0ZSBhbmQgZXhpdHMuIElmIGl0IHN1Y2NlZWRzLCBpdCdzIHNhZmUgdG8gcHJvY2VlZC5cblxuSSBzZWUgbm90aGluZyBoZXJlIHRoYXQgcmFpc2VzIGFueSBmbGFncyBmb3IgbWVtb3J5IHNhZmV0eSBjb25jZXJucy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGluaXRpYWxpemF0aW9uLCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBpcyBwdXJlbHkgYSBsb2NraW5nL3NjaGVkdWxpbmcgb3B0aW1pemF0aW9uIHRvIGF2b2lkIGEgcG90ZW50aWFsIGlzc3VlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXIuICoqTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGZhbHNlKiogaW4gdGhpcyBjYXNlLiBNeSByZWFzb25pbmcgaXMgdGhlIHBhdGNoIGlzIGV4Y2x1c2l2ZWx5IHJlbGF0ZWQgdG8gaW1wcm92aW5nIGxvY2tpbmcgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gbWVtb3J5IGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4NywiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMzoyMS4xMjUwNDUxNjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvY2tpbmcgaXNzdWUgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgcGFyYW1ldGVyIHRvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgpYC4gV2hlbiBjYWxsZWQgaW4gYW4gYXRvbWljIGNvbnRleHQsIGl0IG5vdyB1c2VzIGByZWFkX3RyeWxvY2soKWAgaW5zdGVhZCBvZiBgcmVhZF9sb2NrX2lycXNhdmUoKWAgdG8gcHJldmVudCBkZWFkbG9ja3Mgb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgd2hpY2ggYXJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBwYXJhbWV0ZXIgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KClgLiBXaGVuIGNhbGxlZCBpbiBhbiBhdG9taWMgY29udGV4dCwgaXQgbm93IHVzZXMgYHJlYWRfdHJ5bG9jaygpYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZSgpYCB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8vmvn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 12:58:14 +0000 UTC FinishedAt: 2026-08-12 13:03:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "e0f6b4a4-8640-4718-b237-b1b29362bbd4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kvm_xen_set_evtchn_fast", "kvm_arch_set_irq_inatomic" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvY2tpbmcgaXNzdWUgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgcGFyYW1ldGVyIHRvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgpYC4gV2hlbiBjYWxsZWQgaW4gYW4gYXRvbWljIGNvbnRleHQsIGl0IG5vdyB1c2VzIGByZWFkX3RyeWxvY2soKWAgaW5zdGVhZCBvZiBgcmVhZF9sb2NrX2lycXNhdmUoKWAgdG8gcHJldmVudCBkZWFkbG9ja3Mgb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgd2hpY2ggYXJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSB0byBoYW5kbGUgYXRvbWljIGNvbnRleHRzIHByb3Blcmx5IGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIGZsYWcgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YC4gVGhpcyBhZmZlY3RzIGlycWZkIGluamVjdGlvbiBhbmQgWGVuIHRpbWVyIGNhbGxiYWNrcywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YTkwOTc0NTBkNGU2NTQxNDA5MzkyZTFjNWY5YWQ0NjdhOGI5MmRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTM6MDA6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jXG5pbmRleCBjYjhhYzRiOWIwZDc0Li45YWVmMTE1MjkzYjRiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2lycS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaXJxLmNcbkBAIC0yNjcsNyAmIzQzOzI2Nyw3IEBAIGludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuIFx0XHRpZiAoIWxldmVsKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbi1cdFx0cmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUtXHUwMDNleGVuX2V2dGNobiwga3ZtKTtcbiYjNDM7XHRcdHJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLVx1MDAzZXhlbl9ldnRjaG4sIGt2bSwgdHJ1ZSk7XG4gI2VuZGlmXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDY5NGIzMWMxZmNjOWEuLjE0OTg4YWU3MTBhMmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhlbl90aW1lcl9jYWxsYmFjayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gXHRlLnBvcnQgPSB2Y3B1LVx1MDAzZWFyY2gueGVuLnRpbWVyX3ZpcnE7XG4gXHRlLnByaW9yaXR5ID0gS1ZNX0lSUV9ST1VUSU5HX1hFTl9FVlRDSE5fUFJJT18yTEVWRUw7XG4gXG4tXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUsIHZjcHUtXHUwMDNla3ZtKTtcbiYjNDM7XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUsIHZjcHUtXHUwMDNla3ZtLCB0cnVlKTtcbiBcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnhlbi50aW1lcl9leHBpcmVzID0gMDtcbiBcdFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xuQEAgLTE3OTIsNyAmIzQzOzE3OTIsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuICAqIEl0IGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20ga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYygpLCB3aGVyZSB0aGVcbiAgKiBvbmx5IGNoZWNrIG9uIGl0cyByZXR1cm4gdmFsdWUgaXMgYSBjb21wYXJpc29uIHdpdGggLUVXT1VMREJMT0NLJiMzOTsuXG4gICovXG4taW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpXG4ge1xuIFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG5AQCAtMTgxOSw3ICYjNDM7MTgxOSwxNSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFxuLVx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoaW5fYXRvbWljKSB7XG4mIzQzO1x0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0XHRpZiAoIXJlYWRfdHJ5bG9jayhcdTAwMjZncGMtXHUwMDNlbG9jaykpIHtcbiYjNDM7XHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0MztcdFx0XHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHR9XG4gXHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKVxuIFx0XHRnb3RvIG91dF9yY3U7XG4gXG5AQCAtMTg1Myw3ICYjNDM7MTg2MSwxOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGdwYyA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlO1xuIFxuLVx0XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKGluX2F0b21pYykge1xuJiM0MztcdFx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0XHRcdGlmICghcmVhZF90cnlsb2NrKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKSkge1xuJiM0MztcdFx0XHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpKVxuJiM0MztcdFx0XHRcdFx0a2lja192Y3B1ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogQ291bGQgbm90IGFjY2VzcyB0aGUgdmNwdV9pbmZvLiBTZXQgdGhlIGJpdCBpbi1rZXJuZWxcbkBAIC0xODg4LDYgJiM0MzsxOTA3LDcgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcbiAgb3V0X3JjdTpcbiBcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7IG91dF9yY3Vfbm9fbG9jazpcbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4gXG4gXHRpZiAoa2lja192Y3B1KSB7XG5AQCAtMTkwMyw3ICYjNDM7MTkyMyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGJvb2wgbW1fYm9ycm93ZWQgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbi1cdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG4mIzQzO1x0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtLCBmYWxzZSk7XG4gXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG5AQCAtMTkzNyw3ICYjNDM7MTk1Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XG4gXHRcdGludCBpZHg7XG4gXG4tXHRcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG4mIzQzO1x0XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbiBcdFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcbiBcdFx0XHRicmVhaztcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcbmluZGV4IDU5ZTYxMjhhN2JkM2MuLjEzZDM0YTA2ZjMyNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uaFxuQEAgLTMyLDcgJiM0MzszMiw3IEBAIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7XG4gdm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSxcbi1cdFx0XHQgICAgc3RydWN0IGt2bSAqa3ZtKTtcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpO1xuIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0IHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuIFx0XHRcdCBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gWGVuIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnkgdG8gaGFuZGxlIGF0b21pYyBjb250ZXh0cyBwcm9wZXJseSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBmbGFnIHRvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAuIFRoaXMgYWZmZWN0cyBpcnFmZCBpbmplY3Rpb24gYW5kIFhlbiB0aW1lciBjYWxsYmFja3MsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gS1ZNLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGE5MDk3NDUwZDRlNjU0MTQwOTM5MmUxYzVmOWFkNDY3YThiOTJkYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEzOjAwOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jCmluZGV4IGNiOGFjNGI5YjBkNzQuLjlhZWYxMTUyOTNiNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaXJxLmMKQEAgLTI2Nyw3ICYjNDM7MjY3LDcgQEAgaW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCiAJCWlmICghbGV2ZWwpCiAJCQlyZXR1cm4gLTE7CiAKLQkJcmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KCZhbXA7ZS0mZ3Q7eGVuX2V2dGNobiwga3ZtKTsKJiM0MzsJCXJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgmYW1wO2UtJmd0O3hlbl9ldnRjaG4sIGt2bSwgdHJ1ZSk7CiAjZW5kaWYKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA2OTRiMzFjMWZjYzlhLi4xNDk4OGFlNzEwYTJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKQogCWUucG9ydCA9IHZjcHUtJmd0O2FyY2gueGVuLnRpbWVyX3ZpcnE7CiAJZS5wcmlvcml0eSA9IEtWTV9JUlFfUk9VVElOR19YRU5fRVZUQ0hOX1BSSU9fMkxFVkVMOwogCi0JcmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgmYW1wO2UsIHZjcHUtJmd0O2t2bSk7CiYjNDM7CXJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoJmFtcDtlLCB2Y3B1LSZndDtrdm0sIHRydWUpOwogCWlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHsKIAkJdmNwdS0mZ3Q7YXJjaC54ZW4udGltZXJfZXhwaXJlcyA9IDA7CiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKQEAgLTE3OTIsNyAmIzQzOzE3OTIsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogICogSXQgaXMgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKCksIHdoZXJlIHRoZQogICogb25seSBjaGVjayBvbiBpdHMgcmV0dXJuIHZhbHVlIGlzIGEgY29tcGFyaXNvbiB3aXRoIC1FV09VTERCTE9DSyYjMzk7LgogICovCi1pbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO2ludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKQogewogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKQEAgLTE4MTksNyAmIzQzOzE4MTksMTUgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAogCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKIAotCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWlmIChpbl9hdG9taWMpIHsKJiM0MzsJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCWlmICghcmVhZF90cnlsb2NrKCZhbXA7Z3BjLSZndDtsb2NrKSkgewomIzQzOwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0MzsJCQlnb3RvIG91dF9yY3Vfbm9fbG9jazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CX0KIAlpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKQogCQlnb3RvIG91dF9yY3U7CiAKQEAgLTE4NTMsNyAmIzQzOzE4NjEsMTggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlncGMgPSAmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZTsKIAotCQlyZWFkX2xvY2tfaXJxc2F2ZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKGluX2F0b21pYykgewomIzQzOwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCQlpZiAoIXJlYWRfdHJ5bG9jaygmYW1wO2dwYy0mZ3Q7bG9jaykpIHsKJiM0MzsJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwKJiM0MzsJCQkJCQkgICAgICAmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkpCiYjNDM7CQkJCQlraWNrX3ZjcHUgPSB0cnVlOwomIzQzOwkJCQlnb3RvIG91dF9yY3Vfbm9fbG9jazsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl9CiAJCWlmICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHsKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgYWNjZXNzIHRoZSB2Y3B1X2luZm8uIFNldCB0aGUgYml0IGluLWtlcm5lbApAQCAtMTg4OCw2ICYjNDM7MTkwNyw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAKICBvdXRfcmN1OgogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtncGMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzsgb3V0X3JjdV9ub19sb2NrOgogCXNyY3VfcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O3NyY3UsIGlkeCk7CiAKIAlpZiAoa2lja192Y3B1KSB7CkBAIC0xOTAzLDcgJiM0MzsxOTIzLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCWJvb2wgbW1fYm9ycm93ZWQgPSBmYWxzZTsKIAlpbnQgcmM7CiAKLQlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pOwomIzQzOwlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTsKIAlpZiAocmMgIT0gLUVXT1VMREJMT0NLKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE5MzcsNyAmIzQzOzE5NTcsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwogCQlpbnQgaWR4OwogCi0JCXJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7CiYjNDM7CQlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTsKIAkJaWYgKHJjICE9IC1FV09VTERCTE9DSykKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmgKaW5kZXggNTllNjEyOGE3YmQzYy4uMTNkMzRhMDZmMzI1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uaApAQCAtMzIsNyAmIzQzOzMyLDcgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLAotCQkJICAgIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CQkJICAgIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpOwogaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwKIAkJCSBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKIAkJCSBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFhlbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIHdpdGhpbiB0aGUgS1ZNIFhlbiBlbXVsYXRpb24gY29kZS4gVGhleSYjMzk7cmUgYWRkaW5nIGEgYm9vbGVhbiwgYGluX2F0b21pY2AsIHdoaWNoIGlzIGEgY2xldmVyIG1vdmUuIEJhc2ljYWxseSwgaWYgd2UmIzM5O3JlIGluIGFuIGF0b21pYyBjb250ZXh0LCBsaWtlIHdpdGhpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciBvciBhIHRpbWVyIGNhbGxiYWNrLCB3ZSBuZWVkIHRvIGJlICp2ZXJ5KiBjYXJlZnVsIGFib3V0IGxvY2tpbmcuIFRoZXkmIzM5O3JlIHVzaW5nIGByZWFkX3RyeWxvY2tgIGluc3RlYWQgb2YgYHJlYWRfbG9ja19pcnFzYXZlYCB3aGVuIGBpbl9hdG9taWNgIGlzIHNldCB0byBhdm9pZCBzbGVlcGluZyBvciwgZXZlbiB3b3JzZSwgY2F1c2luZyBhIGRlYWRsb2NrLiBTbWFydC4KClRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgYXMgdGhhdCYjMzk7cyBleHBsaWNpdGx5IGFuIGF0b21pYyBjb250ZXh0LCBhbmQgYWxzbyBmcm9tIGB4ZW5fdGltZXJfY2FsbGJhY2tgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aW1lcnMgY2FuIHRyaWdnZXIgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQsIGFuZCBhbHNvIHRoZSBvcmlnaW5hbCBga3ZtX3hlbl9zZXRfZXZ0Y2huYC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgdGFyZ2V0ZWQgYXQgdGhlIEtWTSBYZW4gZW11bGF0aW9uIGxheWVyLCBzbyBpdCYjMzk7cyBhIGRpcmVjdCBjb25jZXJuIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgS1ZNLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGFsdGVyaW5nIGxvY2tpbmcgYmVoYXZpb3Igd2l0aGluIGFuIGVudmlyb25tZW50IHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSBhIGd1ZXN0LCBpdOKAmXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByb2NrIHNvbGlkLgoKTGV0IG1lIGdvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBhY3R1YWxseSBjb25maWd1cmUgdGhpcyBLVk0gWGVuIGVtdWxhdGlvbi4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgYXJjaC94ODYva3ZtL0tjb25maWdgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLVk1fWEVOIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uIGlzIGBLVk1fWEVOYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgaW50ZXJlc3RpbmcgY2hvaWNlLiYjMzQ7IEdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXMsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gYXNzZXNzICp3aHkqIHRoaXMgY29uZmlnIGlzIHVzZWQgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBhcmUgYWZmZWN0ZWQuIFdoYXQgYXJlIHRoZSBzdXBwb3J0aW5nIGNvbXBvbmVudHMgbmVjZXNzYXJ5IGZvciBgS1ZNX1hFTmAgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBUaGlzIGNvdWxkIHJhbmdlIGZyb20gc3BlY2lmaWMga2VybmVsIG1vZHVsZXMsIHRvIHBhcnRpY3VsYXIgaGFyZHdhcmUgc3VwcG9ydCByZXF1aXJlbWVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9YRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTS1YZW4gTG9ja2luZyBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL2lycS5jYCwgYGFyY2gveDg2L2t2bS94ZW4uY2AsIGFuZCBgYXJjaC94ODYva3ZtL3hlbi5oYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgYSBtb2RlcmF0ZWx5IHNpZ25pZmljYW50IGNoYW5nZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gS1ZNIGFuZCB0aGUgWGVuIGh5cGVydmlzb3IuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBub3cgdGFraW5nIGFuIGBpbl9hdG9taWNgIGJvb2xlYW4uCgpUaGUgcmVhbCBrZXkgaGVyZSBpcyBob3cgdGhlIGxvY2tpbmcgaGFzIGJlZW4gYWx0ZXJlZC4gIFVzaW5nIGBsb2NhbF9pcnFfc2F2ZWAgYW5kIGByZWFkX3RyeWxvY2tgICppbnN0ZWFkIG9mKiBgcmVhZF9sb2NrX2lycXNhdmVgIHdoZW4gYGluX2F0b21pY2AgaXMgdHJ1ZSBpcyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGxvY2tpbmcgc2VtYW50aWNzLiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZyB0byBleHBsb3JlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB1bmRlciBsb2FkLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBmdW5jdGlvbiBpcyB1c2VkLiBJJiMzOTttIHNlZWluZyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgKGluIGBhcmNoL3g4Ni9rdm0vaXJxLmNgKSBhbmQgYHhlbl90aW1lcl9jYWxsYmFja2AgKGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgKSB3aXRoIGBpbl9hdG9taWMgPSB0cnVlYCwgYW5kIGZyb20gYGt2bV94ZW5fc2V0X2V2dGNobmAgd2l0aCBgaW5fYXRvbWljID0gZmFsc2VgLiBHb3QgaXQuCgpUaGlzIGRlcGVuZHMgb24gdGhlIGBLVk1fWEVOYCBjb25maWcgb3B0aW9uIOKAkyB0aGF0JiMzOTtzIGV4cGVjdGVkLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIGZvY3VzIHN5bWJvbHMuICBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGlzIHRoZSBoZWFydCBvZiBpdCwgb2J2aW91c2x5LiAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGNhbGxzIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAuICBga3ZtX3hlbl9zZXRfZXZ0Y2huYCBpcyB3b3J0aCBhIGxvb2sgYXMgd2VsbCBhcyBpdCBpbnRlcmFjdHMgd2l0aCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIGV4cG9ydGVkIHN5bWJvbHMgb3Igc3RhdGljLiAqQ2hlY2tzKi4gIE9rYXksICBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGlzICpub3QqIHN0YXRpYyDigJMgZGVmaW5lZCBpbiBgeGVuLmNgIGFuZCBkZWNsYXJlZCBpbiBgeGVuLmhgLiBHb29kLiBJIG5lZWRlZCB0byBjaGVjay4KCkFscmlnaHQsICBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaXMgbm90IHN0YXRpYywgc28gdGhhdCBpcyBmaW5lLiBDaGVja2luZyBga3ZtX3hlbl9zZXRfZXZ0Y2huYCAuLi4gdGhhdCBvbmUgKmlzKiBzdGF0aWMuIFNhbWUgd2l0aCBgeGVuX3RpbWVyX2NhbGxiYWNrYC4KClNvIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGFyZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgS1ZNX1hFTmAuICBZZXAsIGl0IGRlcGVuZHMgb24gYEtWTWAsIHdoaWNoIGlzIGV4cGVjdGVkLiAgSSYjMzk7bGwgc2NhbiB0aHJvdWdoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AganVzdCB0byBjb25maXJtIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCB0aGUgZGVwZW5kZW5jaWVzIG9yIGV4dHJhIGNvbmZpZyBmbGFncyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1hFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gWGVuIEV2ZW50IENoYW5uZWwgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIHdpdGhpbiB0aGUgS1ZNIFhlbiBlbXVsYXRpb24gY29kZSwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGFuIGBpbl9hdG9taWNgIGJvb2xlYW4uIFdoZW4gdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLCBpdCYjMzk7cyB1dGlsaXppbmcgYGxvY2FsX2lycV9zYXZlYCBhbmQgYHJlYWRfdHJ5bG9ja2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJZiBpdCYjMzk7cyBmYWxzZSwgdGhlIGNvZGUgZ29lcyB3aXRoIGByZWFkX2xvY2tfaXJxc2F2ZWAuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgbG9ja2luZyBzdHJhdGVneSB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBLVk0sIEkga25vdyB0aGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRob3NlIEtWTSBpb2N0bHMg4oCTIHRoZSBvbmVzIGxpa2UgYEtWTV9JUlFfUk9VVElOR19YRU5fRVZUQ0hOYCwgc28gaXQmIzM5O3MgcG90ZW50aWFsbHkgZXhwb3NlZC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBLVk1fWEVOYCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaGVyZSwgYXMgeW91JiMzOTtkIGV4cGVjdC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGFuZCBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgaXRzZWxmIGlzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3MgYWxzbyBjYWxsZWQgZnJvbSBvdGhlciBmdW5jdGlvbnMgbGlrZSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGB4ZW5fdGltZXJfY2FsbGJhY2tgIGFuZCBhbHNvIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGt2bV94ZW5fc2V0X2V2dGNobmAsIHdoaWNoIEkgc2hvdWxkIGxvb2sgYXQgbW9yZSBjbG9zZWx5LiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyB0aGlzLiBMZXQgbWUgc2VlLi4uIGBrdm1feGVuX3NldF9ldnRjaG5gIGFuZCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2Agc2VlbSBsaWtlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMsIGFuZCBwb3RlbnRpYWxseSBgeGVuX3RpbWVyX2NhbGxiYWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhvc2UgaXMgdGhlIGJlc3QgdG8gdGFyZ2V0LiBGaXJzdCwgSSB3aWxsIGxvb2sgYXQgYGt2bV94ZW5fc2V0X2V2dGNobmAuIE5vdywgaXMgaXQgc3RhdGljPyBMZXQgbWUgZmluZCB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ZW4uYy0zMS1cbmFyY2gveDg2L2t2bS94ZW4uYzozMjpzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYva3ZtL3hlbi5jLTMzLXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTA4PXZvaWQga3ZtX3hlbl9pbmplY3RfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTExNy1cbmFyY2gveDg2L2t2bS94ZW4uYzoxMTg6XHRcdGt2bV94ZW5fc2V0X2V2dGNobihcdTAwMjZlLCB2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTE5LVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xMjU9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhlbl90aW1lcl9jYWxsYmFjayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTEzOS1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNDA6XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUsIHZjcHUtXHUwMDNla3ZtLCB0cnVlKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNDEtXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTE3NzQ9c3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc5NC0gKi9cbmFyY2gveDg2L2t2bS94ZW4uYzoxNzk1OmludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTYte1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTIwLVxuYXJjaC94ODYva3ZtL3hlbi5jOjE5MjE6c3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjIte1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTI1LVxuYXJjaC94ODYva3ZtL3hlbi5jOjE5MjY6XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTI3LVx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk1OS1cbmFyY2gveDg2L2t2bS94ZW4uYzoxOTYwOlx0XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTYxLVx0XHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xOTc2PXN0YXRpYyBpbnQgZXZ0Y2huX3NldF9mbihzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTgxLVxuYXJjaC94ODYva3ZtL3hlbi5jOjE5ODI6XHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huKFx1MDAyNmUtXHUwMDNleGVuX2V2dGNobiwga3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTgzLX1cbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjAzOT1pbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKnV4ZSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA1NS1cbmFyY2gveDg2L2t2bS94ZW4uYzoyMDU2Olx0cmV0ID0ga3ZtX3hlbl9zZXRfZXZ0Y2huKFx1MDAyNmUsIGt2bSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA1Ny1cbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjI4NT1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMDgtXHRpZiAoZXZ0Y2huZmQtXHUwMDNlZGVsaXZlci5wb3J0LnBvcnQpIHtcbmFyY2gveDg2L2t2bS94ZW4uYzoyMzA5Olx0XHRpbnQgcmV0ID0ga3ZtX3hlbl9zZXRfZXZ0Y2huKFx1MDAyNmV2dGNobmZkLVx1MDAzZWRlbGl2ZXIucG9ydCwgdmNwdS1cdTAwM2Vrdm0pO1xuYXJjaC94ODYva3ZtL3hlbi5jLTIzMTAtXHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5PVENPTk4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBYZW4gRXZlbnQgQ2hhbm5lbCBhbmQgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBzeW1ib2xzOiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGFuZCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgaW1wb3J0YW50IGFuZCBhY2Nlc3NpYmxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEtWTS9YZW4gaW50ZXJhY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZWlyIGluY2x1c2lvbi4KCkl0IGxvb2tzIGxpa2UgYm90aCBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFyZSBjb25maWd1cmVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcy4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB3aGV0aGVyIGBLVk1gIGFsb25lIGlzIHN1ZmZpY2llbnQsIG9yIGlmIGBLVk1fWDg2YCBvciBhbm90aGVyIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb24gaXMgcmVxdWlyZWQsIGFzIHdlbGwuIFNpbmNlIGBLVk1fWEVOYCBpcyBzcGVjaWZpY2FsbHkgZGVkaWNhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIGBLVk1gIGlzIHRoZSBiYXNlLCBJJiMzOTtsbCByZXR1cm4gYm90aCBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFzIHRoZSBkZXRlcm1pbmluZyBmYWN0b3JzLgoKTm93LCBqdXN0IHRvIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgZml0cyBpbiwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgaXRzIGxvY2F0aW9uIGluIGBhcmNoL3g4Ni9rdm0vaXJxLmNgIHRvIGNvbmZpcm0gbXkgbWVudGFsIG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lycS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pcnEuYz0yMjU9aW50IGt2bV9zZXRfbXNpKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gveDg2L2t2bS9pcnEuYy0yNDAtXG5hcmNoL3g4Ni9rdm0vaXJxLmM6MjQxOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuYXJjaC94ODYva3ZtL2lycS5jLTI0Mi1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTkyPWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xMDgtLypcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjEwOTogKiBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljOiBmYXN0LXBhdGggZm9yIGlycWZkIGluamVjdGlvblxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTEwLSAqL1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM6MTExOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTEyLVx0XHRcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaXJxZmQuYz00ND1pbnQga3ZtX3NldF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaXJxZmQuYy02OS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pcnFmZC5jOjcwOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuYXJjaC9sb29uZ2FyY2gva3ZtL2lycWZkLmMtNzEtXHRcdHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jPTEwMjI9aW50IGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIHUzMiBpcnEsIGludCBsZXZlbCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTEwMzItXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jOjEwMzM6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmlycV9lbnRyeSxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMtMTAzNC1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmM9MTE5PWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMTQ5LVxuYXJjaC9yaXNjdi9rdm0vdm0uYzoxNTA6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG5hcmNoL3Jpc2N2L2t2bS92bS5jLTE1MS1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zNjkzPWludCBfX2luaXQga3ZtX3MzOTBfZ2liX2luaXQodTggbmlzYylcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDgtLypcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc0OTogKiBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljOiBmYXN0LXBhdGggZm9yIGlycWZkIGluamVjdGlvblxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzUwLSAqL1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzUxOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzUyLVx0XHRcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmM9MjI1PWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjQwLVxuYXJjaC94ODYva3ZtL2lycS5jOjI0MTppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbmFyY2gveDg2L2t2bS9pcnEuYy0yNDItXHRcdFx0ICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xNzc0PXN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTEtICpcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzkyOiAqIEl0IGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20ga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYygpLCB3aGVyZSB0aGVcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzkzLSAqIG9ubHkgY2hlY2sgb24gaXRzIHJldHVybiB2YWx1ZSBpcyBhIGNvbXBhcmlzb24gd2l0aCAtRVdPVUxEQkxPQ0smIzM5Oy5cbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTgwND1pbnQga3ZtX3NldF9tc2koc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmlycV9lbnRyeSwgc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE4MDUtXHRcdGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE4MDY6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTgwNy1cdFx0XHQgICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCxcbi0tXG52aXJ0L2t2bS9ldmVudGZkLmM9MTc5PXN0YXRpYyB2b2lkIGlycWZkX2RlYWN0aXZhdGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKVxuLS1cbnZpcnQva3ZtL2V2ZW50ZmQuYy0xODktXG52aXJ0L2t2bS9ldmVudGZkLmM6MTkwOmludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhcbnZpcnQva3ZtL2V2ZW50ZmQuYy0xOTEtXHRcdFx0XHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqaXJxLFxuLS1cbnZpcnQva3ZtL2V2ZW50ZmQuYz0yMDM9aXJxZmRfd2FrZXVwKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSlcbi0tXG52aXJ0L2t2bS9ldmVudGZkLmMtMjM1LVx0XHRpZiAodW5saWtlbHkoIWlycWZkX2lzX2FjdGl2ZShpcnFmZCkpIHx8XG52aXJ0L2t2bS9ldmVudGZkLmM6MjM2Olx0XHQgICAga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhcdTAwMjZpcnEsIGt2bSxcbnZpcnQva3ZtL2V2ZW50ZmQuYy0yMzctXHRcdFx0XHRcdCAgICAgIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwgMSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX3NldF9ldnRjaG5fZmFzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmM9MTI1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xMzktXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQwOlx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLCB2Y3B1LVx1MDAzZWt2bSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQxLVx0aWYgKHJjICE9IC1FV09VTERCTE9DSykge1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xNzc0PXN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTQtICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTc5NTppbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtLCBib29sIGluX2F0b21pYylcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzk2LXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTkyMT1zdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjUtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTkyNjpcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjctXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTU5LVxuYXJjaC94ODYva3ZtL3hlbi5jOjE5NjA6XHRcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE5NjEtXHRcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODEzCgkJCQkJCQlvdXRwdXQ6IDEyNwoJCQkJCQkJdGhvdWdodHM6IDk5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gWGVuIEV2ZW50IENoYW5uZWwgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBJIHNlZSBpdCYjMzk7cyBtb2RpZnlpbmcgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlIGNvcmUgY2hhbmdlIGludHJvZHVjZXMgYSBgYm9vbGVhbiBpbl9hdG9taWNgIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGxvY2tpbmcgc3RyYXRlZ3kuIElmIGBpbl9hdG9taWNgIGlzIHRydWUsIHdlJiMzOTtyZSB1c2luZyBhIHRyeS1sb2NrIGFwcHJvYWNoOiBgbG9jYWxfaXJxX3NhdmVgIHdpdGggYHJlYWRfdHJ5bG9ja2AsIGZhbGxpbmcgYmFjay9iYWlsaW5nIGlmIHRoZSBsb2NrIGZhaWxzLiBJZiBgaW5fYXRvbWljYCBpcyBmYWxzZSwgaXQmIzM5O3MgdGhlIG1vcmUgc3RhbmRhcmQgYHJlYWRfbG9ja19pcnFzYXZlYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEtWTSBYZW4gZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgaGFuZGxpbmcgYXRvbWljIGNvbnRleHRzIGdyYWNlZnVsbHkuCgpJdCBhcHBlYXJzIHRoaXMgYWZmZWN0cyBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGNhbGxlZCBmcm9tIGBpcnFmZF93YWtldXBgLCBhbmQgYWxzbyBgeGVuX3RpbWVyX2NhbGxiYWNrYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBhbiBocnRpbWVyIGNvbnRleHQuIFRoZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGxpa2VseSBhdm9pZGluZyBkZWFkbG9ja3Mgb3IgbG9ja2RlcCB3YXJuaW5ncyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdW5zYWZlIGxvY2sgdXNhZ2Ugd2l0aGluIHRoZXNlIGF0b21pYyBjb250ZXh0cy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0aGUgZml4LgoKVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgYEtWTWAgYW5kIGBLVk1fWEVOYC4KCk15IHByaW1hcnkgZm9jdXMgaXMgbm93IG9uIHRoZXNlIHN5bWJvbHM6IGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYGt2bV94ZW5fc2V0X2V2dGNobmAgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLgoKSSYjMzk7bGwgZG91YmxlIGNoZWNrIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCBpbiBgYXJjaC94ODYva3ZtL2lycS5jYC4gQWgsIHRoZXJlIGl0IGlzOiBpdCBjYWxscyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoJmFtcDtlLSZndDt4ZW5fZXZ0Y2huLCBrdm0sIHRydWUpYC4gU28gdGhhdCBjb25maXJtcyB0aGUgYXRvbWljIGNvbnRleHQgdXNhZ2UuCgpUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgS1ZNIFhlbiBldmVudCBjaGFubmVscyBhcmUgZGVsaXZlcmVkLCBkaXJlY3RseSBpbXBhY3RpbmcgaG93IGludGVycnVwdHMgYXJlIGluamVjdGVkIGFuZCB0aW1lcnMgYXJlIGhhbmRsZWQsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzeXN0ZW0gc3RhYmlsaXR5LgoKQ29uZmlncyBhZ2FpbjogYEtWTWAsIGBLVk1fWEVOYC4KCkZvY3VzIFN5bWJvbHMgKGFnYWluKTogYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huYCwgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLgoKSG9sZCBvbiwgYHhlbl90aW1lcl9jYWxsYmFja2AgaXMgc3RhdGljLiBTaW5jZSB0aGUgcHJvbXB0IHByZWZlcnMgbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgaXQgbG9va3MgbGlrZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGlzIG5vdCBzdGF0aWMgKGl0JiMzOTtzIGV4cG9ydGVkIGluIGB4ZW4uaGApLiBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaXMgYWxzbyBub3Qgc3RhdGljLiBga3ZtX3hlbl9zZXRfZXZ0Y2huYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdoeSBpdCBnZXRzIGxlc3MgYXR0ZW50aW9uLiBBbmQsIHRoZXJlIGlzIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAgd2hpY2ggaXMgbm90IHN0YXRpYyBhbmQgaXMgcmVsZXZhbnQuIExldCBtZSBjaGVjayBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgIGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgIHJlYWwgcXVpY2suIExvb2tzIGxpa2UgaXQgY2FsbHMgYGt2bV94ZW5fc2V0X2V2dGNobmAuIExldCYjMzk7cyBjaGVjayBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaW4gYGFyY2gveDg2L2t2bS9pcnEuY2AgYWdhaW4ganVzdCB0byBiZSBzdXJlLgoKSSYjMzk7bGwgc3RpY2sgd2l0aCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGFuZCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgYXMgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGZvciBub3cuCgpDb25maWdzIG9uZSBsYXN0IHRpbWU6IGBLVk1gLCBgS1ZNX1hFTmAuCgpEZXBlbmRlbmN5IGNoZWNrLi4uIGBLVk1fWEVOYCAqZG9lcyogZGVwZW5kIG9uIGBLVk1gLCBldmVuIGlmIGl0IGlzbiYjMzk7dCBleHBsaWNpdGx5IHN0YXRlZCBpbiB0aGF0IHNob3J0IGdyZXAgb3V0cHV0LiBMZXQgbWUgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBjb25maXJtLiBZZXAsIHVuZGVyIGBpZiBWSVJUVUFMSVpBVElPTmAuLi5pdCBkb2VzIGluZGVlZC4KCkFscmlnaHQsIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV94ZW5fc2V0X2V2dGNobl9mYXN0JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IHRvIGhhbmRsZSBhdG9taWMgY29udGV4dHMgcHJvcGVybHkgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgZmxhZyB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLiBUaGlzIGFmZmVjdHMgaXJxZmQgaW5qZWN0aW9uIGFuZCBYZW4gdGltZXIgY2FsbGJhY2tzLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3NldF9ldnRjaG5fZmFzdCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSB0byBoYW5kbGUgYXRvbWljIGNvbnRleHRzIHByb3Blcmx5IGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIGZsYWcgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YC4gVGhpcyBhZmZlY3RzIGlycWZkIGluamVjdGlvbiBhbmQgWGVuIHRpbWVyIGNhbGxiYWNrcywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEzOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTM6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBwYXJhbWV0ZXIgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KClgLiBXaGVuIGNhbGxlZCBpbiBhbiBhdG9taWMgY29udGV4dCwgaXQgbm93IHVzZXMgYHJlYWRfdHJ5bG9jaygpYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZSgpYCB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGE5MDk3NDUwZDRlNjU0MTQwOTM5MmUxYzVmOWFkNDY3YThiOTJkYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEzOjAwOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jCmluZGV4IGNiOGFjNGI5YjBkNzQuLjlhZWYxMTUyOTNiNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaXJxLmMKQEAgLTI2Nyw3ICYjNDM7MjY3LDcgQEAgaW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCiAJCWlmICghbGV2ZWwpCiAJCQlyZXR1cm4gLTE7CiAKLQkJcmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KCZhbXA7ZS0mZ3Q7eGVuX2V2dGNobiwga3ZtKTsKJiM0MzsJCXJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgmYW1wO2UtJmd0O3hlbl9ldnRjaG4sIGt2bSwgdHJ1ZSk7CiAjZW5kaWYKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA2OTRiMzFjMWZjYzlhLi4xNDk4OGFlNzEwYTJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKQogCWUucG9ydCA9IHZjcHUtJmd0O2FyY2gueGVuLnRpbWVyX3ZpcnE7CiAJZS5wcmlvcml0eSA9IEtWTV9JUlFfUk9VVElOR19YRU5fRVZUQ0hOX1BSSU9fMkxFVkVMOwogCi0JcmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgmYW1wO2UsIHZjcHUtJmd0O2t2bSk7CiYjNDM7CXJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoJmFtcDtlLCB2Y3B1LSZndDtrdm0sIHRydWUpOwogCWlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHsKIAkJdmNwdS0mZ3Q7YXJjaC54ZW4udGltZXJfZXhwaXJlcyA9IDA7CiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKQEAgLTE3OTIsNyAmIzQzOzE3OTIsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogICogSXQgaXMgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKCksIHdoZXJlIHRoZQogICogb25seSBjaGVjayBvbiBpdHMgcmV0dXJuIHZhbHVlIGlzIGEgY29tcGFyaXNvbiB3aXRoIC1FV09VTERCTE9DSyYjMzk7LgogICovCi1pbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO2ludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKQogewogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKQEAgLTE4MTksNyAmIzQzOzE4MTksMTUgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAogCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKIAotCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWlmIChpbl9hdG9taWMpIHsKJiM0MzsJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCWlmICghcmVhZF90cnlsb2NrKCZhbXA7Z3BjLSZndDtsb2NrKSkgewomIzQzOwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0MzsJCQlnb3RvIG91dF9yY3Vfbm9fbG9jazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CX0KIAlpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKQogCQlnb3RvIG91dF9yY3U7CiAKQEAgLTE4NTMsNyAmIzQzOzE4NjEsMTggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlncGMgPSAmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZTsKIAotCQlyZWFkX2xvY2tfaXJxc2F2ZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKGluX2F0b21pYykgewomIzQzOwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJCQlpZiAoIXJlYWRfdHJ5bG9jaygmYW1wO2dwYy0mZ3Q7bG9jaykpIHsKJiM0MzsJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwKJiM0MzsJCQkJCQkgICAgICAmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkpCiYjNDM7CQkJCQlraWNrX3ZjcHUgPSB0cnVlOwomIzQzOwkJCQlnb3RvIG91dF9yY3Vfbm9fbG9jazsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl9CiAJCWlmICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHsKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgYWNjZXNzIHRoZSB2Y3B1X2luZm8uIFNldCB0aGUgYml0IGluLWtlcm5lbApAQCAtMTg4OCw2ICYjNDM7MTkwNyw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAKICBvdXRfcmN1OgogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtncGMtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzsgb3V0X3JjdV9ub19sb2NrOgogCXNyY3VfcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O3NyY3UsIGlkeCk7CiAKIAlpZiAoa2lja192Y3B1KSB7CkBAIC0xOTAzLDcgJiM0MzsxOTIzLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCWJvb2wgbW1fYm9ycm93ZWQgPSBmYWxzZTsKIAlpbnQgcmM7CiAKLQlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pOwomIzQzOwlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTsKIAlpZiAocmMgIT0gLUVXT1VMREJMT0NLKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE5MzcsNyAmIzQzOzE5NTcsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwogCQlpbnQgaWR4OwogCi0JCXJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7CiYjNDM7CQlyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTsKIAkJaWYgKHJjICE9IC1FV09VTERCTE9DSykKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmgKaW5kZXggNTllNjEyOGE3YmQzYy4uMTNkMzRhMDZmMzI1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uaApAQCAtMzIsNyAmIzQzOzMyLDcgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLAotCQkJICAgIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CQkJICAgIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpOwogaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwKIAkJCSBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKIAkJCSBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg3CgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvY2tpbmcgaXNzdWUgZml4LiBUaGUgcGF0Y2ggdGFyZ2V0cyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgYGJvb2wgaW5fYXRvbWljYCBwYXJhbWV0ZXIuIFRoaXMgcGFyYW1ldGVyJiMzOTtzIHB1cnBvc2UgaXMgaW1tZWRpYXRlbHkgY2xlYXI6IHRvIGNvbmRpdGlvbmFsbHkgYWRqdXN0IHRoZSBsb2NraW5nIG1lY2hhbmlzbSBiYXNlZCBvbiB0aGUgZXhlY3V0aW9uIGNvbnRleHQuCgpTcGVjaWZpY2FsbHksIHdoZW4gYGluX2F0b21pY2AgaXMgdHJ1ZSwgdGhlIGNvZGUgbm93IHVzZXMgYHJlYWRfdHJ5bG9ja2AgaW5zdGVhZCBvZiBgcmVhZF9sb2NrX2lycXNhdmVgLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4gYHJlYWRfbG9ja19pcnFzYXZlYCBoYXMgdGhlIHBvdGVudGlhbCB0byBzbGVlcCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlIHdpdGhpbiBhbiBhdG9taWMgY29udGV4dCwgYW5kIGNhbiBsZWFkIHRvIGRlYWRsb2Nrcy4gYHJlYWRfdHJ5bG9ja2AsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBub24tYmxvY2tpbmcuIElmIGl0IGNhbiYjMzk7dCBhY3F1aXJlIHRoZSBsb2NrIGltbWVkaWF0ZWx5LCBpdCBzaW1wbHkgcmV0dXJucy4KClRoZSBpbnRlbnQgaGVyZSBpcyBvYnZpb3VzLiBJIHNlZSBhIGNsZWFyIGF0dGVtcHQgdG8gYXZvaWQgc2xlZXBpbmcgb3IgZGVhZGxvY2tpbmcgd2l0aGluIHBvdGVudGlhbGx5IGF0b21pYyBzZWN0aW9ucyBvZiBjb2RlLiBUaGlzIGlzIGEgdmVyeSBjb21tb24gYW5kIGNyaXRpY2FsIHR5cGUgb2YgZml4LCB3aGljaCBpbXByb3ZlcyBvdmVyYWxsIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGlzIGlzIGluZGVlZCB3aGF0IGlzIGhhcHBlbmluZy4gVGhlIHBhdGNoIG5vdGVzIHRoYXQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLCBib3RoIHdpdGggYGluX2F0b21pYyA9IHRydWVgLiBJdCYjMzk7cyBhbHNvIGNhbGxlZCBmcm9tIGBrdm1feGVuX3NldF9ldnRjaG5gIHdpdGggYGluX2F0b21pYyA9IGZhbHNlYC4gVGhpcyBjb25maXJtcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3I6IHRoZSBvcHRpbWl6ZWQgbG9jayBpcyBhcHBsaWVkIGluIHRoZSBjb250ZXh0cyB3aGVyZSBpdCBpcyBuZWNlc3NhcnkuCgpUaGUgYWN0dWFsIGNvZGUgY2hhbmdlIGlzIHdoYXQgc29saWRpZmllcyB0aGlzIHVuZGVyc3RhbmRpbmc6CgpgYGBjCglpZiAoaW5fYXRvbWljKSB7CgkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwoJCWlmICghcmVhZF90cnlsb2NrKCZhbXA7Z3BjLSZndDtsb2NrKSkgewoJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CgkJCWdvdG8gb3V0X3JjdV9ub19sb2NrOwoJCX0KCX0gZWxzZSB7CgkJcmVhZF9sb2NrX2lycXNhdmUoJmFtcDtncGMtJmd0O2xvY2ssIGZsYWdzKTsKCX0KYGBgCgpUaGlzIHNuaXBwZXQgZG9lcyBleGFjdGx5IHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gZG86IHVzZXMgYHJlYWRfdHJ5bG9ja2Agd2l0aCBsb2NhbCBJUlEgZGlzYWJsaW5nIHRvIGF0b21pY2FsbHkgYXR0ZW1wdCBhY3F1aXJpbmcgdGhlIGxvY2suIElmIGl0IGZhaWxzLCBpdCByZXN0b3JlcyB0aGUgcHJldmlvdXMgSVJRIHN0YXRlIGFuZCBleGl0cy4gSWYgaXQgc3VjY2VlZHMsIGl0JiMzOTtzIHNhZmUgdG8gcHJvY2VlZC4KCkkgc2VlIG5vdGhpbmcgaGVyZSB0aGF0IHJhaXNlcyBhbnkgZmxhZ3MgZm9yIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZy9zY2hlZHVsaW5nIG9wdGltaXphdGlvbiB0byBhdm9pZCBhIHBvdGVudGlhbCBpc3N1ZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhci4gKipOZWVkc0tNU0FOIHNob3VsZCBiZSBzZXQgdG8gZmFsc2UqKiBpbiB0aGlzIGNhc2UuIE15IHJlYXNvbmluZyBpcyB0aGUgcGF0Y2ggaXMgZXhjbHVzaXZlbHkgcmVsYXRlZCB0byBpbXByb3ZpbmcgbG9ja2luZyB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBsb2NraW5nIGlzc3VlIGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIHBhcmFtZXRlciB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoKWAuIFdoZW4gY2FsbGVkIGluIGFuIGF0b21pYyBjb250ZXh0LCBpdCBub3cgdXNlcyBgcmVhZF90cnlsb2NrKClgIGluc3RlYWQgb2YgYHJlYWRfbG9ja19pcnFzYXZlKClgIHRvIHByZXZlbnQgZGVhZGxvY2tzIG9yIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0LiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHdoaWNoIGFyZSB0aGUgcHJpbWFyeSB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBwYXJhbWV0ZXIgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KClgLiBXaGVuIGNhbGxlZCBpbiBhbiBhdG9taWMgY29udGV4dCwgaXQgbm93IHVzZXMgYHJlYWRfdHJ5bG9jaygpYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZSgpYCB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDA6MzIuMjQ2MzUwNjE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODc4NzM3NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsb2NraW5nIGlzc3VlIGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIHBhcmFtZXRlciB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoKWAuIFdoZW4gY2FsbGVkIGluIGFuIGF0b21pYyBjb250ZXh0LCBpdCBub3cgdXNlcyBgcmVhZF90cnlsb2NrKClgIGluc3RlYWQgb2YgYHJlYWRfbG9ja19pcnFzYXZlKClgIHRvIHByZXZlbnQgZGVhZGxvY2tzIG9yIHNsZWVwaW5nIGluIGF0b21pYyBjb250ZXh0LiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHdoaWNoIGFyZSB0aGUgcHJpbWFyeSB0YXJnZXRzIGZvciBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSB0byBoYW5kbGUgYXRvbWljIGNvbnRleHRzIHByb3Blcmx5IGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIGZsYWcgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YC4gVGhpcyBhZmZlY3RzIGlycWZkIGluamVjdGlvbiBhbmQgWGVuIHRpbWVyIGNhbGxiYWNrcywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAwOjMyLjI0NjM1NzcyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NzMwNDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRhOTA5NzQ1MGQ0ZTY1NDE0MDkzOTJlMWM1ZjlhZDQ2N2E4YjkyZGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTM6MDA6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jXFxuaW5kZXggY2I4YWM0YjliMGQ3NC4uOWFlZjExNTI5M2I0YiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmNcXG5AQCAtMjY3LDcgKzI2Nyw3IEBAIGludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbiBcXHRcXHRpZiAoIWxldmVsKVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbi1cXHRcXHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUtXFx1MDAzZXhlbl9ldnRjaG4sIGt2bSk7XFxuK1xcdFxcdHJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcXHUwMDI2ZS1cXHUwMDNleGVuX2V2dGNobiwga3ZtLCB0cnVlKTtcXG4gI2VuZGlmXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5pbmRleCA2OTRiMzFjMWZjYzlhLi4xNDk4OGFlNzEwYTJkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uY1xcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xcbkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhlbl90aW1lcl9jYWxsYmFjayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuIFxcdGUucG9ydCA9IHZjcHUtXFx1MDAzZWFyY2gueGVuLnRpbWVyX3ZpcnE7XFxuIFxcdGUucHJpb3JpdHkgPSBLVk1fSVJRX1JPVVRJTkdfWEVOX0VWVENITl9QUklPXzJMRVZFTDtcXG4gXFxuLVxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSk7XFxuK1xcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSwgdHJ1ZSk7XFxuIFxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHtcXG4gXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC54ZW4udGltZXJfZXhwaXJlcyA9IDA7XFxuIFxcdFxcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcXG5AQCAtMTc5Miw3ICsxNzkyLDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcXG4gICogSXQgaXMgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKCksIHdoZXJlIHRoZVxcbiAgKiBvbmx5IGNoZWNrIG9uIGl0cyByZXR1cm4gdmFsdWUgaXMgYSBjb21wYXJpc29uIHdpdGggLUVXT1VMREJMT0NLJy5cXG4gICovXFxuLWludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuK2ludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKVxcbiB7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG5AQCAtMTgxOSw3ICsxODE5LDE1IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcbiBcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG4gXFxuLVxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKGluX2F0b21pYykge1xcbitcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdFxcdGlmICghcmVhZF90cnlsb2NrKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spKSB7XFxuK1xcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcmN1X25vX2xvY2s7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVhZF9sb2NrX2lycXNhdmUoXFx1MDAyNmdwYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHR9XFxuIFxcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXFxuIFxcdFxcdGdvdG8gb3V0X3JjdTtcXG4gXFxuQEAgLTE4NTMsNyArMTg2MSwxOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0Z3BjID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZTtcXG4gXFxuLVxcdFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aWYgKGluX2F0b21pYykge1xcbitcXHRcXHRcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdFxcdFxcdGlmICghcmVhZF90cnlsb2NrKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spKSB7XFxuK1xcdFxcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpKVxcbitcXHRcXHRcXHRcXHRcXHRraWNrX3ZjcHUgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZWFkX2xvY2tfaXJxc2F2ZShcXHUwMDI2Z3BjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBDb3VsZCBub3QgYWNjZXNzIHRoZSB2Y3B1X2luZm8uIFNldCB0aGUgYml0IGluLWtlcm5lbFxcbkBAIC0xODg4LDYgKzE5MDcsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gIG91dF9yY3U6XFxuIFxcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdwYy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbisgb3V0X3JjdV9ub19sb2NrOlxcbiBcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuIFxcbiBcXHRpZiAoa2lja192Y3B1KSB7XFxuQEAgLTE5MDMsNyArMTkyMyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0Ym9vbCBtbV9ib3Jyb3dlZCA9IGZhbHNlO1xcbiBcXHRpbnQgcmM7XFxuIFxcbi1cXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pO1xcbitcXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcXG4gXFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG5AQCAtMTkzNyw3ICsxOTU3LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xcbiBcXHRcXHRpbnQgaWR4O1xcbiBcXG4tXFx0XFx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtKTtcXG4rXFx0XFx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtLCBmYWxzZSk7XFxuIFxcdFxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5oIGIvYXJjaC94ODYva3ZtL3hlbi5oXFxuaW5kZXggNTllNjEyOGE3YmQzYy4uMTNkMzRhMDZmMzI1NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmhcXG5AQCAtMzIsNyArMzIsNyBAQCB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pO1xcbiB2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtICprdm0pO1xcbitcXHRcXHRcXHQgICAgc3RydWN0IGt2bSAqa3ZtLCBib29sIGluX2F0b21pYyk7XFxuIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4gXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKnVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDA6MzMuNzM0NjMwNjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU4MDI3NTkyNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IHRvIGhhbmRsZSBhdG9taWMgY29udGV4dHMgcHJvcGVybHkgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgZmxhZyB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLiBUaGlzIGFmZmVjdHMgaXJxZmQgaW5qZWN0aW9uIGFuZCBYZW4gdGltZXIgY2FsbGJhY2tzLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGE5MDk3NDUwZDRlNjU0MTQwOTM5MmUxYzVmOWFkNDY3YThiOTJkY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDEzOjAwOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5jIGIvYXJjaC94ODYva3ZtL2lycS5jXG5pbmRleCBjYjhhYzRiOWIwZDc0Li45YWVmMTE1MjkzYjRiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2lycS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmNcbkBAIC0yNjcsNyArMjY3LDcgQEAgaW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG4gXHRcdGlmICghbGV2ZWwpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZS1cdTAwM2V4ZW5fZXZ0Y2huLCBrdm0pO1xuK1x0XHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZS1cdTAwM2V4ZW5fZXZ0Y2huLCBrdm0sIHRydWUpO1xuICNlbmRpZlxuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhLi4xNDk4OGFlNzEwYTJkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhlbl90aW1lcl9jYWxsYmFjayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gXHRlLnBvcnQgPSB2Y3B1LVx1MDAzZWFyY2gueGVuLnRpbWVyX3ZpcnE7XG4gXHRlLnByaW9yaXR5ID0gS1ZNX0lSUV9ST1VUSU5HX1hFTl9FVlRDSE5fUFJJT18yTEVWRUw7XG4gXG4tXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUsIHZjcHUtXHUwMDNla3ZtKTtcbitcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZSwgdmNwdS1cdTAwM2Vrdm0sIHRydWUpO1xuIFx0aWYgKHJjICE9IC1FV09VTERCTE9DSykge1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2gueGVuLnRpbWVyX2V4cGlyZXMgPSAwO1xuIFx0XHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG5AQCAtMTc5Miw3ICsxNzkyLDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbiAgKiBJdCBpcyBhbHNvIGNhbGxlZCBkaXJlY3RseSBmcm9tIGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoKSwgd2hlcmUgdGhlXG4gICogb25seSBjaGVjayBvbiBpdHMgcmV0dXJuIHZhbHVlIGlzIGEgY29tcGFyaXNvbiB3aXRoIC1FV09VTERCTE9DSycuXG4gICovXG4taW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbitpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtLCBib29sIGluX2F0b21pYylcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbkBAIC0xODE5LDcgKzE4MTksMTUgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiBcbi1cdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoaW5fYXRvbWljKSB7XG4rXHRcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdFx0aWYgKCFyZWFkX3RyeWxvY2soXHUwMDI2Z3BjLVx1MDAzZWxvY2spKSB7XG4rXHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1x0XHRcdGdvdG8gb3V0X3JjdV9ub19sb2NrO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0fVxuIFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgUEFHRV9TSVpFKSlcbiBcdFx0Z290byBvdXRfcmN1O1xuIFxuQEAgLTE4NTMsNyArMTg2MSwxOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGdwYyA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlO1xuIFxuLVx0XHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoaW5fYXRvbWljKSB7XG4rXHRcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0XHRcdGlmICghcmVhZF90cnlsb2NrKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKSkge1xuK1x0XHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1x0XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpKVxuK1x0XHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuK1x0XHRcdFx0Z290byBvdXRfcmN1X25vX2xvY2s7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdH1cbiBcdFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogQ291bGQgbm90IGFjY2VzcyB0aGUgdmNwdV9pbmZvLiBTZXQgdGhlIGJpdCBpbi1rZXJuZWxcbkBAIC0xODg4LDYgKzE5MDcsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFxuICBvdXRfcmN1OlxuIFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuKyBvdXRfcmN1X25vX2xvY2s6XG4gXHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuIFxuIFx0aWYgKGtpY2tfdmNwdSkge1xuQEAgLTE5MDMsNyArMTkyMyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGJvb2wgbW1fYm9ycm93ZWQgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbi1cdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG4rXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbiBcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXG4gXHRcdHJldHVybiByYztcbiBcbkBAIC0xOTM3LDcgKzE5NTcsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuIFx0XHRpbnQgaWR4O1xuIFxuLVx0XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pO1xuK1x0XHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcbiBcdFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcbiBcdFx0XHRicmVhaztcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcbmluZGV4IDU5ZTYxMjhhN2JkM2MuLjEzZDM0YTA2ZjMyNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uaFxuQEAgLTMyLDcgKzMyLDcgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTtcbiB2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLFxuLVx0XHRcdCAgICBzdHJ1Y3Qga3ZtICprdm0pO1xuK1x0XHRcdCAgICBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKTtcbiBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbiBcdFx0XHQgY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqdWUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDA6MzMuNzM0NjMyOTU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwOTQ4NTA0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFhlbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCB3aXRoaW4gdGhlIEtWTSBYZW4gZW11bGF0aW9uIGNvZGUuIFRoZXkncmUgYWRkaW5nIGEgYm9vbGVhbiwgYGluX2F0b21pY2AsIHdoaWNoIGlzIGEgY2xldmVyIG1vdmUuIEJhc2ljYWxseSwgaWYgd2UncmUgaW4gYW4gYXRvbWljIGNvbnRleHQsIGxpa2Ugd2l0aGluIGFuIGludGVycnVwdCBoYW5kbGVyIG9yIGEgdGltZXIgY2FsbGJhY2ssIHdlIG5lZWQgdG8gYmUgKnZlcnkqIGNhcmVmdWwgYWJvdXQgbG9ja2luZy4gVGhleSdyZSB1c2luZyBgcmVhZF90cnlsb2NrYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZWAgd2hlbiBgaW5fYXRvbWljYCBpcyBzZXQgdG8gYXZvaWQgc2xlZXBpbmcgb3IsIGV2ZW4gd29yc2UsIGNhdXNpbmcgYSBkZWFkbG9jay4gU21hcnQuXG5cblRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgYXMgdGhhdCdzIGV4cGxpY2l0bHkgYW4gYXRvbWljIGNvbnRleHQsIGFuZCBhbHNvIGZyb20gYHhlbl90aW1lcl9jYWxsYmFja2AsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRpbWVycyBjYW4gdHJpZ2dlciBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCwgYW5kIGFsc28gdGhlIG9yaWdpbmFsIGBrdm1feGVuX3NldF9ldnRjaG5gLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgdGFyZ2V0ZWQgYXQgdGhlIEtWTSBYZW4gZW11bGF0aW9uIGxheWVyLCBzbyBpdCdzIGEgZGlyZWN0IGNvbmNlcm4gZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBLVk0uIEdpdmVuIHRoYXQgaXQncyBhbHRlcmluZyBsb2NraW5nIGJlaGF2aW9yIHdpdGhpbiBhbiBlbnZpcm9ubWVudCB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gYSBndWVzdCwgaXTigJlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9jayBzb2xpZC5cblxuTGV0IG1lIGdvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBhY3R1YWxseSBjb25maWd1cmUgdGhpcyBLVk0gWGVuIGVtdWxhdGlvbi4gSSdsbCBzdGFydCB3aXRoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMDo0Ny44Mjk0ODYxMzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0NDkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMDo0Ny45MDI5ODA2MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAzNzc3MzUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk1fWEVOIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24gaXMgYEtWTV9YRU5gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBpbnRlcmVzdGluZyBjaG9pY2UuXCIgR2l2ZW4gbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHZpcnR1YWxpemF0aW9uIHRlY2hub2xvZ2llcywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEkgaGF2ZSB0byBhc3Nlc3MgKndoeSogdGhpcyBjb25maWcgaXMgdXNlZCBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGFyZSBhZmZlY3RlZC4gV2hhdCBhcmUgdGhlIHN1cHBvcnRpbmcgY29tcG9uZW50cyBuZWNlc3NhcnkgZm9yIGBLVk1fWEVOYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoaXMgY291bGQgcmFuZ2UgZnJvbSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcywgdG8gcGFydGljdWxhciBoYXJkd2FyZSBzdXBwb3J0IHJlcXVpcmVtZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAxOjAxLjk0MDc1ODg1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI4MDI0MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDE6MDMuMjY4Nzg4MzMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQzNzk5MDA2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNLVhlbiBMb2NraW5nIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2t2bS9pcnEuY2AsIGBhcmNoL3g4Ni9rdm0veGVuLmNgLCBhbmQgYGFyY2gveDg2L2t2bS94ZW4uaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHN1Z2dlc3RzIGl0J3MgYSBtb2RlcmF0ZWx5IHNpZ25pZmljYW50IGNoYW5nZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gS1ZNIGFuZCB0aGUgWGVuIGh5cGVydmlzb3IuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBub3cgdGFraW5nIGFuIGBpbl9hdG9taWNgIGJvb2xlYW4uXG5cblRoZSByZWFsIGtleSBoZXJlIGlzIGhvdyB0aGUgbG9ja2luZyBoYXMgYmVlbiBhbHRlcmVkLiAgVXNpbmcgYGxvY2FsX2lycV9zYXZlYCBhbmQgYHJlYWRfdHJ5bG9ja2AgKmluc3RlYWQgb2YqIGByZWFkX2xvY2tfaXJxc2F2ZWAgd2hlbiBgaW5fYXRvbWljYCBpcyB0cnVlIGlzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gbG9ja2luZyBzZW1hbnRpY3MuIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEl0IGNvdWxkIGJlIGludGVyZXN0aW5nIHVuZGVyIGxvYWQuXG5cbk5vdywgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBmdW5jdGlvbiBpcyB1c2VkLiBJJ20gc2VlaW5nIGl0J3MgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIChpbiBgYXJjaC94ODYva3ZtL2lycS5jYCkgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgIChpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCkgd2l0aCBgaW5fYXRvbWljID0gdHJ1ZWAsIGFuZCBmcm9tIGBrdm1feGVuX3NldF9ldnRjaG5gIHdpdGggYGluX2F0b21pYyA9IGZhbHNlYC4gR290IGl0LlxuXG5UaGlzIGRlcGVuZHMgb24gdGhlIGBLVk1fWEVOYCBjb25maWcgb3B0aW9uIOKAkyB0aGF0J3MgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3Mgc29saWRpZnkgdGhlIGZvY3VzIHN5bWJvbHMuICBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGlzIHRoZSBoZWFydCBvZiBpdCwgb2J2aW91c2x5LiAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGNhbGxzIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAuICBga3ZtX3hlbl9zZXRfZXZ0Y2huYCBpcyB3b3J0aCBhIGxvb2sgYXMgd2VsbCBhcyBpdCBpbnRlcmFjdHMgd2l0aCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgZXhwb3J0ZWQgc3ltYm9scyBvciBzdGF0aWMuICpDaGVja3MqLiAgT2theSwgIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgaXMgKm5vdCogc3RhdGljIOKAkyBkZWZpbmVkIGluIGB4ZW4uY2AgYW5kIGRlY2xhcmVkIGluIGB4ZW4uaGAuIEdvb2QuIEkgbmVlZGVkIHRvIGNoZWNrLlxuXG5BbHJpZ2h0LCAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIG5vdCBzdGF0aWMsIHNvIHRoYXQgaXMgZmluZS4gQ2hlY2tpbmcgYGt2bV94ZW5fc2V0X2V2dGNobmAgLi4uIHRoYXQgb25lICppcyogc3RhdGljLiBTYW1lIHdpdGggYHhlbl90aW1lcl9jYWxsYmFja2AuXG5cblNvIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBJJ20gZ29pbmcgdG8gdHJhY2sgYXJlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9YRU5gLiAgWWVwLCBpdCBkZXBlbmRzIG9uIGBLVk1gLCB3aGljaCBpcyBleHBlY3RlZC4gIEknbGwgc2NhbiB0aHJvdWdoIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AganVzdCB0byBjb25maXJtIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCB0aGUgZGVwZW5kZW5jaWVzIG9yIGV4dHJhIGNvbmZpZyBmbGFncyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMToyNy42NDg2OTEyMTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MjUzNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDE6MjcuODUyOTUxNTE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAyMjMwNzg3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gWGVuIEV2ZW50IENoYW5uZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgd2l0aGluIHRoZSBLVk0gWGVuIGVtdWxhdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYW4gYGluX2F0b21pY2AgYm9vbGVhbi4gV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRvIHRydWUsIGl0J3MgdXRpbGl6aW5nIGBsb2NhbF9pcnFfc2F2ZWAgYW5kIGByZWFkX3RyeWxvY2tgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSWYgaXQncyBmYWxzZSwgdGhlIGNvZGUgZ29lcyB3aXRoIGByZWFkX2xvY2tfaXJxc2F2ZWAuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgbG9ja2luZyBzdHJhdGVneSB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtWTSwgSSBrbm93IHRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhvc2UgS1ZNIGlvY3RscyDigJMgdGhlIG9uZXMgbGlrZSBgS1ZNX0lSUV9ST1VUSU5HX1hFTl9FVlRDSE5gLCBzbyBpdCdzIHBvdGVudGlhbGx5IGV4cG9zZWQuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIGBLVk1fWEVOYCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaGVyZSwgYXMgeW91J2QgZXhwZWN0LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGl0c2VsZiBpcyBtb2RpZmllZCwgYnV0IGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBvdGhlciBmdW5jdGlvbnMgbGlrZSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGB4ZW5fdGltZXJfY2FsbGJhY2tgIGFuZCBhbHNvIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGt2bV94ZW5fc2V0X2V2dGNobmAsIHdoaWNoIEkgc2hvdWxkIGxvb2sgYXQgbW9yZSBjbG9zZWx5LiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyB0aGlzLiBMZXQgbWUgc2VlLi4uIGBrdm1feGVuX3NldF9ldnRjaG5gIGFuZCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2Agc2VlbSBsaWtlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMsIGFuZCBwb3RlbnRpYWxseSBgeGVuX3RpbWVyX2NhbGxiYWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhvc2UgaXMgdGhlIGJlc3QgdG8gdGFyZ2V0LiBGaXJzdCwgSSB3aWxsIGxvb2sgYXQgYGt2bV94ZW5fc2V0X2V2dGNobmAuIE5vdywgaXMgaXQgc3RhdGljPyBMZXQgbWUgZmluZCB0aGF0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMTo0OC4wNzYwMzI0ODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxOTA0ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fc2V0X2V2dGNoblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jLTMxLVxcbmFyY2gveDg2L2t2bS94ZW4uYzozMjpzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0zMy1zdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTA4PXZvaWQga3ZtX3hlbl9pbmplY3RfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTE3LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxMTg6XFx0XFx0a3ZtX3hlbl9zZXRfZXZ0Y2huKFxcdTAwMjZlLCB2Y3B1LVxcdTAwM2Vrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xMTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTI1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEzOS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQwOlxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSwgdHJ1ZSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0MS1cXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTc3ND1zdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTQtICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE3OTU6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTYte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjAtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE5MjE6c3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTIyLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTI1LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTI2OlxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTI3LVxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk1OS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk2MDpcXHRcXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk2MS1cXHRcXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTE5NzY9c3RhdGljIGludCBldnRjaG5fc2V0X2ZuKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk4MS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk4MjpcXHRyZXR1cm4ga3ZtX3hlbl9zZXRfZXZ0Y2huKFxcdTAwMjZlLVxcdTAwM2V4ZW5fZXZ0Y2huLCBrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTgzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0yMDM5PWludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqdXhlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIwNTUtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIwNTY6XFx0cmV0ID0ga3ZtX3hlbl9zZXRfZXZ0Y2huKFxcdTAwMjZlLCBrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0yMDU3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTIyODU9c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMDgtXFx0aWYgKGV2dGNobmZkLVxcdTAwM2VkZWxpdmVyLnBvcnQucG9ydCkge1xcbmFyY2gveDg2L2t2bS94ZW4uYzoyMzA5OlxcdFxcdGludCByZXQgPSBrdm1feGVuX3NldF9ldnRjaG4oXFx1MDAyNmV2dGNobmZkLVxcdTAwM2VkZWxpdmVyLnBvcnQsIHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMTAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTk9UQ09OTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDE6NDguMTY3OTQ2MzIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTUxMDAwMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gWGVuIEV2ZW50IENoYW5uZWwgYW5kIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHN5bWJvbHM6IGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIGltcG9ydGFudCBhbmQgYWNjZXNzaWJsZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBLVk0vWGVuIGludGVyYWN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB0aGVpciBpbmNsdXNpb24uXG5cbkl0IGxvb2tzIGxpa2UgYm90aCBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFyZSBjb25maWd1cmVkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcy4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB3aGV0aGVyIGBLVk1gIGFsb25lIGlzIHN1ZmZpY2llbnQsIG9yIGlmIGBLVk1fWDg2YCBvciBhbm90aGVyIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb24gaXMgcmVxdWlyZWQsIGFzIHdlbGwuIFNpbmNlIGBLVk1fWEVOYCBpcyBzcGVjaWZpY2FsbHkgZGVkaWNhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIGBLVk1gIGlzIHRoZSBiYXNlLCBJJ2xsIHJldHVybiBib3RoIGBLVk1gIGFuZCBgS1ZNX1hFTmAgYXMgdGhlIGRldGVybWluaW5nIGZhY3RvcnMuXG5cbk5vdywganVzdCB0byB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGZpdHMgaW4sIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgaXRzIGxvY2F0aW9uIGluIGBhcmNoL3g4Ni9rdm0vaXJxLmNgIHRvIGNvbmZpcm0gbXkgbWVudGFsIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzY4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAyOjA2LjMxODk1MDA0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODQ0MzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pcnEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaXJxLmM9MjI1PWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy0yNDAtXFxuYXJjaC94ODYva3ZtL2lycS5jOjI0MTppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjQyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDI6MDcuNjY3Mzk4NTI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODY3NzUxNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6ODU0MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDI6MjcuNTM1MTUzMDU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcxODA3NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTkyPWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTEwOC0vKlxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjEwOTogKiBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljOiBmYXN0LXBhdGggZm9yIGlycWZkIGluamVjdGlvblxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTExMC0gKi9cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxMTE6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTEyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pcnFmZC5jPTQ0PWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2lycWZkLmMtNjktXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2lycWZkLmM6NzA6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2lycWZkLmMtNzEtXFx0XFx0c3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYz0xMDIyPWludCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCB1MzIgaXJxLCBpbnQgbGV2ZWwsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTEwMzItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYzoxMDMzOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICppcnFfZW50cnksXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0xMDM0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92bS5jPTExOT1pbnQga3ZtX3NldF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMTQ5LVxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmM6MTUwOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbmFyY2gvcmlzY3Yva3ZtL3ZtLmMtMTUxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzY5Mz1pbnQgX19pbml0IGt2bV9zMzkwX2dpYl9pbml0KHU4IG5pc2MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDgtLypcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NDk6ICoga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYzogZmFzdC1wYXRoIGZvciBpcnFmZCBpbmplY3Rpb25cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NTAtICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzUxOmludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc1Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmM9MjI1PWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy0yNDAtXFxuYXJjaC94ODYva3ZtL2lycS5jOjI0MTppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjQyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xNzc0PXN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc5MS0gKlxcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzkyOiAqIEl0IGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20ga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYygpLCB3aGVyZSB0aGVcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc5My0gKiBvbmx5IGNoZWNrIG9uIGl0cyByZXR1cm4gdmFsdWUgaXMgYSBjb21wYXJpc29uIHdpdGggLUVXT1VMREJMT0NLJy5cXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xODA0PWludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqaXJxX2VudHJ5LCBzdHJ1Y3Qga3ZtICprdm0sXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE4MDUtXFx0XFx0aW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cyk7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE4MDY6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE4MDctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsXFxuLS1cXG52aXJ0L2t2bS9ldmVudGZkLmM9MTc5PXN0YXRpYyB2b2lkIGlycWZkX2RlYWN0aXZhdGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKVxcbi0tXFxudmlydC9rdm0vZXZlbnRmZC5jLTE4OS1cXG52aXJ0L2t2bS9ldmVudGZkLmM6MTkwOmludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhcXG52aXJ0L2t2bS9ldmVudGZkLmMtMTkxLVxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICppcnEsXFxuLS1cXG52aXJ0L2t2bS9ldmVudGZkLmM9MjAzPWlycWZkX3dha2V1cCh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpXFxuLS1cXG52aXJ0L2t2bS9ldmVudGZkLmMtMjM1LVxcdFxcdGlmICh1bmxpa2VseSghaXJxZmRfaXNfYWN0aXZlKGlycWZkKSkgfHxcXG52aXJ0L2t2bS9ldmVudGZkLmM6MjM2OlxcdFxcdCAgICBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKFxcdTAwMjZpcnEsIGt2bSxcXG52aXJ0L2t2bS9ldmVudGZkLmMtMjM3LVxcdFxcdFxcdFxcdFxcdCAgICAgIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwgMSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDI6MjkuOTA2OTc2NzA0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzQ4NTc2MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTAyNDcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAyOjQzLjY1NTU1NTAxMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNzE0NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veGVuLmM9MTI1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEzOS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQwOlxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSwgdHJ1ZSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0MS1cXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTc3ND1zdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTQtICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE3OTU6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTYte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTE5MjE9c3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjUtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE5MjY6XFx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE5MjctXFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTU5LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTYwOlxcdFxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTYxLVxcdFxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAyOjQzLjg2NzI3NDU4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc3NTc0MTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLVk0gWGVuIEV2ZW50IENoYW5uZWwgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSBzZWUgaXQncyBtb2RpZnlpbmcgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlIGNvcmUgY2hhbmdlIGludHJvZHVjZXMgYSBgYm9vbGVhbiBpbl9hdG9taWNgIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpdCdzIGEgY29uZGl0aW9uYWwgbG9ja2luZyBzdHJhdGVneS4gSWYgYGluX2F0b21pY2AgaXMgdHJ1ZSwgd2UncmUgdXNpbmcgYSB0cnktbG9jayBhcHByb2FjaDogYGxvY2FsX2lycV9zYXZlYCB3aXRoIGByZWFkX3RyeWxvY2tgLCBmYWxsaW5nIGJhY2svYmFpbGluZyBpZiB0aGUgbG9jayBmYWlscy4gSWYgYGluX2F0b21pY2AgaXMgZmFsc2UsIGl0J3MgdGhlIG1vcmUgc3RhbmRhcmQgYHJlYWRfbG9ja19pcnFzYXZlYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEtWTSBYZW4gZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgYWltZWQgYXQgaGFuZGxpbmcgYXRvbWljIGNvbnRleHRzIGdyYWNlZnVsbHkuXG5cbkl0IGFwcGVhcnMgdGhpcyBhZmZlY3RzIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgY2FsbGVkIGZyb20gYGlycWZkX3dha2V1cGAsIGFuZCBhbHNvIGB4ZW5fdGltZXJfY2FsbGJhY2tgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIGFuIGhydGltZXIgY29udGV4dC4gVGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgbGlrZWx5IGF2b2lkaW5nIGRlYWRsb2NrcyBvciBsb2NrZGVwIHdhcm5pbmdzIHRoYXQgY291bGQgYXJpc2UgZnJvbSB1bnNhZmUgbG9jayB1c2FnZSB3aXRoaW4gdGhlc2UgYXRvbWljIGNvbnRleHRzLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRoZSBmaXguXG5cblRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBLVk1gIGFuZCBgS1ZNX1hFTmAuXG5cbk15IHByaW1hcnkgZm9jdXMgaXMgbm93IG9uIHRoZXNlIHN5bWJvbHM6IGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYGt2bV94ZW5fc2V0X2V2dGNobmAgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLlxuXG5JJ2xsIGRvdWJsZSBjaGVjayBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaW4gYGFyY2gveDg2L2t2bS9pcnEuY2AuIEFoLCB0aGVyZSBpdCBpczogaXQgY2FsbHMgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUtXHUwMDNleGVuX2V2dGNobiwga3ZtLCB0cnVlKWAuIFNvIHRoYXQgY29uZmlybXMgdGhlIGF0b21pYyBjb250ZXh0IHVzYWdlLlxuXG5UaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBLVk0gWGVuIGV2ZW50IGNoYW5uZWxzIGFyZSBkZWxpdmVyZWQsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIHRpbWVycyBhcmUgaGFuZGxlZCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHN5c3RlbSBzdGFiaWxpdHkuXG5cbkNvbmZpZ3MgYWdhaW46IGBLVk1gLCBgS1ZNX1hFTmAuXG5cbkZvY3VzIFN5bWJvbHMgKGFnYWluKTogYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huYCwgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLlxuXG5Ib2xkIG9uLCBgeGVuX3RpbWVyX2NhbGxiYWNrYCBpcyBzdGF0aWMuIFNpbmNlIHRoZSBwcm9tcHQgcHJlZmVycyBub24tc3RhdGljIGVudHJ5cG9pbnRzLCBpdCBsb29rcyBsaWtlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgaXMgbm90IHN0YXRpYyAoaXQncyBleHBvcnRlZCBpbiBgeGVuLmhgKS4gYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIGFsc28gbm90IHN0YXRpYy4gYGt2bV94ZW5fc2V0X2V2dGNobmAgaXMgc3RhdGljLCB3aGljaCBpcyB3aHkgaXQgZ2V0cyBsZXNzIGF0dGVudGlvbi4gQW5kLCB0aGVyZSBpcyBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgIHdoaWNoIGlzIG5vdCBzdGF0aWMgYW5kIGlzIHJlbGV2YW50LiBMZXQgbWUgY2hlY2sgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCByZWFsIHF1aWNrLiBMb29rcyBsaWtlIGl0IGNhbGxzIGBrdm1feGVuX3NldF9ldnRjaG5gLiBMZXQncyBjaGVjayBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaW4gYGFyY2gveDg2L2t2bS9pcnEuY2AgYWdhaW4ganVzdCB0byBiZSBzdXJlLlxuXG5JJ2xsIHN0aWNrIHdpdGggYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBhbmQgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGFzIHByaW1hcnkgZm9jdXMgc3ltYm9scyBmb3Igbm93LlxuXG5Db25maWdzIG9uZSBsYXN0IHRpbWU6IGBLVk1gLCBgS1ZNX1hFTmAuXG5cbkRlcGVuZGVuY3kgY2hlY2suLi4gYEtWTV9YRU5gICpkb2VzKiBkZXBlbmQgb24gYEtWTWAsIGV2ZW4gaWYgaXQgaXNuJ3QgZXhwbGljaXRseSBzdGF0ZWQgaW4gdGhhdCBzaG9ydCBncmVwIG91dHB1dC4gTGV0IG1lIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybS4gWWVwLCB1bmRlciBgaWYgVklSVFVBTElaQVRJT05gLi4uaXQgZG9lcyBpbmRlZWQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODEzLCJPdXRwdXRUb2tlbnMiOjEyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMzoxMS42NDMwMjY4NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxOTI5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IHRvIGhhbmRsZSBhdG9taWMgY29udGV4dHMgcHJvcGVybHkgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgZmxhZyB0byBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLiBUaGlzIGFmZmVjdHMgaXJxZmQgaW5qZWN0aW9uIGFuZCBYZW4gdGltZXIgY2FsbGJhY2tzLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIEtWTS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9YRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1feGVuX3NldF9ldnRjaG5fZmFzdFwiLFxuICAgIFwia3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSB0byBoYW5kbGUgYXRvbWljIGNvbnRleHRzIHByb3Blcmx5IGJ5IGludHJvZHVjaW5nIGFuIGBpbl9hdG9taWNgIGZsYWcgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YC4gVGhpcyBhZmZlY3RzIGlycWZkIGluamVjdGlvbiBhbmQgWGVuIHRpbWVyIGNhbGxiYWNrcywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBLVk0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEzOjAzOjExLjc2MjIyNzUyWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzYyODQ1MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTM6MDM6MTEuNzYyODA3NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTM2MjI1OTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBwYXJhbWV0ZXIgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KClgLiBXaGVuIGNhbGxlZCBpbiBhbiBhdG9taWMgY29udGV4dCwgaXQgbm93IHVzZXMgYHJlYWRfdHJ5bG9jaygpYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZSgpYCB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YTkwOTc0NTBkNGU2NTQxNDA5MzkyZTFjNWY5YWQ0NjdhOGI5MmRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTM6MDA6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaXJxLmMgYi9hcmNoL3g4Ni9rdm0vaXJxLmNcbmluZGV4IGNiOGFjNGI5YjBkNzQuLjlhZWYxMTUyOTNiNGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmNcbisrKyBiL2FyY2gveDg2L2t2bS9pcnEuY1xuQEAgLTI2Nyw3ICsyNjcsNyBAQCBpbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbiBcdFx0aWYgKCFsZXZlbClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdHJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLVx1MDAzZXhlbl9ldnRjaG4sIGt2bSk7XG4rXHRcdHJldHVybiBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLVx1MDAzZXhlbl9ldnRjaG4sIGt2bSwgdHJ1ZSk7XG4gI2VuZGlmXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDY5NGIzMWMxZmNjOWEuLjE0OTg4YWU3MTBhMmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgeGVuX3RpbWVyX2NhbGxiYWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdGUucG9ydCA9IHZjcHUtXHUwMDNlYXJjaC54ZW4udGltZXJfdmlycTtcbiBcdGUucHJpb3JpdHkgPSBLVk1fSVJRX1JPVVRJTkdfWEVOX0VWVENITl9QUklPXzJMRVZFTDtcbiBcbi1cdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZSwgdmNwdS1cdTAwM2Vrdm0pO1xuK1x0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChcdTAwMjZlLCB2Y3B1LVx1MDAzZWt2bSwgdHJ1ZSk7XG4gXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XG4gXHRcdHZjcHUtXHUwMDNlYXJjaC54ZW4udGltZXJfZXhwaXJlcyA9IDA7XG4gXHRcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbkBAIC0xNzkyLDcgKzE3OTIsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuICAqIEl0IGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20ga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYygpLCB3aGVyZSB0aGVcbiAgKiBvbmx5IGNoZWNrIG9uIGl0cyByZXR1cm4gdmFsdWUgaXMgYSBjb21wYXJpc29uIHdpdGggLUVXT1VMREJMT0NLJy5cbiAgKi9cbi1pbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuK2ludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW5fYXRvbWljKVxuIHtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuQEAgLTE4MTksNyArMTgxOSwxNSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuIFxuLVx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGlmIChpbl9hdG9taWMpIHtcbitcdFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0XHRpZiAoIXJlYWRfdHJ5bG9jayhcdTAwMjZncGMtXHUwMDNlbG9jaykpIHtcbitcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXHRcdFx0Z290byBvdXRfcmN1X25vX2xvY2s7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHR9XG4gXHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKVxuIFx0XHRnb3RvIG91dF9yY3U7XG4gXG5AQCAtMTg1Myw3ICsxODYxLDE4IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0Z3BjID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGU7XG4gXG4tXHRcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGlmIChpbl9hdG9taWMpIHtcbitcdFx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHRcdFx0aWYgKCFyZWFkX3RyeWxvY2soXHUwMDI2Z3BjLVx1MDAzZWxvY2spKSB7XG4rXHRcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCxcbitcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkpXG4rXHRcdFx0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4rXHRcdFx0XHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0fVxuIFx0XHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBDb3VsZCBub3QgYWNjZXNzIHRoZSB2Y3B1X2luZm8uIFNldCB0aGUgYml0IGluLWtlcm5lbFxuQEAgLTE4ODgsNiArMTkwNyw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gIG91dF9yY3U6XG4gXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rIG91dF9yY3Vfbm9fbG9jazpcbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4gXG4gXHRpZiAoa2lja192Y3B1KSB7XG5AQCAtMTkwMyw3ICsxOTIzLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0Ym9vbCBtbV9ib3Jyb3dlZCA9IGZhbHNlO1xuIFx0aW50IHJjO1xuIFxuLVx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtKTtcbitcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xuIFx0aWYgKHJjICE9IC1FV09VTERCTE9DSylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuQEAgLTE5MzcsNyArMTk1Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XG4gXHRcdGludCBpZHg7XG4gXG4tXHRcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG4rXHRcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSwgZmFsc2UpO1xuIFx0XHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuIFx0XHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaFxuaW5kZXggNTllNjEyOGE3YmQzYy4uMTNkMzRhMDZmMzI1NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uaFxuKysrIGIvYXJjaC94ODYva3ZtL3hlbi5oXG5AQCAtMzIsNyArMzIsNyBAQCB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV94ZW5fZGVzdHJveV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSk7XG4rXHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbl9hdG9taWMpO1xuIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0IHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuIFx0XHRcdCBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMzoxMS43NjI4MDgzN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzYyMjMzNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvY2tpbmcgaXNzdWUgZml4LiBUaGUgcGF0Y2ggdGFyZ2V0cyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgYGJvb2wgaW5fYXRvbWljYCBwYXJhbWV0ZXIuIFRoaXMgcGFyYW1ldGVyJ3MgcHVycG9zZSBpcyBpbW1lZGlhdGVseSBjbGVhcjogdG8gY29uZGl0aW9uYWxseSBhZGp1c3QgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGJhc2VkIG9uIHRoZSBleGVjdXRpb24gY29udGV4dC5cblxuU3BlY2lmaWNhbGx5LCB3aGVuIGBpbl9hdG9taWNgIGlzIHRydWUsIHRoZSBjb2RlIG5vdyB1c2VzIGByZWFkX3RyeWxvY2tgIGluc3RlYWQgb2YgYHJlYWRfbG9ja19pcnFzYXZlYC4gVGhpcyBpcyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIGByZWFkX2xvY2tfaXJxc2F2ZWAgaGFzIHRoZSBwb3RlbnRpYWwgdG8gc2xlZXAsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZSB3aXRoaW4gYW4gYXRvbWljIGNvbnRleHQsIGFuZCBjYW4gbGVhZCB0byBkZWFkbG9ja3MuIGByZWFkX3RyeWxvY2tgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgbm9uLWJsb2NraW5nLiBJZiBpdCBjYW4ndCBhY3F1aXJlIHRoZSBsb2NrIGltbWVkaWF0ZWx5LCBpdCBzaW1wbHkgcmV0dXJucy5cblxuVGhlIGludGVudCBoZXJlIGlzIG9idmlvdXMuIEkgc2VlIGEgY2xlYXIgYXR0ZW1wdCB0byBhdm9pZCBzbGVlcGluZyBvciBkZWFkbG9ja2luZyB3aXRoaW4gcG90ZW50aWFsbHkgYXRvbWljIHNlY3Rpb25zIG9mIGNvZGUuIFRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiBhbmQgY3JpdGljYWwgdHlwZSBvZiBmaXgsIHdoaWNoIGltcHJvdmVzIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhhdCB0aGlzIGlzIGluZGVlZCB3aGF0IGlzIGhhcHBlbmluZy4gVGhlIHBhdGNoIG5vdGVzIHRoYXQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgYW5kIGB4ZW5fdGltZXJfY2FsbGJhY2tgLCBib3RoIHdpdGggYGluX2F0b21pYyA9IHRydWVgLiBJdCdzIGFsc28gY2FsbGVkIGZyb20gYGt2bV94ZW5fc2V0X2V2dGNobmAgd2l0aCBgaW5fYXRvbWljID0gZmFsc2VgLiBUaGlzIGNvbmZpcm1zIHRoZSBleHBlY3RlZCBiZWhhdmlvcjogdGhlIG9wdGltaXplZCBsb2NrIGlzIGFwcGxpZWQgaW4gdGhlIGNvbnRleHRzIHdoZXJlIGl0IGlzIG5lY2Vzc2FyeS5cblxuVGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBpcyB3aGF0IHNvbGlkaWZpZXMgdGhpcyB1bmRlcnN0YW5kaW5nOlxuXG5gYGBjXG5cdGlmIChpbl9hdG9taWMpIHtcblx0XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG5cdFx0aWYgKCFyZWFkX3RyeWxvY2soXHUwMDI2Z3BjLVx1MDAzZWxvY2spKSB7XG5cdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG5cdFx0XHRnb3RvIG91dF9yY3Vfbm9fbG9jaztcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcblx0fVxuYGBgXG5cblRoaXMgc25pcHBldCBkb2VzIGV4YWN0bHkgd2hhdCBpdCdzIHN1cHBvc2VkIHRvIGRvOiB1c2VzIGByZWFkX3RyeWxvY2tgIHdpdGggbG9jYWwgSVJRIGRpc2FibGluZyB0byBhdG9taWNhbGx5IGF0dGVtcHQgYWNxdWlyaW5nIHRoZSBsb2NrLiBJZiBpdCBmYWlscywgaXQgcmVzdG9yZXMgdGhlIHByZXZpb3VzIElSUSBzdGF0ZSBhbmQgZXhpdHMuIElmIGl0IHN1Y2NlZWRzLCBpdCdzIHNhZmUgdG8gcHJvY2VlZC5cblxuSSBzZWUgbm90aGluZyBoZXJlIHRoYXQgcmFpc2VzIGFueSBmbGFncyBmb3IgbWVtb3J5IHNhZmV0eSBjb25jZXJucy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGluaXRpYWxpemF0aW9uLCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBpcyBwdXJlbHkgYSBsb2NraW5nL3NjaGVkdWxpbmcgb3B0aW1pemF0aW9uIHRvIGF2b2lkIGEgcG90ZW50aWFsIGlzc3VlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXIuICoqTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGZhbHNlKiogaW4gdGhpcyBjYXNlLiBNeSByZWFzb25pbmcgaXMgdGhlIHBhdGNoIGlzIGV4Y2x1c2l2ZWx5IHJlbGF0ZWQgdG8gaW1wcm92aW5nIGxvY2tpbmcgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gbWVtb3J5IGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4NywiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMzowMzoyMS4xMjUwNDUxNjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvY2tpbmcgaXNzdWUgYnkgaW50cm9kdWNpbmcgYW4gYGluX2F0b21pY2AgcGFyYW1ldGVyIHRvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCgpYC4gV2hlbiBjYWxsZWQgaW4gYW4gYXRvbWljIGNvbnRleHQsIGl0IG5vdyB1c2VzIGByZWFkX3RyeWxvY2soKWAgaW5zdGVhZCBvZiBgcmVhZF9sb2NrX2lycXNhdmUoKWAgdG8gcHJldmVudCBkZWFkbG9ja3Mgb3Igc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgd2hpY2ggYXJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIEtNU0FOLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSBieSBpbnRyb2R1Y2luZyBhbiBgaW5fYXRvbWljYCBwYXJhbWV0ZXIgdG8gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KClgLiBXaGVuIGNhbGxlZCBpbiBhbiBhdG9taWMgY29udGV4dCwgaXQgbm93IHVzZXMgYHJlYWRfdHJ5bG9jaygpYCBpbnN0ZWFkIG9mIGByZWFkX2xvY2tfaXJxc2F2ZSgpYCB0byBwcmV2ZW50IGRlYWRsb2NrcyBvciBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCB3aGljaCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3IgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8vmvn[1] Phase: Succeeded StartedAt: 2026-08-12 13:03:30 +0000 UTC FinishedAt: 2026-08-12 13:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 13:03:30 +0000 UTC FinishedAt: 2026-08-12 13:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2] Phase: Succeeded StartedAt: 2026-08-12 13:03:30 +0000 UTC FinishedAt: 2026-08-12 15:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 13:03:30 +0000 UTC FinishedAt: 2026-08-12 15:26:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 13:03:30 +0000 UTC FinishedAt: 2026-08-12 13:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 13:03:30 +0000 UTC FinishedAt: 2026-08-12 13:03:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflow8vmvn/series-workflow8vmvn-convert-artifact-1668929009/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 13:03:40 +0000 UTC FinishedAt: 2026-08-12 13:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 13:03:40 +0000 UTC FinishedAt: 2026-08-12 13:25:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a8a9eee5-2ec9-437a-9070-7a749d84ed79,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-workflow8vmvn/series-workflow8vmvn-convert-artifact-1668929009/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": "afc24c4a-fcfb-4a72-a03f-aab8ad135be9", "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-workflow8vmvn/series-workflow8vmvn-build-action-2414120991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 13:03:40 +0000 UTC FinishedAt: 2026-08-12 13:25:08 +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:*a8a9eee5-2ec9-437a-9070-7a749d84ed79,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-workflow8vmvn/series-workflow8vmvn-convert-artifact-1668929009/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": "afc24c4a-fcfb-4a72-a03f-aab8ad135be9", "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-workflow8vmvn/series-workflow8vmvn-build-action-2414120991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 13:25:18 +0000 UTC FinishedAt: 2026-08-12 13:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 13:25:18 +0000 UTC FinishedAt: 2026-08-12 13:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 13:25:18 +0000 UTC FinishedAt: 2026-08-12 13:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 13:25:18 +0000 UTC FinishedAt: 2026-08-12 13:25:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflow8vmvn/series-workflow8vmvn-convert-artifact-3924221508/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 13:25:43 +0000 UTC FinishedAt: 2026-08-12 13:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 13:25:43 +0000 UTC FinishedAt: 2026-08-12 13:27:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afc24c4a-fcfb-4a72-a03f-aab8ad135be9,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-workflow8vmvn/series-workflow8vmvn-build-action-2414120991/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-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 13:27:51 +0000 UTC FinishedAt: 2026-08-12 13:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 13:27:51 +0000 UTC FinishedAt: 2026-08-12 13:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 13:27:51 +0000 UTC FinishedAt: 2026-08-12 13:49:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 13:27:51 +0000 UTC FinishedAt: 2026-08-12 13:49:00 +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:*a8a9eee5-2ec9-437a-9070-7a749d84ed79,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-workflow8vmvn/series-workflow8vmvn-convert-artifact-3924221508/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": "83486059-3a0b-4989-933e-e38d32e84d9d", "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-workflow8vmvn/series-workflow8vmvn-build-action-1499268688/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 13:27:51 +0000 UTC FinishedAt: 2026-08-12 13:48:15 +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:*a8a9eee5-2ec9-437a-9070-7a749d84ed79,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-workflow8vmvn/series-workflow8vmvn-convert-artifact-3924221508/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": "83486059-3a0b-4989-933e-e38d32e84d9d", "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-workflow8vmvn/series-workflow8vmvn-build-action-1499268688/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 13:49:00 +0000 UTC FinishedAt: 2026-08-12 13:49:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 13:49:00 +0000 UTC FinishedAt: 2026-08-12 13:49:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 13:49:00 +0000 UTC FinishedAt: 2026-08-12 13:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 13:49:00 +0000 UTC FinishedAt: 2026-08-12 13:50:57 +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:*83486059-3a0b-4989-933e-e38d32e84d9d,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-workflow8vmvn/series-workflow8vmvn-build-action-1499268688/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-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 13:51:06 +0000 UTC FinishedAt: 2026-08-12 15:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 13:51:06 +0000 UTC FinishedAt: 2026-08-12 15:26:04 +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":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},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:*afc24c4a-fcfb-4a72-a03f-aab8ad135be9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*83486059-3a0b-4989-933e-e38d32e84d9d,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-workflow8vmvn/series-workflow8vmvn-build-action-2414120991/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-workflow8vmvn/series-workflow8vmvn-build-action-1499268688/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 13:51:06 +0000 UTC FinishedAt: 2026-08-12 13:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 13:51:06 +0000 UTC FinishedAt: 2026-08-12 13:51:11 +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":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},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-workflow8vmvn/series-workflow8vmvn-convert-artifact-2203469133/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 13:51:06 +0000 UTC FinishedAt: 2026-08-12 13:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 13:51:06 +0000 UTC FinishedAt: 2026-08-12 13:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 13:51:06 +0000 UTC FinishedAt: 2026-08-12 13:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 13:51:17 +0000 UTC FinishedAt: 2026-08-12 15:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vmvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kvm_xen_set_evtchn_fast","kvm_arch_set_irq_inatomic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"e0f6b4a4-8640-4718-b237-b1b29362bbd4","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 13:51:17 +0000 UTC FinishedAt: 2026-08-12 15:25:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afc24c4a-fcfb-4a72-a03f-aab8ad135be9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*83486059-3a0b-4989-933e-e38d32e84d9d,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-workflow8vmvn/series-workflow8vmvn-build-action-2414120991/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-workflow8vmvn/series-workflow8vmvn-build-action-1499268688/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-workflow8vmvn/series-workflow8vmvn-convert-artifact-2203469133/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,}