Name: series-workflowb26b6 Phase: Succeeded StartedAt: 2026-07-08 21:23:46 +0000 UTC FinishedAt: 2026-07-08 23:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[0] Phase: Succeeded StartedAt: 2026-07-08 21:23:46 +0000 UTC FinishedAt: 2026-07-08 21:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 21:23:46 +0000 UTC FinishedAt: 2026-07-08 21:50:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "babe08404e1993697a523e60bc0f9d096ffe1ef8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "AMD_IOMMU", "IRQ_REMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "babe08404e1993697a523e60bc0f9d096ffe1ef8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "AMD_IOMMU", "IRQ_REMAP" ], "series_id": "c31b065e-df20-49aa-933a-359c037091e4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "avic_update_iommu_vcpu_affinity", "amd_iommu_update_ga", "amd_iommu_activate_guest_mode", "avic_pi_update_irte", "__amd_iommu_update_ga", "avic_add_vcpu_to_gappi_wakeup_list", "avic_remove_vcpu_from_gappi_wakeup_list", "avic_gappi_wakeup_handler", "avic_destroy_vcpu", "svm_ir_list_del" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O0lSUV9SRU1BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X3VwZGF0ZV9nYSYjMzQ7LAogICAgJiMzNDthbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSYjMzQ7LAogICAgJiMzNDthdmljX3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O19fYW1kX2lvbW11X3VwZGF0ZV9nYSYjMzQ7LAogICAgJiMzNDthdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0JiMzNDssCiAgICAmIzM0O2F2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2F2aWNfZGVzdHJveV92Y3B1JiMzNDssCiAgICAmIzM0O3N2bV9pcl9saXN0X2RlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMgKEdBUFBJKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdXBkYXRlcyBhbmQgdkNQVSBhZmZpbml0eSBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIFFFTVUgd2l0aCBLVk0gU1ZNKS4gVGhlIGNoYW5nZXMgYWx0ZXIgY29yZSBBVklDIGFuZCBJT01NVSBsb2dpYyBldmVuIHdoZW4gR0FQUEkgaXMgbm90IGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgYm9vdCBwYXJhbWV0ZXIsIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWFlYTAyYzVjNmE4MWE0YTcxNzk1MTI2YTI4ODVlMDBmYmRhYTE2NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMjE6NDk6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXG5pbmRleCAzN2I5NGY0ODRlZjMzOC4uNDBhMjIwNmEzM2MwOGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxuQEAgLTM1LDggJiM0MzszNSw4IEBAIHN0cnVjdCBhbWRfaW9tbXVfcGlfZGF0YSB7XG4gXHR1NjQgdmFwaWNfYWRkcjtcdFx0LyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgdkNQVSYjMzk7cyB2QVBJQy4gKi9cbiBcdHUzMiBnYV90YWc7XG4gXHR1MzIgdmVjdG9yO1x0XHQvKiBHdWVzdCB2ZWN0b3Igb2YgdGhlIGludGVycnVwdCAqL1xuLVx0aW50IGNwdTtcbi1cdGJvb2wgZ2FfbG9nX2ludHI7XG4mIzQzO1x0aW50IGFwaWNpZDtcbiYjNDM7XHRpbnQgZmxhZ3M7XG4gXHRib29sIGlzX2d1ZXN0X21vZGU7XG4gXHR2b2lkICppcl9kYXRhO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuaW5kZXggY2RkNWE2ZGM2NDZmMTEuLjgxODU4NDFkOWI4MTY1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG5AQCAtNjMsNiAmIzQzOzYzLDkgQEBcbiBcdGdhX3RhZztcdFx0XHRcdFx0XHRcdFx0XFxcbiB9KVxuIFxuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxpc3RfaGVhZCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShyYXdfc3BpbmxvY2tfdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrKTtcbiYjNDM7XG4gc3RhdGljX2Fzc2VydChfX0FWSUNfR0FUQUcoQVZJQ19WTV9JRF9NQVNLLCBBVklDX1ZDUFVfSURYX01BU0spID09IC0xdSk7XG4gXG4gI2RlZmluZSBBVklDX0FVVE9fTU9ERSAtMVxuQEAgLTg3NCw2ICYjNDM7ODc3LDkgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2spO1xuIFxuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbiYjNDM7XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XG4mIzQzO1xuIFx0aWYgKCFlbmFibGVfYXBpY3YgfHwgIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtODg2LDYgJiM0Mzs4OTIsNDIgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICp3YWtldXBfbGlzdDtcbiYjNDM7XHRyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OKGNwdSBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHdha2V1cF9saXN0ID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xuJiM0MztcdHNwaW5sb2NrID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XG4mIzQzO1x0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcbiYjNDM7XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0LCB3YWtldXBfbGlzdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHJhd19zcGlubG9ja190ICpzcGlubG9jaztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT04oY3B1IFx1MDAzYyAwKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3BpbmxvY2sgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcbiYjNDM7XHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiYjNDM7e1xuJiM0MztcdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbiYjNDM7XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuQEAgLTg5NiwxMyAmIzQzOzkzOCwxOCBAQCBzdGF0aWMgdm9pZCBzdm1faXJfbGlzdF9kZWwoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfdmNwdTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4gXG4gXHRpZiAoIXZjcHUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0c3ZtID0gdG9fc3ZtKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIFx0bGlzdF9kZWwoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0KTtcbi1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRvX3N2bSh2Y3B1KS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpXG4mIzQzO1x0XHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuQEAgLTkzMiw2ICYjNDM7OTc5LDggQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIFx0XHR1NjQgZW50cnk7XG4gXHRcdGludCByZXQ7XG4mIzQzO1x0XHRpbnQgcG9zdGVkX2ludHI7XG4mIzQzO1x0XHRib29sIGlzX3ZjcHVfd2FpdGluZyA9IGZhbHNlO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbFxuQEAgLTk0OSwxNSAmIzQzOzk5OCwyMyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICovXG4gXHRcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG4gXHRcdGlmIChlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcbi1cdFx0XHRwaV9kYXRhLmNwdSA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcbiYjNDM7XHRcdFx0cGlfZGF0YS5hcGljaWQgPSBlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0s7XG4mIzQzO1x0XHRcdHBpX2RhdGEuZmxhZ3MgPSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkc7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGlfZGF0YS5jcHUgPSAtMTtcbi1cdFx0XHRwaV9kYXRhLmdhX2xvZ19pbnRyID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XG4mIzQzO1x0XHRcdHBvc3RlZF9pbnRyID0gISEoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xuJiM0MztcdFx0XHRwaV9kYXRhLmZsYWdzID0gcG9zdGVkX2ludHIgXHUwMDNjXHUwMDNjIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUO1xuJiM0MztcdFx0XHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XG4mIzQzO1x0XHRcdFx0cGlfZGF0YS5hcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4mIzQzO1x0XHRcdFx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRcdFx0XHRpc192Y3B1X3dhaXRpbmcgPSB0cnVlO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgXHUwMDI2cGlfZGF0YSk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBSZXZlcnQgdG8gbGVnYWN5IG1vZGUgaWYgdGhlIElPTU1VIGRpZG4mIzM5O3QgcHJvdmlkZSBtZXRhZGF0YVxuQEAgLTk2NiwxMiAmIzQzOzEwMjMsMTcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqL1xuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFwaV9kYXRhLmlyX2RhdGEpKSB7XG4gXHRcdFx0aXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFx0XHR9XG4gXG4gXHRcdGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0LCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gXHRcdHJldHVybiAwO1xuJiM0MztnYXBwaV9lcnJfb3V0OlxuJiM0MztcdFx0aWYgKGlzX3ZjcHVfd2FpdGluZylcbiYjNDM7XHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0cmV0dXJuIGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XG4gfVxuQEAgLTEwMDQsMTAgJiM0MzsxMDY2LDE0IEBAIGVudW0gYXZpY192Y3B1X2FjdGlvbiB7XG4gXHRBVklDX1NUQVJUX0JMT0NLSU5HXHQ9IEJJVCgxKSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuLVx0XHRcdFx0XHQgICAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiYjNDM7c3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhcGljaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50IGNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiB7XG4tXHRib29sIGdhX2xvZ19pbnRyID0gKGFjdGlvbiBcdTAwMjYgQVZJQ19TVEFSVF9CTE9DS0lORyk7XG4mIzQzO1x0aW50IHBvc3RlZF9pbnRyID0gISEoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKSBcdTAwM2NcdTAwM2NcbiYjNDM7XHRcdFx0ICBBTURfSU9NTVVfRkxBR19QT1NURURfSU5UUl9TSElGVDtcbiYjNDM7XHRpbnQgaXNfdmNwdV9ydW5uaW5nID0gKGFwaWNpZCBcdTAwM2U9IDApIFx1MDAzY1x1MDAzY1xuJiM0MztcdFx0XHQgICAgICBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQ7XG4mIzQzO1x0aW50IGZsYWdzID0gcG9zdGVkX2ludHIgfCBpc192Y3B1X3J1bm5pbmc7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZDtcbiBcbkBAIC0xMDE3LDE2ICYjNDM7MTA4MywzMCBAQCBzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbiBcdCAqIEhlcmUsIHdlIGdvIHRocm91Z2ggdGhlIHBlci12Y3B1IGlyX2xpc3QgdG8gdXBkYXRlIGFsbCBleGlzdGluZ1xuIFx0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB0YXJnZXRpbmcgdGhpcyB2Y3B1LlxuIFx0ICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpXG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4mIzQzO1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBjcHUgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gY3B1O1xuIFx0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfdmNwdV9ydW5uaW5nIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbiYjNDM7XHRcdC8qIElGIGNvbmRpdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlICovXG4mIzQzO1x0XHRpZiAoc3ZtLVx1MDAzZWdhcHBpX2NwdSAhPSAtMSlcbiYjNDM7XHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1xuJiM0MztcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IGNwdTsgLyogU3RvcmUgY3B1IG5vIGFzIHRhcmdldCBmb3IgR0FQUEkgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xuJiM0MztcdFx0YXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdFx0YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdH1cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbiBcdFx0dm9pZCAqZGF0YSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YTtcbiBcbiBcdFx0aWYgKCEoYWN0aW9uIFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxuLVx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTtcbi1cdFx0ZWxzZSBpZiAoY3B1IFx1MDAzZT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XG4mIzQzO1x0XHRlbHNlIGlmIChpc192Y3B1X3J1bm5pbmcpXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhKSk7XG4gXHR9XG5AQCAtMTA4MCw3ICYjNDM7MTE2MCw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuIFxuIFx0V1JJVEVfT05DRShrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbdmNwdS1cdTAwM2V2Y3B1X2lkXSwgZW50cnkpO1xuIFxuLVx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBhY3Rpb24pO1xuJiM0MztcdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgY3B1LCBhY3Rpb24pO1xuIFxuIFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0xMTIzLDcgJiM0MzsxMjAzLDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiBcdCAqL1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcbi1cdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7XG4mIzQzO1x0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCAtMSwgLTEsIGFjdGlvbik7XG4gXG4gXHRXQVJOX09OX09OQ0UoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xuIFxuQEAgLTEyOTYsNiAmIzQzOzEzNzYsMjEgQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICp2Y3B1X3dha2V1cF9saXN0ID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xuJiM0MztcdHJhd19zcGlubG9ja190ICpzcGlubG9jayA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xuJiM0MztcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrKHNwaW5sb2NrKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHN2bSwgdmNwdV93YWtldXBfbGlzdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkge1xuJiM0MztcdFx0aWYgKGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdGt2bV92Y3B1X3dha2VfdXAoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpO1xuJiM0MztcdH1cbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2soc3BpbmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTm90ZTpcbiAgKiAtIFRoZSBtb2R1bGUgcGFyYW0gYXZpYyBlbmFibGUgYm90aCB4QVBJQyBhbmQgeDJBUElDIG1vZGUuXG5AQCAtMTMwNCwxMiAmIzQzOzEzOTksMTggQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbiAgKi9cbiBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4ge1xuJiM0MztcdGludCBjcHU7XG4gXHRhdmljID0gYXZpY193YW50X2F2aWNfZW5hYmxlZCgpO1xuIFx0aWYgKCFhdmljKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRwcl9pbmZvKFwmIzM0O0FWSUMgZW5hYmxlZFxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpKTtcbiYjNDM7XHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEFWSUMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIHgyQVZJQy4gKi9cbiBcdHgyYXZpY19lbmFibGVkID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1gyQVZJQyk7XG4gXHRpZiAoeDJhdmljX2VuYWJsZWQpIHtcbkBAIC0xMzMzLDEyICYjNDM7MTQzNCwxNiBAQCBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHRcdGVuYWJsZV9pcGl2ID0gZmFsc2U7XG4gXG4gXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFx1MDAyNmF2aWNfZ2FfbG9nX25vdGlmaWVyKTtcbiYjNDM7XHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKFx1MDAyNmF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHZvaWQgYXZpY19oYXJkd2FyZV91bnNldHVwKHZvaWQpXG4ge1xuLVx0aWYgKGF2aWMpXG4tXHRcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XG4mIzQzO1x0aWYgKCFhdmljKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKE5VTEwpO1xuJiM0MztcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoTlVMTCk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlMDJhMzhkYTUyOTZlMy4uYjY4NzEzM2Y4NTI4YmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtMTM1Niw2ICYjNDM7MTM1Niw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSk7XG4gXG4mIzQzO1x0YXZpY19kZXN0cm95X3ZjcHUoc3ZtKTtcbiYjNDM7XG4gXHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xuIFx0c3ZtX2ZyZWVfbmVzdGVkKHN2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDUxMzc0MTZiZTU5M2Q3Li40N2Q1YmI1ZDcxMDNkYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC0zNjIsNiAmIzQzOzM2MiwxMCBAQCBzdHJ1Y3QgdmNwdV9zdm0ge1xuIFxuIFx0LyogR3Vlc3QgR0lGIHZhbHVlLCB1c2VkIHdoZW4gdkdJRiBpcyBub3QgZW5hYmxlZCAqL1xuIFx0Ym9vbCBndWVzdF9naWY7XG4mIzQzO1xuJiM0MztcdC8qIEdBUFBJIHJlbGF0ZWQgZmllbGRzICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBnYXBwaV92Y3B1X3dha2V1cF9saXN0O1xuJiM0MztcdGludCBnYXBwaV9jcHU7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3ZtX2NwdV9kYXRhIHtcbkBAIC05MDksNiAmIzQzOzkxMyw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTtcbiBpbnQgYXZpY19pbmNvbXBsZXRlX2lwaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuJiM0Mzt2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiB2b2lkIGF2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcbmluZGV4IDgzNGQ4ZmFiZmJhMzg3Li4wNDQxNzljYWIxMmU0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxuQEAgLTQxLDYgJiM0Mzs0MSw3IEBAIGludCBhbWRfaW9tbXVfZW5hYmxlKHZvaWQpO1xuIHZvaWQgYW1kX2lvbW11X2Rpc2FibGUodm9pZCk7XG4gaW50IGFtZF9pb21tdV9yZWVuYWJsZShpbnQgbW9kZSk7XG4gaW50IGFtZF9pb21tdV9lbmFibGVfZmF1bHRpbmcodW5zaWduZWQgaW50IGNwdSk7XG4mIzQzO2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ndWVzdF9pcjtcbiBleHRlcm4gZW51bSBwcm90ZWN0aW9uX2RvbWFpbl9tb2RlIGFtZF9pb21tdV9wZ3RhYmxlO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXG5pbmRleCBmOWY3MTgwODc4OTMwMy4uZGUwYjIzMzA2OTQ0YjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcbkBAIC05NCw2ICYjNDM7OTQsNyBAQFxuICNkZWZpbmUgRkVBVFVSRV9YMkFQSUNcdFx0QklUX1VMTCgyKVxuICNkZWZpbmUgRkVBVFVSRV9OWFx0XHRCSVRfVUxMKDMpXG4gI2RlZmluZSBGRUFUVVJFX0dUXHRcdEJJVF9VTEwoNClcbiYjNDM7I2RlZmluZSBGRUFUVVJFX0dBUFBJXHRcdEJJVF9VTEwoNSlcbiAjZGVmaW5lIEZFQVRVUkVfSUFcdFx0QklUX1VMTCg2KVxuICNkZWZpbmUgRkVBVFVSRV9HQVx0XHRCSVRfVUxMKDcpXG4gI2RlZmluZSBGRUFUVVJFX0hFXHRcdEJJVF9VTEwoOClcbkBAIC0xMTMsNiAmIzQzOzExNCw3IEBAXG4gLyogRXh0ZW5kZWQgRmVhdHVyZSAyIEJpdHMgKi9cbiAjZGVmaW5lIEZFQVRVUkVfU0VWU05QSU9fU1VQXHRCSVRfVUxMKDEpXG4gI2RlZmluZSBGRUFUVVJFX0dDUjNUUlBNT0RFXHRCSVRfVUxMKDMpXG4mIzQzOyNkZWZpbmUgRkVBVFVSRV9HQVBQSURJU1NVUFx0QklUX1VMTCg0KVxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQXHRHRU5NQVNLX1VMTCg3LCA1KVxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQX0dBTSh4KSBcXFxuIFx0KEZJRUxEX0dFVChGRUFUVVJFX1NOUEFWSUNTVVAsIHgpID09IDB4MSlcbkBAIC0xOTAsNiAmIzQzOzE5Miw3IEBAXG4gI2RlZmluZSBDT05UUk9MX0VQSF9FTlx0XHQ0NVxuICNkZWZpbmUgQ09OVFJPTF9YVF9FTlx0XHQ1MFxuICNkZWZpbmUgQ09OVFJPTF9JTlRDQVBYVF9FTlx0NTFcbiYjNDM7I2RlZmluZSBDT05UUk9MX0dBUFBJX0VOXHQ1NVxuICNkZWZpbmUgQ09OVFJPTF9HQ1IzVFJQTU9ERVx0NThcbiAjZGVmaW5lIENPTlRST0xfSVJUQ0FDSEVESVNcdDU5XG4gI2RlZmluZSBDT05UUk9MX1NOUEFWSUNfRU5cdDYxXG5AQCAtMTAwNCw3ICYjNDM7MTAwNyw4IEBAIHVuaW9uIGlydGVfZ2FfbG8ge1xuIFx0XHQgICAgbm9fZmF1bHRcdDogMSxcbiBcdFx0ICAgIC8qIC0tLS0tLSAqL1xuIFx0XHQgICAgZ2FfbG9nX2ludHJcdDogMSxcbi1cdFx0ICAgIHJzdmQxXHQ6IDMsXG4mIzQzO1x0XHQgICAgcnN2ZDFcdDogMixcbiYjNDM7XHRcdCAgICBnYXBwaV9kaXNcdDogMSxcbiBcdFx0ICAgIGlzX3J1blx0OiAxLFxuIFx0XHQgICAgLyogLS0tLS0tICovXG4gXHRcdCAgICBndWVzdF9tb2RlXHQ6IDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXG5pbmRleCAzYmRiMzgwZDIzZTlhOS4uMjdmZmIyMTg0YmYyOTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xuQEAgLTE2MCw2ICYjNDM7MTYwLDkgQEAgdTggYW1kX2lvbW11X2hwdF9sZXZlbDtcbiAvKiBHdWVzdCBwYWdlIHRhYmxlIGxldmVsICovXG4gaW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcbiBcbiYjNDM7Ym9vbCBhbWRfaW9tbXVfZ2FwcGk7XG4mIzQzO0VYUE9SVF9TWU1CT0woYW1kX2lvbW11X2dhcHBpKTtcbiYjNDM7XG4gaW50IGFtZF9pb21tdV9ndWVzdF9pciA9IEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQztcbiBzdGF0aWMgaW50IGFtZF9pb21tdV94dF9tb2RlID0gSVJRX1JFTUFQX1hBUElDX01PREU7XG4gXG5AQCAtNDYyLDYgJiM0Mzs0NjUsOSBAQCBzdGF0aWMgdm9pZCBpb21tdV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KVxuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBTE9HX0VOKTtcbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUlOVF9FTik7XG4gXG4mIzQzO1x0LyogRGlzYWJsZSBJT01NVSBHQVBQSSAqL1xuJiM0MztcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4mIzQzO1xuIFx0LyogRGlzYWJsZSBJT01NVSBQUFIgbG9nZ2luZyAqL1xuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX1BQUkxPR19FTik7XG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSSU5UX0VOKTtcbkBAIC0yOTk2LDYgJiM0MzszMDAyLDEyIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11O1xuIFxuIFx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcbiYjNDM7XHRcdC8qIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlXG4mIzQzO1x0XHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcbiYjNDM7XHRcdCAqIGVuYWJsZWQgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBEaXNhYmxlIEdBTG9nIGlmIGFscmVhZHkgcnVubmluZy4gSXQgY291bGQgaGF2ZSBiZWVuIGVuYWJsZWRcbiBcdFx0ICogaW4gdGhlIHByZXZpb3VzIGJvb3QgYmVmb3JlIGtkdW1wLlxuQEAgLTMwMzUsMTAgJiM0MzszMDQ3LDE5IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuJiM0MztcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7R0FQUEkgaXMgbm90IHN1cHBvcnRlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEVuYWJsaW5nIEdBTSBhbmQgU05QQVZJQyBzdXBwb3J0ICovXG4gXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xuLVx0XHRpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XG4tXHRcdCAgICBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcbiYjNDM7XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpXG4mIzQzO1x0XHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbiYjNDM7XHRcdGVsc2UgaWYgKGlvbW11X2luaXRfZ2FfbG9nKGlvbW11KSB8fFxuJiM0MztcdFx0XHQgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQU1fRU4pO1xuQEAgLTMwNDcsNyAmIzQzOzMwNjgsOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXG4gXHR9XG4gXG4gXHRhbWRfaW9tbXVfaXJxX29wcy5jYXBhYmlsaXR5IHw9ICgxIFx1MDAzY1x1MDAzYyBJUlFfUE9TVElOR19DQVApO1xuLVx0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0YW1kX2lvbW11X2dhcHBpID8gXCYjMzQ7R0FQUElcJiMzNDsgOiBcJiMzNDtHQUxPR1wmIzM0Oyk7XG4gI2VuZGlmXG4gfVxuIFxuQEAgLTM3MzgsNiAmIzQzOzM3NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpXG4gXHRcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFwmIzM0O3YyX3Bnc2l6ZXNfb25seVwmIzM0OywgMTUpID09IDApIHtcbiBcdFx0XHRwcl9pbmZvKFwmIzM0O1Jlc3RyaWN0aW5nIFYxIHBhZ2Utc2l6ZXMgdG8gNEtpQi8yTWlCLzFHaUJcJiMzNDspO1xuIFx0XHRcdGFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtnYXBwaVwmIzM0OywgNSkgPT0gMCkge1xuJiM0MztcdFx0XHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX25vdGljZShcJiMzNDtVbmtub3duIG9wdGlvbiAtICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3RyKTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG5pbmRleCA1N2RjOGZhYmM3ZDliOS4uYjIyNmQzOTQxY2I5YjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG5AQCAtMzk1OSwxOSAmIzQzOzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbiBcdC5kZWFjdGl2YXRlID0gaXJxX3JlbWFwcGluZ19kZWFjdGl2YXRlLFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbi1cdFx0XHRcdCAgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuIHtcbi1cdGlmIChjcHUgXHUwMDNlPSAwKSB7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkcpIHtcbiBcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID1cbi1cdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhjcHUpO1xuJiM0MztcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xuIFx0XHRlbnRyeS1cdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPVxuLVx0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGNwdSk7XG4mIzQzO1x0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGFwaWNpZCk7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSB0cnVlO1xuIFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbi1cdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZ2FfbG9nX2ludHI7XG4mIzQzO1x0XHRib29sIHBvc3RlZF9pbnRyID0gISEoZmxhZ3MgXHUwMDI2IEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYXBwaV9kaXMgPSAhcG9zdGVkX2ludHIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgY2hlY2tfZmVhdHVyZTIoRkVBVFVSRV9HQVBQSURJU1NVUCk7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID1cbiYjNDM7XHRcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPSBBUElDSURfVE9fSVJURV9ERVNUX0hJKGFwaWNpZCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IHBvc3RlZF9pbnRyO1xuJiM0MztcdFx0fVxuIFx0fVxuIH1cbiBcbkBAIC0zOTkyLDcgJiM0Mzs0MDAyLDcgQEAgc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbiAgKiBhbmQgdGh1cyBkb24mIzM5O3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVSBjb25zdW1lcyBmcmVzaFxuICAqIGluZm9ybWF0aW9uLlxuICAqL1xuLWludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4mIzQzO2ludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTtcbiBcdHN0cnVjdCBpcnRlX2dhICplbnRyeSA9IChzdHJ1Y3QgaXJ0ZV9nYSAqKSBpcl9kYXRhLVx1MDAzZWVudHJ5O1xuQEAgLTQwMDYsMTQgJiM0Mzs0MDE2LDE0IEBAIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4gXHRpZiAoIWlyX2RhdGEtXHUwMDNlaW9tbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbiYjNDM7XHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIF9fbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cdTAwM2Vpb21tdSwgaXJfZGF0YS1cdTAwM2VpcnFfMl9pcnRlLmRldmlkLFxuIFx0XHRcdFx0aXJfZGF0YS1cdTAwM2VpcnFfMl9pcnRlLmluZGV4LCBlbnRyeSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woYW1kX2lvbW11X3VwZGF0ZV9nYSk7XG4gXG4taW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4mIzQzO2ludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS1cdTAwM2VlbnRyeTtcbkBAIC00MDM0LDkgJiM0Mzs0MDQ0LDEzIEBAIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuIFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmd1ZXN0X21vZGUgID0gMTtcbiBcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy5nYV9yb290X3B0ciAgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2Ffcm9vdF9wdHI7XG4gXHRlbnRyeS1cdTAwM2VoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLVx1MDAzZWdhX3ZlY3Rvcjtcbi1cdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2FfdGFnO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbiYjNDM7XHRpZiAoYW1kX2lvbW11X2dhcHBpKVxuJiM0MztcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1I7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IGlyX2RhdGEtXHUwMDNlZ2FfdGFnO1xuJiM0MztcbiYjNDM7XHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIG1vZGlmeV9pcnRlX2dhKGlyX2RhdGEtXHUwMDNlaW9tbXUsIGlyX2RhdGEtXHUwMDNlaXJxXzJfaXJ0ZS5kZXZpZCxcbiBcdFx0XHQgICAgICBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbkBAIC00MTA3LDggJiM0Mzs0MTIxLDggQEAgc3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxuIFx0XHRpcl9kYXRhLVx1MDAzZWdhX3ZlY3RvciA9IHBpX2RhdGEtXHUwMDNldmVjdG9yO1xuIFx0XHRpcl9kYXRhLVx1MDAzZWdhX3RhZyA9IHBpX2RhdGEtXHUwMDNlZ2FfdGFnO1xuIFx0XHRpZiAocGlfZGF0YS1cdTAwM2Vpc19ndWVzdF9tb2RlKVxuLVx0XHRcdHJldCA9IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEsIHBpX2RhdGEtXHUwMDNlY3B1LFxuLVx0XHRcdFx0XHRcdFx0ICAgIHBpX2RhdGEtXHUwMDNlZ2FfbG9nX2ludHIpO1xuJiM0MztcdFx0XHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVx1MDAzZWFwaWNpZCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgcGlfZGF0YS1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuaW5kZXggZWRjZWU5ZjUzMzVhNmYuLjg3ZTc2ZjYxN2VhMTg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuQEAgLTMwLDggJiM0MzszMCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpIHsgfVxuIC8qIElPTU1VIEFWSUMgRnVuY3Rpb24gKi9cbiBleHRlcm4gaW50IGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpO1xuIFxuLWV4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTtcbi1leHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xuJiM0MztleHRlcm4gaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKTtcbiYjNDM7ZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTtcbiBcbiAjZWxzZSAvKiBkZWZpbmVkKENPTkZJR19BTURfSU9NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19JUlFfUkVNQVApICovXG5AQCAtNDIsMTIgJiM0Mzs0MiwxMiBAQCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzYsNCAmIzQzOzc2LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBib29sIGFtZF9pb21tdV9zZXZfdGlvX3N1cHBvcnRlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuICNlbmRpZlxuIFxuJiM0MzsjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVCAwXG4mIzQzOyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfVkNQVV9SVU5OSU5HICBCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQgMVxuJiM0MzsjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSICBCSVQoMSlcbiYjNDM7XG4mIzQzO2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbiAjZW5kaWYgLyogX0FTTV9YODZfQU1EX0lPTU1VX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJUlFfUkVNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5JiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUmIzM0OywKICAgICYjMzQ7YXZpY19waV91cGRhdGVfaXJ0ZSYjMzQ7LAogICAgJiMzNDtfX2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthdmljX2Rlc3Ryb3lfdmNwdSYjMzQ7LAogICAgJiMzNDtzdm1faXJfbGlzdF9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzIChHQVBQSSkgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHVwZGF0ZXMgYW5kIHZDUFUgYWZmaW5pdHkgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBRRU1VIHdpdGggS1ZNIFNWTSkuIFRoZSBjaGFuZ2VzIGFsdGVyIGNvcmUgQVZJQyBhbmQgSU9NTVUgbG9naWMgZXZlbiB3aGVuIEdBUFBJIGlzIG5vdCBleHBsaWNpdGx5IGVuYWJsZWQgdmlhIGJvb3QgcGFyYW1ldGVyLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWFlYTAyYzVjNmE4MWE0YTcxNzk1MTI2YTI4ODVlMDBmYmRhYTE2NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMjE6NDk6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKaW5kZXggMzdiOTRmNDg0ZWYzMzguLjQwYTIyMDZhMzNjMDhkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oCkBAIC0zNSw4ICYjNDM7MzUsOCBAQCBzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEgewogCXU2NCB2YXBpY19hZGRyOwkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgdkNQVSYjMzk7cyB2QVBJQy4gKi8KIAl1MzIgZ2FfdGFnOwogCXUzMiB2ZWN0b3I7CQkvKiBHdWVzdCB2ZWN0b3Igb2YgdGhlIGludGVycnVwdCAqLwotCWludCBjcHU7Ci0JYm9vbCBnYV9sb2dfaW50cjsKJiM0MzsJaW50IGFwaWNpZDsKJiM0MzsJaW50IGZsYWdzOwogCWJvb2wgaXNfZ3Vlc3RfbW9kZTsKIAl2b2lkICppcl9kYXRhOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMKaW5kZXggY2RkNWE2ZGM2NDZmMTEuLjgxODU4NDFkOWI4MTY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYwpAQCAtNjMsNiAmIzQzOzYzLDkgQEAKIAlnYV90YWc7CQkJCQkJCQlcCiB9KQogCiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShyYXdfc3BpbmxvY2tfdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrKTsKJiM0MzsKIHN0YXRpY19hc3NlcnQoX19BVklDX0dBVEFHKEFWSUNfVk1fSURfTUFTSywgQVZJQ19WQ1BVX0lEWF9NQVNLKSA9PSAtMXUpOwogCiAjZGVmaW5lIEFWSUNfQVVUT19NT0RFIC0xCkBAIC04NzQsNiAmIzQzOzg3Nyw5IEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCk7CiAJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2spOwogCiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7c3ZtLSZndDtnYXBwaV92Y3B1X3dha2V1cF9saXN0KTsKJiM0MzsJc3ZtLSZndDtnYXBwaV9jcHUgPSAtMTsKJiM0MzsKIAlpZiAoIWVuYWJsZV9hcGljdiB8fCAhaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTg4Niw2ICYjNDM7ODkyLDQyIEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgKndha2V1cF9saXN0OwomIzQzOwlyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2s7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKGNwdSAmbHQ7IDApKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3YWtldXBfbGlzdCA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpOwomIzQzOwlzcGlubG9jayA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7CiYjNDM7CWd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShzcGlubG9jayk7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtnYXBwaV92Y3B1X3dha2V1cF9saXN0KSkKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIHdha2V1cF9saXN0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJcmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTihjcHUgJmx0OyAwKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3BpbmxvY2sgPSAmYW1wO3Blcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpOwomIzQzOwlndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpKQomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO3N2bS0mZ3Q7Z2FwcGlfdmNwdV93YWtldXBfbGlzdCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiYjNDM7ewomIzQzOwlpZiAoc3ZtLSZndDtnYXBwaV9jcHUgIT0gLTEgJmFtcDsmYW1wOyBhbWRfaW9tbXVfZ2FwcGkpIHsKJiM0MzsJCWF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJCXN2bS0mZ3Q7Z2FwcGlfY3B1ID0gLTE7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpOwpAQCAtODk2LDEzICYjNDM7OTM4LDE4IEBAIHN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaXJxZmQtJmd0O2lycV9ieXBhc3NfdmNwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bTsKIAogCWlmICghdmNwdSkKIAkJcmV0dXJuOwogCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dG9fc3ZtKHZjcHUpLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsJc3ZtID0gdG9fc3ZtKHZjcHUpOwomIzQzOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzdm0tJmd0O2lyX2xpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZhbXA7aXJxZmQtJmd0O3ZjcHVfbGlzdCk7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0b19zdm0odmNwdSktJmd0O2lyX2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCkpCiYjNDM7CQlhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCkBAIC05MzIsNiAmIzQzOzk3OSw4IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAkJdTY0IGVudHJ5OwogCQlpbnQgcmV0OwomIzQzOwkJaW50IHBvc3RlZF9pbnRyOwomIzQzOwkJYm9vbCBpc192Y3B1X3dhaXRpbmcgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbApAQCAtOTQ5LDE1ICYjNDM7OTk4LDIzIEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgKi8KIAkJZW50cnkgPSBzdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfZW50cnk7CiAJCWlmIChlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSykgewotCQkJcGlfZGF0YS5jcHUgPSBlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSzsKJiM0MzsJCQlwaV9kYXRhLmFwaWNpZCA9IGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLOwomIzQzOwkJCXBpX2RhdGEuZmxhZ3MgPSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkc7CiAJCX0gZWxzZSB7Ci0JCQlwaV9kYXRhLmNwdSA9IC0xOwotCQkJcGlfZGF0YS5nYV9sb2dfaW50ciA9IGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7CiYjNDM7CQkJcG9zdGVkX2ludHIgPSAhIShlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKTsKJiM0MzsJCQlwaV9kYXRhLmZsYWdzID0gcG9zdGVkX2ludHIgJmx0OyZsdDsgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQ7CiYjNDM7CQkJaWYgKGFtZF9pb21tdV9nYXBwaSkgewomIzQzOwkJCQlwaV9kYXRhLmFwaWNpZCA9IGt2bV9jcHVfZ2V0X2FwaWNpZChzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtpcl9saXN0KSkgewomIzQzOwkJCQkJYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJCQkJCWlzX3ZjcHVfd2FpdGluZyA9IHRydWU7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiAJCX0KIAogCQlyZXQgPSBpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsICZhbXA7cGlfZGF0YSk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCWdvdG8gZ2FwcGlfZXJyX291dDsKIAogCQkvKgogCQkgKiBSZXZlcnQgdG8gbGVnYWN5IG1vZGUgaWYgdGhlIElPTU1VIGRpZG4mIzM5O3QgcHJvdmlkZSBtZXRhZGF0YQpAQCAtOTY2LDEyICYjNDM7MTAyMywxNyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSwKIAkJICovCiAJCWlmIChXQVJOX09OX09OQ0UoIXBpX2RhdGEuaXJfZGF0YSkpIHsKIAkJCWlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7Ci0JCQlyZXR1cm4gLUVJTzsKJiM0MzsJCQlyZXQgPSAtRUlPOwomIzQzOwkJCWdvdG8gZ2FwcGlfZXJyX291dDsKIAkJfQogCiAJCWlycWZkLSZndDtpcnFfYnlwYXNzX2RhdGEgPSBwaV9kYXRhLmlyX2RhdGE7CiAJCWxpc3RfYWRkKCZhbXA7aXJxZmQtJmd0O3ZjcHVfbGlzdCwgJmFtcDtzdm0tJmd0O2lyX2xpc3QpOwogCQlyZXR1cm4gMDsKJiM0MztnYXBwaV9lcnJfb3V0OgomIzQzOwkJaWYgKGlzX3ZjcHVfd2FpdGluZykKJiM0MzsJCQlhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTsKIH0KQEAgLTEwMDQsMTAgJiM0MzsxMDY2LDE0IEBAIGVudW0gYXZpY192Y3B1X2FjdGlvbiB7CiAJQVZJQ19TVEFSVF9CTE9DS0lORwk9IEJJVCgxKSwKIH07CiAKLXN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LAotCQkJCQkgICAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbikKJiM0MztzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCwKJiM0MzsJCQkJCSAgICBpbnQgY3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKQogewotCWJvb2wgZ2FfbG9nX2ludHIgPSAoYWN0aW9uICZhbXA7IEFWSUNfU1RBUlRfQkxPQ0tJTkcpOwomIzQzOwlpbnQgcG9zdGVkX2ludHIgPSAhIShhY3Rpb24gJmFtcDsgQVZJQ19TVEFSVF9CTE9DS0lORykgJmx0OyZsdDsKJiM0MzsJCQkgIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUOwomIzQzOwlpbnQgaXNfdmNwdV9ydW5uaW5nID0gKGFwaWNpZCAmZ3Q7PSAwKSAmbHQ7Jmx0OwomIzQzOwkJCSAgICAgIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVDsKJiM0MzsJaW50IGZsYWdzID0gcG9zdGVkX2ludHIgfCBpc192Y3B1X3J1bm5pbmc7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAJc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkOwogCkBAIC0xMDE3LDE2ICYjNDM7MTA4MywzMCBAQCBzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSwKIAkgKiBIZXJlLCB3ZSBnbyB0aHJvdWdoIHRoZSBwZXItdmNwdSBpcl9saXN0IHRvIHVwZGF0ZSBhbGwgZXhpc3RpbmcKIAkgKiBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHRhcmdldGluZyB0aGlzIHZjcHUuCiAJICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2lyX2xpc3QpKQomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCkpIHsKJiM0MzsJCWlmIChhbWRfaW9tbXVfZ2FwcGkgJmFtcDsmYW1wOyBjcHUgJmd0Oz0gMCkKJiM0MzsJCQlzdm0tJmd0O2dhcHBpX2NwdSA9IGNwdTsKIAkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc192Y3B1X3J1bm5pbmcgJmFtcDsmYW1wOyBhbWRfaW9tbXVfZ2FwcGkpIHsKJiM0MzsJCS8qIElGIGNvbmRpdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlICovCiYjNDM7CQlpZiAoc3ZtLSZndDtnYXBwaV9jcHUgIT0gLTEpCiYjNDM7CQkJYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwomIzQzOwkJc3ZtLSZndDtnYXBwaV9jcHUgPSBjcHU7IC8qIFN0b3JlIGNwdSBubyBhcyB0YXJnZXQgZm9yIEdBUFBJICovCiYjNDM7CX0gZWxzZSBpZiAoYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQlhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwkJYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpcnFmZCwgJmFtcDtzdm0tJmd0O2lyX2xpc3QsIHZjcHVfbGlzdCkgewogCQl2b2lkICpkYXRhID0gaXJxZmQtJmd0O2lycV9ieXBhc3NfZGF0YTsKIAogCQlpZiAoIShhY3Rpb24gJmFtcDsgQVZJQ19UT0dHTEVfT05fT0ZGKSkKLQkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTsKLQkJZWxzZSBpZiAoY3B1ICZndDs9IDApCi0JCQlXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpOwomIzQzOwkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgZmxhZ3MpKTsKJiM0MzsJCWVsc2UgaWYgKGlzX3ZjcHVfcnVubmluZykKJiM0MzsJCQlXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgYXBpY2lkLCBmbGFncykpOwogCQllbHNlCiAJCQlXQVJOX09OX09OQ0UoYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhKSk7CiAJfQpAQCAtMTA4MCw3ICYjNDM7MTE2MCw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LAogCiAJV1JJVEVfT05DRShrdm1fc3ZtLSZndDthdmljX3BoeXNpY2FsX2lkX3RhYmxlW3ZjcHUtJmd0O3ZjcHVfaWRdLCBlbnRyeSk7CiAKLQlhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGFjdGlvbik7CiYjNDM7CWF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgY3B1LCBhY3Rpb24pOwogCiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtzdm0tJmd0O2lyX2xpc3RfbG9jaywgZmxhZ3MpOwogfQpAQCAtMTEyMyw3ICYjNDM7MTIwMyw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pCiAJICovCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKIAotCWF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7CiYjNDM7CWF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIC0xLCBhY3Rpb24pOwogCiAJV0FSTl9PTl9PTkNFKGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpOwogCkBAIC0xMjk2LDYgJiM0MzsxMzc2LDIxIEBAIHN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICp2Y3B1X3dha2V1cF9saXN0ID0gJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7CiYjNDM7CXJhd19zcGlubG9ja190ICpzcGlubG9jayA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7CiYjNDM7CXN0cnVjdCB2Y3B1X3N2bSAqc3ZtOwomIzQzOwomIzQzOwlyYXdfc3Bpbl9sb2NrKHNwaW5sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShzdm0sIHZjcHVfd2FrZXVwX2xpc3QsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpIHsKJiM0MzsJCWlmIChrdm1fbGFwaWNfZmluZF9oaWdoZXN0X2lycigmYW1wO3N2bS0mZ3Q7dmNwdSkgJmd0Oz0gMCkKJiM0MzsJCQlrdm1fdmNwdV93YWtlX3VwKCZhbXA7c3ZtLSZndDt2Y3B1KTsKJiM0MzsJfQomIzQzOwlyYXdfc3Bpbl91bmxvY2soc3BpbmxvY2spOwomIzQzO30KJiM0MzsKIC8qCiAgKiBOb3RlOgogICogLSBUaGUgbW9kdWxlIHBhcmFtIGF2aWMgZW5hYmxlIGJvdGggeEFQSUMgYW5kIHgyQVBJQyBtb2RlLgpAQCAtMTMwNCwxMiAmIzQzOzEzOTksMTggQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZCkKICAqLwogYm9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKQogewomIzQzOwlpbnQgY3B1OwogCWF2aWMgPSBhdmljX3dhbnRfYXZpY19lbmFibGVkKCk7CiAJaWYgKCFhdmljKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlwcl9pbmZvKCYjMzQ7QVZJQyBlbmFibGVkXG4mIzM0Oyk7CiAKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSkpOwomIzQzOwkJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSkpOwomIzQzOwl9CiYjNDM7CiAJLyogQVZJQyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgeDJBVklDLiAqLwogCXgyYXZpY19lbmFibGVkID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1gyQVZJQyk7CiAJaWYgKHgyYXZpY19lbmFibGVkKSB7CkBAIC0xMzMzLDEyICYjNDM7MTQzNCwxNiBAQCBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpCiAJCWVuYWJsZV9pcGl2ID0gZmFsc2U7CiAKIAlhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKCZhbXA7YXZpY19nYV9sb2dfbm90aWZpZXIpOwomIzQzOwlrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKCZhbXA7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcik7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBhdmljX2hhcmR3YXJlX3Vuc2V0dXAodm9pZCkKIHsKLQlpZiAoYXZpYykKLQkJYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTsKJiM0MzsJaWYgKCFhdmljKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKE5VTEwpOwomIzQzOwlrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZTAyYTM4ZGE1Mjk2ZTMuLmI2ODcxMzNmODUyOGJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTEzNTYsNiAmIzQzOzEzNTYsOCBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCkpOwogCiYjNDM7CWF2aWNfZGVzdHJveV92Y3B1KHN2bSk7CiYjNDM7CiAJc3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTsKIAlzdm1fZnJlZV9uZXN0ZWQoc3ZtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKaW5kZXggNTEzNzQxNmJlNTkzZDcuLjQ3ZDViYjVkNzEwM2RhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKQEAgLTM2Miw2ICYjNDM7MzYyLDEwIEBAIHN0cnVjdCB2Y3B1X3N2bSB7CiAKIAkvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovCiAJYm9vbCBndWVzdF9naWY7CiYjNDM7CiYjNDM7CS8qIEdBUFBJIHJlbGF0ZWQgZmllbGRzICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgZ2FwcGlfdmNwdV93YWtldXBfbGlzdDsKJiM0MzsJaW50IGdhcHBpX2NwdTsKIH07CiAKIHN0cnVjdCBzdm1fY3B1X2RhdGEgewpAQCAtOTA5LDYgJiM0Mzs5MTMsNyBAQCB2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYik7CiBpbnQgYXZpY19pbmNvbXBsZXRlX2lwaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKJiM0Mzt2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaAppbmRleCA4MzRkOGZhYmZiYTM4Ny4uMDQ0MTc5Y2FiMTJlNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oCkBAIC00MSw2ICYjNDM7NDEsNyBAQCBpbnQgYW1kX2lvbW11X2VuYWJsZSh2b2lkKTsKIHZvaWQgYW1kX2lvbW11X2Rpc2FibGUodm9pZCk7CiBpbnQgYW1kX2lvbW11X3JlZW5hYmxlKGludCBtb2RlKTsKIGludCBhbWRfaW9tbXVfZW5hYmxlX2ZhdWx0aW5nKHVuc2lnbmVkIGludCBjcHUpOwomIzQzO2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTsKIGV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyOwogZXh0ZXJuIGVudW0gcHJvdGVjdGlvbl9kb21haW5fbW9kZSBhbWRfaW9tbXVfcGd0YWJsZTsKIGV4dGVybiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmgKaW5kZXggZjlmNzE4MDg3ODkzMDMuLmRlMGIyMzMwNjk0NGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaApAQCAtOTQsNiAmIzQzOzk0LDcgQEAKICNkZWZpbmUgRkVBVFVSRV9YMkFQSUMJCUJJVF9VTEwoMikKICNkZWZpbmUgRkVBVFVSRV9OWAkJQklUX1VMTCgzKQogI2RlZmluZSBGRUFUVVJFX0dUCQlCSVRfVUxMKDQpCiYjNDM7I2RlZmluZSBGRUFUVVJFX0dBUFBJCQlCSVRfVUxMKDUpCiAjZGVmaW5lIEZFQVRVUkVfSUEJCUJJVF9VTEwoNikKICNkZWZpbmUgRkVBVFVSRV9HQQkJQklUX1VMTCg3KQogI2RlZmluZSBGRUFUVVJFX0hFCQlCSVRfVUxMKDgpCkBAIC0xMTMsNiAmIzQzOzExNCw3IEBACiAvKiBFeHRlbmRlZCBGZWF0dXJlIDIgQml0cyAqLwogI2RlZmluZSBGRUFUVVJFX1NFVlNOUElPX1NVUAlCSVRfVUxMKDEpCiAjZGVmaW5lIEZFQVRVUkVfR0NSM1RSUE1PREUJQklUX1VMTCgzKQomIzQzOyNkZWZpbmUgRkVBVFVSRV9HQVBQSURJU1NVUAlCSVRfVUxMKDQpCiAjZGVmaW5lIEZFQVRVUkVfU05QQVZJQ1NVUAlHRU5NQVNLX1VMTCg3LCA1KQogI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBfR0FNKHgpIFwKIAkoRklFTERfR0VUKEZFQVRVUkVfU05QQVZJQ1NVUCwgeCkgPT0gMHgxKQpAQCAtMTkwLDYgJiM0MzsxOTIsNyBAQAogI2RlZmluZSBDT05UUk9MX0VQSF9FTgkJNDUKICNkZWZpbmUgQ09OVFJPTF9YVF9FTgkJNTAKICNkZWZpbmUgQ09OVFJPTF9JTlRDQVBYVF9FTgk1MQomIzQzOyNkZWZpbmUgQ09OVFJPTF9HQVBQSV9FTgk1NQogI2RlZmluZSBDT05UUk9MX0dDUjNUUlBNT0RFCTU4CiAjZGVmaW5lIENPTlRST0xfSVJUQ0FDSEVESVMJNTkKICNkZWZpbmUgQ09OVFJPTF9TTlBBVklDX0VOCTYxCkBAIC0xMDA0LDcgJiM0MzsxMDA3LDggQEAgdW5pb24gaXJ0ZV9nYV9sbyB7CiAJCSAgICBub19mYXVsdAk6IDEsCiAJCSAgICAvKiAtLS0tLS0gKi8KIAkJICAgIGdhX2xvZ19pbnRyCTogMSwKLQkJICAgIHJzdmQxCTogMywKJiM0MzsJCSAgICByc3ZkMQk6IDIsCiYjNDM7CQkgICAgZ2FwcGlfZGlzCTogMSwKIAkJICAgIGlzX3J1bgk6IDEsCiAJCSAgICAvKiAtLS0tLS0gKi8KIAkJICAgIGd1ZXN0X21vZGUJOiAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jCmluZGV4IDNiZGIzODBkMjNlOWE5Li4yN2ZmYjIxODRiZjI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuYwpAQCAtMTYwLDYgJiM0MzsxNjAsOSBAQCB1OCBhbWRfaW9tbXVfaHB0X2xldmVsOwogLyogR3Vlc3QgcGFnZSB0YWJsZSBsZXZlbCAqLwogaW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDsKIAomIzQzO2Jvb2wgYW1kX2lvbW11X2dhcHBpOwomIzQzO0VYUE9SVF9TWU1CT0woYW1kX2lvbW11X2dhcHBpKTsKJiM0MzsKIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXIgPSBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUM7CiBzdGF0aWMgaW50IGFtZF9pb21tdV94dF9tb2RlID0gSVJRX1JFTUFQX1hBUElDX01PREU7CiAKQEAgLTQ2Miw2ICYjNDM7NDY1LDkgQEAgc3RhdGljIHZvaWQgaW9tbXVfZGlzYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKIAlpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FMT0dfRU4pOwogCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUlOVF9FTik7CiAKJiM0MzsJLyogRGlzYWJsZSBJT01NVSBHQVBQSSAqLwomIzQzOwlpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pOwomIzQzOwogCS8qIERpc2FibGUgSU9NTVUgUFBSIGxvZ2dpbmcgKi8KIAlpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSTE9HX0VOKTsKIAlpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSSU5UX0VOKTsKQEAgLTI5OTYsNiAmIzQzOzMwMDIsMTIgQEAgc3RhdGljIHZvaWQgZW5hYmxlX2lvbW11c192YXBpYyh2b2lkKQogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwogCiAJZm9yX2VhY2hfaW9tbXUoaW9tbXUpIHsKJiM0MzsJCS8qIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlCiYjNDM7CQkgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXMKJiM0MzsJCSAqIGVuYWJsZWQgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CiAJCS8qCiAJCSAqIERpc2FibGUgR0FMb2cgaWYgYWxyZWFkeSBydW5uaW5nLiBJdCBjb3VsZCBoYXZlIGJlZW4gZW5hYmxlZAogCQkgKiBpbiB0aGUgcHJldmlvdXMgYm9vdCBiZWZvcmUga2R1bXAuCkBAIC0zMDM1LDEwICYjNDM7MzA0NywxOSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJaWYgKGFtZF9pb21tdV9nYXBwaSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGNoZWNrX2ZlYXR1cmUoRkVBVFVSRV9HQVBQSSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxuJiMzNDspOwomIzQzOwkJYW1kX2lvbW11X2dhcHBpID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAkvKiBFbmFibGluZyBHQU0gYW5kIFNOUEFWSUMgc3VwcG9ydCAqLwogCWZvcl9lYWNoX2lvbW11KGlvbW11KSB7Ci0JCWlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHwKLQkJICAgIGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKQomIzQzOwkJaWYgKGFtZF9pb21tdV9nYXBwaSkKJiM0MzsJCQlpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CQllbHNlIGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHwKJiM0MzsJCQkgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpCiAJCQlyZXR1cm47CiAKIAkJaW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FNX0VOKTsKQEAgLTMwNDcsNyAmIzQzOzMwNjgsOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJfQogCiAJYW1kX2lvbW11X2lycV9vcHMuY2FwYWJpbGl0eSB8PSAoMSAmbHQ7Jmx0OyBJUlFfUE9TVElOR19DQVApOwotCXByX2luZm8oJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7VmlydHVhbCBBUElDIGVuYWJsZWQgd2l0aCAlc1xuJiMzNDssCiYjNDM7CQlhbWRfaW9tbXVfZ2FwcGkgPyAmIzM0O0dBUFBJJiMzNDsgOiAmIzM0O0dBTE9HJiMzNDspOwogI2VuZGlmCiB9CiAKQEAgLTM3MzgsNiAmIzQzOzM3NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpCiAJCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICYjMzQ7djJfcGdzaXplc19vbmx5JiMzNDssIDE1KSA9PSAwKSB7CiAJCQlwcl9pbmZvKCYjMzQ7UmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCLzJNaUIvMUdpQiYjMzQ7KTsKIAkJCWFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7CiYjNDM7CQl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAmIzM0O2dhcHBpJiMzNDssIDUpID09IDApIHsKJiM0MzsJCQlhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlOwogCQl9IGVsc2UgewogCQkJcHJfbm90aWNlKCYjMzQ7VW5rbm93biBvcHRpb24gLSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBzdHIpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYwppbmRleCA1N2RjOGZhYmM3ZDliOS4uYjIyNmQzOTQxY2I5YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYwpAQCAtMzk1OSwxOSAmIzQzOzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHsKIAkuZGVhY3RpdmF0ZSA9IGlycV9yZW1hcHBpbmdfZGVhY3RpdmF0ZSwKIH07CiAKLXN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsCi0JCQkJICBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBhcGljaWQsIGludCBmbGFncykKIHsKLQlpZiAoY3B1ICZndDs9IDApIHsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklORykgewogCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID0KLQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhjcHUpOwomIzQzOwkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpOwogCQllbnRyeS0mZ3Q7aGkuZmllbGRzLmRlc3RpbmF0aW9uID0KLQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9ISShjcHUpOwomIzQzOwkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpOwogCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IHRydWU7CiAJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTsKIAl9IGVsc2UgewotCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlOwotCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZ2FfbG9nX2ludHI7CiYjNDM7CQlib29sIHBvc3RlZF9pbnRyID0gISEoZmxhZ3MgJmFtcDsgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFIpOwomIzQzOwomIzQzOwkJaWYgKGFtZF9pb21tdV9nYXBwaSkgewomIzQzOwkJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXBvc3RlZF9pbnRyICZhbXA7JmFtcDsKJiM0MzsJCQkJCQkJICAgY2hlY2tfZmVhdHVyZTIoRkVBVFVSRV9HQVBQSURJU1NVUCk7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTsKJiM0MzsJCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID0KJiM0MzsJCQkJCQlBUElDSURfVE9fSVJURV9ERVNUX0xPKGFwaWNpZCk7CiYjNDM7CQkJZW50cnktJmd0O2hpLmZpZWxkcy5kZXN0aW5hdGlvbiA9IEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTsKJiM0MzsJCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gcG9zdGVkX2ludHI7CiYjNDM7CQl9CiAJfQogfQogCkBAIC0zOTkyLDcgJiM0Mzs0MDAyLDcgQEAgc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSwKICAqIGFuZCB0aHVzIGRvbiYjMzk7dCByZXF1aXJlIGFuIGludmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIElPTU1VIGNvbnN1bWVzIGZyZXNoCiAgKiBpbmZvcm1hdGlvbi4KICAqLwotaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cikKJiM0MztpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7CiAJc3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtJmd0O2VudHJ5OwpAQCAtNDAwNiwxNCAmIzQzOzQwMTYsMTQgQEAgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cikKIAlpZiAoIWlyX2RhdGEtJmd0O2lvbW11KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7CiYjNDM7CV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCBmbGFncyk7CiAKIAlyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLSZndDtpb21tdSwgaXJfZGF0YS0mZ3Q7aXJxXzJfaXJ0ZS5kZXZpZCwKIAkJCQlpcl9kYXRhLSZndDtpcnFfMl9pcnRlLmluZGV4LCBlbnRyeSk7CiB9CiBFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV91cGRhdGVfZ2EpOwogCi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cikKJiM0MztpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhOwogCXN0cnVjdCBpcnRlX2dhICplbnRyeSA9IChzdHJ1Y3QgaXJ0ZV9nYSAqKSBpcl9kYXRhLSZndDtlbnRyeTsKQEAgLTQwMzQsOSAmIzQzOzQwNDQsMTMgQEAgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpCiAJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5ndWVzdF9tb2RlICA9IDE7CiAJZW50cnktJmd0O2hpLmZpZWxkcy5nYV9yb290X3B0ciAgICAgICA9IGlyX2RhdGEtJmd0O2dhX3Jvb3RfcHRyOwogCWVudHJ5LSZndDtoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLSZndDtnYV92ZWN0b3I7Ci0JZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtJmd0O2dhX3RhZzsKIAotCV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7CiYjNDM7CWlmIChhbWRfaW9tbXVfZ2FwcGkpCiYjNDM7CQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1I7CiYjNDM7CWVsc2UKJiM0MzsJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuZ2FfdGFnID0gaXJfZGF0YS0mZ3Q7Z2FfdGFnOwomIzQzOwomIzQzOwlfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpOwogCiAJcmV0dXJuIG1vZGlmeV9pcnRlX2dhKGlyX2RhdGEtJmd0O2lvbW11LCBpcl9kYXRhLSZndDtpcnFfMl9pcnRlLmRldmlkLAogCQkJICAgICAgaXJfZGF0YS0mZ3Q7aXJxXzJfaXJ0ZS5pbmRleCwgZW50cnkpOwpAQCAtNDEwNyw4ICYjNDM7NDEyMSw4IEBAIHN0YXRpYyBpbnQgYW1kX2lyX3NldF92Y3B1X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdm9pZCAqaW5mbykKIAkJaXJfZGF0YS0mZ3Q7Z2FfdmVjdG9yID0gcGlfZGF0YS0mZ3Q7dmVjdG9yOwogCQlpcl9kYXRhLSZndDtnYV90YWcgPSBwaV9kYXRhLSZndDtnYV90YWc7CiAJCWlmIChwaV9kYXRhLSZndDtpc19ndWVzdF9tb2RlKQotCQkJcmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS0mZ3Q7Y3B1LAotCQkJCQkJCSAgICBwaV9kYXRhLSZndDtnYV9sb2dfaW50cik7CiYjNDM7CQkJcmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS0mZ3Q7YXBpY2lkLAomIzQzOwkJCQkJCQkgICAgcGlfZGF0YS0mZ3Q7ZmxhZ3MpOwogCQllbHNlCiAJCQlyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaAppbmRleCBlZGNlZTlmNTMzNWE2Zi4uODdlNzZmNjE3ZWExODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaApAQCAtMzAsOCAmIzQzOzMwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9CiAvKiBJT01NVSBBVklDIEZ1bmN0aW9uICovCiBleHRlcm4gaW50IGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpOwogCi1leHRlcm4gaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cik7Ci1leHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpOwomIzQzO2V4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpOwomIzQzO2V4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTsKIAogI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfQU1EX0lPTU1VKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0lSUV9SRU1BUCkgKi8KQEAgLTQyLDEyICYjNDM7NDIsMTIgQEAgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTc2LDQgJiM0Mzs3NiwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfc25wX2Rpc2FibGUodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBib29sIGFtZF9pb21tdV9zZXZfdGlvX3N1cHBvcnRlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKJiM0MzsjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVCAwCiYjNDM7I2RlZmluZSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkcgIEJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQgMQomIzQzOyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFIgIEJJVCgxKQomIzQzOwomIzQzO2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTsKICNlbmRpZiAvKiBfQVNNX1g4Nl9BTURfSU9NTVVfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipHQVBQSSBTdXBwb3J0IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdHJ5aW5nIHRvIGJyaW5nIGluIEdBUFBJIHN1cHBvcnQg4oCTIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMg4oCTIGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhY3R1YWxseSBmdW5jdGlvbmFsLCBhbmQgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IGl0PyYjMzQ7IExvb2tpbmcgYXQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucyDigJMgYGF2aWMuY2AsIGBzdm0uY2AsIGBpbml0LmNgLCBgaW9tbXUuY2Ag4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMuIEl0IHNlZW1zIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYGFtZF9pb21tdT1nYXBwaWAgYm9vdCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgY29kZSBtb2RpZmllcyBzb21lIGtleSBmdW5jdGlvbnMgbGlrZSBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGFuZCBhZGRzIHNvbWUgbmV3IG9uZXMgdG9vLgoKVGhlIG5leHQgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgJiMzNDtDYW4gd2UgZXZlbiAqcmVhY2gqIHRoaXMgZmVhdHVyZSBpbiBvdXIgdGVzdCBlbnZpcm9ubWVudHM/IENhbiB3ZSByZXByb2R1Y2UgdGhpcyBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcgbGlrZSBHQ0Ugb3IgUUVNVT8mIzM0OyBBaCwgcmlnaHQsIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aXRoIEtWTSBTVk0gc2hvdWxkIHdvcmsuIFRoYXQmIzM5O3MgZ29vZC4gSG93ZXZlciwgd2hhdCBhYm91dCBzeXprYWxsZXI/IERvZXMgaXQgdGFyZ2V0IEFNRCBJT01NVSBvciBTVk0/IEZvcnR1bmF0ZWx5LCBzeXprYWxsZXIgZG9lcyBmdXp6IEtWTSwgaW5jbHVkaW5nIFNWTSwgc28gdGhlIHBvdGVudGlhbCBpcyB0aGVyZS4KCkdpdmVuIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gS1ZNIFNWTSBBVklDIGFuZCBBTUQgSU9NTVUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZC4gTG9va3MgbGlrZSBgQ09ORklHX0tWTWAsIGBDT05GSUdfS1ZNX0FNRGAsIGFuZCBgQ09ORklHX0FNRF9JT01NVWAgYXJlIHRoZSBrZXkgb25lcyB0byBpbnZlc3RpZ2F0ZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBpbiBgZHJpdmVycy9pb21tdS9hbWQvYCBhbmQgYGFyY2gveDg2L2t2bS9gIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFNRF9JT01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMi0jIEFNRCBJT01NVSBzdXBwb3J0XG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjM6Y29uZmlnIEFNRF9JT01NVVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVx0Ym9vbCBcJiMzNDtBTUQgSU9NTVUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzItXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zNC1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjQzOmNvbmZpZyBBTURfSU9NTVVfREVCVUdGU1xuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFNRCBJT01NVSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBmb3IgQU1EIEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQU1EIHByb2Nlc3NvcnMgYXJlIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgdGhlIHN0YW5kYXJkIHByYWN0aWNlIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbiwgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB4ODYsIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGlzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gZmVhdHVyZXMgc3BlY2lmaWMgdG8gQU1EIHByb2Nlc3NvcnMgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gbG9jYXRlIHRoZSBgS1ZNX0FNRGAgc3ltYm9sLCB3aGljaCBsaWtlbHkgY29udHJvbHMgdmFyaW91cyBBTUQtc3BlY2lmaWMgS1ZNIGZ1bmN0aW9uYWxpdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBLVk0gYW5kIElPTU1VIGNvbmZpZ3VyYXRpb25zIOKAkyBgS1ZNX0FNRGAgYW5kIGBBTURfSU9NTVVgIGluIHBhcnRpY3VsYXIuIEJ1dCwgd2FpdC4uLiB3aGF0IGFib3V0IGBJUlFfUkVNQVBgPyBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBBTURfSU9NTVVgIGFuZCBgSVJRX1JFTUFQYC4gRG9lcyBgQU1EX0lPTU1VYCAqZGVwZW5kKiBvbiBgSVJRX1JFTUFQYCwgbWVhbmluZyB0aGF0IGl0IHJlcXVpcmVzIGl0IHRvIGZ1bmN0aW9uPyBPciBkb2VzIGBBTURfSU9NTVVgICpzZWxlY3QqIGl0LCBtYWtpbmcgYElSUV9SRU1BUGAgYSBzb3J0IG9mIGltcGxpY2l0IHJlcXVpcmVtZW50IHRoYXQgaXMgdGFrZW4gY2FyZSBvZiBhdXRvbWF0aWNhbGx5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBJUlFfUkVNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDQzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQ2hlY2tpbmcgYEFNRF9JT01NVWAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGEgbWV0aG9kaWNhbCBjaGVjayBvZiB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYEFNRF9JT01NVWAuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O3doYXQgZXh0ZXJuYWwgZWxlbWVudHMgaW50ZXJhY3Qgd2l0aCB0aGlzIGZlYXR1cmU/IFdoYXQgY29tcG9uZW50cyBhcmUgcmVseWluZyBvbiBpdCwgYW5kIHdoYXQsIGluIHR1cm4sIGRvZXMgaXQgZGVwZW5kIG9uPyYjMzQ7IEkgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSB0aGUga2VybmVsIG1vZHVsZXMgaW52b2x2ZWQsIHRoZWlyIHZlcnNpb24gY29tcGF0aWJpbGl0eSwgYW55IG5lY2Vzc2FyeSBmaXJtd2FyZSB1cGRhdGVzLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBoYXJkd2FyZSBvciBzb2Z0d2FyZSBjb25maWd1cmF0aW9ucyBvbiB0aGlzIHN5c3RlbS4gTXkgcHJpb3JpdHkgaXMgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBzdGlja2luZyBwb2ludHMgKmJlZm9yZSogSSBldmVuIGJlZ2luIHRvIGltcGxlbWVudCBvciB0cm91Ymxlc2hvb3QgYW55dGhpbmcgZnVydGhlci4gVGhpcyBpbnZvbHZlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBrbm93biBjb21wYXRpYmlsaXR5IG1hdHJpY2VzLiBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIGEgc3RhYmxlIGFuZCBwcm9wZXJseSBmdW5jdGlvbmluZyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgdGhlIEFNRCBJT01NVSBEcml2ZXIqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgYGRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBBTUQgSU9NTVUgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIHNldHRpbmdzIOKAkyB0aGUgb25lcyB0aGF0IGRlZmluZSB0aGUgdmVyeSBmb3VuZGF0aW9uIG9mIGhvdyB0aGlzIGRyaXZlciBpcyBidWlsdCBhbmQgZW5hYmxlZC4gSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHN0YXRlcywgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0JiMzOTtzIGluIHBsYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzZXR0aW5ncyBwbGF5IHdpdGggdGhlIGJyb2FkZXIgSU9NTVUgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsIGFuZCBob3cgdGhleSBpbXBhY3QgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBhbnkgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpbGwgcGxheSB3aXRoIGFueSBvdGhlciByZWxhdGVkIGhhcmR3YXJlLiBUaGlzIGZpbGUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGNvbnRyb2wgYW5kIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGlzIGNyaXRpY2FsIGNvbXBvbmVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBBTUQgSU9NTVUgc3VwcG9ydFxuICAgMzpcdGNvbmZpZyBBTURfSU9NTVVcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdHNlbGVjdCBTV0lPVExCXG4gICA2Olx0XHRzZWxlY3QgUENJX01TSVxuICAgNzpcdFx0c2VsZWN0IFBDSV9BVFNcbiAgIDg6XHRcdHNlbGVjdCBQQ0lfUFJJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BBU0lEXG4gIDEwOlx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiAgMTE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbiAgMTI6XHRcdHNlbGVjdCBJT01NVV9BUElcbiAgMTM6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE0Olx0XHRzZWxlY3QgSU9NTVVfU1ZBXG4gIDE1Olx0XHRzZWxlY3QgSU9NTVVfSU9QRlxuICAxNjpcdFx0c2VsZWN0IElPTU1VRkRfRFJJVkVSIGlmIElPTU1VRkRcbiAgMTc6XHRcdHNlbGVjdCBHRU5FUklDX1BUXG4gIDE4Olx0XHRzZWxlY3QgSU9NTVVfUFRcbiAgMTk6XHRcdHNlbGVjdCBJT01NVV9QVF9BTURWMVxuICAyMDpcdFx0c2VsZWN0IElPTU1VX1BUX1g4Nl82NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnM6CgoqKlRoaW5raW5nIFRocm91Z2ggSU9NTVUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCBgQU1EX0lPTU1VYCBpcyB0aGUgY29ycmVjdCBzZXR0aW5nLiBJdCYjMzk7cyB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5IEkgbmVlZC4gQnV0LCBJJiMzOTttIG5vdCBzdG9wcGluZyB0aGVyZTsgbGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgZnVydGhlci4gTm93LCB3aGF0IGFib3V0IGBJUlFfUkVNQVBgPyBUaGF0JiMzOTtzIHRoZSBuZXh0IGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoYXQgb3B0aW9uIGRlZmluZWQ/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiB0aGUga2VybmVsIGNvbmZpZyBmaWxlcy4gRWl0aGVyIGBhcmNoL3g4Ni9LY29uZmlnYCBvciBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBzaG91bGQgaGF2ZSB0aGUgZGV0YWlscyBJJiMzOTttIGFmdGVyLCBhbmQgdGhhdCBzaG91bGQgY2xhcmlmeSBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVJRX1JFTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZz0xOTk9c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvcmlzY3YvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMC1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoyMDE6Y29uZmlnIElSUV9SRU1BUFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSVJRX1JFTUFQIENvbmZpZ3VyYXRpb24gaW4gdGhlIElPTU1VIERyaXZlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgSVJRX1JFTUFQYC4gSSBzdXNwZWN0IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvdGVudGlhbCBidWlsZC10aW1lIGNvbnN0cmFpbnRzIG9yIGNvbmZsaWN0cy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIGFzIGluY29ycmVjdCBzZXR0aW5ncyBoZXJlIGNhbiBsZWFkIHRvIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIG9yIGV2ZW4gc3lzdGVtIGluc3RhYmlsaXR5IHdoZW4gaGFuZGxpbmcgaW50ZXJydXB0IHJlbWFwcGluZy4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgdGhpcyBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBJT01NVSBpbXBsZW1lbnRhdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGF0IHBsYXkuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIG5vdGUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbmRpdGlvbmFscyBvciBsaW1pdGF0aW9ucy4gVGhlIGdvYWwgaXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJhbWlmaWNhdGlvbnMgb2YgYW55IGNoYW5nZXMgSSYjMzk7bSBjb25zaWRlcmluZyB3aXRoaW4gdGhpcyBzZWN0aW9uLCBzbyBJJiMzOTttIHNjYW5uaW5nIGZvciBhbnkgc3VidGxlIGRldGFpbHMgdGhhdCBtaWdodCBiZSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMTpcdGNvbmZpZyBJUlFfUkVNQVBcbiAyMDI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1wmIzM0O1xuIDIwMzpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgXHUwMDI2XHUwMDI2IFg4Nl9JT19BUElDIFx1MDAyNlx1MDAyNiBQQ0lfTVNJIFx1MDAyNlx1MDAyNiBBQ1BJXG4gMjA0Olx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiAyMDU6XHRcdGhlbHBcbiAyMDY6XHRcdCAgU3VwcG9ydHMgSW50ZXJydXB0IHJlbWFwcGluZyBmb3IgSU8tQVBJQyBhbmQgTVNJIGRldmljZXMuXG4gMjA3Olx0XHQgIFRvIHVzZSB4MmFwaWMgbW9kZSBpbiB0aGUgQ1BVJiMzOTtzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvclxuIDIwODpcdFx0ICB0byBzdXBwb3J0IHBsYXRmb3JtcyB3aXRoIENQVSYjMzk7cyBoYXZpbmcgXHUwMDNlIDggYml0IEFQSUMgSUQsIHNheSBZLlxuIDIwOTpcdFxuIDIxMDpcdCMgT01BUCBJT01NVSBzdXBwb3J0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjEyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBJUlFfUkVNQVAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBgSVJRX1JFTUFQYCBjb25maWd1cmF0aW9uIGxvb2tzIHByb21pc2luZy4gVGhlIHBhdGNoIHRhcmdldHMgYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCBhbmQgYGRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNgLCB3aGljaCBtYWtlcyBpdCBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZDogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuCgpMZXQgbWUgcXVpY2tseSBjaGVjayB3aGljaCBvZiB0aGVzZSBhcmUgc3RhdGljLiBHb29kLCBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYW5kIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCBhcmUgYWxsIHN0YXRpYy4gYGFtZF9pb21tdV91cGRhdGVfZ2FgIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgIGFyZSBleHBvcnRlZCwgc28gdGhhdCYjMzk7cyBoZWxwZnVsLiBgYXZpY19waV91cGRhdGVfaXJ0ZWAgaXMgcHJlc2VudCBidXQgbm90IHN0YXRpYywgc28gSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhhdCBhcyB3ZWxsLCB0aG91Z2ggaXQgYXBwZWFycyB0byBiZSBhbiBleGlzdGluZyBmdW5jdGlvbi4KCk9rYXksIGxldCYjMzk7cyBtYWtlIGEgY2xlYXIgbGlzdCBvZiB0aGUgcmVsZXZhbnQgc3ltYm9scyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaW4gbW9yZSBkZXRhaWw6IGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLgoKTm93LCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGxpc3RlZCBhcyBgS1ZNX0FNRGAsIGBBTURfSU9NTVVgLCBhbmQgb2YgY291cnNlLCBgSVJRX1JFTUFQYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQuCgpIb2xkIG9uLCBJIHNlZSBhIHBvdGVudGlhbCBnb3RjaGEuLi4gYGFtZF9pb21tdV9nYXBwaWAgaXMgYSAqYm9vdCBwYXJhbWV0ZXIqLiBTeXprYWxsZXIgbWlnaHQgbm90IHBhc3MgdGhhdCBieSBkZWZhdWx0ISBUaGUgcHJvYmxlbSBpcyB0aGF0IEkgY2FuJiMzOTt0IGRpcmVjdGx5IGNvbnRyb2wgYm9vdCBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBzZXQtcmVzdWx0cyBtZWNoYW5pc20uIEkgY2FuIG9ubHkgY29udHJvbCBjb25maWdzIGFuZCBmb2N1cyBzeW1ib2xzLiBUaGUgcHJvbXB0IHN0YXRlcyB0aGF0IEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFNvLCBpcyBHQVBQSSByZWFjaGFibGUgKndpdGhvdXQqIHRoYXQgYm9vdCBwYXJhbWV0ZXI/IEkgbmVlZCB0byBjaGVjayBob3cgR0FQUEkgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgcmVhY2hhYmxlLiBJJiMzOTtsbCBjaGVjayBgcGFyc2VfYW1kX2lvbW11X29wdGlvbnNgIHRvIGRldGVybWluZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc1NTpcdFx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtpcnRjYWNoZWRpc1wmIzM0OywgMTEpID09IDApIHtcbjM3NTY6XHRcdFx0XHRhbWRfaW9tbXVfaXJ0Y2FjaGVkaXMgPSB0cnVlO1xuMzc1NzpcdFx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtub2h1Z2VwYWdlc1wmIzM0OywgMTEpID09IDApIHtcbjM3NTg6XHRcdFx0XHRwcl9pbmZvKFwmIzM0O1Jlc3RyaWN0aW5nIFYxIHBhZ2Utc2l6ZXMgdG8gNEtpQlwmIzM0Oyk7XG4zNzU5Olx0XHRcdFx0YW1kX2lvbW11X3Bnc2l6ZV9iaXRtYXAgPSBBTURfSU9NTVVfUEdTSVpFU180SztcbjM3NjA6XHRcdFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXCYjMzQ7djJfcGdzaXplc19vbmx5XCYjMzQ7LCAxNSkgPT0gMCkge1xuMzc2MTpcdFx0XHRcdHByX2luZm8oXCYjMzQ7UmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCLzJNaUIvMUdpQlwmIzM0Oyk7XG4zNzYyOlx0XHRcdFx0YW1kX2lvbW11X3Bnc2l6ZV9iaXRtYXAgPSBBTURfSU9NTVVfUEdTSVpFU19WMjtcbjM3NjM6XHRcdFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXCYjMzQ7Z2FwcGlcJiMzNDssIDUpID09IDApIHtcbjM3NjQ6XHRcdFx0XHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xuMzc2NTpcdFx0XHR9IGVsc2Uge1xuMzc2NjpcdFx0XHRcdHByX25vdGljZShcJiMzNDtVbmtub3duIG9wdGlvbiAtICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3RyKTtcbjM3Njc6XHRcdFx0fVxuMzc2ODpcdFxuMzc2OTpcdFx0XHRzdHIgJiM0Mzs9IHN0cmNzcG4oc3RyLCBcJiMzNDssXCYjMzQ7KTtcbjM3NzA6XHRcdFx0d2hpbGUgKCpzdHIgPT0gJiMzOTssJiMzOTspXG4zNzcxOlx0XHRcdFx0c3RyJiM0MzsmIzQzOztcbjM3NzI6XHRcdH1cbjM3NzM6XHRcbjM3NzQ6XHRcdHJldHVybiAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhbWRfaW9tbXVfZ2FwcGlgIFNldHRpbmcqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgYW1kX2lvbW11X2dhcHBpYCBkZWZhdWx0cyB0byBiZWluZyBkaXNhYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IGl0IGFsc28gcHJlc2VudHMgYSBwb3RlbnRpYWwgaXNzdWUuIElmIHRoZSBkZWZhdWx0IGlzIGZhbHNlLCBhbmQgc3l6a2FsbGVyLCB3aGljaCBpcyB0aGUgZnV6emVyIHdlJiMzOTtyZSB1c2luZywgZG9lc24mIzM5O3QgZXhwbGljaXRseSBwYXNzIGBhbWRfaW9tbXU9Z2FwcGlgIGFzIGEgYm9vdCBwYXJhbWV0ZXIsIHRoZW4gYGFtZF9pb21tdV9nYXBwaWAgd2lsbCBzdGF5IGRpc2FibGVkLiBIbW0sIHdhaXQgYSBzZWNvbmQsIEkgcmVtZW1iZXIgc3l6a2FsbGVyICpjYW4qIGluamVjdCBib290IHBhcmFtZXRlcnMsIGlmIHdlIGNvbmZpZ3VyZSBpdCBjb3JyZWN0bHkuIEhvd2V2ZXIsIGFzIGEgcmV2aWV3ZXIgaW4gdGhpcyBzaXR1YXRpb24sIEkgY2FuJiMzOTt0IGRpcmVjdGx5IHNwZWNpZnkgdGhvc2UgYm9vdCBwYXJhbWV0ZXJzIGZvciB0aGUgZnV6emVyLiBUaGlzIGxpbWl0cyBteSBhYmlsaXR5IHRvIHRlc3QgdGhpcyBjb25maWd1cmF0aW9uLgoKVGhpcyBicmluZ3MgdXAgYW5vdGhlciBxdWVzdGlvbjogaXMgYGFtZF9pb21tdV9nYXBwaWAgKm9ubHkqIGNvbnRyb2xsYWJsZSB2aWEgdGhlIGJvb3QgcGFyYW1ldGVyPyBJZiB0aGVyZSYjMzk7cyBhbm90aGVyIG1lY2hhbmlzbSwgYSBtb2R1bGUgcGFyYW1ldGVyIG9yIHNvbWV0aGluZywgdGhhdCB3b3VsZCBjaGFuZ2UgdGhpbmdzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGNvbnRyb2xsZWQgYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGtlcm5lbCBib290IHBhcmFtZXRlci4gTGV0IG1lIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3IgYW55IGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYGFtZF9pb21tdV9nYXBwaWAgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3QgYmVpbmcgc2V0IGFueXdoZXJlIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FtZF9pb21tdV9nYXBwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaD00Mz1pbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oOjQ0OmV4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oLTQ1LWV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0xNjE9aW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0xNjItXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MTYzOmJvb2wgYW1kX2lvbW11X2dhcHBpO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjE2NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9nYXBwaSk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMTY1LVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0yOTk4PXN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzAwNC1cdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzAwNTpcdFx0LyogRGlzYWJsZSBHQVBQSSwgZG8gbm90IGNoZWNrIGFtZF9pb21tdV9nYXBwaSBhcyBpdCBtYXkgYmVcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDA2LVx0XHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA0OS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDUwOlx0aWYgKGFtZF9pb21tdV9nYXBwaSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDUxLVx0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcdTAwMjZcdTAwMjZcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1My1cdFx0cHJfd2FybihcJiMzNDtHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxcblwmIzM0Oyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzA1NDpcdFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1NS1cdH1cbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1OC1cdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzA1OTpcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDYwLVx0XHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA3MS1cdHByX2luZm8oXCYjMzQ7VmlydHVhbCBBUElDIGVuYWJsZWQgd2l0aCAlc1xcblwmIzM0OyxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDcyOlx0XHRhbWRfaW9tbXVfZ2FwcGkgPyBcJiMzNDtHQVBQSVwmIzM0OyA6IFwmIzM0O0dBTE9HXCYjMzQ7KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDczLSNlbmRpZlxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zNzM2PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FtZF9pb21tdV9vcHRpb25zKGNoYXIgKnN0cilcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzc2My1cdFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXCYjMzQ7Z2FwcGlcJiMzNDssIDUpID09IDApIHtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNzY0Olx0XHRcdGFtZF9pb21tdV9nYXBwaSA9IHRydWU7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzc2NS1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NjI9c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk3My1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6Mzk3NDpcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSkge1xuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTc1LVx0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYXBwaV9kaXMgPSAhcG9zdGVkX2ludHIgXHUwMDI2XHUwMDI2XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYz00MDI2PWludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDQ3LVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDQ4Olx0aWYgKGFtZF9pb21tdV9nYXBwaSlcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA0OS1cdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQ4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoaXMgZmVhdHVyZSwgd2hhdGV2ZXIgaXQgaXMsIGlzICpvbmx5KiBlbmFibGVkIHRocm91Z2ggYSBib290IHBhcmFtZXRlci4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIG9uIHRoZSBzdXJmYWNlLiBIb3dldmVyLCB0aGUgbW9yZSBJIGRpZyBpbnRvIHRoaXMgcGF0Y2gsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIGJyb2FkZXIgdGhhbiB0aGF0IGluaXRpYWwgbGltaXRhdGlvbiBzdWdnZXN0cy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpY2F0aW9ucyB0byBgYW1kX2lvbW11X3VwZGF0ZV9nYWAgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAg4oCTIHRoZXNlIGZ1bmN0aW9ucyYjMzk7IHNpZ25hdHVyZXMgYW5kIGNvcmUgbG9naWMgaGF2ZSBiZWVuIGFsdGVyZWQuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhleSYjMzk7cmUgY2FsbGVkIGV2ZW4gd2hlbiB0aGlzIGJvb3QgcGFyYW1ldGVyIGlzbiYjMzk7dCBleHBsaWNpdGx5IHNldC4KCkZvciBleGFtcGxlLCBJJiMzOTttIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCByaWdodCBub3cuIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCBjYWxscyBib3RoIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYC4gQW5kIGd1ZXNzIHdoYXQ/IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCAqZG9lc24mIzM5O3QqIGNoZWNrIGBhbWRfaW9tbXVfZ2FwcGlgLiBJdCBjYWxscyB0aGVzZSBmdW5jdGlvbnMgcmVnYXJkbGVzcyBvZiB0aGUgYm9vdCBwYXJhbWV0ZXImIzM5O3Mgc2V0dGluZy4KClRoZSBsb2dpYyB3aXRoaW4gYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgIHNlZW1zIHRvIGhhbmRsZSBib3RoIHNjZW5hcmlvcywgd2hldGhlciBgYW1kX2lvbW11X2dhcHBpYCBpcyB0cnVlIG9yIGZhbHNlLiBUaGVyZWZvcmUsIHRob3NlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYWJzb2x1dGVseSByZWFjaGFibGUsIGV2ZW4gd2l0aG91dCB0aGF0IHNwZWNpZmljIGJvb3QgcGFyYW1ldGVyIGJlaW5nIHNldCEgVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAgaGFuZGxlcyB0aGlzIGR1YWxpdHkuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiBgYXJjaC94ODYva3ZtL3N2bS9hdmljLmNgIGFuZCBkaWcgaW50byBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0LCBldmVuIHdoZW4gdGhlIGludGVuZGVkIGZlYXR1cmUgaXMgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjk6XHRzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCxcbjEwNzA6XHRcdFx0XHRcdFx0ICAgIGludCBjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4xMDcxOlx0e1xuMTA3MjpcdFx0aW50IHBvc3RlZF9pbnRyID0gISEoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKSBcdTAwM2NcdTAwM2NcbjEwNzM6XHRcdFx0XHQgIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUO1xuMTA3NDpcdFx0aW50IGlzX3ZjcHVfcnVubmluZyA9IChhcGljaWQgXHUwMDNlPSAwKSBcdTAwM2NcdTAwM2NcbjEwNzU6XHRcdFx0XHQgICAgICBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQ7XG4xMDc2Olx0XHRpbnQgZmxhZ3MgPSBwb3N0ZWRfaW50ciB8IGlzX3ZjcHVfcnVubmluZztcbjEwNzc6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuMTA3ODpcdFx0c3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkO1xuMTA3OTpcdFxuMTA4MDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrKTtcbjEwODE6XHRcbjEwODI6XHRcdC8qXG4xMDgzOlx0XHQgKiBIZXJlLCB3ZSBnbyB0aHJvdWdoIHRoZSBwZXItdmNwdSBpcl9saXN0IHRvIHVwZGF0ZSBhbGwgZXhpc3RpbmdcbjEwODQ6XHRcdCAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS5cbjEwODU6XHRcdCAqL1xuMTA4NjpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4xMDg3Olx0XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXHUwMDI2XHUwMDI2IGNwdSBcdTAwM2U9IDApXG4xMDg4Olx0XHRcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IGNwdTtcbjEwODk6XHRcdFx0cmV0dXJuO1xuMTA5MDpcdFx0fVxuMTA5MTpcdFxuMTA5MjpcdFx0aWYgKGlzX3ZjcHVfcnVubmluZyBcdTAwMjZcdTAwMjYgYW1kX2lvbW11X2dhcHBpKSB7XG4xMDkzOlx0XHRcdC8qIElGIGNvbmRpdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlICovXG4xMDk0Olx0XHRcdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xKVxuMTA5NTpcdFx0XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuMTA5NjpcdFxuMTA5NzpcdFx0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gY3B1OyAvKiBTdG9yZSBjcHUgbm8gYXMgdGFyZ2V0IGZvciBHQVBQSSAqL1xuMTA5ODpcdFx0fSBlbHNlIGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbjEwOTk6XHRcdFx0YXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuMTEwMDpcdFx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4xMTAxOlx0XHR9XG4xMTAyOlx0XG4xMTAzOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlycWZkLCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCwgdmNwdV9saXN0KSB7XG4xMTA0Olx0XHRcdHZvaWQgKmRhdGEgPSBpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX2RhdGE7XG4xMTA1Olx0XG4xMTA2Olx0XHRcdGlmICghKGFjdGlvbiBcdTAwMjYgQVZJQ19UT0dHTEVfT05fT0ZGKSlcbjExMDc6XHRcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XG4xMTA4Olx0XHRcdGVsc2UgaWYgKGlzX3ZjcHVfcnVubmluZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBTUQgSU9NTVUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgYGFtZF9pb21tdV91cGRhdGVfZ2FgIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgIGFyZSBub3cgZ2V0dGluZyBjYWxsZWQgd2l0aCBgYXBpY2lkYCBhbmQgYGZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGNwdWAgYW5kIGBnYV9sb2dfaW50cmAgcGFyYW1ldGVycy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEFWSUMgY29kZSwgZXZlbiBpZiBHQVBQSSBpc24mIzM5O3QgYmVpbmcgdXNlZC4gVGhlIGNydWNpYWwgdGhpbmcgaXMgdGhhdCBgZmxhZ3NgIGlzIGJlaW5nIGNvbnN0cnVjdGVkIGFuZCBwYXNzZWQgdG8gYGFtZF9pb21tdV91cGRhdGVfZ2FgLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYEtWTV9BTURgLCBgQU1EX0lPTU1VYCwgYW5kIGBJUlFfUkVNQVBgLiBPa2F5LCBgS1ZNX0FNRGAgaXMgdHJpc3RhdGUsIGBBTURfSU9NTVVgIGFuZCBgSVJRX1JFTUFQYCBhcmUgYm9vbGVhbnMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19LVk1gIGlzIGltcGxpZWQgYnkgYENPTkZJR19LVk1fQU1EYCBhbmQgYENPTkZJR19JT01NVV9BUElgIGlzIHNlbGVjdGVkIGJ5IGBBTURfSU9NTVVgLgoKTm93LCBJIG5lZWQgdG8gbGlzdCB0aGUga2V5IHN5bWJvbHMgYW5kIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBrZWVwaW5nIGFuIGV5ZSBvbi4gUmlnaHQsIGxldCYjMzk7cyBzZWU6IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGFuZCBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYC4KCldhaXQgYSBtaW51dGUsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGlzIHN0YXRpYyB3aXRoaW4gYGRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNgLiBSaWdodCwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY2AgZm9yIHRoaXMgZnVuY3Rpb24uIEdvb2QgdG8ga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTM5NjEtXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjM5NjI6c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTYzLXtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwMDU9aW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAxOC1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAxOTpcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCBmbGFncyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMjAtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYz00MDI2PWludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDUyLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDUzOlx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBhcGljaWQsIGZsYWdzKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5OTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElPTU1VIGFuZCBBVklDIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXM6IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGFuZCwgb2YgY291cnNlLCBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCBpdHNlbGYuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIEFWSUMtc3BlY2lmaWMgZ3JvdXA6IGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGFuZCBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmAuCgpOb3csIEkmIzM5O20ganVzdCBjdXJpb3VzIGlmIEkmIzM5O3ZlIG1pc3NlZCBhbnl0aGluZywgc28gSSYjMzk7bGwgcXVpY2tseSBjb25zaWRlciBgYXZpY19kZXN0cm95X3ZjcHVgLCBgYXZpY19pbml0X3ZjcHVgLCBhbmQgYHN2bV9pcl9saXN0X2RlbGAuIE15IGludHVpdGlvbiBzYXlzIHRoZXNlIG1pZ2h0IGJlIHJlbGV2YW50LCBzbyBJJiMzOTtsbCBhZGQgdGhlbSB0byB0aGUgbGlzdCB0byBjaGVjayBsYXRlci4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBhdmljX2Rlc3Ryb3lfdmNwdWAgYW5kIGBhdmljX2luaXRfdmNwdWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F2aWNfZGVzdHJveV92Y3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTEwPXN0YXRpYyB2b2lkIGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjItXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MjM6dm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkyNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjI2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgZm9jdXNlZCBzZXQgb2YgY2hhbmdlcyBoZXJlLCBtb3N0bHkgY2VudGVyZWQgYXJvdW5kIHRoZSBBZHZhbmNlZCBWaXJ0dWFsIEludGVycnVwdCBDb250cm9sbGVyIChBVklDKSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIEFNRCBJT01NVS4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgYWRkaXRpb24gb2YgYGF2aWNfZGVzdHJveV92Y3B1YCBpcyBhIGtleSBhZGRpdGlvbiwgbGlrZWx5IGEgbmVjZXNzYXJ5IGNsZWFudXAgZnVuY3Rpb24gdG8gY29tcGxlbWVudCBleGlzdGluZyBWQ1BVIGluaXRpYWxpemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYGF2aWNfaW5pdF92Y3B1YCwgYHN2bV9pcl9saXN0X2RlbGAsIGBhdmljX2hhcmR3YXJlX3NldHVwYCwgYGF2aWNfaGFyZHdhcmVfdW5zZXR1cGAsIGBlbmFibGVfaW9tbXVzX3ZhcGljYCwgYW5kIGBpb21tdV9kaXNhYmxlYCBhbGwgc3VnZ2VzdCBkZWVwZXIgaW50ZWdyYXRpb24gYW5kIHJlZmluZWQgY29udHJvbC4KCkZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucywgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXMgSSYjMzk7bSBzZWVpbmc6IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgLCBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmAsIGBhdmljX2Rlc3Ryb3lfdmNwdWAgYW5kIGBzdm1faXJfbGlzdF9kZWxgLiBUaGUgcHJlc2VuY2Ugb2Ygc28gbWFueSBJT01NVSBhbmQgR0EtcmVsYXRlZCBmdW5jdGlvbiBpbmRpY2F0ZXMgYSBjYXJlZnVsIGNvbnNpZGVyYXRpb24gb2YgZ3Vlc3QgYWRkcmVzc2luZyBhbmQgaW50ZXJydXB0IHJvdXRpbmcuIFRoZSBHQXBwSSB3YWtldXAgbGlzdCBmdW5jdGlvbnMsIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGhhbmRsZXIsIGxvb2sgbGlrZSB0aGV5IGFyZSBjZW50cmFsIHRvIHRoZSBBVklDIGludGVycnVwdCBpbmplY3Rpb24gcHJvY2Vzcy4KCkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHN2bV9pcl9saXN0X2RlbGAgaXMgc3RhdGljLiBUaGF0IHdvdWxkIGltcGFjdCBpdHMgdmlzaWJpbGl0eSBhbmQgc2NvcGUuIFRoYXQgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBvbiB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgY29uc2lzdGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bV9pcl9saXN0X2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTkzMT12b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzYtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5Mzc6c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkzOC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTU1PWludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk2Mi1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTYzOlx0c3ZtX2lyX2xpc3RfZGVsKGlycWZkKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NTQKCQkJCQkJCW91dHB1dDogMjczCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gYW5kIEl0cyBJbXBsaWNhdGlvbnMqKgoKT2theSwgaXQmIzM5O3MgY2xlYXI6IHRoaXMgaXMgYSBzdGF0aWMgY29uZmlndXJhdGlvbi4gTm8gZHluYW1pYyBlbGVtZW50cyB0byBjb25zaWRlciBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBLVk1fQU1EYCwgYEFNRF9JT01NVWAsIGFuZCBgSVJRX1JFTUFQYC4gVGhlc2UgdGhyZWUgYXJlIHRoZSBrZXkgY29tcG9uZW50cy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cm9kdWNpbmcgR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cywgb3IgR0FQUEksIHNwZWNpZmljYWxseSBmb3IgQU1EJiMzOTtzIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIE5vdywgdGhlIG1lYXQgb2YgdGhpcyBpcyB0aGF0IGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgdXBkYXRlIHByb2Nlc3MgZm9yIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cmllcyBhbmQgdGhlIHZDUFUgYWZmaW5pdHkgbG9naWMuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBhYnNvbHV0ZWx5IHJlbGV2YW50IHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2Ugd2hlbiB1c2luZyBRRU1VIHdpdGggS1ZNIFNWTS4KCldoYXQmIzM5O3MgcmVhbGx5IGludGVyZXN0aW5nIGlzIHRoYXQgdGhlc2UgdXBkYXRlcyBhcmUgaW1wYWN0aW5nIGNvcmUgQVZJQyBhbmQgSU9NTVUgbG9naWMsIGV2ZW4gaWYgR0FQUEkgaXNuJiMzOTt0IGRpcmVjdGx5IGFjdGl2YXRlZCB0aHJvdWdoIGEgYm9vdCBwYXJhbWV0ZXIuIFRoaXMgbWVhbnMgdGhhdCBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQsIGV2ZW4gaWYgbm90IGRpcmVjdGx5IGVuYWJsZWQuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gY2hlY2sgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpJJiMzOTtsbCBwcm9jZWVkIHRvIHNldCB0aGUgcmVzdWx0cyBiYXNlZCBvbiB0aGlzIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJUlFfUkVNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5JiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUmIzM0OywKICAgICYjMzQ7YXZpY19waV91cGRhdGVfaXJ0ZSYjMzQ7LAogICAgJiMzNDtfX2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthdmljX2Rlc3Ryb3lfdmNwdSYjMzQ7LAogICAgJiMzNDtzdm1faXJfbGlzdF9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzIChHQVBQSSkgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHVwZGF0ZXMgYW5kIHZDUFUgYWZmaW5pdHkgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBRRU1VIHdpdGggS1ZNIFNWTSkuIFRoZSBjaGFuZ2VzIGFsdGVyIGNvcmUgQVZJQyBhbmQgSU9NTVUgbG9naWMgZXZlbiB3aGVuIEdBUFBJIGlzIG5vdCBleHBsaWNpdGx5IGVuYWJsZWQgdmlhIGJvb3QgcGFyYW1ldGVyLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SVJRX1JFTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSYjMzQ7LAogICAgJiMzNDthbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlJiMzNDssCiAgICAmIzM0O2F2aWNfcGlfdXBkYXRlX2lydGUmIzM0OywKICAgICYjMzQ7X19hbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2F2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0JiMzNDssCiAgICAmIzM0O2F2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXImIzM0OywKICAgICYjMzQ7YXZpY19kZXN0cm95X3ZjcHUmIzM0OywKICAgICYjMzQ7c3ZtX2lyX2xpc3RfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cyAoR0FQUEkpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBJdCBtb2RpZmllcyB0aGUgaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB1cGRhdGVzIGFuZCB2Q1BVIGFmZmluaXR5IGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgUUVNVSB3aXRoIEtWTSBTVk0pLiBUaGUgY2hhbmdlcyBhbHRlciBjb3JlIEFWSUMgYW5kIElPTU1VIGxvZ2ljIGV2ZW4gd2hlbiBHQVBQSSBpcyBub3QgZXhwbGljaXRseSBlbmFibGVkIHZpYSBib290IHBhcmFtZXRlciwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTowMS44MjA3ODM5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5Nzg4Mjk2NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiSVJRX1JFTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eVwiLFxuICAgIFwiYW1kX2lvbW11X3VwZGF0ZV9nYVwiLFxuICAgIFwiYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVcIixcbiAgICBcImF2aWNfcGlfdXBkYXRlX2lydGVcIixcbiAgICBcIl9fYW1kX2lvbW11X3VwZGF0ZV9nYVwiLFxuICAgIFwiYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyXCIsXG4gICAgXCJhdmljX2Rlc3Ryb3lfdmNwdVwiLFxuICAgIFwic3ZtX2lyX2xpc3RfZGVsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzIChHQVBQSSkgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHVwZGF0ZXMgYW5kIHZDUFUgYWZmaW5pdHkgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBRRU1VIHdpdGggS1ZNIFNWTSkuIFRoZSBjaGFuZ2VzIGFsdGVyIGNvcmUgQVZJQyBhbmQgSU9NTVUgbG9naWMgZXZlbiB3aGVuIEdBUFBJIGlzIG5vdCBleHBsaWNpdGx5IGVuYWJsZWQgdmlhIGJvb3QgcGFyYW1ldGVyLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6MDEuODIwNzkwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1MzA0ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWFlYTAyYzVjNmE4MWE0YTcxNzk1MTI2YTI4ODVlMDBmYmRhYTE2NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDIxOjQ5OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxcbmluZGV4IDM3Yjk0ZjQ4NGVmMzM4Li40MGEyMjA2YTMzYzA4ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcXG5AQCAtMzUsOCArMzUsOCBAQCBzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEge1xcbiBcXHR1NjQgdmFwaWNfYWRkcjtcXHRcXHQvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB2Q1BVJ3MgdkFQSUMuICovXFxuIFxcdHUzMiBnYV90YWc7XFxuIFxcdHUzMiB2ZWN0b3I7XFx0XFx0LyogR3Vlc3QgdmVjdG9yIG9mIHRoZSBpbnRlcnJ1cHQgKi9cXG4tXFx0aW50IGNwdTtcXG4tXFx0Ym9vbCBnYV9sb2dfaW50cjtcXG4rXFx0aW50IGFwaWNpZDtcXG4rXFx0aW50IGZsYWdzO1xcbiBcXHRib29sIGlzX2d1ZXN0X21vZGU7XFxuIFxcdHZvaWQgKmlyX2RhdGE7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcXG5pbmRleCBjZGQ1YTZkYzY0NmYxMS4uODE4NTg0MWQ5YjgxNjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbkBAIC02Myw2ICs2Myw5IEBAXFxuIFxcdGdhX3RhZztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxpc3RfaGVhZCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShyYXdfc3BpbmxvY2tfdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrKTtcXG4rXFxuIHN0YXRpY19hc3NlcnQoX19BVklDX0dBVEFHKEFWSUNfVk1fSURfTUFTSywgQVZJQ19WQ1BVX0lEWF9NQVNLKSA9PSAtMXUpO1xcbiBcXG4gI2RlZmluZSBBVklDX0FVVE9fTU9ERSAtMVxcbkBAIC04NzQsNiArODc3LDkgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KTtcXG4gXFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jayk7XFxuIFxcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3ZtLVxcdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcXG4rXFx0c3ZtLVxcdTAwM2VnYXBwaV9jcHUgPSAtMTtcXG4rXFxuIFxcdGlmICghZW5hYmxlX2FwaWN2IHx8ICFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTg4Niw2ICs4OTIsNDIgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxcbit7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKndha2V1cF9saXN0O1xcbitcXHRyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2s7XFxuK1xcbitcXHRpZiAoV0FSTl9PTihjcHUgXFx1MDAzYyAwKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d2FrZXVwX2xpc3QgPSBcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xcbitcXHRzcGlubG9jayA9IFxcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcXG4rXFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgd2FrZXVwX2xpc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXFxuK3tcXG4rXFx0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xcbitcXG4rXFx0aWYgKFdBUk5fT04oY3B1IFxcdTAwM2MgMCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwaW5sb2NrID0gXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xcbitcXHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XFxuK31cXG4rXFxuK3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuK3tcXG4rXFx0aWYgKHN2bS1cXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFxcdTAwMjZcXHUwMDI2IGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdFxcdHN2bS1cXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XFxuK1xcdH1cXG4rfVxcbitcXG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0YXZpY19oYW5kbGVfZGZyX3VwZGF0ZSh2Y3B1KTtcXG5AQCAtODk2LDEzICs5MzgsMTggQEAgc3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBpcnFmZC1cXHUwMDNlaXJxX2J5cGFzc192Y3B1O1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bTtcXG4gXFxuIFxcdGlmICghdmNwdSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0b19zdm0odmNwdSktXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbitcXHRzdm0gPSB0b19zdm0odmNwdSk7XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZpcnFmZC1cXHUwMDNldmNwdV9saXN0KTtcXG4tXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRvX3N2bSh2Y3B1KS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpKVxcbitcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbiB9XFxuIFxcbiBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG5AQCAtOTMyLDYgKzk3OSw4IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0XFx0dTY0IGVudHJ5O1xcbiBcXHRcXHRpbnQgcmV0O1xcbitcXHRcXHRpbnQgcG9zdGVkX2ludHI7XFxuK1xcdFxcdGJvb2wgaXNfdmNwdV93YWl0aW5nID0gZmFsc2U7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbFxcbkBAIC05NDksMTUgKzk5OCwyMyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGVudHJ5ID0gc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX2VudHJ5O1xcbiBcXHRcXHRpZiAoZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSykge1xcbi1cXHRcXHRcXHRwaV9kYXRhLmNwdSA9IGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0s7XFxuK1xcdFxcdFxcdHBpX2RhdGEuYXBpY2lkID0gZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcXG4rXFx0XFx0XFx0cGlfZGF0YS5mbGFncyA9IEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklORztcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cGlfZGF0YS5jcHUgPSAtMTtcXG4tXFx0XFx0XFx0cGlfZGF0YS5nYV9sb2dfaW50ciA9IGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUjtcXG4rXFx0XFx0XFx0cG9zdGVkX2ludHIgPSAhIShlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xcbitcXHRcXHRcXHRwaV9kYXRhLmZsYWdzID0gcG9zdGVkX2ludHIgXFx1MDAzY1xcdTAwM2MgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQ7XFxuK1xcdFxcdFxcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcXG4rXFx0XFx0XFx0XFx0cGlfZGF0YS5hcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KSkge1xcbitcXHRcXHRcXHRcXHRcXHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRcXHRcXHRcXHRpc192Y3B1X3dhaXRpbmcgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBcXHUwMDI2cGlfZGF0YSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGdvdG8gZ2FwcGlfZXJyX291dDtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFJldmVydCB0byBsZWdhY3kgbW9kZSBpZiB0aGUgSU9NTVUgZGlkbid0IHByb3ZpZGUgbWV0YWRhdGFcXG5AQCAtOTY2LDEyICsxMDIzLDE3IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKFdBUk5fT05fT05DRSghcGlfZGF0YS5pcl9kYXRhKSkge1xcbiBcXHRcXHRcXHRpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsIE5VTEwpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0XFx0XFx0Z290byBnYXBwaV9lcnJfb3V0O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpcnFmZC1cXHUwMDNlaXJxX2J5cGFzc19kYXRhID0gcGlfZGF0YS5pcl9kYXRhO1xcbiBcXHRcXHRsaXN0X2FkZChcXHUwMDI2aXJxZmQtXFx1MDAzZXZjcHVfbGlzdCwgXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbitnYXBwaV9lcnJfb3V0OlxcbitcXHRcXHRpZiAoaXNfdmNwdV93YWl0aW5nKVxcbitcXHRcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XFxuIH1cXG5AQCAtMTAwNCwxMCArMTA2NiwxNCBAQCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24ge1xcbiBcXHRBVklDX1NUQVJUX0JMT0NLSU5HXFx0PSBCSVQoMSksXFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXFxuK3N0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYXBpY2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcXG4ge1xcbi1cXHRib29sIGdhX2xvZ19pbnRyID0gKGFjdGlvbiBcXHUwMDI2IEFWSUNfU1RBUlRfQkxPQ0tJTkcpO1xcbitcXHRpbnQgcG9zdGVkX2ludHIgPSAhIShhY3Rpb24gXFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKSBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHRcXHQgIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUO1xcbitcXHRpbnQgaXNfdmNwdV9ydW5uaW5nID0gKGFwaWNpZCBcXHUwMDNlPSAwKSBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHRcXHQgICAgICBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQ7XFxuK1xcdGludCBmbGFncyA9IHBvc3RlZF9pbnRyIHwgaXNfdmNwdV9ydW5uaW5nO1xcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0c3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkO1xcbiBcXG5AQCAtMTAxNywxNiArMTA4MywzMCBAQCBzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcXG4gXFx0ICogSGVyZSwgd2UgZ28gdGhyb3VnaCB0aGUgcGVyLXZjcHUgaXJfbGlzdCB0byB1cGRhdGUgYWxsIGV4aXN0aW5nXFxuIFxcdCAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS5cXG4gXFx0ICovXFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpKVxcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KSkge1xcbitcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2IGNwdSBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRzdm0tXFx1MDAzZWdhcHBpX2NwdSA9IGNwdTtcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfdmNwdV9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2IGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHQvKiBJRiBjb25kaXRpb24gaGFuZGxlcyB0aGUgaW5pdGlhbCBzdGF0ZSAqL1xcbitcXHRcXHRpZiAoc3ZtLVxcdTAwM2VnYXBwaV9jcHUgIT0gLTEpXFxuK1xcdFxcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG4rXFxuK1xcdFxcdHN2bS1cXHUwMDNlZ2FwcGlfY3B1ID0gY3B1OyAvKiBTdG9yZSBjcHUgbm8gYXMgdGFyZ2V0IGZvciBHQVBQSSAqL1xcbitcXHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHR9XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlycWZkLCBcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcXG4gXFx0XFx0dm9pZCAqZGF0YSA9IGlycWZkLVxcdTAwM2VpcnFfYnlwYXNzX2RhdGE7XFxuIFxcbiBcXHRcXHRpZiAoIShhY3Rpb24gXFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBjcHUsIGdhX2xvZ19pbnRyKSk7XFxuLVxcdFxcdGVsc2UgaWYgKGNwdSBcXHUwMDNlPSAwKVxcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XFxuK1xcdFxcdGVsc2UgaWYgKGlzX3ZjcHVfcnVubmluZylcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEsIGFwaWNpZCwgZmxhZ3MpKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhKSk7XFxuIFxcdH1cXG5AQCAtMTA4MCw3ICsxMTYwLDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXFxuIFxcbiBcXHRXUklURV9PTkNFKGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbdmNwdS1cXHUwMDNldmNwdV9pZF0sIGVudHJ5KTtcXG4gXFxuLVxcdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgYWN0aW9uKTtcXG4rXFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBjcHUsIGFjdGlvbik7XFxuIFxcbiBcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcXG4gfVxcbkBAIC0xMTIzLDcgKzEyMDMsNyBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxcbiBcXHQgKi9cXG4gXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCAtMSwgYWN0aW9uKTtcXG4rXFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCAtMSwgLTEsIGFjdGlvbik7XFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKTtcXG4gXFxuQEAgLTEyOTYsNiArMTM3NiwyMSBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcih2b2lkKVxcbit7XFxuK1xcdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnZjcHVfd2FrZXVwX2xpc3QgPSBcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xcbitcXHRyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2sgPSBcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XFxuK1xcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9jayhzcGlubG9jayk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3ZtLCB2Y3B1X3dha2V1cF9saXN0LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KSB7XFxuK1xcdFxcdGlmIChrdm1fbGFwaWNfZmluZF9oaWdoZXN0X2lycihcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1KSBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRrdm1fdmNwdV93YWtlX3VwKFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9jayhzcGlubG9jayk7XFxuK31cXG4rXFxuIC8qXFxuICAqIE5vdGU6XFxuICAqIC0gVGhlIG1vZHVsZSBwYXJhbSBhdmljIGVuYWJsZSBib3RoIHhBUElDIGFuZCB4MkFQSUMgbW9kZS5cXG5AQCAtMTMwNCwxMiArMTM5OSwxOCBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxcbiAgKi9cXG4gYm9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbiB7XFxuK1xcdGludCBjcHU7XFxuIFxcdGF2aWMgPSBhdmljX3dhbnRfYXZpY19lbmFibGVkKCk7XFxuIFxcdGlmICghYXZpYylcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0cHJfaW5mbyhcXFwiQVZJQyBlbmFibGVkXFxcXG5cXFwiKTtcXG4gXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KSk7XFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSkpO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBBVklDIGlzIGEgcHJlcmVxdWlzaXRlIGZvciB4MkFWSUMuICovXFxuIFxcdHgyYXZpY19lbmFibGVkID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1gyQVZJQyk7XFxuIFxcdGlmICh4MmF2aWNfZW5hYmxlZCkge1xcbkBAIC0xMzMzLDEyICsxNDM0LDE2IEBAIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFx0XFx0ZW5hYmxlX2lwaXYgPSBmYWxzZTtcXG4gXFxuIFxcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoXFx1MDAyNmF2aWNfZ2FfbG9nX25vdGlmaWVyKTtcXG4rXFx0a3ZtX3NldF9wb3N0ZWRfaW50cl93YWtldXBfaGFuZGxlcihcXHUwMDI2YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcik7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gdm9pZCBhdmljX2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcXG4ge1xcbi1cXHRpZiAoYXZpYylcXG4tXFx0XFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcXG4rXFx0aWYgKCFhdmljKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKE5VTEwpO1xcbitcXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKE5VTEwpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZTAyYTM4ZGE1Mjk2ZTMuLmI2ODcxMzNmODUyOGJhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTEzNTYsNiArMTM1Niw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpKTtcXG4gXFxuK1xcdGF2aWNfZGVzdHJveV92Y3B1KHN2bSk7XFxuK1xcbiBcXHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xcbiBcXHRzdm1fZnJlZV9uZXN0ZWQoc3ZtKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuaW5kZXggNTEzNzQxNmJlNTkzZDcuLjQ3ZDViYjVkNzEwM2RhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuQEAgLTM2Miw2ICszNjIsMTAgQEAgc3RydWN0IHZjcHVfc3ZtIHtcXG4gXFxuIFxcdC8qIEd1ZXN0IEdJRiB2YWx1ZSwgdXNlZCB3aGVuIHZHSUYgaXMgbm90IGVuYWJsZWQgKi9cXG4gXFx0Ym9vbCBndWVzdF9naWY7XFxuK1xcbitcXHQvKiBHQVBQSSByZWxhdGVkIGZpZWxkcyAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3Q7XFxuK1xcdGludCBnYXBwaV9jcHU7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgc3ZtX2NwdV9kYXRhIHtcXG5AQCAtOTA5LDYgKzkxMyw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTtcXG4gaW50IGF2aWNfaW5jb21wbGV0ZV9pcGlfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xcbit2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG4gdm9pZCBhdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXFxuaW5kZXggODM0ZDhmYWJmYmEzODcuLjA0NDE3OWNhYjEyZTRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcXG5AQCAtNDEsNiArNDEsNyBAQCBpbnQgYW1kX2lvbW11X2VuYWJsZSh2b2lkKTtcXG4gdm9pZCBhbWRfaW9tbXVfZGlzYWJsZSh2b2lkKTtcXG4gaW50IGFtZF9pb21tdV9yZWVuYWJsZShpbnQgbW9kZSk7XFxuIGludCBhbWRfaW9tbXVfZW5hYmxlX2ZhdWx0aW5nKHVuc2lnbmVkIGludCBjcHUpO1xcbitleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuIGV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyO1xcbiBleHRlcm4gZW51bSBwcm90ZWN0aW9uX2RvbWFpbl9tb2RlIGFtZF9pb21tdV9wZ3RhYmxlO1xcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ncHRfbGV2ZWw7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcXG5pbmRleCBmOWY3MTgwODc4OTMwMy4uZGUwYjIzMzA2OTQ0YjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcXG4rKysgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxcbkBAIC05NCw2ICs5NCw3IEBAXFxuICNkZWZpbmUgRkVBVFVSRV9YMkFQSUNcXHRcXHRCSVRfVUxMKDIpXFxuICNkZWZpbmUgRkVBVFVSRV9OWFxcdFxcdEJJVF9VTEwoMylcXG4gI2RlZmluZSBGRUFUVVJFX0dUXFx0XFx0QklUX1VMTCg0KVxcbisjZGVmaW5lIEZFQVRVUkVfR0FQUElcXHRcXHRCSVRfVUxMKDUpXFxuICNkZWZpbmUgRkVBVFVSRV9JQVxcdFxcdEJJVF9VTEwoNilcXG4gI2RlZmluZSBGRUFUVVJFX0dBXFx0XFx0QklUX1VMTCg3KVxcbiAjZGVmaW5lIEZFQVRVUkVfSEVcXHRcXHRCSVRfVUxMKDgpXFxuQEAgLTExMyw2ICsxMTQsNyBAQFxcbiAvKiBFeHRlbmRlZCBGZWF0dXJlIDIgQml0cyAqL1xcbiAjZGVmaW5lIEZFQVRVUkVfU0VWU05QSU9fU1VQXFx0QklUX1VMTCgxKVxcbiAjZGVmaW5lIEZFQVRVUkVfR0NSM1RSUE1PREVcXHRCSVRfVUxMKDMpXFxuKyNkZWZpbmUgRkVBVFVSRV9HQVBQSURJU1NVUFxcdEJJVF9VTEwoNClcXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBcXHRHRU5NQVNLX1VMTCg3LCA1KVxcbiAjZGVmaW5lIEZFQVRVUkVfU05QQVZJQ1NVUF9HQU0oeCkgXFxcXFxcbiBcXHQoRklFTERfR0VUKEZFQVRVUkVfU05QQVZJQ1NVUCwgeCkgPT0gMHgxKVxcbkBAIC0xOTAsNiArMTkyLDcgQEBcXG4gI2RlZmluZSBDT05UUk9MX0VQSF9FTlxcdFxcdDQ1XFxuICNkZWZpbmUgQ09OVFJPTF9YVF9FTlxcdFxcdDUwXFxuICNkZWZpbmUgQ09OVFJPTF9JTlRDQVBYVF9FTlxcdDUxXFxuKyNkZWZpbmUgQ09OVFJPTF9HQVBQSV9FTlxcdDU1XFxuICNkZWZpbmUgQ09OVFJPTF9HQ1IzVFJQTU9ERVxcdDU4XFxuICNkZWZpbmUgQ09OVFJPTF9JUlRDQUNIRURJU1xcdDU5XFxuICNkZWZpbmUgQ09OVFJPTF9TTlBBVklDX0VOXFx0NjFcXG5AQCAtMTAwNCw3ICsxMDA3LDggQEAgdW5pb24gaXJ0ZV9nYV9sbyB7XFxuIFxcdFxcdCAgICBub19mYXVsdFxcdDogMSxcXG4gXFx0XFx0ICAgIC8qIC0tLS0tLSAqL1xcbiBcXHRcXHQgICAgZ2FfbG9nX2ludHJcXHQ6IDEsXFxuLVxcdFxcdCAgICByc3ZkMVxcdDogMyxcXG4rXFx0XFx0ICAgIHJzdmQxXFx0OiAyLFxcbitcXHRcXHQgICAgZ2FwcGlfZGlzXFx0OiAxLFxcbiBcXHRcXHQgICAgaXNfcnVuXFx0OiAxLFxcbiBcXHRcXHQgICAgLyogLS0tLS0tICovXFxuIFxcdFxcdCAgICBndWVzdF9tb2RlXFx0OiAxLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcXG5pbmRleCAzYmRiMzgwZDIzZTlhOS4uMjdmZmIyMTg0YmYyOTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXFxuQEAgLTE2MCw2ICsxNjAsOSBAQCB1OCBhbWRfaW9tbXVfaHB0X2xldmVsO1xcbiAvKiBHdWVzdCBwYWdlIHRhYmxlIGxldmVsICovXFxuIGludCBhbWRfaW9tbXVfZ3B0X2xldmVsID0gUEFHRV9NT0RFXzRfTEVWRUw7XFxuIFxcbitib29sIGFtZF9pb21tdV9nYXBwaTtcXG4rRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfZ2FwcGkpO1xcbitcXG4gaW50IGFtZF9pb21tdV9ndWVzdF9pciA9IEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQztcXG4gc3RhdGljIGludCBhbWRfaW9tbXVfeHRfbW9kZSA9IElSUV9SRU1BUF9YQVBJQ19NT0RFO1xcbiBcXG5AQCAtNDYyLDYgKzQ2NSw5IEBAIHN0YXRpYyB2b2lkIGlvbW11X2Rpc2FibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpXFxuIFxcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUxPR19FTik7XFxuIFxcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUlOVF9FTik7XFxuIFxcbitcXHQvKiBEaXNhYmxlIElPTU1VIEdBUFBJICovXFxuK1xcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XFxuK1xcbiBcXHQvKiBEaXNhYmxlIElPTU1VIFBQUiBsb2dnaW5nICovXFxuIFxcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJMT0dfRU4pO1xcbiBcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSSU5UX0VOKTtcXG5AQCAtMjk5Niw2ICszMDAyLDEyIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcXG4gXFx0c3RydWN0IGFtZF9pb21tdSAqaW9tbXU7XFxuIFxcbiBcXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xcbitcXHRcXHQvKiBEaXNhYmxlIEdBUFBJLCBkbyBub3QgY2hlY2sgYW1kX2lvbW11X2dhcHBpIGFzIGl0IG1heSBiZVxcbitcXHRcXHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcXG4rXFx0XFx0ICogZW5hYmxlZCBpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBEaXNhYmxlIEdBTG9nIGlmIGFscmVhZHkgcnVubmluZy4gSXQgY291bGQgaGF2ZSBiZWVuIGVuYWJsZWRcXG4gXFx0XFx0ICogaW4gdGhlIHByZXZpb3VzIGJvb3QgYmVmb3JlIGtkdW1wLlxcbkBAIC0zMDM1LDEwICszMDQ3LDE5IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhKGNoZWNrX2ZlYXR1cmUoRkVBVFVSRV9HQVBQSSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgQU1EX0lPTU1VX0dVRVNUX0lSX1ZBUElDKGFtZF9pb21tdV9ndWVzdF9pcikpKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIkdBUFBJIGlzIG5vdCBzdXBwb3J0ZWQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIEVuYWJsaW5nIEdBTSBhbmQgU05QQVZJQyBzdXBwb3J0ICovXFxuIFxcdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XFxuLVxcdFxcdGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHxcXG4tXFx0XFx0ICAgIGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKVxcbitcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpKVxcbitcXHRcXHRcXHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XFxuK1xcdFxcdGVsc2UgaWYgKGlvbW11X2luaXRfZ2FfbG9nKGlvbW11KSB8fFxcbitcXHRcXHRcXHQgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdFxcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBTV9FTik7XFxuQEAgLTMwNDcsNyArMzA2OCw4IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcXG4gXFx0fVxcbiBcXG4gXFx0YW1kX2lvbW11X2lycV9vcHMuY2FwYWJpbGl0eSB8PSAoMSBcXHUwMDNjXFx1MDAzYyBJUlFfUE9TVElOR19DQVApO1xcbi1cXHRwcl9pbmZvKFxcXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZFxcXFxuXFxcIik7XFxuK1xcdHByX2luZm8oXFxcIlZpcnR1YWwgQVBJQyBlbmFibGVkIHdpdGggJXNcXFxcblxcXCIsXFxuK1xcdFxcdGFtZF9pb21tdV9nYXBwaSA/IFxcXCJHQVBQSVxcXCIgOiBcXFwiR0FMT0dcXFwiKTtcXG4gI2VuZGlmXFxuIH1cXG4gXFxuQEAgLTM3MzgsNiArMzc2MCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FtZF9pb21tdV9vcHRpb25zKGNoYXIgKnN0cilcXG4gXFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcInYyX3Bnc2l6ZXNfb25seVxcXCIsIDE1KSA9PSAwKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIlJlc3RyaWN0aW5nIFYxIHBhZ2Utc2l6ZXMgdG8gNEtpQi8yTWlCLzFHaUJcXFwiKTtcXG4gXFx0XFx0XFx0YW1kX2lvbW11X3Bnc2l6ZV9iaXRtYXAgPSBBTURfSU9NTVVfUEdTSVpFU19WMjtcXG4rXFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcImdhcHBpXFxcIiwgNSkgPT0gMCkge1xcbitcXHRcXHRcXHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRwcl9ub3RpY2UoXFxcIlVua25vd24gb3B0aW9uIC0gJyVzJ1xcXFxuXFxcIiwgc3RyKTtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xcbmluZGV4IDU3ZGM4ZmFiYzdkOWI5Li5iMjI2ZDM5NDFjYjliOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xcbkBAIC0zOTU5LDE5ICszOTU5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgYW1kX2lyX2RvbWFpbl9vcHMgPSB7XFxuIFxcdC5kZWFjdGl2YXRlID0gaXJxX3JlbWFwcGluZ19kZWFjdGl2YXRlLFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcXG4tXFx0XFx0XFx0XFx0ICBib29sIGdhX2xvZ19pbnRyKVxcbitzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXFxuIHtcXG4tXFx0aWYgKGNwdSBcXHUwMDNlPSAwKSB7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklORykge1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID1cXG4tXFx0XFx0XFx0XFx0XFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhjcHUpO1xcbitcXHRcXHRcXHRcXHRcXHRBUElDSURfVE9fSVJURV9ERVNUX0xPKGFwaWNpZCk7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPVxcbi1cXHRcXHRcXHRcXHRcXHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGNwdSk7XFxuK1xcdFxcdFxcdFxcdFxcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSB0cnVlO1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZmFsc2U7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XFxuLVxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBnYV9sb2dfaW50cjtcXG4rXFx0XFx0Ym9vbCBwb3N0ZWRfaW50ciA9ICEhKGZsYWdzIFxcdTAwMjYgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFIpO1xcbitcXG4rXFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhcHBpX2RpcyA9ICFwb3N0ZWRfaW50ciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjaGVja19mZWF0dXJlMihGRUFUVVJFX0dBUFBJRElTU1VQKTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9XFxuK1xcdFxcdFxcdFxcdFxcdFxcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWhpLmZpZWxkcy5kZXN0aW5hdGlvbiA9IEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IHBvc3RlZF9pbnRyO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzk5Miw3ICs0MDAyLDcgQEAgc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcXG4gICogYW5kIHRodXMgZG9uJ3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVSBjb25zdW1lcyBmcmVzaFxcbiAgKiBpbmZvcm1hdGlvbi5cXG4gICovXFxuLWludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXFxuK2ludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTtcXG4gXFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXFx1MDAzZWVudHJ5O1xcbkBAIC00MDA2LDE0ICs0MDE2LDE0IEBAIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXFxuIFxcdGlmICghaXJfZGF0YS1cXHUwMDNlaW9tbXUpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcXG4rXFx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBhcGljaWQsIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiBfX21vZGlmeV9pcnRlX2dhKGlyX2RhdGEtXFx1MDAzZWlvbW11LCBpcl9kYXRhLVxcdTAwM2VpcnFfMl9pcnRlLmRldmlkLFxcbiBcXHRcXHRcXHRcXHRpcl9kYXRhLVxcdTAwM2VpcnFfMl9pcnRlLmluZGV4LCBlbnRyeSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcXG4gXFxuLWludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxcbitpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhO1xcbiBcXHRzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS1cXHUwMDNlZW50cnk7XFxuQEAgLTQwMzQsOSArNDA0NCwxMyBAQCBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4gXFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5ndWVzdF9tb2RlICA9IDE7XFxuIFxcdGVudHJ5LVxcdTAwM2VoaS5maWVsZHMuZ2Ffcm9vdF9wdHIgICAgICAgPSBpcl9kYXRhLVxcdTAwM2VnYV9yb290X3B0cjtcXG4gXFx0ZW50cnktXFx1MDAzZWhpLmZpZWxkcy52ZWN0b3IgICAgICAgICAgICA9IGlyX2RhdGEtXFx1MDAzZWdhX3ZlY3RvcjtcXG4tXFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4gXFxuLVxcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7XFxuK1xcdGlmIChhbWRfaW9tbXVfZ2FwcGkpXFxuK1xcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfdGFnID0gUE9TVEVEX0lOVFJfV0FLRVVQX1ZFQ1RPUjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IGlyX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4rXFxuK1xcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cXHUwMDNlaW9tbXUsIGlyX2RhdGEtXFx1MDAzZWlycV8yX2lydGUuZGV2aWQsXFxuIFxcdFxcdFxcdCAgICAgIGlyX2RhdGEtXFx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcXG5AQCAtNDEwNyw4ICs0MTIxLDggQEAgc3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxcbiBcXHRcXHRpcl9kYXRhLVxcdTAwM2VnYV92ZWN0b3IgPSBwaV9kYXRhLVxcdTAwM2V2ZWN0b3I7XFxuIFxcdFxcdGlyX2RhdGEtXFx1MDAzZWdhX3RhZyA9IHBpX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4gXFx0XFx0aWYgKHBpX2RhdGEtXFx1MDAzZWlzX2d1ZXN0X21vZGUpXFxuLVxcdFxcdFxcdHJldCA9IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEsIHBpX2RhdGEtXFx1MDAzZWNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBpX2RhdGEtXFx1MDAzZWdhX2xvZ19pbnRyKTtcXG4rXFx0XFx0XFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cXHUwMDNlYXBpY2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGlfZGF0YS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldCA9IGFtZF9pb21tdV9kZWFjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSk7XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmggYi9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oXFxuaW5kZXggZWRjZWU5ZjUzMzVhNmYuLjg3ZTc2ZjYxN2VhMTg1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oXFxuQEAgLTMwLDggKzMwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9XFxuIC8qIElPTU1VIEFWSUMgRnVuY3Rpb24gKi9cXG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKTtcXG4gXFxuLWV4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTtcXG4tZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTtcXG4rZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncyk7XFxuK2V4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKTtcXG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEpO1xcbiBcXG4gI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfQU1EX0lPTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19JUlFfUkVNQVApICovXFxuQEAgLTQyLDEyICs0MiwxMiBAQCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxcbitzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4rc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTc2LDQgKzc2LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhbWRfaW9tbXVfc2V2X3Rpb19zdXBwb3J0ZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4gI2VuZGlmXFxuIFxcbisjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVCAwXFxuKyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfVkNQVV9SVU5OSU5HICBCSVQoMClcXG4rXFxuKyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQgMVxcbisjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSICBCSVQoMSlcXG4rXFxuK2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcXG4gI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjAyLjY0NzEzOTc5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg5NjE5MjcyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJUlFfUkVNQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5XCIsXG4gICAgXCJhbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZVwiLFxuICAgIFwiYXZpY19waV91cGRhdGVfaXJ0ZVwiLFxuICAgIFwiX19hbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJcIixcbiAgICBcImF2aWNfZGVzdHJveV92Y3B1XCIsXG4gICAgXCJzdm1faXJfbGlzdF9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMgKEdBUFBJKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdXBkYXRlcyBhbmQgdkNQVSBhZmZpbml0eSBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIFFFTVUgd2l0aCBLVk0gU1ZNKS4gVGhlIGNoYW5nZXMgYWx0ZXIgY29yZSBBVklDIGFuZCBJT01NVSBsb2dpYyBldmVuIHdoZW4gR0FQUEkgaXMgbm90IGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgYm9vdCBwYXJhbWV0ZXIsIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhZWEwMmM1YzZhODFhNGE3MTc5NTEyNmEyODg1ZTAwZmJkYWExNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDIxOjQ5OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXG5pbmRleCAzN2I5NGY0ODRlZjMzOC4uNDBhMjIwNmEzM2MwOGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxuQEAgLTM1LDggKzM1LDggQEAgc3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHtcbiBcdHU2NCB2YXBpY19hZGRyO1x0XHQvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB2Q1BVJ3MgdkFQSUMuICovXG4gXHR1MzIgZ2FfdGFnO1xuIFx0dTMyIHZlY3RvcjtcdFx0LyogR3Vlc3QgdmVjdG9yIG9mIHRoZSBpbnRlcnJ1cHQgKi9cbi1cdGludCBjcHU7XG4tXHRib29sIGdhX2xvZ19pbnRyO1xuK1x0aW50IGFwaWNpZDtcbitcdGludCBmbGFncztcbiBcdGJvb2wgaXNfZ3Vlc3RfbW9kZTtcbiBcdHZvaWQgKmlyX2RhdGE7XG4gfTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG5pbmRleCBjZGQ1YTZkYzY0NmYxMS4uODE4NTg0MWQ5YjgxNjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbkBAIC02Myw2ICs2Myw5IEBAXG4gXHRnYV90YWc7XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbiBcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxpc3RfaGVhZCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHJhd19zcGlubG9ja190LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2spO1xuK1xuIHN0YXRpY19hc3NlcnQoX19BVklDX0dBVEFHKEFWSUNfVk1fSURfTUFTSywgQVZJQ19WQ1BVX0lEWF9NQVNLKSA9PSAtMXUpO1xuIFxuICNkZWZpbmUgQVZJQ19BVVRPX01PREUgLTFcbkBAIC04NzQsNiArODc3LDkgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2spO1xuIFxuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3ZtLVx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpO1xuK1x0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuK1xuIFx0aWYgKCFlbmFibGVfYXBpY3YgfHwgIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtODg2LDYgKzg5Miw0MiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBsaXN0X2hlYWQgKndha2V1cF9saXN0O1xuK1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuK1xuK1x0aWYgKFdBUk5fT04oY3B1IFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d2FrZXVwX2xpc3QgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7XG4rXHRzcGlubG9jayA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xuK1x0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KSlcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgd2FrZXVwX2xpc3QpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4re1xuK1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuK1xuK1x0aWYgKFdBUk5fT04oY3B1IFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3BpbmxvY2sgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcbitcdGd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShzcGlubG9jayk7XG4rXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpKVxuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbit9XG4rXG4rdm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbit7XG4rXHRpZiAoc3ZtLVx1MDAzZWdhcHBpX2NwdSAhPSAtMSBcdTAwMjZcdTAwMjYgYW1kX2lvbW11X2dhcHBpKSB7XG4rXHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuK1x0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XG4rXHR9XG4rfVxuK1xuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUodmNwdSk7XG5AQCAtODk2LDEzICs5MzgsMTggQEAgc3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX3ZjcHU7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4gXG4gXHRpZiAoIXZjcHUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4rXHRzdm0gPSB0b19zdm0odmNwdSk7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIFx0bGlzdF9kZWwoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0KTtcbi1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRvX3N2bSh2Y3B1KS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbitcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuQEAgLTkzMiw2ICs5NzksOCBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRcdHU2NCBlbnRyeTtcbiBcdFx0aW50IHJldDtcbitcdFx0aW50IHBvc3RlZF9pbnRyO1xuK1x0XHRib29sIGlzX3ZjcHVfd2FpdGluZyA9IGZhbHNlO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbFxuQEAgLTk0OSwxNSArOTk4LDIzIEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHQgKi9cbiBcdFx0ZW50cnkgPSBzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeTtcbiBcdFx0aWYgKGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSykge1xuLVx0XHRcdHBpX2RhdGEuY3B1ID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLO1xuK1x0XHRcdHBpX2RhdGEuYXBpY2lkID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLO1xuK1x0XHRcdHBpX2RhdGEuZmxhZ3MgPSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkc7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGlfZGF0YS5jcHUgPSAtMTtcbi1cdFx0XHRwaV9kYXRhLmdhX2xvZ19pbnRyID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XG4rXHRcdFx0cG9zdGVkX2ludHIgPSAhIShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7XG4rXHRcdFx0cGlfZGF0YS5mbGFncyA9IHBvc3RlZF9pbnRyIFx1MDAzY1x1MDAzYyBBTURfSU9NTVVfRkxBR19QT1NURURfSU5UUl9TSElGVDtcbitcdFx0XHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XG4rXHRcdFx0XHRwaV9kYXRhLmFwaWNpZCA9IGt2bV9jcHVfZ2V0X2FwaWNpZChzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdFx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSkge1xuK1x0XHRcdFx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRcdFx0XHRcdGlzX3ZjcHVfd2FpdGluZyA9IHRydWU7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgXHUwMDI2cGlfZGF0YSk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRnb3RvIGdhcHBpX2Vycl9vdXQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFJldmVydCB0byBsZWdhY3kgbW9kZSBpZiB0aGUgSU9NTVUgZGlkbid0IHByb3ZpZGUgbWV0YWRhdGFcbkBAIC05NjYsMTIgKzEwMjMsMTcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqL1xuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFwaV9kYXRhLmlyX2RhdGEpKSB7XG4gXHRcdFx0aXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHRyZXQgPSAtRUlPO1xuK1x0XHRcdGdvdG8gZ2FwcGlfZXJyX291dDtcbiBcdFx0fVxuIFxuIFx0XHRpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX2RhdGEgPSBwaV9kYXRhLmlyX2RhdGE7XG4gXHRcdGxpc3RfYWRkKFx1MDAyNmlycWZkLVx1MDAzZXZjcHVfbGlzdCwgXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpO1xuIFx0XHRyZXR1cm4gMDtcbitnYXBwaV9lcnJfb3V0OlxuK1x0XHRpZiAoaXNfdmNwdV93YWl0aW5nKVxuK1x0XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0cmV0dXJuIGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XG4gfVxuQEAgLTEwMDQsMTAgKzEwNjYsMTQgQEAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcbiBcdEFWSUNfU1RBUlRfQkxPQ0tJTkdcdD0gQklUKDEpLFxuIH07XG4gXG4tc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4tXHRcdFx0XHRcdCAgICBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuK3N0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYXBpY2lkLFxuK1x0XHRcdFx0XHQgICAgaW50IGNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiB7XG4tXHRib29sIGdhX2xvZ19pbnRyID0gKGFjdGlvbiBcdTAwMjYgQVZJQ19TVEFSVF9CTE9DS0lORyk7XG4rXHRpbnQgcG9zdGVkX2ludHIgPSAhIShhY3Rpb24gXHUwMDI2IEFWSUNfU1RBUlRfQkxPQ0tJTkcpIFx1MDAzY1x1MDAzY1xuK1x0XHRcdCAgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQ7XG4rXHRpbnQgaXNfdmNwdV9ydW5uaW5nID0gKGFwaWNpZCBcdTAwM2U9IDApIFx1MDAzY1x1MDAzY1xuK1x0XHRcdCAgICAgIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVDtcbitcdGludCBmbGFncyA9IHBvc3RlZF9pbnRyIHwgaXNfdmNwdV9ydW5uaW5nO1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQ7XG4gXG5AQCAtMTAxNywxNiArMTA4MywzMCBAQCBzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbiBcdCAqIEhlcmUsIHdlIGdvIHRocm91Z2ggdGhlIHBlci12Y3B1IGlyX2xpc3QgdG8gdXBkYXRlIGFsbCBleGlzdGluZ1xuIFx0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB0YXJnZXRpbmcgdGhpcyB2Y3B1LlxuIFx0ICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpXG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpIHtcbitcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSBcdTAwMjZcdTAwMjYgY3B1IFx1MDAzZT0gMClcbitcdFx0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gY3B1O1xuIFx0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoaXNfdmNwdV9ydW5uaW5nIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0LyogSUYgY29uZGl0aW9uIGhhbmRsZXMgdGhlIGluaXRpYWwgc3RhdGUgKi9cbitcdFx0aWYgKHN2bS1cdTAwM2VnYXBwaV9jcHUgIT0gLTEpXG4rXHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXG4rXHRcdHN2bS1cdTAwM2VnYXBwaV9jcHUgPSBjcHU7IC8qIFN0b3JlIGNwdSBubyBhcyB0YXJnZXQgZm9yIEdBUFBJICovXG4rXHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xuK1x0XHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdH1cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbiBcdFx0dm9pZCAqZGF0YSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YTtcbiBcbiBcdFx0aWYgKCEoYWN0aW9uIFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxuLVx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTtcbi1cdFx0ZWxzZSBpZiAoY3B1IFx1MDAzZT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xuK1x0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgZmxhZ3MpKTtcbitcdFx0ZWxzZSBpZiAoaXNfdmNwdV9ydW5uaW5nKVxuK1x0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhKSk7XG4gXHR9XG5AQCAtMTA4MCw3ICsxMTYwLDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4gXG4gXHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XG4gXG4tXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGFjdGlvbik7XG4rXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGNwdSwgYWN0aW9uKTtcbiBcbiBcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG5AQCAtMTEyMyw3ICsxMjAzLDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiBcdCAqL1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcbi1cdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7XG4rXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcbiBcbiBcdFdBUk5fT05fT05DRShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7XG4gXG5AQCAtMTI5Niw2ICsxMzc2LDIxIEBAIHN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcih2b2lkKVxuK3tcbitcdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICp2Y3B1X3dha2V1cF9saXN0ID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xuK1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bTtcbitcbitcdHJhd19zcGluX2xvY2soc3BpbmxvY2spO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzdm0sIHZjcHVfd2FrZXVwX2xpc3QsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpIHtcbitcdFx0aWYgKGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSBcdTAwM2U9IDApXG4rXHRcdFx0a3ZtX3ZjcHVfd2FrZV91cChcdTAwMjZzdm0tXHUwMDNldmNwdSk7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2soc3BpbmxvY2spO1xuK31cbitcbiAvKlxuICAqIE5vdGU6XG4gICogLSBUaGUgbW9kdWxlIHBhcmFtIGF2aWMgZW5hYmxlIGJvdGggeEFQSUMgYW5kIHgyQVBJQyBtb2RlLlxuQEAgLTEzMDQsMTIgKzEzOTksMTggQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbiAgKi9cbiBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4ge1xuK1x0aW50IGNwdTtcbiBcdGF2aWMgPSBhdmljX3dhbnRfYXZpY19lbmFibGVkKCk7XG4gXHRpZiAoIWF2aWMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHByX2luZm8oXCJBVklDIGVuYWJsZWRcXG5cIik7XG4gXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KSk7XG4rXHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KSk7XG4rXHR9XG4rXG4gXHQvKiBBVklDIGlzIGEgcHJlcmVxdWlzaXRlIGZvciB4MkFWSUMuICovXG4gXHR4MmF2aWNfZW5hYmxlZCA9IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YMkFWSUMpO1xuIFx0aWYgKHgyYXZpY19lbmFibGVkKSB7XG5AQCAtMTMzMywxMiArMTQzNCwxNiBAQCBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHRcdGVuYWJsZV9pcGl2ID0gZmFsc2U7XG4gXG4gXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFx1MDAyNmF2aWNfZ2FfbG9nX25vdGlmaWVyKTtcbitcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoXHUwMDI2YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gdm9pZCBhdmljX2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbiB7XG4tXHRpZiAoYXZpYylcbi1cdFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcbitcdGlmICghYXZpYylcbitcdFx0cmV0dXJuO1xuK1xuK1x0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcbitcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoTlVMTCk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlMDJhMzhkYTUyOTZlMy4uYjY4NzEzM2Y4NTI4YmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtMTM1Niw2ICsxMzU2LDggQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKTtcbiBcbitcdGF2aWNfZGVzdHJveV92Y3B1KHN2bSk7XG4rXG4gXHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xuIFx0c3ZtX2ZyZWVfbmVzdGVkKHN2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDUxMzc0MTZiZTU5M2Q3Li40N2Q1YmI1ZDcxMDNkYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC0zNjIsNiArMzYyLDEwIEBAIHN0cnVjdCB2Y3B1X3N2bSB7XG4gXG4gXHQvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovXG4gXHRib29sIGd1ZXN0X2dpZjtcbitcbitcdC8qIEdBUFBJIHJlbGF0ZWQgZmllbGRzICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3Q7XG4rXHRpbnQgZ2FwcGlfY3B1O1xuIH07XG4gXG4gc3RydWN0IHN2bV9jcHVfZGF0YSB7XG5AQCAtOTA5LDYgKzkxMyw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTtcbiBpbnQgYXZpY19pbmNvbXBsZXRlX2lwaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuK3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxuaW5kZXggODM0ZDhmYWJmYmEzODcuLjA0NDE3OWNhYjEyZTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXG5AQCAtNDEsNiArNDEsNyBAQCBpbnQgYW1kX2lvbW11X2VuYWJsZSh2b2lkKTtcbiB2b2lkIGFtZF9pb21tdV9kaXNhYmxlKHZvaWQpO1xuIGludCBhbWRfaW9tbXVfcmVlbmFibGUoaW50IG1vZGUpO1xuIGludCBhbWRfaW9tbXVfZW5hYmxlX2ZhdWx0aW5nKHVuc2lnbmVkIGludCBjcHUpO1xuK2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ndWVzdF9pcjtcbiBleHRlcm4gZW51bSBwcm90ZWN0aW9uX2RvbWFpbl9tb2RlIGFtZF9pb21tdV9wZ3RhYmxlO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXG5pbmRleCBmOWY3MTgwODc4OTMwMy4uZGUwYjIzMzA2OTQ0YjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcbkBAIC05NCw2ICs5NCw3IEBAXG4gI2RlZmluZSBGRUFUVVJFX1gyQVBJQ1x0XHRCSVRfVUxMKDIpXG4gI2RlZmluZSBGRUFUVVJFX05YXHRcdEJJVF9VTEwoMylcbiAjZGVmaW5lIEZFQVRVUkVfR1RcdFx0QklUX1VMTCg0KVxuKyNkZWZpbmUgRkVBVFVSRV9HQVBQSVx0XHRCSVRfVUxMKDUpXG4gI2RlZmluZSBGRUFUVVJFX0lBXHRcdEJJVF9VTEwoNilcbiAjZGVmaW5lIEZFQVRVUkVfR0FcdFx0QklUX1VMTCg3KVxuICNkZWZpbmUgRkVBVFVSRV9IRVx0XHRCSVRfVUxMKDgpXG5AQCAtMTEzLDYgKzExNCw3IEBAXG4gLyogRXh0ZW5kZWQgRmVhdHVyZSAyIEJpdHMgKi9cbiAjZGVmaW5lIEZFQVRVUkVfU0VWU05QSU9fU1VQXHRCSVRfVUxMKDEpXG4gI2RlZmluZSBGRUFUVVJFX0dDUjNUUlBNT0RFXHRCSVRfVUxMKDMpXG4rI2RlZmluZSBGRUFUVVJFX0dBUFBJRElTU1VQXHRCSVRfVUxMKDQpXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBcdEdFTk1BU0tfVUxMKDcsIDUpXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBfR0FNKHgpIFxcXG4gXHQoRklFTERfR0VUKEZFQVRVUkVfU05QQVZJQ1NVUCwgeCkgPT0gMHgxKVxuQEAgLTE5MCw2ICsxOTIsNyBAQFxuICNkZWZpbmUgQ09OVFJPTF9FUEhfRU5cdFx0NDVcbiAjZGVmaW5lIENPTlRST0xfWFRfRU5cdFx0NTBcbiAjZGVmaW5lIENPTlRST0xfSU5UQ0FQWFRfRU5cdDUxXG4rI2RlZmluZSBDT05UUk9MX0dBUFBJX0VOXHQ1NVxuICNkZWZpbmUgQ09OVFJPTF9HQ1IzVFJQTU9ERVx0NThcbiAjZGVmaW5lIENPTlRST0xfSVJUQ0FDSEVESVNcdDU5XG4gI2RlZmluZSBDT05UUk9MX1NOUEFWSUNfRU5cdDYxXG5AQCAtMTAwNCw3ICsxMDA3LDggQEAgdW5pb24gaXJ0ZV9nYV9sbyB7XG4gXHRcdCAgICBub19mYXVsdFx0OiAxLFxuIFx0XHQgICAgLyogLS0tLS0tICovXG4gXHRcdCAgICBnYV9sb2dfaW50clx0OiAxLFxuLVx0XHQgICAgcnN2ZDFcdDogMyxcbitcdFx0ICAgIHJzdmQxXHQ6IDIsXG4rXHRcdCAgICBnYXBwaV9kaXNcdDogMSxcbiBcdFx0ICAgIGlzX3J1blx0OiAxLFxuIFx0XHQgICAgLyogLS0tLS0tICovXG4gXHRcdCAgICBndWVzdF9tb2RlXHQ6IDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXG5pbmRleCAzYmRiMzgwZDIzZTlhOS4uMjdmZmIyMTg0YmYyOTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xuQEAgLTE2MCw2ICsxNjAsOSBAQCB1OCBhbWRfaW9tbXVfaHB0X2xldmVsO1xuIC8qIEd1ZXN0IHBhZ2UgdGFibGUgbGV2ZWwgKi9cbiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbCA9IFBBR0VfTU9ERV80X0xFVkVMO1xuIFxuK2Jvb2wgYW1kX2lvbW11X2dhcHBpO1xuK0VYUE9SVF9TWU1CT0woYW1kX2lvbW11X2dhcHBpKTtcbitcbiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyID0gQU1EX0lPTU1VX0dVRVNUX0lSX1ZBUElDO1xuIHN0YXRpYyBpbnQgYW1kX2lvbW11X3h0X21vZGUgPSBJUlFfUkVNQVBfWEFQSUNfTU9ERTtcbiBcbkBAIC00NjIsNiArNDY1LDkgQEAgc3RhdGljIHZvaWQgaW9tbXVfZGlzYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSlcbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUxPR19FTik7XG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FJTlRfRU4pO1xuIFxuK1x0LyogRGlzYWJsZSBJT01NVSBHQVBQSSAqL1xuK1x0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbitcbiBcdC8qIERpc2FibGUgSU9NTVUgUFBSIGxvZ2dpbmcgKi9cbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJMT0dfRU4pO1xuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX1BQUklOVF9FTik7XG5AQCAtMjk5Niw2ICszMDAyLDEyIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11O1xuIFxuIFx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcbitcdFx0LyogRGlzYWJsZSBHQVBQSSwgZG8gbm90IGNoZWNrIGFtZF9pb21tdV9nYXBwaSBhcyBpdCBtYXkgYmVcbitcdFx0ICogZmFsc2UgaW4gbmV3IGtleGVjIGtlcm5lbCBldmVuIHRob3VnaCBwcmV2aW91cyBrZXJuZWwgaGFzXG4rXHRcdCAqIGVuYWJsZWQgaXQuXG4rXHRcdCAqL1xuK1x0XHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBEaXNhYmxlIEdBTG9nIGlmIGFscmVhZHkgcnVubmluZy4gSXQgY291bGQgaGF2ZSBiZWVuIGVuYWJsZWRcbiBcdFx0ICogaW4gdGhlIHByZXZpb3VzIGJvb3QgYmVmb3JlIGtkdW1wLlxuQEAgLTMwMzUsMTAgKzMwNDcsMTkgQEAgc3RhdGljIHZvaWQgZW5hYmxlX2lvbW11c192YXBpYyh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQyhhbWRfaW9tbXVfZ3Vlc3RfaXIpKSkge1xuK1x0XHRwcl93YXJuKFwiR0FQUEkgaXMgbm90IHN1cHBvcnRlZC5cXG5cIik7XG4rXHRcdGFtZF9pb21tdV9nYXBwaSA9IGZhbHNlO1xuK1x0fVxuK1xuIFx0LyogRW5hYmxpbmcgR0FNIGFuZCBTTlBBVklDIHN1cHBvcnQgKi9cbiBcdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XG4tXHRcdGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHxcbi1cdFx0ICAgIGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKVxuK1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpKVxuK1x0XHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbitcdFx0ZWxzZSBpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XG4rXHRcdFx0IGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKVxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0aW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FNX0VOKTtcbkBAIC0zMDQ3LDcgKzMwNjgsOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXG4gXHR9XG4gXG4gXHRhbWRfaW9tbXVfaXJxX29wcy5jYXBhYmlsaXR5IHw9ICgxIFx1MDAzY1x1MDAzYyBJUlFfUE9TVElOR19DQVApO1xuLVx0cHJfaW5mbyhcIlZpcnR1YWwgQVBJQyBlbmFibGVkXFxuXCIpO1xuK1x0cHJfaW5mbyhcIlZpcnR1YWwgQVBJQyBlbmFibGVkIHdpdGggJXNcXG5cIixcbitcdFx0YW1kX2lvbW11X2dhcHBpID8gXCJHQVBQSVwiIDogXCJHQUxPR1wiKTtcbiAjZW5kaWZcbiB9XG4gXG5AQCAtMzczOCw2ICszNzYwLDggQEAgc3RhdGljIGludCBfX2luaXQgcGFyc2VfYW1kX2lvbW11X29wdGlvbnMoY2hhciAqc3RyKVxuIFx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcInYyX3Bnc2l6ZXNfb25seVwiLCAxNSkgPT0gMCkge1xuIFx0XHRcdHByX2luZm8oXCJSZXN0cmljdGluZyBWMSBwYWdlLXNpemVzIHRvIDRLaUIvMk1pQi8xR2lCXCIpO1xuIFx0XHRcdGFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7XG4rXHRcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFwiZ2FwcGlcIiwgNSkgPT0gMCkge1xuK1x0XHRcdGFtZF9pb21tdV9nYXBwaSA9IHRydWU7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cHJfbm90aWNlKFwiVW5rbm93biBvcHRpb24gLSAnJXMnXFxuXCIsIHN0cik7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xuaW5kZXggNTdkYzhmYWJjN2Q5YjkuLmIyMjZkMzk0MWNiOWI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xuQEAgLTM5NTksMTkgKzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbiBcdC5kZWFjdGl2YXRlID0gaXJxX3JlbWFwcGluZ19kZWFjdGl2YXRlLFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbi1cdFx0XHRcdCAgYm9vbCBnYV9sb2dfaW50cilcbitzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4ge1xuLVx0aWYgKGNwdSBcdTAwM2U9IDApIHtcbitcdGlmIChmbGFncyBcdTAwMjYgQU1EX0lPTU1VX0ZMQUdfVkNQVV9SVU5OSU5HKSB7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9XG4tXHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oY3B1KTtcbitcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xuIFx0XHRlbnRyeS1cdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPVxuLVx0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGNwdSk7XG4rXHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcbiBcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IHRydWU7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IGZhbHNlO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xuLVx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBnYV9sb2dfaW50cjtcbitcdFx0Ym9vbCBwb3N0ZWRfaW50ciA9ICEhKGZsYWdzIFx1MDAyNiBBTURfSU9NTVVfRkxBR19QT1NURURfSU5UUik7XG4rXG4rXHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXBvc3RlZF9pbnRyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHRcdFx0ICAgY2hlY2tfZmVhdHVyZTIoRkVBVFVSRV9HQVBQSURJU1NVUCk7XG4rXHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xuK1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9XG4rXHRcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xuK1x0XHRcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy5kZXN0aW5hdGlvbiA9IEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XG4rXHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gcG9zdGVkX2ludHI7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5AQCAtMzk5Miw3ICs0MDAyLDcgQEAgc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbiAgKiBhbmQgdGh1cyBkb24ndCByZXF1aXJlIGFuIGludmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIElPTU1VIGNvbnN1bWVzIGZyZXNoXG4gICogaW5mb3JtYXRpb24uXG4gICovXG4taW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbitpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS1cdTAwM2VlbnRyeTtcbkBAIC00MDA2LDE0ICs0MDE2LDE0IEBAIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4gXHRpZiAoIWlyX2RhdGEtXHUwMDNlaW9tbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbitcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLVx1MDAzZWlvbW11LCBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuZGV2aWQsXG4gXHRcdFx0XHRpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcbiBcbi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbitpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhO1xuIFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXHUwMDNlZW50cnk7XG5AQCAtNDAzNCw5ICs0MDQ0LDEzIEBAIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuIFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmd1ZXN0X21vZGUgID0gMTtcbiBcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy5nYV9yb290X3B0ciAgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2Ffcm9vdF9wdHI7XG4gXHRlbnRyeS1cdTAwM2VoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLVx1MDAzZWdhX3ZlY3Rvcjtcbi1cdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2FfdGFnO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbitcdGlmIChhbWRfaW9tbXVfZ2FwcGkpXG4rXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SO1xuK1x0ZWxzZVxuK1x0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfdGFnID0gaXJfZGF0YS1cdTAwM2VnYV90YWc7XG4rXG4rXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIG1vZGlmeV9pcnRlX2dhKGlyX2RhdGEtXHUwMDNlaW9tbXUsIGlyX2RhdGEtXHUwMDNlaXJxXzJfaXJ0ZS5kZXZpZCxcbiBcdFx0XHQgICAgICBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbkBAIC00MTA3LDggKzQxMjEsOCBAQCBzdGF0aWMgaW50IGFtZF9pcl9zZXRfdmNwdV9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHZvaWQgKmluZm8pXG4gXHRcdGlyX2RhdGEtXHUwMDNlZ2FfdmVjdG9yID0gcGlfZGF0YS1cdTAwM2V2ZWN0b3I7XG4gXHRcdGlyX2RhdGEtXHUwMDNlZ2FfdGFnID0gcGlfZGF0YS1cdTAwM2VnYV90YWc7XG4gXHRcdGlmIChwaV9kYXRhLVx1MDAzZWlzX2d1ZXN0X21vZGUpXG4tXHRcdFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cdTAwM2VjcHUsXG4tXHRcdFx0XHRcdFx0XHQgICAgcGlfZGF0YS1cdTAwM2VnYV9sb2dfaW50cik7XG4rXHRcdFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cdTAwM2VhcGljaWQsXG4rXHRcdFx0XHRcdFx0XHQgICAgcGlfZGF0YS1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuaW5kZXggZWRjZWU5ZjUzMzVhNmYuLjg3ZTc2ZjYxN2VhMTg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuQEAgLTMwLDggKzMwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9XG4gLyogSU9NTVUgQVZJQyBGdW5jdGlvbiAqL1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSk7XG4gXG4tZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xuLWV4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cik7XG4rZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncyk7XG4rZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTtcbiBcbiAjZWxzZSAvKiBkZWZpbmVkKENPTkZJR19BTURfSU9NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19JUlFfUkVNQVApICovXG5AQCAtNDIsMTIgKzQyLDEyIEBAIGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuK3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuK3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzYsNCArNzYsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3NucF9kaXNhYmxlKHZvaWQpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGJvb2wgYW1kX2lvbW11X3Nldl90aW9fc3VwcG9ydGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2VuZGlmXG4gXG4rI2RlZmluZSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQgMFxuKyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfVkNQVV9SVU5OSU5HICBCSVQoMClcbitcbisjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUIDFcbisjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSICBCSVQoMSlcbitcbitleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XG4gI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTowMi42NDcxNDM4NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk5MTkwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdBUFBJIFN1cHBvcnQgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0J3MgdHJ5aW5nIHRvIGJyaW5nIGluIEdBUFBJIHN1cHBvcnQg4oCTIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMg4oCTIGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBhY3R1YWxseSBmdW5jdGlvbmFsLCBhbmQgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IGl0P1wiIExvb2tpbmcgYXQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucyDigJMgYGF2aWMuY2AsIGBzdm0uY2AsIGBpbml0LmNgLCBgaW9tbXUuY2Ag4oCTIGl0J3MgZGVmaW5pdGVseSB0b3VjaGluZyBzb21lIGtleSBhcmVhcy4gSXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgYW1kX2lvbW11PWdhcHBpYCBib290IHBhcmFtZXRlciwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBjb2RlIG1vZGlmaWVzIHNvbWUga2V5IGZ1bmN0aW9ucyBsaWtlIGBhdmljX3BpX3VwZGF0ZV9pcnRlYCwgYW5kIGFkZHMgc29tZSBuZXcgb25lcyB0b28uXG5cblRoZSBuZXh0IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIFwiQ2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGZlYXR1cmUgaW4gb3VyIHRlc3QgZW52aXJvbm1lbnRzPyBDYW4gd2UgcmVwcm9kdWNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nIGxpa2UgR0NFIG9yIFFFTVU/XCIgQWgsIHJpZ2h0LCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aCBLVk0gU1ZNIHNob3VsZCB3b3JrLiBUaGF0J3MgZ29vZC4gSG93ZXZlciwgd2hhdCBhYm91dCBzeXprYWxsZXI/IERvZXMgaXQgdGFyZ2V0IEFNRCBJT01NVSBvciBTVk0/IEZvcnR1bmF0ZWx5LCBzeXprYWxsZXIgZG9lcyBmdXp6IEtWTSwgaW5jbHVkaW5nIFNWTSwgc28gdGhlIHBvdGVudGlhbCBpcyB0aGVyZS5cblxuR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBLVk0gU1ZNIEFWSUMgYW5kIEFNRCBJT01NVSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBMb29rcyBsaWtlIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fQU1EYCwgYW5kIGBDT05GSUdfQU1EX0lPTU1VYCBhcmUgdGhlIGtleSBvbmVzIHRvIGludmVzdGlnYXRlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYGRyaXZlcnMvaW9tbXUvYW1kL2AgYW5kIGBhcmNoL3g4Ni9rdm0vYCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjA5LjA0NjMzODI3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk0MTUyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFNRF9JT01NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lvbW11L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXFx0Ym9vbCBcXFwiRW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVxcdGJvb2wgXFxcIkVuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjA5LjE3NTc2MzA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNjEwMzEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBmb3IgQU1EIEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBTUQgcHJvY2Vzc29ycyBhcmUgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIHRoaXMga2luZCBvZiBpbnZlc3RpZ2F0aW9uLCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggeDg2LCB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCBpcyBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBmZWF0dXJlcyBzcGVjaWZpYyB0byBBTUQgcHJvY2Vzc29ycyB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEkgbmVlZCB0byBsb2NhdGUgdGhlIGBLVk1fQU1EYCBzeW1ib2wsIHdoaWNoIGxpa2VseSBjb250cm9scyB2YXJpb3VzIEFNRC1zcGVjaWZpYyBLVk0gZnVuY3Rpb25hbGl0aWVzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjEyLjEwMTg3MDQ1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcwNjg5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjEyLjIwODk4MzMwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTI1NjY2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSB0dXJuaW5nLi4uXG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIEtWTSBhbmQgSU9NTVUgY29uZmlndXJhdGlvbnMg4oCTIGBLVk1fQU1EYCBhbmQgYEFNRF9JT01NVWAgaW4gcGFydGljdWxhci4gQnV0LCB3YWl0Li4uIHdoYXQgYWJvdXQgYElSUV9SRU1BUGA/IFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlLCBpc24ndCBpdD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBBTURfSU9NTVVgIGFuZCBgSVJRX1JFTUFQYC4gRG9lcyBgQU1EX0lPTU1VYCAqZGVwZW5kKiBvbiBgSVJRX1JFTUFQYCwgbWVhbmluZyB0aGF0IGl0IHJlcXVpcmVzIGl0IHRvIGZ1bmN0aW9uPyBPciBkb2VzIGBBTURfSU9NTVVgICpzZWxlY3QqIGl0LCBtYWtpbmcgYElSUV9SRU1BUGAgYSBzb3J0IG9mIGltcGxpY2l0IHJlcXVpcmVtZW50IHRoYXQgaXMgdGFrZW4gY2FyZSBvZiBhdXRvbWF0aWNhbGx5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gTGV0J3MgZGVsdmUgaW4gYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjE1LjUwMTU1NTQ3MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1OTc3OTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBJUlFfUkVNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9hbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OToxNS42MDgxNjY5NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgxNDA3NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkNoZWNraW5nIGBBTURfSU9NTVVgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGEgbWV0aG9kaWNhbCBjaGVjayBvZiB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYEFNRF9JT01NVWAuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LiBJJ20gdGhpbmtpbmcsIFwid2hhdCBleHRlcm5hbCBlbGVtZW50cyBpbnRlcmFjdCB3aXRoIHRoaXMgZmVhdHVyZT8gV2hhdCBjb21wb25lbnRzIGFyZSByZWx5aW5nIG9uIGl0LCBhbmQgd2hhdCwgaW4gdHVybiwgZG9lcyBpdCBkZXBlbmQgb24/XCIgSSBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSBrZXJuZWwgbW9kdWxlcyBpbnZvbHZlZCwgdGhlaXIgdmVyc2lvbiBjb21wYXRpYmlsaXR5LCBhbnkgbmVjZXNzYXJ5IGZpcm13YXJlIHVwZGF0ZXMsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb25zIG9uIHRoaXMgc3lzdGVtLiBNeSBwcmlvcml0eSBpcyB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHN0aWNraW5nIHBvaW50cyAqYmVmb3JlKiBJIGV2ZW4gYmVnaW4gdG8gaW1wbGVtZW50IG9yIHRyb3VibGVzaG9vdCBhbnl0aGluZyBmdXJ0aGVyLiBUaGlzIGludm9sdmVzIGEgZGVlcCBkaXZlIGludG8gdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGtub3duIGNvbXBhdGliaWxpdHkgbWF0cmljZXMuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgYSBzdGFibGUgYW5kIHByb3Blcmx5IGZ1bmN0aW9uaW5nIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OToxOC41ODk1Nzg0MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjI3NzU2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXFx0Ym9vbCBcXFwiRW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVxcdGJvb2wgXFxcIkVuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjE5LjAyNTg2NDAyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTgxMTQxMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgdGhlIEFNRCBJT01NVSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgYGRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBBTUQgSU9NTVUgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIGNvcmUgc2V0dGluZ3Mg4oCTIHRoZSBvbmVzIHRoYXQgZGVmaW5lIHRoZSB2ZXJ5IGZvdW5kYXRpb24gb2YgaG93IHRoaXMgZHJpdmVyIGlzIGJ1aWx0IGFuZCBlbmFibGVkLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCBzdGF0ZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCdzIGluIHBsYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzZXR0aW5ncyBwbGF5IHdpdGggdGhlIGJyb2FkZXIgSU9NTVUgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsIGFuZCBob3cgdGhleSBpbXBhY3QgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgd2lsbCBwbGF5IHdpdGggYW55IG90aGVyIHJlbGF0ZWQgaGFyZHdhcmUuIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkLXRpbWUgY29udHJvbCBhbmQgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgY3JpdGljYWwgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjIyLjIwNzAwOTYyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTg2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0IyBBTUQgSU9NTVUgc3VwcG9ydFxcbiAgIDM6XFx0Y29uZmlnIEFNRF9JT01NVVxcbiAgIDQ6XFx0XFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRzZWxlY3QgU1dJT1RMQlxcbiAgIDY6XFx0XFx0c2VsZWN0IFBDSV9NU0lcXG4gICA3OlxcdFxcdHNlbGVjdCBQQ0lfQVRTXFxuICAgODpcXHRcXHRzZWxlY3QgUENJX1BSSVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QQVNJRFxcbiAgMTA6XFx0XFx0c2VsZWN0IElSUV9NU0lfTElCXFxuICAxMTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuICAxMjpcXHRcXHRzZWxlY3QgSU9NTVVfQVBJXFxuICAxMzpcXHRcXHRzZWxlY3QgSU9NTVVfSU9WQVxcbiAgMTQ6XFx0XFx0c2VsZWN0IElPTU1VX1NWQVxcbiAgMTU6XFx0XFx0c2VsZWN0IElPTU1VX0lPUEZcXG4gIDE2OlxcdFxcdHNlbGVjdCBJT01NVUZEX0RSSVZFUiBpZiBJT01NVUZEXFxuICAxNzpcXHRcXHRzZWxlY3QgR0VORVJJQ19QVFxcbiAgMTg6XFx0XFx0c2VsZWN0IElPTU1VX1BUXFxuICAxOTpcXHRcXHRzZWxlY3QgSU9NTVVfUFRfQU1EVjFcXG4gIDIwOlxcdFxcdHNlbGVjdCBJT01NVV9QVF9YODZfNjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6MjIuMjA4MDEzNjk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTA5ODc2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggSU9NTVUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gc2F0aXNmaWVkIHRoYXQgYEFNRF9JT01NVWAgaXMgdGhlIGNvcnJlY3Qgc2V0dGluZy4gSXQncyB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5IEkgbmVlZC4gQnV0LCBJJ20gbm90IHN0b3BwaW5nIHRoZXJlOyBsZXQncyBkcmlsbCBkb3duIGEgYml0IGZ1cnRoZXIuIE5vdywgd2hhdCBhYm91dCBgSVJRX1JFTUFQYD8gVGhhdCdzIHRoZSBuZXh0IGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoYXQgb3B0aW9uIGRlZmluZWQ/IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBFaXRoZXIgYGFyY2gveDg2L0tjb25maWdgIG9yIGBkcml2ZXJzL2lvbW11L0tjb25maWdgIHNob3VsZCBoYXZlIHRoZSBkZXRhaWxzIEknbSBhZnRlciwgYW5kIHRoYXQgc2hvdWxkIGNsYXJpZnkgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjI1LjI5OTAwODczOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxNTAzOTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVJRX1JFTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L0tjb25maWc9MTk5PXNvdXJjZSBcXFwiZHJpdmVycy9pb21tdS9yaXNjdi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0yMDAtXFxuZHJpdmVycy9pb21tdS9LY29uZmlnOjIwMTpjb25maWcgSVJRX1JFTUFQXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBJbnRlcnJ1cHQgUmVtYXBwaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OToyOC4wMTQwNTcwOTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNTIzMjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBJUlFfUkVNQVAgQ29uZmlndXJhdGlvbiBpbiB0aGUgSU9NTVUgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgSVJRX1JFTUFQYC4gSSBzdXNwZWN0IEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG90ZW50aWFsIGJ1aWxkLXRpbWUgY29uc3RyYWludHMgb3IgY29uZmxpY3RzLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgYXMgaW5jb3JyZWN0IHNldHRpbmdzIGhlcmUgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb3IgZXZlbiBzeXN0ZW0gaW5zdGFiaWxpdHkgd2hlbiBoYW5kbGluZyBpbnRlcnJ1cHQgcmVtYXBwaW5nLiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgSU9NTVUgaW1wbGVtZW50YXRpb25zIGFuZCBpZiB0aGVyZSBhcmUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyBhdCBwbGF5LiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJJ2xsIG5lZWQgdG8gbm90ZSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgY29uZGl0aW9uYWxzIG9yIGxpbWl0YXRpb25zLiBUaGUgZ29hbCBpcyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmFtaWZpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBJJ20gY29uc2lkZXJpbmcgd2l0aGluIHRoaXMgc2VjdGlvbiwgc28gSSdtIHNjYW5uaW5nIGZvciBhbnkgc3VidGxlIGRldGFpbHMgdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTozMS43NDkyOTI3NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDE6XFx0Y29uZmlnIElSUV9SRU1BUFxcbiAyMDI6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1xcXCJcXG4gMjAzOlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFg4Nl9JT19BUElDIFxcdTAwMjZcXHUwMDI2IFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgQUNQSVxcbiAyMDQ6XFx0XFx0c2VsZWN0IElSUV9NU0lfTElCXFxuIDIwNTpcXHRcXHRoZWxwXFxuIDIwNjpcXHRcXHQgIFN1cHBvcnRzIEludGVycnVwdCByZW1hcHBpbmcgZm9yIElPLUFQSUMgYW5kIE1TSSBkZXZpY2VzLlxcbiAyMDc6XFx0XFx0ICBUbyB1c2UgeDJhcGljIG1vZGUgaW4gdGhlIENQVSdzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvclxcbiAyMDg6XFx0XFx0ICB0byBzdXBwb3J0IHBsYXRmb3JtcyB3aXRoIENQVSdzIGhhdmluZyBcXHUwMDNlIDggYml0IEFQSUMgSUQsIHNheSBZLlxcbiAyMDk6XFx0XFxuIDIxMDpcXHQjIE9NQVAgSU9NTVUgc3VwcG9ydFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTozMS43NDk0MjE1NjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgwMTAwODU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgSVJRX1JFTUFQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBgSVJRX1JFTUFQYCBjb25maWd1cmF0aW9uIGxvb2tzIHByb21pc2luZy4gVGhlIHBhdGNoIHRhcmdldHMgYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCBhbmQgYGRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNgLCB3aGljaCBtYWtlcyBpdCBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZDogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuXG5cbkxldCBtZSBxdWlja2x5IGNoZWNrIHdoaWNoIG9mIHRoZXNlIGFyZSBzdGF0aWMuIEdvb2QsIGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBhbmQgYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgIGFyZSBhbGwgc3RhdGljLiBgYW1kX2lvbW11X3VwZGF0ZV9nYWAgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAgYXJlIGV4cG9ydGVkLCBzbyB0aGF0J3MgaGVscGZ1bC4gYGF2aWNfcGlfdXBkYXRlX2lydGVgIGlzIHByZXNlbnQgYnV0IG5vdCBzdGF0aWMsIHNvIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIHRoYXQgYXMgd2VsbCwgdGhvdWdoIGl0IGFwcGVhcnMgdG8gYmUgYW4gZXhpc3RpbmcgZnVuY3Rpb24uXG5cbk9rYXksIGxldCdzIG1ha2UgYSBjbGVhciBsaXN0IG9mIHRoZSByZWxldmFudCBzeW1ib2xzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpbiBtb3JlIGRldGFpbDogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuXG5cbk5vdywgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBsaXN0ZWQgYXMgYEtWTV9BTURgLCBgQU1EX0lPTU1VYCwgYW5kIG9mIGNvdXJzZSwgYElSUV9SRU1BUGAuIFRoYXQncyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQuXG5cbkhvbGQgb24sIEkgc2VlIGEgcG90ZW50aWFsIGdvdGNoYS4uLiBgYW1kX2lvbW11X2dhcHBpYCBpcyBhICpib290IHBhcmFtZXRlciouIFN5emthbGxlciBtaWdodCBub3QgcGFzcyB0aGF0IGJ5IGRlZmF1bHQhIFRoZSBwcm9ibGVtIGlzIHRoYXQgSSBjYW4ndCBkaXJlY3RseSBjb250cm9sIGJvb3QgcGFyYW1ldGVycyB1c2luZyB0aGUgc2V0LXJlc3VsdHMgbWVjaGFuaXNtLiBJIGNhbiBvbmx5IGNvbnRyb2wgY29uZmlncyBhbmQgZm9jdXMgc3ltYm9scy4gVGhlIHByb21wdCBzdGF0ZXMgdGhhdCBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBTbywgaXMgR0FQUEkgcmVhY2hhYmxlICp3aXRob3V0KiB0aGF0IGJvb3QgcGFyYW1ldGVyPyBJIG5lZWQgdG8gY2hlY2sgaG93IEdBUFBJIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgcmVhY2hhYmxlLiBJJ2xsIGNoZWNrIGBwYXJzZV9hbWRfaW9tbXVfb3B0aW9uc2AgdG8gZGV0ZXJtaW5lIGhvdyB0aGF0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTozOS41NTA0MzM1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3NTU6XFx0XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcImlydGNhY2hlZGlzXFxcIiwgMTEpID09IDApIHtcXG4zNzU2OlxcdFxcdFxcdFxcdGFtZF9pb21tdV9pcnRjYWNoZWRpcyA9IHRydWU7XFxuMzc1NzpcXHRcXHRcXHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcXFwibm9odWdlcGFnZXNcXFwiLCAxMSkgPT0gMCkge1xcbjM3NTg6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiUmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCXFxcIik7XFxuMzc1OTpcXHRcXHRcXHRcXHRhbWRfaW9tbXVfcGdzaXplX2JpdG1hcCA9IEFNRF9JT01NVV9QR1NJWkVTXzRLO1xcbjM3NjA6XFx0XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcInYyX3Bnc2l6ZXNfb25seVxcXCIsIDE1KSA9PSAwKSB7XFxuMzc2MTpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJSZXN0cmljdGluZyBWMSBwYWdlLXNpemVzIHRvIDRLaUIvMk1pQi8xR2lCXFxcIik7XFxuMzc2MjpcXHRcXHRcXHRcXHRhbWRfaW9tbXVfcGdzaXplX2JpdG1hcCA9IEFNRF9JT01NVV9QR1NJWkVTX1YyO1xcbjM3NjM6XFx0XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcImdhcHBpXFxcIiwgNSkgPT0gMCkge1xcbjM3NjQ6XFx0XFx0XFx0XFx0YW1kX2lvbW11X2dhcHBpID0gdHJ1ZTtcXG4zNzY1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMzc2NjpcXHRcXHRcXHRcXHRwcl9ub3RpY2UoXFxcIlVua25vd24gb3B0aW9uIC0gJyVzJ1xcXFxuXFxcIiwgc3RyKTtcXG4zNzY3OlxcdFxcdFxcdH1cXG4zNzY4OlxcdFxcbjM3Njk6XFx0XFx0XFx0c3RyICs9IHN0cmNzcG4oc3RyLCBcXFwiLFxcXCIpO1xcbjM3NzA6XFx0XFx0XFx0d2hpbGUgKCpzdHIgPT0gJywnKVxcbjM3NzE6XFx0XFx0XFx0XFx0c3RyKys7XFxuMzc3MjpcXHRcXHR9XFxuMzc3MzpcXHRcXG4zNzc0OlxcdFxcdHJldHVybiAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTozOS41NTA3MDkwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzYwMzgzNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGFtZF9pb21tdV9nYXBwaWAgU2V0dGluZyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGFtZF9pb21tdV9nYXBwaWAgZGVmYXVsdHMgdG8gYmVpbmcgZGlzYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBpdCBhbHNvIHByZXNlbnRzIGEgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgZGVmYXVsdCBpcyBmYWxzZSwgYW5kIHN5emthbGxlciwgd2hpY2ggaXMgdGhlIGZ1enplciB3ZSdyZSB1c2luZywgZG9lc24ndCBleHBsaWNpdGx5IHBhc3MgYGFtZF9pb21tdT1nYXBwaWAgYXMgYSBib290IHBhcmFtZXRlciwgdGhlbiBgYW1kX2lvbW11X2dhcHBpYCB3aWxsIHN0YXkgZGlzYWJsZWQuIEhtbSwgd2FpdCBhIHNlY29uZCwgSSByZW1lbWJlciBzeXprYWxsZXIgKmNhbiogaW5qZWN0IGJvb3QgcGFyYW1ldGVycywgaWYgd2UgY29uZmlndXJlIGl0IGNvcnJlY3RseS4gSG93ZXZlciwgYXMgYSByZXZpZXdlciBpbiB0aGlzIHNpdHVhdGlvbiwgSSBjYW4ndCBkaXJlY3RseSBzcGVjaWZ5IHRob3NlIGJvb3QgcGFyYW1ldGVycyBmb3IgdGhlIGZ1enplci4gVGhpcyBsaW1pdHMgbXkgYWJpbGl0eSB0byB0ZXN0IHRoaXMgY29uZmlndXJhdGlvbi5cblxuVGhpcyBicmluZ3MgdXAgYW5vdGhlciBxdWVzdGlvbjogaXMgYGFtZF9pb21tdV9nYXBwaWAgKm9ubHkqIGNvbnRyb2xsYWJsZSB2aWEgdGhlIGJvb3QgcGFyYW1ldGVyPyBJZiB0aGVyZSdzIGFub3RoZXIgbWVjaGFuaXNtLCBhIG1vZHVsZSBwYXJhbWV0ZXIgb3Igc29tZXRoaW5nLCB0aGF0IHdvdWxkIGNoYW5nZSB0aGluZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBjb250cm9sbGVkIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIuIExldCBtZSBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGFueSBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBhbWRfaW9tbXVfZ2FwcGlgIGFuZCBtYWtlIHN1cmUgaXQncyBub3QgYmVpbmcgc2V0IGFueXdoZXJlIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6NDMuOTExMDk2Nzk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg5OTkxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1kX2lvbW11X2dhcHBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaD00Mz1pbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcXG5kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaDo0NDpleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmgtNDUtZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXI7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MTYxPWludCBhbWRfaW9tbXVfZ3B0X2xldmVsID0gUEFHRV9NT0RFXzRfTEVWRUw7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTE2Mi1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MTYzOmJvb2wgYW1kX2lvbW11X2dhcHBpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzoxNjQ6RVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfZ2FwcGkpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0xNjUtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9Mjk5OD1zdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzAwNC1cXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDA1OlxcdFxcdC8qIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwMDYtXFx0XFx0ICogZmFsc2UgaW4gbmV3IGtleGVjIGtlcm5lbCBldmVuIHRob3VnaCBwcmV2aW91cyBrZXJuZWwgaGFzXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA0OS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzA1MDpcXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTEtXFx0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTMtXFx0XFx0cHJfd2FybihcXFwiR0FQUEkgaXMgbm90IHN1cHBvcnRlZC5cXFxcblxcXCIpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDU0OlxcdFxcdGFtZF9pb21tdV9nYXBwaSA9IGZhbHNlO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU1LVxcdH1cXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU4LVxcdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNTk6XFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA2MC1cXHRcXHRcXHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA3MS1cXHRwcl9pbmZvKFxcXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxcXG5cXFwiLFxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDcyOlxcdFxcdGFtZF9pb21tdV9nYXBwaSA/IFxcXCJHQVBQSVxcXCIgOiBcXFwiR0FMT0dcXFwiKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA3My0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zNzM2PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FtZF9pb21tdV9vcHRpb25zKGNoYXIgKnN0cilcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzYzLVxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFxcXCJnYXBwaVxcXCIsIDUpID09IDApIHtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6Mzc2NDpcXHRcXHRcXHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzY1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NjI9c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTczLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6Mzk3NDpcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTc1LVxcdFxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXBvc3RlZF9pbnRyIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwMjY9aW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA0Ny1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjQwNDg6XFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNDktXFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTo0NC4zMzAxMDQ0ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5MzM2OTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoaXMgZmVhdHVyZSwgd2hhdGV2ZXIgaXQgaXMsIGlzICpvbmx5KiBlbmFibGVkIHRocm91Z2ggYSBib290IHBhcmFtZXRlci4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIG9uIHRoZSBzdXJmYWNlLiBIb3dldmVyLCB0aGUgbW9yZSBJIGRpZyBpbnRvIHRoaXMgcGF0Y2gsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIGJyb2FkZXIgdGhhbiB0aGF0IGluaXRpYWwgbGltaXRhdGlvbiBzdWdnZXN0cy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmljYXRpb25zIHRvIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYCDigJMgdGhlc2UgZnVuY3Rpb25zJyBzaWduYXR1cmVzIGFuZCBjb3JlIGxvZ2ljIGhhdmUgYmVlbiBhbHRlcmVkLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGF0IHRoZXkncmUgY2FsbGVkIGV2ZW4gd2hlbiB0aGlzIGJvb3QgcGFyYW1ldGVyIGlzbid0IGV4cGxpY2l0bHkgc2V0LlxuXG5Gb3IgZXhhbXBsZSwgSSdtIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCByaWdodCBub3cuIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCBjYWxscyBib3RoIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYC4gQW5kIGd1ZXNzIHdoYXQ/IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCAqZG9lc24ndCogY2hlY2sgYGFtZF9pb21tdV9nYXBwaWAuIEl0IGNhbGxzIHRoZXNlIGZ1bmN0aW9ucyByZWdhcmRsZXNzIG9mIHRoZSBib290IHBhcmFtZXRlcidzIHNldHRpbmcuXG5cblRoZSBsb2dpYyB3aXRoaW4gYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgIHNlZW1zIHRvIGhhbmRsZSBib3RoIHNjZW5hcmlvcywgd2hldGhlciBgYW1kX2lvbW11X2dhcHBpYCBpcyB0cnVlIG9yIGZhbHNlLiBUaGVyZWZvcmUsIHRob3NlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYWJzb2x1dGVseSByZWFjaGFibGUsIGV2ZW4gd2l0aG91dCB0aGF0IHNwZWNpZmljIGJvb3QgcGFyYW1ldGVyIGJlaW5nIHNldCEgVGhhdCdzIGEgc2lnbmlmaWNhbnQgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCBoYW5kbGVzIHRoaXMgZHVhbGl0eS4gTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY2AgYW5kIGRpZyBpbnRvIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3QsIGV2ZW4gd2hlbiB0aGUgaW50ZW5kZWQgZmVhdHVyZSBpcyBkaXNhYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6NDkuNDIzNDc3MTk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDY5LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY5OlxcdHN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYXBpY2lkLFxcbjEwNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXFxuMTA3MTpcXHR7XFxuMTA3MjpcXHRcXHRpbnQgcG9zdGVkX2ludHIgPSAhIShhY3Rpb24gXFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKSBcXHUwMDNjXFx1MDAzY1xcbjEwNzM6XFx0XFx0XFx0XFx0ICBBTURfSU9NTVVfRkxBR19QT1NURURfSU5UUl9TSElGVDtcXG4xMDc0OlxcdFxcdGludCBpc192Y3B1X3J1bm5pbmcgPSAoYXBpY2lkIFxcdTAwM2U9IDApIFxcdTAwM2NcXHUwMDNjXFxuMTA3NTpcXHRcXHRcXHRcXHQgICAgICBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQ7XFxuMTA3NjpcXHRcXHRpbnQgZmxhZ3MgPSBwb3N0ZWRfaW50ciB8IGlzX3ZjcHVfcnVubmluZztcXG4xMDc3OlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjEwNzg6XFx0XFx0c3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkO1xcbjEwNzk6XFx0XFxuMTA4MDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jayk7XFxuMTA4MTpcXHRcXG4xMDgyOlxcdFxcdC8qXFxuMTA4MzpcXHRcXHQgKiBIZXJlLCB3ZSBnbyB0aHJvdWdoIHRoZSBwZXItdmNwdSBpcl9saXN0IHRvIHVwZGF0ZSBhbGwgZXhpc3RpbmdcXG4xMDg0OlxcdFxcdCAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS5cXG4xMDg1OlxcdFxcdCAqL1xcbjEwODY6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpIHtcXG4xMDg3OlxcdFxcdFxcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXFx1MDAyNlxcdTAwMjYgY3B1IFxcdTAwM2U9IDApXFxuMTA4ODpcXHRcXHRcXHRcXHRzdm0tXFx1MDAzZWdhcHBpX2NwdSA9IGNwdTtcXG4xMDg5OlxcdFxcdFxcdHJldHVybjtcXG4xMDkwOlxcdFxcdH1cXG4xMDkxOlxcdFxcbjEwOTI6XFx0XFx0aWYgKGlzX3ZjcHVfcnVubmluZyBcXHUwMDI2XFx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcXG4xMDkzOlxcdFxcdFxcdC8qIElGIGNvbmRpdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlICovXFxuMTA5NDpcXHRcXHRcXHRpZiAoc3ZtLVxcdTAwM2VnYXBwaV9jcHUgIT0gLTEpXFxuMTA5NTpcXHRcXHRcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdFxcdHN2bS1cXHUwMDNlZ2FwcGlfY3B1ID0gY3B1OyAvKiBTdG9yZSBjcHUgbm8gYXMgdGFyZ2V0IGZvciBHQVBQSSAqL1xcbjEwOTg6XFx0XFx0fSBlbHNlIGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcXG4xMDk5OlxcdFxcdFxcdGFwaWNpZCA9IGt2bV9jcHVfZ2V0X2FwaWNpZChzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuMTEwMDpcXHRcXHRcXHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbjExMDE6XFx0XFx0fVxcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlycWZkLCBcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcXG4xMTA0OlxcdFxcdFxcdHZvaWQgKmRhdGEgPSBpcnFmZC1cXHUwMDNlaXJxX2J5cGFzc19kYXRhO1xcbjExMDU6XFx0XFxuMTEwNjpcXHRcXHRcXHRpZiAoIShhY3Rpb24gXFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxcbjExMDc6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV91cGRhdGVfZ2EoZGF0YSwgYXBpY2lkLCBmbGFncykpO1xcbjExMDg6XFx0XFx0XFx0ZWxzZSBpZiAoaXNfdmNwdV9ydW5uaW5nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTo0OS40MjM2MTQ0MzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4NTEwNzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFNRCBJT01NVSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgYGFtZF9pb21tdV91cGRhdGVfZ2FgIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgIGFyZSBub3cgZ2V0dGluZyBjYWxsZWQgd2l0aCBgYXBpY2lkYCBhbmQgYGZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGNwdWAgYW5kIGBnYV9sb2dfaW50cmAgcGFyYW1ldGVycy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEFWSUMgY29kZSwgZXZlbiBpZiBHQVBQSSBpc24ndCBiZWluZyB1c2VkLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGF0IGBmbGFnc2AgaXMgYmVpbmcgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCB0byBgYW1kX2lvbW11X3VwZGF0ZV9nYWAuIFRoYXQgc291bmRzIGxpa2UgYSBnb29kIHBsYWNlIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBmdXp6aW5nLCBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBMZXQncyBzZWUuLi4gYEtWTV9BTURgLCBgQU1EX0lPTU1VYCwgYW5kIGBJUlFfUkVNQVBgLiBPa2F5LCBgS1ZNX0FNRGAgaXMgdHJpc3RhdGUsIGBBTURfSU9NTVVgIGFuZCBgSVJRX1JFTUFQYCBhcmUgYm9vbGVhbnMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19LVk1gIGlzIGltcGxpZWQgYnkgYENPTkZJR19LVk1fQU1EYCBhbmQgYENPTkZJR19JT01NVV9BUElgIGlzIHNlbGVjdGVkIGJ5IGBBTURfSU9NTVVgLlxuXG5Ob3csIEkgbmVlZCB0byBsaXN0IHRoZSBrZXkgc3ltYm9scyBhbmQgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGtlZXBpbmcgYW4gZXllIG9uLiBSaWdodCwgbGV0J3Mgc2VlOiBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgLCBhbmQgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAuXG5cbldhaXQgYSBtaW51dGUsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGlzIHN0YXRpYyB3aXRoaW4gYGRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNgLiBSaWdodCwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY2AgZm9yIHRoaXMgZnVuY3Rpb24uIEdvb2QgdG8ga25vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3ODUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTo1NS4zMDg3MjY0MTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzc4NDE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk2MS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjM5NjI6c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk2My17XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwMDU9aW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDE4LVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAxOTpcXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAyMC1cXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9NDAyNj1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDUyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDA1MzpcXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6NTUuNDM2NTI2ODUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzI0NzMwOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElPTU1VIGFuZCBBVklDIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGlzIGRlZmluaXRlbHkgc3RhdGljLiBUaGF0IG5hcnJvd3MgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24uIE15IGluaXRpYWwgbGlzdCBpbmNsdWRlczogYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAsIGBhdmljX3BpX3VwZGF0ZV9pcnRlYCwgYW5kLCBvZiBjb3Vyc2UsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGl0c2VsZi4gVGhlbiB0aGVyZSdzIHRoZSBBVklDLXNwZWNpZmljIGdyb3VwOiBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RgLCBhbmQgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLlxuXG5Ob3csIEknbSBqdXN0IGN1cmlvdXMgaWYgSSd2ZSBtaXNzZWQgYW55dGhpbmcsIHNvIEknbGwgcXVpY2tseSBjb25zaWRlciBgYXZpY19kZXN0cm95X3ZjcHVgLCBgYXZpY19pbml0X3ZjcHVgLCBhbmQgYHN2bV9pcl9saXN0X2RlbGAuIE15IGludHVpdGlvbiBzYXlzIHRoZXNlIG1pZ2h0IGJlIHJlbGV2YW50LCBzbyBJJ2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0IHRvIGNoZWNrIGxhdGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGF2aWNfZGVzdHJveV92Y3B1YCBhbmQgYGF2aWNfaW5pdF92Y3B1YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NTA6MDAuODA5MDA0MDMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2Mzg5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXZpY19kZXN0cm95X3ZjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTEwPXN0YXRpYyB2b2lkIGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkyMi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MjM6dm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo1MDowMC45MTE2NTMwMDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyMjkwNTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWNlbnQgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSBmb2N1c2VkIHNldCBvZiBjaGFuZ2VzIGhlcmUsIG1vc3RseSBjZW50ZXJlZCBhcm91bmQgdGhlIEFkdmFuY2VkIFZpcnR1YWwgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFWSUMpIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQU1EIElPTU1VLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGFkZGl0aW9uIG9mIGBhdmljX2Rlc3Ryb3lfdmNwdWAgaXMgYSBrZXkgYWRkaXRpb24sIGxpa2VseSBhIG5lY2Vzc2FyeSBjbGVhbnVwIGZ1bmN0aW9uIHRvIGNvbXBsZW1lbnQgZXhpc3RpbmcgVkNQVSBpbml0aWFsaXphdGlvbiBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBhdmljX2luaXRfdmNwdWAsIGBzdm1faXJfbGlzdF9kZWxgLCBgYXZpY19oYXJkd2FyZV9zZXR1cGAsIGBhdmljX2hhcmR3YXJlX3Vuc2V0dXBgLCBgZW5hYmxlX2lvbW11c192YXBpY2AsIGFuZCBgaW9tbXVfZGlzYWJsZWAgYWxsIHN1Z2dlc3QgZGVlcGVyIGludGVncmF0aW9uIGFuZCByZWZpbmVkIGNvbnRyb2wuXG5cbkZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucywgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXMgSSdtIHNlZWluZzogYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAsIGBhdmljX3BpX3VwZGF0ZV9pcnRlYCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYGF2aWNfZGVzdHJveV92Y3B1YCBhbmQgYHN2bV9pcl9saXN0X2RlbGAuIFRoZSBwcmVzZW5jZSBvZiBzbyBtYW55IElPTU1VIGFuZCBHQS1yZWxhdGVkIGZ1bmN0aW9uIGluZGljYXRlcyBhIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBndWVzdCBhZGRyZXNzaW5nIGFuZCBpbnRlcnJ1cHQgcm91dGluZy4gVGhlIEdBcHBJIHdha2V1cCBsaXN0IGZ1bmN0aW9ucywgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgaGFuZGxlciwgbG9vayBsaWtlIHRoZXkgYXJlIGNlbnRyYWwgdG8gdGhlIEFWSUMgaW50ZXJydXB0IGluamVjdGlvbiBwcm9jZXNzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBzdm1faXJfbGlzdF9kZWxgIGlzIHN0YXRpYy4gVGhhdCB3b3VsZCBpbXBhY3QgaXRzIHZpc2liaWxpdHkgYW5kIHNjb3BlLiBUaGF0IGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgb24gdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgY29uc2lzdGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjI2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjUwOjA1LjgzNDU2Mjc0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5MzM1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZtX2lyX2xpc3RfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vYXZpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTkzMT12b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkzNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5Mzc6c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05Mzgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTU1PWludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTYyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjk2MzpcXHRzdm1faXJfbGlzdF9kZWwoaXJxZmQpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NTA6MDUuOTI3NTA1NTY4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTc1NTU3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBhbmQgSXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGl0J3MgY2xlYXI6IHRoaXMgaXMgYSBzdGF0aWMgY29uZmlndXJhdGlvbi4gTm8gZHluYW1pYyBlbGVtZW50cyB0byBjb25zaWRlciBoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogd2UncmUgZGVhbGluZyB3aXRoIGBLVk1fQU1EYCwgYEFNRF9JT01NVWAsIGFuZCBgSVJRX1JFTUFQYC4gVGhlc2UgdGhyZWUgYXJlIHRoZSBrZXkgY29tcG9uZW50cy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBpbnRyb2R1Y2luZyBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzLCBvciBHQVBQSSwgc3BlY2lmaWNhbGx5IGZvciBBTUQncyBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBOb3csIHRoZSBtZWF0IG9mIHRoaXMgaXMgdGhhdCBpdCdzIG1vZGlmeWluZyB0aGUgdXBkYXRlIHByb2Nlc3MgZm9yIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cmllcyBhbmQgdGhlIHZDUFUgYWZmaW5pdHkgbG9naWMuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBhYnNvbHV0ZWx5IHJlbGV2YW50IHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2Ugd2hlbiB1c2luZyBRRU1VIHdpdGggS1ZNIFNWTS5cblxuV2hhdCdzIHJlYWxseSBpbnRlcmVzdGluZyBpcyB0aGF0IHRoZXNlIHVwZGF0ZXMgYXJlIGltcGFjdGluZyBjb3JlIEFWSUMgYW5kIElPTU1VIGxvZ2ljLCBldmVuIGlmIEdBUFBJIGlzbid0IGRpcmVjdGx5IGFjdGl2YXRlZCB0aHJvdWdoIGEgYm9vdCBwYXJhbWV0ZXIuIFRoaXMgbWVhbnMgdGhhdCBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQsIGV2ZW4gaWYgbm90IGRpcmVjdGx5IGVuYWJsZWQuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gY2hlY2sgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbkknbGwgcHJvY2VlZCB0byBzZXQgdGhlIHJlc3VsdHMgYmFzZWQgb24gdGhpcyB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU1NCwiT3V0cHV0VG9rZW5zIjoyNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NTA6MTEuNDI1MDY0MzQ1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTkyNDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIklSUV9SRU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlcIixcbiAgICBcImFtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlXCIsXG4gICAgXCJhdmljX3BpX3VwZGF0ZV9pcnRlXCIsXG4gICAgXCJfX2FtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19nYXBwaV93YWtldXBfaGFuZGxlclwiLFxuICAgIFwiYXZpY19kZXN0cm95X3ZjcHVcIixcbiAgICBcInN2bV9pcl9saXN0X2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cyAoR0FQUEkpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBJdCBtb2RpZmllcyB0aGUgaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB1cGRhdGVzIGFuZCB2Q1BVIGFmZmluaXR5IGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgUUVNVSB3aXRoIEtWTSBTVk0pLiBUaGUgY2hhbmdlcyBhbHRlciBjb3JlIEFWSUMgYW5kIElPTU1VIGxvZ2ljIGV2ZW4gd2hlbiBHQVBQSSBpcyBub3QgZXhwbGljaXRseSBlbmFibGVkIHZpYSBib290IHBhcmFtZXRlciwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJUlFfUkVNQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5XCIsXG4gICAgXCJhbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZVwiLFxuICAgIFwiYXZpY19waV91cGRhdGVfaXJ0ZVwiLFxuICAgIFwiX19hbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJcIixcbiAgICBcImF2aWNfZGVzdHJveV92Y3B1XCIsXG4gICAgXCJzdm1faXJfbGlzdF9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMgKEdBUFBJKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdXBkYXRlcyBhbmQgdkNQVSBhZmZpbml0eSBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIFFFTVUgd2l0aCBLVk0gU1ZNKS4gVGhlIGNoYW5nZXMgYWx0ZXIgY29yZSBBVklDIGFuZCBJT01NVSBsb2dpYyBldmVuIHdoZW4gR0FQUEkgaXMgbm90IGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgYm9vdCBwYXJhbWV0ZXIsIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowb26b6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 21:23:46 +0000 UTC FinishedAt: 2026-07-08 21:50:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "babe08404e1993697a523e60bc0f9d096ffe1ef8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "AMD_IOMMU", "IRQ_REMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "babe08404e1993697a523e60bc0f9d096ffe1ef8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "AMD_IOMMU", "IRQ_REMAP" ], "series_id": "c31b065e-df20-49aa-933a-359c037091e4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "avic_update_iommu_vcpu_affinity", "amd_iommu_update_ga", "amd_iommu_activate_guest_mode", "avic_pi_update_irte", "__amd_iommu_update_ga", "avic_add_vcpu_to_gappi_wakeup_list", "avic_remove_vcpu_from_gappi_wakeup_list", "avic_gappi_wakeup_handler", "avic_destroy_vcpu", "svm_ir_list_del" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O0lSUV9SRU1BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X3VwZGF0ZV9nYSYjMzQ7LAogICAgJiMzNDthbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSYjMzQ7LAogICAgJiMzNDthdmljX3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O19fYW1kX2lvbW11X3VwZGF0ZV9nYSYjMzQ7LAogICAgJiMzNDthdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0JiMzNDssCiAgICAmIzM0O2F2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2F2aWNfZGVzdHJveV92Y3B1JiMzNDssCiAgICAmIzM0O3N2bV9pcl9saXN0X2RlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMgKEdBUFBJKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdXBkYXRlcyBhbmQgdkNQVSBhZmZpbml0eSBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIFFFTVUgd2l0aCBLVk0gU1ZNKS4gVGhlIGNoYW5nZXMgYWx0ZXIgY29yZSBBVklDIGFuZCBJT01NVSBsb2dpYyBldmVuIHdoZW4gR0FQUEkgaXMgbm90IGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgYm9vdCBwYXJhbWV0ZXIsIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWFlYTAyYzVjNmE4MWE0YTcxNzk1MTI2YTI4ODVlMDBmYmRhYTE2NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMjE6NDk6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXG5pbmRleCAzN2I5NGY0ODRlZjMzOC4uNDBhMjIwNmEzM2MwOGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxuQEAgLTM1LDggJiM0MzszNSw4IEBAIHN0cnVjdCBhbWRfaW9tbXVfcGlfZGF0YSB7XG4gXHR1NjQgdmFwaWNfYWRkcjtcdFx0LyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgdkNQVSYjMzk7cyB2QVBJQy4gKi9cbiBcdHUzMiBnYV90YWc7XG4gXHR1MzIgdmVjdG9yO1x0XHQvKiBHdWVzdCB2ZWN0b3Igb2YgdGhlIGludGVycnVwdCAqL1xuLVx0aW50IGNwdTtcbi1cdGJvb2wgZ2FfbG9nX2ludHI7XG4mIzQzO1x0aW50IGFwaWNpZDtcbiYjNDM7XHRpbnQgZmxhZ3M7XG4gXHRib29sIGlzX2d1ZXN0X21vZGU7XG4gXHR2b2lkICppcl9kYXRhO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuaW5kZXggY2RkNWE2ZGM2NDZmMTEuLjgxODU4NDFkOWI4MTY1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG5AQCAtNjMsNiAmIzQzOzYzLDkgQEBcbiBcdGdhX3RhZztcdFx0XHRcdFx0XHRcdFx0XFxcbiB9KVxuIFxuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxpc3RfaGVhZCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShyYXdfc3BpbmxvY2tfdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrKTtcbiYjNDM7XG4gc3RhdGljX2Fzc2VydChfX0FWSUNfR0FUQUcoQVZJQ19WTV9JRF9NQVNLLCBBVklDX1ZDUFVfSURYX01BU0spID09IC0xdSk7XG4gXG4gI2RlZmluZSBBVklDX0FVVE9fTU9ERSAtMVxuQEAgLTg3NCw2ICYjNDM7ODc3LDkgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2spO1xuIFxuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbiYjNDM7XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XG4mIzQzO1xuIFx0aWYgKCFlbmFibGVfYXBpY3YgfHwgIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtODg2LDYgJiM0Mzs4OTIsNDIgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICp3YWtldXBfbGlzdDtcbiYjNDM7XHRyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OKGNwdSBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHdha2V1cF9saXN0ID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xuJiM0MztcdHNwaW5sb2NrID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XG4mIzQzO1x0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcbiYjNDM7XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0LCB3YWtldXBfbGlzdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHJhd19zcGlubG9ja190ICpzcGlubG9jaztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT04oY3B1IFx1MDAzYyAwKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3BpbmxvY2sgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcbiYjNDM7XHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiYjNDM7e1xuJiM0MztcdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbiYjNDM7XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuQEAgLTg5NiwxMyAmIzQzOzkzOCwxOCBAQCBzdGF0aWMgdm9pZCBzdm1faXJfbGlzdF9kZWwoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfdmNwdTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4gXG4gXHRpZiAoIXZjcHUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0c3ZtID0gdG9fc3ZtKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIFx0bGlzdF9kZWwoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0KTtcbi1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRvX3N2bSh2Y3B1KS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpXG4mIzQzO1x0XHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuQEAgLTkzMiw2ICYjNDM7OTc5LDggQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIFx0XHR1NjQgZW50cnk7XG4gXHRcdGludCByZXQ7XG4mIzQzO1x0XHRpbnQgcG9zdGVkX2ludHI7XG4mIzQzO1x0XHRib29sIGlzX3ZjcHVfd2FpdGluZyA9IGZhbHNlO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbFxuQEAgLTk0OSwxNSAmIzQzOzk5OCwyMyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICovXG4gXHRcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG4gXHRcdGlmIChlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcbi1cdFx0XHRwaV9kYXRhLmNwdSA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcbiYjNDM7XHRcdFx0cGlfZGF0YS5hcGljaWQgPSBlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0s7XG4mIzQzO1x0XHRcdHBpX2RhdGEuZmxhZ3MgPSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkc7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGlfZGF0YS5jcHUgPSAtMTtcbi1cdFx0XHRwaV9kYXRhLmdhX2xvZ19pbnRyID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XG4mIzQzO1x0XHRcdHBvc3RlZF9pbnRyID0gISEoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xuJiM0MztcdFx0XHRwaV9kYXRhLmZsYWdzID0gcG9zdGVkX2ludHIgXHUwMDNjXHUwMDNjIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUO1xuJiM0MztcdFx0XHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XG4mIzQzO1x0XHRcdFx0cGlfZGF0YS5hcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4mIzQzO1x0XHRcdFx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRcdFx0XHRpc192Y3B1X3dhaXRpbmcgPSB0cnVlO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgXHUwMDI2cGlfZGF0YSk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBSZXZlcnQgdG8gbGVnYWN5IG1vZGUgaWYgdGhlIElPTU1VIGRpZG4mIzM5O3QgcHJvdmlkZSBtZXRhZGF0YVxuQEAgLTk2NiwxMiAmIzQzOzEwMjMsMTcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqL1xuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFwaV9kYXRhLmlyX2RhdGEpKSB7XG4gXHRcdFx0aXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFx0XHR9XG4gXG4gXHRcdGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0LCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gXHRcdHJldHVybiAwO1xuJiM0MztnYXBwaV9lcnJfb3V0OlxuJiM0MztcdFx0aWYgKGlzX3ZjcHVfd2FpdGluZylcbiYjNDM7XHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0cmV0dXJuIGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XG4gfVxuQEAgLTEwMDQsMTAgJiM0MzsxMDY2LDE0IEBAIGVudW0gYXZpY192Y3B1X2FjdGlvbiB7XG4gXHRBVklDX1NUQVJUX0JMT0NLSU5HXHQ9IEJJVCgxKSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuLVx0XHRcdFx0XHQgICAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiYjNDM7c3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhcGljaWQsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50IGNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiB7XG4tXHRib29sIGdhX2xvZ19pbnRyID0gKGFjdGlvbiBcdTAwMjYgQVZJQ19TVEFSVF9CTE9DS0lORyk7XG4mIzQzO1x0aW50IHBvc3RlZF9pbnRyID0gISEoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKSBcdTAwM2NcdTAwM2NcbiYjNDM7XHRcdFx0ICBBTURfSU9NTVVfRkxBR19QT1NURURfSU5UUl9TSElGVDtcbiYjNDM7XHRpbnQgaXNfdmNwdV9ydW5uaW5nID0gKGFwaWNpZCBcdTAwM2U9IDApIFx1MDAzY1x1MDAzY1xuJiM0MztcdFx0XHQgICAgICBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQ7XG4mIzQzO1x0aW50IGZsYWdzID0gcG9zdGVkX2ludHIgfCBpc192Y3B1X3J1bm5pbmc7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZDtcbiBcbkBAIC0xMDE3LDE2ICYjNDM7MTA4MywzMCBAQCBzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbiBcdCAqIEhlcmUsIHdlIGdvIHRocm91Z2ggdGhlIHBlci12Y3B1IGlyX2xpc3QgdG8gdXBkYXRlIGFsbCBleGlzdGluZ1xuIFx0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB0YXJnZXRpbmcgdGhpcyB2Y3B1LlxuIFx0ICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpXG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4mIzQzO1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBjcHUgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gY3B1O1xuIFx0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfdmNwdV9ydW5uaW5nIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbiYjNDM7XHRcdC8qIElGIGNvbmRpdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlICovXG4mIzQzO1x0XHRpZiAoc3ZtLVx1MDAzZWdhcHBpX2NwdSAhPSAtMSlcbiYjNDM7XHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1xuJiM0MztcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IGNwdTsgLyogU3RvcmUgY3B1IG5vIGFzIHRhcmdldCBmb3IgR0FQUEkgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xuJiM0MztcdFx0YXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdFx0YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdH1cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbiBcdFx0dm9pZCAqZGF0YSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YTtcbiBcbiBcdFx0aWYgKCEoYWN0aW9uIFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxuLVx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTtcbi1cdFx0ZWxzZSBpZiAoY3B1IFx1MDAzZT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XG4mIzQzO1x0XHRlbHNlIGlmIChpc192Y3B1X3J1bm5pbmcpXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhKSk7XG4gXHR9XG5AQCAtMTA4MCw3ICYjNDM7MTE2MCw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuIFxuIFx0V1JJVEVfT05DRShrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbdmNwdS1cdTAwM2V2Y3B1X2lkXSwgZW50cnkpO1xuIFxuLVx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBhY3Rpb24pO1xuJiM0MztcdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgY3B1LCBhY3Rpb24pO1xuIFxuIFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0xMTIzLDcgJiM0MzsxMjAzLDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiBcdCAqL1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcbi1cdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7XG4mIzQzO1x0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCAtMSwgLTEsIGFjdGlvbik7XG4gXG4gXHRXQVJOX09OX09OQ0UoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xuIFxuQEAgLTEyOTYsNiAmIzQzOzEzNzYsMjEgQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICp2Y3B1X3dha2V1cF9saXN0ID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xuJiM0MztcdHJhd19zcGlubG9ja190ICpzcGlubG9jayA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xuJiM0MztcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrKHNwaW5sb2NrKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHN2bSwgdmNwdV93YWtldXBfbGlzdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkge1xuJiM0MztcdFx0aWYgKGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdGt2bV92Y3B1X3dha2VfdXAoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpO1xuJiM0MztcdH1cbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2soc3BpbmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTm90ZTpcbiAgKiAtIFRoZSBtb2R1bGUgcGFyYW0gYXZpYyBlbmFibGUgYm90aCB4QVBJQyBhbmQgeDJBUElDIG1vZGUuXG5AQCAtMTMwNCwxMiAmIzQzOzEzOTksMTggQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbiAgKi9cbiBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4ge1xuJiM0MztcdGludCBjcHU7XG4gXHRhdmljID0gYXZpY193YW50X2F2aWNfZW5hYmxlZCgpO1xuIFx0aWYgKCFhdmljKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRwcl9pbmZvKFwmIzM0O0FWSUMgZW5hYmxlZFxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpKTtcbiYjNDM7XHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEFWSUMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIHgyQVZJQy4gKi9cbiBcdHgyYXZpY19lbmFibGVkID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1gyQVZJQyk7XG4gXHRpZiAoeDJhdmljX2VuYWJsZWQpIHtcbkBAIC0xMzMzLDEyICYjNDM7MTQzNCwxNiBAQCBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHRcdGVuYWJsZV9pcGl2ID0gZmFsc2U7XG4gXG4gXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFx1MDAyNmF2aWNfZ2FfbG9nX25vdGlmaWVyKTtcbiYjNDM7XHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKFx1MDAyNmF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHZvaWQgYXZpY19oYXJkd2FyZV91bnNldHVwKHZvaWQpXG4ge1xuLVx0aWYgKGF2aWMpXG4tXHRcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XG4mIzQzO1x0aWYgKCFhdmljKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKE5VTEwpO1xuJiM0MztcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoTlVMTCk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlMDJhMzhkYTUyOTZlMy4uYjY4NzEzM2Y4NTI4YmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtMTM1Niw2ICYjNDM7MTM1Niw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSk7XG4gXG4mIzQzO1x0YXZpY19kZXN0cm95X3ZjcHUoc3ZtKTtcbiYjNDM7XG4gXHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xuIFx0c3ZtX2ZyZWVfbmVzdGVkKHN2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDUxMzc0MTZiZTU5M2Q3Li40N2Q1YmI1ZDcxMDNkYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC0zNjIsNiAmIzQzOzM2MiwxMCBAQCBzdHJ1Y3QgdmNwdV9zdm0ge1xuIFxuIFx0LyogR3Vlc3QgR0lGIHZhbHVlLCB1c2VkIHdoZW4gdkdJRiBpcyBub3QgZW5hYmxlZCAqL1xuIFx0Ym9vbCBndWVzdF9naWY7XG4mIzQzO1xuJiM0MztcdC8qIEdBUFBJIHJlbGF0ZWQgZmllbGRzICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBnYXBwaV92Y3B1X3dha2V1cF9saXN0O1xuJiM0MztcdGludCBnYXBwaV9jcHU7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3ZtX2NwdV9kYXRhIHtcbkBAIC05MDksNiAmIzQzOzkxMyw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTtcbiBpbnQgYXZpY19pbmNvbXBsZXRlX2lwaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuJiM0Mzt2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiB2b2lkIGF2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcbmluZGV4IDgzNGQ4ZmFiZmJhMzg3Li4wNDQxNzljYWIxMmU0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxuQEAgLTQxLDYgJiM0Mzs0MSw3IEBAIGludCBhbWRfaW9tbXVfZW5hYmxlKHZvaWQpO1xuIHZvaWQgYW1kX2lvbW11X2Rpc2FibGUodm9pZCk7XG4gaW50IGFtZF9pb21tdV9yZWVuYWJsZShpbnQgbW9kZSk7XG4gaW50IGFtZF9pb21tdV9lbmFibGVfZmF1bHRpbmcodW5zaWduZWQgaW50IGNwdSk7XG4mIzQzO2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ndWVzdF9pcjtcbiBleHRlcm4gZW51bSBwcm90ZWN0aW9uX2RvbWFpbl9tb2RlIGFtZF9pb21tdV9wZ3RhYmxlO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXG5pbmRleCBmOWY3MTgwODc4OTMwMy4uZGUwYjIzMzA2OTQ0YjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcbkBAIC05NCw2ICYjNDM7OTQsNyBAQFxuICNkZWZpbmUgRkVBVFVSRV9YMkFQSUNcdFx0QklUX1VMTCgyKVxuICNkZWZpbmUgRkVBVFVSRV9OWFx0XHRCSVRfVUxMKDMpXG4gI2RlZmluZSBGRUFUVVJFX0dUXHRcdEJJVF9VTEwoNClcbiYjNDM7I2RlZmluZSBGRUFUVVJFX0dBUFBJXHRcdEJJVF9VTEwoNSlcbiAjZGVmaW5lIEZFQVRVUkVfSUFcdFx0QklUX1VMTCg2KVxuICNkZWZpbmUgRkVBVFVSRV9HQVx0XHRCSVRfVUxMKDcpXG4gI2RlZmluZSBGRUFUVVJFX0hFXHRcdEJJVF9VTEwoOClcbkBAIC0xMTMsNiAmIzQzOzExNCw3IEBAXG4gLyogRXh0ZW5kZWQgRmVhdHVyZSAyIEJpdHMgKi9cbiAjZGVmaW5lIEZFQVRVUkVfU0VWU05QSU9fU1VQXHRCSVRfVUxMKDEpXG4gI2RlZmluZSBGRUFUVVJFX0dDUjNUUlBNT0RFXHRCSVRfVUxMKDMpXG4mIzQzOyNkZWZpbmUgRkVBVFVSRV9HQVBQSURJU1NVUFx0QklUX1VMTCg0KVxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQXHRHRU5NQVNLX1VMTCg3LCA1KVxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQX0dBTSh4KSBcXFxuIFx0KEZJRUxEX0dFVChGRUFUVVJFX1NOUEFWSUNTVVAsIHgpID09IDB4MSlcbkBAIC0xOTAsNiAmIzQzOzE5Miw3IEBAXG4gI2RlZmluZSBDT05UUk9MX0VQSF9FTlx0XHQ0NVxuICNkZWZpbmUgQ09OVFJPTF9YVF9FTlx0XHQ1MFxuICNkZWZpbmUgQ09OVFJPTF9JTlRDQVBYVF9FTlx0NTFcbiYjNDM7I2RlZmluZSBDT05UUk9MX0dBUFBJX0VOXHQ1NVxuICNkZWZpbmUgQ09OVFJPTF9HQ1IzVFJQTU9ERVx0NThcbiAjZGVmaW5lIENPTlRST0xfSVJUQ0FDSEVESVNcdDU5XG4gI2RlZmluZSBDT05UUk9MX1NOUEFWSUNfRU5cdDYxXG5AQCAtMTAwNCw3ICYjNDM7MTAwNyw4IEBAIHVuaW9uIGlydGVfZ2FfbG8ge1xuIFx0XHQgICAgbm9fZmF1bHRcdDogMSxcbiBcdFx0ICAgIC8qIC0tLS0tLSAqL1xuIFx0XHQgICAgZ2FfbG9nX2ludHJcdDogMSxcbi1cdFx0ICAgIHJzdmQxXHQ6IDMsXG4mIzQzO1x0XHQgICAgcnN2ZDFcdDogMixcbiYjNDM7XHRcdCAgICBnYXBwaV9kaXNcdDogMSxcbiBcdFx0ICAgIGlzX3J1blx0OiAxLFxuIFx0XHQgICAgLyogLS0tLS0tICovXG4gXHRcdCAgICBndWVzdF9tb2RlXHQ6IDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXG5pbmRleCAzYmRiMzgwZDIzZTlhOS4uMjdmZmIyMTg0YmYyOTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xuQEAgLTE2MCw2ICYjNDM7MTYwLDkgQEAgdTggYW1kX2lvbW11X2hwdF9sZXZlbDtcbiAvKiBHdWVzdCBwYWdlIHRhYmxlIGxldmVsICovXG4gaW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcbiBcbiYjNDM7Ym9vbCBhbWRfaW9tbXVfZ2FwcGk7XG4mIzQzO0VYUE9SVF9TWU1CT0woYW1kX2lvbW11X2dhcHBpKTtcbiYjNDM7XG4gaW50IGFtZF9pb21tdV9ndWVzdF9pciA9IEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQztcbiBzdGF0aWMgaW50IGFtZF9pb21tdV94dF9tb2RlID0gSVJRX1JFTUFQX1hBUElDX01PREU7XG4gXG5AQCAtNDYyLDYgJiM0Mzs0NjUsOSBAQCBzdGF0aWMgdm9pZCBpb21tdV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KVxuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBTE9HX0VOKTtcbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUlOVF9FTik7XG4gXG4mIzQzO1x0LyogRGlzYWJsZSBJT01NVSBHQVBQSSAqL1xuJiM0MztcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4mIzQzO1xuIFx0LyogRGlzYWJsZSBJT01NVSBQUFIgbG9nZ2luZyAqL1xuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX1BQUkxPR19FTik7XG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSSU5UX0VOKTtcbkBAIC0yOTk2LDYgJiM0MzszMDAyLDEyIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11O1xuIFxuIFx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcbiYjNDM7XHRcdC8qIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlXG4mIzQzO1x0XHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcbiYjNDM7XHRcdCAqIGVuYWJsZWQgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBEaXNhYmxlIEdBTG9nIGlmIGFscmVhZHkgcnVubmluZy4gSXQgY291bGQgaGF2ZSBiZWVuIGVuYWJsZWRcbiBcdFx0ICogaW4gdGhlIHByZXZpb3VzIGJvb3QgYmVmb3JlIGtkdW1wLlxuQEAgLTMwMzUsMTAgJiM0MzszMDQ3LDE5IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuJiM0MztcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7R0FQUEkgaXMgbm90IHN1cHBvcnRlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEVuYWJsaW5nIEdBTSBhbmQgU05QQVZJQyBzdXBwb3J0ICovXG4gXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xuLVx0XHRpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XG4tXHRcdCAgICBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcbiYjNDM7XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpXG4mIzQzO1x0XHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbiYjNDM7XHRcdGVsc2UgaWYgKGlvbW11X2luaXRfZ2FfbG9nKGlvbW11KSB8fFxuJiM0MztcdFx0XHQgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQU1fRU4pO1xuQEAgLTMwNDcsNyAmIzQzOzMwNjgsOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXG4gXHR9XG4gXG4gXHRhbWRfaW9tbXVfaXJxX29wcy5jYXBhYmlsaXR5IHw9ICgxIFx1MDAzY1x1MDAzYyBJUlFfUE9TVElOR19DQVApO1xuLVx0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0YW1kX2lvbW11X2dhcHBpID8gXCYjMzQ7R0FQUElcJiMzNDsgOiBcJiMzNDtHQUxPR1wmIzM0Oyk7XG4gI2VuZGlmXG4gfVxuIFxuQEAgLTM3MzgsNiAmIzQzOzM3NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpXG4gXHRcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFwmIzM0O3YyX3Bnc2l6ZXNfb25seVwmIzM0OywgMTUpID09IDApIHtcbiBcdFx0XHRwcl9pbmZvKFwmIzM0O1Jlc3RyaWN0aW5nIFYxIHBhZ2Utc2l6ZXMgdG8gNEtpQi8yTWlCLzFHaUJcJiMzNDspO1xuIFx0XHRcdGFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtnYXBwaVwmIzM0OywgNSkgPT0gMCkge1xuJiM0MztcdFx0XHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX25vdGljZShcJiMzNDtVbmtub3duIG9wdGlvbiAtICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3RyKTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG5pbmRleCA1N2RjOGZhYmM3ZDliOS4uYjIyNmQzOTQxY2I5YjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG5AQCAtMzk1OSwxOSAmIzQzOzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbiBcdC5kZWFjdGl2YXRlID0gaXJxX3JlbWFwcGluZ19kZWFjdGl2YXRlLFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbi1cdFx0XHRcdCAgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuIHtcbi1cdGlmIChjcHUgXHUwMDNlPSAwKSB7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkcpIHtcbiBcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID1cbi1cdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhjcHUpO1xuJiM0MztcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xuIFx0XHRlbnRyeS1cdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPVxuLVx0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGNwdSk7XG4mIzQzO1x0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGFwaWNpZCk7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSB0cnVlO1xuIFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbi1cdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZ2FfbG9nX2ludHI7XG4mIzQzO1x0XHRib29sIHBvc3RlZF9pbnRyID0gISEoZmxhZ3MgXHUwMDI2IEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYXBwaV9kaXMgPSAhcG9zdGVkX2ludHIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgY2hlY2tfZmVhdHVyZTIoRkVBVFVSRV9HQVBQSURJU1NVUCk7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID1cbiYjNDM7XHRcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPSBBUElDSURfVE9fSVJURV9ERVNUX0hJKGFwaWNpZCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IHBvc3RlZF9pbnRyO1xuJiM0MztcdFx0fVxuIFx0fVxuIH1cbiBcbkBAIC0zOTkyLDcgJiM0Mzs0MDAyLDcgQEAgc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbiAgKiBhbmQgdGh1cyBkb24mIzM5O3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVSBjb25zdW1lcyBmcmVzaFxuICAqIGluZm9ybWF0aW9uLlxuICAqL1xuLWludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4mIzQzO2ludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTtcbiBcdHN0cnVjdCBpcnRlX2dhICplbnRyeSA9IChzdHJ1Y3QgaXJ0ZV9nYSAqKSBpcl9kYXRhLVx1MDAzZWVudHJ5O1xuQEAgLTQwMDYsMTQgJiM0Mzs0MDE2LDE0IEBAIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4gXHRpZiAoIWlyX2RhdGEtXHUwMDNlaW9tbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbiYjNDM7XHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIF9fbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cdTAwM2Vpb21tdSwgaXJfZGF0YS1cdTAwM2VpcnFfMl9pcnRlLmRldmlkLFxuIFx0XHRcdFx0aXJfZGF0YS1cdTAwM2VpcnFfMl9pcnRlLmluZGV4LCBlbnRyeSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woYW1kX2lvbW11X3VwZGF0ZV9nYSk7XG4gXG4taW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4mIzQzO2ludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS1cdTAwM2VlbnRyeTtcbkBAIC00MDM0LDkgJiM0Mzs0MDQ0LDEzIEBAIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuIFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmd1ZXN0X21vZGUgID0gMTtcbiBcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy5nYV9yb290X3B0ciAgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2Ffcm9vdF9wdHI7XG4gXHRlbnRyeS1cdTAwM2VoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLVx1MDAzZWdhX3ZlY3Rvcjtcbi1cdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2FfdGFnO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbiYjNDM7XHRpZiAoYW1kX2lvbW11X2dhcHBpKVxuJiM0MztcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1I7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IGlyX2RhdGEtXHUwMDNlZ2FfdGFnO1xuJiM0MztcbiYjNDM7XHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIG1vZGlmeV9pcnRlX2dhKGlyX2RhdGEtXHUwMDNlaW9tbXUsIGlyX2RhdGEtXHUwMDNlaXJxXzJfaXJ0ZS5kZXZpZCxcbiBcdFx0XHQgICAgICBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbkBAIC00MTA3LDggJiM0Mzs0MTIxLDggQEAgc3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxuIFx0XHRpcl9kYXRhLVx1MDAzZWdhX3ZlY3RvciA9IHBpX2RhdGEtXHUwMDNldmVjdG9yO1xuIFx0XHRpcl9kYXRhLVx1MDAzZWdhX3RhZyA9IHBpX2RhdGEtXHUwMDNlZ2FfdGFnO1xuIFx0XHRpZiAocGlfZGF0YS1cdTAwM2Vpc19ndWVzdF9tb2RlKVxuLVx0XHRcdHJldCA9IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEsIHBpX2RhdGEtXHUwMDNlY3B1LFxuLVx0XHRcdFx0XHRcdFx0ICAgIHBpX2RhdGEtXHUwMDNlZ2FfbG9nX2ludHIpO1xuJiM0MztcdFx0XHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVx1MDAzZWFwaWNpZCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgcGlfZGF0YS1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuaW5kZXggZWRjZWU5ZjUzMzVhNmYuLjg3ZTc2ZjYxN2VhMTg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuQEAgLTMwLDggJiM0MzszMCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpIHsgfVxuIC8qIElPTU1VIEFWSUMgRnVuY3Rpb24gKi9cbiBleHRlcm4gaW50IGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpO1xuIFxuLWV4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTtcbi1leHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xuJiM0MztleHRlcm4gaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKTtcbiYjNDM7ZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTtcbiBcbiAjZWxzZSAvKiBkZWZpbmVkKENPTkZJR19BTURfSU9NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19JUlFfUkVNQVApICovXG5AQCAtNDIsMTIgJiM0Mzs0MiwxMiBAQCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzYsNCAmIzQzOzc2LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBib29sIGFtZF9pb21tdV9zZXZfdGlvX3N1cHBvcnRlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuICNlbmRpZlxuIFxuJiM0MzsjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVCAwXG4mIzQzOyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfVkNQVV9SVU5OSU5HICBCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQgMVxuJiM0MzsjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSICBCSVQoMSlcbiYjNDM7XG4mIzQzO2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbiAjZW5kaWYgLyogX0FTTV9YODZfQU1EX0lPTU1VX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJUlFfUkVNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5JiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUmIzM0OywKICAgICYjMzQ7YXZpY19waV91cGRhdGVfaXJ0ZSYjMzQ7LAogICAgJiMzNDtfX2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthdmljX2Rlc3Ryb3lfdmNwdSYjMzQ7LAogICAgJiMzNDtzdm1faXJfbGlzdF9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzIChHQVBQSSkgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHVwZGF0ZXMgYW5kIHZDUFUgYWZmaW5pdHkgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBRRU1VIHdpdGggS1ZNIFNWTSkuIFRoZSBjaGFuZ2VzIGFsdGVyIGNvcmUgQVZJQyBhbmQgSU9NTVUgbG9naWMgZXZlbiB3aGVuIEdBUFBJIGlzIG5vdCBleHBsaWNpdGx5IGVuYWJsZWQgdmlhIGJvb3QgcGFyYW1ldGVyLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWFlYTAyYzVjNmE4MWE0YTcxNzk1MTI2YTI4ODVlMDBmYmRhYTE2NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMjE6NDk6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKaW5kZXggMzdiOTRmNDg0ZWYzMzguLjQwYTIyMDZhMzNjMDhkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oCkBAIC0zNSw4ICYjNDM7MzUsOCBAQCBzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEgewogCXU2NCB2YXBpY19hZGRyOwkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgdkNQVSYjMzk7cyB2QVBJQy4gKi8KIAl1MzIgZ2FfdGFnOwogCXUzMiB2ZWN0b3I7CQkvKiBHdWVzdCB2ZWN0b3Igb2YgdGhlIGludGVycnVwdCAqLwotCWludCBjcHU7Ci0JYm9vbCBnYV9sb2dfaW50cjsKJiM0MzsJaW50IGFwaWNpZDsKJiM0MzsJaW50IGZsYWdzOwogCWJvb2wgaXNfZ3Vlc3RfbW9kZTsKIAl2b2lkICppcl9kYXRhOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMKaW5kZXggY2RkNWE2ZGM2NDZmMTEuLjgxODU4NDFkOWI4MTY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYwpAQCAtNjMsNiAmIzQzOzYzLDkgQEAKIAlnYV90YWc7CQkJCQkJCQlcCiB9KQogCiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShyYXdfc3BpbmxvY2tfdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrKTsKJiM0MzsKIHN0YXRpY19hc3NlcnQoX19BVklDX0dBVEFHKEFWSUNfVk1fSURfTUFTSywgQVZJQ19WQ1BVX0lEWF9NQVNLKSA9PSAtMXUpOwogCiAjZGVmaW5lIEFWSUNfQVVUT19NT0RFIC0xCkBAIC04NzQsNiAmIzQzOzg3Nyw5IEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCk7CiAJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2spOwogCiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7c3ZtLSZndDtnYXBwaV92Y3B1X3dha2V1cF9saXN0KTsKJiM0MzsJc3ZtLSZndDtnYXBwaV9jcHUgPSAtMTsKJiM0MzsKIAlpZiAoIWVuYWJsZV9hcGljdiB8fCAhaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTg4Niw2ICYjNDM7ODkyLDQyIEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgKndha2V1cF9saXN0OwomIzQzOwlyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2s7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKGNwdSAmbHQ7IDApKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3YWtldXBfbGlzdCA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpOwomIzQzOwlzcGlubG9jayA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7CiYjNDM7CWd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShzcGlubG9jayk7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtnYXBwaV92Y3B1X3dha2V1cF9saXN0KSkKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIHdha2V1cF9saXN0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJcmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTihjcHUgJmx0OyAwKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3BpbmxvY2sgPSAmYW1wO3Blcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpOwomIzQzOwlndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpKQomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO3N2bS0mZ3Q7Z2FwcGlfdmNwdV93YWtldXBfbGlzdCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiYjNDM7ewomIzQzOwlpZiAoc3ZtLSZndDtnYXBwaV9jcHUgIT0gLTEgJmFtcDsmYW1wOyBhbWRfaW9tbXVfZ2FwcGkpIHsKJiM0MzsJCWF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJCXN2bS0mZ3Q7Z2FwcGlfY3B1ID0gLTE7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpOwpAQCAtODk2LDEzICYjNDM7OTM4LDE4IEBAIHN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaXJxZmQtJmd0O2lycV9ieXBhc3NfdmNwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bTsKIAogCWlmICghdmNwdSkKIAkJcmV0dXJuOwogCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dG9fc3ZtKHZjcHUpLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsJc3ZtID0gdG9fc3ZtKHZjcHUpOwomIzQzOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzdm0tJmd0O2lyX2xpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZhbXA7aXJxZmQtJmd0O3ZjcHVfbGlzdCk7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0b19zdm0odmNwdSktJmd0O2lyX2xpc3RfbG9jaywgZmxhZ3MpOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCkpCiYjNDM7CQlhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCkBAIC05MzIsNiAmIzQzOzk3OSw4IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAkJdTY0IGVudHJ5OwogCQlpbnQgcmV0OwomIzQzOwkJaW50IHBvc3RlZF9pbnRyOwomIzQzOwkJYm9vbCBpc192Y3B1X3dhaXRpbmcgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbApAQCAtOTQ5LDE1ICYjNDM7OTk4LDIzIEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgKi8KIAkJZW50cnkgPSBzdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfZW50cnk7CiAJCWlmIChlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSykgewotCQkJcGlfZGF0YS5jcHUgPSBlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSzsKJiM0MzsJCQlwaV9kYXRhLmFwaWNpZCA9IGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLOwomIzQzOwkJCXBpX2RhdGEuZmxhZ3MgPSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkc7CiAJCX0gZWxzZSB7Ci0JCQlwaV9kYXRhLmNwdSA9IC0xOwotCQkJcGlfZGF0YS5nYV9sb2dfaW50ciA9IGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7CiYjNDM7CQkJcG9zdGVkX2ludHIgPSAhIShlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKTsKJiM0MzsJCQlwaV9kYXRhLmZsYWdzID0gcG9zdGVkX2ludHIgJmx0OyZsdDsgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQ7CiYjNDM7CQkJaWYgKGFtZF9pb21tdV9nYXBwaSkgewomIzQzOwkJCQlwaV9kYXRhLmFwaWNpZCA9IGt2bV9jcHVfZ2V0X2FwaWNpZChzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtpcl9saXN0KSkgewomIzQzOwkJCQkJYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJCQkJCWlzX3ZjcHVfd2FpdGluZyA9IHRydWU7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiAJCX0KIAogCQlyZXQgPSBpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsICZhbXA7cGlfZGF0YSk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCWdvdG8gZ2FwcGlfZXJyX291dDsKIAogCQkvKgogCQkgKiBSZXZlcnQgdG8gbGVnYWN5IG1vZGUgaWYgdGhlIElPTU1VIGRpZG4mIzM5O3QgcHJvdmlkZSBtZXRhZGF0YQpAQCAtOTY2LDEyICYjNDM7MTAyMywxNyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSwKIAkJICovCiAJCWlmIChXQVJOX09OX09OQ0UoIXBpX2RhdGEuaXJfZGF0YSkpIHsKIAkJCWlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7Ci0JCQlyZXR1cm4gLUVJTzsKJiM0MzsJCQlyZXQgPSAtRUlPOwomIzQzOwkJCWdvdG8gZ2FwcGlfZXJyX291dDsKIAkJfQogCiAJCWlycWZkLSZndDtpcnFfYnlwYXNzX2RhdGEgPSBwaV9kYXRhLmlyX2RhdGE7CiAJCWxpc3RfYWRkKCZhbXA7aXJxZmQtJmd0O3ZjcHVfbGlzdCwgJmFtcDtzdm0tJmd0O2lyX2xpc3QpOwogCQlyZXR1cm4gMDsKJiM0MztnYXBwaV9lcnJfb3V0OgomIzQzOwkJaWYgKGlzX3ZjcHVfd2FpdGluZykKJiM0MzsJCQlhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTsKIH0KQEAgLTEwMDQsMTAgJiM0MzsxMDY2LDE0IEBAIGVudW0gYXZpY192Y3B1X2FjdGlvbiB7CiAJQVZJQ19TVEFSVF9CTE9DS0lORwk9IEJJVCgxKSwKIH07CiAKLXN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LAotCQkJCQkgICAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbikKJiM0MztzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCwKJiM0MzsJCQkJCSAgICBpbnQgY3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKQogewotCWJvb2wgZ2FfbG9nX2ludHIgPSAoYWN0aW9uICZhbXA7IEFWSUNfU1RBUlRfQkxPQ0tJTkcpOwomIzQzOwlpbnQgcG9zdGVkX2ludHIgPSAhIShhY3Rpb24gJmFtcDsgQVZJQ19TVEFSVF9CTE9DS0lORykgJmx0OyZsdDsKJiM0MzsJCQkgIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUOwomIzQzOwlpbnQgaXNfdmNwdV9ydW5uaW5nID0gKGFwaWNpZCAmZ3Q7PSAwKSAmbHQ7Jmx0OwomIzQzOwkJCSAgICAgIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVDsKJiM0MzsJaW50IGZsYWdzID0gcG9zdGVkX2ludHIgfCBpc192Y3B1X3J1bm5pbmc7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAJc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkOwogCkBAIC0xMDE3LDE2ICYjNDM7MTA4MywzMCBAQCBzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSwKIAkgKiBIZXJlLCB3ZSBnbyB0aHJvdWdoIHRoZSBwZXItdmNwdSBpcl9saXN0IHRvIHVwZGF0ZSBhbGwgZXhpc3RpbmcKIAkgKiBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHRhcmdldGluZyB0aGlzIHZjcHUuCiAJICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2lyX2xpc3QpKQomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCkpIHsKJiM0MzsJCWlmIChhbWRfaW9tbXVfZ2FwcGkgJmFtcDsmYW1wOyBjcHUgJmd0Oz0gMCkKJiM0MzsJCQlzdm0tJmd0O2dhcHBpX2NwdSA9IGNwdTsKIAkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc192Y3B1X3J1bm5pbmcgJmFtcDsmYW1wOyBhbWRfaW9tbXVfZ2FwcGkpIHsKJiM0MzsJCS8qIElGIGNvbmRpdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlICovCiYjNDM7CQlpZiAoc3ZtLSZndDtnYXBwaV9jcHUgIT0gLTEpCiYjNDM7CQkJYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwomIzQzOwkJc3ZtLSZndDtnYXBwaV9jcHUgPSBjcHU7IC8qIFN0b3JlIGNwdSBubyBhcyB0YXJnZXQgZm9yIEdBUFBJICovCiYjNDM7CX0gZWxzZSBpZiAoYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQlhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwkJYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpcnFmZCwgJmFtcDtzdm0tJmd0O2lyX2xpc3QsIHZjcHVfbGlzdCkgewogCQl2b2lkICpkYXRhID0gaXJxZmQtJmd0O2lycV9ieXBhc3NfZGF0YTsKIAogCQlpZiAoIShhY3Rpb24gJmFtcDsgQVZJQ19UT0dHTEVfT05fT0ZGKSkKLQkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTsKLQkJZWxzZSBpZiAoY3B1ICZndDs9IDApCi0JCQlXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpOwomIzQzOwkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgZmxhZ3MpKTsKJiM0MzsJCWVsc2UgaWYgKGlzX3ZjcHVfcnVubmluZykKJiM0MzsJCQlXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgYXBpY2lkLCBmbGFncykpOwogCQllbHNlCiAJCQlXQVJOX09OX09OQ0UoYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhKSk7CiAJfQpAQCAtMTA4MCw3ICYjNDM7MTE2MCw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LAogCiAJV1JJVEVfT05DRShrdm1fc3ZtLSZndDthdmljX3BoeXNpY2FsX2lkX3RhYmxlW3ZjcHUtJmd0O3ZjcHVfaWRdLCBlbnRyeSk7CiAKLQlhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGFjdGlvbik7CiYjNDM7CWF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgY3B1LCBhY3Rpb24pOwogCiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtzdm0tJmd0O2lyX2xpc3RfbG9jaywgZmxhZ3MpOwogfQpAQCAtMTEyMyw3ICYjNDM7MTIwMyw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pCiAJICovCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKIAotCWF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7CiYjNDM7CWF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIC0xLCBhY3Rpb24pOwogCiAJV0FSTl9PTl9PTkNFKGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpOwogCkBAIC0xMjk2LDYgJiM0MzsxMzc2LDIxIEBAIHN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICp2Y3B1X3dha2V1cF9saXN0ID0gJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7CiYjNDM7CXJhd19zcGlubG9ja190ICpzcGlubG9jayA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7CiYjNDM7CXN0cnVjdCB2Y3B1X3N2bSAqc3ZtOwomIzQzOwomIzQzOwlyYXdfc3Bpbl9sb2NrKHNwaW5sb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShzdm0sIHZjcHVfd2FrZXVwX2xpc3QsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpIHsKJiM0MzsJCWlmIChrdm1fbGFwaWNfZmluZF9oaWdoZXN0X2lycigmYW1wO3N2bS0mZ3Q7dmNwdSkgJmd0Oz0gMCkKJiM0MzsJCQlrdm1fdmNwdV93YWtlX3VwKCZhbXA7c3ZtLSZndDt2Y3B1KTsKJiM0MzsJfQomIzQzOwlyYXdfc3Bpbl91bmxvY2soc3BpbmxvY2spOwomIzQzO30KJiM0MzsKIC8qCiAgKiBOb3RlOgogICogLSBUaGUgbW9kdWxlIHBhcmFtIGF2aWMgZW5hYmxlIGJvdGggeEFQSUMgYW5kIHgyQVBJQyBtb2RlLgpAQCAtMTMwNCwxMiAmIzQzOzEzOTksMTggQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZCkKICAqLwogYm9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKQogewomIzQzOwlpbnQgY3B1OwogCWF2aWMgPSBhdmljX3dhbnRfYXZpY19lbmFibGVkKCk7CiAJaWYgKCFhdmljKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlwcl9pbmZvKCYjMzQ7QVZJQyBlbmFibGVkXG4mIzM0Oyk7CiAKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSkpOwomIzQzOwkJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSkpOwomIzQzOwl9CiYjNDM7CiAJLyogQVZJQyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgeDJBVklDLiAqLwogCXgyYXZpY19lbmFibGVkID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1gyQVZJQyk7CiAJaWYgKHgyYXZpY19lbmFibGVkKSB7CkBAIC0xMzMzLDEyICYjNDM7MTQzNCwxNiBAQCBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpCiAJCWVuYWJsZV9pcGl2ID0gZmFsc2U7CiAKIAlhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKCZhbXA7YXZpY19nYV9sb2dfbm90aWZpZXIpOwomIzQzOwlrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKCZhbXA7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcik7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBhdmljX2hhcmR3YXJlX3Vuc2V0dXAodm9pZCkKIHsKLQlpZiAoYXZpYykKLQkJYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTsKJiM0MzsJaWYgKCFhdmljKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKE5VTEwpOwomIzQzOwlrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZTAyYTM4ZGE1Mjk2ZTMuLmI2ODcxMzNmODUyOGJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTEzNTYsNiAmIzQzOzEzNTYsOCBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCkpOwogCiYjNDM7CWF2aWNfZGVzdHJveV92Y3B1KHN2bSk7CiYjNDM7CiAJc3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTsKIAlzdm1fZnJlZV9uZXN0ZWQoc3ZtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKaW5kZXggNTEzNzQxNmJlNTkzZDcuLjQ3ZDViYjVkNzEwM2RhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKQEAgLTM2Miw2ICYjNDM7MzYyLDEwIEBAIHN0cnVjdCB2Y3B1X3N2bSB7CiAKIAkvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovCiAJYm9vbCBndWVzdF9naWY7CiYjNDM7CiYjNDM7CS8qIEdBUFBJIHJlbGF0ZWQgZmllbGRzICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgZ2FwcGlfdmNwdV93YWtldXBfbGlzdDsKJiM0MzsJaW50IGdhcHBpX2NwdTsKIH07CiAKIHN0cnVjdCBzdm1fY3B1X2RhdGEgewpAQCAtOTA5LDYgJiM0Mzs5MTMsNyBAQCB2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYik7CiBpbnQgYXZpY19pbmNvbXBsZXRlX2lwaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKJiM0Mzt2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaAppbmRleCA4MzRkOGZhYmZiYTM4Ny4uMDQ0MTc5Y2FiMTJlNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oCkBAIC00MSw2ICYjNDM7NDEsNyBAQCBpbnQgYW1kX2lvbW11X2VuYWJsZSh2b2lkKTsKIHZvaWQgYW1kX2lvbW11X2Rpc2FibGUodm9pZCk7CiBpbnQgYW1kX2lvbW11X3JlZW5hYmxlKGludCBtb2RlKTsKIGludCBhbWRfaW9tbXVfZW5hYmxlX2ZhdWx0aW5nKHVuc2lnbmVkIGludCBjcHUpOwomIzQzO2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTsKIGV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyOwogZXh0ZXJuIGVudW0gcHJvdGVjdGlvbl9kb21haW5fbW9kZSBhbWRfaW9tbXVfcGd0YWJsZTsKIGV4dGVybiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmgKaW5kZXggZjlmNzE4MDg3ODkzMDMuLmRlMGIyMzMwNjk0NGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaApAQCAtOTQsNiAmIzQzOzk0LDcgQEAKICNkZWZpbmUgRkVBVFVSRV9YMkFQSUMJCUJJVF9VTEwoMikKICNkZWZpbmUgRkVBVFVSRV9OWAkJQklUX1VMTCgzKQogI2RlZmluZSBGRUFUVVJFX0dUCQlCSVRfVUxMKDQpCiYjNDM7I2RlZmluZSBGRUFUVVJFX0dBUFBJCQlCSVRfVUxMKDUpCiAjZGVmaW5lIEZFQVRVUkVfSUEJCUJJVF9VTEwoNikKICNkZWZpbmUgRkVBVFVSRV9HQQkJQklUX1VMTCg3KQogI2RlZmluZSBGRUFUVVJFX0hFCQlCSVRfVUxMKDgpCkBAIC0xMTMsNiAmIzQzOzExNCw3IEBACiAvKiBFeHRlbmRlZCBGZWF0dXJlIDIgQml0cyAqLwogI2RlZmluZSBGRUFUVVJFX1NFVlNOUElPX1NVUAlCSVRfVUxMKDEpCiAjZGVmaW5lIEZFQVRVUkVfR0NSM1RSUE1PREUJQklUX1VMTCgzKQomIzQzOyNkZWZpbmUgRkVBVFVSRV9HQVBQSURJU1NVUAlCSVRfVUxMKDQpCiAjZGVmaW5lIEZFQVRVUkVfU05QQVZJQ1NVUAlHRU5NQVNLX1VMTCg3LCA1KQogI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBfR0FNKHgpIFwKIAkoRklFTERfR0VUKEZFQVRVUkVfU05QQVZJQ1NVUCwgeCkgPT0gMHgxKQpAQCAtMTkwLDYgJiM0MzsxOTIsNyBAQAogI2RlZmluZSBDT05UUk9MX0VQSF9FTgkJNDUKICNkZWZpbmUgQ09OVFJPTF9YVF9FTgkJNTAKICNkZWZpbmUgQ09OVFJPTF9JTlRDQVBYVF9FTgk1MQomIzQzOyNkZWZpbmUgQ09OVFJPTF9HQVBQSV9FTgk1NQogI2RlZmluZSBDT05UUk9MX0dDUjNUUlBNT0RFCTU4CiAjZGVmaW5lIENPTlRST0xfSVJUQ0FDSEVESVMJNTkKICNkZWZpbmUgQ09OVFJPTF9TTlBBVklDX0VOCTYxCkBAIC0xMDA0LDcgJiM0MzsxMDA3LDggQEAgdW5pb24gaXJ0ZV9nYV9sbyB7CiAJCSAgICBub19mYXVsdAk6IDEsCiAJCSAgICAvKiAtLS0tLS0gKi8KIAkJICAgIGdhX2xvZ19pbnRyCTogMSwKLQkJICAgIHJzdmQxCTogMywKJiM0MzsJCSAgICByc3ZkMQk6IDIsCiYjNDM7CQkgICAgZ2FwcGlfZGlzCTogMSwKIAkJICAgIGlzX3J1bgk6IDEsCiAJCSAgICAvKiAtLS0tLS0gKi8KIAkJICAgIGd1ZXN0X21vZGUJOiAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jCmluZGV4IDNiZGIzODBkMjNlOWE5Li4yN2ZmYjIxODRiZjI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuYwpAQCAtMTYwLDYgJiM0MzsxNjAsOSBAQCB1OCBhbWRfaW9tbXVfaHB0X2xldmVsOwogLyogR3Vlc3QgcGFnZSB0YWJsZSBsZXZlbCAqLwogaW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDsKIAomIzQzO2Jvb2wgYW1kX2lvbW11X2dhcHBpOwomIzQzO0VYUE9SVF9TWU1CT0woYW1kX2lvbW11X2dhcHBpKTsKJiM0MzsKIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXIgPSBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUM7CiBzdGF0aWMgaW50IGFtZF9pb21tdV94dF9tb2RlID0gSVJRX1JFTUFQX1hBUElDX01PREU7CiAKQEAgLTQ2Miw2ICYjNDM7NDY1LDkgQEAgc3RhdGljIHZvaWQgaW9tbXVfZGlzYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKIAlpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FMT0dfRU4pOwogCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUlOVF9FTik7CiAKJiM0MzsJLyogRGlzYWJsZSBJT01NVSBHQVBQSSAqLwomIzQzOwlpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pOwomIzQzOwogCS8qIERpc2FibGUgSU9NTVUgUFBSIGxvZ2dpbmcgKi8KIAlpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSTE9HX0VOKTsKIAlpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSSU5UX0VOKTsKQEAgLTI5OTYsNiAmIzQzOzMwMDIsMTIgQEAgc3RhdGljIHZvaWQgZW5hYmxlX2lvbW11c192YXBpYyh2b2lkKQogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwogCiAJZm9yX2VhY2hfaW9tbXUoaW9tbXUpIHsKJiM0MzsJCS8qIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlCiYjNDM7CQkgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXMKJiM0MzsJCSAqIGVuYWJsZWQgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CiAJCS8qCiAJCSAqIERpc2FibGUgR0FMb2cgaWYgYWxyZWFkeSBydW5uaW5nLiBJdCBjb3VsZCBoYXZlIGJlZW4gZW5hYmxlZAogCQkgKiBpbiB0aGUgcHJldmlvdXMgYm9vdCBiZWZvcmUga2R1bXAuCkBAIC0zMDM1LDEwICYjNDM7MzA0NywxOSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJaWYgKGFtZF9pb21tdV9nYXBwaSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGNoZWNrX2ZlYXR1cmUoRkVBVFVSRV9HQVBQSSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxuJiMzNDspOwomIzQzOwkJYW1kX2lvbW11X2dhcHBpID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAkvKiBFbmFibGluZyBHQU0gYW5kIFNOUEFWSUMgc3VwcG9ydCAqLwogCWZvcl9lYWNoX2lvbW11KGlvbW11KSB7Ci0JCWlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHwKLQkJICAgIGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKQomIzQzOwkJaWYgKGFtZF9pb21tdV9nYXBwaSkKJiM0MzsJCQlpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CQllbHNlIGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHwKJiM0MzsJCQkgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpCiAJCQlyZXR1cm47CiAKIAkJaW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FNX0VOKTsKQEAgLTMwNDcsNyAmIzQzOzMwNjgsOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJfQogCiAJYW1kX2lvbW11X2lycV9vcHMuY2FwYWJpbGl0eSB8PSAoMSAmbHQ7Jmx0OyBJUlFfUE9TVElOR19DQVApOwotCXByX2luZm8oJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7VmlydHVhbCBBUElDIGVuYWJsZWQgd2l0aCAlc1xuJiMzNDssCiYjNDM7CQlhbWRfaW9tbXVfZ2FwcGkgPyAmIzM0O0dBUFBJJiMzNDsgOiAmIzM0O0dBTE9HJiMzNDspOwogI2VuZGlmCiB9CiAKQEAgLTM3MzgsNiAmIzQzOzM3NjAsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpCiAJCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICYjMzQ7djJfcGdzaXplc19vbmx5JiMzNDssIDE1KSA9PSAwKSB7CiAJCQlwcl9pbmZvKCYjMzQ7UmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCLzJNaUIvMUdpQiYjMzQ7KTsKIAkJCWFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7CiYjNDM7CQl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAmIzM0O2dhcHBpJiMzNDssIDUpID09IDApIHsKJiM0MzsJCQlhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlOwogCQl9IGVsc2UgewogCQkJcHJfbm90aWNlKCYjMzQ7VW5rbm93biBvcHRpb24gLSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBzdHIpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYwppbmRleCA1N2RjOGZhYmM3ZDliOS4uYjIyNmQzOTQxY2I5YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYwpAQCAtMzk1OSwxOSAmIzQzOzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHsKIAkuZGVhY3RpdmF0ZSA9IGlycV9yZW1hcHBpbmdfZGVhY3RpdmF0ZSwKIH07CiAKLXN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsCi0JCQkJICBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBhcGljaWQsIGludCBmbGFncykKIHsKLQlpZiAoY3B1ICZndDs9IDApIHsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklORykgewogCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID0KLQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhjcHUpOwomIzQzOwkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpOwogCQllbnRyeS0mZ3Q7aGkuZmllbGRzLmRlc3RpbmF0aW9uID0KLQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9ISShjcHUpOwomIzQzOwkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpOwogCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IHRydWU7CiAJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTsKIAl9IGVsc2UgewotCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlOwotCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZ2FfbG9nX2ludHI7CiYjNDM7CQlib29sIHBvc3RlZF9pbnRyID0gISEoZmxhZ3MgJmFtcDsgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFIpOwomIzQzOwomIzQzOwkJaWYgKGFtZF9pb21tdV9nYXBwaSkgewomIzQzOwkJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXBvc3RlZF9pbnRyICZhbXA7JmFtcDsKJiM0MzsJCQkJCQkJICAgY2hlY2tfZmVhdHVyZTIoRkVBVFVSRV9HQVBQSURJU1NVUCk7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTsKJiM0MzsJCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID0KJiM0MzsJCQkJCQlBUElDSURfVE9fSVJURV9ERVNUX0xPKGFwaWNpZCk7CiYjNDM7CQkJZW50cnktJmd0O2hpLmZpZWxkcy5kZXN0aW5hdGlvbiA9IEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTsKJiM0MzsJCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gcG9zdGVkX2ludHI7CiYjNDM7CQl9CiAJfQogfQogCkBAIC0zOTkyLDcgJiM0Mzs0MDAyLDcgQEAgc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSwKICAqIGFuZCB0aHVzIGRvbiYjMzk7dCByZXF1aXJlIGFuIGludmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIElPTU1VIGNvbnN1bWVzIGZyZXNoCiAgKiBpbmZvcm1hdGlvbi4KICAqLwotaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cikKJiM0MztpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7CiAJc3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtJmd0O2VudHJ5OwpAQCAtNDAwNiwxNCAmIzQzOzQwMTYsMTQgQEAgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cikKIAlpZiAoIWlyX2RhdGEtJmd0O2lvbW11KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7CiYjNDM7CV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCBmbGFncyk7CiAKIAlyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLSZndDtpb21tdSwgaXJfZGF0YS0mZ3Q7aXJxXzJfaXJ0ZS5kZXZpZCwKIAkJCQlpcl9kYXRhLSZndDtpcnFfMl9pcnRlLmluZGV4LCBlbnRyeSk7CiB9CiBFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV91cGRhdGVfZ2EpOwogCi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cikKJiM0MztpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhOwogCXN0cnVjdCBpcnRlX2dhICplbnRyeSA9IChzdHJ1Y3QgaXJ0ZV9nYSAqKSBpcl9kYXRhLSZndDtlbnRyeTsKQEAgLTQwMzQsOSAmIzQzOzQwNDQsMTMgQEAgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpCiAJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5ndWVzdF9tb2RlICA9IDE7CiAJZW50cnktJmd0O2hpLmZpZWxkcy5nYV9yb290X3B0ciAgICAgICA9IGlyX2RhdGEtJmd0O2dhX3Jvb3RfcHRyOwogCWVudHJ5LSZndDtoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLSZndDtnYV92ZWN0b3I7Ci0JZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtJmd0O2dhX3RhZzsKIAotCV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7CiYjNDM7CWlmIChhbWRfaW9tbXVfZ2FwcGkpCiYjNDM7CQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1I7CiYjNDM7CWVsc2UKJiM0MzsJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuZ2FfdGFnID0gaXJfZGF0YS0mZ3Q7Z2FfdGFnOwomIzQzOwomIzQzOwlfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpOwogCiAJcmV0dXJuIG1vZGlmeV9pcnRlX2dhKGlyX2RhdGEtJmd0O2lvbW11LCBpcl9kYXRhLSZndDtpcnFfMl9pcnRlLmRldmlkLAogCQkJICAgICAgaXJfZGF0YS0mZ3Q7aXJxXzJfaXJ0ZS5pbmRleCwgZW50cnkpOwpAQCAtNDEwNyw4ICYjNDM7NDEyMSw4IEBAIHN0YXRpYyBpbnQgYW1kX2lyX3NldF92Y3B1X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdm9pZCAqaW5mbykKIAkJaXJfZGF0YS0mZ3Q7Z2FfdmVjdG9yID0gcGlfZGF0YS0mZ3Q7dmVjdG9yOwogCQlpcl9kYXRhLSZndDtnYV90YWcgPSBwaV9kYXRhLSZndDtnYV90YWc7CiAJCWlmIChwaV9kYXRhLSZndDtpc19ndWVzdF9tb2RlKQotCQkJcmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS0mZ3Q7Y3B1LAotCQkJCQkJCSAgICBwaV9kYXRhLSZndDtnYV9sb2dfaW50cik7CiYjNDM7CQkJcmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS0mZ3Q7YXBpY2lkLAomIzQzOwkJCQkJCQkgICAgcGlfZGF0YS0mZ3Q7ZmxhZ3MpOwogCQllbHNlCiAJCQlyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaAppbmRleCBlZGNlZTlmNTMzNWE2Zi4uODdlNzZmNjE3ZWExODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaApAQCAtMzAsOCAmIzQzOzMwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9CiAvKiBJT01NVSBBVklDIEZ1bmN0aW9uICovCiBleHRlcm4gaW50IGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpOwogCi1leHRlcm4gaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cik7Ci1leHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpOwomIzQzO2V4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpOwomIzQzO2V4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTsKIAogI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfQU1EX0lPTU1VKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0lSUV9SRU1BUCkgKi8KQEAgLTQyLDEyICYjNDM7NDIsMTIgQEAgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTc2LDQgJiM0Mzs3NiwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfc25wX2Rpc2FibGUodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBib29sIGFtZF9pb21tdV9zZXZfdGlvX3N1cHBvcnRlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKJiM0MzsjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVCAwCiYjNDM7I2RlZmluZSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkcgIEJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQgMQomIzQzOyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFIgIEJJVCgxKQomIzQzOwomIzQzO2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTsKICNlbmRpZiAvKiBfQVNNX1g4Nl9BTURfSU9NTVVfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipHQVBQSSBTdXBwb3J0IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdHJ5aW5nIHRvIGJyaW5nIGluIEdBUFBJIHN1cHBvcnQg4oCTIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMg4oCTIGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhY3R1YWxseSBmdW5jdGlvbmFsLCBhbmQgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IGl0PyYjMzQ7IExvb2tpbmcgYXQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucyDigJMgYGF2aWMuY2AsIGBzdm0uY2AsIGBpbml0LmNgLCBgaW9tbXUuY2Ag4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMuIEl0IHNlZW1zIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYGFtZF9pb21tdT1nYXBwaWAgYm9vdCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgY29kZSBtb2RpZmllcyBzb21lIGtleSBmdW5jdGlvbnMgbGlrZSBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGFuZCBhZGRzIHNvbWUgbmV3IG9uZXMgdG9vLgoKVGhlIG5leHQgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgJiMzNDtDYW4gd2UgZXZlbiAqcmVhY2gqIHRoaXMgZmVhdHVyZSBpbiBvdXIgdGVzdCBlbnZpcm9ubWVudHM/IENhbiB3ZSByZXByb2R1Y2UgdGhpcyBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcgbGlrZSBHQ0Ugb3IgUUVNVT8mIzM0OyBBaCwgcmlnaHQsIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aXRoIEtWTSBTVk0gc2hvdWxkIHdvcmsuIFRoYXQmIzM5O3MgZ29vZC4gSG93ZXZlciwgd2hhdCBhYm91dCBzeXprYWxsZXI/IERvZXMgaXQgdGFyZ2V0IEFNRCBJT01NVSBvciBTVk0/IEZvcnR1bmF0ZWx5LCBzeXprYWxsZXIgZG9lcyBmdXp6IEtWTSwgaW5jbHVkaW5nIFNWTSwgc28gdGhlIHBvdGVudGlhbCBpcyB0aGVyZS4KCkdpdmVuIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gS1ZNIFNWTSBBVklDIGFuZCBBTUQgSU9NTVUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZC4gTG9va3MgbGlrZSBgQ09ORklHX0tWTWAsIGBDT05GSUdfS1ZNX0FNRGAsIGFuZCBgQ09ORklHX0FNRF9JT01NVWAgYXJlIHRoZSBrZXkgb25lcyB0byBpbnZlc3RpZ2F0ZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBpbiBgZHJpdmVycy9pb21tdS9hbWQvYCBhbmQgYGFyY2gveDg2L2t2bS9gIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFNRF9JT01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMi0jIEFNRCBJT01NVSBzdXBwb3J0XG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjM6Y29uZmlnIEFNRF9JT01NVVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVx0Ym9vbCBcJiMzNDtBTUQgSU9NTVUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzItXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zNC1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjQzOmNvbmZpZyBBTURfSU9NTVVfREVCVUdGU1xuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFNRCBJT01NVSBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBmb3IgQU1EIEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQU1EIHByb2Nlc3NvcnMgYXJlIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgdGhlIHN0YW5kYXJkIHByYWN0aWNlIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbiwgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB4ODYsIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGlzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gZmVhdHVyZXMgc3BlY2lmaWMgdG8gQU1EIHByb2Nlc3NvcnMgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gbG9jYXRlIHRoZSBgS1ZNX0FNRGAgc3ltYm9sLCB3aGljaCBsaWtlbHkgY29udHJvbHMgdmFyaW91cyBBTUQtc3BlY2lmaWMgS1ZNIGZ1bmN0aW9uYWxpdGllcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBLVk0gYW5kIElPTU1VIGNvbmZpZ3VyYXRpb25zIOKAkyBgS1ZNX0FNRGAgYW5kIGBBTURfSU9NTVVgIGluIHBhcnRpY3VsYXIuIEJ1dCwgd2FpdC4uLiB3aGF0IGFib3V0IGBJUlFfUkVNQVBgPyBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBBTURfSU9NTVVgIGFuZCBgSVJRX1JFTUFQYC4gRG9lcyBgQU1EX0lPTU1VYCAqZGVwZW5kKiBvbiBgSVJRX1JFTUFQYCwgbWVhbmluZyB0aGF0IGl0IHJlcXVpcmVzIGl0IHRvIGZ1bmN0aW9uPyBPciBkb2VzIGBBTURfSU9NTVVgICpzZWxlY3QqIGl0LCBtYWtpbmcgYElSUV9SRU1BUGAgYSBzb3J0IG9mIGltcGxpY2l0IHJlcXVpcmVtZW50IHRoYXQgaXMgdGFrZW4gY2FyZSBvZiBhdXRvbWF0aWNhbGx5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBJUlFfUkVNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDQzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQ2hlY2tpbmcgYEFNRF9JT01NVWAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGEgbWV0aG9kaWNhbCBjaGVjayBvZiB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYEFNRF9JT01NVWAuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O3doYXQgZXh0ZXJuYWwgZWxlbWVudHMgaW50ZXJhY3Qgd2l0aCB0aGlzIGZlYXR1cmU/IFdoYXQgY29tcG9uZW50cyBhcmUgcmVseWluZyBvbiBpdCwgYW5kIHdoYXQsIGluIHR1cm4sIGRvZXMgaXQgZGVwZW5kIG9uPyYjMzQ7IEkgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSB0aGUga2VybmVsIG1vZHVsZXMgaW52b2x2ZWQsIHRoZWlyIHZlcnNpb24gY29tcGF0aWJpbGl0eSwgYW55IG5lY2Vzc2FyeSBmaXJtd2FyZSB1cGRhdGVzLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBoYXJkd2FyZSBvciBzb2Z0d2FyZSBjb25maWd1cmF0aW9ucyBvbiB0aGlzIHN5c3RlbS4gTXkgcHJpb3JpdHkgaXMgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBzdGlja2luZyBwb2ludHMgKmJlZm9yZSogSSBldmVuIGJlZ2luIHRvIGltcGxlbWVudCBvciB0cm91Ymxlc2hvb3QgYW55dGhpbmcgZnVydGhlci4gVGhpcyBpbnZvbHZlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBrbm93biBjb21wYXRpYmlsaXR5IG1hdHJpY2VzLiBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIGEgc3RhYmxlIGFuZCBwcm9wZXJseSBmdW5jdGlvbmluZyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgdGhlIEFNRCBJT01NVSBEcml2ZXIqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgYGRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBBTUQgSU9NTVUgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIHNldHRpbmdzIOKAkyB0aGUgb25lcyB0aGF0IGRlZmluZSB0aGUgdmVyeSBmb3VuZGF0aW9uIG9mIGhvdyB0aGlzIGRyaXZlciBpcyBidWlsdCBhbmQgZW5hYmxlZC4gSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHN0YXRlcywgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0JiMzOTtzIGluIHBsYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzZXR0aW5ncyBwbGF5IHdpdGggdGhlIGJyb2FkZXIgSU9NTVUgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsIGFuZCBob3cgdGhleSBpbXBhY3QgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBhbnkgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpbGwgcGxheSB3aXRoIGFueSBvdGhlciByZWxhdGVkIGhhcmR3YXJlLiBUaGlzIGZpbGUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGNvbnRyb2wgYW5kIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGlzIGNyaXRpY2FsIGNvbXBvbmVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBBTUQgSU9NTVUgc3VwcG9ydFxuICAgMzpcdGNvbmZpZyBBTURfSU9NTVVcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdHNlbGVjdCBTV0lPVExCXG4gICA2Olx0XHRzZWxlY3QgUENJX01TSVxuICAgNzpcdFx0c2VsZWN0IFBDSV9BVFNcbiAgIDg6XHRcdHNlbGVjdCBQQ0lfUFJJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BBU0lEXG4gIDEwOlx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiAgMTE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbiAgMTI6XHRcdHNlbGVjdCBJT01NVV9BUElcbiAgMTM6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE0Olx0XHRzZWxlY3QgSU9NTVVfU1ZBXG4gIDE1Olx0XHRzZWxlY3QgSU9NTVVfSU9QRlxuICAxNjpcdFx0c2VsZWN0IElPTU1VRkRfRFJJVkVSIGlmIElPTU1VRkRcbiAgMTc6XHRcdHNlbGVjdCBHRU5FUklDX1BUXG4gIDE4Olx0XHRzZWxlY3QgSU9NTVVfUFRcbiAgMTk6XHRcdHNlbGVjdCBJT01NVV9QVF9BTURWMVxuICAyMDpcdFx0c2VsZWN0IElPTU1VX1BUX1g4Nl82NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnM6CgoqKlRoaW5raW5nIFRocm91Z2ggSU9NTVUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCBgQU1EX0lPTU1VYCBpcyB0aGUgY29ycmVjdCBzZXR0aW5nLiBJdCYjMzk7cyB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5IEkgbmVlZC4gQnV0LCBJJiMzOTttIG5vdCBzdG9wcGluZyB0aGVyZTsgbGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgZnVydGhlci4gTm93LCB3aGF0IGFib3V0IGBJUlFfUkVNQVBgPyBUaGF0JiMzOTtzIHRoZSBuZXh0IGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoYXQgb3B0aW9uIGRlZmluZWQ/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpbiB0aGUga2VybmVsIGNvbmZpZyBmaWxlcy4gRWl0aGVyIGBhcmNoL3g4Ni9LY29uZmlnYCBvciBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBzaG91bGQgaGF2ZSB0aGUgZGV0YWlscyBJJiMzOTttIGFmdGVyLCBhbmQgdGhhdCBzaG91bGQgY2xhcmlmeSBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVJRX1JFTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZz0xOTk9c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvcmlzY3YvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMC1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoyMDE6Y29uZmlnIElSUV9SRU1BUFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSVJRX1JFTUFQIENvbmZpZ3VyYXRpb24gaW4gdGhlIElPTU1VIERyaXZlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgSVJRX1JFTUFQYC4gSSBzdXNwZWN0IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvdGVudGlhbCBidWlsZC10aW1lIGNvbnN0cmFpbnRzIG9yIGNvbmZsaWN0cy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIGFzIGluY29ycmVjdCBzZXR0aW5ncyBoZXJlIGNhbiBsZWFkIHRvIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIG9yIGV2ZW4gc3lzdGVtIGluc3RhYmlsaXR5IHdoZW4gaGFuZGxpbmcgaW50ZXJydXB0IHJlbWFwcGluZy4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgdGhpcyBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBJT01NVSBpbXBsZW1lbnRhdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGF0IHBsYXkuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIG5vdGUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbmRpdGlvbmFscyBvciBsaW1pdGF0aW9ucy4gVGhlIGdvYWwgaXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJhbWlmaWNhdGlvbnMgb2YgYW55IGNoYW5nZXMgSSYjMzk7bSBjb25zaWRlcmluZyB3aXRoaW4gdGhpcyBzZWN0aW9uLCBzbyBJJiMzOTttIHNjYW5uaW5nIGZvciBhbnkgc3VidGxlIGRldGFpbHMgdGhhdCBtaWdodCBiZSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMTpcdGNvbmZpZyBJUlFfUkVNQVBcbiAyMDI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1wmIzM0O1xuIDIwMzpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgXHUwMDI2XHUwMDI2IFg4Nl9JT19BUElDIFx1MDAyNlx1MDAyNiBQQ0lfTVNJIFx1MDAyNlx1MDAyNiBBQ1BJXG4gMjA0Olx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiAyMDU6XHRcdGhlbHBcbiAyMDY6XHRcdCAgU3VwcG9ydHMgSW50ZXJydXB0IHJlbWFwcGluZyBmb3IgSU8tQVBJQyBhbmQgTVNJIGRldmljZXMuXG4gMjA3Olx0XHQgIFRvIHVzZSB4MmFwaWMgbW9kZSBpbiB0aGUgQ1BVJiMzOTtzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvclxuIDIwODpcdFx0ICB0byBzdXBwb3J0IHBsYXRmb3JtcyB3aXRoIENQVSYjMzk7cyBoYXZpbmcgXHUwMDNlIDggYml0IEFQSUMgSUQsIHNheSBZLlxuIDIwOTpcdFxuIDIxMDpcdCMgT01BUCBJT01NVSBzdXBwb3J0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjEyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBJUlFfUkVNQVAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBgSVJRX1JFTUFQYCBjb25maWd1cmF0aW9uIGxvb2tzIHByb21pc2luZy4gVGhlIHBhdGNoIHRhcmdldHMgYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCBhbmQgYGRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNgLCB3aGljaCBtYWtlcyBpdCBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZDogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuCgpMZXQgbWUgcXVpY2tseSBjaGVjayB3aGljaCBvZiB0aGVzZSBhcmUgc3RhdGljLiBHb29kLCBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYW5kIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCBhcmUgYWxsIHN0YXRpYy4gYGFtZF9pb21tdV91cGRhdGVfZ2FgIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgIGFyZSBleHBvcnRlZCwgc28gdGhhdCYjMzk7cyBoZWxwZnVsLiBgYXZpY19waV91cGRhdGVfaXJ0ZWAgaXMgcHJlc2VudCBidXQgbm90IHN0YXRpYywgc28gSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhhdCBhcyB3ZWxsLCB0aG91Z2ggaXQgYXBwZWFycyB0byBiZSBhbiBleGlzdGluZyBmdW5jdGlvbi4KCk9rYXksIGxldCYjMzk7cyBtYWtlIGEgY2xlYXIgbGlzdCBvZiB0aGUgcmVsZXZhbnQgc3ltYm9scyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaW4gbW9yZSBkZXRhaWw6IGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLgoKTm93LCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGxpc3RlZCBhcyBgS1ZNX0FNRGAsIGBBTURfSU9NTVVgLCBhbmQgb2YgY291cnNlLCBgSVJRX1JFTUFQYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQuCgpIb2xkIG9uLCBJIHNlZSBhIHBvdGVudGlhbCBnb3RjaGEuLi4gYGFtZF9pb21tdV9nYXBwaWAgaXMgYSAqYm9vdCBwYXJhbWV0ZXIqLiBTeXprYWxsZXIgbWlnaHQgbm90IHBhc3MgdGhhdCBieSBkZWZhdWx0ISBUaGUgcHJvYmxlbSBpcyB0aGF0IEkgY2FuJiMzOTt0IGRpcmVjdGx5IGNvbnRyb2wgYm9vdCBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBzZXQtcmVzdWx0cyBtZWNoYW5pc20uIEkgY2FuIG9ubHkgY29udHJvbCBjb25maWdzIGFuZCBmb2N1cyBzeW1ib2xzLiBUaGUgcHJvbXB0IHN0YXRlcyB0aGF0IEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFNvLCBpcyBHQVBQSSByZWFjaGFibGUgKndpdGhvdXQqIHRoYXQgYm9vdCBwYXJhbWV0ZXI/IEkgbmVlZCB0byBjaGVjayBob3cgR0FQUEkgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgcmVhY2hhYmxlLiBJJiMzOTtsbCBjaGVjayBgcGFyc2VfYW1kX2lvbW11X29wdGlvbnNgIHRvIGRldGVybWluZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc1NTpcdFx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtpcnRjYWNoZWRpc1wmIzM0OywgMTEpID09IDApIHtcbjM3NTY6XHRcdFx0XHRhbWRfaW9tbXVfaXJ0Y2FjaGVkaXMgPSB0cnVlO1xuMzc1NzpcdFx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtub2h1Z2VwYWdlc1wmIzM0OywgMTEpID09IDApIHtcbjM3NTg6XHRcdFx0XHRwcl9pbmZvKFwmIzM0O1Jlc3RyaWN0aW5nIFYxIHBhZ2Utc2l6ZXMgdG8gNEtpQlwmIzM0Oyk7XG4zNzU5Olx0XHRcdFx0YW1kX2lvbW11X3Bnc2l6ZV9iaXRtYXAgPSBBTURfSU9NTVVfUEdTSVpFU180SztcbjM3NjA6XHRcdFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXCYjMzQ7djJfcGdzaXplc19vbmx5XCYjMzQ7LCAxNSkgPT0gMCkge1xuMzc2MTpcdFx0XHRcdHByX2luZm8oXCYjMzQ7UmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCLzJNaUIvMUdpQlwmIzM0Oyk7XG4zNzYyOlx0XHRcdFx0YW1kX2lvbW11X3Bnc2l6ZV9iaXRtYXAgPSBBTURfSU9NTVVfUEdTSVpFU19WMjtcbjM3NjM6XHRcdFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXCYjMzQ7Z2FwcGlcJiMzNDssIDUpID09IDApIHtcbjM3NjQ6XHRcdFx0XHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xuMzc2NTpcdFx0XHR9IGVsc2Uge1xuMzc2NjpcdFx0XHRcdHByX25vdGljZShcJiMzNDtVbmtub3duIG9wdGlvbiAtICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3RyKTtcbjM3Njc6XHRcdFx0fVxuMzc2ODpcdFxuMzc2OTpcdFx0XHRzdHIgJiM0Mzs9IHN0cmNzcG4oc3RyLCBcJiMzNDssXCYjMzQ7KTtcbjM3NzA6XHRcdFx0d2hpbGUgKCpzdHIgPT0gJiMzOTssJiMzOTspXG4zNzcxOlx0XHRcdFx0c3RyJiM0MzsmIzQzOztcbjM3NzI6XHRcdH1cbjM3NzM6XHRcbjM3NzQ6XHRcdHJldHVybiAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhbWRfaW9tbXVfZ2FwcGlgIFNldHRpbmcqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgYW1kX2lvbW11X2dhcHBpYCBkZWZhdWx0cyB0byBiZWluZyBkaXNhYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IGl0IGFsc28gcHJlc2VudHMgYSBwb3RlbnRpYWwgaXNzdWUuIElmIHRoZSBkZWZhdWx0IGlzIGZhbHNlLCBhbmQgc3l6a2FsbGVyLCB3aGljaCBpcyB0aGUgZnV6emVyIHdlJiMzOTtyZSB1c2luZywgZG9lc24mIzM5O3QgZXhwbGljaXRseSBwYXNzIGBhbWRfaW9tbXU9Z2FwcGlgIGFzIGEgYm9vdCBwYXJhbWV0ZXIsIHRoZW4gYGFtZF9pb21tdV9nYXBwaWAgd2lsbCBzdGF5IGRpc2FibGVkLiBIbW0sIHdhaXQgYSBzZWNvbmQsIEkgcmVtZW1iZXIgc3l6a2FsbGVyICpjYW4qIGluamVjdCBib290IHBhcmFtZXRlcnMsIGlmIHdlIGNvbmZpZ3VyZSBpdCBjb3JyZWN0bHkuIEhvd2V2ZXIsIGFzIGEgcmV2aWV3ZXIgaW4gdGhpcyBzaXR1YXRpb24sIEkgY2FuJiMzOTt0IGRpcmVjdGx5IHNwZWNpZnkgdGhvc2UgYm9vdCBwYXJhbWV0ZXJzIGZvciB0aGUgZnV6emVyLiBUaGlzIGxpbWl0cyBteSBhYmlsaXR5IHRvIHRlc3QgdGhpcyBjb25maWd1cmF0aW9uLgoKVGhpcyBicmluZ3MgdXAgYW5vdGhlciBxdWVzdGlvbjogaXMgYGFtZF9pb21tdV9nYXBwaWAgKm9ubHkqIGNvbnRyb2xsYWJsZSB2aWEgdGhlIGJvb3QgcGFyYW1ldGVyPyBJZiB0aGVyZSYjMzk7cyBhbm90aGVyIG1lY2hhbmlzbSwgYSBtb2R1bGUgcGFyYW1ldGVyIG9yIHNvbWV0aGluZywgdGhhdCB3b3VsZCBjaGFuZ2UgdGhpbmdzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGNvbnRyb2xsZWQgYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGtlcm5lbCBib290IHBhcmFtZXRlci4gTGV0IG1lIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3IgYW55IGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYGFtZF9pb21tdV9nYXBwaWAgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3QgYmVpbmcgc2V0IGFueXdoZXJlIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FtZF9pb21tdV9nYXBwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaD00Mz1pbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oOjQ0OmV4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oLTQ1LWV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0xNjE9aW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0xNjItXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MTYzOmJvb2wgYW1kX2lvbW11X2dhcHBpO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjE2NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9nYXBwaSk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMTY1LVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0yOTk4PXN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzAwNC1cdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzAwNTpcdFx0LyogRGlzYWJsZSBHQVBQSSwgZG8gbm90IGNoZWNrIGFtZF9pb21tdV9nYXBwaSBhcyBpdCBtYXkgYmVcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDA2LVx0XHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA0OS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDUwOlx0aWYgKGFtZF9pb21tdV9nYXBwaSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDUxLVx0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcdTAwMjZcdTAwMjZcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1My1cdFx0cHJfd2FybihcJiMzNDtHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxcblwmIzM0Oyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzA1NDpcdFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1NS1cdH1cbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1OC1cdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzA1OTpcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDYwLVx0XHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA3MS1cdHByX2luZm8oXCYjMzQ7VmlydHVhbCBBUElDIGVuYWJsZWQgd2l0aCAlc1xcblwmIzM0OyxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDcyOlx0XHRhbWRfaW9tbXVfZ2FwcGkgPyBcJiMzNDtHQVBQSVwmIzM0OyA6IFwmIzM0O0dBTE9HXCYjMzQ7KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDczLSNlbmRpZlxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zNzM2PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FtZF9pb21tdV9vcHRpb25zKGNoYXIgKnN0cilcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzc2My1cdFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXCYjMzQ7Z2FwcGlcJiMzNDssIDUpID09IDApIHtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNzY0Olx0XHRcdGFtZF9pb21tdV9nYXBwaSA9IHRydWU7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzc2NS1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NjI9c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk3My1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6Mzk3NDpcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSkge1xuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTc1LVx0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYXBwaV9kaXMgPSAhcG9zdGVkX2ludHIgXHUwMDI2XHUwMDI2XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYz00MDI2PWludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDQ3LVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDQ4Olx0aWYgKGFtZF9pb21tdV9nYXBwaSlcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA0OS1cdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQ4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoaXMgZmVhdHVyZSwgd2hhdGV2ZXIgaXQgaXMsIGlzICpvbmx5KiBlbmFibGVkIHRocm91Z2ggYSBib290IHBhcmFtZXRlci4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIG9uIHRoZSBzdXJmYWNlLiBIb3dldmVyLCB0aGUgbW9yZSBJIGRpZyBpbnRvIHRoaXMgcGF0Y2gsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIGJyb2FkZXIgdGhhbiB0aGF0IGluaXRpYWwgbGltaXRhdGlvbiBzdWdnZXN0cy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpY2F0aW9ucyB0byBgYW1kX2lvbW11X3VwZGF0ZV9nYWAgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAg4oCTIHRoZXNlIGZ1bmN0aW9ucyYjMzk7IHNpZ25hdHVyZXMgYW5kIGNvcmUgbG9naWMgaGF2ZSBiZWVuIGFsdGVyZWQuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhleSYjMzk7cmUgY2FsbGVkIGV2ZW4gd2hlbiB0aGlzIGJvb3QgcGFyYW1ldGVyIGlzbiYjMzk7dCBleHBsaWNpdGx5IHNldC4KCkZvciBleGFtcGxlLCBJJiMzOTttIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCByaWdodCBub3cuIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCBjYWxscyBib3RoIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYC4gQW5kIGd1ZXNzIHdoYXQ/IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCAqZG9lc24mIzM5O3QqIGNoZWNrIGBhbWRfaW9tbXVfZ2FwcGlgLiBJdCBjYWxscyB0aGVzZSBmdW5jdGlvbnMgcmVnYXJkbGVzcyBvZiB0aGUgYm9vdCBwYXJhbWV0ZXImIzM5O3Mgc2V0dGluZy4KClRoZSBsb2dpYyB3aXRoaW4gYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgIHNlZW1zIHRvIGhhbmRsZSBib3RoIHNjZW5hcmlvcywgd2hldGhlciBgYW1kX2lvbW11X2dhcHBpYCBpcyB0cnVlIG9yIGZhbHNlLiBUaGVyZWZvcmUsIHRob3NlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYWJzb2x1dGVseSByZWFjaGFibGUsIGV2ZW4gd2l0aG91dCB0aGF0IHNwZWNpZmljIGJvb3QgcGFyYW1ldGVyIGJlaW5nIHNldCEgVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAgaGFuZGxlcyB0aGlzIGR1YWxpdHkuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiBgYXJjaC94ODYva3ZtL3N2bS9hdmljLmNgIGFuZCBkaWcgaW50byBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0LCBldmVuIHdoZW4gdGhlIGludGVuZGVkIGZlYXR1cmUgaXMgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjk6XHRzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCxcbjEwNzA6XHRcdFx0XHRcdFx0ICAgIGludCBjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4xMDcxOlx0e1xuMTA3MjpcdFx0aW50IHBvc3RlZF9pbnRyID0gISEoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKSBcdTAwM2NcdTAwM2NcbjEwNzM6XHRcdFx0XHQgIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUO1xuMTA3NDpcdFx0aW50IGlzX3ZjcHVfcnVubmluZyA9IChhcGljaWQgXHUwMDNlPSAwKSBcdTAwM2NcdTAwM2NcbjEwNzU6XHRcdFx0XHQgICAgICBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQ7XG4xMDc2Olx0XHRpbnQgZmxhZ3MgPSBwb3N0ZWRfaW50ciB8IGlzX3ZjcHVfcnVubmluZztcbjEwNzc6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuMTA3ODpcdFx0c3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkO1xuMTA3OTpcdFxuMTA4MDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrKTtcbjEwODE6XHRcbjEwODI6XHRcdC8qXG4xMDgzOlx0XHQgKiBIZXJlLCB3ZSBnbyB0aHJvdWdoIHRoZSBwZXItdmNwdSBpcl9saXN0IHRvIHVwZGF0ZSBhbGwgZXhpc3RpbmdcbjEwODQ6XHRcdCAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS5cbjEwODU6XHRcdCAqL1xuMTA4NjpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4xMDg3Olx0XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXHUwMDI2XHUwMDI2IGNwdSBcdTAwM2U9IDApXG4xMDg4Olx0XHRcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IGNwdTtcbjEwODk6XHRcdFx0cmV0dXJuO1xuMTA5MDpcdFx0fVxuMTA5MTpcdFxuMTA5MjpcdFx0aWYgKGlzX3ZjcHVfcnVubmluZyBcdTAwMjZcdTAwMjYgYW1kX2lvbW11X2dhcHBpKSB7XG4xMDkzOlx0XHRcdC8qIElGIGNvbmRpdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlICovXG4xMDk0Olx0XHRcdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xKVxuMTA5NTpcdFx0XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuMTA5NjpcdFxuMTA5NzpcdFx0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gY3B1OyAvKiBTdG9yZSBjcHUgbm8gYXMgdGFyZ2V0IGZvciBHQVBQSSAqL1xuMTA5ODpcdFx0fSBlbHNlIGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbjEwOTk6XHRcdFx0YXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuMTEwMDpcdFx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4xMTAxOlx0XHR9XG4xMTAyOlx0XG4xMTAzOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlycWZkLCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCwgdmNwdV9saXN0KSB7XG4xMTA0Olx0XHRcdHZvaWQgKmRhdGEgPSBpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX2RhdGE7XG4xMTA1Olx0XG4xMTA2Olx0XHRcdGlmICghKGFjdGlvbiBcdTAwMjYgQVZJQ19UT0dHTEVfT05fT0ZGKSlcbjExMDc6XHRcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XG4xMTA4Olx0XHRcdGVsc2UgaWYgKGlzX3ZjcHVfcnVubmluZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBTUQgSU9NTVUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgYGFtZF9pb21tdV91cGRhdGVfZ2FgIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgIGFyZSBub3cgZ2V0dGluZyBjYWxsZWQgd2l0aCBgYXBpY2lkYCBhbmQgYGZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGNwdWAgYW5kIGBnYV9sb2dfaW50cmAgcGFyYW1ldGVycy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEFWSUMgY29kZSwgZXZlbiBpZiBHQVBQSSBpc24mIzM5O3QgYmVpbmcgdXNlZC4gVGhlIGNydWNpYWwgdGhpbmcgaXMgdGhhdCBgZmxhZ3NgIGlzIGJlaW5nIGNvbnN0cnVjdGVkIGFuZCBwYXNzZWQgdG8gYGFtZF9pb21tdV91cGRhdGVfZ2FgLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYEtWTV9BTURgLCBgQU1EX0lPTU1VYCwgYW5kIGBJUlFfUkVNQVBgLiBPa2F5LCBgS1ZNX0FNRGAgaXMgdHJpc3RhdGUsIGBBTURfSU9NTVVgIGFuZCBgSVJRX1JFTUFQYCBhcmUgYm9vbGVhbnMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19LVk1gIGlzIGltcGxpZWQgYnkgYENPTkZJR19LVk1fQU1EYCBhbmQgYENPTkZJR19JT01NVV9BUElgIGlzIHNlbGVjdGVkIGJ5IGBBTURfSU9NTVVgLgoKTm93LCBJIG5lZWQgdG8gbGlzdCB0aGUga2V5IHN5bWJvbHMgYW5kIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBrZWVwaW5nIGFuIGV5ZSBvbi4gUmlnaHQsIGxldCYjMzk7cyBzZWU6IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGFuZCBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYC4KCldhaXQgYSBtaW51dGUsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGlzIHN0YXRpYyB3aXRoaW4gYGRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNgLiBSaWdodCwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY2AgZm9yIHRoaXMgZnVuY3Rpb24uIEdvb2QgdG8ga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTM5NjEtXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjM5NjI6c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTYzLXtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwMDU9aW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAxOC1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAxOTpcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCBmbGFncyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMjAtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYz00MDI2PWludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDUyLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDUzOlx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBhcGljaWQsIGZsYWdzKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5OTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElPTU1VIGFuZCBBVklDIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXM6IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGFuZCwgb2YgY291cnNlLCBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCBpdHNlbGYuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIEFWSUMtc3BlY2lmaWMgZ3JvdXA6IGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGFuZCBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmAuCgpOb3csIEkmIzM5O20ganVzdCBjdXJpb3VzIGlmIEkmIzM5O3ZlIG1pc3NlZCBhbnl0aGluZywgc28gSSYjMzk7bGwgcXVpY2tseSBjb25zaWRlciBgYXZpY19kZXN0cm95X3ZjcHVgLCBgYXZpY19pbml0X3ZjcHVgLCBhbmQgYHN2bV9pcl9saXN0X2RlbGAuIE15IGludHVpdGlvbiBzYXlzIHRoZXNlIG1pZ2h0IGJlIHJlbGV2YW50LCBzbyBJJiMzOTtsbCBhZGQgdGhlbSB0byB0aGUgbGlzdCB0byBjaGVjayBsYXRlci4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBhdmljX2Rlc3Ryb3lfdmNwdWAgYW5kIGBhdmljX2luaXRfdmNwdWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F2aWNfZGVzdHJveV92Y3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTEwPXN0YXRpYyB2b2lkIGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjItXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MjM6dm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkyNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjI2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgZm9jdXNlZCBzZXQgb2YgY2hhbmdlcyBoZXJlLCBtb3N0bHkgY2VudGVyZWQgYXJvdW5kIHRoZSBBZHZhbmNlZCBWaXJ0dWFsIEludGVycnVwdCBDb250cm9sbGVyIChBVklDKSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIEFNRCBJT01NVS4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgYWRkaXRpb24gb2YgYGF2aWNfZGVzdHJveV92Y3B1YCBpcyBhIGtleSBhZGRpdGlvbiwgbGlrZWx5IGEgbmVjZXNzYXJ5IGNsZWFudXAgZnVuY3Rpb24gdG8gY29tcGxlbWVudCBleGlzdGluZyBWQ1BVIGluaXRpYWxpemF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYGF2aWNfaW5pdF92Y3B1YCwgYHN2bV9pcl9saXN0X2RlbGAsIGBhdmljX2hhcmR3YXJlX3NldHVwYCwgYGF2aWNfaGFyZHdhcmVfdW5zZXR1cGAsIGBlbmFibGVfaW9tbXVzX3ZhcGljYCwgYW5kIGBpb21tdV9kaXNhYmxlYCBhbGwgc3VnZ2VzdCBkZWVwZXIgaW50ZWdyYXRpb24gYW5kIHJlZmluZWQgY29udHJvbC4KCkZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucywgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXMgSSYjMzk7bSBzZWVpbmc6IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgLCBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmAsIGBhdmljX2Rlc3Ryb3lfdmNwdWAgYW5kIGBzdm1faXJfbGlzdF9kZWxgLiBUaGUgcHJlc2VuY2Ugb2Ygc28gbWFueSBJT01NVSBhbmQgR0EtcmVsYXRlZCBmdW5jdGlvbiBpbmRpY2F0ZXMgYSBjYXJlZnVsIGNvbnNpZGVyYXRpb24gb2YgZ3Vlc3QgYWRkcmVzc2luZyBhbmQgaW50ZXJydXB0IHJvdXRpbmcuIFRoZSBHQXBwSSB3YWtldXAgbGlzdCBmdW5jdGlvbnMsIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGhhbmRsZXIsIGxvb2sgbGlrZSB0aGV5IGFyZSBjZW50cmFsIHRvIHRoZSBBVklDIGludGVycnVwdCBpbmplY3Rpb24gcHJvY2Vzcy4KCkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHN2bV9pcl9saXN0X2RlbGAgaXMgc3RhdGljLiBUaGF0IHdvdWxkIGltcGFjdCBpdHMgdmlzaWJpbGl0eSBhbmQgc2NvcGUuIFRoYXQgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBvbiB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgY29uc2lzdGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2bV9pcl9saXN0X2RlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTkzMT12b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MzYtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5Mzc6c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkzOC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTU1PWludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk2Mi1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTYzOlx0c3ZtX2lyX2xpc3RfZGVsKGlycWZkKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NTQKCQkJCQkJCW91dHB1dDogMjczCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gYW5kIEl0cyBJbXBsaWNhdGlvbnMqKgoKT2theSwgaXQmIzM5O3MgY2xlYXI6IHRoaXMgaXMgYSBzdGF0aWMgY29uZmlndXJhdGlvbi4gTm8gZHluYW1pYyBlbGVtZW50cyB0byBjb25zaWRlciBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBLVk1fQU1EYCwgYEFNRF9JT01NVWAsIGFuZCBgSVJRX1JFTUFQYC4gVGhlc2UgdGhyZWUgYXJlIHRoZSBrZXkgY29tcG9uZW50cy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cm9kdWNpbmcgR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cywgb3IgR0FQUEksIHNwZWNpZmljYWxseSBmb3IgQU1EJiMzOTtzIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIE5vdywgdGhlIG1lYXQgb2YgdGhpcyBpcyB0aGF0IGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgdXBkYXRlIHByb2Nlc3MgZm9yIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cmllcyBhbmQgdGhlIHZDUFUgYWZmaW5pdHkgbG9naWMuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBhYnNvbHV0ZWx5IHJlbGV2YW50IHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2Ugd2hlbiB1c2luZyBRRU1VIHdpdGggS1ZNIFNWTS4KCldoYXQmIzM5O3MgcmVhbGx5IGludGVyZXN0aW5nIGlzIHRoYXQgdGhlc2UgdXBkYXRlcyBhcmUgaW1wYWN0aW5nIGNvcmUgQVZJQyBhbmQgSU9NTVUgbG9naWMsIGV2ZW4gaWYgR0FQUEkgaXNuJiMzOTt0IGRpcmVjdGx5IGFjdGl2YXRlZCB0aHJvdWdoIGEgYm9vdCBwYXJhbWV0ZXIuIFRoaXMgbWVhbnMgdGhhdCBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQsIGV2ZW4gaWYgbm90IGRpcmVjdGx5IGVuYWJsZWQuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gY2hlY2sgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpJJiMzOTtsbCBwcm9jZWVkIHRvIHNldCB0aGUgcmVzdWx0cyBiYXNlZCBvbiB0aGlzIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJUlFfUkVNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5JiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUmIzM0OywKICAgICYjMzQ7YXZpY19waV91cGRhdGVfaXJ0ZSYjMzQ7LAogICAgJiMzNDtfX2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthdmljX2Rlc3Ryb3lfdmNwdSYjMzQ7LAogICAgJiMzNDtzdm1faXJfbGlzdF9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzIChHQVBQSSkgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHVwZGF0ZXMgYW5kIHZDUFUgYWZmaW5pdHkgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBRRU1VIHdpdGggS1ZNIFNWTSkuIFRoZSBjaGFuZ2VzIGFsdGVyIGNvcmUgQVZJQyBhbmQgSU9NTVUgbG9naWMgZXZlbiB3aGVuIEdBUFBJIGlzIG5vdCBleHBsaWNpdGx5IGVuYWJsZWQgdmlhIGJvb3QgcGFyYW1ldGVyLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SVJRX1JFTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSYjMzQ7LAogICAgJiMzNDthbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlJiMzNDssCiAgICAmIzM0O2F2aWNfcGlfdXBkYXRlX2lydGUmIzM0OywKICAgICYjMzQ7X19hbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2F2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0JiMzNDssCiAgICAmIzM0O2F2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXImIzM0OywKICAgICYjMzQ7YXZpY19kZXN0cm95X3ZjcHUmIzM0OywKICAgICYjMzQ7c3ZtX2lyX2xpc3RfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cyAoR0FQUEkpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBJdCBtb2RpZmllcyB0aGUgaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB1cGRhdGVzIGFuZCB2Q1BVIGFmZmluaXR5IGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgUUVNVSB3aXRoIEtWTSBTVk0pLiBUaGUgY2hhbmdlcyBhbHRlciBjb3JlIEFWSUMgYW5kIElPTU1VIGxvZ2ljIGV2ZW4gd2hlbiBHQVBQSSBpcyBub3QgZXhwbGljaXRseSBlbmFibGVkIHZpYSBib290IHBhcmFtZXRlciwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTowMS44MjA3ODM5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5Nzg4Mjk2NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiSVJRX1JFTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eVwiLFxuICAgIFwiYW1kX2lvbW11X3VwZGF0ZV9nYVwiLFxuICAgIFwiYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVcIixcbiAgICBcImF2aWNfcGlfdXBkYXRlX2lydGVcIixcbiAgICBcIl9fYW1kX2lvbW11X3VwZGF0ZV9nYVwiLFxuICAgIFwiYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyXCIsXG4gICAgXCJhdmljX2Rlc3Ryb3lfdmNwdVwiLFxuICAgIFwic3ZtX2lyX2xpc3RfZGVsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzIChHQVBQSSkgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHVwZGF0ZXMgYW5kIHZDUFUgYWZmaW5pdHkgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChlLmcuLCBRRU1VIHdpdGggS1ZNIFNWTSkuIFRoZSBjaGFuZ2VzIGFsdGVyIGNvcmUgQVZJQyBhbmQgSU9NTVUgbG9naWMgZXZlbiB3aGVuIEdBUFBJIGlzIG5vdCBleHBsaWNpdGx5IGVuYWJsZWQgdmlhIGJvb3QgcGFyYW1ldGVyLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6MDEuODIwNzkwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1MzA0ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWFlYTAyYzVjNmE4MWE0YTcxNzk1MTI2YTI4ODVlMDBmYmRhYTE2NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDIxOjQ5OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxcbmluZGV4IDM3Yjk0ZjQ4NGVmMzM4Li40MGEyMjA2YTMzYzA4ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcXG5AQCAtMzUsOCArMzUsOCBAQCBzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEge1xcbiBcXHR1NjQgdmFwaWNfYWRkcjtcXHRcXHQvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB2Q1BVJ3MgdkFQSUMuICovXFxuIFxcdHUzMiBnYV90YWc7XFxuIFxcdHUzMiB2ZWN0b3I7XFx0XFx0LyogR3Vlc3QgdmVjdG9yIG9mIHRoZSBpbnRlcnJ1cHQgKi9cXG4tXFx0aW50IGNwdTtcXG4tXFx0Ym9vbCBnYV9sb2dfaW50cjtcXG4rXFx0aW50IGFwaWNpZDtcXG4rXFx0aW50IGZsYWdzO1xcbiBcXHRib29sIGlzX2d1ZXN0X21vZGU7XFxuIFxcdHZvaWQgKmlyX2RhdGE7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcXG5pbmRleCBjZGQ1YTZkYzY0NmYxMS4uODE4NTg0MWQ5YjgxNjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbkBAIC02Myw2ICs2Myw5IEBAXFxuIFxcdGdhX3RhZztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxpc3RfaGVhZCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShyYXdfc3BpbmxvY2tfdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrKTtcXG4rXFxuIHN0YXRpY19hc3NlcnQoX19BVklDX0dBVEFHKEFWSUNfVk1fSURfTUFTSywgQVZJQ19WQ1BVX0lEWF9NQVNLKSA9PSAtMXUpO1xcbiBcXG4gI2RlZmluZSBBVklDX0FVVE9fTU9ERSAtMVxcbkBAIC04NzQsNiArODc3LDkgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KTtcXG4gXFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jayk7XFxuIFxcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3ZtLVxcdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcXG4rXFx0c3ZtLVxcdTAwM2VnYXBwaV9jcHUgPSAtMTtcXG4rXFxuIFxcdGlmICghZW5hYmxlX2FwaWN2IHx8ICFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTg4Niw2ICs4OTIsNDIgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxcbit7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKndha2V1cF9saXN0O1xcbitcXHRyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2s7XFxuK1xcbitcXHRpZiAoV0FSTl9PTihjcHUgXFx1MDAzYyAwKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d2FrZXVwX2xpc3QgPSBcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xcbitcXHRzcGlubG9jayA9IFxcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcXG4rXFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgd2FrZXVwX2xpc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXFxuK3tcXG4rXFx0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xcbitcXG4rXFx0aWYgKFdBUk5fT04oY3B1IFxcdTAwM2MgMCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwaW5sb2NrID0gXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xcbitcXHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXFxuK1xcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XFxuK31cXG4rXFxuK3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuK3tcXG4rXFx0aWYgKHN2bS1cXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFxcdTAwMjZcXHUwMDI2IGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdFxcdHN2bS1cXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XFxuK1xcdH1cXG4rfVxcbitcXG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0YXZpY19oYW5kbGVfZGZyX3VwZGF0ZSh2Y3B1KTtcXG5AQCAtODk2LDEzICs5MzgsMTggQEAgc3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBpcnFmZC1cXHUwMDNlaXJxX2J5cGFzc192Y3B1O1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bTtcXG4gXFxuIFxcdGlmICghdmNwdSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0b19zdm0odmNwdSktXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbitcXHRzdm0gPSB0b19zdm0odmNwdSk7XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZpcnFmZC1cXHUwMDNldmNwdV9saXN0KTtcXG4tXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRvX3N2bSh2Y3B1KS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpKVxcbitcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbiB9XFxuIFxcbiBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG5AQCAtOTMyLDYgKzk3OSw4IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0XFx0dTY0IGVudHJ5O1xcbiBcXHRcXHRpbnQgcmV0O1xcbitcXHRcXHRpbnQgcG9zdGVkX2ludHI7XFxuK1xcdFxcdGJvb2wgaXNfdmNwdV93YWl0aW5nID0gZmFsc2U7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbFxcbkBAIC05NDksMTUgKzk5OCwyMyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGVudHJ5ID0gc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX2VudHJ5O1xcbiBcXHRcXHRpZiAoZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSykge1xcbi1cXHRcXHRcXHRwaV9kYXRhLmNwdSA9IGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0s7XFxuK1xcdFxcdFxcdHBpX2RhdGEuYXBpY2lkID0gZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcXG4rXFx0XFx0XFx0cGlfZGF0YS5mbGFncyA9IEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklORztcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cGlfZGF0YS5jcHUgPSAtMTtcXG4tXFx0XFx0XFx0cGlfZGF0YS5nYV9sb2dfaW50ciA9IGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUjtcXG4rXFx0XFx0XFx0cG9zdGVkX2ludHIgPSAhIShlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xcbitcXHRcXHRcXHRwaV9kYXRhLmZsYWdzID0gcG9zdGVkX2ludHIgXFx1MDAzY1xcdTAwM2MgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQ7XFxuK1xcdFxcdFxcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcXG4rXFx0XFx0XFx0XFx0cGlfZGF0YS5hcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KSkge1xcbitcXHRcXHRcXHRcXHRcXHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRcXHRcXHRcXHRpc192Y3B1X3dhaXRpbmcgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBcXHUwMDI2cGlfZGF0YSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGdvdG8gZ2FwcGlfZXJyX291dDtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFJldmVydCB0byBsZWdhY3kgbW9kZSBpZiB0aGUgSU9NTVUgZGlkbid0IHByb3ZpZGUgbWV0YWRhdGFcXG5AQCAtOTY2LDEyICsxMDIzLDE3IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKFdBUk5fT05fT05DRSghcGlfZGF0YS5pcl9kYXRhKSkge1xcbiBcXHRcXHRcXHRpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsIE5VTEwpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0XFx0XFx0Z290byBnYXBwaV9lcnJfb3V0O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpcnFmZC1cXHUwMDNlaXJxX2J5cGFzc19kYXRhID0gcGlfZGF0YS5pcl9kYXRhO1xcbiBcXHRcXHRsaXN0X2FkZChcXHUwMDI2aXJxZmQtXFx1MDAzZXZjcHVfbGlzdCwgXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbitnYXBwaV9lcnJfb3V0OlxcbitcXHRcXHRpZiAoaXNfdmNwdV93YWl0aW5nKVxcbitcXHRcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XFxuIH1cXG5AQCAtMTAwNCwxMCArMTA2NiwxNCBAQCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24ge1xcbiBcXHRBVklDX1NUQVJUX0JMT0NLSU5HXFx0PSBCSVQoMSksXFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXFxuK3N0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYXBpY2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcXG4ge1xcbi1cXHRib29sIGdhX2xvZ19pbnRyID0gKGFjdGlvbiBcXHUwMDI2IEFWSUNfU1RBUlRfQkxPQ0tJTkcpO1xcbitcXHRpbnQgcG9zdGVkX2ludHIgPSAhIShhY3Rpb24gXFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKSBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHRcXHQgIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUO1xcbitcXHRpbnQgaXNfdmNwdV9ydW5uaW5nID0gKGFwaWNpZCBcXHUwMDNlPSAwKSBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHRcXHQgICAgICBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQ7XFxuK1xcdGludCBmbGFncyA9IHBvc3RlZF9pbnRyIHwgaXNfdmNwdV9ydW5uaW5nO1xcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0c3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkO1xcbiBcXG5AQCAtMTAxNywxNiArMTA4MywzMCBAQCBzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcXG4gXFx0ICogSGVyZSwgd2UgZ28gdGhyb3VnaCB0aGUgcGVyLXZjcHUgaXJfbGlzdCB0byB1cGRhdGUgYWxsIGV4aXN0aW5nXFxuIFxcdCAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS5cXG4gXFx0ICovXFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpKVxcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KSkge1xcbitcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2IGNwdSBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRzdm0tXFx1MDAzZWdhcHBpX2NwdSA9IGNwdTtcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfdmNwdV9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2IGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHQvKiBJRiBjb25kaXRpb24gaGFuZGxlcyB0aGUgaW5pdGlhbCBzdGF0ZSAqL1xcbitcXHRcXHRpZiAoc3ZtLVxcdTAwM2VnYXBwaV9jcHUgIT0gLTEpXFxuK1xcdFxcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG4rXFxuK1xcdFxcdHN2bS1cXHUwMDNlZ2FwcGlfY3B1ID0gY3B1OyAvKiBTdG9yZSBjcHUgbm8gYXMgdGFyZ2V0IGZvciBHQVBQSSAqL1xcbitcXHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHR9XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlycWZkLCBcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcXG4gXFx0XFx0dm9pZCAqZGF0YSA9IGlycWZkLVxcdTAwM2VpcnFfYnlwYXNzX2RhdGE7XFxuIFxcbiBcXHRcXHRpZiAoIShhY3Rpb24gXFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBjcHUsIGdhX2xvZ19pbnRyKSk7XFxuLVxcdFxcdGVsc2UgaWYgKGNwdSBcXHUwMDNlPSAwKVxcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XFxuK1xcdFxcdGVsc2UgaWYgKGlzX3ZjcHVfcnVubmluZylcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEsIGFwaWNpZCwgZmxhZ3MpKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhKSk7XFxuIFxcdH1cXG5AQCAtMTA4MCw3ICsxMTYwLDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXFxuIFxcbiBcXHRXUklURV9PTkNFKGt2bV9zdm0tXFx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbdmNwdS1cXHUwMDNldmNwdV9pZF0sIGVudHJ5KTtcXG4gXFxuLVxcdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgYWN0aW9uKTtcXG4rXFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBjcHUsIGFjdGlvbik7XFxuIFxcbiBcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcXG4gfVxcbkBAIC0xMTIzLDcgKzEyMDMsNyBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxcbiBcXHQgKi9cXG4gXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCAtMSwgYWN0aW9uKTtcXG4rXFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCAtMSwgLTEsIGFjdGlvbik7XFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKTtcXG4gXFxuQEAgLTEyOTYsNiArMTM3NiwyMSBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcih2b2lkKVxcbit7XFxuK1xcdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnZjcHVfd2FrZXVwX2xpc3QgPSBcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xcbitcXHRyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2sgPSBcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XFxuK1xcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9jayhzcGlubG9jayk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3ZtLCB2Y3B1X3dha2V1cF9saXN0LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KSB7XFxuK1xcdFxcdGlmIChrdm1fbGFwaWNfZmluZF9oaWdoZXN0X2lycihcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1KSBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRrdm1fdmNwdV93YWtlX3VwKFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9jayhzcGlubG9jayk7XFxuK31cXG4rXFxuIC8qXFxuICAqIE5vdGU6XFxuICAqIC0gVGhlIG1vZHVsZSBwYXJhbSBhdmljIGVuYWJsZSBib3RoIHhBUElDIGFuZCB4MkFQSUMgbW9kZS5cXG5AQCAtMTMwNCwxMiArMTM5OSwxOCBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxcbiAgKi9cXG4gYm9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbiB7XFxuK1xcdGludCBjcHU7XFxuIFxcdGF2aWMgPSBhdmljX3dhbnRfYXZpY19lbmFibGVkKCk7XFxuIFxcdGlmICghYXZpYylcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0cHJfaW5mbyhcXFwiQVZJQyBlbmFibGVkXFxcXG5cXFwiKTtcXG4gXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KSk7XFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSkpO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBBVklDIGlzIGEgcHJlcmVxdWlzaXRlIGZvciB4MkFWSUMuICovXFxuIFxcdHgyYXZpY19lbmFibGVkID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1gyQVZJQyk7XFxuIFxcdGlmICh4MmF2aWNfZW5hYmxlZCkge1xcbkBAIC0xMzMzLDEyICsxNDM0LDE2IEBAIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFx0XFx0ZW5hYmxlX2lwaXYgPSBmYWxzZTtcXG4gXFxuIFxcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoXFx1MDAyNmF2aWNfZ2FfbG9nX25vdGlmaWVyKTtcXG4rXFx0a3ZtX3NldF9wb3N0ZWRfaW50cl93YWtldXBfaGFuZGxlcihcXHUwMDI2YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcik7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gdm9pZCBhdmljX2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcXG4ge1xcbi1cXHRpZiAoYXZpYylcXG4tXFx0XFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcXG4rXFx0aWYgKCFhdmljKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKE5VTEwpO1xcbitcXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKE5VTEwpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZTAyYTM4ZGE1Mjk2ZTMuLmI2ODcxMzNmODUyOGJhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTEzNTYsNiArMTM1Niw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpKTtcXG4gXFxuK1xcdGF2aWNfZGVzdHJveV92Y3B1KHN2bSk7XFxuK1xcbiBcXHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xcbiBcXHRzdm1fZnJlZV9uZXN0ZWQoc3ZtKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuaW5kZXggNTEzNzQxNmJlNTkzZDcuLjQ3ZDViYjVkNzEwM2RhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuQEAgLTM2Miw2ICszNjIsMTAgQEAgc3RydWN0IHZjcHVfc3ZtIHtcXG4gXFxuIFxcdC8qIEd1ZXN0IEdJRiB2YWx1ZSwgdXNlZCB3aGVuIHZHSUYgaXMgbm90IGVuYWJsZWQgKi9cXG4gXFx0Ym9vbCBndWVzdF9naWY7XFxuK1xcbitcXHQvKiBHQVBQSSByZWxhdGVkIGZpZWxkcyAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3Q7XFxuK1xcdGludCBnYXBwaV9jcHU7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgc3ZtX2NwdV9kYXRhIHtcXG5AQCAtOTA5LDYgKzkxMyw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTtcXG4gaW50IGF2aWNfaW5jb21wbGV0ZV9pcGlfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xcbit2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG4gdm9pZCBhdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXFxuaW5kZXggODM0ZDhmYWJmYmEzODcuLjA0NDE3OWNhYjEyZTRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcXG5AQCAtNDEsNiArNDEsNyBAQCBpbnQgYW1kX2lvbW11X2VuYWJsZSh2b2lkKTtcXG4gdm9pZCBhbWRfaW9tbXVfZGlzYWJsZSh2b2lkKTtcXG4gaW50IGFtZF9pb21tdV9yZWVuYWJsZShpbnQgbW9kZSk7XFxuIGludCBhbWRfaW9tbXVfZW5hYmxlX2ZhdWx0aW5nKHVuc2lnbmVkIGludCBjcHUpO1xcbitleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuIGV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyO1xcbiBleHRlcm4gZW51bSBwcm90ZWN0aW9uX2RvbWFpbl9tb2RlIGFtZF9pb21tdV9wZ3RhYmxlO1xcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ncHRfbGV2ZWw7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcXG5pbmRleCBmOWY3MTgwODc4OTMwMy4uZGUwYjIzMzA2OTQ0YjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcXG4rKysgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxcbkBAIC05NCw2ICs5NCw3IEBAXFxuICNkZWZpbmUgRkVBVFVSRV9YMkFQSUNcXHRcXHRCSVRfVUxMKDIpXFxuICNkZWZpbmUgRkVBVFVSRV9OWFxcdFxcdEJJVF9VTEwoMylcXG4gI2RlZmluZSBGRUFUVVJFX0dUXFx0XFx0QklUX1VMTCg0KVxcbisjZGVmaW5lIEZFQVRVUkVfR0FQUElcXHRcXHRCSVRfVUxMKDUpXFxuICNkZWZpbmUgRkVBVFVSRV9JQVxcdFxcdEJJVF9VTEwoNilcXG4gI2RlZmluZSBGRUFUVVJFX0dBXFx0XFx0QklUX1VMTCg3KVxcbiAjZGVmaW5lIEZFQVRVUkVfSEVcXHRcXHRCSVRfVUxMKDgpXFxuQEAgLTExMyw2ICsxMTQsNyBAQFxcbiAvKiBFeHRlbmRlZCBGZWF0dXJlIDIgQml0cyAqL1xcbiAjZGVmaW5lIEZFQVRVUkVfU0VWU05QSU9fU1VQXFx0QklUX1VMTCgxKVxcbiAjZGVmaW5lIEZFQVRVUkVfR0NSM1RSUE1PREVcXHRCSVRfVUxMKDMpXFxuKyNkZWZpbmUgRkVBVFVSRV9HQVBQSURJU1NVUFxcdEJJVF9VTEwoNClcXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBcXHRHRU5NQVNLX1VMTCg3LCA1KVxcbiAjZGVmaW5lIEZFQVRVUkVfU05QQVZJQ1NVUF9HQU0oeCkgXFxcXFxcbiBcXHQoRklFTERfR0VUKEZFQVRVUkVfU05QQVZJQ1NVUCwgeCkgPT0gMHgxKVxcbkBAIC0xOTAsNiArMTkyLDcgQEBcXG4gI2RlZmluZSBDT05UUk9MX0VQSF9FTlxcdFxcdDQ1XFxuICNkZWZpbmUgQ09OVFJPTF9YVF9FTlxcdFxcdDUwXFxuICNkZWZpbmUgQ09OVFJPTF9JTlRDQVBYVF9FTlxcdDUxXFxuKyNkZWZpbmUgQ09OVFJPTF9HQVBQSV9FTlxcdDU1XFxuICNkZWZpbmUgQ09OVFJPTF9HQ1IzVFJQTU9ERVxcdDU4XFxuICNkZWZpbmUgQ09OVFJPTF9JUlRDQUNIRURJU1xcdDU5XFxuICNkZWZpbmUgQ09OVFJPTF9TTlBBVklDX0VOXFx0NjFcXG5AQCAtMTAwNCw3ICsxMDA3LDggQEAgdW5pb24gaXJ0ZV9nYV9sbyB7XFxuIFxcdFxcdCAgICBub19mYXVsdFxcdDogMSxcXG4gXFx0XFx0ICAgIC8qIC0tLS0tLSAqL1xcbiBcXHRcXHQgICAgZ2FfbG9nX2ludHJcXHQ6IDEsXFxuLVxcdFxcdCAgICByc3ZkMVxcdDogMyxcXG4rXFx0XFx0ICAgIHJzdmQxXFx0OiAyLFxcbitcXHRcXHQgICAgZ2FwcGlfZGlzXFx0OiAxLFxcbiBcXHRcXHQgICAgaXNfcnVuXFx0OiAxLFxcbiBcXHRcXHQgICAgLyogLS0tLS0tICovXFxuIFxcdFxcdCAgICBndWVzdF9tb2RlXFx0OiAxLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcXG5pbmRleCAzYmRiMzgwZDIzZTlhOS4uMjdmZmIyMTg0YmYyOTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXFxuQEAgLTE2MCw2ICsxNjAsOSBAQCB1OCBhbWRfaW9tbXVfaHB0X2xldmVsO1xcbiAvKiBHdWVzdCBwYWdlIHRhYmxlIGxldmVsICovXFxuIGludCBhbWRfaW9tbXVfZ3B0X2xldmVsID0gUEFHRV9NT0RFXzRfTEVWRUw7XFxuIFxcbitib29sIGFtZF9pb21tdV9nYXBwaTtcXG4rRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfZ2FwcGkpO1xcbitcXG4gaW50IGFtZF9pb21tdV9ndWVzdF9pciA9IEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQztcXG4gc3RhdGljIGludCBhbWRfaW9tbXVfeHRfbW9kZSA9IElSUV9SRU1BUF9YQVBJQ19NT0RFO1xcbiBcXG5AQCAtNDYyLDYgKzQ2NSw5IEBAIHN0YXRpYyB2b2lkIGlvbW11X2Rpc2FibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpXFxuIFxcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUxPR19FTik7XFxuIFxcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUlOVF9FTik7XFxuIFxcbitcXHQvKiBEaXNhYmxlIElPTU1VIEdBUFBJICovXFxuK1xcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XFxuK1xcbiBcXHQvKiBEaXNhYmxlIElPTU1VIFBQUiBsb2dnaW5nICovXFxuIFxcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJMT0dfRU4pO1xcbiBcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSSU5UX0VOKTtcXG5AQCAtMjk5Niw2ICszMDAyLDEyIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcXG4gXFx0c3RydWN0IGFtZF9pb21tdSAqaW9tbXU7XFxuIFxcbiBcXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xcbitcXHRcXHQvKiBEaXNhYmxlIEdBUFBJLCBkbyBub3QgY2hlY2sgYW1kX2lvbW11X2dhcHBpIGFzIGl0IG1heSBiZVxcbitcXHRcXHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcXG4rXFx0XFx0ICogZW5hYmxlZCBpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBEaXNhYmxlIEdBTG9nIGlmIGFscmVhZHkgcnVubmluZy4gSXQgY291bGQgaGF2ZSBiZWVuIGVuYWJsZWRcXG4gXFx0XFx0ICogaW4gdGhlIHByZXZpb3VzIGJvb3QgYmVmb3JlIGtkdW1wLlxcbkBAIC0zMDM1LDEwICszMDQ3LDE5IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhKGNoZWNrX2ZlYXR1cmUoRkVBVFVSRV9HQVBQSSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgQU1EX0lPTU1VX0dVRVNUX0lSX1ZBUElDKGFtZF9pb21tdV9ndWVzdF9pcikpKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIkdBUFBJIGlzIG5vdCBzdXBwb3J0ZWQuXFxcXG5cXFwiKTtcXG4rXFx0XFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIEVuYWJsaW5nIEdBTSBhbmQgU05QQVZJQyBzdXBwb3J0ICovXFxuIFxcdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XFxuLVxcdFxcdGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHxcXG4tXFx0XFx0ICAgIGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKVxcbitcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpKVxcbitcXHRcXHRcXHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XFxuK1xcdFxcdGVsc2UgaWYgKGlvbW11X2luaXRfZ2FfbG9nKGlvbW11KSB8fFxcbitcXHRcXHRcXHQgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdFxcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBTV9FTik7XFxuQEAgLTMwNDcsNyArMzA2OCw4IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcXG4gXFx0fVxcbiBcXG4gXFx0YW1kX2lvbW11X2lycV9vcHMuY2FwYWJpbGl0eSB8PSAoMSBcXHUwMDNjXFx1MDAzYyBJUlFfUE9TVElOR19DQVApO1xcbi1cXHRwcl9pbmZvKFxcXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZFxcXFxuXFxcIik7XFxuK1xcdHByX2luZm8oXFxcIlZpcnR1YWwgQVBJQyBlbmFibGVkIHdpdGggJXNcXFxcblxcXCIsXFxuK1xcdFxcdGFtZF9pb21tdV9nYXBwaSA/IFxcXCJHQVBQSVxcXCIgOiBcXFwiR0FMT0dcXFwiKTtcXG4gI2VuZGlmXFxuIH1cXG4gXFxuQEAgLTM3MzgsNiArMzc2MCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FtZF9pb21tdV9vcHRpb25zKGNoYXIgKnN0cilcXG4gXFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcInYyX3Bnc2l6ZXNfb25seVxcXCIsIDE1KSA9PSAwKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIlJlc3RyaWN0aW5nIFYxIHBhZ2Utc2l6ZXMgdG8gNEtpQi8yTWlCLzFHaUJcXFwiKTtcXG4gXFx0XFx0XFx0YW1kX2lvbW11X3Bnc2l6ZV9iaXRtYXAgPSBBTURfSU9NTVVfUEdTSVpFU19WMjtcXG4rXFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcImdhcHBpXFxcIiwgNSkgPT0gMCkge1xcbitcXHRcXHRcXHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRwcl9ub3RpY2UoXFxcIlVua25vd24gb3B0aW9uIC0gJyVzJ1xcXFxuXFxcIiwgc3RyKTtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xcbmluZGV4IDU3ZGM4ZmFiYzdkOWI5Li5iMjI2ZDM5NDFjYjliOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xcbkBAIC0zOTU5LDE5ICszOTU5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgYW1kX2lyX2RvbWFpbl9vcHMgPSB7XFxuIFxcdC5kZWFjdGl2YXRlID0gaXJxX3JlbWFwcGluZ19kZWFjdGl2YXRlLFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcXG4tXFx0XFx0XFx0XFx0ICBib29sIGdhX2xvZ19pbnRyKVxcbitzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXFxuIHtcXG4tXFx0aWYgKGNwdSBcXHUwMDNlPSAwKSB7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklORykge1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID1cXG4tXFx0XFx0XFx0XFx0XFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhjcHUpO1xcbitcXHRcXHRcXHRcXHRcXHRBUElDSURfVE9fSVJURV9ERVNUX0xPKGFwaWNpZCk7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPVxcbi1cXHRcXHRcXHRcXHRcXHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGNwdSk7XFxuK1xcdFxcdFxcdFxcdFxcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSB0cnVlO1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZmFsc2U7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XFxuLVxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBnYV9sb2dfaW50cjtcXG4rXFx0XFx0Ym9vbCBwb3N0ZWRfaW50ciA9ICEhKGZsYWdzIFxcdTAwMjYgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFIpO1xcbitcXG4rXFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhcHBpX2RpcyA9ICFwb3N0ZWRfaW50ciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjaGVja19mZWF0dXJlMihGRUFUVVJFX0dBUFBJRElTU1VQKTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9XFxuK1xcdFxcdFxcdFxcdFxcdFxcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWhpLmZpZWxkcy5kZXN0aW5hdGlvbiA9IEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IHBvc3RlZF9pbnRyO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzk5Miw3ICs0MDAyLDcgQEAgc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcXG4gICogYW5kIHRodXMgZG9uJ3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVSBjb25zdW1lcyBmcmVzaFxcbiAgKiBpbmZvcm1hdGlvbi5cXG4gICovXFxuLWludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXFxuK2ludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTtcXG4gXFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXFx1MDAzZWVudHJ5O1xcbkBAIC00MDA2LDE0ICs0MDE2LDE0IEBAIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXFxuIFxcdGlmICghaXJfZGF0YS1cXHUwMDNlaW9tbXUpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcXG4rXFx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBhcGljaWQsIGZsYWdzKTtcXG4gXFxuIFxcdHJldHVybiBfX21vZGlmeV9pcnRlX2dhKGlyX2RhdGEtXFx1MDAzZWlvbW11LCBpcl9kYXRhLVxcdTAwM2VpcnFfMl9pcnRlLmRldmlkLFxcbiBcXHRcXHRcXHRcXHRpcl9kYXRhLVxcdTAwM2VpcnFfMl9pcnRlLmluZGV4LCBlbnRyeSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcXG4gXFxuLWludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxcbitpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhO1xcbiBcXHRzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS1cXHUwMDNlZW50cnk7XFxuQEAgLTQwMzQsOSArNDA0NCwxMyBAQCBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4gXFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5ndWVzdF9tb2RlICA9IDE7XFxuIFxcdGVudHJ5LVxcdTAwM2VoaS5maWVsZHMuZ2Ffcm9vdF9wdHIgICAgICAgPSBpcl9kYXRhLVxcdTAwM2VnYV9yb290X3B0cjtcXG4gXFx0ZW50cnktXFx1MDAzZWhpLmZpZWxkcy52ZWN0b3IgICAgICAgICAgICA9IGlyX2RhdGEtXFx1MDAzZWdhX3ZlY3RvcjtcXG4tXFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4gXFxuLVxcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7XFxuK1xcdGlmIChhbWRfaW9tbXVfZ2FwcGkpXFxuK1xcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfdGFnID0gUE9TVEVEX0lOVFJfV0FLRVVQX1ZFQ1RPUjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyA9IGlyX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4rXFxuK1xcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cXHUwMDNlaW9tbXUsIGlyX2RhdGEtXFx1MDAzZWlycV8yX2lydGUuZGV2aWQsXFxuIFxcdFxcdFxcdCAgICAgIGlyX2RhdGEtXFx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcXG5AQCAtNDEwNyw4ICs0MTIxLDggQEAgc3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxcbiBcXHRcXHRpcl9kYXRhLVxcdTAwM2VnYV92ZWN0b3IgPSBwaV9kYXRhLVxcdTAwM2V2ZWN0b3I7XFxuIFxcdFxcdGlyX2RhdGEtXFx1MDAzZWdhX3RhZyA9IHBpX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4gXFx0XFx0aWYgKHBpX2RhdGEtXFx1MDAzZWlzX2d1ZXN0X21vZGUpXFxuLVxcdFxcdFxcdHJldCA9IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEsIHBpX2RhdGEtXFx1MDAzZWNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBpX2RhdGEtXFx1MDAzZWdhX2xvZ19pbnRyKTtcXG4rXFx0XFx0XFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cXHUwMDNlYXBpY2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGlfZGF0YS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldCA9IGFtZF9pb21tdV9kZWFjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSk7XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmggYi9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oXFxuaW5kZXggZWRjZWU5ZjUzMzVhNmYuLjg3ZTc2ZjYxN2VhMTg1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oXFxuQEAgLTMwLDggKzMwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9XFxuIC8qIElPTU1VIEFWSUMgRnVuY3Rpb24gKi9cXG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKTtcXG4gXFxuLWV4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTtcXG4tZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTtcXG4rZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncyk7XFxuK2V4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKTtcXG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEpO1xcbiBcXG4gI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfQU1EX0lPTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19JUlFfUkVNQVApICovXFxuQEAgLTQyLDEyICs0MiwxMiBAQCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxcbitzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4rc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTc2LDQgKzc2LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhbWRfaW9tbXVfc2V2X3Rpb19zdXBwb3J0ZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4gI2VuZGlmXFxuIFxcbisjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVCAwXFxuKyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfVkNQVV9SVU5OSU5HICBCSVQoMClcXG4rXFxuKyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQgMVxcbisjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSICBCSVQoMSlcXG4rXFxuK2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcXG4gI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjAyLjY0NzEzOTc5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg5NjE5MjcyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJUlFfUkVNQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5XCIsXG4gICAgXCJhbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZVwiLFxuICAgIFwiYXZpY19waV91cGRhdGVfaXJ0ZVwiLFxuICAgIFwiX19hbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJcIixcbiAgICBcImF2aWNfZGVzdHJveV92Y3B1XCIsXG4gICAgXCJzdm1faXJfbGlzdF9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMgKEdBUFBJKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdXBkYXRlcyBhbmQgdkNQVSBhZmZpbml0eSBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIFFFTVUgd2l0aCBLVk0gU1ZNKS4gVGhlIGNoYW5nZXMgYWx0ZXIgY29yZSBBVklDIGFuZCBJT01NVSBsb2dpYyBldmVuIHdoZW4gR0FQUEkgaXMgbm90IGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgYm9vdCBwYXJhbWV0ZXIsIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhZWEwMmM1YzZhODFhNGE3MTc5NTEyNmEyODg1ZTAwZmJkYWExNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDIxOjQ5OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXG5pbmRleCAzN2I5NGY0ODRlZjMzOC4uNDBhMjIwNmEzM2MwOGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxuQEAgLTM1LDggKzM1LDggQEAgc3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHtcbiBcdHU2NCB2YXBpY19hZGRyO1x0XHQvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB2Q1BVJ3MgdkFQSUMuICovXG4gXHR1MzIgZ2FfdGFnO1xuIFx0dTMyIHZlY3RvcjtcdFx0LyogR3Vlc3QgdmVjdG9yIG9mIHRoZSBpbnRlcnJ1cHQgKi9cbi1cdGludCBjcHU7XG4tXHRib29sIGdhX2xvZ19pbnRyO1xuK1x0aW50IGFwaWNpZDtcbitcdGludCBmbGFncztcbiBcdGJvb2wgaXNfZ3Vlc3RfbW9kZTtcbiBcdHZvaWQgKmlyX2RhdGE7XG4gfTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG5pbmRleCBjZGQ1YTZkYzY0NmYxMS4uODE4NTg0MWQ5YjgxNjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbkBAIC02Myw2ICs2Myw5IEBAXG4gXHRnYV90YWc7XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbiBcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxpc3RfaGVhZCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHJhd19zcGlubG9ja190LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2spO1xuK1xuIHN0YXRpY19hc3NlcnQoX19BVklDX0dBVEFHKEFWSUNfVk1fSURfTUFTSywgQVZJQ19WQ1BVX0lEWF9NQVNLKSA9PSAtMXUpO1xuIFxuICNkZWZpbmUgQVZJQ19BVVRPX01PREUgLTFcbkBAIC04NzQsNiArODc3LDkgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2spO1xuIFxuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3ZtLVx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpO1xuK1x0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuK1xuIFx0aWYgKCFlbmFibGVfYXBpY3YgfHwgIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtODg2LDYgKzg5Miw0MiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBsaXN0X2hlYWQgKndha2V1cF9saXN0O1xuK1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuK1xuK1x0aWYgKFdBUk5fT04oY3B1IFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d2FrZXVwX2xpc3QgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7XG4rXHRzcGlubG9jayA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xuK1x0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KSlcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgd2FrZXVwX2xpc3QpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4re1xuK1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuK1xuK1x0aWYgKFdBUk5fT04oY3B1IFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3BpbmxvY2sgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcbitcdGd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShzcGlubG9jayk7XG4rXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpKVxuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbit9XG4rXG4rdm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbit7XG4rXHRpZiAoc3ZtLVx1MDAzZWdhcHBpX2NwdSAhPSAtMSBcdTAwMjZcdTAwMjYgYW1kX2lvbW11X2dhcHBpKSB7XG4rXHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuK1x0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XG4rXHR9XG4rfVxuK1xuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUodmNwdSk7XG5AQCAtODk2LDEzICs5MzgsMTggQEAgc3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX3ZjcHU7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4gXG4gXHRpZiAoIXZjcHUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4rXHRzdm0gPSB0b19zdm0odmNwdSk7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIFx0bGlzdF9kZWwoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0KTtcbi1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRvX3N2bSh2Y3B1KS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbitcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuQEAgLTkzMiw2ICs5NzksOCBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRcdHU2NCBlbnRyeTtcbiBcdFx0aW50IHJldDtcbitcdFx0aW50IHBvc3RlZF9pbnRyO1xuK1x0XHRib29sIGlzX3ZjcHVfd2FpdGluZyA9IGZhbHNlO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbFxuQEAgLTk0OSwxNSArOTk4LDIzIEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHQgKi9cbiBcdFx0ZW50cnkgPSBzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeTtcbiBcdFx0aWYgKGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSykge1xuLVx0XHRcdHBpX2RhdGEuY3B1ID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLO1xuK1x0XHRcdHBpX2RhdGEuYXBpY2lkID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLO1xuK1x0XHRcdHBpX2RhdGEuZmxhZ3MgPSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkc7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGlfZGF0YS5jcHUgPSAtMTtcbi1cdFx0XHRwaV9kYXRhLmdhX2xvZ19pbnRyID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XG4rXHRcdFx0cG9zdGVkX2ludHIgPSAhIShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7XG4rXHRcdFx0cGlfZGF0YS5mbGFncyA9IHBvc3RlZF9pbnRyIFx1MDAzY1x1MDAzYyBBTURfSU9NTVVfRkxBR19QT1NURURfSU5UUl9TSElGVDtcbitcdFx0XHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XG4rXHRcdFx0XHRwaV9kYXRhLmFwaWNpZCA9IGt2bV9jcHVfZ2V0X2FwaWNpZChzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdFx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSkge1xuK1x0XHRcdFx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRcdFx0XHRcdGlzX3ZjcHVfd2FpdGluZyA9IHRydWU7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgXHUwMDI2cGlfZGF0YSk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRnb3RvIGdhcHBpX2Vycl9vdXQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFJldmVydCB0byBsZWdhY3kgbW9kZSBpZiB0aGUgSU9NTVUgZGlkbid0IHByb3ZpZGUgbWV0YWRhdGFcbkBAIC05NjYsMTIgKzEwMjMsMTcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqL1xuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFwaV9kYXRhLmlyX2RhdGEpKSB7XG4gXHRcdFx0aXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHRyZXQgPSAtRUlPO1xuK1x0XHRcdGdvdG8gZ2FwcGlfZXJyX291dDtcbiBcdFx0fVxuIFxuIFx0XHRpcnFmZC1cdTAwM2VpcnFfYnlwYXNzX2RhdGEgPSBwaV9kYXRhLmlyX2RhdGE7XG4gXHRcdGxpc3RfYWRkKFx1MDAyNmlycWZkLVx1MDAzZXZjcHVfbGlzdCwgXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpO1xuIFx0XHRyZXR1cm4gMDtcbitnYXBwaV9lcnJfb3V0OlxuK1x0XHRpZiAoaXNfdmNwdV93YWl0aW5nKVxuK1x0XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0cmV0dXJuIGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XG4gfVxuQEAgLTEwMDQsMTAgKzEwNjYsMTQgQEAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcbiBcdEFWSUNfU1RBUlRfQkxPQ0tJTkdcdD0gQklUKDEpLFxuIH07XG4gXG4tc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4tXHRcdFx0XHRcdCAgICBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuK3N0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYXBpY2lkLFxuK1x0XHRcdFx0XHQgICAgaW50IGNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiB7XG4tXHRib29sIGdhX2xvZ19pbnRyID0gKGFjdGlvbiBcdTAwMjYgQVZJQ19TVEFSVF9CTE9DS0lORyk7XG4rXHRpbnQgcG9zdGVkX2ludHIgPSAhIShhY3Rpb24gXHUwMDI2IEFWSUNfU1RBUlRfQkxPQ0tJTkcpIFx1MDAzY1x1MDAzY1xuK1x0XHRcdCAgQU1EX0lPTU1VX0ZMQUdfUE9TVEVEX0lOVFJfU0hJRlQ7XG4rXHRpbnQgaXNfdmNwdV9ydW5uaW5nID0gKGFwaWNpZCBcdTAwM2U9IDApIFx1MDAzY1x1MDAzY1xuK1x0XHRcdCAgICAgIEFNRF9JT01NVV9GTEFHX1ZDUFVfUlVOTklOR19TSElGVDtcbitcdGludCBmbGFncyA9IHBvc3RlZF9pbnRyIHwgaXNfdmNwdV9ydW5uaW5nO1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQ7XG4gXG5AQCAtMTAxNywxNiArMTA4MywzMCBAQCBzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbiBcdCAqIEhlcmUsIHdlIGdvIHRocm91Z2ggdGhlIHBlci12Y3B1IGlyX2xpc3QgdG8gdXBkYXRlIGFsbCBleGlzdGluZ1xuIFx0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB0YXJnZXRpbmcgdGhpcyB2Y3B1LlxuIFx0ICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpXG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpIHtcbitcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSBcdTAwMjZcdTAwMjYgY3B1IFx1MDAzZT0gMClcbitcdFx0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gY3B1O1xuIFx0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoaXNfdmNwdV9ydW5uaW5nIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0LyogSUYgY29uZGl0aW9uIGhhbmRsZXMgdGhlIGluaXRpYWwgc3RhdGUgKi9cbitcdFx0aWYgKHN2bS1cdTAwM2VnYXBwaV9jcHUgIT0gLTEpXG4rXHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXG4rXHRcdHN2bS1cdTAwM2VnYXBwaV9jcHUgPSBjcHU7IC8qIFN0b3JlIGNwdSBubyBhcyB0YXJnZXQgZm9yIEdBUFBJICovXG4rXHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xuK1x0XHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdH1cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbiBcdFx0dm9pZCAqZGF0YSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YTtcbiBcbiBcdFx0aWYgKCEoYWN0aW9uIFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxuLVx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTtcbi1cdFx0ZWxzZSBpZiAoY3B1IFx1MDAzZT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xuK1x0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgZmxhZ3MpKTtcbitcdFx0ZWxzZSBpZiAoaXNfdmNwdV9ydW5uaW5nKVxuK1x0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhLCBhcGljaWQsIGZsYWdzKSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhKSk7XG4gXHR9XG5AQCAtMTA4MCw3ICsxMTYwLDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4gXG4gXHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XG4gXG4tXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGFjdGlvbik7XG4rXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGNwdSwgYWN0aW9uKTtcbiBcbiBcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG5AQCAtMTEyMyw3ICsxMjAzLDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiBcdCAqL1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcbi1cdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7XG4rXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcbiBcbiBcdFdBUk5fT05fT05DRShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7XG4gXG5AQCAtMTI5Niw2ICsxMzc2LDIxIEBAIHN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcih2b2lkKVxuK3tcbitcdGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICp2Y3B1X3dha2V1cF9saXN0ID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xuK1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bTtcbitcbitcdHJhd19zcGluX2xvY2soc3BpbmxvY2spO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzdm0sIHZjcHVfd2FrZXVwX2xpc3QsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpIHtcbitcdFx0aWYgKGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSBcdTAwM2U9IDApXG4rXHRcdFx0a3ZtX3ZjcHVfd2FrZV91cChcdTAwMjZzdm0tXHUwMDNldmNwdSk7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2soc3BpbmxvY2spO1xuK31cbitcbiAvKlxuICAqIE5vdGU6XG4gICogLSBUaGUgbW9kdWxlIHBhcmFtIGF2aWMgZW5hYmxlIGJvdGggeEFQSUMgYW5kIHgyQVBJQyBtb2RlLlxuQEAgLTEzMDQsMTIgKzEzOTksMTggQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcbiAgKi9cbiBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4ge1xuK1x0aW50IGNwdTtcbiBcdGF2aWMgPSBhdmljX3dhbnRfYXZpY19lbmFibGVkKCk7XG4gXHRpZiAoIWF2aWMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHByX2luZm8oXCJBVklDIGVuYWJsZWRcXG5cIik7XG4gXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KSk7XG4rXHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KSk7XG4rXHR9XG4rXG4gXHQvKiBBVklDIGlzIGEgcHJlcmVxdWlzaXRlIGZvciB4MkFWSUMuICovXG4gXHR4MmF2aWNfZW5hYmxlZCA9IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YMkFWSUMpO1xuIFx0aWYgKHgyYXZpY19lbmFibGVkKSB7XG5AQCAtMTMzMywxMiArMTQzNCwxNiBAQCBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHRcdGVuYWJsZV9pcGl2ID0gZmFsc2U7XG4gXG4gXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFx1MDAyNmF2aWNfZ2FfbG9nX25vdGlmaWVyKTtcbitcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoXHUwMDI2YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gdm9pZCBhdmljX2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbiB7XG4tXHRpZiAoYXZpYylcbi1cdFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcbitcdGlmICghYXZpYylcbitcdFx0cmV0dXJuO1xuK1xuK1x0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcbitcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoTlVMTCk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlMDJhMzhkYTUyOTZlMy4uYjY4NzEzM2Y4NTI4YmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtMTM1Niw2ICsxMzU2LDggQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKTtcbiBcbitcdGF2aWNfZGVzdHJveV92Y3B1KHN2bSk7XG4rXG4gXHRzdm1fbGVhdmVfbmVzdGVkKHZjcHUpO1xuIFx0c3ZtX2ZyZWVfbmVzdGVkKHN2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDUxMzc0MTZiZTU5M2Q3Li40N2Q1YmI1ZDcxMDNkYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC0zNjIsNiArMzYyLDEwIEBAIHN0cnVjdCB2Y3B1X3N2bSB7XG4gXG4gXHQvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovXG4gXHRib29sIGd1ZXN0X2dpZjtcbitcbitcdC8qIEdBUFBJIHJlbGF0ZWQgZmllbGRzICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3Q7XG4rXHRpbnQgZ2FwcGlfY3B1O1xuIH07XG4gXG4gc3RydWN0IHN2bV9jcHVfZGF0YSB7XG5AQCAtOTA5LDYgKzkxMyw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTtcbiBpbnQgYXZpY19pbmNvbXBsZXRlX2lwaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuK3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxuaW5kZXggODM0ZDhmYWJmYmEzODcuLjA0NDE3OWNhYjEyZTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXG5AQCAtNDEsNiArNDEsNyBAQCBpbnQgYW1kX2lvbW11X2VuYWJsZSh2b2lkKTtcbiB2b2lkIGFtZF9pb21tdV9kaXNhYmxlKHZvaWQpO1xuIGludCBhbWRfaW9tbXVfcmVlbmFibGUoaW50IG1vZGUpO1xuIGludCBhbWRfaW9tbXVfZW5hYmxlX2ZhdWx0aW5nKHVuc2lnbmVkIGludCBjcHUpO1xuK2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ndWVzdF9pcjtcbiBleHRlcm4gZW51bSBwcm90ZWN0aW9uX2RvbWFpbl9tb2RlIGFtZF9pb21tdV9wZ3RhYmxlO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXG5pbmRleCBmOWY3MTgwODc4OTMwMy4uZGUwYjIzMzA2OTQ0YjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcbkBAIC05NCw2ICs5NCw3IEBAXG4gI2RlZmluZSBGRUFUVVJFX1gyQVBJQ1x0XHRCSVRfVUxMKDIpXG4gI2RlZmluZSBGRUFUVVJFX05YXHRcdEJJVF9VTEwoMylcbiAjZGVmaW5lIEZFQVRVUkVfR1RcdFx0QklUX1VMTCg0KVxuKyNkZWZpbmUgRkVBVFVSRV9HQVBQSVx0XHRCSVRfVUxMKDUpXG4gI2RlZmluZSBGRUFUVVJFX0lBXHRcdEJJVF9VTEwoNilcbiAjZGVmaW5lIEZFQVRVUkVfR0FcdFx0QklUX1VMTCg3KVxuICNkZWZpbmUgRkVBVFVSRV9IRVx0XHRCSVRfVUxMKDgpXG5AQCAtMTEzLDYgKzExNCw3IEBAXG4gLyogRXh0ZW5kZWQgRmVhdHVyZSAyIEJpdHMgKi9cbiAjZGVmaW5lIEZFQVRVUkVfU0VWU05QSU9fU1VQXHRCSVRfVUxMKDEpXG4gI2RlZmluZSBGRUFUVVJFX0dDUjNUUlBNT0RFXHRCSVRfVUxMKDMpXG4rI2RlZmluZSBGRUFUVVJFX0dBUFBJRElTU1VQXHRCSVRfVUxMKDQpXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBcdEdFTk1BU0tfVUxMKDcsIDUpXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBfR0FNKHgpIFxcXG4gXHQoRklFTERfR0VUKEZFQVRVUkVfU05QQVZJQ1NVUCwgeCkgPT0gMHgxKVxuQEAgLTE5MCw2ICsxOTIsNyBAQFxuICNkZWZpbmUgQ09OVFJPTF9FUEhfRU5cdFx0NDVcbiAjZGVmaW5lIENPTlRST0xfWFRfRU5cdFx0NTBcbiAjZGVmaW5lIENPTlRST0xfSU5UQ0FQWFRfRU5cdDUxXG4rI2RlZmluZSBDT05UUk9MX0dBUFBJX0VOXHQ1NVxuICNkZWZpbmUgQ09OVFJPTF9HQ1IzVFJQTU9ERVx0NThcbiAjZGVmaW5lIENPTlRST0xfSVJUQ0FDSEVESVNcdDU5XG4gI2RlZmluZSBDT05UUk9MX1NOUEFWSUNfRU5cdDYxXG5AQCAtMTAwNCw3ICsxMDA3LDggQEAgdW5pb24gaXJ0ZV9nYV9sbyB7XG4gXHRcdCAgICBub19mYXVsdFx0OiAxLFxuIFx0XHQgICAgLyogLS0tLS0tICovXG4gXHRcdCAgICBnYV9sb2dfaW50clx0OiAxLFxuLVx0XHQgICAgcnN2ZDFcdDogMyxcbitcdFx0ICAgIHJzdmQxXHQ6IDIsXG4rXHRcdCAgICBnYXBwaV9kaXNcdDogMSxcbiBcdFx0ICAgIGlzX3J1blx0OiAxLFxuIFx0XHQgICAgLyogLS0tLS0tICovXG4gXHRcdCAgICBndWVzdF9tb2RlXHQ6IDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXG5pbmRleCAzYmRiMzgwZDIzZTlhOS4uMjdmZmIyMTg0YmYyOTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xuQEAgLTE2MCw2ICsxNjAsOSBAQCB1OCBhbWRfaW9tbXVfaHB0X2xldmVsO1xuIC8qIEd1ZXN0IHBhZ2UgdGFibGUgbGV2ZWwgKi9cbiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbCA9IFBBR0VfTU9ERV80X0xFVkVMO1xuIFxuK2Jvb2wgYW1kX2lvbW11X2dhcHBpO1xuK0VYUE9SVF9TWU1CT0woYW1kX2lvbW11X2dhcHBpKTtcbitcbiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyID0gQU1EX0lPTU1VX0dVRVNUX0lSX1ZBUElDO1xuIHN0YXRpYyBpbnQgYW1kX2lvbW11X3h0X21vZGUgPSBJUlFfUkVNQVBfWEFQSUNfTU9ERTtcbiBcbkBAIC00NjIsNiArNDY1LDkgQEAgc3RhdGljIHZvaWQgaW9tbXVfZGlzYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSlcbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUxPR19FTik7XG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FJTlRfRU4pO1xuIFxuK1x0LyogRGlzYWJsZSBJT01NVSBHQVBQSSAqL1xuK1x0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbitcbiBcdC8qIERpc2FibGUgSU9NTVUgUFBSIGxvZ2dpbmcgKi9cbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJMT0dfRU4pO1xuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX1BQUklOVF9FTik7XG5AQCAtMjk5Niw2ICszMDAyLDEyIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11O1xuIFxuIFx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcbitcdFx0LyogRGlzYWJsZSBHQVBQSSwgZG8gbm90IGNoZWNrIGFtZF9pb21tdV9nYXBwaSBhcyBpdCBtYXkgYmVcbitcdFx0ICogZmFsc2UgaW4gbmV3IGtleGVjIGtlcm5lbCBldmVuIHRob3VnaCBwcmV2aW91cyBrZXJuZWwgaGFzXG4rXHRcdCAqIGVuYWJsZWQgaXQuXG4rXHRcdCAqL1xuK1x0XHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBEaXNhYmxlIEdBTG9nIGlmIGFscmVhZHkgcnVubmluZy4gSXQgY291bGQgaGF2ZSBiZWVuIGVuYWJsZWRcbiBcdFx0ICogaW4gdGhlIHByZXZpb3VzIGJvb3QgYmVmb3JlIGtkdW1wLlxuQEAgLTMwMzUsMTAgKzMwNDcsMTkgQEAgc3RhdGljIHZvaWQgZW5hYmxlX2lvbW11c192YXBpYyh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgIEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQyhhbWRfaW9tbXVfZ3Vlc3RfaXIpKSkge1xuK1x0XHRwcl93YXJuKFwiR0FQUEkgaXMgbm90IHN1cHBvcnRlZC5cXG5cIik7XG4rXHRcdGFtZF9pb21tdV9nYXBwaSA9IGZhbHNlO1xuK1x0fVxuK1xuIFx0LyogRW5hYmxpbmcgR0FNIGFuZCBTTlBBVklDIHN1cHBvcnQgKi9cbiBcdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XG4tXHRcdGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHxcbi1cdFx0ICAgIGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKVxuK1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpKVxuK1x0XHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbitcdFx0ZWxzZSBpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XG4rXHRcdFx0IGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKVxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0aW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FNX0VOKTtcbkBAIC0zMDQ3LDcgKzMwNjgsOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXG4gXHR9XG4gXG4gXHRhbWRfaW9tbXVfaXJxX29wcy5jYXBhYmlsaXR5IHw9ICgxIFx1MDAzY1x1MDAzYyBJUlFfUE9TVElOR19DQVApO1xuLVx0cHJfaW5mbyhcIlZpcnR1YWwgQVBJQyBlbmFibGVkXFxuXCIpO1xuK1x0cHJfaW5mbyhcIlZpcnR1YWwgQVBJQyBlbmFibGVkIHdpdGggJXNcXG5cIixcbitcdFx0YW1kX2lvbW11X2dhcHBpID8gXCJHQVBQSVwiIDogXCJHQUxPR1wiKTtcbiAjZW5kaWZcbiB9XG4gXG5AQCAtMzczOCw2ICszNzYwLDggQEAgc3RhdGljIGludCBfX2luaXQgcGFyc2VfYW1kX2lvbW11X29wdGlvbnMoY2hhciAqc3RyKVxuIFx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcInYyX3Bnc2l6ZXNfb25seVwiLCAxNSkgPT0gMCkge1xuIFx0XHRcdHByX2luZm8oXCJSZXN0cmljdGluZyBWMSBwYWdlLXNpemVzIHRvIDRLaUIvMk1pQi8xR2lCXCIpO1xuIFx0XHRcdGFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7XG4rXHRcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFwiZ2FwcGlcIiwgNSkgPT0gMCkge1xuK1x0XHRcdGFtZF9pb21tdV9nYXBwaSA9IHRydWU7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cHJfbm90aWNlKFwiVW5rbm93biBvcHRpb24gLSAnJXMnXFxuXCIsIHN0cik7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xuaW5kZXggNTdkYzhmYWJjN2Q5YjkuLmIyMjZkMzk0MWNiOWI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xuQEAgLTM5NTksMTkgKzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbiBcdC5kZWFjdGl2YXRlID0gaXJxX3JlbWFwcGluZ19kZWFjdGl2YXRlLFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbi1cdFx0XHRcdCAgYm9vbCBnYV9sb2dfaW50cilcbitzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4ge1xuLVx0aWYgKGNwdSBcdTAwM2U9IDApIHtcbitcdGlmIChmbGFncyBcdTAwMjYgQU1EX0lPTU1VX0ZMQUdfVkNQVV9SVU5OSU5HKSB7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9XG4tXHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oY3B1KTtcbitcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xuIFx0XHRlbnRyeS1cdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPVxuLVx0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGNwdSk7XG4rXHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcbiBcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IHRydWU7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IGZhbHNlO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xuLVx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBnYV9sb2dfaW50cjtcbitcdFx0Ym9vbCBwb3N0ZWRfaW50ciA9ICEhKGZsYWdzIFx1MDAyNiBBTURfSU9NTVVfRkxBR19QT1NURURfSU5UUik7XG4rXG4rXHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXBvc3RlZF9pbnRyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHRcdFx0ICAgY2hlY2tfZmVhdHVyZTIoRkVBVFVSRV9HQVBQSURJU1NVUCk7XG4rXHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xuK1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9XG4rXHRcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xuK1x0XHRcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy5kZXN0aW5hdGlvbiA9IEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XG4rXHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gcG9zdGVkX2ludHI7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5AQCAtMzk5Miw3ICs0MDAyLDcgQEAgc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbiAgKiBhbmQgdGh1cyBkb24ndCByZXF1aXJlIGFuIGludmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIElPTU1VIGNvbnN1bWVzIGZyZXNoXG4gICogaW5mb3JtYXRpb24uXG4gICovXG4taW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbitpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS1cdTAwM2VlbnRyeTtcbkBAIC00MDA2LDE0ICs0MDE2LDE0IEBAIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4gXHRpZiAoIWlyX2RhdGEtXHUwMDNlaW9tbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbitcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCBmbGFncyk7XG4gXG4gXHRyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLVx1MDAzZWlvbW11LCBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuZGV2aWQsXG4gXHRcdFx0XHRpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcbiBcbi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbitpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhO1xuIFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXHUwMDNlZW50cnk7XG5AQCAtNDAzNCw5ICs0MDQ0LDEzIEBAIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuIFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmd1ZXN0X21vZGUgID0gMTtcbiBcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy5nYV9yb290X3B0ciAgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2Ffcm9vdF9wdHI7XG4gXHRlbnRyeS1cdTAwM2VoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLVx1MDAzZWdhX3ZlY3Rvcjtcbi1cdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2FfdGFnO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbitcdGlmIChhbWRfaW9tbXVfZ2FwcGkpXG4rXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SO1xuK1x0ZWxzZVxuK1x0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfdGFnID0gaXJfZGF0YS1cdTAwM2VnYV90YWc7XG4rXG4rXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIG1vZGlmeV9pcnRlX2dhKGlyX2RhdGEtXHUwMDNlaW9tbXUsIGlyX2RhdGEtXHUwMDNlaXJxXzJfaXJ0ZS5kZXZpZCxcbiBcdFx0XHQgICAgICBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbkBAIC00MTA3LDggKzQxMjEsOCBAQCBzdGF0aWMgaW50IGFtZF9pcl9zZXRfdmNwdV9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHZvaWQgKmluZm8pXG4gXHRcdGlyX2RhdGEtXHUwMDNlZ2FfdmVjdG9yID0gcGlfZGF0YS1cdTAwM2V2ZWN0b3I7XG4gXHRcdGlyX2RhdGEtXHUwMDNlZ2FfdGFnID0gcGlfZGF0YS1cdTAwM2VnYV90YWc7XG4gXHRcdGlmIChwaV9kYXRhLVx1MDAzZWlzX2d1ZXN0X21vZGUpXG4tXHRcdFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cdTAwM2VjcHUsXG4tXHRcdFx0XHRcdFx0XHQgICAgcGlfZGF0YS1cdTAwM2VnYV9sb2dfaW50cik7XG4rXHRcdFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cdTAwM2VhcGljaWQsXG4rXHRcdFx0XHRcdFx0XHQgICAgcGlfZGF0YS1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuaW5kZXggZWRjZWU5ZjUzMzVhNmYuLjg3ZTc2ZjYxN2VhMTg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuQEAgLTMwLDggKzMwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9XG4gLyogSU9NTVUgQVZJQyBGdW5jdGlvbiAqL1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSk7XG4gXG4tZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xuLWV4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cik7XG4rZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncyk7XG4rZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBpbnQgZmxhZ3MpO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTtcbiBcbiAjZWxzZSAvKiBkZWZpbmVkKENPTkZJR19BTURfSU9NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19JUlFfUkVNQVApICovXG5AQCAtNDIsMTIgKzQyLDEyIEBAIGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuK3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuK3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzYsNCArNzYsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3NucF9kaXNhYmxlKHZvaWQpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGJvb2wgYW1kX2lvbW11X3Nldl90aW9fc3VwcG9ydGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2VuZGlmXG4gXG4rI2RlZmluZSBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQgMFxuKyNkZWZpbmUgQU1EX0lPTU1VX0ZMQUdfVkNQVV9SVU5OSU5HICBCSVQoMClcbitcbisjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSX1NISUZUIDFcbisjZGVmaW5lIEFNRF9JT01NVV9GTEFHX1BPU1RFRF9JTlRSICBCSVQoMSlcbitcbitleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XG4gI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTowMi42NDcxNDM4NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk5MTkwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdBUFBJIFN1cHBvcnQgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0J3MgdHJ5aW5nIHRvIGJyaW5nIGluIEdBUFBJIHN1cHBvcnQg4oCTIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMg4oCTIGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBhY3R1YWxseSBmdW5jdGlvbmFsLCBhbmQgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IGl0P1wiIExvb2tpbmcgYXQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucyDigJMgYGF2aWMuY2AsIGBzdm0uY2AsIGBpbml0LmNgLCBgaW9tbXUuY2Ag4oCTIGl0J3MgZGVmaW5pdGVseSB0b3VjaGluZyBzb21lIGtleSBhcmVhcy4gSXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgYW1kX2lvbW11PWdhcHBpYCBib290IHBhcmFtZXRlciwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBjb2RlIG1vZGlmaWVzIHNvbWUga2V5IGZ1bmN0aW9ucyBsaWtlIGBhdmljX3BpX3VwZGF0ZV9pcnRlYCwgYW5kIGFkZHMgc29tZSBuZXcgb25lcyB0b28uXG5cblRoZSBuZXh0IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIFwiQ2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGZlYXR1cmUgaW4gb3VyIHRlc3QgZW52aXJvbm1lbnRzPyBDYW4gd2UgcmVwcm9kdWNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nIGxpa2UgR0NFIG9yIFFFTVU/XCIgQWgsIHJpZ2h0LCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aCBLVk0gU1ZNIHNob3VsZCB3b3JrLiBUaGF0J3MgZ29vZC4gSG93ZXZlciwgd2hhdCBhYm91dCBzeXprYWxsZXI/IERvZXMgaXQgdGFyZ2V0IEFNRCBJT01NVSBvciBTVk0/IEZvcnR1bmF0ZWx5LCBzeXprYWxsZXIgZG9lcyBmdXp6IEtWTSwgaW5jbHVkaW5nIFNWTSwgc28gdGhlIHBvdGVudGlhbCBpcyB0aGVyZS5cblxuR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBLVk0gU1ZNIEFWSUMgYW5kIEFNRCBJT01NVSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkLiBMb29rcyBsaWtlIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fQU1EYCwgYW5kIGBDT05GSUdfQU1EX0lPTU1VYCBhcmUgdGhlIGtleSBvbmVzIHRvIGludmVzdGlnYXRlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYGRyaXZlcnMvaW9tbXUvYW1kL2AgYW5kIGBhcmNoL3g4Ni9rdm0vYCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjA5LjA0NjMzODI3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk0MTUyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFNRF9JT01NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lvbW11L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXFx0Ym9vbCBcXFwiRW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVxcdGJvb2wgXFxcIkVuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjA5LjE3NTc2MzA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNjEwMzEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBmb3IgQU1EIEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBTUQgcHJvY2Vzc29ycyBhcmUgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIHRoaXMga2luZCBvZiBpbnZlc3RpZ2F0aW9uLCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggeDg2LCB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCBpcyBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBmZWF0dXJlcyBzcGVjaWZpYyB0byBBTUQgcHJvY2Vzc29ycyB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEkgbmVlZCB0byBsb2NhdGUgdGhlIGBLVk1fQU1EYCBzeW1ib2wsIHdoaWNoIGxpa2VseSBjb250cm9scyB2YXJpb3VzIEFNRC1zcGVjaWZpYyBLVk0gZnVuY3Rpb25hbGl0aWVzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjEyLjEwMTg3MDQ1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcwNjg5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjEyLjIwODk4MzMwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTI1NjY2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSB0dXJuaW5nLi4uXG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIEtWTSBhbmQgSU9NTVUgY29uZmlndXJhdGlvbnMg4oCTIGBLVk1fQU1EYCBhbmQgYEFNRF9JT01NVWAgaW4gcGFydGljdWxhci4gQnV0LCB3YWl0Li4uIHdoYXQgYWJvdXQgYElSUV9SRU1BUGA/IFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlLCBpc24ndCBpdD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBBTURfSU9NTVVgIGFuZCBgSVJRX1JFTUFQYC4gRG9lcyBgQU1EX0lPTU1VYCAqZGVwZW5kKiBvbiBgSVJRX1JFTUFQYCwgbWVhbmluZyB0aGF0IGl0IHJlcXVpcmVzIGl0IHRvIGZ1bmN0aW9uPyBPciBkb2VzIGBBTURfSU9NTVVgICpzZWxlY3QqIGl0LCBtYWtpbmcgYElSUV9SRU1BUGAgYSBzb3J0IG9mIGltcGxpY2l0IHJlcXVpcmVtZW50IHRoYXQgaXMgdGFrZW4gY2FyZSBvZiBhdXRvbWF0aWNhbGx5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gTGV0J3MgZGVsdmUgaW4gYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjE1LjUwMTU1NTQ3MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1OTc3OTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBJUlFfUkVNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9hbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OToxNS42MDgxNjY5NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgxNDA3NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkNoZWNraW5nIGBBTURfSU9NTVVgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGEgbWV0aG9kaWNhbCBjaGVjayBvZiB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYEFNRF9JT01NVWAuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LiBJJ20gdGhpbmtpbmcsIFwid2hhdCBleHRlcm5hbCBlbGVtZW50cyBpbnRlcmFjdCB3aXRoIHRoaXMgZmVhdHVyZT8gV2hhdCBjb21wb25lbnRzIGFyZSByZWx5aW5nIG9uIGl0LCBhbmQgd2hhdCwgaW4gdHVybiwgZG9lcyBpdCBkZXBlbmQgb24/XCIgSSBuZWVkIHRvIGNvbnNpZGVyIHRoaW5ncyBsaWtlIHRoZSBrZXJuZWwgbW9kdWxlcyBpbnZvbHZlZCwgdGhlaXIgdmVyc2lvbiBjb21wYXRpYmlsaXR5LCBhbnkgbmVjZXNzYXJ5IGZpcm13YXJlIHVwZGF0ZXMsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb25zIG9uIHRoaXMgc3lzdGVtLiBNeSBwcmlvcml0eSBpcyB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHN0aWNraW5nIHBvaW50cyAqYmVmb3JlKiBJIGV2ZW4gYmVnaW4gdG8gaW1wbGVtZW50IG9yIHRyb3VibGVzaG9vdCBhbnl0aGluZyBmdXJ0aGVyLiBUaGlzIGludm9sdmVzIGEgZGVlcCBkaXZlIGludG8gdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGtub3duIGNvbXBhdGliaWxpdHkgbWF0cmljZXMuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgYSBzdGFibGUgYW5kIHByb3Blcmx5IGZ1bmN0aW9uaW5nIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OToxOC41ODk1Nzg0MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjI3NzU2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXFx0Ym9vbCBcXFwiRW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVxcdGJvb2wgXFxcIkVuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjE5LjAyNTg2NDAyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTgxMTQxMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgdGhlIEFNRCBJT01NVSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgYGRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBBTUQgSU9NTVUgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIGNvcmUgc2V0dGluZ3Mg4oCTIHRoZSBvbmVzIHRoYXQgZGVmaW5lIHRoZSB2ZXJ5IGZvdW5kYXRpb24gb2YgaG93IHRoaXMgZHJpdmVyIGlzIGJ1aWx0IGFuZCBlbmFibGVkLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCBzdGF0ZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCdzIGluIHBsYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBzZXR0aW5ncyBwbGF5IHdpdGggdGhlIGJyb2FkZXIgSU9NTVUgZnJhbWV3b3JrIHdpdGhpbiB0aGUga2VybmVsIGFuZCBob3cgdGhleSBpbXBhY3QgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgd2lsbCBwbGF5IHdpdGggYW55IG90aGVyIHJlbGF0ZWQgaGFyZHdhcmUuIFRoaXMgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkLXRpbWUgY29udHJvbCBhbmQgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgY3JpdGljYWwgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjIyLjIwNzAwOTYyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTg2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0IyBBTUQgSU9NTVUgc3VwcG9ydFxcbiAgIDM6XFx0Y29uZmlnIEFNRF9JT01NVVxcbiAgIDQ6XFx0XFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRzZWxlY3QgU1dJT1RMQlxcbiAgIDY6XFx0XFx0c2VsZWN0IFBDSV9NU0lcXG4gICA3OlxcdFxcdHNlbGVjdCBQQ0lfQVRTXFxuICAgODpcXHRcXHRzZWxlY3QgUENJX1BSSVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QQVNJRFxcbiAgMTA6XFx0XFx0c2VsZWN0IElSUV9NU0lfTElCXFxuICAxMTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuICAxMjpcXHRcXHRzZWxlY3QgSU9NTVVfQVBJXFxuICAxMzpcXHRcXHRzZWxlY3QgSU9NTVVfSU9WQVxcbiAgMTQ6XFx0XFx0c2VsZWN0IElPTU1VX1NWQVxcbiAgMTU6XFx0XFx0c2VsZWN0IElPTU1VX0lPUEZcXG4gIDE2OlxcdFxcdHNlbGVjdCBJT01NVUZEX0RSSVZFUiBpZiBJT01NVUZEXFxuICAxNzpcXHRcXHRzZWxlY3QgR0VORVJJQ19QVFxcbiAgMTg6XFx0XFx0c2VsZWN0IElPTU1VX1BUXFxuICAxOTpcXHRcXHRzZWxlY3QgSU9NTVVfUFRfQU1EVjFcXG4gIDIwOlxcdFxcdHNlbGVjdCBJT01NVV9QVF9YODZfNjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6MjIuMjA4MDEzNjk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTA5ODc2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggSU9NTVUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gc2F0aXNmaWVkIHRoYXQgYEFNRF9JT01NVWAgaXMgdGhlIGNvcnJlY3Qgc2V0dGluZy4gSXQncyB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5IEkgbmVlZC4gQnV0LCBJJ20gbm90IHN0b3BwaW5nIHRoZXJlOyBsZXQncyBkcmlsbCBkb3duIGEgYml0IGZ1cnRoZXIuIE5vdywgd2hhdCBhYm91dCBgSVJRX1JFTUFQYD8gVGhhdCdzIHRoZSBuZXh0IGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoYXQgb3B0aW9uIGRlZmluZWQ/IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBFaXRoZXIgYGFyY2gveDg2L0tjb25maWdgIG9yIGBkcml2ZXJzL2lvbW11L0tjb25maWdgIHNob3VsZCBoYXZlIHRoZSBkZXRhaWxzIEknbSBhZnRlciwgYW5kIHRoYXQgc2hvdWxkIGNsYXJpZnkgZXZlcnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjQ5OjI1LjI5OTAwODczOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxNTAzOTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVJRX1JFTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L0tjb25maWc9MTk5PXNvdXJjZSBcXFwiZHJpdmVycy9pb21tdS9yaXNjdi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0yMDAtXFxuZHJpdmVycy9pb21tdS9LY29uZmlnOjIwMTpjb25maWcgSVJRX1JFTUFQXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBJbnRlcnJ1cHQgUmVtYXBwaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OToyOC4wMTQwNTcwOTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNTIzMjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBJUlFfUkVNQVAgQ29uZmlndXJhdGlvbiBpbiB0aGUgSU9NTVUgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgSVJRX1JFTUFQYC4gSSBzdXNwZWN0IEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG90ZW50aWFsIGJ1aWxkLXRpbWUgY29uc3RyYWludHMgb3IgY29uZmxpY3RzLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgYXMgaW5jb3JyZWN0IHNldHRpbmdzIGhlcmUgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb3IgZXZlbiBzeXN0ZW0gaW5zdGFiaWxpdHkgd2hlbiBoYW5kbGluZyBpbnRlcnJ1cHQgcmVtYXBwaW5nLiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgSU9NTVUgaW1wbGVtZW50YXRpb25zIGFuZCBpZiB0aGVyZSBhcmUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyBhdCBwbGF5LiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJJ2xsIG5lZWQgdG8gbm90ZSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgY29uZGl0aW9uYWxzIG9yIGxpbWl0YXRpb25zLiBUaGUgZ29hbCBpcyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmFtaWZpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBJJ20gY29uc2lkZXJpbmcgd2l0aGluIHRoaXMgc2VjdGlvbiwgc28gSSdtIHNjYW5uaW5nIGZvciBhbnkgc3VidGxlIGRldGFpbHMgdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTozMS43NDkyOTI3NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDE6XFx0Y29uZmlnIElSUV9SRU1BUFxcbiAyMDI6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1xcXCJcXG4gMjAzOlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFg4Nl9JT19BUElDIFxcdTAwMjZcXHUwMDI2IFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgQUNQSVxcbiAyMDQ6XFx0XFx0c2VsZWN0IElSUV9NU0lfTElCXFxuIDIwNTpcXHRcXHRoZWxwXFxuIDIwNjpcXHRcXHQgIFN1cHBvcnRzIEludGVycnVwdCByZW1hcHBpbmcgZm9yIElPLUFQSUMgYW5kIE1TSSBkZXZpY2VzLlxcbiAyMDc6XFx0XFx0ICBUbyB1c2UgeDJhcGljIG1vZGUgaW4gdGhlIENQVSdzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvclxcbiAyMDg6XFx0XFx0ICB0byBzdXBwb3J0IHBsYXRmb3JtcyB3aXRoIENQVSdzIGhhdmluZyBcXHUwMDNlIDggYml0IEFQSUMgSUQsIHNheSBZLlxcbiAyMDk6XFx0XFxuIDIxMDpcXHQjIE9NQVAgSU9NTVUgc3VwcG9ydFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTozMS43NDk0MjE1NjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgwMTAwODU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgSVJRX1JFTUFQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBgSVJRX1JFTUFQYCBjb25maWd1cmF0aW9uIGxvb2tzIHByb21pc2luZy4gVGhlIHBhdGNoIHRhcmdldHMgYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCBhbmQgYGRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNgLCB3aGljaCBtYWtlcyBpdCBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZDogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuXG5cbkxldCBtZSBxdWlja2x5IGNoZWNrIHdoaWNoIG9mIHRoZXNlIGFyZSBzdGF0aWMuIEdvb2QsIGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBhbmQgYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgIGFyZSBhbGwgc3RhdGljLiBgYW1kX2lvbW11X3VwZGF0ZV9nYWAgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAgYXJlIGV4cG9ydGVkLCBzbyB0aGF0J3MgaGVscGZ1bC4gYGF2aWNfcGlfdXBkYXRlX2lydGVgIGlzIHByZXNlbnQgYnV0IG5vdCBzdGF0aWMsIHNvIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIHRoYXQgYXMgd2VsbCwgdGhvdWdoIGl0IGFwcGVhcnMgdG8gYmUgYW4gZXhpc3RpbmcgZnVuY3Rpb24uXG5cbk9rYXksIGxldCdzIG1ha2UgYSBjbGVhciBsaXN0IG9mIHRoZSByZWxldmFudCBzeW1ib2xzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpbiBtb3JlIGRldGFpbDogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuXG5cbk5vdywgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBsaXN0ZWQgYXMgYEtWTV9BTURgLCBgQU1EX0lPTU1VYCwgYW5kIG9mIGNvdXJzZSwgYElSUV9SRU1BUGAuIFRoYXQncyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQuXG5cbkhvbGQgb24sIEkgc2VlIGEgcG90ZW50aWFsIGdvdGNoYS4uLiBgYW1kX2lvbW11X2dhcHBpYCBpcyBhICpib290IHBhcmFtZXRlciouIFN5emthbGxlciBtaWdodCBub3QgcGFzcyB0aGF0IGJ5IGRlZmF1bHQhIFRoZSBwcm9ibGVtIGlzIHRoYXQgSSBjYW4ndCBkaXJlY3RseSBjb250cm9sIGJvb3QgcGFyYW1ldGVycyB1c2luZyB0aGUgc2V0LXJlc3VsdHMgbWVjaGFuaXNtLiBJIGNhbiBvbmx5IGNvbnRyb2wgY29uZmlncyBhbmQgZm9jdXMgc3ltYm9scy4gVGhlIHByb21wdCBzdGF0ZXMgdGhhdCBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBTbywgaXMgR0FQUEkgcmVhY2hhYmxlICp3aXRob3V0KiB0aGF0IGJvb3QgcGFyYW1ldGVyPyBJIG5lZWQgdG8gY2hlY2sgaG93IEdBUFBJIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgcmVhY2hhYmxlLiBJJ2xsIGNoZWNrIGBwYXJzZV9hbWRfaW9tbXVfb3B0aW9uc2AgdG8gZGV0ZXJtaW5lIGhvdyB0aGF0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTozOS41NTA0MzM1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3NTU6XFx0XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcImlydGNhY2hlZGlzXFxcIiwgMTEpID09IDApIHtcXG4zNzU2OlxcdFxcdFxcdFxcdGFtZF9pb21tdV9pcnRjYWNoZWRpcyA9IHRydWU7XFxuMzc1NzpcXHRcXHRcXHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcXFwibm9odWdlcGFnZXNcXFwiLCAxMSkgPT0gMCkge1xcbjM3NTg6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiUmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCXFxcIik7XFxuMzc1OTpcXHRcXHRcXHRcXHRhbWRfaW9tbXVfcGdzaXplX2JpdG1hcCA9IEFNRF9JT01NVV9QR1NJWkVTXzRLO1xcbjM3NjA6XFx0XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcInYyX3Bnc2l6ZXNfb25seVxcXCIsIDE1KSA9PSAwKSB7XFxuMzc2MTpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJSZXN0cmljdGluZyBWMSBwYWdlLXNpemVzIHRvIDRLaUIvMk1pQi8xR2lCXFxcIik7XFxuMzc2MjpcXHRcXHRcXHRcXHRhbWRfaW9tbXVfcGdzaXplX2JpdG1hcCA9IEFNRF9JT01NVV9QR1NJWkVTX1YyO1xcbjM3NjM6XFx0XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcImdhcHBpXFxcIiwgNSkgPT0gMCkge1xcbjM3NjQ6XFx0XFx0XFx0XFx0YW1kX2lvbW11X2dhcHBpID0gdHJ1ZTtcXG4zNzY1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMzc2NjpcXHRcXHRcXHRcXHRwcl9ub3RpY2UoXFxcIlVua25vd24gb3B0aW9uIC0gJyVzJ1xcXFxuXFxcIiwgc3RyKTtcXG4zNzY3OlxcdFxcdFxcdH1cXG4zNzY4OlxcdFxcbjM3Njk6XFx0XFx0XFx0c3RyICs9IHN0cmNzcG4oc3RyLCBcXFwiLFxcXCIpO1xcbjM3NzA6XFx0XFx0XFx0d2hpbGUgKCpzdHIgPT0gJywnKVxcbjM3NzE6XFx0XFx0XFx0XFx0c3RyKys7XFxuMzc3MjpcXHRcXHR9XFxuMzc3MzpcXHRcXG4zNzc0OlxcdFxcdHJldHVybiAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTozOS41NTA3MDkwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzYwMzgzNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGFtZF9pb21tdV9nYXBwaWAgU2V0dGluZyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGFtZF9pb21tdV9nYXBwaWAgZGVmYXVsdHMgdG8gYmVpbmcgZGlzYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBpdCBhbHNvIHByZXNlbnRzIGEgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgZGVmYXVsdCBpcyBmYWxzZSwgYW5kIHN5emthbGxlciwgd2hpY2ggaXMgdGhlIGZ1enplciB3ZSdyZSB1c2luZywgZG9lc24ndCBleHBsaWNpdGx5IHBhc3MgYGFtZF9pb21tdT1nYXBwaWAgYXMgYSBib290IHBhcmFtZXRlciwgdGhlbiBgYW1kX2lvbW11X2dhcHBpYCB3aWxsIHN0YXkgZGlzYWJsZWQuIEhtbSwgd2FpdCBhIHNlY29uZCwgSSByZW1lbWJlciBzeXprYWxsZXIgKmNhbiogaW5qZWN0IGJvb3QgcGFyYW1ldGVycywgaWYgd2UgY29uZmlndXJlIGl0IGNvcnJlY3RseS4gSG93ZXZlciwgYXMgYSByZXZpZXdlciBpbiB0aGlzIHNpdHVhdGlvbiwgSSBjYW4ndCBkaXJlY3RseSBzcGVjaWZ5IHRob3NlIGJvb3QgcGFyYW1ldGVycyBmb3IgdGhlIGZ1enplci4gVGhpcyBsaW1pdHMgbXkgYWJpbGl0eSB0byB0ZXN0IHRoaXMgY29uZmlndXJhdGlvbi5cblxuVGhpcyBicmluZ3MgdXAgYW5vdGhlciBxdWVzdGlvbjogaXMgYGFtZF9pb21tdV9nYXBwaWAgKm9ubHkqIGNvbnRyb2xsYWJsZSB2aWEgdGhlIGJvb3QgcGFyYW1ldGVyPyBJZiB0aGVyZSdzIGFub3RoZXIgbWVjaGFuaXNtLCBhIG1vZHVsZSBwYXJhbWV0ZXIgb3Igc29tZXRoaW5nLCB0aGF0IHdvdWxkIGNoYW5nZSB0aGluZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBjb250cm9sbGVkIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIuIExldCBtZSBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGFueSBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBhbWRfaW9tbXVfZ2FwcGlgIGFuZCBtYWtlIHN1cmUgaXQncyBub3QgYmVpbmcgc2V0IGFueXdoZXJlIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6NDMuOTExMDk2Nzk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg5OTkxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1kX2lvbW11X2dhcHBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaD00Mz1pbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcXG5kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaDo0NDpleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmgtNDUtZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXI7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9MTYxPWludCBhbWRfaW9tbXVfZ3B0X2xldmVsID0gUEFHRV9NT0RFXzRfTEVWRUw7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTE2Mi1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MTYzOmJvb2wgYW1kX2lvbW11X2dhcHBpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzoxNjQ6RVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfZ2FwcGkpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0xNjUtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM9Mjk5OD1zdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzAwNC1cXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDA1OlxcdFxcdC8qIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwMDYtXFx0XFx0ICogZmFsc2UgaW4gbmV3IGtleGVjIGtlcm5lbCBldmVuIHRob3VnaCBwcmV2aW91cyBrZXJuZWwgaGFzXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA0OS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzA1MDpcXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTEtXFx0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTMtXFx0XFx0cHJfd2FybihcXFwiR0FQUEkgaXMgbm90IHN1cHBvcnRlZC5cXFxcblxcXCIpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDU0OlxcdFxcdGFtZF9pb21tdV9nYXBwaSA9IGZhbHNlO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU1LVxcdH1cXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU4LVxcdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNTk6XFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA2MC1cXHRcXHRcXHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA3MS1cXHRwcl9pbmZvKFxcXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxcXG5cXFwiLFxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDcyOlxcdFxcdGFtZF9pb21tdV9nYXBwaSA/IFxcXCJHQVBQSVxcXCIgOiBcXFwiR0FMT0dcXFwiKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA3My0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0zNzM2PXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FtZF9pb21tdV9vcHRpb25zKGNoYXIgKnN0cilcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzYzLVxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFxcXCJnYXBwaVxcXCIsIDUpID09IDApIHtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6Mzc2NDpcXHRcXHRcXHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzY1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NjI9c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTczLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6Mzk3NDpcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTc1LVxcdFxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXBvc3RlZF9pbnRyIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwMjY9aW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGludCBmbGFncylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA0Ny1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjQwNDg6XFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNDktXFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTo0NC4zMzAxMDQ0ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5MzM2OTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoaXMgZmVhdHVyZSwgd2hhdGV2ZXIgaXQgaXMsIGlzICpvbmx5KiBlbmFibGVkIHRocm91Z2ggYSBib290IHBhcmFtZXRlci4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIG9uIHRoZSBzdXJmYWNlLiBIb3dldmVyLCB0aGUgbW9yZSBJIGRpZyBpbnRvIHRoaXMgcGF0Y2gsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIGJyb2FkZXIgdGhhbiB0aGF0IGluaXRpYWwgbGltaXRhdGlvbiBzdWdnZXN0cy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmljYXRpb25zIHRvIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYCDigJMgdGhlc2UgZnVuY3Rpb25zJyBzaWduYXR1cmVzIGFuZCBjb3JlIGxvZ2ljIGhhdmUgYmVlbiBhbHRlcmVkLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGF0IHRoZXkncmUgY2FsbGVkIGV2ZW4gd2hlbiB0aGlzIGJvb3QgcGFyYW1ldGVyIGlzbid0IGV4cGxpY2l0bHkgc2V0LlxuXG5Gb3IgZXhhbXBsZSwgSSdtIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9zdm0vYXZpYy5jYCByaWdodCBub3cuIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCBjYWxscyBib3RoIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYC4gQW5kIGd1ZXNzIHdoYXQ/IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCAqZG9lc24ndCogY2hlY2sgYGFtZF9pb21tdV9nYXBwaWAuIEl0IGNhbGxzIHRoZXNlIGZ1bmN0aW9ucyByZWdhcmRsZXNzIG9mIHRoZSBib290IHBhcmFtZXRlcidzIHNldHRpbmcuXG5cblRoZSBsb2dpYyB3aXRoaW4gYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgIHNlZW1zIHRvIGhhbmRsZSBib3RoIHNjZW5hcmlvcywgd2hldGhlciBgYW1kX2lvbW11X2dhcHBpYCBpcyB0cnVlIG9yIGZhbHNlLiBUaGVyZWZvcmUsIHRob3NlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYWJzb2x1dGVseSByZWFjaGFibGUsIGV2ZW4gd2l0aG91dCB0aGF0IHNwZWNpZmljIGJvb3QgcGFyYW1ldGVyIGJlaW5nIHNldCEgVGhhdCdzIGEgc2lnbmlmaWNhbnQgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCBoYW5kbGVzIHRoaXMgZHVhbGl0eS4gTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY2AgYW5kIGRpZyBpbnRvIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3QsIGV2ZW4gd2hlbiB0aGUgaW50ZW5kZWQgZmVhdHVyZSBpcyBkaXNhYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6NDkuNDIzNDc3MTk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDY5LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY5OlxcdHN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYXBpY2lkLFxcbjEwNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXFxuMTA3MTpcXHR7XFxuMTA3MjpcXHRcXHRpbnQgcG9zdGVkX2ludHIgPSAhIShhY3Rpb24gXFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKSBcXHUwMDNjXFx1MDAzY1xcbjEwNzM6XFx0XFx0XFx0XFx0ICBBTURfSU9NTVVfRkxBR19QT1NURURfSU5UUl9TSElGVDtcXG4xMDc0OlxcdFxcdGludCBpc192Y3B1X3J1bm5pbmcgPSAoYXBpY2lkIFxcdTAwM2U9IDApIFxcdTAwM2NcXHUwMDNjXFxuMTA3NTpcXHRcXHRcXHRcXHQgICAgICBBTURfSU9NTVVfRkxBR19WQ1BVX1JVTk5JTkdfU0hJRlQ7XFxuMTA3NjpcXHRcXHRpbnQgZmxhZ3MgPSBwb3N0ZWRfaW50ciB8IGlzX3ZjcHVfcnVubmluZztcXG4xMDc3OlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjEwNzg6XFx0XFx0c3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkO1xcbjEwNzk6XFx0XFxuMTA4MDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jayk7XFxuMTA4MTpcXHRcXG4xMDgyOlxcdFxcdC8qXFxuMTA4MzpcXHRcXHQgKiBIZXJlLCB3ZSBnbyB0aHJvdWdoIHRoZSBwZXItdmNwdSBpcl9saXN0IHRvIHVwZGF0ZSBhbGwgZXhpc3RpbmdcXG4xMDg0OlxcdFxcdCAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS5cXG4xMDg1OlxcdFxcdCAqL1xcbjEwODY6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpIHtcXG4xMDg3OlxcdFxcdFxcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXFx1MDAyNlxcdTAwMjYgY3B1IFxcdTAwM2U9IDApXFxuMTA4ODpcXHRcXHRcXHRcXHRzdm0tXFx1MDAzZWdhcHBpX2NwdSA9IGNwdTtcXG4xMDg5OlxcdFxcdFxcdHJldHVybjtcXG4xMDkwOlxcdFxcdH1cXG4xMDkxOlxcdFxcbjEwOTI6XFx0XFx0aWYgKGlzX3ZjcHVfcnVubmluZyBcXHUwMDI2XFx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcXG4xMDkzOlxcdFxcdFxcdC8qIElGIGNvbmRpdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlICovXFxuMTA5NDpcXHRcXHRcXHRpZiAoc3ZtLVxcdTAwM2VnYXBwaV9jcHUgIT0gLTEpXFxuMTA5NTpcXHRcXHRcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdFxcdHN2bS1cXHUwMDNlZ2FwcGlfY3B1ID0gY3B1OyAvKiBTdG9yZSBjcHUgbm8gYXMgdGFyZ2V0IGZvciBHQVBQSSAqL1xcbjEwOTg6XFx0XFx0fSBlbHNlIGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcXG4xMDk5OlxcdFxcdFxcdGFwaWNpZCA9IGt2bV9jcHVfZ2V0X2FwaWNpZChzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuMTEwMDpcXHRcXHRcXHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbjExMDE6XFx0XFx0fVxcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlycWZkLCBcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcXG4xMTA0OlxcdFxcdFxcdHZvaWQgKmRhdGEgPSBpcnFmZC1cXHUwMDNlaXJxX2J5cGFzc19kYXRhO1xcbjExMDU6XFx0XFxuMTEwNjpcXHRcXHRcXHRpZiAoIShhY3Rpb24gXFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxcbjExMDc6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV91cGRhdGVfZ2EoZGF0YSwgYXBpY2lkLCBmbGFncykpO1xcbjExMDg6XFx0XFx0XFx0ZWxzZSBpZiAoaXNfdmNwdV9ydW5uaW5nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTo0OS40MjM2MTQ0MzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4NTEwNzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFNRCBJT01NVSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgYGFtZF9pb21tdV91cGRhdGVfZ2FgIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgIGFyZSBub3cgZ2V0dGluZyBjYWxsZWQgd2l0aCBgYXBpY2lkYCBhbmQgYGZsYWdzYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGNwdWAgYW5kIGBnYV9sb2dfaW50cmAgcGFyYW1ldGVycy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEFWSUMgY29kZSwgZXZlbiBpZiBHQVBQSSBpc24ndCBiZWluZyB1c2VkLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGF0IGBmbGFnc2AgaXMgYmVpbmcgY29uc3RydWN0ZWQgYW5kIHBhc3NlZCB0byBgYW1kX2lvbW11X3VwZGF0ZV9nYWAuIFRoYXQgc291bmRzIGxpa2UgYSBnb29kIHBsYWNlIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBmdXp6aW5nLCBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBMZXQncyBzZWUuLi4gYEtWTV9BTURgLCBgQU1EX0lPTU1VYCwgYW5kIGBJUlFfUkVNQVBgLiBPa2F5LCBgS1ZNX0FNRGAgaXMgdHJpc3RhdGUsIGBBTURfSU9NTVVgIGFuZCBgSVJRX1JFTUFQYCBhcmUgYm9vbGVhbnMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19LVk1gIGlzIGltcGxpZWQgYnkgYENPTkZJR19LVk1fQU1EYCBhbmQgYENPTkZJR19JT01NVV9BUElgIGlzIHNlbGVjdGVkIGJ5IGBBTURfSU9NTVVgLlxuXG5Ob3csIEkgbmVlZCB0byBsaXN0IHRoZSBrZXkgc3ltYm9scyBhbmQgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGtlZXBpbmcgYW4gZXllIG9uLiBSaWdodCwgbGV0J3Mgc2VlOiBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgLCBhbmQgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAuXG5cbldhaXQgYSBtaW51dGUsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGlzIHN0YXRpYyB3aXRoaW4gYGRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNgLiBSaWdodCwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY2AgZm9yIHRoaXMgZnVuY3Rpb24uIEdvb2QgdG8ga25vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3ODUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo0OTo1NS4zMDg3MjY0MTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzc4NDE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk2MS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjM5NjI6c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk2My17XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwMDU9aW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDE4LVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAxOTpcXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAyMC1cXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9NDAyNj1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDUyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDA1MzpcXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGFwaWNpZCwgZmxhZ3MpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NDk6NTUuNDM2NTI2ODUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzI0NzMwOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElPTU1VIGFuZCBBVklDIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGlzIGRlZmluaXRlbHkgc3RhdGljLiBUaGF0IG5hcnJvd3MgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24uIE15IGluaXRpYWwgbGlzdCBpbmNsdWRlczogYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAsIGBhdmljX3BpX3VwZGF0ZV9pcnRlYCwgYW5kLCBvZiBjb3Vyc2UsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGl0c2VsZi4gVGhlbiB0aGVyZSdzIHRoZSBBVklDLXNwZWNpZmljIGdyb3VwOiBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RgLCBhbmQgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLlxuXG5Ob3csIEknbSBqdXN0IGN1cmlvdXMgaWYgSSd2ZSBtaXNzZWQgYW55dGhpbmcsIHNvIEknbGwgcXVpY2tseSBjb25zaWRlciBgYXZpY19kZXN0cm95X3ZjcHVgLCBgYXZpY19pbml0X3ZjcHVgLCBhbmQgYHN2bV9pcl9saXN0X2RlbGAuIE15IGludHVpdGlvbiBzYXlzIHRoZXNlIG1pZ2h0IGJlIHJlbGV2YW50LCBzbyBJJ2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0IHRvIGNoZWNrIGxhdGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGF2aWNfZGVzdHJveV92Y3B1YCBhbmQgYGF2aWNfaW5pdF92Y3B1YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NTA6MDAuODA5MDA0MDMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2Mzg5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXZpY19kZXN0cm95X3ZjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTEwPXN0YXRpYyB2b2lkIGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkyMi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5MjM6dm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMTo1MDowMC45MTE2NTMwMDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyMjkwNTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWNlbnQgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSBmb2N1c2VkIHNldCBvZiBjaGFuZ2VzIGhlcmUsIG1vc3RseSBjZW50ZXJlZCBhcm91bmQgdGhlIEFkdmFuY2VkIFZpcnR1YWwgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFWSUMpIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgQU1EIElPTU1VLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGFkZGl0aW9uIG9mIGBhdmljX2Rlc3Ryb3lfdmNwdWAgaXMgYSBrZXkgYWRkaXRpb24sIGxpa2VseSBhIG5lY2Vzc2FyeSBjbGVhbnVwIGZ1bmN0aW9uIHRvIGNvbXBsZW1lbnQgZXhpc3RpbmcgVkNQVSBpbml0aWFsaXphdGlvbiBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBhdmljX2luaXRfdmNwdWAsIGBzdm1faXJfbGlzdF9kZWxgLCBgYXZpY19oYXJkd2FyZV9zZXR1cGAsIGBhdmljX2hhcmR3YXJlX3Vuc2V0dXBgLCBgZW5hYmxlX2lvbW11c192YXBpY2AsIGFuZCBgaW9tbXVfZGlzYWJsZWAgYWxsIHN1Z2dlc3QgZGVlcGVyIGludGVncmF0aW9uIGFuZCByZWZpbmVkIGNvbnRyb2wuXG5cbkZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucywgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXMgSSdtIHNlZWluZzogYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAsIGBhdmljX3BpX3VwZGF0ZV9pcnRlYCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYGF2aWNfZGVzdHJveV92Y3B1YCBhbmQgYHN2bV9pcl9saXN0X2RlbGAuIFRoZSBwcmVzZW5jZSBvZiBzbyBtYW55IElPTU1VIGFuZCBHQS1yZWxhdGVkIGZ1bmN0aW9uIGluZGljYXRlcyBhIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBndWVzdCBhZGRyZXNzaW5nIGFuZCBpbnRlcnJ1cHQgcm91dGluZy4gVGhlIEdBcHBJIHdha2V1cCBsaXN0IGZ1bmN0aW9ucywgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgaGFuZGxlciwgbG9vayBsaWtlIHRoZXkgYXJlIGNlbnRyYWwgdG8gdGhlIEFWSUMgaW50ZXJydXB0IGluamVjdGlvbiBwcm9jZXNzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBzdm1faXJfbGlzdF9kZWxgIGlzIHN0YXRpYy4gVGhhdCB3b3VsZCBpbXBhY3QgaXRzIHZpc2liaWxpdHkgYW5kIHNjb3BlLiBUaGF0IGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgb24gdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgY29uc2lzdGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjI2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIxOjUwOjA1LjgzNDU2Mjc0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5MzM1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZtX2lyX2xpc3RfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vYXZpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTkzMT12b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkzNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzo5Mzc6c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05Mzgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTU1PWludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTYyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjk2MzpcXHRzdm1faXJfbGlzdF9kZWwoaXJxZmQpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NTA6MDUuOTI3NTA1NTY4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTc1NTU3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBhbmQgSXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGl0J3MgY2xlYXI6IHRoaXMgaXMgYSBzdGF0aWMgY29uZmlndXJhdGlvbi4gTm8gZHluYW1pYyBlbGVtZW50cyB0byBjb25zaWRlciBoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogd2UncmUgZGVhbGluZyB3aXRoIGBLVk1fQU1EYCwgYEFNRF9JT01NVWAsIGFuZCBgSVJRX1JFTUFQYC4gVGhlc2UgdGhyZWUgYXJlIHRoZSBrZXkgY29tcG9uZW50cy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBpbnRyb2R1Y2luZyBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzLCBvciBHQVBQSSwgc3BlY2lmaWNhbGx5IGZvciBBTUQncyBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBOb3csIHRoZSBtZWF0IG9mIHRoaXMgaXMgdGhhdCBpdCdzIG1vZGlmeWluZyB0aGUgdXBkYXRlIHByb2Nlc3MgZm9yIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cmllcyBhbmQgdGhlIHZDUFUgYWZmaW5pdHkgbG9naWMuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBhYnNvbHV0ZWx5IHJlbGV2YW50IHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2Ugd2hlbiB1c2luZyBRRU1VIHdpdGggS1ZNIFNWTS5cblxuV2hhdCdzIHJlYWxseSBpbnRlcmVzdGluZyBpcyB0aGF0IHRoZXNlIHVwZGF0ZXMgYXJlIGltcGFjdGluZyBjb3JlIEFWSUMgYW5kIElPTU1VIGxvZ2ljLCBldmVuIGlmIEdBUFBJIGlzbid0IGRpcmVjdGx5IGFjdGl2YXRlZCB0aHJvdWdoIGEgYm9vdCBwYXJhbWV0ZXIuIFRoaXMgbWVhbnMgdGhhdCBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQsIGV2ZW4gaWYgbm90IGRpcmVjdGx5IGVuYWJsZWQuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gY2hlY2sgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbkknbGwgcHJvY2VlZCB0byBzZXQgdGhlIHJlc3VsdHMgYmFzZWQgb24gdGhpcyB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU1NCwiT3V0cHV0VG9rZW5zIjoyNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjE6NTA6MTEuNDI1MDY0MzQ1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTkyNDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIklSUV9SRU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlcIixcbiAgICBcImFtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlXCIsXG4gICAgXCJhdmljX3BpX3VwZGF0ZV9pcnRlXCIsXG4gICAgXCJfX2FtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19nYXBwaV93YWtldXBfaGFuZGxlclwiLFxuICAgIFwiYXZpY19kZXN0cm95X3ZjcHVcIixcbiAgICBcInN2bV9pcl9saXN0X2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cyAoR0FQUEkpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBJdCBtb2RpZmllcyB0aGUgaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB1cGRhdGVzIGFuZCB2Q1BVIGFmZmluaXR5IGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZS5nLiwgUUVNVSB3aXRoIEtWTSBTVk0pLiBUaGUgY2hhbmdlcyBhbHRlciBjb3JlIEFWSUMgYW5kIElPTU1VIGxvZ2ljIGV2ZW4gd2hlbiBHQVBQSSBpcyBub3QgZXhwbGljaXRseSBlbmFibGVkIHZpYSBib290IHBhcmFtZXRlciwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJUlFfUkVNQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5XCIsXG4gICAgXCJhbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZVwiLFxuICAgIFwiYXZpY19waV91cGRhdGVfaXJ0ZVwiLFxuICAgIFwiX19hbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJcIixcbiAgICBcImF2aWNfZGVzdHJveV92Y3B1XCIsXG4gICAgXCJzdm1faXJfbGlzdF9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMgKEdBUFBJKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdXBkYXRlcyBhbmQgdkNQVSBhZmZpbml0eSBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGUuZy4sIFFFTVUgd2l0aCBLVk0gU1ZNKS4gVGhlIGNoYW5nZXMgYWx0ZXIgY29yZSBBVklDIGFuZCBJT01NVSBsb2dpYyBldmVuIHdoZW4gR0FQUEkgaXMgbm90IGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgYm9vdCBwYXJhbWV0ZXIsIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowb26b6[1] Phase: Succeeded StartedAt: 2026-07-08 21:50:23 +0000 UTC FinishedAt: 2026-07-08 21:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 21:50:23 +0000 UTC FinishedAt: 2026-07-08 21:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2] Phase: Succeeded StartedAt: 2026-07-08 21:50:23 +0000 UTC FinishedAt: 2026-07-08 23:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 21:50:23 +0000 UTC FinishedAt: 2026-07-08 23:33:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 21:50:23 +0000 UTC FinishedAt: 2026-07-08 21:50:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 21:50:23 +0000 UTC FinishedAt: 2026-07-08 21:50:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowb26b6/series-workflowb26b6-convert-artifact-2800774614/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 21:50:44 +0000 UTC FinishedAt: 2026-07-08 22:22:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 21:50:44 +0000 UTC FinishedAt: 2026-07-08 22:22:06 +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:*34978484-ea7c-4cbf-aa89-2e0ef7cc9ac2,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-workflowb26b6/series-workflowb26b6-convert-artifact-2800774614/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": "3e2c96fb-19dc-4346-acb9-91e824425875", "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-workflowb26b6/series-workflowb26b6-build-action-3759491692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 21:50:44 +0000 UTC FinishedAt: 2026-07-08 22:21:56 +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:*34978484-ea7c-4cbf-aa89-2e0ef7cc9ac2,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-workflowb26b6/series-workflowb26b6-convert-artifact-2800774614/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": "3e2c96fb-19dc-4346-acb9-91e824425875", "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-workflowb26b6/series-workflowb26b6-build-action-3759491692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 22:22:06 +0000 UTC FinishedAt: 2026-07-08 22:22:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 22:22:06 +0000 UTC FinishedAt: 2026-07-08 22:22:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 22:22:06 +0000 UTC FinishedAt: 2026-07-08 22:22:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 22:22:06 +0000 UTC FinishedAt: 2026-07-08 22:22:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowb26b6/series-workflowb26b6-convert-artifact-1933427049/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 22:22:17 +0000 UTC FinishedAt: 2026-07-08 22:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 22:22:17 +0000 UTC FinishedAt: 2026-07-08 22:24:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e2c96fb-19dc-4346-acb9-91e824425875,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-workflowb26b6/series-workflowb26b6-build-action-3759491692/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-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 22:24:54 +0000 UTC FinishedAt: 2026-07-08 22:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 22:24:54 +0000 UTC FinishedAt: 2026-07-08 22:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 22:24:54 +0000 UTC FinishedAt: 2026-07-08 22:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 22:24:54 +0000 UTC FinishedAt: 2026-07-08 22:56:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*34978484-ea7c-4cbf-aa89-2e0ef7cc9ac2,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-workflowb26b6/series-workflowb26b6-convert-artifact-1933427049/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": "8b7c07f0-58a4-47bb-b4a9-0bc869240311", "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-workflowb26b6/series-workflowb26b6-build-action-2129789253/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 22:24:54 +0000 UTC FinishedAt: 2026-07-08 22:56:26 +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:*34978484-ea7c-4cbf-aa89-2e0ef7cc9ac2,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-workflowb26b6/series-workflowb26b6-convert-artifact-1933427049/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": "8b7c07f0-58a4-47bb-b4a9-0bc869240311", "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-workflowb26b6/series-workflowb26b6-build-action-2129789253/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 22:56:36 +0000 UTC FinishedAt: 2026-07-08 22:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 22:56:36 +0000 UTC FinishedAt: 2026-07-08 22:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 22:56:36 +0000 UTC FinishedAt: 2026-07-08 22:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 22:56:36 +0000 UTC FinishedAt: 2026-07-08 22:58:33 +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:*8b7c07f0-58a4-47bb-b4a9-0bc869240311,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-workflowb26b6/series-workflowb26b6-build-action-2129789253/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-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 22:58:43 +0000 UTC FinishedAt: 2026-07-08 23:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 22:58:43 +0000 UTC FinishedAt: 2026-07-08 23:33:53 +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":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"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:*3e2c96fb-19dc-4346-acb9-91e824425875,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8b7c07f0-58a4-47bb-b4a9-0bc869240311,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-workflowb26b6/series-workflowb26b6-build-action-3759491692/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-workflowb26b6/series-workflowb26b6-build-action-2129789253/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 22:58:43 +0000 UTC FinishedAt: 2026-07-08 22:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 22:58:43 +0000 UTC FinishedAt: 2026-07-08 22:58:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"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-workflowb26b6/series-workflowb26b6-convert-artifact-3234651582/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 22:58:43 +0000 UTC FinishedAt: 2026-07-08 22:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 22:58:43 +0000 UTC FinishedAt: 2026-07-08 22:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 22:58:43 +0000 UTC FinishedAt: 2026-07-08 22:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 22:58:53 +0000 UTC FinishedAt: 2026-07-08 23:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb26b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_update_iommu_vcpu_affinity","amd_iommu_update_ga","amd_iommu_activate_guest_mode","avic_pi_update_irte","__amd_iommu_update_ga","avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_destroy_vcpu","svm_ir_list_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"babe08404e1993697a523e60bc0f9d096ffe1ef8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"c31b065e-df20-49aa-933a-359c037091e4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 22:58:53 +0000 UTC FinishedAt: 2026-07-08 23:33:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e2c96fb-19dc-4346-acb9-91e824425875,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8b7c07f0-58a4-47bb-b4a9-0bc869240311,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-workflowb26b6/series-workflowb26b6-build-action-3759491692/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-workflowb26b6/series-workflowb26b6-build-action-2129789253/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-workflowb26b6/series-workflowb26b6-convert-artifact-3234651582/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,}