Name: series-workflow2r2mq Phase: Succeeded StartedAt: 2026-07-31 02:19:50 +0000 UTC FinishedAt: 2026-07-31 03:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[0] Phase: Succeeded StartedAt: 2026-07-31 02:19:50 +0000 UTC FinishedAt: 2026-07-31 02:34:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 02:19:50 +0000 UTC FinishedAt: 2026-07-31 02:34:14 +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": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "b2cf287e-35fb-4084-9c78-7e48d958bacd" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vm_ioctl", "vmx_vcpu_free" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGwmIzM0OywKICAgICYjMzQ7dm14X3ZjcHVfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBhbmQgVk1YIGNvZGUgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcyB1c2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFycyB0aGUgUElEIHRhYmxlIGVudHJ5IHdoZW4gYSBWQ1BVIGlzIGZyZWVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjhiOWIyNDA3MmY5OWVlZDM3YjBlOTk2NDhhY2Y2ZmY2Y2RjY2ZmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjMyOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCBjYzc1ZmVlYzA1ZGFhLi5mOThjMjY4YjUxNTBjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTc2NjUsNiAmIzQzOzc2NjUsOSBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0bmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7XG4gXHRmcmVlX2xvYWRlZF92bWNzKHZteC1cdTAwM2Vsb2FkZWRfdm1jcyk7XG4gXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdm14LVx1MDAzZXZlX2luZm8pO1xuJiM0MztcbiYjNDM7XHRpZiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSlcbiYjNDM7XHRcdFdSSVRFX09OQ0UodG9fa3ZtX3ZteCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlcGlkX3RhYmxlW3ZjcHUtXHUwMDNldmNwdV9pZF0sIDApO1xuIH1cbiBcbiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjZmODgzZWQ4MjU4MWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTc5MSw2ICYjNDM7NzkxLDcgQEAgc3RydWN0IGt2bSB7XG4gXHQvKiBUaGUgY3VycmVudCBhY3RpdmUgbWVtc2xvdCBzZXQgZm9yIGVhY2ggYWRkcmVzcyBzcGFjZSAqL1xuIFx0c3RydWN0IGt2bV9tZW1zbG90cyBfX3JjdSAqbWVtc2xvdHNbS1ZNX01BWF9OUl9BRERSRVNTX1NQQUNFU107XG4gXHRzdHJ1Y3QgeGFycmF5IHZjcHVfYXJyYXk7XG4mIzQzO1x0REVDTEFSRV9CSVRNQVAodmNwdV9pZHMsIEtWTV9NQVhfVkNQVV9JRFMpO1xuIFx0LypcbiBcdCAqIFByb3RlY3RlZCBieSBzbG90c19sb2NrLCBidXQgY2FuIGJlIHJlYWQgb3V0c2lkZSBpZiBhblxuIFx0ICogaW5jb3JyZWN0IGFuc3dlciBpcyBhY2NlcHRhYmxlLlxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi4xZTM3MTRjNWRhYTcwIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQxNzMsNiAmIzQzOzQxNzMsMTEgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoaWQsIGt2bS1cdTAwM2V2Y3B1X2lkcykpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKGt2bSwgaWQpO1xuIFx0aWYgKHIpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbkBAIC00MTgwLDYgJiM0Mzs0MTg1LDcgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFx0fVxuIFxuIFx0a3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMmIzQzOyYjNDM7O1xuJiM0MztcdF9fc2V0X2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXG4gXHR2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5AQCAtNDIxMSw3ICYjNDM7NDIxNyw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKGt2bV9nZXRfdmNwdV9ieV9pZChrdm0sIGlkKSkge1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0Uoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSkge1xuIFx0XHRyID0gLUVFWElTVDtcbiBcdFx0Z290byB1bmxvY2tfdmNwdV9kZXN0cm95O1xuIFx0fVxuQEAgLTQyNjUsNiAmIzQzOzQyNzEsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXG4gdmNwdV9kZWNyZW1lbnQ6XG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzLS07XG4mIzQzO1x0X19jbGVhcl9iaXQoaWQsIGt2bS1cdTAwM2V2Y3B1X2lkcyk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O3ZteF92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gYW5kIFZNWCBjb2RlIHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMgdXNpbmcgYSBiaXRtYXAgaW4gYHN0cnVjdCBrdm1gIGFuZCBjbGVhcnMgdGhlIFBJRCB0YWJsZSBlbnRyeSB3aGVuIGEgVkNQVSBpcyBmcmVlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4YjliMjQwNzJmOTllZWQzN2IwZTk5NjQ4YWNmNmZmNmNkY2NmZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwMjozMjo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IGNjNzVmZWVjMDVkYWEuLmY5OGMyNjhiNTE1MGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtNzY2NSw2ICYjNDM7NzY2NSw5IEBAIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJbmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7CiAJZnJlZV9sb2FkZWRfdm1jcyh2bXgtJmd0O2xvYWRlZF92bWNzKTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdm14LSZndDt2ZV9pbmZvKTsKJiM0MzsKJiM0MzsJaWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpCiYjNDM7CQlXUklURV9PTkNFKHRvX2t2bV92bXgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7cGlkX3RhYmxlW3ZjcHUtJmd0O3ZjcHVfaWRdLCAwKTsKIH0KIAogaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uNmY4ODNlZDgyNTgxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtNzkxLDYgJiM0Mzs3OTEsNyBAQCBzdHJ1Y3Qga3ZtIHsKIAkvKiBUaGUgY3VycmVudCBhY3RpdmUgbWVtc2xvdCBzZXQgZm9yIGVhY2ggYWRkcmVzcyBzcGFjZSAqLwogCXN0cnVjdCBrdm1fbWVtc2xvdHMgX19yY3UgKm1lbXNsb3RzW0tWTV9NQVhfTlJfQUREUkVTU19TUEFDRVNdOwogCXN0cnVjdCB4YXJyYXkgdmNwdV9hcnJheTsKJiM0MzsJREVDTEFSRV9CSVRNQVAodmNwdV9pZHMsIEtWTV9NQVhfVkNQVV9JRFMpOwogCS8qCiAJICogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2ssIGJ1dCBjYW4gYmUgcmVhZCBvdXRzaWRlIGlmIGFuCiAJICogaW5jb3JyZWN0IGFuc3dlciBpcyBhY2NlcHRhYmxlLgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNDVlNzg0NDYyZWM2ZS4uMWUzNzE0YzVkYWE3MCAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00MTczLDYgJiM0Mzs0MTczLDExIEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmICh0ZXN0X2JpdChpZCwga3ZtLSZndDt2Y3B1X2lkcykpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwogCXIgPSBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShrdm0sIGlkKTsKIAlpZiAocikgewogCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2xvY2spOwpAQCAtNDE4MCw2ICYjNDM7NDE4NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZCkKIAl9CiAKIAlrdm0tJmd0O2NyZWF0ZWRfdmNwdXMmIzQzOyYjNDM7OwomIzQzOwlfX3NldF9iaXQoaWQsIGt2bS0mZ3Q7dmNwdV9pZHMpOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAKIAl2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7CkBAIC00MjExLDcgJiM0Mzs0MjE3LDcgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKQogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAKLQlpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSB7CiYjNDM7CWlmIChXQVJOX09OX09OQ0Uoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSkgewogCQlyID0gLUVFWElTVDsKIAkJZ290byB1bmxvY2tfdmNwdV9kZXN0cm95OwogCX0KQEAgLTQyNjUsNiAmIzQzOzQyNzEsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpCiB2Y3B1X2RlY3JlbWVudDoKIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKIAlrdm0tJmd0O2NyZWF0ZWRfdmNwdXMtLTsKJiM0MzsJX19jbGVhcl9iaXQoaWQsIGt2bS0mZ3Q7dmNwdV9pZHMpOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAJcmV0dXJuIHI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBLVk0sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBJdCYjMzk7cyBhZGRpbmcgYSBgdmNwdV9pZHNgIGJpdG1hcCB0byBgc3RydWN0IGt2bWAsIHdoaWNoIGlzIGEgZ29vZCB3YXkgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcy4gVGhhdCBhbG9uZSBtYWtlcyBtZSBpbnRlcmVzdGVkLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIHRvIGhhbmRsZSB0aGUgYml0IHNldHRpbmcsIG1ha2luZyBzdXJlIHdlIGRvbiYjMzk7dCBhY2NpZGVudGFsbHkgY3JlYXRlIGR1cGxpY2F0ZSBWQ1BVcy4gR29vZCDigJMgcmV0dXJuaW5nIGAtRUVYSVNUYCBlYXJsaWVyIGlzIGRlZmluaXRlbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd29ydGggY29uc2lkZXJpbmcuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBtb2RpZmljYXRpb24gdG8gYHZteF92Y3B1X2ZyZWVgLCB3aGVyZSBpdCBjbGVhcnMgdGhlIGBwaWRfdGFibGVgIGVudHJ5IGlmIGB2bXhfY2FuX3VzZV9pcGl2KHZjcHUpYC4KCkFoLCBidXQgdGhlIGNvZGUgbG9jYXRpb25zLiBJdCB0b3VjaGVzIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGFuZCBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYXJlYSBhbmQgY29tcGxldGVseSByZWFjaGFibGUuIEkgc2VlIHRoYXQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYCBhcmUgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4KCkxvb2tpbmcgbW9yZSBjbG9zZWx5IGF0IGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgLCB0aGlzIGlzIGEgY29yZSBLVk0gaW9jdGwg4oCTIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IG5lZWRzIG1ldGljdWxvdXMgdmVyaWZpY2F0aW9uLiBUaGUgcGF0Y2gmIzM5O3MgaW50cm9kdWN0aW9uIG9mIHRoZSBgdmNwdV9pZHNgIGJpdG1hcCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBWQ1BVIElEcyBpcyBhIHBvc2l0aXZlIGNoYW5nZSwgYW5kIHRoZSBlYXJseSBlcnJvciByZXR1cm4gaXMgYSBuaWNlIHRvdWNoLgoKTm93LCBmb3IgYHZteF92Y3B1X2ZyZWVgLCB0aGUgYWRkZWQgbGluZSBgaWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpIFdSSVRFX09OQ0UodG9fa3ZtX3ZteCh2Y3B1LSZndDtrdm0pLSZndDtwaWRfdGFibGVbdmNwdS0mZ3Q7dmNwdV9pZF0sIDApO2AgbG9va3Mgc29saWQuCgpZZXAsIHRoaXMgbG9va3MgZnVuY3Rpb25hbCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYC4gRm9yIGNvbmZpZ3VyYXRpb24sIGBLVk1gIG9yIGBLVk1fSU5URUxgIChpZiBpdCYjMzk7cyBWTVgpIHdpbGwgYmUgbmVjZXNzYXJ5LiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzdGFydCBwcmVwYXJpbmcgdGhlIGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoaW5raW5nIGxpa2UgYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyOgoKKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgaGl0dGluZyBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgYW5kIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgbGlrZWx5IHBvaW50cyB0byBjaGFuZ2VzIGluIHRoZSBJbnRlbCBWVC14IChWTVgpIGh5cGVydmlzb3Igc3VwcG9ydCB3aXRoaW4gS1ZNLCBhbmQgcG90ZW50aWFsbHkgc29tZSBjb3JlIEtWTSBpbmZyYXN0cnVjdHVyZS4gSSBzZWUgYHZteF92Y3B1X2ZyZWVgIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvcjogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgcmVsZWFzZSBvZiB2Q1BVIHJlc291cmNlcyB3aGVuIHJ1bm5pbmcgSW50ZWwgdmlydHVhbGl6YXRpb24uIE9uIHRoZSBvdGhlciBoYW5kLCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AgbWVhbmluZyB0aGlzIHdpbGwgYmUgZGVhbGluZyB3aXRoIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBTbywgbGlrZWx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHJlbGVhc2luZyBhbmQgcmVjcmVhdGluZyB2Q1BVcy4KClRoZSBuZXh0IHRoaW5nIEkmIzM5O2Qgd2FudCB0byBjaGVjayBpcyB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBpZiBgS1ZNX0lOVEVMYCBpcyBldmVuIGVuYWJsZWQuIElmIHNvLCBJJiMzOTtsbCByZXZpZXcgaXRzIGRlcGVuZGVuY2llcywgYXMgdGhhdCB3aWxsIHByb3ZpZGUgbW9yZSBjb250ZXh0IGFib3V0IHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgaW1wYWN0ZWQuIFRoYXQmIzM5O2xsIGd1aWRlIG15IGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEtWTV9JTlRFTCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGRlcGVuZGVuY3kgY2hhaW4gZm9yIGBLVk1fSU5URUxgPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMsIGZlYXR1cmVzLCBvciBjb25maWd1cmF0aW9ucyBhcmUgaW50ZXJ0d2luZWQgd2l0aCBpdC4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBhIHN1cGVyZmljaWFsIGdsYW5jZTsgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGltcGxpY2F0aW9ucywgdGhlIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBtaWdodCBhcmlzZS4gSXMgdGhpcyBwdXJlbHkgYW4gYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbiwgb3IgYXJlIHRoZXJlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBzcGVjaWZpYyBDUFUgZmVhdHVyZSBmbGFncyB0aGF0ICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBjb25kaXRpb25hbGx5IHJlcXVpcmVkPyBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgb3RoZXIgdmlydHVhbGl6YXRpb24gbW9kdWxlcyBsaWtlIGBLVk1gIG9yIGV2ZW4gY29yZSBzY2hlZHVsaW5nIHN1YnN5c3RlbXMgbWlnaHQgcmVseSBvbiBvciBpbnRlcmFjdCB3aXRoIHRoZSBgS1ZNX0lOVEVMYCBtb2R1bGUgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZnVuY3Rpb25zIHByZWRpY3RhYmx5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbWFrZWZpbGVzLCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgbW9kdWxlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgYWJsZSB0byBhc3Nlc3MgaXQgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTA1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cbiAxMDY6XHRcbiAxMDc6XHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG4gMTA4Olx0ICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4gMTA5Olx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcdTAwMjZcdTAwMjYgRVhQRVJUXG4gMTEwOlx0ICAgICAgICBoZWxwXG4gMTExOlx0ICAgICAgICAgIENoZWNrcyB0aGF0IEtWTSYjMzk7cyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxuIDExMjpcdCAgICAgICAgICBsZXQgZ3Vlc3RzIHJlY2VpdmUgYSB2aXJ0dWFsaXphdGlvbiBleGNlcHRpb24uICBWaXJ0dWFsaXphdGlvblxuIDExMzpcdCAgICAgICAgICBleGNlcHRpb25zIHdpbGwgYmUgdHJhcHBlZCBieSB0aGUgaHlwZXJ2aXNvciByYXRoZXIgdGhhbiBpbmplY3RlZFxuIDExNDpcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXG4gMTE1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gTGFieXJpbnRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpbW1lZGlhdGVseSB0aGUgdHdvIG1haW4gb25lcyB0aGF0IGp1bXAgb3V0IGFyZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAuIFNlZW1zIG9idmlvdXMgZW5vdWdoIC0gS1ZNIGlzIHRoZSBiYXNlIHZpcnR1YWxpemF0aW9uLCBhbmQgYEtWTV9JTlRFTGAgaXMgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgSW50ZWwgcHJvY2Vzc29ycywgbGlrZWx5IGVuYWJsaW5nIGhhcmR3YXJlLWFzc2lzdGVkIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLiBCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gYEtWTWAgaXRzZWxmLi4uIHdoYXQgZG9lcyAqaXQqIGRlcGVuZCBvbj8gSXQmIzM5O3MgdGhlIGNvcmUsIHNvIHdoYXQgYXJlIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgdGhhdCAqZW5hYmxlKiBgS1ZNYD8gV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZSBtb2R1bGVzIG9yIHNldHRpbmdzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGRlcGVuZGVuY3kgY2hhaW4gYmVmb3JlIEkgY2FuIHJlYWxseSBncmFzcCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgYEtWTWAgaXMgYSBzdGFuZGFsb25lIGVudGl0eS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MjpcdGNvbmZpZyBLVk1cbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmVcbiAgNTc6XHRcdCAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50XG4gIDU4Olx0XHQgIHByb2Nlc3NvciBlcXVpcHBlZCB3aXRoIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFlvdSB3aWxsIGFsc29cbiAgNTk6XHRcdCAgbmVlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb2YgdGhlIHByb2Nlc3NvciBtb2R1bGVzIGJlbG93LlxuICA2MDpcdFxuICA2MTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXG4gIDYyOlx0XHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxuICA2MzpcdFxuICA2NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNjU6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxuICA2NjpcdFxuICA2NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBLVk1fV0VSUk9SXG4gIDcwOlx0XHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuICA3MTpcdFx0IyBEaXNhbGxvdyBLVk0mIzM5O3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4OAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgLiBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGAvZGV2L2t2bWAgaW9jdGxzLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1l1cCwgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nISYjMzQ7IEl0JiMzOTtzIGEgZ3JlYXQgcG90ZW50aWFsIHRhcmdldC4KCkkmIzM5O3ZlIGdvdCB0aGUgYFdvcnRoRnV6emluZz10cnVlYCBmbGFnIHNldCBpbiBteSBtaW5kLiBUaGUgbWFpbiBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgLiBKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCB0aG9zZSBhcmUgaW5kZWVkIHRoZSBjb3JyZWN0IHN5bWJvbCBuYW1lcyDigJMgeWVzLCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgIGFyZSBjb25maXJtZWQuCgpIYW5nIG9uIGEgc2VjLi4uIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZy4gSXMgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYSBzdGF0aWMgZnVuY3Rpb24/IEl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IHNpbmNlIHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIG1vcmUgY29tcGxleCB0byB0YXJnZXQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBieSBsb29raW5nIGF0IGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhpcyBjb3VsZCBpbXBhY3QgbXkgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTM5NjA9dm9pZCBrdm1fdmNwdV9vbl9zcGluKHN0cnVjdCBrdm1fdmNwdSAqbWUsIGJvb2wgeWllbGRfdG9fa2VybmVsX21vZGUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zOTcwLVxudmlydC9rdm0va3ZtX21haW4uYzozOTcxOlx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpLiAqL1xudmlydC9rdm0va3ZtX21haW4uYy0zOTcyLVx0c21wX3JtYigpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDEzMT1zdGF0aWMgdm9pZCBrdm1fY3JlYXRlX3ZjcHVfZGVidWdmcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MTUxLSAqL1xudmlydC9rdm0va3ZtX21haW4uYzo0MTUyOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDE1My17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00Mzg2PXN0YXRpYyBpbnQga3ZtX3dhaXRfZm9yX3ZjcHVfb25saW5lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzOTgtXHQgKiBBY3F1aXJlIGFuZCByZWxlYXNlIHRoZSB2Q1BVJiMzOTtzIG11dGV4IHRvIHdhaXQgZm9yIHZDUFUgY3JlYXRpb24gdG9cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM5OTpcdCAqIGNvbXBsZXRlIChrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoKSBob2xkcyB0aGUgbXV0ZXggdW50aWwgdGhlIHZDUFVcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQwMC1cdCAqIGlzIGZ1bGx5IG9ubGluZSkuXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01MTU1PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjUtXHRjYXNlIEtWTV9DUkVBVEVfVkNQVTpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTE2NjpcdFx0ciA9IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShrdm0sIGFyZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIEtWTSBWQ1BVIENyZWF0aW9uIGFuZCBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGUgc3R5bGUgZ3VpZGUgZW1waGFzaXplcyAqcHJlZmVycmluZyogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhhdCYjMzk7cyBmb3Igc3ltYm9sIHZpc2liaWxpdHksIG1vc3RseSwgdG8gZW5zdXJlIHRoZSBkZWJ1Z2dpbmcgdG9vbHMgcGljayB1cCB0aGUgZnVuY3Rpb24gY2FsbHMuCgpUaGUgcXVlc3Rpb24gdGhlbiBpczogaXMgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgaW5saW5lZD8gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV92bV9pb2N0bGAsIGFuZCBmcm9tIG1lbW9yeSwgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgaXMgYSByZWxhdGl2ZWx5IHNpemFibGUgZnVuY3Rpb24uIEl0ICpzaG91bGRuJiMzOTt0KiBiZSBpbmxpbmVkIGF1dG9tYXRpY2FsbHkuIEJ1dCBJIHNob3VsZCBjaGVjay4gRm9yIGdvb2QgbWVhc3VyZSwgSSBjb3VsZCBwcm9iYWJseSBhZGQgYGt2bV92bV9pb2N0bGAgdG8gdGhlIGxpc3QgdG9vLCBidXQgd2FpdC4gSXMgYGt2bV92bV9pb2N0bGAgYWxzbyBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suIFl1cC4gT2theSwgZ29vZC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIGJvdGggZnVuY3Rpb24gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92bV9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0xNDE1PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdW5sb2NrX2FsbF92Y3B1cyk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xNDE4LSAqIEFsbG9jYXRpb24gc2l6ZSBpcyB0d2ljZSBhcyBsYXJnZSBhcyB0aGUgYWN0dWFsIGRpcnR5IGJpdG1hcCBzaXplLlxudmlydC9rdm0va3ZtX21haW4uYzoxNDE5OiAqIFNlZSBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZygpIHdoeSB0aGlzIGlzIG5lZWRlZC5cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTQyMC0gKi9cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTIxMzg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMzktXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxNDA6c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxudmlydC9rdm0va3ZtX21haW4uYy0yMTQxLVx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yMjIxPXN0YXRpYyBpbnQga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMjkzLS8qKlxudmlydC9rdm0va3ZtX21haW4uYzoyMjk0OiAqIGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nIC0gZ2V0IGFuZCBjbGVhciB0aGUgbG9nIG9mIGRpcnR5IHBhZ2VzIGluIGEgc2xvdFxudmlydC9rdm0va3ZtX21haW4uYy0yMjk1LSAqIEBrdm06IGt2bSBpbnN0YW5jZVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMxMS0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMxMjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMxMy1cdFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yMzMxPXN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0MDYtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0MDc6c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjQwOC1cdFx0XHRcdFx0c3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI1Mzc9c3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI1OTgtfVxudmlydC9rdm0va3ZtX21haW4uYzoyNTk5OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2MDAtXHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMgKmF0dHJzKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9Mzk2MD12b2lkIGt2bV92Y3B1X29uX3NwaW4oc3RydWN0IGt2bV92Y3B1ICptZSwgYm9vbCB5aWVsZF90b19rZXJuZWxfbW9kZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM5NzAtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjM5NzE6XHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KCkuICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM5NzItXHRzbXBfcm1iKCk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00MTMxPXN0YXRpYyB2b2lkIGt2bV9jcmVhdGVfdmNwdV9kZWJ1Z2ZzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQxNTEtICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQxNTI6c3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxudmlydC9rdm0va3ZtX21haW4uYy00MTUzLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQzODY9c3RhdGljIGludCBrdm1fd2FpdF9mb3JfdmNwdV9vbmxpbmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM5OC1cdCAqIEFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIHZDUFUmIzM5O3MgbXV0ZXggdG8gd2FpdCBmb3IgdkNQVSBjcmVhdGlvbiB0b1xudmlydC9rdm0va3ZtX21haW4uYzo0Mzk5Olx0ICogY29tcGxldGUgKGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpIGhvbGRzIHRoZSBtdXRleCB1bnRpbCB0aGUgdkNQVVxudmlydC9rdm0va3ZtX21haW4uYy00NDAwLVx0ICogaXMgZnVsbHkgb25saW5lKS5cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ4MTI9c3RhdGljIGludCBrdm1faW9jdGxfY3JlYXRlX2RldmljZShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00ODcwLVxudmlydC9rdm0va3ZtX21haW4uYzo0ODcxOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbl9nZW5lcmljKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBhcmcpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ4NzIte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk0NC1cdH1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDk0NTpcdHJldHVybiBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKGt2bSwgYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk0Ni19XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ5NDctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ5NDg6c3RhdGljIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2RpcnR5X2xvZ19yaW5nKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNpemUpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ5NDkte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk4NS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDk4NjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9yZXNldF9kaXJ0eV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ5ODcte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTAxMTppbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMi1cdFx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTAzMD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkpO1xudmlydC9rdm0va3ZtX21haW4uYy01MDMxLVxudmlydC9rdm0va3ZtX21haW4uYzo1MDMyOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBfZ2VuZXJpYyhzdHJ1Y3Qga3ZtICprdm0sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUwMzMtXHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA2Ny1cdGNhc2UgS1ZNX0NBUF9ESVJUWV9MT0dfUklOR19BQ1FfUkVMOlxudmlydC9rdm0va3ZtX21haW4uYzo1MDY4Olx0XHRpZiAoIWt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25fZ2VuZXJpYyhrdm0sIGNhcC1cdTAwM2VjYXApKVxudmlydC9rdm0va3ZtX21haW4uYy01MDY5LVx0XHRcdHJldHVybiAtRUlOVkFMO1xudmlydC9rdm0va3ZtX21haW4uYy01MDcwLVxudmlydC9rdm0va3ZtX21haW4uYzo1MDcxOlx0XHRyZXR1cm4ga3ZtX3ZtX2lvY3RsX2VuYWJsZV9kaXJ0eV9sb2dfcmluZyhrdm0sIGNhcC1cdTAwM2VhcmdzWzBdKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA3Mi1cdGNhc2UgS1ZNX0NBUF9ESVJUWV9MT0dfUklOR19XSVRIX0JJVE1BUDoge1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA5NS1cdGRlZmF1bHQ6XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUwOTY6XHRcdHJldHVybiBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChrdm0sIGNhcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUwOTctXHR9XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01MTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGt2bV92bV9zdGF0c19mb3BzID0ge1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTEyNC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTEyNTpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfc3RhdHNfZmQoc3RydWN0IGt2bSAqa3ZtKVxudmlydC9rdm0va3ZtX21haW4uYy01MTI2LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUxNDg9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNTQtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNTU6c3RhdGljIGxvbmcga3ZtX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxudmlydC9rdm0va3ZtX21haW4uYy01MTU2LVx0XHRcdCAgIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MTY1LVx0Y2FzZSBLVk1fQ1JFQVRFX1ZDUFU6XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNjY6XHRcdHIgPSBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoa3ZtLCBhcmcpO1xudmlydC9rdm0va3ZtX21haW4uYy01MTY3LVx0XHRicmVhaztcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNzMtXHRcdFx0Z290byBvdXQ7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNzQ6XHRcdHIgPSBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcF9nZW5lcmljKGt2bSwgXHUwMDI2Y2FwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE3NS1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MjA4LVxudmlydC9rdm0va3ZtX21haW4uYzo1MjA5Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgXHUwMDI2bWVtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTIxMC1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MjE3LVx0XHRcdGdvdG8gb3V0O1xudmlydC9rdm0va3ZtX21haW4uYzo1MjE4Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coa3ZtLCBcdTAwMjZsb2cpO1xudmlydC9rdm0va3ZtX21haW4uYy01MjE5LVx0XHRicmVhaztcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMjctXHRcdFx0Z290byBvdXQ7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUyMjg6XHRcdHIgPSBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKGt2bSwgXHUwMDI2bG9nKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTIyOS1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MjM4LVx0XHRcdGdvdG8gb3V0O1xudmlydC9rdm0va3ZtX21haW4uYzo1MjM5Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX3JlZ2lzdGVyX2NvYWxlc2NlZF9tbWlvKGt2bSwgXHUwMDI2em9uZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyNDAtXHRcdGJyZWFrO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTI0Ny1cdFx0XHRnb3RvIG91dDtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTI0ODpcdFx0ciA9IGt2bV92bV9pb2N0bF91bnJlZ2lzdGVyX2NvYWxlc2NlZF9tbWlvKGt2bSwgXHUwMDI2em9uZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyNDktXHRcdGJyZWFrO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTI4OS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTI5MDpcdFx0ciA9IGt2bV92bV9pb2N0bF9pcnFfbGluZShrdm0sIFx1MDAyNmlycV9ldmVudCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTI5MS1cdFx0XHRcdFx0aW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUyk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MzQzLVxudmlydC9rdm0va3ZtX21haW4uYzo1MzQ0Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlcyhrdm0sIFx1MDAyNmF0dHJzKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM0NS1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MzY2LVx0Y2FzZSBLVk1fQ0hFQ0tfRVhURU5TSU9OOlxudmlydC9rdm0va3ZtX21haW4uYzo1MzY3Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbl9nZW5lcmljKGt2bSwgYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM2OC1cdFx0YnJlYWs7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNjktXHRjYXNlIEtWTV9SRVNFVF9ESVJUWV9SSU5HUzpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM3MDpcdFx0ciA9IGt2bV92bV9pb2N0bF9yZXNldF9kaXJ0eV9wYWdlcyhrdm0pO1xudmlydC9rdm0va3ZtX21haW4uYy01MzcxLVx0XHRicmVhaztcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM3Mi1cdGNhc2UgS1ZNX0dFVF9TVEFUU19GRDpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM3MzpcdFx0ciA9IGt2bV92bV9pb2N0bF9nZXRfc3RhdHNfZmQoa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM3NC1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01NDIwPXN0YXRpYyBsb25nIGt2bV92bV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NDQ3LVxudmlydC9rdm0va3ZtX21haW4uYzo1NDQ4Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZyhrdm0sIFx1MDAyNmxvZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NDktXHRcdGJyZWFrO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ2My1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ2NDpcdFx0ciA9IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKGt2bSwgXHUwMDI2bG9nKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ2NS1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NDY3LVx0ZGVmYXVsdDpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ2ODpcdFx0ciA9IGt2bV92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ2OS1cdH1cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTU0NzQ9c3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3ZtX3ZtX2ZvcHMgPSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NzUtXHQucmVsZWFzZSAgICAgICAgPSBrdm1fdm1fcmVsZWFzZSxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ3NjpcdC51bmxvY2tlZF9pb2N0bCA9IGt2bV92bV9pb2N0bCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3Ny1cdC5sbHNlZWtcdFx0PSBub29wX2xsc2Vlayxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTU1MzA9c3RhdGljIGxvbmcga3ZtX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NDQtXHRjYXNlIEtWTV9DSEVDS19FWFRFTlNJT046XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU1NDU6XHRcdHIgPSBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoTlVMTCwgYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTU0Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzAyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSBga3ZtX3ZtX2lvY3RsYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHJpZ2h0Li4uIHRoYXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IGludGVybmFsIHRvIHRoZSBjb21waWxhdGlvbiB1bml0LiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiAqdGhhdCogaXMgdGhlIGAudW5sb2NrZWRfaW9jdGxgIGhhbmRsZXIgZm9yIGBrdm1fdm1fZm9wc2AhIE9rYXksIHNvIGl0JiMzOTtzICpkZWZpbml0ZWx5KiBhbiBlbnRyeSBwb2ludC4gVGhhdCYjMzk7cyBnb29kLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBJIGNhbiBwcm9iYWJseSB1c2UgYGt2bV92bV9pb2N0bGAgYXMgYSBzdGFydGluZyBwb2ludCwgYW5kIGNvbWJpbmUgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24gSSBoYXZlIG9uIGB2bXhfdmNwdV9mcmVlYC4gTm93Li4uIGhvbGQgb24sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHdoZXJlIGB2bXhfdmNwdV9mcmVlYCBpcyBkZWZpbmVkLiBBaCwgaXQmIzM5O3MgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBBbmQgbm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgKnRoYXQqIHN0YXRpYyB0b28/IEkgbmVlZCB0byBrbm93IGlmIGl0IGNhbiBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdGhlciBmaWxlcy4gVGhhdCBpcyBjcml0aWNhbCB0byBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm14X3ZjcHVfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz03NTA1PWZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTc2NTctXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjc2NTg6dm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNzY1OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODM3CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDM5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIGB2bXhfdmNwdV9mcmVlYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gQnV0LCBJIG5lZWQgdG8gY29uc2lkZXIgYGt2bV92bV9pb2N0bGAgdG9vLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIFdhaXQgYSBtaW51dGUuLi4gYGt2bV92bV9pb2N0bGAgaXRzZWxmIGlzIGFjdHVhbGx5IGEgdmVyeSBnZW5lcmljIGlvY3RsIGhhbmRsZXIuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YC4gQWx0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCBoYW5kbGVzIGEgc3BlY2lmaWMgY2FzZSBhbmQgaXQmIzM5O3MgYSBzaXphYmxlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBhIGJldHRlciBmb2N1cyBwb2ludCB0aGFuIHRoZSBvdmVyYXJjaGluZyBoYW5kbGVyLCBhbmQgaXNuJiMzOTt0IGxpa2VseSBpbmxpbmVkLiBZZXAsIGl0JiMzOTtzIHByZXR0eSBzdWJzdGFudGlhbCwgZGVmaW5pdGVseSBub3QgaW5saW5lZC4KClNvLCBJJiMzOTtsbCBnbyB3aXRoIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFuZCBgdm14X3ZjcHVfZnJlZWAgYXMgbXkgcHJpbWFyeSBzeW1ib2xzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIGNoYW5nZXMgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLCB3aGljaCBpcyBjb21waWxlZCB3aGVuIGBLVk1fSU5URUxgIGlzIGVuYWJsZWQuIFRoZSBvdGhlciBmaWxlLCBgdmlydC9rdm0va3ZtX21haW4uY2AgaXMgY29tcGlsZWQgd2hlbiBgS1ZNYCBpcyBlbmFibGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQ6IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMuCgpUaGUgcmVhc29uaW5nIGhlcmUgbWFrZXMgc2Vuc2U6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IFZDUFUgSURzIGFyZSBtYW5hZ2VkLCBpbnRyb2R1Y2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFyaW5nIHRoZSBQSUQgdGFibGUgdXBvbiBWQ1BVIGRlYWxsb2NhdGlvbi4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZSwgbWFraW5nIGl0IHByaW1lIHRlcnJpdG9yeSBmb3IgZnV6emluZy4KCk15IGNvbmNsdXNpb24/IFRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIHVzZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgIGFzIG15IGZvY3VzIHN5bWJvbHMsIGFuZCBJJiMzOTtsbCBlbmFibGUgdGhlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGwmIzM0OywKICAgICYjMzQ7dm14X3ZjcHVfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBhbmQgVk1YIGNvZGUgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcyB1c2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFycyB0aGUgUElEIHRhYmxlIGVudHJ5IHdoZW4gYSBWQ1BVIGlzIGZyZWVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O3ZteF92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gYW5kIFZNWCBjb2RlIHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMgdXNpbmcgYSBiaXRtYXAgaW4gYHN0cnVjdCBrdm1gIGFuZCBjbGVhcnMgdGhlIFBJRCB0YWJsZSBlbnRyeSB3aGVuIGEgVkNQVSBpcyBmcmVlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjMyOjU3Ljg2Nzc4NDUyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTY0MjIyNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsXCIsXG4gICAgXCJ2bXhfdmNwdV9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gYW5kIFZNWCBjb2RlIHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMgdXNpbmcgYSBiaXRtYXAgaW4gYHN0cnVjdCBrdm1gIGFuZCBjbGVhcnMgdGhlIFBJRCB0YWJsZSBlbnRyeSB3aGVuIGEgVkNQVSBpcyBmcmVlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzI6NTcuODY3NzkyNDMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ4OTUwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOGI5YjI0MDcyZjk5ZWVkMzdiMGU5OTY0OGFjZjZmZjZjZGNjZmZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjMyOjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggY2M3NWZlZWMwNWRhYS4uZjk4YzI2OGI1MTUwYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC03NjY1LDYgKzc2NjUsOSBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRuZXN0ZWRfdm14X2ZyZWVfdmNwdSh2Y3B1KTtcXG4gXFx0ZnJlZV9sb2FkZWRfdm1jcyh2bXgtXFx1MDAzZWxvYWRlZF92bWNzKTtcXG4gXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZteC1cXHUwMDNldmVfaW5mbyk7XFxuK1xcbitcXHRpZiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSlcXG4rXFx0XFx0V1JJVEVfT05DRSh0b19rdm1fdm14KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXBpZF90YWJsZVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXSwgMCk7XFxuIH1cXG4gXFxuIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCBhYjhjZmFlYzgyZDMxLi42Zjg4M2VkODI1ODFkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbkBAIC03OTEsNiArNzkxLDcgQEAgc3RydWN0IGt2bSB7XFxuIFxcdC8qIFRoZSBjdXJyZW50IGFjdGl2ZSBtZW1zbG90IHNldCBmb3IgZWFjaCBhZGRyZXNzIHNwYWNlICovXFxuIFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgX19yY3UgKm1lbXNsb3RzW0tWTV9NQVhfTlJfQUREUkVTU19TUEFDRVNdO1xcbiBcXHRzdHJ1Y3QgeGFycmF5IHZjcHVfYXJyYXk7XFxuK1xcdERFQ0xBUkVfQklUTUFQKHZjcHVfaWRzLCBLVk1fTUFYX1ZDUFVfSURTKTtcXG4gXFx0LypcXG4gXFx0ICogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2ssIGJ1dCBjYW4gYmUgcmVhZCBvdXRzaWRlIGlmIGFuXFxuIFxcdCAqIGluY29ycmVjdCBhbnN3ZXIgaXMgYWNjZXB0YWJsZS5cXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi4xZTM3MTRjNWRhYTcwIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTQxNzMsNiArNDE3MywxMSBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoaWQsIGt2bS1cXHUwMDNldmNwdV9pZHMpKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuIFxcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShrdm0sIGlkKTtcXG4gXFx0aWYgKHIpIHtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbkBAIC00MTgwLDYgKzQxODUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXFxuIFxcdH1cXG4gXFxuIFxcdGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cysrO1xcbitcXHRfX3NldF9iaXQoaWQsIGt2bS1cXHUwMDNldmNwdV9pZHMpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHR2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuQEAgLTQyMTEsNyArNDIxNyw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSB7XFxuK1xcdGlmIChXQVJOX09OX09OQ0Uoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSkge1xcbiBcXHRcXHRyID0gLUVFWElTVDtcXG4gXFx0XFx0Z290byB1bmxvY2tfdmNwdV9kZXN0cm95O1xcbiBcXHR9XFxuQEAgLTQyNjUsNiArNDI3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcXG4gdmNwdV9kZWNyZW1lbnQ6XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cy0tO1xcbitcXHRfX2NsZWFyX2JpdChpZCwga3ZtLVxcdTAwM2V2Y3B1X2lkcyk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4gXFx0cmV0dXJuIHI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzI6NTguMzEzMTk2MTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQxMTg4MDI4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxcIixcbiAgICBcInZteF92Y3B1X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBhbmQgVk1YIGNvZGUgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcyB1c2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFycyB0aGUgUElEIHRhYmxlIGVudHJ5IHdoZW4gYSBWQ1BVIGlzIGZyZWVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOGI5YjI0MDcyZjk5ZWVkMzdiMGU5OTY0OGFjZjZmZjZjZGNjZmZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDI6MzI6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggY2M3NWZlZWMwNWRhYS4uZjk4YzI2OGI1MTUwYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC03NjY1LDYgKzc2NjUsOSBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0bmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7XG4gXHRmcmVlX2xvYWRlZF92bWNzKHZteC1cdTAwM2Vsb2FkZWRfdm1jcyk7XG4gXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdm14LVx1MDAzZXZlX2luZm8pO1xuK1xuK1x0aWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpXG4rXHRcdFdSSVRFX09OQ0UodG9fa3ZtX3ZteCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlcGlkX3RhYmxlW3ZjcHUtXHUwMDNldmNwdV9pZF0sIDApO1xuIH1cbiBcbiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjZmODgzZWQ4MjU4MWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTc5MSw2ICs3OTEsNyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdC8qIFRoZSBjdXJyZW50IGFjdGl2ZSBtZW1zbG90IHNldCBmb3IgZWFjaCBhZGRyZXNzIHNwYWNlICovXG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzIF9fcmN1ICptZW1zbG90c1tLVk1fTUFYX05SX0FERFJFU1NfU1BBQ0VTXTtcbiBcdHN0cnVjdCB4YXJyYXkgdmNwdV9hcnJheTtcbitcdERFQ0xBUkVfQklUTUFQKHZjcHVfaWRzLCBLVk1fTUFYX1ZDUFVfSURTKTtcbiBcdC8qXG4gXHQgKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jaywgYnV0IGNhbiBiZSByZWFkIG91dHNpZGUgaWYgYW5cbiBcdCAqIGluY29ycmVjdCBhbnN3ZXIgaXMgYWNjZXB0YWJsZS5cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNDVlNzg0NDYyZWM2ZS4uMWUzNzE0YzVkYWE3MCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC00MTczLDYgKzQxNzMsMTEgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGlmICh0ZXN0X2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVFWElTVDtcbitcdH1cbitcbiBcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShrdm0sIGlkKTtcbiBcdGlmIChyKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG5AQCAtNDE4MCw2ICs0MTg1LDcgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFx0fVxuIFxuIFx0a3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMrKztcbitcdF9fc2V0X2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXG4gXHR2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5AQCAtNDIxMSw3ICs0MjE3LDcgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSB7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKGt2bV9nZXRfdmNwdV9ieV9pZChrdm0sIGlkKSkpIHtcbiBcdFx0ciA9IC1FRVhJU1Q7XG4gXHRcdGdvdG8gdW5sb2NrX3ZjcHVfZGVzdHJveTtcbiBcdH1cbkBAIC00MjY1LDYgKzQyNzEsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXG4gdmNwdV9kZWNyZW1lbnQ6XG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzLS07XG4rXHRfX2NsZWFyX2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMjo1OC4zMTMxOTc1NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzU5NzE3MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggZm9yIEtWTSwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIEl0J3MgYWRkaW5nIGEgYHZjcHVfaWRzYCBiaXRtYXAgdG8gYHN0cnVjdCBrdm1gLCB3aGljaCBpcyBhIGdvb2Qgd2F5IHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMuIFRoYXQgYWxvbmUgbWFrZXMgbWUgaW50ZXJlc3RlZC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIHRvIGhhbmRsZSB0aGUgYml0IHNldHRpbmcsIG1ha2luZyBzdXJlIHdlIGRvbid0IGFjY2lkZW50YWxseSBjcmVhdGUgZHVwbGljYXRlIFZDUFVzLiBHb29kIOKAkyByZXR1cm5pbmcgYC1FRVhJU1RgIGVhcmxpZXIgaXMgZGVmaW5pdGVseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB3b3J0aCBjb25zaWRlcmluZy4gQW5kIHRoZW4gdGhlcmUncyB0aGUgbW9kaWZpY2F0aW9uIHRvIGB2bXhfdmNwdV9mcmVlYCwgd2hlcmUgaXQgY2xlYXJzIHRoZSBgcGlkX3RhYmxlYCBlbnRyeSBpZiBgdm14X2Nhbl91c2VfaXBpdih2Y3B1KWAuXG5cbkFoLCBidXQgdGhlIGNvZGUgbG9jYXRpb25zLiBJdCB0b3VjaGVzIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGFuZCBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYXJlYSBhbmQgY29tcGxldGVseSByZWFjaGFibGUuIEkgc2VlIHRoYXQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYCBhcmUgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC5cblxuTG9va2luZyBtb3JlIGNsb3NlbHkgYXQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAsIHRoaXMgaXMgYSBjb3JlIEtWTSBpb2N0bCDigJMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgbmVlZHMgbWV0aWN1bG91cyB2ZXJpZmljYXRpb24uIFRoZSBwYXRjaCdzIGludHJvZHVjdGlvbiBvZiB0aGUgYHZjcHVfaWRzYCBiaXRtYXAgdG8gcHJldmVudCBkdXBsaWNhdGUgVkNQVSBJRHMgaXMgYSBwb3NpdGl2ZSBjaGFuZ2UsIGFuZCB0aGUgZWFybHkgZXJyb3IgcmV0dXJuIGlzIGEgbmljZSB0b3VjaC5cblxuTm93LCBmb3IgYHZteF92Y3B1X2ZyZWVgLCB0aGUgYWRkZWQgbGluZSBgaWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpIFdSSVRFX09OQ0UodG9fa3ZtX3ZteCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlcGlkX3RhYmxlW3ZjcHUtXHUwMDNldmNwdV9pZF0sIDApO2AgbG9va3Mgc29saWQuXG5cblllcCwgdGhpcyBsb29rcyBmdW5jdGlvbmFsLCBhbmQgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFuZCBgdm14X3ZjcHVfZnJlZWAuIEZvciBjb25maWd1cmF0aW9uLCBgS1ZNYCBvciBgS1ZNX0lOVEVMYCAoaWYgaXQncyBWTVgpIHdpbGwgYmUgbmVjZXNzYXJ5LiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzdGFydCBwcmVwYXJpbmcgdGhlIGZ1enppbmcgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzowNi42NzI5MTc4OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxMjgwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzowNi43MzIwNTAzMDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk3OTE0Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgbGlrZSBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgaGl0dGluZyBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgYW5kIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgdGhpcyBsaWtlbHkgcG9pbnRzIHRvIGNoYW5nZXMgaW4gdGhlIEludGVsIFZULXggKFZNWCkgaHlwZXJ2aXNvciBzdXBwb3J0IHdpdGhpbiBLVk0sIGFuZCBwb3RlbnRpYWxseSBzb21lIGNvcmUgS1ZNIGluZnJhc3RydWN0dXJlLiBJIHNlZSBgdm14X3ZjcHVfZnJlZWAgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3I6IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgcmVsZWFzZSBvZiB2Q1BVIHJlc291cmNlcyB3aGVuIHJ1bm5pbmcgSW50ZWwgdmlydHVhbGl6YXRpb24uIE9uIHRoZSBvdGhlciBoYW5kLCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AgbWVhbmluZyB0aGlzIHdpbGwgYmUgZGVhbGluZyB3aXRoIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBTbywgbGlrZWx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHJlbGVhc2luZyBhbmQgcmVjcmVhdGluZyB2Q1BVcy5cblxuVGhlIG5leHQgdGhpbmcgSSdkIHdhbnQgdG8gY2hlY2sgaXMgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdsbCB3YW50IHRvIHNlZSBpZiBgS1ZNX0lOVEVMYCBpcyBldmVuIGVuYWJsZWQuIElmIHNvLCBJJ2xsIHJldmlldyBpdHMgZGVwZW5kZW5jaWVzLCBhcyB0aGF0IHdpbGwgcHJvdmlkZSBtb3JlIGNvbnRleHQgYWJvdXQgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBpbXBhY3RlZC4gVGhhdCdsbCBndWlkZSBteSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoxMS40Mjk5NjcwNzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNTUwODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoxMS41MzE1MjI2MDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTI0MjY3OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNX0lOVEVMIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmb3IgYEtWTV9JTlRFTGA/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcywgZmVhdHVyZXMsIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRlcnR3aW5lZCB3aXRoIGl0LiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgYSBzdXBlcmZpY2lhbCBnbGFuY2U7IEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGltcGxpY2F0aW9ucywgdGhlIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBtaWdodCBhcmlzZS4gSXMgdGhpcyBwdXJlbHkgYW4gYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbiwgb3IgYXJlIHRoZXJlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBzcGVjaWZpYyBDUFUgZmVhdHVyZSBmbGFncyB0aGF0ICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBjb25kaXRpb25hbGx5IHJlcXVpcmVkPyBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgb3RoZXIgdmlydHVhbGl6YXRpb24gbW9kdWxlcyBsaWtlIGBLVk1gIG9yIGV2ZW4gY29yZSBzY2hlZHVsaW5nIHN1YnN5c3RlbXMgbWlnaHQgcmVseSBvbiBvciBpbnRlcmFjdCB3aXRoIHRoZSBgS1ZNX0lOVEVMYCBtb2R1bGUgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZnVuY3Rpb25zIHByZWRpY3RhYmx5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbWFrZWZpbGVzLCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgbW9kdWxlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgYWJsZSB0byBhc3Nlc3MgaXQgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoxNS4wNTU3OTMxNzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTY6XFx0Y29uZmlnIEtWTV9JTlRFTFxcbiAgOTc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuICA5OTpcXHRcXHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwncyBWVFxcbiAxMDI6XFx0XFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDEwNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cXG4gMTA2OlxcdFxcbiAxMDc6XFx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbiAxMDg6XFx0ICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4gMTA5OlxcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXFx1MDAyNlxcdTAwMjYgRVhQRVJUXFxuIDExMDpcXHQgICAgICAgIGhlbHBcXG4gMTExOlxcdCAgICAgICAgICBDaGVja3MgdGhhdCBLVk0ncyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxcbiAxMTI6XFx0ICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXFxuIDExMzpcXHQgICAgICAgICAgZXhjZXB0aW9ucyB3aWxsIGJlIHRyYXBwZWQgYnkgdGhlIGh5cGVydmlzb3IgcmF0aGVyIHRoYW4gaW5qZWN0ZWRcXG4gMTE0OlxcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXFxuIDExNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MTUuMDU1OTE4NzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc5NDk1NDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBMYWJ5cmludGgqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGltbWVkaWF0ZWx5IHRoZSB0d28gbWFpbiBvbmVzIHRoYXQganVtcCBvdXQgYXJlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYC4gU2VlbXMgb2J2aW91cyBlbm91Z2ggLSBLVk0gaXMgdGhlIGJhc2UgdmlydHVhbGl6YXRpb24sIGFuZCBgS1ZNX0lOVEVMYCBpcyBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciBJbnRlbCBwcm9jZXNzb3JzLCBsaWtlbHkgZW5hYmxpbmcgaGFyZHdhcmUtYXNzaXN0ZWQgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuIEJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgS1ZNYCBpdHNlbGYuLi4gd2hhdCBkb2VzICppdCogZGVwZW5kIG9uPyBJdCdzIHRoZSBjb3JlLCBzbyB3aGF0IGFyZSB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIHRoYXQgKmVuYWJsZSogYEtWTWA/IFdoYXQgYXJlIHRoZSBwcmVyZXF1aXNpdGUgbW9kdWxlcyBvciBzZXR0aW5ncz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBkZXBlbmRlbmN5IGNoYWluIGJlZm9yZSBJIGNhbiByZWFsbHkgZ3Jhc3AgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IEkgY2FuJ3QganVzdCBhc3N1bWUgYEtWTWAgaXMgYSBzdGFuZGFsb25lIGVudGl0eS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDE1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoyMC44NTA4NzU4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTI6XFx0Y29uZmlnIEtWTVxcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXFxuICA1NzpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxcbiAgNTg6XFx0XFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXFxuICA1OTpcXHRcXHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXFxuICA2MjpcXHRcXHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNjU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIEtWTV9XRVJST1JcXG4gIDcwOlxcdFxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4gIDcxOlxcdFxcdCMgRGlzYWxsb3cgS1ZNJ3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MjAuODUwOTk0MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDAzNjIzNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgLiBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGAvZGV2L2t2bWAgaW9jdGxzLCBJJ20gdGhpbmtpbmcsIFwiWXVwLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmchXCIgSXQncyBhIGdyZWF0IHBvdGVudGlhbCB0YXJnZXQuXG5cbkkndmUgZ290IHRoZSBgV29ydGhGdXp6aW5nPXRydWVgIGZsYWcgc2V0IGluIG15IG1pbmQuIFRoZSBtYWluIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFuZCBgdm14X3ZjcHVfZnJlZWAuIEp1c3QgdG8gYmUgc2FmZSwgSSdsbCBjb25maXJtIHRoYXQgdGhvc2UgYXJlIGluZGVlZCB0aGUgY29ycmVjdCBzeW1ib2wgbmFtZXMg4oCTIHllcywgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYCBhcmUgY29uZmlybWVkLlxuXG5IYW5nIG9uIGEgc2VjLi4uIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZy4gSXMgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYSBzdGF0aWMgZnVuY3Rpb24/IEl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nIHRoYXQgc2luY2Ugc3RhdGljIGZ1bmN0aW9ucyBjYW4gYmUgbW9yZSBjb21wbGV4IHRvIHRhcmdldC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gYnkgbG9va2luZyBhdCBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgY291bGQgaW1wYWN0IG15IGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoyOC4yNTQ2MjA1MDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjI2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9Mzk2MD12b2lkIGt2bV92Y3B1X29uX3NwaW4oc3RydWN0IGt2bV92Y3B1ICptZSwgYm9vbCB5aWVsZF90b19rZXJuZWxfbW9kZSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzk3MC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjM5NzE6XFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpLiAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzk3Mi1cXHRzbXBfcm1iKCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQxMzE9c3RhdGljIHZvaWQga3ZtX2NyZWF0ZV92Y3B1X2RlYnVnZnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00MTUxLSAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDE1MjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXFxudmlydC9rdm0va3ZtX21haW4uYy00MTUzLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDM4Nj1zdGF0aWMgaW50IGt2bV93YWl0X2Zvcl92Y3B1X29ubGluZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzOTgtXFx0ICogQWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgdkNQVSdzIG11dGV4IHRvIHdhaXQgZm9yIHZDUFUgY3JlYXRpb24gdG9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzOTk6XFx0ICogY29tcGxldGUgKGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpIGhvbGRzIHRoZSBtdXRleCB1bnRpbCB0aGUgdkNQVVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQwMC1cXHQgKiBpcyBmdWxseSBvbmxpbmUpLlxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01MTU1PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE2NS1cXHRjYXNlIEtWTV9DUkVBVEVfVkNQVTpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNjY6XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShrdm0sIGFyZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MTY3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoyOC4zMzMyNTM5OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNjIyNTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBLVk0gVkNQVSBDcmVhdGlvbiBhbmQgU3ltYm9sIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGUgc3R5bGUgZ3VpZGUgZW1waGFzaXplcyAqcHJlZmVycmluZyogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhhdCdzIGZvciBzeW1ib2wgdmlzaWJpbGl0eSwgbW9zdGx5LCB0byBlbnN1cmUgdGhlIGRlYnVnZ2luZyB0b29scyBwaWNrIHVwIHRoZSBmdW5jdGlvbiBjYWxscy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXM6IGlzIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGlubGluZWQ/IEl0J3MgY2FsbGVkIGZyb20gYGt2bV92bV9pb2N0bGAsIGFuZCBmcm9tIG1lbW9yeSwgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgaXMgYSByZWxhdGl2ZWx5IHNpemFibGUgZnVuY3Rpb24uIEl0ICpzaG91bGRuJ3QqIGJlIGlubGluZWQgYXV0b21hdGljYWxseS4gQnV0IEkgc2hvdWxkIGNoZWNrLiBGb3IgZ29vZCBtZWFzdXJlLCBJIGNvdWxkIHByb2JhYmx5IGFkZCBga3ZtX3ZtX2lvY3RsYCB0byB0aGUgbGlzdCB0b28sIGJ1dCB3YWl0LiBJcyBga3ZtX3ZtX2lvY3RsYCBhbHNvIHN0YXRpYz8gTGV0IG1lIGRvdWJsZS1jaGVjay4gWXVwLiBPa2F5LCBnb29kLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gY2hlY2sgYm90aCBmdW5jdGlvbiBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzozMy41NDk0ODE5NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzYxNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92bV9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MTQxNT1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VubG9ja19hbGxfdmNwdXMpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xNDE4LSAqIEFsbG9jYXRpb24gc2l6ZSBpcyB0d2ljZSBhcyBsYXJnZSBhcyB0aGUgYWN0dWFsIGRpcnR5IGJpdG1hcCBzaXplLlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTQxOTogKiBTZWUga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coKSB3aHkgdGhpcyBpcyBuZWVkZWQuXFxudmlydC9rdm0va3ZtX21haW4uYy0xNDIwLSAqL1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yMTM4PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2ludGVybmFsX21lbXNsb3QpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEzOS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxNDA6c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjE0MS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTIyMjE9c3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjI5My0vKipcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIyOTQ6ICoga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2cgLSBnZXQgYW5kIGNsZWFyIHRoZSBsb2cgb2YgZGlydHkgcGFnZXMgaW4gYSBzbG90XFxudmlydC9rdm0va3ZtX21haW4uYy0yMjk1LSAqIEBrdm06IGt2bSBpbnN0YW5jZVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMzExLSAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMxMjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMTMtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjMzMT1zdGF0aWMgaW50IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0MDYtXFxudmlydC9rdm0va3ZtX21haW4uYzoyNDA3OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDA4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2cpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI1Mzc9c3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjU5OC19XFxudmlydC9rdm0va3ZtX21haW4uYzoyNTk5OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXFxudmlydC9rdm0va3ZtX21haW4uYy0yNjAwLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMgKmF0dHJzKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zOTYwPXZvaWQga3ZtX3ZjcHVfb25fc3BpbihzdHJ1Y3Qga3ZtX3ZjcHUgKm1lLCBib29sIHlpZWxkX3RvX2tlcm5lbF9tb2RlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zOTcwLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mzk3MTpcXHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KCkuICovXFxudmlydC9rdm0va3ZtX21haW4uYy0zOTcyLVxcdHNtcF9ybWIoKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDEzMT1zdGF0aWMgdm9pZCBrdm1fY3JlYXRlX3ZjcHVfZGVidWdmcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQxNTEtICovXFxudmlydC9rdm0va3ZtX21haW4uYzo0MTUyOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQxNTMte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00Mzg2PXN0YXRpYyBpbnQga3ZtX3dhaXRfZm9yX3ZjcHVfb25saW5lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM5OC1cXHQgKiBBY3F1aXJlIGFuZCByZWxlYXNlIHRoZSB2Q1BVJ3MgbXV0ZXggdG8gd2FpdCBmb3IgdkNQVSBjcmVhdGlvbiB0b1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM5OTpcXHQgKiBjb21wbGV0ZSAoa3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KCkgaG9sZHMgdGhlIG11dGV4IHVudGlsIHRoZSB2Q1BVXFxudmlydC9rdm0va3ZtX21haW4uYy00NDAwLVxcdCAqIGlzIGZ1bGx5IG9ubGluZSkuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ4MTI9c3RhdGljIGludCBrdm1faW9jdGxfY3JlYXRlX2RldmljZShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ4NzAtXFxudmlydC9rdm0va3ZtX21haW4uYzo0ODcxOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbl9nZW5lcmljKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBhcmcpXFxudmlydC9rdm0va3ZtX21haW4uYy00ODcyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk0NC1cXHR9XFxudmlydC9rdm0va3ZtX21haW4uYzo0OTQ1OlxcdHJldHVybiBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKGt2bSwgYXJnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ5NDYtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk0Ny1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ5NDg6c3RhdGljIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2RpcnR5X2xvZ19yaW5nKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNpemUpXFxudmlydC9rdm0va3ZtX21haW4uYy00OTQ5LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk4NS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ5ODY6c3RhdGljIGludCBrdm1fdm1faW9jdGxfcmVzZXRfZGlydHlfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk4Ny17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUwMTAtXFxudmlydC9rdm0va3ZtX21haW4uYzo1MDExOmludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMi1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01MDMwPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MDMxLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTAzMjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwX2dlbmVyaWMoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAzMy1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA2Ny1cXHRjYXNlIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTDpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUwNjg6XFx0XFx0aWYgKCFrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoa3ZtLCBjYXAtXFx1MDAzZWNhcCkpXFxudmlydC9rdm0va3ZtX21haW4uYy01MDY5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA3MC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUwNzE6XFx0XFx0cmV0dXJuIGt2bV92bV9pb2N0bF9lbmFibGVfZGlydHlfbG9nX3Jpbmcoa3ZtLCBjYXAtXFx1MDAzZWFyZ3NbMF0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA3Mi1cXHRjYXNlIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfV0lUSF9CSVRNQVA6IHtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA5NS1cXHRkZWZhdWx0OlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTA5NjpcXHRcXHRyZXR1cm4ga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoa3ZtLCBjYXApO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA5Ny1cXHR9XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUxMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3ZtX3ZtX3N0YXRzX2ZvcHMgPSB7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxMjQtXFxudmlydC9rdm0va3ZtX21haW4uYzo1MTI1OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9zdGF0c19mZChzdHJ1Y3Qga3ZtICprdm0pXFxudmlydC9rdm0va3ZtX21haW4uYy01MTI2LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NTE0OD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01MTU0LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTE1NTpzdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxudmlydC9rdm0va3ZtX21haW4uYy01MTU2LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjUtXFx0Y2FzZSBLVk1fQ1JFQVRFX1ZDUFU6XFxudmlydC9rdm0va3ZtX21haW4uYzo1MTY2OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoa3ZtLCBhcmcpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE2Ny1cXHRcXHRicmVhaztcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE3My1cXHRcXHRcXHRnb3RvIG91dDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNzQ6XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwX2dlbmVyaWMoa3ZtLCBcXHUwMDI2Y2FwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNzUtXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMDgtXFxudmlydC9rdm0va3ZtX21haW4uYzo1MjA5OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBcXHUwMDI2bWVtKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMTAtXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMTctXFx0XFx0XFx0Z290byBvdXQ7XFxudmlydC9rdm0va3ZtX21haW4uYzo1MjE4OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZyhrdm0sIFxcdTAwMjZsb2cpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTIxOS1cXHRcXHRicmVhaztcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTIyNy1cXHRcXHRcXHRnb3RvIG91dDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUyMjg6XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2coa3ZtLCBcXHUwMDI2bG9nKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMjktXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMzgtXFx0XFx0XFx0Z290byBvdXQ7XFxudmlydC9rdm0va3ZtX21haW4uYzo1MjM5OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfcmVnaXN0ZXJfY29hbGVzY2VkX21taW8oa3ZtLCBcXHUwMDI2em9uZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MjQwLVxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01MjQ3LVxcdFxcdFxcdGdvdG8gb3V0O1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTI0ODpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX3VucmVnaXN0ZXJfY29hbGVzY2VkX21taW8oa3ZtLCBcXHUwMDI2em9uZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MjQ5LVxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01Mjg5LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTI5MDpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX2lycV9saW5lKGt2bSwgXFx1MDAyNmlycV9ldmVudCxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyOTEtXFx0XFx0XFx0XFx0XFx0aW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUyk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNDMtXFxudmlydC9rdm0va3ZtX21haW4uYzo1MzQ0OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKGt2bSwgXFx1MDAyNmF0dHJzKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNDUtXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNjYtXFx0Y2FzZSBLVk1fQ0hFQ0tfRVhURU5TSU9OOlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM2NzpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbl9nZW5lcmljKGt2bSwgYXJnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNjgtXFx0XFx0YnJlYWs7XFxudmlydC9rdm0va3ZtX21haW4uYy01MzY5LVxcdGNhc2UgS1ZNX1JFU0VUX0RJUlRZX1JJTkdTOlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM3MDpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX3Jlc2V0X2RpcnR5X3BhZ2VzKGt2bSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MzcxLVxcdFxcdGJyZWFrO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM3Mi1cXHRjYXNlIEtWTV9HRVRfU1RBVFNfRkQ6XFxudmlydC9rdm0va3ZtX21haW4uYzo1MzczOlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfZ2V0X3N0YXRzX2ZkKGt2bSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01Mzc0LVxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01NDIwPXN0YXRpYyBsb25nIGt2bV92bV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NDctXFxudmlydC9rdm0va3ZtX21haW4uYzo1NDQ4OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKGt2bSwgXFx1MDAyNmxvZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy01NDQ5LVxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NDYzLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ2NDpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coa3ZtLCBcXHUwMDI2bG9nKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NjUtXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NjctXFx0ZGVmYXVsdDpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0Njg6XFx0XFx0ciA9IGt2bV92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NjktXFx0fVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01NDc0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGt2bV92bV9mb3BzID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3NS1cXHQucmVsZWFzZSAgICAgICAgPSBrdm1fdm1fcmVsZWFzZSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0NzY6XFx0LnVubG9ja2VkX2lvY3RsID0ga3ZtX3ZtX2lvY3RsLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3Ny1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NTUzMD1zdGF0aWMgbG9uZyBrdm1fZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NTQ0LVxcdGNhc2UgS1ZNX0NIRUNLX0VYVEVOU0lPTjpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU1NDU6XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25fZ2VuZXJpYyhOVUxMLCBhcmcpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTU0Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MzMuNjI0ODY2NDM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzg3MjU5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSBga3ZtX3ZtX2lvY3RsYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHJpZ2h0Li4uIHRoYXQgbWVhbnMgaXQncyBsaWtlbHkgaW50ZXJuYWwgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCB3YWl0IGEgbWludXRlLi4uICp0aGF0KiBpcyB0aGUgYC51bmxvY2tlZF9pb2N0bGAgaGFuZGxlciBmb3IgYGt2bV92bV9mb3BzYCEgT2theSwgc28gaXQncyAqZGVmaW5pdGVseSogYW4gZW50cnkgcG9pbnQuIFRoYXQncyBnb29kLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5JZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gSSBjYW4gcHJvYmFibHkgdXNlIGBrdm1fdm1faW9jdGxgIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCBjb21iaW5lIGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIEkgaGF2ZSBvbiBgdm14X3ZjcHVfZnJlZWAuIE5vdy4uLiBob2xkIG9uLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB3aGVyZSBgdm14X3ZjcHVfZnJlZWAgaXMgZGVmaW5lZC4gQWgsIGl0J3MgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBBbmQgbm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgKnRoYXQqIHN0YXRpYyB0b28/IEkgbmVlZCB0byBrbm93IGlmIGl0IGNhbiBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdGhlciBmaWxlcy4gVGhhdCBpcyBjcml0aWNhbCB0byBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MzguNDAzNTk1MDY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1NTYxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X3ZjcHVfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvdm14LmM9NzUwNT1mYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTc2NTctXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3NjU4OnZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03NjU5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MzguNTEzMTU1NjMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNzgzMTQwMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIGB2bXhfdmNwdV9mcmVlYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gQnV0LCBJIG5lZWQgdG8gY29uc2lkZXIgYGt2bV92bV9pb2N0bGAgdG9vLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gV2FpdCBhIG1pbnV0ZS4uLiBga3ZtX3ZtX2lvY3RsYCBpdHNlbGYgaXMgYWN0dWFsbHkgYSB2ZXJ5IGdlbmVyaWMgaW9jdGwgaGFuZGxlci4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBkZWFscyB3aXRoIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgLiBBbHRob3VnaCBpdCdzIHN0YXRpYywgaXQgaGFuZGxlcyBhIHNwZWNpZmljIGNhc2UgYW5kIGl0J3MgYSBzaXphYmxlIGZ1bmN0aW9uLCBzbyBpdCdzIGEgYmV0dGVyIGZvY3VzIHBvaW50IHRoYW4gdGhlIG92ZXJhcmNoaW5nIGhhbmRsZXIsIGFuZCBpc24ndCBsaWtlbHkgaW5saW5lZC4gWWVwLCBpdCdzIHByZXR0eSBzdWJzdGFudGlhbCwgZGVmaW5pdGVseSBub3QgaW5saW5lZC5cblxuU28sIEknbGwgZ28gd2l0aCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgIGFzIG15IHByaW1hcnkgc3ltYm9scy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgY29kZSBjaGFuZ2VzIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgS1ZNX0lOVEVMYCBpcyBlbmFibGVkLiBUaGUgb3RoZXIgZmlsZSwgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGlzIGNvbXBpbGVkIHdoZW4gYEtWTWAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgYXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgbWFrZXMgc2Vuc2U6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IFZDUFUgSURzIGFyZSBtYW5hZ2VkLCBpbnRyb2R1Y2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFyaW5nIHRoZSBQSUQgdGFibGUgdXBvbiBWQ1BVIGRlYWxsb2NhdGlvbi4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZSwgbWFraW5nIGl0IHByaW1lIHRlcnJpdG9yeSBmb3IgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbj8gVGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSdsbCB1c2UgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYCBhcyBteSBmb2N1cyBzeW1ib2xzLCBhbmQgSSdsbCBlbmFibGUgdGhlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MzcsIk91dHB1dFRva2VucyI6MTA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjM0OjAyLjI5NjI5OTc3OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTY5NjA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxcIixcbiAgICBcInZteF92Y3B1X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBhbmQgVk1YIGNvZGUgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcyB1c2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFycyB0aGUgUElEIHRhYmxlIGVudHJ5IHdoZW4gYSBWQ1BVIGlzIGZyZWVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsXCIsXG4gICAgXCJ2bXhfdmNwdV9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gYW5kIFZNWCBjb2RlIHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMgdXNpbmcgYSBiaXRtYXAgaW4gYHN0cnVjdCBrdm1gIGFuZCBjbGVhcnMgdGhlIFBJRCB0YWJsZSBlbnRyeSB3aGVuIGEgVkNQVSBpcyBmcmVlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2r2mq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 02:19:50 +0000 UTC FinishedAt: 2026-07-31 02:34:04 +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": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "b2cf287e-35fb-4084-9c78-7e48d958bacd" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vm_ioctl", "vmx_vcpu_free" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGwmIzM0OywKICAgICYjMzQ7dm14X3ZjcHVfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBhbmQgVk1YIGNvZGUgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcyB1c2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFycyB0aGUgUElEIHRhYmxlIGVudHJ5IHdoZW4gYSBWQ1BVIGlzIGZyZWVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjhiOWIyNDA3MmY5OWVlZDM3YjBlOTk2NDhhY2Y2ZmY2Y2RjY2ZmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjMyOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCBjYzc1ZmVlYzA1ZGFhLi5mOThjMjY4YjUxNTBjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTc2NjUsNiAmIzQzOzc2NjUsOSBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0bmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7XG4gXHRmcmVlX2xvYWRlZF92bWNzKHZteC1cdTAwM2Vsb2FkZWRfdm1jcyk7XG4gXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdm14LVx1MDAzZXZlX2luZm8pO1xuJiM0MztcbiYjNDM7XHRpZiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSlcbiYjNDM7XHRcdFdSSVRFX09OQ0UodG9fa3ZtX3ZteCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlcGlkX3RhYmxlW3ZjcHUtXHUwMDNldmNwdV9pZF0sIDApO1xuIH1cbiBcbiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjZmODgzZWQ4MjU4MWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTc5MSw2ICYjNDM7NzkxLDcgQEAgc3RydWN0IGt2bSB7XG4gXHQvKiBUaGUgY3VycmVudCBhY3RpdmUgbWVtc2xvdCBzZXQgZm9yIGVhY2ggYWRkcmVzcyBzcGFjZSAqL1xuIFx0c3RydWN0IGt2bV9tZW1zbG90cyBfX3JjdSAqbWVtc2xvdHNbS1ZNX01BWF9OUl9BRERSRVNTX1NQQUNFU107XG4gXHRzdHJ1Y3QgeGFycmF5IHZjcHVfYXJyYXk7XG4mIzQzO1x0REVDTEFSRV9CSVRNQVAodmNwdV9pZHMsIEtWTV9NQVhfVkNQVV9JRFMpO1xuIFx0LypcbiBcdCAqIFByb3RlY3RlZCBieSBzbG90c19sb2NrLCBidXQgY2FuIGJlIHJlYWQgb3V0c2lkZSBpZiBhblxuIFx0ICogaW5jb3JyZWN0IGFuc3dlciBpcyBhY2NlcHRhYmxlLlxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi4xZTM3MTRjNWRhYTcwIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQxNzMsNiAmIzQzOzQxNzMsMTEgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoaWQsIGt2bS1cdTAwM2V2Y3B1X2lkcykpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKGt2bSwgaWQpO1xuIFx0aWYgKHIpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbkBAIC00MTgwLDYgJiM0Mzs0MTg1LDcgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFx0fVxuIFxuIFx0a3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMmIzQzOyYjNDM7O1xuJiM0MztcdF9fc2V0X2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXG4gXHR2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5AQCAtNDIxMSw3ICYjNDM7NDIxNyw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKGt2bV9nZXRfdmNwdV9ieV9pZChrdm0sIGlkKSkge1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0Uoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSkge1xuIFx0XHRyID0gLUVFWElTVDtcbiBcdFx0Z290byB1bmxvY2tfdmNwdV9kZXN0cm95O1xuIFx0fVxuQEAgLTQyNjUsNiAmIzQzOzQyNzEsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXG4gdmNwdV9kZWNyZW1lbnQ6XG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzLS07XG4mIzQzO1x0X19jbGVhcl9iaXQoaWQsIGt2bS1cdTAwM2V2Y3B1X2lkcyk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O3ZteF92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gYW5kIFZNWCBjb2RlIHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMgdXNpbmcgYSBiaXRtYXAgaW4gYHN0cnVjdCBrdm1gIGFuZCBjbGVhcnMgdGhlIFBJRCB0YWJsZSBlbnRyeSB3aGVuIGEgVkNQVSBpcyBmcmVlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4YjliMjQwNzJmOTllZWQzN2IwZTk5NjQ4YWNmNmZmNmNkY2NmZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwMjozMjo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IGNjNzVmZWVjMDVkYWEuLmY5OGMyNjhiNTE1MGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtNzY2NSw2ICYjNDM7NzY2NSw5IEBAIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJbmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7CiAJZnJlZV9sb2FkZWRfdm1jcyh2bXgtJmd0O2xvYWRlZF92bWNzKTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdm14LSZndDt2ZV9pbmZvKTsKJiM0MzsKJiM0MzsJaWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpCiYjNDM7CQlXUklURV9PTkNFKHRvX2t2bV92bXgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7cGlkX3RhYmxlW3ZjcHUtJmd0O3ZjcHVfaWRdLCAwKTsKIH0KIAogaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uNmY4ODNlZDgyNTgxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtNzkxLDYgJiM0Mzs3OTEsNyBAQCBzdHJ1Y3Qga3ZtIHsKIAkvKiBUaGUgY3VycmVudCBhY3RpdmUgbWVtc2xvdCBzZXQgZm9yIGVhY2ggYWRkcmVzcyBzcGFjZSAqLwogCXN0cnVjdCBrdm1fbWVtc2xvdHMgX19yY3UgKm1lbXNsb3RzW0tWTV9NQVhfTlJfQUREUkVTU19TUEFDRVNdOwogCXN0cnVjdCB4YXJyYXkgdmNwdV9hcnJheTsKJiM0MzsJREVDTEFSRV9CSVRNQVAodmNwdV9pZHMsIEtWTV9NQVhfVkNQVV9JRFMpOwogCS8qCiAJICogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2ssIGJ1dCBjYW4gYmUgcmVhZCBvdXRzaWRlIGlmIGFuCiAJICogaW5jb3JyZWN0IGFuc3dlciBpcyBhY2NlcHRhYmxlLgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNDVlNzg0NDYyZWM2ZS4uMWUzNzE0YzVkYWE3MCAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00MTczLDYgJiM0Mzs0MTczLDExIEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmICh0ZXN0X2JpdChpZCwga3ZtLSZndDt2Y3B1X2lkcykpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwogCXIgPSBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShrdm0sIGlkKTsKIAlpZiAocikgewogCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2xvY2spOwpAQCAtNDE4MCw2ICYjNDM7NDE4NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZCkKIAl9CiAKIAlrdm0tJmd0O2NyZWF0ZWRfdmNwdXMmIzQzOyYjNDM7OwomIzQzOwlfX3NldF9iaXQoaWQsIGt2bS0mZ3Q7dmNwdV9pZHMpOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAKIAl2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7CkBAIC00MjExLDcgJiM0Mzs0MjE3LDcgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKQogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAKLQlpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSB7CiYjNDM7CWlmIChXQVJOX09OX09OQ0Uoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSkgewogCQlyID0gLUVFWElTVDsKIAkJZ290byB1bmxvY2tfdmNwdV9kZXN0cm95OwogCX0KQEAgLTQyNjUsNiAmIzQzOzQyNzEsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpCiB2Y3B1X2RlY3JlbWVudDoKIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKIAlrdm0tJmd0O2NyZWF0ZWRfdmNwdXMtLTsKJiM0MzsJX19jbGVhcl9iaXQoaWQsIGt2bS0mZ3Q7dmNwdV9pZHMpOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiAJcmV0dXJuIHI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBLVk0sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBJdCYjMzk7cyBhZGRpbmcgYSBgdmNwdV9pZHNgIGJpdG1hcCB0byBgc3RydWN0IGt2bWAsIHdoaWNoIGlzIGEgZ29vZCB3YXkgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcy4gVGhhdCBhbG9uZSBtYWtlcyBtZSBpbnRlcmVzdGVkLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIHRvIGhhbmRsZSB0aGUgYml0IHNldHRpbmcsIG1ha2luZyBzdXJlIHdlIGRvbiYjMzk7dCBhY2NpZGVudGFsbHkgY3JlYXRlIGR1cGxpY2F0ZSBWQ1BVcy4gR29vZCDigJMgcmV0dXJuaW5nIGAtRUVYSVNUYCBlYXJsaWVyIGlzIGRlZmluaXRlbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd29ydGggY29uc2lkZXJpbmcuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBtb2RpZmljYXRpb24gdG8gYHZteF92Y3B1X2ZyZWVgLCB3aGVyZSBpdCBjbGVhcnMgdGhlIGBwaWRfdGFibGVgIGVudHJ5IGlmIGB2bXhfY2FuX3VzZV9pcGl2KHZjcHUpYC4KCkFoLCBidXQgdGhlIGNvZGUgbG9jYXRpb25zLiBJdCB0b3VjaGVzIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGFuZCBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYXJlYSBhbmQgY29tcGxldGVseSByZWFjaGFibGUuIEkgc2VlIHRoYXQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYCBhcmUgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4KCkxvb2tpbmcgbW9yZSBjbG9zZWx5IGF0IGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgLCB0aGlzIGlzIGEgY29yZSBLVk0gaW9jdGwg4oCTIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IG5lZWRzIG1ldGljdWxvdXMgdmVyaWZpY2F0aW9uLiBUaGUgcGF0Y2gmIzM5O3MgaW50cm9kdWN0aW9uIG9mIHRoZSBgdmNwdV9pZHNgIGJpdG1hcCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBWQ1BVIElEcyBpcyBhIHBvc2l0aXZlIGNoYW5nZSwgYW5kIHRoZSBlYXJseSBlcnJvciByZXR1cm4gaXMgYSBuaWNlIHRvdWNoLgoKTm93LCBmb3IgYHZteF92Y3B1X2ZyZWVgLCB0aGUgYWRkZWQgbGluZSBgaWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpIFdSSVRFX09OQ0UodG9fa3ZtX3ZteCh2Y3B1LSZndDtrdm0pLSZndDtwaWRfdGFibGVbdmNwdS0mZ3Q7dmNwdV9pZF0sIDApO2AgbG9va3Mgc29saWQuCgpZZXAsIHRoaXMgbG9va3MgZnVuY3Rpb25hbCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYC4gRm9yIGNvbmZpZ3VyYXRpb24sIGBLVk1gIG9yIGBLVk1fSU5URUxgIChpZiBpdCYjMzk7cyBWTVgpIHdpbGwgYmUgbmVjZXNzYXJ5LiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzdGFydCBwcmVwYXJpbmcgdGhlIGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoaW5raW5nIGxpa2UgYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyOgoKKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgaGl0dGluZyBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgYW5kIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgbGlrZWx5IHBvaW50cyB0byBjaGFuZ2VzIGluIHRoZSBJbnRlbCBWVC14IChWTVgpIGh5cGVydmlzb3Igc3VwcG9ydCB3aXRoaW4gS1ZNLCBhbmQgcG90ZW50aWFsbHkgc29tZSBjb3JlIEtWTSBpbmZyYXN0cnVjdHVyZS4gSSBzZWUgYHZteF92Y3B1X2ZyZWVgIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvcjogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgcmVsZWFzZSBvZiB2Q1BVIHJlc291cmNlcyB3aGVuIHJ1bm5pbmcgSW50ZWwgdmlydHVhbGl6YXRpb24uIE9uIHRoZSBvdGhlciBoYW5kLCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AgbWVhbmluZyB0aGlzIHdpbGwgYmUgZGVhbGluZyB3aXRoIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBTbywgbGlrZWx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHJlbGVhc2luZyBhbmQgcmVjcmVhdGluZyB2Q1BVcy4KClRoZSBuZXh0IHRoaW5nIEkmIzM5O2Qgd2FudCB0byBjaGVjayBpcyB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBpZiBgS1ZNX0lOVEVMYCBpcyBldmVuIGVuYWJsZWQuIElmIHNvLCBJJiMzOTtsbCByZXZpZXcgaXRzIGRlcGVuZGVuY2llcywgYXMgdGhhdCB3aWxsIHByb3ZpZGUgbW9yZSBjb250ZXh0IGFib3V0IHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgaW1wYWN0ZWQuIFRoYXQmIzM5O2xsIGd1aWRlIG15IGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEtWTV9JTlRFTCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGRlcGVuZGVuY3kgY2hhaW4gZm9yIGBLVk1fSU5URUxgPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIG1vZHVsZXMsIGZlYXR1cmVzLCBvciBjb25maWd1cmF0aW9ucyBhcmUgaW50ZXJ0d2luZWQgd2l0aCBpdC4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBhIHN1cGVyZmljaWFsIGdsYW5jZTsgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGltcGxpY2F0aW9ucywgdGhlIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBtaWdodCBhcmlzZS4gSXMgdGhpcyBwdXJlbHkgYW4gYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbiwgb3IgYXJlIHRoZXJlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBzcGVjaWZpYyBDUFUgZmVhdHVyZSBmbGFncyB0aGF0ICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBjb25kaXRpb25hbGx5IHJlcXVpcmVkPyBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgb3RoZXIgdmlydHVhbGl6YXRpb24gbW9kdWxlcyBsaWtlIGBLVk1gIG9yIGV2ZW4gY29yZSBzY2hlZHVsaW5nIHN1YnN5c3RlbXMgbWlnaHQgcmVseSBvbiBvciBpbnRlcmFjdCB3aXRoIHRoZSBgS1ZNX0lOVEVMYCBtb2R1bGUgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZnVuY3Rpb25zIHByZWRpY3RhYmx5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbWFrZWZpbGVzLCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgbW9kdWxlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgYWJsZSB0byBhc3Nlc3MgaXQgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTA1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cbiAxMDY6XHRcbiAxMDc6XHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG4gMTA4Olx0ICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4gMTA5Olx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcdTAwMjZcdTAwMjYgRVhQRVJUXG4gMTEwOlx0ICAgICAgICBoZWxwXG4gMTExOlx0ICAgICAgICAgIENoZWNrcyB0aGF0IEtWTSYjMzk7cyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxuIDExMjpcdCAgICAgICAgICBsZXQgZ3Vlc3RzIHJlY2VpdmUgYSB2aXJ0dWFsaXphdGlvbiBleGNlcHRpb24uICBWaXJ0dWFsaXphdGlvblxuIDExMzpcdCAgICAgICAgICBleGNlcHRpb25zIHdpbGwgYmUgdHJhcHBlZCBieSB0aGUgaHlwZXJ2aXNvciByYXRoZXIgdGhhbiBpbmplY3RlZFxuIDExNDpcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXG4gMTE1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gTGFieXJpbnRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpbW1lZGlhdGVseSB0aGUgdHdvIG1haW4gb25lcyB0aGF0IGp1bXAgb3V0IGFyZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAuIFNlZW1zIG9idmlvdXMgZW5vdWdoIC0gS1ZNIGlzIHRoZSBiYXNlIHZpcnR1YWxpemF0aW9uLCBhbmQgYEtWTV9JTlRFTGAgaXMgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgSW50ZWwgcHJvY2Vzc29ycywgbGlrZWx5IGVuYWJsaW5nIGhhcmR3YXJlLWFzc2lzdGVkIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLiBCdXQsIGhhbmcgb24gYSBzZWNvbmQuLi4gYEtWTWAgaXRzZWxmLi4uIHdoYXQgZG9lcyAqaXQqIGRlcGVuZCBvbj8gSXQmIzM5O3MgdGhlIGNvcmUsIHNvIHdoYXQgYXJlIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgdGhhdCAqZW5hYmxlKiBgS1ZNYD8gV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZSBtb2R1bGVzIG9yIHNldHRpbmdzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGRlcGVuZGVuY3kgY2hhaW4gYmVmb3JlIEkgY2FuIHJlYWxseSBncmFzcCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgYEtWTWAgaXMgYSBzdGFuZGFsb25lIGVudGl0eS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MjpcdGNvbmZpZyBLVk1cbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmVcbiAgNTc6XHRcdCAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50XG4gIDU4Olx0XHQgIHByb2Nlc3NvciBlcXVpcHBlZCB3aXRoIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFlvdSB3aWxsIGFsc29cbiAgNTk6XHRcdCAgbmVlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb2YgdGhlIHByb2Nlc3NvciBtb2R1bGVzIGJlbG93LlxuICA2MDpcdFxuICA2MTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXG4gIDYyOlx0XHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxuICA2MzpcdFxuICA2NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNjU6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxuICA2NjpcdFxuICA2NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBLVk1fV0VSUk9SXG4gIDcwOlx0XHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuICA3MTpcdFx0IyBEaXNhbGxvdyBLVk0mIzM5O3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4OAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgLiBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGAvZGV2L2t2bWAgaW9jdGxzLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1l1cCwgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nISYjMzQ7IEl0JiMzOTtzIGEgZ3JlYXQgcG90ZW50aWFsIHRhcmdldC4KCkkmIzM5O3ZlIGdvdCB0aGUgYFdvcnRoRnV6emluZz10cnVlYCBmbGFnIHNldCBpbiBteSBtaW5kLiBUaGUgbWFpbiBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgLiBKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCB0aG9zZSBhcmUgaW5kZWVkIHRoZSBjb3JyZWN0IHN5bWJvbCBuYW1lcyDigJMgeWVzLCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgIGFyZSBjb25maXJtZWQuCgpIYW5nIG9uIGEgc2VjLi4uIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZy4gSXMgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYSBzdGF0aWMgZnVuY3Rpb24/IEl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IHNpbmNlIHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIG1vcmUgY29tcGxleCB0byB0YXJnZXQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBieSBsb29raW5nIGF0IGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhpcyBjb3VsZCBpbXBhY3QgbXkgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTM5NjA9dm9pZCBrdm1fdmNwdV9vbl9zcGluKHN0cnVjdCBrdm1fdmNwdSAqbWUsIGJvb2wgeWllbGRfdG9fa2VybmVsX21vZGUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zOTcwLVxudmlydC9rdm0va3ZtX21haW4uYzozOTcxOlx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpLiAqL1xudmlydC9rdm0va3ZtX21haW4uYy0zOTcyLVx0c21wX3JtYigpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDEzMT1zdGF0aWMgdm9pZCBrdm1fY3JlYXRlX3ZjcHVfZGVidWdmcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MTUxLSAqL1xudmlydC9rdm0va3ZtX21haW4uYzo0MTUyOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDE1My17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00Mzg2PXN0YXRpYyBpbnQga3ZtX3dhaXRfZm9yX3ZjcHVfb25saW5lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzOTgtXHQgKiBBY3F1aXJlIGFuZCByZWxlYXNlIHRoZSB2Q1BVJiMzOTtzIG11dGV4IHRvIHdhaXQgZm9yIHZDUFUgY3JlYXRpb24gdG9cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM5OTpcdCAqIGNvbXBsZXRlIChrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoKSBob2xkcyB0aGUgbXV0ZXggdW50aWwgdGhlIHZDUFVcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQwMC1cdCAqIGlzIGZ1bGx5IG9ubGluZSkuXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01MTU1PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjUtXHRjYXNlIEtWTV9DUkVBVEVfVkNQVTpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTE2NjpcdFx0ciA9IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShrdm0sIGFyZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIEtWTSBWQ1BVIENyZWF0aW9uIGFuZCBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGUgc3R5bGUgZ3VpZGUgZW1waGFzaXplcyAqcHJlZmVycmluZyogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhhdCYjMzk7cyBmb3Igc3ltYm9sIHZpc2liaWxpdHksIG1vc3RseSwgdG8gZW5zdXJlIHRoZSBkZWJ1Z2dpbmcgdG9vbHMgcGljayB1cCB0aGUgZnVuY3Rpb24gY2FsbHMuCgpUaGUgcXVlc3Rpb24gdGhlbiBpczogaXMgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgaW5saW5lZD8gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV92bV9pb2N0bGAsIGFuZCBmcm9tIG1lbW9yeSwgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgaXMgYSByZWxhdGl2ZWx5IHNpemFibGUgZnVuY3Rpb24uIEl0ICpzaG91bGRuJiMzOTt0KiBiZSBpbmxpbmVkIGF1dG9tYXRpY2FsbHkuIEJ1dCBJIHNob3VsZCBjaGVjay4gRm9yIGdvb2QgbWVhc3VyZSwgSSBjb3VsZCBwcm9iYWJseSBhZGQgYGt2bV92bV9pb2N0bGAgdG8gdGhlIGxpc3QgdG9vLCBidXQgd2FpdC4gSXMgYGt2bV92bV9pb2N0bGAgYWxzbyBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suIFl1cC4gT2theSwgZ29vZC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIGJvdGggZnVuY3Rpb24gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92bV9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0xNDE1PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdW5sb2NrX2FsbF92Y3B1cyk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xNDE4LSAqIEFsbG9jYXRpb24gc2l6ZSBpcyB0d2ljZSBhcyBsYXJnZSBhcyB0aGUgYWN0dWFsIGRpcnR5IGJpdG1hcCBzaXplLlxudmlydC9rdm0va3ZtX21haW4uYzoxNDE5OiAqIFNlZSBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZygpIHdoeSB0aGlzIGlzIG5lZWRlZC5cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTQyMC0gKi9cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTIxMzg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9zZXRfaW50ZXJuYWxfbWVtc2xvdCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMzktXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxNDA6c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxudmlydC9rdm0va3ZtX21haW4uYy0yMTQxLVx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yMjIxPXN0YXRpYyBpbnQga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMjkzLS8qKlxudmlydC9rdm0va3ZtX21haW4uYzoyMjk0OiAqIGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nIC0gZ2V0IGFuZCBjbGVhciB0aGUgbG9nIG9mIGRpcnR5IHBhZ2VzIGluIGEgc2xvdFxudmlydC9rdm0va3ZtX21haW4uYy0yMjk1LSAqIEBrdm06IGt2bSBpbnN0YW5jZVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMxMS0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMxMjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMxMy1cdFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yMzMxPXN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0MDYtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0MDc6c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjQwOC1cdFx0XHRcdFx0c3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI1Mzc9c3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI1OTgtfVxudmlydC9rdm0va3ZtX21haW4uYzoyNTk5OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2MDAtXHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMgKmF0dHJzKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9Mzk2MD12b2lkIGt2bV92Y3B1X29uX3NwaW4oc3RydWN0IGt2bV92Y3B1ICptZSwgYm9vbCB5aWVsZF90b19rZXJuZWxfbW9kZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM5NzAtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjM5NzE6XHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KCkuICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM5NzItXHRzbXBfcm1iKCk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00MTMxPXN0YXRpYyB2b2lkIGt2bV9jcmVhdGVfdmNwdV9kZWJ1Z2ZzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQxNTEtICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQxNTI6c3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxudmlydC9rdm0va3ZtX21haW4uYy00MTUzLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQzODY9c3RhdGljIGludCBrdm1fd2FpdF9mb3JfdmNwdV9vbmxpbmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM5OC1cdCAqIEFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIHZDUFUmIzM5O3MgbXV0ZXggdG8gd2FpdCBmb3IgdkNQVSBjcmVhdGlvbiB0b1xudmlydC9rdm0va3ZtX21haW4uYzo0Mzk5Olx0ICogY29tcGxldGUgKGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpIGhvbGRzIHRoZSBtdXRleCB1bnRpbCB0aGUgdkNQVVxudmlydC9rdm0va3ZtX21haW4uYy00NDAwLVx0ICogaXMgZnVsbHkgb25saW5lKS5cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ4MTI9c3RhdGljIGludCBrdm1faW9jdGxfY3JlYXRlX2RldmljZShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00ODcwLVxudmlydC9rdm0va3ZtX21haW4uYzo0ODcxOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbl9nZW5lcmljKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBhcmcpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ4NzIte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk0NC1cdH1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDk0NTpcdHJldHVybiBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKGt2bSwgYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk0Ni19XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ5NDctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ5NDg6c3RhdGljIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2RpcnR5X2xvZ19yaW5nKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNpemUpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ5NDkte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk4NS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDk4NjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9yZXNldF9kaXJ0eV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ5ODcte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTAxMTppbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMi1cdFx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTAzMD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2FyZV9hbGxfbWVtc2xvdHNfZW1wdHkpO1xudmlydC9rdm0va3ZtX21haW4uYy01MDMxLVxudmlydC9rdm0va3ZtX21haW4uYzo1MDMyOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBfZ2VuZXJpYyhzdHJ1Y3Qga3ZtICprdm0sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUwMzMtXHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA2Ny1cdGNhc2UgS1ZNX0NBUF9ESVJUWV9MT0dfUklOR19BQ1FfUkVMOlxudmlydC9rdm0va3ZtX21haW4uYzo1MDY4Olx0XHRpZiAoIWt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25fZ2VuZXJpYyhrdm0sIGNhcC1cdTAwM2VjYXApKVxudmlydC9rdm0va3ZtX21haW4uYy01MDY5LVx0XHRcdHJldHVybiAtRUlOVkFMO1xudmlydC9rdm0va3ZtX21haW4uYy01MDcwLVxudmlydC9rdm0va3ZtX21haW4uYzo1MDcxOlx0XHRyZXR1cm4ga3ZtX3ZtX2lvY3RsX2VuYWJsZV9kaXJ0eV9sb2dfcmluZyhrdm0sIGNhcC1cdTAwM2VhcmdzWzBdKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA3Mi1cdGNhc2UgS1ZNX0NBUF9ESVJUWV9MT0dfUklOR19XSVRIX0JJVE1BUDoge1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA5NS1cdGRlZmF1bHQ6XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUwOTY6XHRcdHJldHVybiBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChrdm0sIGNhcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUwOTctXHR9XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01MTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGt2bV92bV9zdGF0c19mb3BzID0ge1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTEyNC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTEyNTpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfc3RhdHNfZmQoc3RydWN0IGt2bSAqa3ZtKVxudmlydC9rdm0va3ZtX21haW4uYy01MTI2LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUxNDg9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNTQtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNTU6c3RhdGljIGxvbmcga3ZtX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxudmlydC9rdm0va3ZtX21haW4uYy01MTU2LVx0XHRcdCAgIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MTY1LVx0Y2FzZSBLVk1fQ1JFQVRFX1ZDUFU6XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNjY6XHRcdHIgPSBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoa3ZtLCBhcmcpO1xudmlydC9rdm0va3ZtX21haW4uYy01MTY3LVx0XHRicmVhaztcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNzMtXHRcdFx0Z290byBvdXQ7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNzQ6XHRcdHIgPSBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcF9nZW5lcmljKGt2bSwgXHUwMDI2Y2FwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE3NS1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MjA4LVxudmlydC9rdm0va3ZtX21haW4uYzo1MjA5Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgXHUwMDI2bWVtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTIxMC1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MjE3LVx0XHRcdGdvdG8gb3V0O1xudmlydC9rdm0va3ZtX21haW4uYzo1MjE4Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coa3ZtLCBcdTAwMjZsb2cpO1xudmlydC9rdm0va3ZtX21haW4uYy01MjE5LVx0XHRicmVhaztcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMjctXHRcdFx0Z290byBvdXQ7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUyMjg6XHRcdHIgPSBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKGt2bSwgXHUwMDI2bG9nKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTIyOS1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MjM4LVx0XHRcdGdvdG8gb3V0O1xudmlydC9rdm0va3ZtX21haW4uYzo1MjM5Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX3JlZ2lzdGVyX2NvYWxlc2NlZF9tbWlvKGt2bSwgXHUwMDI2em9uZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyNDAtXHRcdGJyZWFrO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTI0Ny1cdFx0XHRnb3RvIG91dDtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTI0ODpcdFx0ciA9IGt2bV92bV9pb2N0bF91bnJlZ2lzdGVyX2NvYWxlc2NlZF9tbWlvKGt2bSwgXHUwMDI2em9uZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyNDktXHRcdGJyZWFrO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTI4OS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTI5MDpcdFx0ciA9IGt2bV92bV9pb2N0bF9pcnFfbGluZShrdm0sIFx1MDAyNmlycV9ldmVudCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTI5MS1cdFx0XHRcdFx0aW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUyk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MzQzLVxudmlydC9rdm0va3ZtX21haW4uYzo1MzQ0Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlcyhrdm0sIFx1MDAyNmF0dHJzKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM0NS1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01MzY2LVx0Y2FzZSBLVk1fQ0hFQ0tfRVhURU5TSU9OOlxudmlydC9rdm0va3ZtX21haW4uYzo1MzY3Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbl9nZW5lcmljKGt2bSwgYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM2OC1cdFx0YnJlYWs7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNjktXHRjYXNlIEtWTV9SRVNFVF9ESVJUWV9SSU5HUzpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM3MDpcdFx0ciA9IGt2bV92bV9pb2N0bF9yZXNldF9kaXJ0eV9wYWdlcyhrdm0pO1xudmlydC9rdm0va3ZtX21haW4uYy01MzcxLVx0XHRicmVhaztcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM3Mi1cdGNhc2UgS1ZNX0dFVF9TVEFUU19GRDpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM3MzpcdFx0ciA9IGt2bV92bV9pb2N0bF9nZXRfc3RhdHNfZmQoa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM3NC1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01NDIwPXN0YXRpYyBsb25nIGt2bV92bV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NDQ3LVxudmlydC9rdm0va3ZtX21haW4uYzo1NDQ4Olx0XHRyID0ga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZyhrdm0sIFx1MDAyNmxvZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NDktXHRcdGJyZWFrO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ2My1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ2NDpcdFx0ciA9IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKGt2bSwgXHUwMDI2bG9nKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ2NS1cdFx0YnJlYWs7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NDY3LVx0ZGVmYXVsdDpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ2ODpcdFx0ciA9IGt2bV92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ2OS1cdH1cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTU0NzQ9c3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3ZtX3ZtX2ZvcHMgPSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NzUtXHQucmVsZWFzZSAgICAgICAgPSBrdm1fdm1fcmVsZWFzZSxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ3NjpcdC51bmxvY2tlZF9pb2N0bCA9IGt2bV92bV9pb2N0bCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3Ny1cdC5sbHNlZWtcdFx0PSBub29wX2xsc2Vlayxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTU1MzA9c3RhdGljIGxvbmcga3ZtX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NDQtXHRjYXNlIEtWTV9DSEVDS19FWFRFTlNJT046XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU1NDU6XHRcdHIgPSBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoTlVMTCwgYXJnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTU0Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzAyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSBga3ZtX3ZtX2lvY3RsYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHJpZ2h0Li4uIHRoYXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IGludGVybmFsIHRvIHRoZSBjb21waWxhdGlvbiB1bml0LiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiAqdGhhdCogaXMgdGhlIGAudW5sb2NrZWRfaW9jdGxgIGhhbmRsZXIgZm9yIGBrdm1fdm1fZm9wc2AhIE9rYXksIHNvIGl0JiMzOTtzICpkZWZpbml0ZWx5KiBhbiBlbnRyeSBwb2ludC4gVGhhdCYjMzk7cyBnb29kLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBJIGNhbiBwcm9iYWJseSB1c2UgYGt2bV92bV9pb2N0bGAgYXMgYSBzdGFydGluZyBwb2ludCwgYW5kIGNvbWJpbmUgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24gSSBoYXZlIG9uIGB2bXhfdmNwdV9mcmVlYC4gTm93Li4uIGhvbGQgb24sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHdoZXJlIGB2bXhfdmNwdV9mcmVlYCBpcyBkZWZpbmVkLiBBaCwgaXQmIzM5O3MgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBBbmQgbm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgKnRoYXQqIHN0YXRpYyB0b28/IEkgbmVlZCB0byBrbm93IGlmIGl0IGNhbiBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdGhlciBmaWxlcy4gVGhhdCBpcyBjcml0aWNhbCB0byBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm14X3ZjcHVfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvdm14LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC92bXguYz03NTA1PWZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTc2NTctXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjc2NTg6dm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNzY1OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODM3CgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDM5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIGB2bXhfdmNwdV9mcmVlYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gQnV0LCBJIG5lZWQgdG8gY29uc2lkZXIgYGt2bV92bV9pb2N0bGAgdG9vLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIFdhaXQgYSBtaW51dGUuLi4gYGt2bV92bV9pb2N0bGAgaXRzZWxmIGlzIGFjdHVhbGx5IGEgdmVyeSBnZW5lcmljIGlvY3RsIGhhbmRsZXIuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YC4gQWx0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCBoYW5kbGVzIGEgc3BlY2lmaWMgY2FzZSBhbmQgaXQmIzM5O3MgYSBzaXphYmxlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBhIGJldHRlciBmb2N1cyBwb2ludCB0aGFuIHRoZSBvdmVyYXJjaGluZyBoYW5kbGVyLCBhbmQgaXNuJiMzOTt0IGxpa2VseSBpbmxpbmVkLiBZZXAsIGl0JiMzOTtzIHByZXR0eSBzdWJzdGFudGlhbCwgZGVmaW5pdGVseSBub3QgaW5saW5lZC4KClNvLCBJJiMzOTtsbCBnbyB3aXRoIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFuZCBgdm14X3ZjcHVfZnJlZWAgYXMgbXkgcHJpbWFyeSBzeW1ib2xzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIGNoYW5nZXMgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLCB3aGljaCBpcyBjb21waWxlZCB3aGVuIGBLVk1fSU5URUxgIGlzIGVuYWJsZWQuIFRoZSBvdGhlciBmaWxlLCBgdmlydC9rdm0va3ZtX21haW4uY2AgaXMgY29tcGlsZWQgd2hlbiBgS1ZNYCBpcyBlbmFibGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQ6IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMuCgpUaGUgcmVhc29uaW5nIGhlcmUgbWFrZXMgc2Vuc2U6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IFZDUFUgSURzIGFyZSBtYW5hZ2VkLCBpbnRyb2R1Y2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFyaW5nIHRoZSBQSUQgdGFibGUgdXBvbiBWQ1BVIGRlYWxsb2NhdGlvbi4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZSwgbWFraW5nIGl0IHByaW1lIHRlcnJpdG9yeSBmb3IgZnV6emluZy4KCk15IGNvbmNsdXNpb24/IFRoaXMgcGF0Y2ggaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIHVzZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgIGFzIG15IGZvY3VzIHN5bWJvbHMsIGFuZCBJJiMzOTtsbCBlbmFibGUgdGhlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGwmIzM0OywKICAgICYjMzQ7dm14X3ZjcHVfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBhbmQgVk1YIGNvZGUgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcyB1c2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFycyB0aGUgUElEIHRhYmxlIGVudHJ5IHdoZW4gYSBWQ1BVIGlzIGZyZWVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O3ZteF92Y3B1X2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gYW5kIFZNWCBjb2RlIHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMgdXNpbmcgYSBiaXRtYXAgaW4gYHN0cnVjdCBrdm1gIGFuZCBjbGVhcnMgdGhlIFBJRCB0YWJsZSBlbnRyeSB3aGVuIGEgVkNQVSBpcyBmcmVlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjMyOjU3Ljg2Nzc4NDUyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTY0MjIyNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsXCIsXG4gICAgXCJ2bXhfdmNwdV9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gYW5kIFZNWCBjb2RlIHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMgdXNpbmcgYSBiaXRtYXAgaW4gYHN0cnVjdCBrdm1gIGFuZCBjbGVhcnMgdGhlIFBJRCB0YWJsZSBlbnRyeSB3aGVuIGEgVkNQVSBpcyBmcmVlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzI6NTcuODY3NzkyNDMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ4OTUwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOGI5YjI0MDcyZjk5ZWVkMzdiMGU5OTY0OGFjZjZmZjZjZGNjZmZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjMyOjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggY2M3NWZlZWMwNWRhYS4uZjk4YzI2OGI1MTUwYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC03NjY1LDYgKzc2NjUsOSBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRuZXN0ZWRfdm14X2ZyZWVfdmNwdSh2Y3B1KTtcXG4gXFx0ZnJlZV9sb2FkZWRfdm1jcyh2bXgtXFx1MDAzZWxvYWRlZF92bWNzKTtcXG4gXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZteC1cXHUwMDNldmVfaW5mbyk7XFxuK1xcbitcXHRpZiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSlcXG4rXFx0XFx0V1JJVEVfT05DRSh0b19rdm1fdm14KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXBpZF90YWJsZVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXSwgMCk7XFxuIH1cXG4gXFxuIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCBhYjhjZmFlYzgyZDMxLi42Zjg4M2VkODI1ODFkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbkBAIC03OTEsNiArNzkxLDcgQEAgc3RydWN0IGt2bSB7XFxuIFxcdC8qIFRoZSBjdXJyZW50IGFjdGl2ZSBtZW1zbG90IHNldCBmb3IgZWFjaCBhZGRyZXNzIHNwYWNlICovXFxuIFxcdHN0cnVjdCBrdm1fbWVtc2xvdHMgX19yY3UgKm1lbXNsb3RzW0tWTV9NQVhfTlJfQUREUkVTU19TUEFDRVNdO1xcbiBcXHRzdHJ1Y3QgeGFycmF5IHZjcHVfYXJyYXk7XFxuK1xcdERFQ0xBUkVfQklUTUFQKHZjcHVfaWRzLCBLVk1fTUFYX1ZDUFVfSURTKTtcXG4gXFx0LypcXG4gXFx0ICogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2ssIGJ1dCBjYW4gYmUgcmVhZCBvdXRzaWRlIGlmIGFuXFxuIFxcdCAqIGluY29ycmVjdCBhbnN3ZXIgaXMgYWNjZXB0YWJsZS5cXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi4xZTM3MTRjNWRhYTcwIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTQxNzMsNiArNDE3MywxMSBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoaWQsIGt2bS1cXHUwMDNldmNwdV9pZHMpKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuIFxcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShrdm0sIGlkKTtcXG4gXFx0aWYgKHIpIHtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbkBAIC00MTgwLDYgKzQxODUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXFxuIFxcdH1cXG4gXFxuIFxcdGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cysrO1xcbitcXHRfX3NldF9iaXQoaWQsIGt2bS1cXHUwMDNldmNwdV9pZHMpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHR2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuQEAgLTQyMTEsNyArNDIxNyw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSB7XFxuK1xcdGlmIChXQVJOX09OX09OQ0Uoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSkge1xcbiBcXHRcXHRyID0gLUVFWElTVDtcXG4gXFx0XFx0Z290byB1bmxvY2tfdmNwdV9kZXN0cm95O1xcbiBcXHR9XFxuQEAgLTQyNjUsNiArNDI3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcXG4gdmNwdV9kZWNyZW1lbnQ6XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdGt2bS1cXHUwMDNlY3JlYXRlZF92Y3B1cy0tO1xcbitcXHRfX2NsZWFyX2JpdChpZCwga3ZtLVxcdTAwM2V2Y3B1X2lkcyk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4gXFx0cmV0dXJuIHI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzI6NTguMzEzMTk2MTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQxMTg4MDI4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxcIixcbiAgICBcInZteF92Y3B1X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBhbmQgVk1YIGNvZGUgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcyB1c2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFycyB0aGUgUElEIHRhYmxlIGVudHJ5IHdoZW4gYSBWQ1BVIGlzIGZyZWVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOGI5YjI0MDcyZjk5ZWVkMzdiMGU5OTY0OGFjZjZmZjZjZGNjZmZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDI6MzI6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggY2M3NWZlZWMwNWRhYS4uZjk4YzI2OGI1MTUwYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC03NjY1LDYgKzc2NjUsOSBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0bmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7XG4gXHRmcmVlX2xvYWRlZF92bWNzKHZteC1cdTAwM2Vsb2FkZWRfdm1jcyk7XG4gXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdm14LVx1MDAzZXZlX2luZm8pO1xuK1xuK1x0aWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpXG4rXHRcdFdSSVRFX09OQ0UodG9fa3ZtX3ZteCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlcGlkX3RhYmxlW3ZjcHUtXHUwMDNldmNwdV9pZF0sIDApO1xuIH1cbiBcbiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjZmODgzZWQ4MjU4MWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTc5MSw2ICs3OTEsNyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdC8qIFRoZSBjdXJyZW50IGFjdGl2ZSBtZW1zbG90IHNldCBmb3IgZWFjaCBhZGRyZXNzIHNwYWNlICovXG4gXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzIF9fcmN1ICptZW1zbG90c1tLVk1fTUFYX05SX0FERFJFU1NfU1BBQ0VTXTtcbiBcdHN0cnVjdCB4YXJyYXkgdmNwdV9hcnJheTtcbitcdERFQ0xBUkVfQklUTUFQKHZjcHVfaWRzLCBLVk1fTUFYX1ZDUFVfSURTKTtcbiBcdC8qXG4gXHQgKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jaywgYnV0IGNhbiBiZSByZWFkIG91dHNpZGUgaWYgYW5cbiBcdCAqIGluY29ycmVjdCBhbnN3ZXIgaXMgYWNjZXB0YWJsZS5cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNDVlNzg0NDYyZWM2ZS4uMWUzNzE0YzVkYWE3MCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC00MTczLDYgKzQxNzMsMTEgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGlmICh0ZXN0X2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVFWElTVDtcbitcdH1cbitcbiBcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShrdm0sIGlkKTtcbiBcdGlmIChyKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG5AQCAtNDE4MCw2ICs0MTg1LDcgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFx0fVxuIFxuIFx0a3ZtLVx1MDAzZWNyZWF0ZWRfdmNwdXMrKztcbitcdF9fc2V0X2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXG4gXHR2Y3B1ID0ga21lbV9jYWNoZV96YWxsb2Moa3ZtX3ZjcHVfY2FjaGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5AQCAtNDIxMSw3ICs0MjE3LDcgQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKGt2bSwgaWQpKSB7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKGt2bV9nZXRfdmNwdV9ieV9pZChrdm0sIGlkKSkpIHtcbiBcdFx0ciA9IC1FRVhJU1Q7XG4gXHRcdGdvdG8gdW5sb2NrX3ZjcHVfZGVzdHJveTtcbiBcdH1cbkBAIC00MjY1LDYgKzQyNzEsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXG4gdmNwdV9kZWNyZW1lbnQ6XG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbiBcdGt2bS1cdTAwM2VjcmVhdGVkX3ZjcHVzLS07XG4rXHRfX2NsZWFyX2JpdChpZCwga3ZtLVx1MDAzZXZjcHVfaWRzKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMjo1OC4zMTMxOTc1NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzU5NzE3MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggZm9yIEtWTSwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIEl0J3MgYWRkaW5nIGEgYHZjcHVfaWRzYCBiaXRtYXAgdG8gYHN0cnVjdCBrdm1gLCB3aGljaCBpcyBhIGdvb2Qgd2F5IHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMuIFRoYXQgYWxvbmUgbWFrZXMgbWUgaW50ZXJlc3RlZC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIHRvIGhhbmRsZSB0aGUgYml0IHNldHRpbmcsIG1ha2luZyBzdXJlIHdlIGRvbid0IGFjY2lkZW50YWxseSBjcmVhdGUgZHVwbGljYXRlIFZDUFVzLiBHb29kIOKAkyByZXR1cm5pbmcgYC1FRVhJU1RgIGVhcmxpZXIgaXMgZGVmaW5pdGVseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB3b3J0aCBjb25zaWRlcmluZy4gQW5kIHRoZW4gdGhlcmUncyB0aGUgbW9kaWZpY2F0aW9uIHRvIGB2bXhfdmNwdV9mcmVlYCwgd2hlcmUgaXQgY2xlYXJzIHRoZSBgcGlkX3RhYmxlYCBlbnRyeSBpZiBgdm14X2Nhbl91c2VfaXBpdih2Y3B1KWAuXG5cbkFoLCBidXQgdGhlIGNvZGUgbG9jYXRpb25zLiBJdCB0b3VjaGVzIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGFuZCBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYXJlYSBhbmQgY29tcGxldGVseSByZWFjaGFibGUuIEkgc2VlIHRoYXQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYCBhcmUgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC5cblxuTG9va2luZyBtb3JlIGNsb3NlbHkgYXQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAsIHRoaXMgaXMgYSBjb3JlIEtWTSBpb2N0bCDigJMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgbmVlZHMgbWV0aWN1bG91cyB2ZXJpZmljYXRpb24uIFRoZSBwYXRjaCdzIGludHJvZHVjdGlvbiBvZiB0aGUgYHZjcHVfaWRzYCBiaXRtYXAgdG8gcHJldmVudCBkdXBsaWNhdGUgVkNQVSBJRHMgaXMgYSBwb3NpdGl2ZSBjaGFuZ2UsIGFuZCB0aGUgZWFybHkgZXJyb3IgcmV0dXJuIGlzIGEgbmljZSB0b3VjaC5cblxuTm93LCBmb3IgYHZteF92Y3B1X2ZyZWVgLCB0aGUgYWRkZWQgbGluZSBgaWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpIFdSSVRFX09OQ0UodG9fa3ZtX3ZteCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlcGlkX3RhYmxlW3ZjcHUtXHUwMDNldmNwdV9pZF0sIDApO2AgbG9va3Mgc29saWQuXG5cblllcCwgdGhpcyBsb29rcyBmdW5jdGlvbmFsLCBhbmQgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFuZCBgdm14X3ZjcHVfZnJlZWAuIEZvciBjb25maWd1cmF0aW9uLCBgS1ZNYCBvciBgS1ZNX0lOVEVMYCAoaWYgaXQncyBWTVgpIHdpbGwgYmUgbmVjZXNzYXJ5LiBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzdGFydCBwcmVwYXJpbmcgdGhlIGZ1enppbmcgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzowNi42NzI5MTc4OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxMjgwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzowNi43MzIwNTAzMDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk3OTE0Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgbGlrZSBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgaGl0dGluZyBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AgYW5kIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZywgdGhpcyBsaWtlbHkgcG9pbnRzIHRvIGNoYW5nZXMgaW4gdGhlIEludGVsIFZULXggKFZNWCkgaHlwZXJ2aXNvciBzdXBwb3J0IHdpdGhpbiBLVk0sIGFuZCBwb3RlbnRpYWxseSBzb21lIGNvcmUgS1ZNIGluZnJhc3RydWN0dXJlLiBJIHNlZSBgdm14X3ZjcHVfZnJlZWAgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC92bXguY2AuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3I6IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgcmVsZWFzZSBvZiB2Q1BVIHJlc291cmNlcyB3aGVuIHJ1bm5pbmcgSW50ZWwgdmlydHVhbGl6YXRpb24uIE9uIHRoZSBvdGhlciBoYW5kLCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AgbWVhbmluZyB0aGlzIHdpbGwgYmUgZGVhbGluZyB3aXRoIHRoZSBjcmVhdGlvbiBwcm9jZXNzLiBTbywgbGlrZWx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHJlbGVhc2luZyBhbmQgcmVjcmVhdGluZyB2Q1BVcy5cblxuVGhlIG5leHQgdGhpbmcgSSdkIHdhbnQgdG8gY2hlY2sgaXMgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdsbCB3YW50IHRvIHNlZSBpZiBgS1ZNX0lOVEVMYCBpcyBldmVuIGVuYWJsZWQuIElmIHNvLCBJJ2xsIHJldmlldyBpdHMgZGVwZW5kZW5jaWVzLCBhcyB0aGF0IHdpbGwgcHJvdmlkZSBtb3JlIGNvbnRleHQgYWJvdXQgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBpbXBhY3RlZC4gVGhhdCdsbCBndWlkZSBteSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoxMS40Mjk5NjcwNzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNTUwODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoxMS41MzE1MjI2MDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTI0MjY3OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNX0lOVEVMIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmb3IgYEtWTV9JTlRFTGA/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgbW9kdWxlcywgZmVhdHVyZXMsIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnRlcnR3aW5lZCB3aXRoIGl0LiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgYSBzdXBlcmZpY2lhbCBnbGFuY2U7IEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGltcGxpY2F0aW9ucywgdGhlIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBtaWdodCBhcmlzZS4gSXMgdGhpcyBwdXJlbHkgYW4gYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbiwgb3IgYXJlIHRoZXJlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBzcGVjaWZpYyBDUFUgZmVhdHVyZSBmbGFncyB0aGF0ICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBjb25kaXRpb25hbGx5IHJlcXVpcmVkPyBNb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgb3RoZXIgdmlydHVhbGl6YXRpb24gbW9kdWxlcyBsaWtlIGBLVk1gIG9yIGV2ZW4gY29yZSBzY2hlZHVsaW5nIHN1YnN5c3RlbXMgbWlnaHQgcmVseSBvbiBvciBpbnRlcmFjdCB3aXRoIHRoZSBgS1ZNX0lOVEVMYCBtb2R1bGUgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZnVuY3Rpb25zIHByZWRpY3RhYmx5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbWFrZWZpbGVzLCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgbW9kdWxlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgYWJsZSB0byBhc3Nlc3MgaXQgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoxNS4wNTU3OTMxNzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTY6XFx0Y29uZmlnIEtWTV9JTlRFTFxcbiAgOTc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuICA5OTpcXHRcXHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwncyBWVFxcbiAxMDI6XFx0XFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDEwNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cXG4gMTA2OlxcdFxcbiAxMDc6XFx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbiAxMDg6XFx0ICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4gMTA5OlxcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXFx1MDAyNlxcdTAwMjYgRVhQRVJUXFxuIDExMDpcXHQgICAgICAgIGhlbHBcXG4gMTExOlxcdCAgICAgICAgICBDaGVja3MgdGhhdCBLVk0ncyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxcbiAxMTI6XFx0ICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXFxuIDExMzpcXHQgICAgICAgICAgZXhjZXB0aW9ucyB3aWxsIGJlIHRyYXBwZWQgYnkgdGhlIGh5cGVydmlzb3IgcmF0aGVyIHRoYW4gaW5qZWN0ZWRcXG4gMTE0OlxcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXFxuIDExNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MTUuMDU1OTE4NzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc5NDk1NDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbiBMYWJ5cmludGgqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGltbWVkaWF0ZWx5IHRoZSB0d28gbWFpbiBvbmVzIHRoYXQganVtcCBvdXQgYXJlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYC4gU2VlbXMgb2J2aW91cyBlbm91Z2ggLSBLVk0gaXMgdGhlIGJhc2UgdmlydHVhbGl6YXRpb24sIGFuZCBgS1ZNX0lOVEVMYCBpcyBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciBJbnRlbCBwcm9jZXNzb3JzLCBsaWtlbHkgZW5hYmxpbmcgaGFyZHdhcmUtYXNzaXN0ZWQgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMuIEJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgS1ZNYCBpdHNlbGYuLi4gd2hhdCBkb2VzICppdCogZGVwZW5kIG9uPyBJdCdzIHRoZSBjb3JlLCBzbyB3aGF0IGFyZSB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIHRoYXQgKmVuYWJsZSogYEtWTWA/IFdoYXQgYXJlIHRoZSBwcmVyZXF1aXNpdGUgbW9kdWxlcyBvciBzZXR0aW5ncz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBkZXBlbmRlbmN5IGNoYWluIGJlZm9yZSBJIGNhbiByZWFsbHkgZ3Jhc3AgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IEkgY2FuJ3QganVzdCBhc3N1bWUgYEtWTWAgaXMgYSBzdGFuZGFsb25lIGVudGl0eS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDE1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoyMC44NTA4NzU4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTI6XFx0Y29uZmlnIEtWTVxcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXFxuICA1NzpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxcbiAgNTg6XFx0XFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXFxuICA1OTpcXHRcXHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXFxuICA2MjpcXHRcXHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNjU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIEtWTV9XRVJST1JcXG4gIDcwOlxcdFxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4gIDcxOlxcdFxcdCMgRGlzYWxsb3cgS1ZNJ3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MjAuODUwOTk0MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDAzNjIzNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyBpbiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgLiBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGAvZGV2L2t2bWAgaW9jdGxzLCBJJ20gdGhpbmtpbmcsIFwiWXVwLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmchXCIgSXQncyBhIGdyZWF0IHBvdGVudGlhbCB0YXJnZXQuXG5cbkkndmUgZ290IHRoZSBgV29ydGhGdXp6aW5nPXRydWVgIGZsYWcgc2V0IGluIG15IG1pbmQuIFRoZSBtYWluIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFuZCBgdm14X3ZjcHVfZnJlZWAuIEp1c3QgdG8gYmUgc2FmZSwgSSdsbCBjb25maXJtIHRoYXQgdGhvc2UgYXJlIGluZGVlZCB0aGUgY29ycmVjdCBzeW1ib2wgbmFtZXMg4oCTIHllcywgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYCBhcmUgY29uZmlybWVkLlxuXG5IYW5nIG9uIGEgc2VjLi4uIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZy4gSXMgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYSBzdGF0aWMgZnVuY3Rpb24/IEl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nIHRoYXQgc2luY2Ugc3RhdGljIGZ1bmN0aW9ucyBjYW4gYmUgbW9yZSBjb21wbGV4IHRvIHRhcmdldC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gYnkgbG9va2luZyBhdCBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgY291bGQgaW1wYWN0IG15IGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoyOC4yNTQ2MjA1MDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjI2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9Mzk2MD12b2lkIGt2bV92Y3B1X29uX3NwaW4oc3RydWN0IGt2bV92Y3B1ICptZSwgYm9vbCB5aWVsZF90b19rZXJuZWxfbW9kZSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzk3MC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjM5NzE6XFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpLiAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzk3Mi1cXHRzbXBfcm1iKCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQxMzE9c3RhdGljIHZvaWQga3ZtX2NyZWF0ZV92Y3B1X2RlYnVnZnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00MTUxLSAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDE1MjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXFxudmlydC9rdm0va3ZtX21haW4uYy00MTUzLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDM4Nj1zdGF0aWMgaW50IGt2bV93YWl0X2Zvcl92Y3B1X29ubGluZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzOTgtXFx0ICogQWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgdkNQVSdzIG11dGV4IHRvIHdhaXQgZm9yIHZDUFUgY3JlYXRpb24gdG9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzOTk6XFx0ICogY29tcGxldGUgKGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpIGhvbGRzIHRoZSBtdXRleCB1bnRpbCB0aGUgdkNQVVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQwMC1cXHQgKiBpcyBmdWxseSBvbmxpbmUpLlxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01MTU1PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE2NS1cXHRjYXNlIEtWTV9DUkVBVEVfVkNQVTpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNjY6XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShrdm0sIGFyZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MTY3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzoyOC4zMzMyNTM5OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNjIyNTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBLVk0gVkNQVSBDcmVhdGlvbiBhbmQgU3ltYm9sIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGUgc3R5bGUgZ3VpZGUgZW1waGFzaXplcyAqcHJlZmVycmluZyogbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhhdCdzIGZvciBzeW1ib2wgdmlzaWJpbGl0eSwgbW9zdGx5LCB0byBlbnN1cmUgdGhlIGRlYnVnZ2luZyB0b29scyBwaWNrIHVwIHRoZSBmdW5jdGlvbiBjYWxscy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXM6IGlzIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGlubGluZWQ/IEl0J3MgY2FsbGVkIGZyb20gYGt2bV92bV9pb2N0bGAsIGFuZCBmcm9tIG1lbW9yeSwgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgaXMgYSByZWxhdGl2ZWx5IHNpemFibGUgZnVuY3Rpb24uIEl0ICpzaG91bGRuJ3QqIGJlIGlubGluZWQgYXV0b21hdGljYWxseS4gQnV0IEkgc2hvdWxkIGNoZWNrLiBGb3IgZ29vZCBtZWFzdXJlLCBJIGNvdWxkIHByb2JhYmx5IGFkZCBga3ZtX3ZtX2lvY3RsYCB0byB0aGUgbGlzdCB0b28sIGJ1dCB3YWl0LiBJcyBga3ZtX3ZtX2lvY3RsYCBhbHNvIHN0YXRpYz8gTGV0IG1lIGRvdWJsZS1jaGVjay4gWXVwLiBPa2F5LCBnb29kLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gY2hlY2sgYm90aCBmdW5jdGlvbiBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjozMzozMy41NDk0ODE5NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzYxNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92bV9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MTQxNT1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VubG9ja19hbGxfdmNwdXMpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xNDE4LSAqIEFsbG9jYXRpb24gc2l6ZSBpcyB0d2ljZSBhcyBsYXJnZSBhcyB0aGUgYWN0dWFsIGRpcnR5IGJpdG1hcCBzaXplLlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTQxOTogKiBTZWUga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coKSB3aHkgdGhpcyBpcyBuZWVkZWQuXFxudmlydC9rdm0va3ZtX21haW4uYy0xNDIwLSAqL1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yMTM4PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2V0X2ludGVybmFsX21lbXNsb3QpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEzOS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxNDA6c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjE0MS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yICptZW0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTIyMjE9c3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjI5My0vKipcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIyOTQ6ICoga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2cgLSBnZXQgYW5kIGNsZWFyIHRoZSBsb2cgb2YgZGlydHkgcGFnZXMgaW4gYSBzbG90XFxudmlydC9rdm0va3ZtX21haW4uYy0yMjk1LSAqIEBrdm06IGt2bSBpbnN0YW5jZVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMzExLSAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMxMjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMTMtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjMzMT1zdGF0aWMgaW50IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0MDYtXFxudmlydC9rdm0va3ZtX21haW4uYzoyNDA3OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDA4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2cpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI1Mzc9c3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjU5OC19XFxudmlydC9rdm0va3ZtX21haW4uYzoyNTk5OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXFxudmlydC9rdm0va3ZtX21haW4uYy0yNjAwLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMgKmF0dHJzKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zOTYwPXZvaWQga3ZtX3ZjcHVfb25fc3BpbihzdHJ1Y3Qga3ZtX3ZjcHUgKm1lLCBib29sIHlpZWxkX3RvX2tlcm5lbF9tb2RlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zOTcwLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mzk3MTpcXHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KCkuICovXFxudmlydC9rdm0va3ZtX21haW4uYy0zOTcyLVxcdHNtcF9ybWIoKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDEzMT1zdGF0aWMgdm9pZCBrdm1fY3JlYXRlX3ZjcHVfZGVidWdmcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQxNTEtICovXFxudmlydC9rdm0va3ZtX21haW4uYzo0MTUyOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQxNTMte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00Mzg2PXN0YXRpYyBpbnQga3ZtX3dhaXRfZm9yX3ZjcHVfb25saW5lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM5OC1cXHQgKiBBY3F1aXJlIGFuZCByZWxlYXNlIHRoZSB2Q1BVJ3MgbXV0ZXggdG8gd2FpdCBmb3IgdkNQVSBjcmVhdGlvbiB0b1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM5OTpcXHQgKiBjb21wbGV0ZSAoa3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KCkgaG9sZHMgdGhlIG11dGV4IHVudGlsIHRoZSB2Q1BVXFxudmlydC9rdm0va3ZtX21haW4uYy00NDAwLVxcdCAqIGlzIGZ1bGx5IG9ubGluZSkuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ4MTI9c3RhdGljIGludCBrdm1faW9jdGxfY3JlYXRlX2RldmljZShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ4NzAtXFxudmlydC9rdm0va3ZtX21haW4uYzo0ODcxOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbl9nZW5lcmljKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBhcmcpXFxudmlydC9rdm0va3ZtX21haW4uYy00ODcyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk0NC1cXHR9XFxudmlydC9rdm0va3ZtX21haW4uYzo0OTQ1OlxcdHJldHVybiBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKGt2bSwgYXJnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ5NDYtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk0Ny1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ5NDg6c3RhdGljIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2RpcnR5X2xvZ19yaW5nKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNpemUpXFxudmlydC9rdm0va3ZtX21haW4uYy00OTQ5LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk4NS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ5ODY6c3RhdGljIGludCBrdm1fdm1faW9jdGxfcmVzZXRfZGlydHlfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDk4Ny17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUwMTAtXFxudmlydC9rdm0va3ZtX21haW4uYzo1MDExOmludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMi1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01MDMwPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fYXJlX2FsbF9tZW1zbG90c19lbXB0eSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MDMxLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTAzMjpzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwX2dlbmVyaWMoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAzMy1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA2Ny1cXHRjYXNlIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfQUNRX1JFTDpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUwNjg6XFx0XFx0aWYgKCFrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoa3ZtLCBjYXAtXFx1MDAzZWNhcCkpXFxudmlydC9rdm0va3ZtX21haW4uYy01MDY5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA3MC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUwNzE6XFx0XFx0cmV0dXJuIGt2bV92bV9pb2N0bF9lbmFibGVfZGlydHlfbG9nX3Jpbmcoa3ZtLCBjYXAtXFx1MDAzZWFyZ3NbMF0pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA3Mi1cXHRjYXNlIEtWTV9DQVBfRElSVFlfTE9HX1JJTkdfV0lUSF9CSVRNQVA6IHtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA5NS1cXHRkZWZhdWx0OlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTA5NjpcXHRcXHRyZXR1cm4ga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoa3ZtLCBjYXApO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTA5Ny1cXHR9XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUxMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3ZtX3ZtX3N0YXRzX2ZvcHMgPSB7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxMjQtXFxudmlydC9rdm0va3ZtX21haW4uYzo1MTI1OnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9zdGF0c19mZChzdHJ1Y3Qga3ZtICprdm0pXFxudmlydC9rdm0va3ZtX21haW4uYy01MTI2LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NTE0OD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01MTU0LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTE1NTpzdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxudmlydC9rdm0va3ZtX21haW4uYy01MTU2LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjUtXFx0Y2FzZSBLVk1fQ1JFQVRFX1ZDUFU6XFxudmlydC9rdm0va3ZtX21haW4uYzo1MTY2OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoa3ZtLCBhcmcpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE2Ny1cXHRcXHRicmVhaztcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE3My1cXHRcXHRcXHRnb3RvIG91dDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUxNzQ6XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwX2dlbmVyaWMoa3ZtLCBcXHUwMDI2Y2FwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNzUtXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMDgtXFxudmlydC9rdm0va3ZtX21haW4uYzo1MjA5OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBcXHUwMDI2bWVtKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMTAtXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMTctXFx0XFx0XFx0Z290byBvdXQ7XFxudmlydC9rdm0va3ZtX21haW4uYzo1MjE4OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZyhrdm0sIFxcdTAwMjZsb2cpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTIxOS1cXHRcXHRicmVhaztcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTIyNy1cXHRcXHRcXHRnb3RvIG91dDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUyMjg6XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2coa3ZtLCBcXHUwMDI2bG9nKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMjktXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyMzgtXFx0XFx0XFx0Z290byBvdXQ7XFxudmlydC9rdm0va3ZtX21haW4uYzo1MjM5OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfcmVnaXN0ZXJfY29hbGVzY2VkX21taW8oa3ZtLCBcXHUwMDI2em9uZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MjQwLVxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01MjQ3LVxcdFxcdFxcdGdvdG8gb3V0O1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTI0ODpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX3VucmVnaXN0ZXJfY29hbGVzY2VkX21taW8oa3ZtLCBcXHUwMDI2em9uZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MjQ5LVxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01Mjg5LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTI5MDpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX2lycV9saW5lKGt2bSwgXFx1MDAyNmlycV9ldmVudCxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUyOTEtXFx0XFx0XFx0XFx0XFx0aW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUyk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNDMtXFxudmlydC9rdm0va3ZtX21haW4uYzo1MzQ0OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKGt2bSwgXFx1MDAyNmF0dHJzKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNDUtXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNjYtXFx0Y2FzZSBLVk1fQ0hFQ0tfRVhURU5TSU9OOlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM2NzpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbl9nZW5lcmljKGt2bSwgYXJnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUzNjgtXFx0XFx0YnJlYWs7XFxudmlydC9rdm0va3ZtX21haW4uYy01MzY5LVxcdGNhc2UgS1ZNX1JFU0VUX0RJUlRZX1JJTkdTOlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM3MDpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX3Jlc2V0X2RpcnR5X3BhZ2VzKGt2bSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MzcxLVxcdFxcdGJyZWFrO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM3Mi1cXHRjYXNlIEtWTV9HRVRfU1RBVFNfRkQ6XFxudmlydC9rdm0va3ZtX21haW4uYzo1MzczOlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfZ2V0X3N0YXRzX2ZkKGt2bSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01Mzc0LVxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01NDIwPXN0YXRpYyBsb25nIGt2bV92bV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NDctXFxudmlydC9rdm0va3ZtX21haW4uYzo1NDQ4OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKGt2bSwgXFx1MDAyNmxvZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy01NDQ5LVxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NDYzLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQ2NDpcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coa3ZtLCBcXHUwMDI2bG9nKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NjUtXFx0XFx0YnJlYWs7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NjctXFx0ZGVmYXVsdDpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0Njg6XFx0XFx0ciA9IGt2bV92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0NjktXFx0fVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01NDc0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGt2bV92bV9mb3BzID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3NS1cXHQucmVsZWFzZSAgICAgICAgPSBrdm1fdm1fcmVsZWFzZSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0NzY6XFx0LnVubG9ja2VkX2lvY3RsID0ga3ZtX3ZtX2lvY3RsLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQ3Ny1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NTUzMD1zdGF0aWMgbG9uZyBrdm1fZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NTQ0LVxcdGNhc2UgS1ZNX0NIRUNLX0VYVEVOU0lPTjpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU1NDU6XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25fZ2VuZXJpYyhOVUxMLCBhcmcpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTU0Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MzMuNjI0ODY2NDM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzg3MjU5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSBga3ZtX3ZtX2lvY3RsYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHJpZ2h0Li4uIHRoYXQgbWVhbnMgaXQncyBsaWtlbHkgaW50ZXJuYWwgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCB3YWl0IGEgbWludXRlLi4uICp0aGF0KiBpcyB0aGUgYC51bmxvY2tlZF9pb2N0bGAgaGFuZGxlciBmb3IgYGt2bV92bV9mb3BzYCEgT2theSwgc28gaXQncyAqZGVmaW5pdGVseSogYW4gZW50cnkgcG9pbnQuIFRoYXQncyBnb29kLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5JZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gSSBjYW4gcHJvYmFibHkgdXNlIGBrdm1fdm1faW9jdGxgIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCBjb21iaW5lIGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIEkgaGF2ZSBvbiBgdm14X3ZjcHVfZnJlZWAuIE5vdy4uLiBob2xkIG9uLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB3aGVyZSBgdm14X3ZjcHVfZnJlZWAgaXMgZGVmaW5lZC4gQWgsIGl0J3MgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBBbmQgbm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgKnRoYXQqIHN0YXRpYyB0b28/IEkgbmVlZCB0byBrbm93IGlmIGl0IGNhbiBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdGhlciBmaWxlcy4gVGhhdCBpcyBjcml0aWNhbCB0byBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MzguNDAzNTk1MDY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1NTYxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X3ZjcHVfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3ZteC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvdm14LmM9NzUwNT1mYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTc2NTctXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3NjU4OnZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03NjU5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6MzM6MzguNTEzMTU1NjMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNzgzMTQwMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIGB2bXhfdmNwdV9mcmVlYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldC4gQnV0LCBJIG5lZWQgdG8gY29uc2lkZXIgYGt2bV92bV9pb2N0bGAgdG9vLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gV2FpdCBhIG1pbnV0ZS4uLiBga3ZtX3ZtX2lvY3RsYCBpdHNlbGYgaXMgYWN0dWFsbHkgYSB2ZXJ5IGdlbmVyaWMgaW9jdGwgaGFuZGxlci4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBkZWFscyB3aXRoIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgLiBBbHRob3VnaCBpdCdzIHN0YXRpYywgaXQgaGFuZGxlcyBhIHNwZWNpZmljIGNhc2UgYW5kIGl0J3MgYSBzaXphYmxlIGZ1bmN0aW9uLCBzbyBpdCdzIGEgYmV0dGVyIGZvY3VzIHBvaW50IHRoYW4gdGhlIG92ZXJhcmNoaW5nIGhhbmRsZXIsIGFuZCBpc24ndCBsaWtlbHkgaW5saW5lZC4gWWVwLCBpdCdzIHByZXR0eSBzdWJzdGFudGlhbCwgZGVmaW5pdGVseSBub3QgaW5saW5lZC5cblxuU28sIEknbGwgZ28gd2l0aCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgYHZteF92Y3B1X2ZyZWVgIGFzIG15IHByaW1hcnkgc3ltYm9scy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgY29kZSBjaGFuZ2VzIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgS1ZNX0lOVEVMYCBpcyBlbmFibGVkLiBUaGUgb3RoZXIgZmlsZSwgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGlzIGNvbXBpbGVkIHdoZW4gYEtWTWAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgYXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgbWFrZXMgc2Vuc2U6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IFZDUFUgSURzIGFyZSBtYW5hZ2VkLCBpbnRyb2R1Y2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFyaW5nIHRoZSBQSUQgdGFibGUgdXBvbiBWQ1BVIGRlYWxsb2NhdGlvbi4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZSwgbWFraW5nIGl0IHByaW1lIHRlcnJpdG9yeSBmb3IgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbj8gVGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSdsbCB1c2UgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIGB2bXhfdmNwdV9mcmVlYCBhcyBteSBmb2N1cyBzeW1ib2xzLCBhbmQgSSdsbCBlbmFibGUgdGhlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MzcsIk91dHB1dFRva2VucyI6MTA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjM0OjAyLjI5NjI5OTc3OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTY5NjA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxcIixcbiAgICBcInZteF92Y3B1X2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBhbmQgVk1YIGNvZGUgdG8gdHJhY2sgY3JlYXRlZCBWQ1BVIElEcyB1c2luZyBhIGJpdG1hcCBpbiBgc3RydWN0IGt2bWAgYW5kIGNsZWFycyB0aGUgUElEIHRhYmxlIGVudHJ5IHdoZW4gYSBWQ1BVIGlzIGZyZWVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsXCIsXG4gICAgXCJ2bXhfdmNwdV9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gYW5kIFZNWCBjb2RlIHRvIHRyYWNrIGNyZWF0ZWQgVkNQVSBJRHMgdXNpbmcgYSBiaXRtYXAgaW4gYHN0cnVjdCBrdm1gIGFuZCBjbGVhcnMgdGhlIFBJRCB0YWJsZSBlbnRyeSB3aGVuIGEgVkNQVSBpcyBmcmVlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2r2mq[1] Phase: Succeeded StartedAt: 2026-07-31 02:34:14 +0000 UTC FinishedAt: 2026-07-31 02:34:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 02:34:14 +0000 UTC FinishedAt: 2026-07-31 02:34:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2] Phase: Succeeded StartedAt: 2026-07-31 02:34:14 +0000 UTC FinishedAt: 2026-07-31 03:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-31 02:34:14 +0000 UTC FinishedAt: 2026-07-31 03:23:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:34:14 +0000 UTC FinishedAt: 2026-07-31 02:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:34:14 +0000 UTC FinishedAt: 2026-07-31 02:34:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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-workflow2r2mq/series-workflow2r2mq-convert-artifact-1229263138/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:34:24 +0000 UTC FinishedAt: 2026-07-31 02:54:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:34:24 +0000 UTC FinishedAt: 2026-07-31 02:54:14 +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:*13586570-8646-4368-9d11-0356aece76ca,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-workflow2r2mq/series-workflow2r2mq-convert-artifact-1229263138/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": "a87534b8-642f-4bd6-9016-065d9147fb65", "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-workflow2r2mq/series-workflow2r2mq-build-action-4114780896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:34:24 +0000 UTC FinishedAt: 2026-07-31 02:54:03 +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:*13586570-8646-4368-9d11-0356aece76ca,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-workflow2r2mq/series-workflow2r2mq-convert-artifact-1229263138/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": "a87534b8-642f-4bd6-9016-065d9147fb65", "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-workflow2r2mq/series-workflow2r2mq-build-action-4114780896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:54:14 +0000 UTC FinishedAt: 2026-07-31 02:54:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:54:14 +0000 UTC FinishedAt: 2026-07-31 02:54:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:54:14 +0000 UTC FinishedAt: 2026-07-31 02:54:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:54:14 +0000 UTC FinishedAt: 2026-07-31 02:54:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-workflow2r2mq/series-workflow2r2mq-convert-artifact-1932092797/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:54:24 +0000 UTC FinishedAt: 2026-07-31 02:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:54:24 +0000 UTC FinishedAt: 2026-07-31 02:56:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a87534b8-642f-4bd6-9016-065d9147fb65,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-workflow2r2mq/series-workflow2r2mq-build-action-4114780896/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-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:56:25 +0000 UTC FinishedAt: 2026-07-31 02:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:56:25 +0000 UTC FinishedAt: 2026-07-31 02:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:56:25 +0000 UTC FinishedAt: 2026-07-31 03:21:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:56:25 +0000 UTC FinishedAt: 2026-07-31 03:21:13 +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:*13586570-8646-4368-9d11-0356aece76ca,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-workflow2r2mq/series-workflow2r2mq-convert-artifact-1932092797/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": "c4580656-4d17-4944-8959-8829d24713be", "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-workflow2r2mq/series-workflow2r2mq-build-action-3148424665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 02:56:25 +0000 UTC FinishedAt: 2026-07-31 03:21:02 +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:*13586570-8646-4368-9d11-0356aece76ca,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-workflow2r2mq/series-workflow2r2mq-convert-artifact-1932092797/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": "c4580656-4d17-4944-8959-8829d24713be", "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-workflow2r2mq/series-workflow2r2mq-build-action-3148424665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 03:21:13 +0000 UTC FinishedAt: 2026-07-31 03:21:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 03:21:13 +0000 UTC FinishedAt: 2026-07-31 03:21:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 03:21:13 +0000 UTC FinishedAt: 2026-07-31 03:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 03:21:13 +0000 UTC FinishedAt: 2026-07-31 03:22:58 +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:*c4580656-4d17-4944-8959-8829d24713be,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-workflow2r2mq/series-workflow2r2mq-build-action-3148424665/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-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-07-31 03:23:09 +0000 UTC FinishedAt: 2026-07-31 03:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-07-31 03:23:09 +0000 UTC FinishedAt: 2026-07-31 03:23:22 +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":["kvm_vm_ioctl","vmx_vcpu_free"],"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:*a87534b8-642f-4bd6-9016-065d9147fb65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4580656-4d17-4944-8959-8829d24713be,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-workflow2r2mq/series-workflow2r2mq-build-action-4114780896/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-workflow2r2mq/series-workflow2r2mq-build-action-3148424665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 03:23:09 +0000 UTC FinishedAt: 2026-07-31 03:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 03:23:09 +0000 UTC FinishedAt: 2026-07-31 03:23:16 +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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 03:23:09 +0000 UTC FinishedAt: 2026-07-31 03:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 03:23:09 +0000 UTC FinishedAt: 2026-07-31 03:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","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-31 03:23:09 +0000 UTC FinishedAt: 2026-07-31 03:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"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":["kvm_vm_ioctl","vmx_vcpu_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"b2cf287e-35fb-4084-9c78-7e48d958bacd","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Error StartedAt: 2026-07-31 03:23:22 +0000 UTC FinishedAt: 2026-07-31 03:23:22 +0000 UTC Input: nil Output: nil