Name: series-workflowqs98b Phase: Succeeded StartedAt: 2026-07-01 02:48:57 +0000 UTC FinishedAt: 2026-07-01 07:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[0] Phase: Succeeded StartedAt: 2026-07-01 02:48:57 +0000 UTC FinishedAt: 2026-07-01 02:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 02:48:57 +0000 UTC FinishedAt: 2026-07-01 02:57:38 +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": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_HYPERV" ], "series_id": "fe3de385-c584-4a05-a006-8092d3367ae4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_ioctl", "kvm_vm_ioctl_check_extension", "kvm_get_hv_cpuid", "kvm_hv_hypercall_complete", "kvm_vcpu_ioctl_enable_cap" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfaHZfY3B1aWQmIzM0OywKICAgICYjMzQ7a3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMgdG8gdXNlIHN0YXRpYyBjYWxscyBpbnN0ZWFkIG9mIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIGNoYW5nZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG1lY2hhbmlzbSBhbmQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gYW5kIGNoZWNraW5nIGxvZ2ljIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKS4gQnVncyBpbiB0aGlzIHJlZmFjdG9yaW5nIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYyNmI1MzgyNWFhYzJmMzllMzE3MzdkZjdhNTZjYTcxYmIyMzBkYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDAyOjU2OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGIxYmU1YmNlY2FhNDhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXG5AQCAtMCwwICYjNDM7MSwzNiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWYgIWRlZmluZWQoS1ZNX1g4Nl9ORVNURURfT1ApIHx8IFxcXG4mIzQzOyAgICAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCkgfHwgXFxcbiYjNDM7ICAgICFkZWZpbmVkKEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDApXG4mIzQzOyNlcnJvciBNaXNzaW5nIG9uZSBvciBtb3JlIEtWTV9YODZfTkVTVEVEX09QICNkZWZpbmVzXG4mIzQzOyNlbHNlXG4mIzQzOy8qXG4mIzQzOyAqIEtWTV9YODZfTkVTVEVEX09QKCkgYW5kIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKCkgYXJlIHVzZWQgdG8gaGVscFxuJiM0MzsgKiBnZW5lcmF0ZSBib3RoIERFQ0xBUkUvREVGSU5FX1NUQVRJQ19DQUxMKCkgaW52b2NhdGlvbnMgYW5kXG4mIzQzOyAqIFwmIzM0O3N0YXRpY19jYWxsX3VwZGF0ZSgpXCYjMzQ7IGNhbGxzLlxuJiM0MzsgKlxuJiM0MzsgKiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCgpIGNhbiBiZSB1c2VkIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdCBjYW4gaGF2ZVxuJiM0MzsgKiBhIE5VTEwgZGVmaW5pdGlvbi4gIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoKSBjYW4gYmUgdXNlZCBsaWtld2lzZVxuJiM0MzsgKiB0byBtYWtlIGEgZGVmaW5pdGlvbiBvcHRpb25hbCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgZGVmYXVsdCB3aWxsXG4mIzQzOyAqIGJlIF9fc3RhdGljX2NhbGxfcmV0dXJuMC5cbiYjNDM7ICovXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QKGxlYXZlX25lc3RlZClcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoaXNfZXhjZXB0aW9uX3ZtZXhpdClcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoY2hlY2tfZXZlbnRzKVxuJiM0MztLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKGhhc19ldmVudHMpXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QKHRyaXBsZV9mYXVsdClcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoZ2V0X3N0YXRlKVxuJiM0MztLVk1fWDg2X05FU1RFRF9PUChzZXRfc3RhdGUpXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QKGdldF9uZXN0ZWRfc3RhdGVfcGFnZXMpXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAod3JpdGVfbG9nX2RpcnR5KVxuJiM0MztLVk1fWDg2X05FU1RFRF9PUCh0cmFuc2xhdGVfbmVzdGVkX2dwYSlcbiYjNDM7I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKGVuYWJsZV9ldm1jcylcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMChnZXRfZXZtY3NfdmVyc2lvbilcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoaHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2gpXG4mIzQzOyNlbmRpZlxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUFxuJiM0MzsjdW5kZWYgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxcbiYjNDM7I3VuZGVmIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjUxNzI1N2E2MzE1MzIuLjdlMDdhOWMyNTlkMDkyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE4NDIsOCAmIzQzOzE4NDIsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFxuIFx0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1cdGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XG4tXG4gXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG5AQCAtMTkwNiw2ICYjNDM7MTkwNCw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHtcbiYjNDM7XHRib29sIGVuYWJsZWQ7XG4mIzQzO1xuIFx0dm9pZCAoKmxlYXZlX25lc3RlZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGJvb2wgKCppc19leGNlcHRpb25fdm1leGl0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3RvcixcbiBcdFx0XHRcdCAgICB1MzIgZXJyb3JfY29kZSk7XG5AQCAtMTkzNyw2ICYjNDM7MTkzNyw3IEBAIHN0cnVjdCBrdm1feDg2X2luaXRfb3BzIHtcbiBcbiBcdHN0cnVjdCBrdm1feDg2X29wcyAqcnVudGltZV9vcHM7XG4gXHRzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHM7XG4mIzQzO1x0c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyAqbmVzdGVkX29wcztcbiB9O1xuIFxuIHN0cnVjdCBrdm1fYXJjaF9hc3luY19wZiB7XG5AQCAtMTk1Miw2ICYjNDM7MTk1Myw3IEBAIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2FwaWN2O1xuIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2lwaXY7XG4gZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfZGV2aWNlX3Bvc3RlZF9pcnFzO1xuIGV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XG4mIzQzO2V4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7XG4gXG4gI2RlZmluZSBrdm1feDg2X2NhbGwoZnVuYykgc3RhdGljX2NhbGwoa3ZtX3g4Nl8jI2Z1bmMpXG4gXG5AQCAtMTk2MSw2ICYjNDM7MTk2MywxNCBAQCBleHRlcm4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzO1xuICNkZWZpbmUgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfT1BcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1vcHMuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIGt2bV9uZXN0ZWRfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2X25lc3RlZF8jI2Z1bmMpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG4mIzQzO1x0REVDTEFSRV9TVEFUSUNfQ0FMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsICooKChzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICopMCktXHUwMDNlZnVuYykpO1xuJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIEtWTV9YODZfTkVTVEVEX09QXG4mIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X05FU1RFRF9PUFxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcdTAwM2VcbiYjNDM7XG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuaW5kZXggMWVlMGQyM2Y4OTQ5NzQuLmIwMTBkY2EzN2I5ZDFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbkBAIC0yNDA2LDcgJiM0MzsyNDA2LDcgQEAgc3RhdGljIGludCBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcbiBcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuIFxuIFx0aWYgKHRsYl9sb2NrX2NvdW50KVxuLVx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHZjcHUpO1xuJiM0MztcdFx0a3ZtX25lc3RlZF9jYWxsKGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKSh2Y3B1KTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI3ODcsOCAmIzQzOzI3ODcsOCBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCxcbiBcdH07XG4gXHRpbnQgaSwgbmVudCA9IEFSUkFZX1NJWkUoY3B1aWRfZW50cmllcyk7XG4gXG4tXHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfZXZtY3NfdmVyc2lvbilcbi1cdFx0ZXZtY3NfdmVyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfZXZtY3NfdmVyc2lvbih2Y3B1KTtcbiYjNDM7XHRpZiAoa3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbiYjNDM7XHRcdGV2bWNzX3ZlciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfZXZtY3NfdmVyc2lvbikodmNwdSk7XG4gXG4gXHRpZiAoY3B1aWQtXHUwMDNlbmVudCBcdTAwM2MgbmVudClcbiBcdFx0cmV0dXJuIC1FMkJJRztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmhcbmluZGV4IGM5ZjYyOGI5N2RhZWI5Li5mYTA1Y2EyYzg1NDllNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS5oXG5AQCAtMzg1LDkgJiM0MzszODUsOCBAQCBzdGF0aWMgaW5saW5lIGdwYV90IGt2bV90cmFuc2xhdGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHRpZiAoIW1tdV9pc19uZXN0ZWQodmNwdSkgfHwgdyA9PSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubmdwYV93YWxrKVxuIFx0XHRyZXR1cm4gZ3BhO1xuLVx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNldHJhbnNsYXRlX25lc3RlZF9ncGEodmNwdSwgZ3BhLCBhY2Nlc3MsXG4tXHRcdFx0XHRcdFx0XHQgICAgZXhjZXB0aW9uLFxuLVx0XHRcdFx0XHRcdFx0ICAgIHB0ZV9hY2Nlc3MpO1xuJiM0MztcdHJldHVybiBrdm1fbmVzdGVkX2NhbGwodHJhbnNsYXRlX25lc3RlZF9ncGEpKHZjcHUsIGdwYSwgYWNjZXNzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGV4Y2VwdGlvbiwgcHRlX2FjY2Vzcyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oXG5pbmRleCBlNzNmYzA5ZWM0ZGIyZS4uNGVlN2IwM2U3NjJkMGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaFxuQEAgLTIzNSw3ICYjNDM7MjM1LDcgQEAgc3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0IShwdGUgXHUwMDI2IFBUX0dVRVNUX0RJUlRZX01BU0spKSB7XG4gXHRcdFx0dHJhY2Vfa3ZtX21tdV9zZXRfZGlydHlfYml0KHRhYmxlX2dmbiwgaW5kZXgsIHNpemVvZihwdGUpKTtcbiAjaWYgUFRUWVBFID09IFBUVFlQRV9FUFRcbi1cdFx0XHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2V3cml0ZV9sb2dfZGlydHkodmNwdSwgYWRkcikpXG4mIzQzO1x0XHRcdGlmIChrdm1fbmVzdGVkX2NhbGwod3JpdGVfbG9nX2RpcnR5KSh2Y3B1LCBhZGRyKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICNlbmRpZlxuIFx0XHRcdHB0ZSB8PSBQVF9HVUVTVF9ESVJUWV9NQVNLO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5pbmRleCBiYTk4NWEwMjIwOGEzZS4uNWY2ZDk5NzFhM2YyMjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5AQCAtMjE2Miw3ICYjNDM7MjE2Miw3IEBAIHN0YXRpYyBncGFfdCBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4gXHRyZXR1cm4gdy1cdTAwM2VndmFfdG9fZ3BhKHZjcHUsIHcsIGdwYSwgYWNjZXNzLCBleGNlcHRpb24pO1xuIH1cbiBcbi1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0ge1xuJiM0MztzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQubGVhdmVfbmVzdGVkID0gc3ZtX2xlYXZlX25lc3RlZCxcbiBcdC50cmFuc2xhdGVfbmVzdGVkX2dwYSA9IHN2bV90cmFuc2xhdGVfbmVzdGVkX2dwYSxcbiBcdC5pc19leGNlcHRpb25fdm1leGl0ID0gbmVzdGVkX3N2bV9pc19leGNlcHRpb25fdm1leGl0LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlZjY5YTUxYWIyN2Y5OC4uZDM4MDdmNGFiYjQ5OWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtNTQyNiw4ICYjNDM7NTQyNiw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmNoZWNrX2ludGVyY2VwdCA9IHN2bV9jaGVja19pbnRlcmNlcHQsXG4gXHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gc3ZtX2hhbmRsZV9leGl0X2lycW9mZixcbiBcbi1cdC5uZXN0ZWRfb3BzID0gXHUwMDI2c3ZtX25lc3RlZF9vcHMsXG4tXG4gXHQuZGVsaXZlcl9pbnRlcnJ1cHQgPSBzdm1fZGVsaXZlcl9pbnRlcnJ1cHQsXG4gXHQucGlfdXBkYXRlX2lydGUgPSBhdmljX3BpX3VwZGF0ZV9pcnRlLFxuIFx0LnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsXG5AQCAtNTY0Niw2ICYjNDM7NTY0NCw3IEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiYjNDM7XHRzdm1fbmVzdGVkX29wcy5lbmFibGVkID0gbmVzdGVkO1xuIFxuIFx0LypcbiBcdCAqIEtWTSYjMzk7cyBNTVUgZG9lc24mIzM5O3Qgc3VwcG9ydCB1c2luZyAyLWxldmVsIHBhZ2luZyBmb3IgaXRzZWxmLCBhbmQgdGh1c1xuQEAgLTU3NzIsNiAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgc3ZtX2luaXRfb3BzIF9faW5pdGRhdGEgPSB7XG4gXG4gXHQucnVudGltZV9vcHMgPSBcdTAwMjZzdm1feDg2X29wcyxcbiBcdC5wbXVfb3BzID0gXHUwMDI2YW1kX3BtdV9vcHMsXG4mIzQzO1x0Lm5lc3RlZF9vcHMgPSBcdTAwMjZzdm1fbmVzdGVkX29wcyxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIF9fc3ZtX2V4aXQodm9pZClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCA4M2Q5OTIxMjc3ZWFjMi4uMDRmOTg2ZTNkNDM5YWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC05OTUsOCAmIzQzOzk5NSw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXG4gXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSxcbiBcbi1cdC5uZXN0ZWRfb3BzID0gXHUwMDI2dm14X25lc3RlZF9vcHMsXG4tXG4gXHQucGlfdXBkYXRlX2lydGUgPSB2bXhfcGlfdXBkYXRlX2lydGUsXG4gXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcbiBcbkBAIC0xMDM4LDYgJiM0MzsxMDM2LDcgQEAgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgdnRfaW5pdF9vcHMgX19pbml0ZGF0YSA9IHtcbiBcbiBcdC5ydW50aW1lX29wcyA9IFx1MDAyNnZ0X3g4Nl9vcHMsXG4gXHQucG11X29wcyA9IFx1MDAyNmludGVsX3BtdV9vcHMsXG4mIzQzO1x0Lm5lc3RlZF9vcHMgPSBcdTAwMjZ2bXhfbmVzdGVkX29wcyxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCB2dF9leGl0KHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDA2MzVlOTI0NzFjODllLi5jYmIyMDlkOGE4ZjBkMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC03NDg0LDcgJiM0Mzs3NDg0LDcgQEAgc3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbiBcdHJldHVybiB3LVx1MDAzZWd2YV90b19ncGEodmNwdSwgdywgZ3BhLCBhY2Nlc3MsIGV4Y2VwdGlvbik7XG4gfVxuIFxuLXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XG4mIzQzO3N0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxuIFx0LnRyYW5zbGF0ZV9uZXN0ZWRfZ3BhID0gdm14X3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhLFxuIFx0LmlzX2V4Y2VwdGlvbl92bWV4aXQgPSBuZXN0ZWRfdm14X2lzX2V4Y2VwdGlvbl92bWV4aXQsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IDM2ODFkNTY1ZjE3Nzg5Li5lZjllMWJjMzllZGJiZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC04Nzg2LDYgJiM0Mzs4Nzg2LDcgQEAgX19pbml0IGludCB2bXhfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcdFx0aWYgKHIpXG4gXHRcdFx0cmV0dXJuIHI7XG4gXHR9XG4mIzQzO1x0dm14X25lc3RlZF9vcHMuZW5hYmxlZCA9IG5lc3RlZDtcbiBcbiBcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIocGlfd2FrZXVwX2hhbmRsZXIpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjViYTRhYWMzNzY0MDZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0xNTQsNiAmIzQzOzE1NCw3IEBAIHN0YXRpYyBpbnQgc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gc3RhdGljIERFRklORV9NVVRFWCh2ZW5kb3JfbW9kdWxlX2xvY2spO1xuIFxuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcyBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7XG4gXG4gI2RlZmluZSBLVk1fWDg2X09QKGZ1bmMpXHRcdFx0XHRcdCAgICAgXFxcbiBcdERFRklORV9TVEFUSUNfQ0FMTF9OVUxMKGt2bV94ODZfIyNmdW5jLFx0XHRcdCAgICAgXFxcbkBAIC0xNjUsNiAmIzQzOzE2NiwxMyBAQCBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfZ2V0X2NzX2RiX2xfYml0cyk7XG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2NhY2hlX3JlZyk7XG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2dldF9jcGwpO1xuIFxuJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdERFRklORV9TVEFUSUNfQ0FMTF9OVUxMKGt2bV94ODZfbmVzdGVkXyMjZnVuYyxcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0KigoKHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKikwKS1cdTAwM2VmdW5jKSk7XG4mIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9ORVNURURfT1BcbiYjNDM7I2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfTkVTVEVEX09QXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFx1MDAzZVxuJiM0MztcbiB1bnNpZ25lZCBpbnQgbWluX3RpbWVyX3BlcmlvZF91cyA9IDIwMDtcbiBtb2R1bGVfcGFyYW0obWluX3RpbWVyX3BlcmlvZF91cywgdWludCwgMDY0NCk7XG4gXG5AQCAtNDU0LDcgJiM0Mzs0NjIsNyBAQCBzdGF0aWMgdm9pZCBrdm1fbXVsdGlwbGVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG5yLFxuIFx0ICogd2FudHMgdG8gaW50ZXJjZXB0IHRoZSBleGNlcHRpb24uXG4gXHQgKi9cbiBcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaXNfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgZXJyb3JfY29kZSkpIHtcbiYjNDM7XHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIG5yLCBlcnJvcl9jb2RlKSkge1xuIFx0XHRrdm1fcXVldWVfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgaGFzX2Vycm9yLCBlcnJvcl9jb2RlLFxuIFx0XHRcdFx0XHQgICBoYXNfcGF5bG9hZCwgcGF5bG9hZCk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzQ2LDE1ICYjNDM7MjM1NCwxNCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdHIgXHUwMDI2PSB+S1ZNX1gyQVBJQ19FTkFCTEVfU1VQUFJFU1NfRU9JX0JST0FEQ0FTVDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfTkVTVEVEX1NUQVRFOlxuLVx0XHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUgP1xuLVx0XHRcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X3N0YXRlKE5VTEwsIE5VTEwsIDApIDogMDtcbiYjNDM7XHRcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkID8ga3ZtX25lc3RlZF9jYWxsKGdldF9zdGF0ZSkoTlVMTCwgTlVMTCwgMCkgOiAwO1xuIFx0XHRicmVhaztcbiAjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbiBcdGNhc2UgS1ZNX0NBUF9IWVBFUlZfRElSRUNUX1RMQkZMVVNIOlxuIFx0XHRyID0ga3ZtX3g4Nl9vcHMuZW5hYmxlX2wyX3RsYl9mbHVzaCAhPSBOVUxMO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX0NBUF9IWVBFUlZfRU5MSUdIVEVORURfVk1DUzpcbi1cdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZW5hYmxlX2V2bWNzICE9IE5VTEw7XG4mIzQzO1x0XHRyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzICE9IE5VTEw7XG4gXHRcdGJyZWFrO1xuICNlbmRpZlxuIFx0Y2FzZSBLVk1fQ0FQX1NNQUxMRVJfTUFYUEhZQUREUjpcbkBAIC0zMzY2LDkgJiM0MzszMzczLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0dWludDE2X3Qgdm1jc192ZXJzaW9uO1xuIFx0XHRcdHZvaWQgX191c2VyICp1c2VyX3B0cjtcbiBcbi1cdFx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZW5hYmxlX2V2bWNzKVxuJiM0MztcdFx0XHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgfHxcbiYjNDM7XHRcdFx0ICAgICFrdm1fbmVzdGVkX29wcy5lbmFibGVfZXZtY3MpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbi1cdFx0XHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VlbmFibGVfZXZtY3ModmNwdSwgXHUwMDI2dm1jc192ZXJzaW9uKTtcbiYjNDM7XHRcdFx0ciA9IGt2bV9uZXN0ZWRfY2FsbChlbmFibGVfZXZtY3MpKHZjcHUsIFx1MDAyNnZtY3NfdmVyc2lvbik7XG4gXHRcdFx0aWYgKCFyKSB7XG4gXHRcdFx0XHR1c2VyX3B0ciA9ICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpY2FwLVx1MDAzZWFyZ3NbMF07XG4gXHRcdFx0XHRpZiAoY29weV90b191c2VyKHVzZXJfcHRyLCBcdTAwMjZ2bWNzX3ZlcnNpb24sXG5AQCAtMzczMiw3ICYjNDM7Mzc0MCw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0dTMyIHVzZXJfZGF0YV9zaXplO1xuIFxuIFx0XHRyID0gLUVJTlZBTDtcbi1cdFx0aWYgKCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9zdGF0ZSlcbiYjNDM7XHRcdGlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0QlVJTERfQlVHX09OKHNpemVvZih1c2VyX2RhdGFfc2l6ZSkgIT0gc2l6ZW9mKHVzZXJfa3ZtX25lc3RlZF9zdGF0ZS1cdTAwM2VzaXplKSk7XG5AQCAtMzc0MCw4ICYjNDM7Mzc0OCw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0aWYgKGdldF91c2VyKHVzZXJfZGF0YV9zaXplLCBcdTAwMjZ1c2VyX2t2bV9uZXN0ZWRfc3RhdGUtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXG4tXHRcdFx0XHRcdFx0ICAgICB1c2VyX2RhdGFfc2l6ZSk7XG4mIzQzO1x0XHRyID0ga3ZtX25lc3RlZF9jYWxsKGdldF9zdGF0ZSkodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLCB1c2VyX2RhdGFfc2l6ZSk7XG4gXHRcdGlmIChyIFx1MDAzYyAwKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTM3NjIsNyAmIzQzOzM3NjksNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdGludCBpZHg7XG4gXG4gXHRcdHIgPSAtRUlOVkFMO1xuLVx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKVxuJiM0MztcdFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRyID0gLUVGQVVMVDtcbkBAIC0zNzg1LDcgJiM0MzszNzkyLDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KTtcbi1cdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgXHUwMDI2a3ZtX3N0YXRlKTtcbiYjNDM7XHRcdHIgPSBrdm1fbmVzdGVkX2NhbGwoc2V0X3N0YXRlKSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFx1MDAyNmt2bV9zdGF0ZSk7XG4gXHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNjkwMyw2ICYjNDM7NjkxMCwyMiBAQCBzdGF0aWMgdm9pZCBrdm1fc2V0dXBfZWZlcl9jYXBzKHZvaWQpXG4gXHRcdGt2bV9lbmFibGVfZWZlcl9iaXRzKEVGRVJfQVVUT0lCUlMpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX25lc3RlZF9vcHNfdXBkYXRlKGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHMpXG4mIzQzO3tcbiYjNDM7XHRtZW1jcHkoXHUwMDI2a3ZtX25lc3RlZF9vcHMsIG5lc3RlZF9vcHMsIHNpemVvZihrdm1fbmVzdGVkX29wcykpO1xuJiM0MztcbiYjNDM7I2RlZmluZSBfX0tWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG4mIzQzO1x0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywga3ZtX25lc3RlZF9vcHMuZnVuYyk7XG4mIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1AoZnVuYykgXFxcbiYjNDM7XHRXQVJOX09OKCFrdm1fbmVzdGVkX29wcy5mdW5jKTsgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKVxuJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIF9fS1ZNX1g4Nl9ORVNURURfT1BcbiYjNDM7I2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKGZ1bmMpIFxcXG4mIzQzO1x0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywgKHZvaWQgKilrdm1fbmVzdGVkX29wcy5mdW5jID8gOiBcXFxuJiM0MztcdFx0XHRcdFx0XHQgICh2b2lkICopX19zdGF0aWNfY2FsbF9yZXR1cm4wKTtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXHUwMDNlXG4mIzQzOyN1bmRlZiBfX0tWTV9YODZfTkVTVEVEX09QXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9vcHNfdXBkYXRlKHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXG4ge1xuIFx0bWVtY3B5KFx1MDAyNmt2bV94ODZfb3BzLCBvcHMtXHUwMDNlcnVudGltZV9vcHMsIHNpemVvZihrdm1feDg2X29wcykpO1xuQEAgLTY5MTgsNiAmIzQzOzY5NDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX29wc191cGRhdGUoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1vcHMuaFx1MDAzZVxuICN1bmRlZiBfX0tWTV9YODZfT1BcbiBcbiYjNDM7XHRrdm1fbmVzdGVkX29wc191cGRhdGUob3BzLVx1MDAzZW5lc3RlZF9vcHMpO1xuJiM0MztcbiBcdGt2bV9wbXVfb3BzX3VwZGF0ZShvcHMtXHUwMDNlcG11X29wcyk7XG4gfVxuIFxuQEAgLTc0NTQsMTEgJiM0Mzs3NDc5LDExIEBAIHN0YXRpYyB2b2lkIHBvc3Rfa3ZtX3J1bl9zYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuLVx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcbiYjNDM7XHRcdGt2bV9uZXN0ZWRfY2FsbCh0cmlwbGVfZmF1bHQpKHZjcHUpO1xuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbi1cdHJldHVybiBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWNoZWNrX2V2ZW50cyh2Y3B1KTtcbiYjNDM7XHRyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKGNoZWNrX2V2ZW50cykodmNwdSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC03Njk2LDkgJiM0Mzs3NzIxLDcgQEAgc3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XG4gXHR9XG4gXG4tXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHMgXHUwMDI2XHUwMDI2XG4tXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VoYXNfZXZlbnRzKHZjcHUsIHRydWUpKVxuJiM0MztcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBrdm1fbmVzdGVkX2NhbGwoaGFzX2V2ZW50cykodmNwdSwgdHJ1ZSkpXG4gXHRcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xuIFxuIFx0LypcbkBAIC04MDIxLDcgJiM0Mzs4MDQ0LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0fVxuIFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkge1xuLVx0XHRcdGlmICh1bmxpa2VseSgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHZjcHUpKSkge1xuJiM0MztcdFx0XHRpZiAodW5saWtlbHkoIWt2bV9uZXN0ZWRfY2FsbChnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKSh2Y3B1KSkpIHtcbiBcdFx0XHRcdHIgPSAwO1xuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuQEAgLTgwNzMsNyAmIzQzOzgwOTYsNyBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR9XG4gXHRcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuIFx0XHRcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpKVxuLVx0XHRcdFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2V0cmlwbGVfZmF1bHQodmNwdSk7XG4mIzQzO1x0XHRcdFx0a3ZtX25lc3RlZF9jYWxsKHRyaXBsZV9mYXVsdCkodmNwdSk7XG4gXG4gXHRcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuIFx0XHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9TSFVURE9XTjtcbkBAIC04NDkxLDkgJiM0Mzs4NTE0LDcgQEAgYm9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHZjcHUpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHModmNwdSwgZmFsc2UpKVxuJiM0MztcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBrdm1fbmVzdGVkX2NhbGwoaGFzX2V2ZW50cykodmNwdSwgZmFsc2UpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGlmIChrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyh2Y3B1KSlcbkBAIC04ODk2LDggJiM0Mzs4OTE3LDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGEgcGVuZGluZyBWTS1FeGl0IGlmIEwxIHdhbnRzIHRvIGludGVyY2VwdCB0aGUgZXhjZXB0aW9uLlxuIFx0ICovXG4gXHRpZiAodmNwdS1cdTAwM2VhcmNoLmV4Y2VwdGlvbl9mcm9tX3VzZXJzcGFjZSBcdTAwMjZcdTAwMjYgaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXHUwMDNldmVjdG9yLFxuLVx0XHRcdFx0XHRcdFx0ZXgtXHUwMDNlZXJyb3JfY29kZSkpIHtcbiYjNDM7XHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIGV4LVx1MDAzZXZlY3RvciwgZXgtXHUwMDNlZXJyb3JfY29kZSkpIHtcbiBcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXHUwMDNldmVjdG9yLFxuIFx0XHRcdFx0XHQgICBleC1cdTAwM2VoYXNfZXJyb3JfY29kZSwgZXgtXHUwMDNlZXJyb3JfY29kZSxcbiBcdFx0XHRcdFx0ICAgZXgtXHUwMDNlaGFzX3BheWxvYWQsIGV4LVx1MDAzZXBheWxvYWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggOGVjZTQ2ODA4N2E4ZWUuLmI1MTBiNjMxZjBjNTIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC05Myw3ICYjNDM7OTMsNyBAQCBpbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiAvKiBGb3JjaWJseSBsZWF2ZSB0aGUgbmVzdGVkIG1vZGUgaW4gY2FzZXMgbGlrZSBhIHZDUFUgcmVzZXQgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VsZWF2ZV9uZXN0ZWQodmNwdSk7XG4mIzQzO1x0a3ZtX25lc3RlZF9jYWxsKGxlYXZlX25lc3RlZCkodmNwdSk7XG4gfVxuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OywKICAgICYjMzQ7a3ZtX2dldF9odl9jcHVpZCYjMzQ7LAogICAgJiMzNDtrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyB0byB1c2Ugc3RhdGljIGNhbGxzIGluc3RlYWQgb2YgaW5kaXJlY3QgZnVuY3Rpb24gcG9pbnRlcnMuIFRoaXMgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgbWVjaGFuaXNtIGFuZCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgbG9naWMgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpLiBCdWdzIGluIHRoaXMgcmVmYWN0b3JpbmcgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjZiNTM4MjVhYWMyZjM5ZTMxNzM3ZGY3YTU2Y2E3MWJiMjMwZGIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAwMjo1NjozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMWJlNWJjZWNhYTQ4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmgKQEAgLTAsMCAmIzQzOzEsMzYgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZiAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUCkgfHwgXAomIzQzOyAgICAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCkgfHwgXAomIzQzOyAgICAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKQomIzQzOyNlcnJvciBNaXNzaW5nIG9uZSBvciBtb3JlIEtWTV9YODZfTkVTVEVEX09QICNkZWZpbmVzCiYjNDM7I2Vsc2UKJiM0MzsvKgomIzQzOyAqIEtWTV9YODZfTkVTVEVEX09QKCkgYW5kIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKCkgYXJlIHVzZWQgdG8gaGVscAomIzQzOyAqIGdlbmVyYXRlIGJvdGggREVDTEFSRS9ERUZJTkVfU1RBVElDX0NBTEwoKSBpbnZvY2F0aW9ucyBhbmQKJiM0MzsgKiAmIzM0O3N0YXRpY19jYWxsX3VwZGF0ZSgpJiMzNDsgY2FsbHMuCiYjNDM7ICoKJiM0MzsgKiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCgpIGNhbiBiZSB1c2VkIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdCBjYW4gaGF2ZQomIzQzOyAqIGEgTlVMTCBkZWZpbml0aW9uLiAgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCgpIGNhbiBiZSB1c2VkIGxpa2V3aXNlCiYjNDM7ICogdG8gbWFrZSBhIGRlZmluaXRpb24gb3B0aW9uYWwsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGRlZmF1bHQgd2lsbAomIzQzOyAqIGJlIF9fc3RhdGljX2NhbGxfcmV0dXJuMC4KJiM0MzsgKi8KJiM0MztLVk1fWDg2X05FU1RFRF9PUChsZWF2ZV9uZXN0ZWQpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoaXNfZXhjZXB0aW9uX3ZtZXhpdCkKJiM0MztLVk1fWDg2X05FU1RFRF9PUChjaGVja19ldmVudHMpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMChoYXNfZXZlbnRzKQomIzQzO0tWTV9YODZfTkVTVEVEX09QKHRyaXBsZV9mYXVsdCkKJiM0MztLVk1fWDg2X05FU1RFRF9PUChnZXRfc3RhdGUpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1Aoc2V0X3N0YXRlKQomIzQzO0tWTV9YODZfTkVTVEVEX09QKGdldF9uZXN0ZWRfc3RhdGVfcGFnZXMpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCh3cml0ZV9sb2dfZGlydHkpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AodHJhbnNsYXRlX25lc3RlZF9ncGEpCiYjNDM7I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwoZW5hYmxlX2V2bWNzKQomIzQzO0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoZ2V0X2V2bWNzX3ZlcnNpb24pCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoaHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2gpCiYjNDM7I2VuZGlmCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I3VuZGVmIEtWTV9YODZfTkVTVEVEX09QCiYjNDM7I3VuZGVmIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMCiYjNDM7I3VuZGVmIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGI1MTcyNTdhNjMxNTMyLi43ZTA3YTljMjU5ZDA5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xODQyLDggJiM0MzsxODQyLDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHsKIAogCXZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLQljb25zdCBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICpuZXN0ZWRfb3BzOwotCiAJdm9pZCAoKnZjcHVfYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJdm9pZCAoKnZjcHVfdW5ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIApAQCAtMTkwNiw2ICYjNDM7MTkwNCw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiB9OwogCiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHsKJiM0MzsJYm9vbCBlbmFibGVkOwomIzQzOwogCXZvaWQgKCpsZWF2ZV9uZXN0ZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJYm9vbCAoKmlzX2V4Y2VwdGlvbl92bWV4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yLAogCQkJCSAgICB1MzIgZXJyb3JfY29kZSk7CkBAIC0xOTM3LDYgJiM0MzsxOTM3LDcgQEAgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgewogCiAJc3RydWN0IGt2bV94ODZfb3BzICpydW50aW1lX29wczsKIAlzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHM7CiYjNDM7CXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7CiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2hfYXN5bmNfcGYgewpAQCAtMTk1Miw2ICYjNDM7MTk1Myw3IEBAIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2FwaWN2OwogZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfaXBpdjsKIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2RldmljZV9wb3N0ZWRfaXJxczsKIGV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMga3ZtX25lc3RlZF9vcHMgX19yZWFkX21vc3RseTsKIAogI2RlZmluZSBrdm1feDg2X2NhbGwoZnVuYykgc3RhdGljX2NhbGwoa3ZtX3g4Nl8jI2Z1bmMpCiAKQEAgLTE5NjEsNiAmIzQzOzE5NjMsMTQgQEAgZXh0ZXJuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wczsKICNkZWZpbmUgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfT1AKICNpbmNsdWRlICZsdDthc20va3ZtLXg4Ni1vcHMuaCZndDsKIAomIzQzOyNkZWZpbmUga3ZtX25lc3RlZF9jYWxsKGZ1bmMpIHN0YXRpY19jYWxsKGt2bV94ODZfbmVzdGVkXyMjZnVuYykKJiM0MzsKJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFwKJiM0MzsJREVDTEFSRV9TVEFUSUNfQ0FMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsICooKChzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICopMCktJmd0O2Z1bmMpKTsKJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIEtWTV9YODZfTkVTVEVEX09QCiYjNDM7I2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfTkVTVEVEX09QCiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaCZndDsKJiM0MzsKICNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMKaW5kZXggMWVlMGQyM2Y4OTQ5NzQuLmIwMTBkY2EzN2I5ZDFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5jCkBAIC0yNDA2LDcgJiM0MzsyNDA2LDcgQEAgc3RhdGljIGludCBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdCkKIAlyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAogCWlmICh0bGJfbG9ja19jb3VudCkKLQkJa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7aHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2godmNwdSk7CiYjNDM7CQlrdm1fbmVzdGVkX2NhbGwoaHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2gpKHZjcHUpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3ODcsOCAmIzQzOzI3ODcsOCBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKIAl9OwogCWludCBpLCBuZW50ID0gQVJSQVlfU0laRShjcHVpZF9lbnRyaWVzKTsKIAotCWlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtnZXRfZXZtY3NfdmVyc2lvbikKLQkJZXZtY3NfdmVyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Z2V0X2V2bWNzX3ZlcnNpb24odmNwdSk7CiYjNDM7CWlmIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKQomIzQzOwkJZXZtY3NfdmVyID0ga3ZtX25lc3RlZF9jYWxsKGdldF9ldm1jc192ZXJzaW9uKSh2Y3B1KTsKIAogCWlmIChjcHVpZC0mZ3Q7bmVudCAmbHQ7IG5lbnQpCiAJCXJldHVybiAtRTJCSUc7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmgKaW5kZXggYzlmNjI4Yjk3ZGFlYjkuLmZhMDVjYTJjODU0OWU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS5oCkBAIC0zODUsOSAmIzQzOzM4NSw4IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogewogCWlmICghbW11X2lzX25lc3RlZCh2Y3B1KSB8fCB3ID09ICZhbXA7dmNwdS0mZ3Q7YXJjaC5uZ3BhX3dhbGspCiAJCXJldHVybiBncGE7Ci0JcmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHZjcHUsIGdwYSwgYWNjZXNzLAotCQkJCQkJCSAgICBleGNlcHRpb24sCi0JCQkJCQkJICAgIHB0ZV9hY2Nlc3MpOwomIzQzOwlyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKSh2Y3B1LCBncGEsIGFjY2VzcywKJiM0MzsJCQkJCQkgICAgIGV4Y2VwdGlvbiwgcHRlX2FjY2Vzcyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmggYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgKaW5kZXggZTczZmMwOWVjNGRiMmUuLjRlZTdiMDNlNzYyZDBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oCkBAIC0yMzUsNyAmIzQzOzIzNSw3IEBAIHN0YXRpYyBpbnQgRk5BTUUodXBkYXRlX2FjY2Vzc2VkX2RpcnR5X2JpdHMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkhKHB0ZSAmYW1wOyBQVF9HVUVTVF9ESVJUWV9NQVNLKSkgewogCQkJdHJhY2Vfa3ZtX21tdV9zZXRfZGlydHlfYml0KHRhYmxlX2dmbiwgaW5kZXgsIHNpemVvZihwdGUpKTsKICNpZiBQVFRZUEUgPT0gUFRUWVBFX0VQVAotCQkJaWYgKGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O3dyaXRlX2xvZ19kaXJ0eSh2Y3B1LCBhZGRyKSkKJiM0MzsJCQlpZiAoa3ZtX25lc3RlZF9jYWxsKHdyaXRlX2xvZ19kaXJ0eSkodmNwdSwgYWRkcikpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIAkJCXB0ZSB8PSBQVF9HVUVTVF9ESVJUWV9NQVNLOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKaW5kZXggYmE5ODVhMDIyMDhhM2UuLjVmNmQ5OTcxYTNmMjI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKQEAgLTIxNjIsNyAmIzQzOzIxNjIsNyBAQCBzdGF0aWMgZ3BhX3Qgc3ZtX3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLAogCXJldHVybiB3LSZndDtndmFfdG9fZ3BhKHZjcHUsIHcsIGdwYSwgYWNjZXNzLCBleGNlcHRpb24pOwogfQogCi1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0gewomIzQzO3N0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgX19pbml0ZGF0YSA9IHsKIAkubGVhdmVfbmVzdGVkID0gc3ZtX2xlYXZlX25lc3RlZCwKIAkudHJhbnNsYXRlX25lc3RlZF9ncGEgPSBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEsCiAJLmlzX2V4Y2VwdGlvbl92bWV4aXQgPSBuZXN0ZWRfc3ZtX2lzX2V4Y2VwdGlvbl92bWV4aXQsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCBlZjY5YTUxYWIyN2Y5OC4uZDM4MDdmNGFiYjQ5OWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtNTQyNiw4ICYjNDM7NTQyNiw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0gewogCS5jaGVja19pbnRlcmNlcHQgPSBzdm1fY2hlY2tfaW50ZXJjZXB0LAogCS5oYW5kbGVfZXhpdF9pcnFvZmYgPSBzdm1faGFuZGxlX2V4aXRfaXJxb2ZmLAogCi0JLm5lc3RlZF9vcHMgPSAmYW1wO3N2bV9uZXN0ZWRfb3BzLAotCiAJLmRlbGl2ZXJfaW50ZXJydXB0ID0gc3ZtX2RlbGl2ZXJfaW50ZXJydXB0LAogCS5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsCiAJLnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsCkBAIC01NjQ2LDYgJiM0Mzs1NjQ0LDcgQEAgc3RhdGljIF9faW5pdCBpbnQgc3ZtX2hhcmR3YXJlX3NldHVwKHZvaWQpCiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJfQomIzQzOwlzdm1fbmVzdGVkX29wcy5lbmFibGVkID0gbmVzdGVkOwogCiAJLyoKIAkgKiBLVk0mIzM5O3MgTU1VIGRvZXNuJiMzOTt0IHN1cHBvcnQgdXNpbmcgMi1sZXZlbCBwYWdpbmcgZm9yIGl0c2VsZiwgYW5kIHRodXMKQEAgLTU3NzIsNiAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgc3ZtX2luaXRfb3BzIF9faW5pdGRhdGEgPSB7CiAKIAkucnVudGltZV9vcHMgPSAmYW1wO3N2bV94ODZfb3BzLAogCS5wbXVfb3BzID0gJmFtcDthbWRfcG11X29wcywKJiM0MzsJLm5lc3RlZF9vcHMgPSAmYW1wO3N2bV9uZXN0ZWRfb3BzLAogfTsKIAogc3RhdGljIHZvaWQgX19zdm1fZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwppbmRleCA4M2Q5OTIxMjc3ZWFjMi4uMDRmOTg2ZTNkNDM5YWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCkBAIC05OTUsOCAmIzQzOzk5NSw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAKIAkudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSwKIAotCS5uZXN0ZWRfb3BzID0gJmFtcDt2bXhfbmVzdGVkX29wcywKLQogCS5waV91cGRhdGVfaXJ0ZSA9IHZteF9waV91cGRhdGVfaXJ0ZSwKIAkucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcywKIApAQCAtMTAzOCw2ICYjNDM7MTAzNiw3IEBAIHN0cnVjdCBrdm1feDg2X2luaXRfb3BzIHZ0X2luaXRfb3BzIF9faW5pdGRhdGEgPSB7CiAKIAkucnVudGltZV9vcHMgPSAmYW1wO3Z0X3g4Nl9vcHMsCiAJLnBtdV9vcHMgPSAmYW1wO2ludGVsX3BtdV9vcHMsCiYjNDM7CS5uZXN0ZWRfb3BzID0gJmFtcDt2bXhfbmVzdGVkX29wcywKIH07CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2dF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCAwNjM1ZTkyNDcxYzg5ZS4uY2JiMjA5ZDhhOGYwZDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwpAQCAtNzQ4NCw3ICYjNDM7NzQ4NCw3IEBAIHN0YXRpYyBncGFfdCB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCiAJcmV0dXJuIHctJmd0O2d2YV90b19ncGEodmNwdSwgdywgZ3BhLCBhY2Nlc3MsIGV4Y2VwdGlvbik7CiB9CiAKLXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7CiYjNDM7c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0gewogCS5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLAogCS50cmFuc2xhdGVfbmVzdGVkX2dwYSA9IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYSwKIAkuaXNfZXhjZXB0aW9uX3ZtZXhpdCA9IG5lc3RlZF92bXhfaXNfZXhjZXB0aW9uX3ZtZXhpdCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IDM2ODFkNTY1ZjE3Nzg5Li5lZjllMWJjMzllZGJiZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC04Nzg2LDYgJiM0Mzs4Nzg2LDcgQEAgX19pbml0IGludCB2bXhfaGFyZHdhcmVfc2V0dXAodm9pZCkKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAl9CiYjNDM7CXZteF9uZXN0ZWRfb3BzLmVuYWJsZWQgPSBuZXN0ZWQ7CiAKIAlrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKHBpX3dha2V1cF9oYW5kbGVyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDA2MjZlODM1ZTllYjc3Li41YmE0YWFjMzc2NDA2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMTU0LDYgJiM0MzsxNTQsNyBAQCBzdGF0aWMgaW50IHN5bmNfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogc3RhdGljIERFRklORV9NVVRFWCh2ZW5kb3JfbW9kdWxlX2xvY2spOwogCiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHMgX19yZWFkX21vc3RseTsKJiM0MztzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7CiAKICNkZWZpbmUgS1ZNX1g4Nl9PUChmdW5jKQkJCQkJICAgICBcCiAJREVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl8jI2Z1bmMsCQkJICAgICBcCkBAIC0xNjUsNiAmIzQzOzE2NiwxMyBAQCBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfZ2V0X2NzX2RiX2xfYml0cyk7CiBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfY2FjaGVfcmVnKTsKIEVYUE9SVF9TVEFUSUNfQ0FMTF9HUEwoa3ZtX3g4Nl9nZXRfY3BsKTsKIAomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1AoZnVuYykJCQkJCQkJXAomIzQzOwlERUZJTkVfU1RBVElDX0NBTExfTlVMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsCQkJCVwKJiM0MzsJCQkJKigoKHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKikwKS0mZ3Q7ZnVuYykpOwomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9ORVNURURfT1AKJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9ORVNURURfT1AKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oJmd0OwomIzQzOwogdW5zaWduZWQgaW50IG1pbl90aW1lcl9wZXJpb2RfdXMgPSAyMDA7CiBtb2R1bGVfcGFyYW0obWluX3RpbWVyX3BlcmlvZF91cywgdWludCwgMDY0NCk7CiAKQEAgLTQ1NCw3ICYjNDM7NDYyLDcgQEAgc3RhdGljIHZvaWQga3ZtX211bHRpcGxlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuciwKIAkgKiB3YW50cyB0byBpbnRlcmNlcHQgdGhlIGV4Y2VwdGlvbi4KIAkgKi8KIAlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2lzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgbnIsIGVycm9yX2NvZGUpKSB7CiYjNDM7CSAgICBrdm1fbmVzdGVkX2NhbGwoaXNfZXhjZXB0aW9uX3ZtZXhpdCkodmNwdSwgbnIsIGVycm9yX2NvZGUpKSB7CiAJCWt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIG5yLCBoYXNfZXJyb3IsIGVycm9yX2NvZGUsCiAJCQkJCSAgIGhhc19wYXlsb2FkLCBwYXlsb2FkKTsKIAkJcmV0dXJuOwpAQCAtMjM0NiwxNSAmIzQzOzIzNTQsMTQgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAkJCXIgJmFtcDs9IH5LVk1fWDJBUElDX0VOQUJMRV9TVVBQUkVTU19FT0lfQlJPQURDQVNUOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfTkVTVEVEX1NUQVRFOgotCQlyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Z2V0X3N0YXRlID8KLQkJCWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2dldF9zdGF0ZShOVUxMLCBOVUxMLCAwKSA6IDA7CiYjNDM7CQlyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCA/IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKE5VTEwsIE5VTEwsIDApIDogMDsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlYKIAljYXNlIEtWTV9DQVBfSFlQRVJWX0RJUkVDVF9UTEJGTFVTSDoKIAkJciA9IGt2bV94ODZfb3BzLmVuYWJsZV9sMl90bGJfZmx1c2ggIT0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOgotCQlyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7ZW5hYmxlX2V2bWNzICE9IE5VTEw7CiYjNDM7CQlyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCAmYW1wOyZhbXA7IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZV9ldm1jcyAhPSBOVUxMOwogCQlicmVhazsKICNlbmRpZgogCWNhc2UgS1ZNX0NBUF9TTUFMTEVSX01BWFBIWUFERFI6CkBAIC0zMzY2LDkgJiM0MzszMzczLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQl1aW50MTZfdCB2bWNzX3ZlcnNpb247CiAJCQl2b2lkIF9fdXNlciAqdXNlcl9wdHI7CiAKLQkJCWlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7ZW5hYmxlX2V2bWNzKQomIzQzOwkJCWlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZCB8fAomIzQzOwkJCSAgICAha3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzKQogCQkJCXJldHVybiAtRU5PVFRZOwotCQkJciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2VuYWJsZV9ldm1jcyh2Y3B1LCAmYW1wO3ZtY3NfdmVyc2lvbik7CiYjNDM7CQkJciA9IGt2bV9uZXN0ZWRfY2FsbChlbmFibGVfZXZtY3MpKHZjcHUsICZhbXA7dm1jc192ZXJzaW9uKTsKIAkJCWlmICghcikgewogCQkJCXVzZXJfcHRyID0gKHZvaWQgX191c2VyICopKHVpbnRwdHJfdCljYXAtJmd0O2FyZ3NbMF07CiAJCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX3B0ciwgJmFtcDt2bWNzX3ZlcnNpb24sCkBAIC0zNzMyLDcgJiM0MzszNzQwLDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQl1MzIgdXNlcl9kYXRhX3NpemU7CiAKIAkJciA9IC1FSU5WQUw7Ci0JCWlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Z2V0X3N0YXRlKQomIzQzOwkJaWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKQogCQkJYnJlYWs7CiAKIAkJQlVJTERfQlVHX09OKHNpemVvZih1c2VyX2RhdGFfc2l6ZSkgIT0gc2l6ZW9mKHVzZXJfa3ZtX25lc3RlZF9zdGF0ZS0mZ3Q7c2l6ZSkpOwpAQCAtMzc0MCw4ICYjNDM7Mzc0OCw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJaWYgKGdldF91c2VyKHVzZXJfZGF0YV9zaXplLCAmYW1wO3VzZXJfa3ZtX25lc3RlZF9zdGF0ZS0mZ3Q7c2l6ZSkpCiAJCQlicmVhazsKIAotCQlyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Z2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwKLQkJCQkJCSAgICAgdXNlcl9kYXRhX3NpemUpOwomIzQzOwkJciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgdXNlcl9kYXRhX3NpemUpOwogCQlpZiAociAmbHQ7IDApCiAJCQlicmVhazsKIApAQCAtMzc2Miw3ICYjNDM7Mzc2OSw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJaW50IGlkeDsKIAogCQlyID0gLUVJTlZBTDsKLQkJaWYgKCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtzZXRfc3RhdGUpCiYjNDM7CQlpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpCiAJCQlicmVhazsKIAogCQlyID0gLUVGQVVMVDsKQEAgLTM3ODUsNyAmIzQzOzM3OTIsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQlicmVhazsKIAogCQlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c3JjdSk7Ci0JCXIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtzZXRfc3RhdGUodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLCAmYW1wO2t2bV9zdGF0ZSk7CiYjNDM7CQlyID0ga3ZtX25lc3RlZF9jYWxsKHNldF9zdGF0ZSkodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLCAmYW1wO2t2bV9zdGF0ZSk7CiAJCXNyY3VfcmVhZF91bmxvY2soJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3NyY3UsIGlkeCk7CiAJCWJyZWFrOwogCX0KQEAgLTY5MDMsNiAmIzQzOzY5MTAsMjIgQEAgc3RhdGljIHZvaWQga3ZtX3NldHVwX2VmZXJfY2Fwcyh2b2lkKQogCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX0FVVE9JQlJTKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGt2bV9uZXN0ZWRfb3BzX3VwZGF0ZShjb25zdCBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICpuZXN0ZWRfb3BzKQomIzQzO3sKJiM0MzsJbWVtY3B5KCZhbXA7a3ZtX25lc3RlZF9vcHMsIG5lc3RlZF9vcHMsIHNpemVvZihrdm1fbmVzdGVkX29wcykpOwomIzQzOwomIzQzOyNkZWZpbmUgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcCiYjNDM7CXN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X25lc3RlZF8jI2Z1bmMsIGt2bV9uZXN0ZWRfb3BzLmZ1bmMpOwomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1AoZnVuYykgXAomIzQzOwlXQVJOX09OKCFrdm1fbmVzdGVkX29wcy5mdW5jKTsgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKQomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgX19LVk1fWDg2X05FU1RFRF9PUAomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMChmdW5jKSBcCiYjNDM7CXN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X25lc3RlZF8jI2Z1bmMsICh2b2lkICopa3ZtX25lc3RlZF9vcHMuZnVuYyA/IDogXAomIzQzOwkJCQkJCSAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApOwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmgmZ3Q7CiYjNDM7I3VuZGVmIF9fS1ZNX1g4Nl9ORVNURURfT1AKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX29wc191cGRhdGUoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcykKIHsKIAltZW1jcHkoJmFtcDtrdm1feDg2X29wcywgb3BzLSZndDtydW50aW1lX29wcywgc2l6ZW9mKGt2bV94ODZfb3BzKSk7CkBAIC02OTE4LDYgJiM0Mzs2OTQxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9vcHNfdXBkYXRlKHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpCiAjaW5jbHVkZSAmbHQ7YXNtL2t2bS14ODYtb3BzLmgmZ3Q7CiAjdW5kZWYgX19LVk1fWDg2X09QCiAKJiM0MzsJa3ZtX25lc3RlZF9vcHNfdXBkYXRlKG9wcy0mZ3Q7bmVzdGVkX29wcyk7CiYjNDM7CiAJa3ZtX3BtdV9vcHNfdXBkYXRlKG9wcy0mZ3Q7cG11X29wcyk7CiB9CiAKQEAgLTc0NTQsMTEgJiM0Mzs3NDc5LDExIEBAIHN0YXRpYyB2b2lkIHBvc3Rfa3ZtX3J1bl9zYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGludCBrdm1fY2hlY2tfbmVzdGVkX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpKSB7Ci0JCWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O3RyaXBsZV9mYXVsdCh2Y3B1KTsKJiM0MzsJCWt2bV9uZXN0ZWRfY2FsbCh0cmlwbGVfZmF1bHQpKHZjcHUpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlyZXR1cm4ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Y2hlY2tfZXZlbnRzKHZjcHUpOwomIzQzOwlyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKGNoZWNrX2V2ZW50cykodmNwdSk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTc2OTYsOSAmIzQzOzc3MjEsNyBAQCBzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQlrdm1feDg2X2NhbGwoZW5hYmxlX2lycV93aW5kb3cpKHZjcHUpOwogCX0KIAotCWlmIChpc19ndWVzdF9tb2RlKHZjcHUpICZhbXA7JmFtcDsKLQkgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7aGFzX2V2ZW50cyAmYW1wOyZhbXA7Ci0JICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2hhc19ldmVudHModmNwdSwgdHJ1ZSkpCiYjNDM7CWlmIChpc19ndWVzdF9tb2RlKHZjcHUpICZhbXA7JmFtcDsga3ZtX25lc3RlZF9jYWxsKGhhc19ldmVudHMpKHZjcHUsIHRydWUpKQogCQkqcmVxX2ltbWVkaWF0ZV9leGl0ID0gdHJ1ZTsKIAogCS8qCkBAIC04MDIxLDcgJiM0Mzs4MDQ0LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJfQogCiAJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpKSB7Ci0JCQlpZiAodW5saWtlbHkoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2dldF9uZXN0ZWRfc3RhdGVfcGFnZXModmNwdSkpKSB7CiYjNDM7CQkJaWYgKHVubGlrZWx5KCFrdm1fbmVzdGVkX2NhbGwoZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcykodmNwdSkpKSB7CiAJCQkJciA9IDA7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC04MDczLDcgJiM0Mzs4MDk2LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJfQogCQlpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSkpIHsKIAkJCWlmIChpc19ndWVzdF9tb2RlKHZjcHUpKQotCQkJCWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O3RyaXBsZV9mYXVsdCh2Y3B1KTsKJiM0MzsJCQkJa3ZtX25lc3RlZF9jYWxsKHRyaXBsZV9mYXVsdCkodmNwdSk7CiAKIAkJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSkpIHsKIAkJCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfU0hVVERPV047CkBAIC04NDkxLDkgJiM0Mzs4NTE0LDcgQEAgYm9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoa3ZtX2h2X2hhc19zdGltZXJfcGVuZGluZyh2Y3B1KSkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2hhc19ldmVudHMgJmFtcDsmYW1wOwotCSAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtoYXNfZXZlbnRzKHZjcHUsIGZhbHNlKSkKJiM0MzsJaWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOyBrdm1fbmVzdGVkX2NhbGwoaGFzX2V2ZW50cykodmNwdSwgZmFsc2UpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCWlmIChrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyh2Y3B1KSkKQEAgLTg4OTYsOCAmIzQzOzg5MTcsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqIGEgcGVuZGluZyBWTS1FeGl0IGlmIEwxIHdhbnRzIHRvIGludGVyY2VwdCB0aGUgZXhjZXB0aW9uLgogCSAqLwogCWlmICh2Y3B1LSZndDthcmNoLmV4Y2VwdGlvbl9mcm9tX3VzZXJzcGFjZSAmYW1wOyZhbXA7IGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOwotCSAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtpc19leGNlcHRpb25fdm1leGl0KHZjcHUsIGV4LSZndDt2ZWN0b3IsCi0JCQkJCQkJZXgtJmd0O2Vycm9yX2NvZGUpKSB7CiYjNDM7CSAgICBrdm1fbmVzdGVkX2NhbGwoaXNfZXhjZXB0aW9uX3ZtZXhpdCkodmNwdSwgZXgtJmd0O3ZlY3RvciwgZXgtJmd0O2Vycm9yX2NvZGUpKSB7CiAJCWt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIGV4LSZndDt2ZWN0b3IsCiAJCQkJCSAgIGV4LSZndDtoYXNfZXJyb3JfY29kZSwgZXgtJmd0O2Vycm9yX2NvZGUsCiAJCQkJCSAgIGV4LSZndDtoYXNfcGF5bG9hZCwgZXgtJmd0O3BheWxvYWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IDhlY2U0NjgwODdhOGVlLi5iNTEwYjYzMWYwYzUyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtOTMsNyAmIzQzOzkzLDcgQEAgaW50IGt2bV9jaGVja19uZXN0ZWRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAvKiBGb3JjaWJseSBsZWF2ZSB0aGUgbmVzdGVkIG1vZGUgaW4gY2FzZXMgbGlrZSBhIHZDUFUgcmVzZXQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtsZWF2ZV9uZXN0ZWQodmNwdSk7CiYjNDM7CWt2bV9uZXN0ZWRfY2FsbChsZWF2ZV9uZXN0ZWQpKHZjcHUpOwogfQogCiAvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTE3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTUwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMsIGVzc2VudGlhbGx5IHN3YXBwaW5nIG91dCBpbmRpcmVjdCBmdW5jdGlvbiBjYWxscyBmb3Igc3RhdGljIG9uZXMuIFRoZSBnb2FsIGlzIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGJ5IGF2b2lkaW5nIHRob3NlIHJldHBvbGluZS1pbmR1Y2luZyBpbmRpcmVjdCBicmFuY2hlcy4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYGt2bV9uZXN0ZWRfY2FsbGAgYW5kIGBLVk1fWDg2X05FU1RFRF9PUGAgbWFjcm9zLCBhbG9uZyB3aXRoIGEgYGt2bV9uZXN0ZWRfb3BzYCBzdHJ1Y3R1cmUgYW5kIGFuIGBlbmFibGVkYCBmbGFnIHdpdGhpbiBpdC4gVGhpcyBzZWVtcyBwcmV0dHkgY2xlYW4sIG1pbWlja2luZyB0aGUgZXhpc3RpbmcgYGt2bV94ODZfb3BzYCByZWZhY3Rvci4gSXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGNvcmUgeDg2IEtWTSBmaWxlcywgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLgoKRnVuY3Rpb25hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwcmltYXJpbHkgcmVwbGFjaW5nIGNoZWNrcyBsaWtlIGBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDsuLi5gIHdpdGggYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGFuZCB0aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHRocm91Z2ggYGt2bV9uZXN0ZWRfY2FsbGAuIEkgc2VlIHRoYXQgb3B0aW9uYWwgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IHJldHVybmluZyAwIGlmIHRoZXkmIzM5O3JlIG5vdCBkZWZpbmVkLCB3aGljaCAqc2VlbXMqIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgTlVMTCBjaGVja3MuIFRoZSBjaGFuZ2UgdG8gdGhlIGBnZXRfc3RhdGVgIGNoZWNrIGxvb2tzIHNhZmUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGxvZ2ljLCBidXQgd2l0aCBhIGRpZmZlcmVudCBjaGVjay4KCkkgZGlkIHNwb3Qgc29tZSBzdWJ0bGUgZGlmZmVyZW5jZXMsIGZvciBpbnN0YW5jZToKCiogICBTb21lIGNoZWNrcyBub3cgcmVxdWlyZSB0aGUgYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGNoZWNrLCB3aXRoIGEgZGlyZWN0IGNoZWNrIGZvciB0aGUgbmVzdGVkIG9wZXJhdGlvbi4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYW4gaW1wcm92ZW1lbnQgaW4gdGhlIGNhbGxpbmcgbWVjaGFuaXNtLCB3aGljaCwgd2hpbGUgY2hhbmdpbmcgdGhlIGNvbnRyb2wgZmxvdyBzbGlnaHRseSwgbWFpbnRhaW5zIHRoZSBzYW1lIGZ1bmN0aW9uYWwgb3V0cHV0LiBJdCYjMzk7cyBhYm91dCBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCByYXRoZXIgdGhhbiB0aGUgY29yZSBsb2dpYy4KCk5vdywgc2hvdWxkIHdlIGZ1enogdGhpcz8gVGhlIHByb21wdCBzYXlzICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLlB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi5DaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cmIzM0Oy4gSXQgbG9va3MgbGlrZSB0aGlzIG9uZSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIHJlbWFpbnMgdW5jaGFuZ2VkLiBIb3dldmVyLCBpbnRyb2R1Y2luZyBhIG5ldyBzdHJ1Y3R1cmUgYW5kIG5ldyBjYWxsIG1hY3JvcyBkb2VzIGNyZWF0ZSBtb3JlIHBvaW50cyBvZiBmYWlsdXJlLCB3aGljaCBzdWdnZXN0cyBpdCB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LgoKU28sIGxldCYjMzk7cyBzZWUuIE15IGZvY3VzIHBvaW50cyBzaG91bGQgaW5jbHVkZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fY2hlY2tfbmVzdGVkX2V2ZW50c2AsIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLCBgdmNwdV9lbnRlcl9ndWVzdGAsIGBrdm1fdmNwdV9oYXNfZXZlbnRzYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYWxzbyBga3ZtX2dldF9odl9jcHVpZGAsIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYC4gVGhlIGhvdCBwYXRocyBsaWtlIGB2Y3B1X2VudGVyX2d1ZXN0YCBhbmQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBhcmUgaW50ZXJlc3RpbmcsIGJ1dCBJJiMzOTtkIHJhdGhlciBhdm9pZCB0aGVtIGFzIGluaXRpYWwgZnV6emluZyBlbnRyeSBwb2ludHMuIEkmIzM5O2QgbGVhbiB0b3dhcmRzIG9uZXMgc3VjaCBhcyBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYGt2bV9nZXRfaHZfY3B1aWRgLCBhbmQgYGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVgLiBJJiMzOTtsbCBkbyBhIHF1aWNrIGdyZXAgdG8gbWFrZSBzdXJlIHRoZSBga3ZtX25lc3RlZF9vcHNgIGlzbiYjMzk7dCB1c2VkIGluIHNvbWUgYml6YXJyZSBjb3JuZXIgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbmVzdGVkX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTE5NTU9ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcztcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTk1NjpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTU3LVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0yNzcyPWludCBrdm1fZ2V0X2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNzg5LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI3OTA6XHRpZiAoa3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNzkxLVx0XHRldm1jc192ZXIgPSBrdm1fbmVzdGVkX2NhbGwoZ2V0X2V2bWNzX3ZlcnNpb24pKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xNTY9c3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzIF9fcmVhZF9tb3N0bHk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTU3OnN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMga3ZtX25lc3RlZF9vcHMgX19yZWFkX21vc3RseTtcbmFyY2gveDg2L2t2bS94ODYuYy0xNTgtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTIxOTQ9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjM1Ni1cdGNhc2UgS1ZNX0NBUF9ORVNURURfU1RBVEU6XG5hcmNoL3g4Ni9rdm0veDg2LmM6MjM1NzpcdFx0ciA9IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgPyBrdm1fbmVzdGVkX2NhbGwoZ2V0X3N0YXRlKShOVUxMLCBOVUxMLCAwKSA6IDA7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjM1OC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTIzNjMtXHRjYXNlIEtWTV9DQVBfSFlQRVJWX0VOTElHSFRFTkVEX1ZNQ1M6XG5hcmNoL3g4Ni9rdm0veDg2LmM6MjM2NDpcdFx0ciA9IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZV9ldm1jcyAhPSBOVUxMO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTIzNjUtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0zMzUyPXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTMzNzUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzM3NjpcdFx0XHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgfHxcbmFyY2gveDg2L2t2bS94ODYuYzozMzc3Olx0XHRcdCAgICAha3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTMzNzgtXHRcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MzQwNj1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NDItXHRcdHIgPSAtRUlOVkFMO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjM3NDM6XHRcdGlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbmFyY2gveDg2L2t2bS94ODYuYy0zNzQ0LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zNzcxLVx0XHRyID0gLUVJTlZBTDtcbmFyY2gveDg2L2t2bS94ODYuYzozNzcyOlx0XHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzc3My1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjkwMT1zdGF0aWMgdm9pZCBrdm1fc2V0dXBfZWZlcl9jYXBzKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTItXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjkxMzpzdGF0aWMgdm9pZCBrdm1fbmVzdGVkX29wc191cGRhdGUoY29uc3Qgc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyAqbmVzdGVkX29wcylcbmFyY2gveDg2L2t2bS94ODYuYy02OTE0LXtcbmFyY2gveDg2L2t2bS94ODYuYzo2OTE1Olx0bWVtY3B5KFx1MDAyNmt2bV9uZXN0ZWRfb3BzLCBuZXN0ZWRfb3BzLCBzaXplb2Yoa3ZtX25lc3RlZF9vcHMpKTtcbmFyY2gveDg2L2t2bS94ODYuYy02OTE2LVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTctI2RlZmluZSBfX0tWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjkxODpcdHN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X25lc3RlZF8jI2Z1bmMsIGt2bV9uZXN0ZWRfb3BzLmZ1bmMpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTktI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY5MjA6XHRXQVJOX09OKCFrdm1fbmVzdGVkX29wcy5mdW5jKTsgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MjEtI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCBfX0tWTV9YODZfTkVTVEVEX09QXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjkyMi0jZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcbmFyY2gveDg2L2t2bS94ODYuYzo2OTIzOlx0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywgKHZvaWQgKilrdm1fbmVzdGVkX29wcy5mdW5jID8gOiBcXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MjQtXHRcdFx0XHRcdFx0ICAodm9pZCAqKV9fc3RhdGljX2NhbGxfcmV0dXJuMCk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTY5Mjk9c3RhdGljIGlubGluZSB2b2lkIGt2bV9vcHNfdXBkYXRlKHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5NDMtXG5hcmNoL3g4Ni9rdm0veDg2LmM6Njk0NDpcdGt2bV9uZXN0ZWRfb3BzX3VwZGF0ZShvcHMtXHUwMDNlbmVzdGVkX29wcyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjk0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBpbiBLVk0uIFJlcGxhY2luZyB0aG9zZSBpbmRpcmVjdCBjYWxscyB3aXRoIHN0YXRpYyBjYWxscywgdXNpbmcgYGt2bV9uZXN0ZWRfb3BzYCBhbmQgYGt2bV9uZXN0ZWRfY2FsbGAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG5vdCBqdXN0IGNvc21ldGljOyBpdCYjMzk7cyBhbHRlcmluZyB0aGUgKm1ldGhvZCogb2YgaW52b2NhdGlvbi4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGluaXRpYWxpemF0aW9uIGFuZCB2YWxpZGF0aW9uIG5vdywgcGFydGljdWxhcmx5IHRoYXQgYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGZsYWcuIEEgYnVnIHRoZXJlLCBpbiB0aGUgc2V0dXAgb2YgdGhlIHN0YXRpYyBjYWxscyB0aGVtc2VsdmVzLCBvciBpbiBob3cgdGhhdCBgZW5hYmxlZGAgZmxhZyBpcyBoYW5kbGVkLCBjb3VsZCBiZSBjYXRhc3Ryb3BoaWMuIENyYXNoZXMgb3Igc3VidGxlIG1pc2JlaGF2aW9yIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhcmUgbm90IHNvbWV0aGluZyBJIHdhbnQgdG8gZGVhbCB3aXRoLCBhbmQgdGhvc2UgYXJlIHBvdGVudGlhbGx5IHZlcnkgZGlmZmljdWx0IHRvIGRlYnVnLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCwgb2J2aW91c2x5LCBpcyB0aGUgY29yZS4gVGhlbiB3ZSBoYXZlIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAsIHdoaWNoIGFyZSBlc3NlbnRpYWwgYmVjYXVzZSB0aGV5IHByb3ZpZGUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIFRoZSBkaWZmIGFsc28gYnJpbmdzIHVwIGBLVk1fSFlQRVJWYC4gTm93LCBpcyB0aGF0IGEgc2VwYXJhdGUgb3B0aW9uPyBPciBpcyBpdCBhIHN1Yi1vcHRpb24sIG9yIHBlcmhhcHMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBLVk1gIGlzPyBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy4KCkFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHJldmlldyB0aG9zZSBmb2N1c2VkIHN5bWJvbHM6IGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLCBga3ZtX2dldF9odl9jcHVpZGAsIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYCwgYW5kIGBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwYC4gVGhleSBhcmUgbGlrZWx5IGF0IHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgY2hhbmdpbmcsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGNhbGxlZCBhbmQgY2hhbmdlZCB0byBlbnN1cmUgbm90aGluZyBpcyBicm9rZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9IWVBFUlYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTgyPWNvbmZpZyBLVk1fU01NXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjEyCgkJCQkJCQlvdXRwdXQ6IDE4MAoJCQkJCQkJdGhvdWdodHM6IDQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCB0aGlzIHBhdGNoIG92ZXIsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGBLVk1fSFlQRVJWYCBpbiB0aGUgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IHRoaXMgcmVmYWN0b3JpbmcgdG91Y2hlcy4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBhbmQgY29uZmlybSB0aGUgY2hvaWNlcy4KCkZyb20gdGhlIGFuYWx5c2lzLCB0aGlzIGlzICoqd29ydGggZnV6emluZyoqLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBzb3VuZC4gVGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGhvdyBLVk0gaGFuZGxlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIHNwZWNpZmljYWxseSBtb3ZpbmcgZnJvbSBpbmRpcmVjdCBmdW5jdGlvbiBwb2ludGVycyB0byBzdGF0aWMgY2FsbHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IHRoYXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gc3RlcHMsIHBhcnRpY3VsYXJseSB0aGUgYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGNoZWNrLiBHaXZlbiB0aGlzIGNoYW5nZSBpbiBjb250cm9sIGZsb3csIGFueSBidWdzIGhlcmUgY291bGQgYmUgbmFzdHksIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvcnMgd2hlbiBuZXN0aW5nIFZNcywgd2hpY2ggY2FuIGJlIGRpZmZpY3VsdCB0byBkaWFnbm9zZS4KClRoZSBpbml0aWFsIHNlbGVjdGlvbiBvZiAqKmZvY3VzIHN5bWJvbHMqKiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgcmV2aWV3ZWQgdGhlIGxpc3QgYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBzdXJlOiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCwgYGt2bV9nZXRfaHZfY3B1aWRgLCBga3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZWAsIGFuZCBga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcGAuCgpEb3VibGUtY2hlY2tpbmcsIGBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwYCBoYW5kbGVzIGBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTYCB3aGljaCwgYXMgZXhwZWN0ZWQsIHVsdGltYXRlbHkgdXNlcyBga3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzYC4gUGVyZmVjdC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHN5bWJvbC4KClRoZW4sIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBkZWFscyB3aXRoIGBLVk1fQ0FQX05FU1RFRF9TVEFURWAgYW5kIGBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTYCwgYW5kIHRoYXQgYWxpZ25zIHdpdGggdGhlIGNoYW5nZXMgYW5kIG5ldyBsb2dpYy4gSXQmIzM5O3MgYSB2YWxpZCBjaG9pY2UuCgpga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaGFuZGxpbmcgb2YgYEtWTV9HRVRfTkVTVEVEX1NUQVRFYCBhbmQgYEtWTV9TRVRfTkVTVEVEX1NUQVRFYCBtYWtlcyBpdCBhIHNvbGlkIGNob2ljZS4KCmBrdm1fZ2V0X2h2X2NwdWlkYCB1c2VzIGBnZXRfZXZtY3NfdmVyc2lvbmAsIHNvIGl0IGFsc28gd2FycmFudHMgc2NydXRpbnkuCgpBbmQgZmluYWxseSwgYGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVgIGlzIGNhbGxpbmcgYGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoYCwgc28gaXQgZml0cyB0aGUgZm9jdXMgdG9vLgoKWWVzLCB0aGlzIGlzIGFsbCBnb29kLiBJIGNhbiBwcm9jZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfaHZfY3B1aWQmIzM0OywKICAgICYjMzQ7a3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMgdG8gdXNlIHN0YXRpYyBjYWxscyBpbnN0ZWFkIG9mIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIGNoYW5nZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG1lY2hhbmlzbSBhbmQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gYW5kIGNoZWNraW5nIGxvZ2ljIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKS4gQnVncyBpbiB0aGlzIHJlZmFjdG9yaW5nIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OywKICAgICYjMzQ7a3ZtX2dldF9odl9jcHVpZCYjMzQ7LAogICAgJiMzNDtrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyB0byB1c2Ugc3RhdGljIGNhbGxzIGluc3RlYWQgb2YgaW5kaXJlY3QgZnVuY3Rpb24gcG9pbnRlcnMuIFRoaXMgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgbWVjaGFuaXNtIGFuZCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgbG9naWMgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpLiBCdWdzIGluIHRoaXMgcmVmYWN0b3JpbmcgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6NTY6MzguNDYzNTg2NTg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0OTgzMTU1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCIsXG4gICAgXCJrdm1fZ2V0X2h2X2NwdWlkXCIsXG4gICAgXCJrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyB0byB1c2Ugc3RhdGljIGNhbGxzIGluc3RlYWQgb2YgaW5kaXJlY3QgZnVuY3Rpb24gcG9pbnRlcnMuIFRoaXMgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgbWVjaGFuaXNtIGFuZCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgbG9naWMgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpLiBCdWdzIGluIHRoaXMgcmVmYWN0b3JpbmcgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjo1NjozOC40NjM1OTU2OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTE0Nzc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyNmI1MzgyNWFhYzJmMzllMzE3MzdkZjdhNTZjYTcxYmIyMzBkYjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwMjo1NjozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGIxYmU1YmNlY2FhNDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcXG5AQCAtMCwwICsxLDM2IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZiAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUCkgfHwgXFxcXFxcbisgICAgIWRlZmluZWQoS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwpIHx8IFxcXFxcXG4rICAgICFkZWZpbmVkKEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDApXFxuKyNlcnJvciBNaXNzaW5nIG9uZSBvciBtb3JlIEtWTV9YODZfTkVTVEVEX09QICNkZWZpbmVzXFxuKyNlbHNlXFxuKy8qXFxuKyAqIEtWTV9YODZfTkVTVEVEX09QKCkgYW5kIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKCkgYXJlIHVzZWQgdG8gaGVscFxcbisgKiBnZW5lcmF0ZSBib3RoIERFQ0xBUkUvREVGSU5FX1NUQVRJQ19DQUxMKCkgaW52b2NhdGlvbnMgYW5kXFxuKyAqIFxcXCJzdGF0aWNfY2FsbF91cGRhdGUoKVxcXCIgY2FsbHMuXFxuKyAqXFxuKyAqIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKCkgY2FuIGJlIHVzZWQgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGNhbiBoYXZlXFxuKyAqIGEgTlVMTCBkZWZpbml0aW9uLiAgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCgpIGNhbiBiZSB1c2VkIGxpa2V3aXNlXFxuKyAqIHRvIG1ha2UgYSBkZWZpbml0aW9uIG9wdGlvbmFsLCBidXQgaW4gdGhpcyBjYXNlIHRoZSBkZWZhdWx0IHdpbGxcXG4rICogYmUgX19zdGF0aWNfY2FsbF9yZXR1cm4wLlxcbisgKi9cXG4rS1ZNX1g4Nl9ORVNURURfT1AobGVhdmVfbmVzdGVkKVxcbitLVk1fWDg2X05FU1RFRF9PUChpc19leGNlcHRpb25fdm1leGl0KVxcbitLVk1fWDg2X05FU1RFRF9PUChjaGVja19ldmVudHMpXFxuK0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoaGFzX2V2ZW50cylcXG4rS1ZNX1g4Nl9ORVNURURfT1AodHJpcGxlX2ZhdWx0KVxcbitLVk1fWDg2X05FU1RFRF9PUChnZXRfc3RhdGUpXFxuK0tWTV9YODZfTkVTVEVEX09QKHNldF9zdGF0ZSlcXG4rS1ZNX1g4Nl9ORVNURURfT1AoZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcylcXG4rS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCh3cml0ZV9sb2dfZGlydHkpXFxuK0tWTV9YODZfTkVTVEVEX09QKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKVxcbisjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG4rS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwoZW5hYmxlX2V2bWNzKVxcbitLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKGdldF9ldm1jc192ZXJzaW9uKVxcbitLVk1fWDg2X05FU1RFRF9PUChodl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaClcXG4rI2VuZGlmXFxuKyNlbmRpZlxcbitcXG4rI3VuZGVmIEtWTV9YODZfTkVTVEVEX09QXFxuKyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTFxcbisjdW5kZWYgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi43ZTA3YTljMjU5ZDA5MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xODQyLDggKzE4NDIsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbiBcXG4gXFx0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuLVxcdGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XFxuLVxcbiBcXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0dm9pZCAoKnZjcHVfdW5ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuQEAgLTE5MDYsNiArMTkwNCw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHtcXG4rXFx0Ym9vbCBlbmFibGVkO1xcbitcXG4gXFx0dm9pZCAoKmxlYXZlX25lc3RlZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0Ym9vbCAoKmlzX2V4Y2VwdGlvbl92bWV4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yLFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIGVycm9yX2NvZGUpO1xcbkBAIC0xOTM3LDYgKzE5MzcsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyB7XFxuIFxcbiBcXHRzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKnJ1bnRpbWVfb3BzO1xcbiBcXHRzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHM7XFxuK1xcdHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3ZtX2FyY2hfYXN5bmNfcGYge1xcbkBAIC0xOTUyLDYgKzE5NTMsNyBAQCBleHRlcm4gYm9vbCBfX3JlYWRfbW9zdGx5IGVuYWJsZV9hcGljdjtcXG4gZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfaXBpdjtcXG4gZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfZGV2aWNlX3Bvc3RlZF9pcnFzO1xcbiBleHRlcm4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzO1xcbitleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xcbiBcXG4gI2RlZmluZSBrdm1feDg2X2NhbGwoZnVuYykgc3RhdGljX2NhbGwoa3ZtX3g4Nl8jI2Z1bmMpXFxuIFxcbkBAIC0xOTYxLDYgKzE5NjMsMTQgQEAgZXh0ZXJuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcztcXG4gI2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9PUFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bS14ODYtb3BzLmhcXHUwMDNlXFxuIFxcbisjZGVmaW5lIGt2bV9uZXN0ZWRfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2X25lc3RlZF8jI2Z1bmMpXFxuK1xcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXFxcXG4rXFx0REVDTEFSRV9TVEFUSUNfQ0FMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsICooKChzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICopMCktXFx1MDAzZWZ1bmMpKTtcXG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCBLVk1fWDg2X05FU1RFRF9PUFxcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9ORVNURURfT1BcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFxcdTAwM2VcXG4rXFxuICNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcXG5pbmRleCAxZWUwZDIzZjg5NDk3NC4uYjAxMGRjYTM3YjlkMWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jXFxuQEAgLTI0MDYsNyArMjQwNiw3IEBAIHN0YXRpYyBpbnQga3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCByZXN1bHQpXFxuIFxcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbiBcXG4gXFx0aWYgKHRsYl9sb2NrX2NvdW50KVxcbi1cXHRcXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2Vodl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaCh2Y3B1KTtcXG4rXFx0XFx0a3ZtX25lc3RlZF9jYWxsKGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKSh2Y3B1KTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMjc4Nyw4ICsyNzg3LDggQEAgaW50IGt2bV9nZXRfaHZfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsXFxuIFxcdH07XFxuIFxcdGludCBpLCBuZW50ID0gQVJSQVlfU0laRShjcHVpZF9lbnRyaWVzKTtcXG4gXFxuLVxcdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfZXZtY3NfdmVyc2lvbilcXG4tXFx0XFx0ZXZtY3NfdmVyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X2V2bWNzX3ZlcnNpb24odmNwdSk7XFxuK1xcdGlmIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxcbitcXHRcXHRldm1jc192ZXIgPSBrdm1fbmVzdGVkX2NhbGwoZ2V0X2V2bWNzX3ZlcnNpb24pKHZjcHUpO1xcbiBcXG4gXFx0aWYgKGNwdWlkLVxcdTAwM2VuZW50IFxcdTAwM2MgbmVudClcXG4gXFx0XFx0cmV0dXJuIC1FMkJJRztcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oXFxuaW5kZXggYzlmNjI4Yjk3ZGFlYjkuLmZhMDVjYTJjODU0OWU1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaFxcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUuaFxcbkBAIC0zODUsOSArMzg1LDggQEAgc3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0aWYgKCFtbXVfaXNfbmVzdGVkKHZjcHUpIHx8IHcgPT0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubmdwYV93YWxrKVxcbiBcXHRcXHRyZXR1cm4gZ3BhO1xcbi1cXHRyZXR1cm4ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNldHJhbnNsYXRlX25lc3RlZF9ncGEodmNwdSwgZ3BhLCBhY2Nlc3MsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBleGNlcHRpb24sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwdGVfYWNjZXNzKTtcXG4rXFx0cmV0dXJuIGt2bV9uZXN0ZWRfY2FsbCh0cmFuc2xhdGVfbmVzdGVkX2dwYSkodmNwdSwgZ3BhLCBhY2Nlc3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oXFxuaW5kZXggZTczZmMwOWVjNGRiMmUuLjRlZTdiMDNlNzYyZDBmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaFxcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaFxcbkBAIC0yMzUsNyArMjM1LDcgQEAgc3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHQhKHB0ZSBcXHUwMDI2IFBUX0dVRVNUX0RJUlRZX01BU0spKSB7XFxuIFxcdFxcdFxcdHRyYWNlX2t2bV9tbXVfc2V0X2RpcnR5X2JpdCh0YWJsZV9nZm4sIGluZGV4LCBzaXplb2YocHRlKSk7XFxuICNpZiBQVFRZUEUgPT0gUFRUWVBFX0VQVFxcbi1cXHRcXHRcXHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNld3JpdGVfbG9nX2RpcnR5KHZjcHUsIGFkZHIpKVxcbitcXHRcXHRcXHRpZiAoa3ZtX25lc3RlZF9jYWxsKHdyaXRlX2xvZ19kaXJ0eSkodmNwdSwgYWRkcikpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAjZW5kaWZcXG4gXFx0XFx0XFx0cHRlIHw9IFBUX0dVRVNUX0RJUlRZX01BU0s7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuaW5kZXggYmE5ODVhMDIyMDhhM2UuLjVmNmQ5OTcxYTNmMjI0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuQEAgLTIxNjIsNyArMjE2Miw3IEBAIHN0YXRpYyBncGFfdCBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuIFxcdHJldHVybiB3LVxcdTAwM2VndmFfdG9fZ3BhKHZjcHUsIHcsIGdwYSwgYWNjZXNzLCBleGNlcHRpb24pO1xcbiB9XFxuIFxcbi1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0ge1xcbitzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzIF9faW5pdGRhdGEgPSB7XFxuIFxcdC5sZWF2ZV9uZXN0ZWQgPSBzdm1fbGVhdmVfbmVzdGVkLFxcbiBcXHQudHJhbnNsYXRlX25lc3RlZF9ncGEgPSBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEsXFxuIFxcdC5pc19leGNlcHRpb25fdm1leGl0ID0gbmVzdGVkX3N2bV9pc19leGNlcHRpb25fdm1leGl0LFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li5kMzgwN2Y0YWJiNDk5ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC01NDI2LDggKzU0MjYsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LmNoZWNrX2ludGVyY2VwdCA9IHN2bV9jaGVja19pbnRlcmNlcHQsXFxuIFxcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSBzdm1faGFuZGxlX2V4aXRfaXJxb2ZmLFxcbiBcXG4tXFx0Lm5lc3RlZF9vcHMgPSBcXHUwMDI2c3ZtX25lc3RlZF9vcHMsXFxuLVxcbiBcXHQuZGVsaXZlcl9pbnRlcnJ1cHQgPSBzdm1fZGVsaXZlcl9pbnRlcnJ1cHQsXFxuIFxcdC5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsXFxuIFxcdC5zZXR1cF9tY2UgPSBzdm1fc2V0dXBfbWNlLFxcbkBAIC01NjQ2LDYgKzU2NDQsNyBAQCBzdGF0aWMgX19pbml0IGludCBzdm1faGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbiBcXHR9XFxuK1xcdHN2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgPSBuZXN0ZWQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBLVk0ncyBNTVUgZG9lc24ndCBzdXBwb3J0IHVzaW5nIDItbGV2ZWwgcGFnaW5nIGZvciBpdHNlbGYsIGFuZCB0aHVzXFxuQEAgLTU3NzIsNiArNTc3MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyBzdm1faW5pdF9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFxuIFxcdC5ydW50aW1lX29wcyA9IFxcdTAwMjZzdm1feDg2X29wcyxcXG4gXFx0LnBtdV9vcHMgPSBcXHUwMDI2YW1kX3BtdV9vcHMsXFxuK1xcdC5uZXN0ZWRfb3BzID0gXFx1MDAyNnN2bV9uZXN0ZWRfb3BzLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgX19zdm1fZXhpdCh2b2lkKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuaW5kZXggODNkOTkyMTI3N2VhYzIuLjA0Zjk4NmUzZDQzOWFmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5AQCAtOTk1LDggKzk5NSw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuIFxcbiBcXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSxcXG4gXFxuLVxcdC5uZXN0ZWRfb3BzID0gXFx1MDAyNnZteF9uZXN0ZWRfb3BzLFxcbi1cXG4gXFx0LnBpX3VwZGF0ZV9pcnRlID0gdm14X3BpX3VwZGF0ZV9pcnRlLFxcbiBcXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcXG4gXFxuQEAgLTEwMzgsNiArMTAzNiw3IEBAIHN0cnVjdCBrdm1feDg2X2luaXRfb3BzIHZ0X2luaXRfb3BzIF9faW5pdGRhdGEgPSB7XFxuIFxcbiBcXHQucnVudGltZV9vcHMgPSBcXHUwMDI2dnRfeDg2X29wcyxcXG4gXFx0LnBtdV9vcHMgPSBcXHUwMDI2aW50ZWxfcG11X29wcyxcXG4rXFx0Lm5lc3RlZF9vcHMgPSBcXHUwMDI2dm14X25lc3RlZF9vcHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdnRfZXhpdCh2b2lkKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbmluZGV4IDA2MzVlOTI0NzFjODllLi5jYmIyMDlkOGE4ZjBkMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbkBAIC03NDg0LDcgKzc0ODQsNyBAQCBzdGF0aWMgZ3BhX3Qgdm14X3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbiBcXHRyZXR1cm4gdy1cXHUwMDNlZ3ZhX3RvX2dwYSh2Y3B1LCB3LCBncGEsIGFjY2VzcywgZXhjZXB0aW9uKTtcXG4gfVxcbiBcXG4tc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcXG4rc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQubGVhdmVfbmVzdGVkID0gdm14X2xlYXZlX25lc3RlZCxcXG4gXFx0LnRyYW5zbGF0ZV9uZXN0ZWRfZ3BhID0gdm14X3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhLFxcbiBcXHQuaXNfZXhjZXB0aW9uX3ZtZXhpdCA9IG5lc3RlZF92bXhfaXNfZXhjZXB0aW9uX3ZtZXhpdCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCAzNjgxZDU2NWYxNzc4OS4uZWY5ZTFiYzM5ZWRiYmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5AQCAtODc4Niw2ICs4Nzg2LDcgQEAgX19pbml0IGludCB2bXhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbiBcXHR9XFxuK1xcdHZteF9uZXN0ZWRfb3BzLmVuYWJsZWQgPSBuZXN0ZWQ7XFxuIFxcbiBcXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKHBpX3dha2V1cF9oYW5kbGVyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IDA2MjZlODM1ZTllYjc3Li41YmE0YWFjMzc2NDA2YyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMTU0LDYgKzE1NCw3IEBAIHN0YXRpYyBpbnQgc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgodmVuZG9yX21vZHVsZV9sb2NrKTtcXG4gXFxuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcyBfX3JlYWRfbW9zdGx5O1xcbitzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7XFxuIFxcbiAjZGVmaW5lIEtWTV9YODZfT1AoZnVuYylcXHRcXHRcXHRcXHRcXHQgICAgIFxcXFxcXG4gXFx0REVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl8jI2Z1bmMsXFx0XFx0XFx0ICAgICBcXFxcXFxuQEAgLTE2NSw2ICsxNjYsMTMgQEAgRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2dldF9jc19kYl9sX2JpdHMpO1xcbiBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfY2FjaGVfcmVnKTtcXG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2dldF9jcGwpO1xcbiBcXG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0REVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl9uZXN0ZWRfIyNmdW5jLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0KigoKHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKikwKS1cXHUwMDNlZnVuYykpO1xcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIEtWTV9YODZfTkVTVEVEX09QXFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X05FU1RFRF9PUFxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXFx1MDAzZVxcbitcXG4gdW5zaWduZWQgaW50IG1pbl90aW1lcl9wZXJpb2RfdXMgPSAyMDA7XFxuIG1vZHVsZV9wYXJhbShtaW5fdGltZXJfcGVyaW9kX3VzLCB1aW50LCAwNjQ0KTtcXG4gXFxuQEAgLTQ1NCw3ICs0NjIsNyBAQCBzdGF0aWMgdm9pZCBrdm1fbXVsdGlwbGVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG5yLFxcbiBcXHQgKiB3YW50cyB0byBpbnRlcmNlcHQgdGhlIGV4Y2VwdGlvbi5cXG4gXFx0ICovXFxuIFxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2Vpc19leGNlcHRpb25fdm1leGl0KHZjcHUsIG5yLCBlcnJvcl9jb2RlKSkge1xcbitcXHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIG5yLCBlcnJvcl9jb2RlKSkge1xcbiBcXHRcXHRrdm1fcXVldWVfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgaGFzX2Vycm9yLCBlcnJvcl9jb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBoYXNfcGF5bG9hZCwgcGF5bG9hZCk7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjM0NiwxNSArMjM1NCwxNCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRcXHRcXHRyIFxcdTAwMjY9IH5LVk1fWDJBUElDX0VOQUJMRV9TVVBQUkVTU19FT0lfQlJPQURDQVNUO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX05FU1RFRF9TVEFURTpcXG4tXFx0XFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWdldF9zdGF0ZSA/XFxuLVxcdFxcdFxcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWdldF9zdGF0ZShOVUxMLCBOVUxMLCAwKSA6IDA7XFxuK1xcdFxcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkID8ga3ZtX25lc3RlZF9jYWxsKGdldF9zdGF0ZSkoTlVMTCwgTlVMTCwgMCkgOiAwO1xcbiBcXHRcXHRicmVhaztcXG4gI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuIFxcdGNhc2UgS1ZNX0NBUF9IWVBFUlZfRElSRUNUX1RMQkZMVVNIOlxcbiBcXHRcXHRyID0ga3ZtX3g4Nl9vcHMuZW5hYmxlX2wyX3RsYl9mbHVzaCAhPSBOVUxMO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOlxcbi1cXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZW5hYmxlX2V2bWNzICE9IE5VTEw7XFxuK1xcdFxcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZV9ldm1jcyAhPSBOVUxMO1xcbiBcXHRcXHRicmVhaztcXG4gI2VuZGlmXFxuIFxcdGNhc2UgS1ZNX0NBUF9TTUFMTEVSX01BWFBIWUFERFI6XFxuQEAgLTMzNjYsOSArMzM3MywxMCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHR1aW50MTZfdCB2bWNzX3ZlcnNpb247XFxuIFxcdFxcdFxcdHZvaWQgX191c2VyICp1c2VyX3B0cjtcXG4gXFxuLVxcdFxcdFxcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZW5hYmxlX2V2bWNzKVxcbitcXHRcXHRcXHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgfHxcXG4rXFx0XFx0XFx0ICAgICFrdm1fbmVzdGVkX29wcy5lbmFibGVfZXZtY3MpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi1cXHRcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZW5hYmxlX2V2bWNzKHZjcHUsIFxcdTAwMjZ2bWNzX3ZlcnNpb24pO1xcbitcXHRcXHRcXHRyID0ga3ZtX25lc3RlZF9jYWxsKGVuYWJsZV9ldm1jcykodmNwdSwgXFx1MDAyNnZtY3NfdmVyc2lvbik7XFxuIFxcdFxcdFxcdGlmICghcikge1xcbiBcXHRcXHRcXHRcXHR1c2VyX3B0ciA9ICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpY2FwLVxcdTAwM2VhcmdzWzBdO1xcbiBcXHRcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHVzZXJfcHRyLCBcXHUwMDI2dm1jc192ZXJzaW9uLFxcbkBAIC0zNzMyLDcgKzM3NDAsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdHUzMiB1c2VyX2RhdGFfc2l6ZTtcXG4gXFxuIFxcdFxcdHIgPSAtRUlOVkFMO1xcbi1cXHRcXHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWdldF9zdGF0ZSlcXG4rXFx0XFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2YodXNlcl9kYXRhX3NpemUpICE9IHNpemVvZih1c2VyX2t2bV9uZXN0ZWRfc3RhdGUtXFx1MDAzZXNpemUpKTtcXG5AQCAtMzc0MCw4ICszNzQ4LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRpZiAoZ2V0X3VzZXIodXNlcl9kYXRhX3NpemUsIFxcdTAwMjZ1c2VyX2t2bV9uZXN0ZWRfc3RhdGUtXFx1MDAzZXNpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfc3RhdGUodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVzZXJfZGF0YV9zaXplKTtcXG4rXFx0XFx0ciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgdXNlcl9kYXRhX3NpemUpO1xcbiBcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5AQCAtMzc2Miw3ICszNzY5LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRpbnQgaWR4O1xcbiBcXG4gXFx0XFx0ciA9IC1FSU5WQUw7XFxuLVxcdFxcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlc2V0X3N0YXRlKVxcbitcXHRcXHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuQEAgLTM3ODUsNyArMzc5Miw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG4tXFx0XFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZXNldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFxcdTAwMjZrdm1fc3RhdGUpO1xcbitcXHRcXHRyID0ga3ZtX25lc3RlZF9jYWxsKHNldF9zdGF0ZSkodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLCBcXHUwMDI2a3ZtX3N0YXRlKTtcXG4gXFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC02OTAzLDYgKzY5MTAsMjIgQEAgc3RhdGljIHZvaWQga3ZtX3NldHVwX2VmZXJfY2Fwcyh2b2lkKVxcbiBcXHRcXHRrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX0FVVE9JQlJTKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3ZtX25lc3RlZF9vcHNfdXBkYXRlKGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHMpXFxuK3tcXG4rXFx0bWVtY3B5KFxcdTAwMjZrdm1fbmVzdGVkX29wcywgbmVzdGVkX29wcywgc2l6ZW9mKGt2bV9uZXN0ZWRfb3BzKSk7XFxuK1xcbisjZGVmaW5lIF9fS1ZNX1g4Nl9ORVNURURfT1AoZnVuYykgXFxcXFxcbitcXHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9uZXN0ZWRfIyNmdW5jLCBrdm1fbmVzdGVkX29wcy5mdW5jKTtcXG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxcXFxuK1xcdFdBUk5fT04oIWt2bV9uZXN0ZWRfb3BzLmZ1bmMpOyBfX0tWTV9YODZfTkVTVEVEX09QKGZ1bmMpXFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgX19LVk1fWDg2X05FU1RFRF9PUFxcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcXFxcbitcXHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9uZXN0ZWRfIyNmdW5jLCAodm9pZCAqKWt2bV9uZXN0ZWRfb3BzLmZ1bmMgPyA6IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAodm9pZCAqKV9fc3RhdGljX2NhbGxfcmV0dXJuMCk7XFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcXHUwMDNlXFxuKyN1bmRlZiBfX0tWTV9YODZfTkVTVEVEX09QXFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fb3BzX3VwZGF0ZShzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbiB7XFxuIFxcdG1lbWNweShcXHUwMDI2a3ZtX3g4Nl9vcHMsIG9wcy1cXHUwMDNlcnVudGltZV9vcHMsIHNpemVvZihrdm1feDg2X29wcykpO1xcbkBAIC02OTE4LDYgKzY5NDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX29wc191cGRhdGUoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0teDg2LW9wcy5oXFx1MDAzZVxcbiAjdW5kZWYgX19LVk1fWDg2X09QXFxuIFxcbitcXHRrdm1fbmVzdGVkX29wc191cGRhdGUob3BzLVxcdTAwM2VuZXN0ZWRfb3BzKTtcXG4rXFxuIFxcdGt2bV9wbXVfb3BzX3VwZGF0ZShvcHMtXFx1MDAzZXBtdV9vcHMpO1xcbiB9XFxuIFxcbkBAIC03NDU0LDExICs3NDc5LDExIEBAIHN0YXRpYyB2b2lkIHBvc3Rfa3ZtX3J1bl9zYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gaW50IGt2bV9jaGVja19uZXN0ZWRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSkpIHtcXG4tXFx0XFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNldHJpcGxlX2ZhdWx0KHZjcHUpO1xcbitcXHRcXHRrdm1fbmVzdGVkX2NhbGwodHJpcGxlX2ZhdWx0KSh2Y3B1KTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VjaGVja19ldmVudHModmNwdSk7XFxuK1xcdHJldHVybiBrdm1fbmVzdGVkX2NhbGwoY2hlY2tfZXZlbnRzKSh2Y3B1KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQga3ZtX2luamVjdF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC03Njk2LDkgKzc3MjEsNyBAQCBzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzKHZjcHUsIHRydWUpKVxcbitcXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcXHUwMDI2XFx1MDAyNiBrdm1fbmVzdGVkX2NhbGwoaGFzX2V2ZW50cykodmNwdSwgdHJ1ZSkpXFxuIFxcdFxcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xcbiBcXG4gXFx0LypcXG5AQCAtODAyMSw3ICs4MDQ0LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcXG4tXFx0XFx0XFx0aWYgKHVubGlrZWx5KCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHZjcHUpKSkge1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkoIWt2bV9uZXN0ZWRfY2FsbChnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKSh2Y3B1KSkpIHtcXG4gXFx0XFx0XFx0XFx0ciA9IDA7XFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRcXHR9XFxuQEAgLTgwNzMsNyArODA5Niw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpKSB7XFxuIFxcdFxcdFxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpKVxcbi1cXHRcXHRcXHRcXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2V0cmlwbGVfZmF1bHQodmNwdSk7XFxuK1xcdFxcdFxcdFxcdGt2bV9uZXN0ZWRfY2FsbCh0cmlwbGVfZmF1bHQpKHZjcHUpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xcbiBcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfU0hVVERPV047XFxuQEAgLTg0OTEsOSArODUxNCw3IEBAIGJvb2wga3ZtX3ZjcHVfaGFzX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmIChrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzKHZjcHUsIGZhbHNlKSlcXG4rXFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjYga3ZtX25lc3RlZF9jYWxsKGhhc19ldmVudHMpKHZjcHUsIGZhbHNlKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRpZiAoa3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHModmNwdSkpXFxuQEAgLTg4OTYsOCArODkxNyw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqIGEgcGVuZGluZyBWTS1FeGl0IGlmIEwxIHdhbnRzIHRvIGludGVyY2VwdCB0aGUgZXhjZXB0aW9uLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uX2Zyb21fdXNlcnNwYWNlIFxcdTAwMjZcXHUwMDI2IGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXFx1MDAzZXZlY3RvcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZXgtXFx1MDAzZWVycm9yX2NvZGUpKSB7XFxuK1xcdCAgICBrdm1fbmVzdGVkX2NhbGwoaXNfZXhjZXB0aW9uX3ZtZXhpdCkodmNwdSwgZXgtXFx1MDAzZXZlY3RvciwgZXgtXFx1MDAzZWVycm9yX2NvZGUpKSB7XFxuIFxcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIGV4LVxcdTAwM2V2ZWN0b3IsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGV4LVxcdTAwM2VoYXNfZXJyb3JfY29kZSwgZXgtXFx1MDAzZWVycm9yX2NvZGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGV4LVxcdTAwM2VoYXNfcGF5bG9hZCwgZXgtXFx1MDAzZXBheWxvYWQpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcXG5pbmRleCA4ZWNlNDY4MDg3YThlZS4uYjUxMGI2MzFmMGM1MjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXFxuQEAgLTkzLDcgKzkzLDcgQEAgaW50IGt2bV9jaGVja19uZXN0ZWRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIC8qIEZvcmNpYmx5IGxlYXZlIHRoZSBuZXN0ZWQgbW9kZSBpbiBjYXNlcyBsaWtlIGEgdkNQVSByZXNldCAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlbGVhdmVfbmVzdGVkKHZjcHUpO1xcbitcXHRrdm1fbmVzdGVkX2NhbGwobGVhdmVfbmVzdGVkKSh2Y3B1KTtcXG4gfVxcbiBcXG4gLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6NTY6MzkuNDI3NjgzNDkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUzNDE5ODk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxcIixcbiAgICBcImt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25cIixcbiAgICBcImt2bV9nZXRfaHZfY3B1aWRcIixcbiAgICBcImt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVcIixcbiAgICBcImt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvcGVyYXRpb25zIHRvIHVzZSBzdGF0aWMgY2FsbHMgaW5zdGVhZCBvZiBpbmRpcmVjdCBmdW5jdGlvbiBwb2ludGVycy4gVGhpcyBjaGFuZ2VzIHRoZSBleGVjdXRpb24gZmxvdyBtZWNoYW5pc20gYW5kIGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uIGFuZCBjaGVja2luZyBsb2dpYyAoa3ZtX25lc3RlZF9vcHMuZW5hYmxlZCkuIEJ1Z3MgaW4gdGhpcyByZWZhY3RvcmluZyBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI2YjUzODI1YWFjMmYzOWUzMTczN2RmN2E1NmNhNzFiYjIzMGRiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDI6NTY6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMWJlNWJjZWNhYTQ4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFxuQEAgLTAsMCArMSwzNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmICFkZWZpbmVkKEtWTV9YODZfTkVTVEVEX09QKSB8fCBcXFxuKyAgICAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCkgfHwgXFxcbisgICAgIWRlZmluZWQoS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMClcbisjZXJyb3IgTWlzc2luZyBvbmUgb3IgbW9yZSBLVk1fWDg2X05FU1RFRF9PUCAjZGVmaW5lc1xuKyNlbHNlXG4rLypcbisgKiBLVk1fWDg2X05FU1RFRF9PUCgpIGFuZCBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCgpIGFyZSB1c2VkIHRvIGhlbHBcbisgKiBnZW5lcmF0ZSBib3RoIERFQ0xBUkUvREVGSU5FX1NUQVRJQ19DQUxMKCkgaW52b2NhdGlvbnMgYW5kXG4rICogXCJzdGF0aWNfY2FsbF91cGRhdGUoKVwiIGNhbGxzLlxuKyAqXG4rICogS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwoKSBjYW4gYmUgdXNlZCBmb3IgdGhvc2UgZnVuY3Rpb25zIHRoYXQgY2FuIGhhdmVcbisgKiBhIE5VTEwgZGVmaW5pdGlvbi4gIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoKSBjYW4gYmUgdXNlZCBsaWtld2lzZVxuKyAqIHRvIG1ha2UgYSBkZWZpbml0aW9uIG9wdGlvbmFsLCBidXQgaW4gdGhpcyBjYXNlIHRoZSBkZWZhdWx0IHdpbGxcbisgKiBiZSBfX3N0YXRpY19jYWxsX3JldHVybjAuXG4rICovXG4rS1ZNX1g4Nl9ORVNURURfT1AobGVhdmVfbmVzdGVkKVxuK0tWTV9YODZfTkVTVEVEX09QKGlzX2V4Y2VwdGlvbl92bWV4aXQpXG4rS1ZNX1g4Nl9ORVNURURfT1AoY2hlY2tfZXZlbnRzKVxuK0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoaGFzX2V2ZW50cylcbitLVk1fWDg2X05FU1RFRF9PUCh0cmlwbGVfZmF1bHQpXG4rS1ZNX1g4Nl9ORVNURURfT1AoZ2V0X3N0YXRlKVxuK0tWTV9YODZfTkVTVEVEX09QKHNldF9zdGF0ZSlcbitLVk1fWDg2X05FU1RFRF9PUChnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKVxuK0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAod3JpdGVfbG9nX2RpcnR5KVxuK0tWTV9YODZfTkVTVEVEX09QKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKVxuKyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuK0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKGVuYWJsZV9ldm1jcylcbitLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKGdldF9ldm1jc192ZXJzaW9uKVxuK0tWTV9YODZfTkVTVEVEX09QKGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKVxuKyNlbmRpZlxuKyNlbmRpZlxuK1xuKyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUFxuKyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTFxuKyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi43ZTA3YTljMjU5ZDA5MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xODQyLDggKzE4NDIsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFxuIFx0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1cdGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XG4tXG4gXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG5AQCAtMTkwNiw2ICsxOTA0LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiB9O1xuIFxuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMge1xuK1x0Ym9vbCBlbmFibGVkO1xuK1xuIFx0dm9pZCAoKmxlYXZlX25lc3RlZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGJvb2wgKCppc19leGNlcHRpb25fdm1leGl0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3RvcixcbiBcdFx0XHRcdCAgICB1MzIgZXJyb3JfY29kZSk7XG5AQCAtMTkzNyw2ICsxOTM3LDcgQEAgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMge1xuIFxuIFx0c3RydWN0IGt2bV94ODZfb3BzICpydW50aW1lX29wcztcbiBcdHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcztcbitcdHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfYXN5bmNfcGYge1xuQEAgLTE5NTIsNiArMTk1Myw3IEBAIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2FwaWN2O1xuIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2lwaXY7XG4gZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfZGV2aWNlX3Bvc3RlZF9pcnFzO1xuIGV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XG4rZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMga3ZtX25lc3RlZF9vcHMgX19yZWFkX21vc3RseTtcbiBcbiAjZGVmaW5lIGt2bV94ODZfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2XyMjZnVuYylcbiBcbkBAIC0xOTYxLDYgKzE5NjMsMTQgQEAgZXh0ZXJuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcztcbiAjZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X09QXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bS14ODYtb3BzLmhcdTAwM2VcbiBcbisjZGVmaW5lIGt2bV9uZXN0ZWRfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2X25lc3RlZF8jI2Z1bmMpXG4rXG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxuK1x0REVDTEFSRV9TVEFUSUNfQ0FMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsICooKChzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICopMCktXHUwMDNlZnVuYykpO1xuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9ORVNURURfT1BcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9ORVNURURfT1BcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcdTAwM2VcbitcbiAjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9WTV9BTExPQ1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2h5cGVydi5jIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jXG5pbmRleCAxZWUwZDIzZjg5NDk3NC4uYjAxMGRjYTM3YjlkMWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuQEAgLTI0MDYsNyArMjQwNiw3IEBAIHN0YXRpYyBpbnQga3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCByZXN1bHQpXG4gXHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbiBcbiBcdGlmICh0bGJfbG9ja19jb3VudClcbi1cdFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2Vodl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaCh2Y3B1KTtcbitcdFx0a3ZtX25lc3RlZF9jYWxsKGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKSh2Y3B1KTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI3ODcsOCArMjc4Nyw4IEBAIGludCBrdm1fZ2V0X2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLFxuIFx0fTtcbiBcdGludCBpLCBuZW50ID0gQVJSQVlfU0laRShjcHVpZF9lbnRyaWVzKTtcbiBcbi1cdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9ldm1jc192ZXJzaW9uKVxuLVx0XHRldm1jc192ZXIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9ldm1jc192ZXJzaW9uKHZjcHUpO1xuK1x0aWYgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXG4rXHRcdGV2bWNzX3ZlciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfZXZtY3NfdmVyc2lvbikodmNwdSk7XG4gXG4gXHRpZiAoY3B1aWQtXHUwMDNlbmVudCBcdTAwM2MgbmVudClcbiBcdFx0cmV0dXJuIC1FMkJJRztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmhcbmluZGV4IGM5ZjYyOGI5N2RhZWI5Li5mYTA1Y2EyYzg1NDllNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS5oXG5AQCAtMzg1LDkgKzM4NSw4IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIHtcbiBcdGlmICghbW11X2lzX25lc3RlZCh2Y3B1KSB8fCB3ID09IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5uZ3BhX3dhbGspXG4gXHRcdHJldHVybiBncGE7XG4tXHRyZXR1cm4ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2V0cmFuc2xhdGVfbmVzdGVkX2dwYSh2Y3B1LCBncGEsIGFjY2Vzcyxcbi1cdFx0XHRcdFx0XHRcdCAgICBleGNlcHRpb24sXG4tXHRcdFx0XHRcdFx0XHQgICAgcHRlX2FjY2Vzcyk7XG4rXHRyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKSh2Y3B1LCBncGEsIGFjY2VzcyxcbitcdFx0XHRcdFx0XHQgICAgIGV4Y2VwdGlvbiwgcHRlX2FjY2Vzcyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oXG5pbmRleCBlNzNmYzA5ZWM0ZGIyZS4uNGVlN2IwM2U3NjJkMGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmhcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaFxuQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgaW50IEZOQU1FKHVwZGF0ZV9hY2Nlc3NlZF9kaXJ0eV9iaXRzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHQhKHB0ZSBcdTAwMjYgUFRfR1VFU1RfRElSVFlfTUFTSykpIHtcbiBcdFx0XHR0cmFjZV9rdm1fbW11X3NldF9kaXJ0eV9iaXQodGFibGVfZ2ZuLCBpbmRleCwgc2l6ZW9mKHB0ZSkpO1xuICNpZiBQVFRZUEUgPT0gUFRUWVBFX0VQVFxuLVx0XHRcdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXdyaXRlX2xvZ19kaXJ0eSh2Y3B1LCBhZGRyKSlcbitcdFx0XHRpZiAoa3ZtX25lc3RlZF9jYWxsKHdyaXRlX2xvZ19kaXJ0eSkodmNwdSwgYWRkcikpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAjZW5kaWZcbiBcdFx0XHRwdGUgfD0gUFRfR1VFU1RfRElSVFlfTUFTSztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuaW5kZXggYmE5ODVhMDIyMDhhM2UuLjVmNmQ5OTcxYTNmMjI0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuQEAgLTIxNjIsNyArMjE2Miw3IEBAIHN0YXRpYyBncGFfdCBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4gXHRyZXR1cm4gdy1cdTAwM2VndmFfdG9fZ3BhKHZjcHUsIHcsIGdwYSwgYWNjZXNzLCBleGNlcHRpb24pO1xuIH1cbiBcbi1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0ge1xuK3N0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5sZWF2ZV9uZXN0ZWQgPSBzdm1fbGVhdmVfbmVzdGVkLFxuIFx0LnRyYW5zbGF0ZV9uZXN0ZWRfZ3BhID0gc3ZtX3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhLFxuIFx0LmlzX2V4Y2VwdGlvbl92bWV4aXQgPSBuZXN0ZWRfc3ZtX2lzX2V4Y2VwdGlvbl92bWV4aXQsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li5kMzgwN2Y0YWJiNDk5ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NDI2LDggKzU0MjYsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5jaGVja19pbnRlcmNlcHQgPSBzdm1fY2hlY2tfaW50ZXJjZXB0LFxuIFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHN2bV9oYW5kbGVfZXhpdF9pcnFvZmYsXG4gXG4tXHQubmVzdGVkX29wcyA9IFx1MDAyNnN2bV9uZXN0ZWRfb3BzLFxuLVxuIFx0LmRlbGl2ZXJfaW50ZXJydXB0ID0gc3ZtX2RlbGl2ZXJfaW50ZXJydXB0LFxuIFx0LnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSxcbiBcdC5zZXR1cF9tY2UgPSBzdm1fc2V0dXBfbWNlLFxuQEAgLTU2NDYsNiArNTY0NCw3IEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbitcdHN2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgPSBuZXN0ZWQ7XG4gXG4gXHQvKlxuIFx0ICogS1ZNJ3MgTU1VIGRvZXNuJ3Qgc3VwcG9ydCB1c2luZyAyLWxldmVsIHBhZ2luZyBmb3IgaXRzZWxmLCBhbmQgdGh1c1xuQEAgLTU3NzIsNiArNTc3MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyBzdm1faW5pdF9vcHMgX19pbml0ZGF0YSA9IHtcbiBcbiBcdC5ydW50aW1lX29wcyA9IFx1MDAyNnN2bV94ODZfb3BzLFxuIFx0LnBtdV9vcHMgPSBcdTAwMjZhbWRfcG11X29wcyxcbitcdC5uZXN0ZWRfb3BzID0gXHUwMDI2c3ZtX25lc3RlZF9vcHMsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBfX3N2bV9leGl0KHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggODNkOTkyMTI3N2VhYzIuLjA0Zjk4NmUzZDQzOWFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtOTk1LDggKzk5NSw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXG4gXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSxcbiBcbi1cdC5uZXN0ZWRfb3BzID0gXHUwMDI2dm14X25lc3RlZF9vcHMsXG4tXG4gXHQucGlfdXBkYXRlX2lydGUgPSB2bXhfcGlfdXBkYXRlX2lydGUsXG4gXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcbiBcbkBAIC0xMDM4LDYgKzEwMzYsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyB2dF9pbml0X29wcyBfX2luaXRkYXRhID0ge1xuIFxuIFx0LnJ1bnRpbWVfb3BzID0gXHUwMDI2dnRfeDg2X29wcyxcbiBcdC5wbXVfb3BzID0gXHUwMDI2aW50ZWxfcG11X29wcyxcbitcdC5uZXN0ZWRfb3BzID0gXHUwMDI2dm14X25lc3RlZF9vcHMsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdnRfZXhpdCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAwNjM1ZTkyNDcxYzg5ZS4uY2JiMjA5ZDhhOGYwZDEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNzQ4NCw3ICs3NDg0LDcgQEAgc3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbiBcdHJldHVybiB3LVx1MDAzZWd2YV90b19ncGEodmNwdSwgdywgZ3BhLCBhY2Nlc3MsIGV4Y2VwdGlvbik7XG4gfVxuIFxuLXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XG4rc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmxlYXZlX25lc3RlZCA9IHZteF9sZWF2ZV9uZXN0ZWQsXG4gXHQudHJhbnNsYXRlX25lc3RlZF9ncGEgPSB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEsXG4gXHQuaXNfZXhjZXB0aW9uX3ZtZXhpdCA9IG5lc3RlZF92bXhfaXNfZXhjZXB0aW9uX3ZtZXhpdCxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggMzY4MWQ1NjVmMTc3ODkuLmVmOWUxYmMzOWVkYmJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTg3ODYsNiArODc4Niw3IEBAIF9faW5pdCBpbnQgdm14X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHRcdGlmIChyKVxuIFx0XHRcdHJldHVybiByO1xuIFx0fVxuK1x0dm14X25lc3RlZF9vcHMuZW5hYmxlZCA9IG5lc3RlZDtcbiBcbiBcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIocGlfd2FrZXVwX2hhbmRsZXIpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjViYTRhYWMzNzY0MDZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0xNTQsNiArMTU0LDcgQEAgc3RhdGljIGludCBzeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKHZlbmRvcl9tb2R1bGVfbG9jayk7XG4gXG4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzIF9fcmVhZF9tb3N0bHk7XG4rc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xuIFxuICNkZWZpbmUgS1ZNX1g4Nl9PUChmdW5jKVx0XHRcdFx0XHQgICAgIFxcXG4gXHRERUZJTkVfU1RBVElDX0NBTExfTlVMTChrdm1feDg2XyMjZnVuYyxcdFx0XHQgICAgIFxcXG5AQCAtMTY1LDYgKzE2NiwxMyBAQCBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfZ2V0X2NzX2RiX2xfYml0cyk7XG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2NhY2hlX3JlZyk7XG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2dldF9jcGwpO1xuIFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1AoZnVuYylcdFx0XHRcdFx0XHRcdFxcXG4rXHRERUZJTkVfU1RBVElDX0NBTExfTlVMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsXHRcdFx0XHRcXFxuK1x0XHRcdFx0KigoKHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKikwKS1cdTAwM2VmdW5jKSk7XG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCBLVk1fWDg2X05FU1RFRF9PUFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X05FU1RFRF9PUFxuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFx1MDAzZVxuK1xuIHVuc2lnbmVkIGludCBtaW5fdGltZXJfcGVyaW9kX3VzID0gMjAwO1xuIG1vZHVsZV9wYXJhbShtaW5fdGltZXJfcGVyaW9kX3VzLCB1aW50LCAwNjQ0KTtcbiBcbkBAIC00NTQsNyArNDYyLDcgQEAgc3RhdGljIHZvaWQga3ZtX211bHRpcGxlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBucixcbiBcdCAqIHdhbnRzIHRvIGludGVyY2VwdCB0aGUgZXhjZXB0aW9uLlxuIFx0ICovXG4gXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgbnIsIGVycm9yX2NvZGUpKSB7XG4rXHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIG5yLCBlcnJvcl9jb2RlKSkge1xuIFx0XHRrdm1fcXVldWVfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgaGFzX2Vycm9yLCBlcnJvcl9jb2RlLFxuIFx0XHRcdFx0XHQgICBoYXNfcGF5bG9hZCwgcGF5bG9hZCk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzQ2LDE1ICsyMzU0LDE0IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRcdFx0ciBcdTAwMjY9IH5LVk1fWDJBUElDX0VOQUJMRV9TVVBQUkVTU19FT0lfQlJPQURDQVNUO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX0NBUF9ORVNURURfU1RBVEU6XG4tXHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9zdGF0ZSA/XG4tXHRcdFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUoTlVMTCwgTlVMTCwgMCkgOiAwO1xuK1x0XHRyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCA/IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKE5VTEwsIE5VTEwsIDApIDogMDtcbiBcdFx0YnJlYWs7XG4gI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4gXHRjYXNlIEtWTV9DQVBfSFlQRVJWX0RJUkVDVF9UTEJGTFVTSDpcbiBcdFx0ciA9IGt2bV94ODZfb3BzLmVuYWJsZV9sMl90bGJfZmx1c2ggIT0gTlVMTDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfSFlQRVJWX0VOTElHSFRFTkVEX1ZNQ1M6XG4tXHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWVuYWJsZV9ldm1jcyAhPSBOVUxMO1xuK1x0XHRyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzICE9IE5VTEw7XG4gXHRcdGJyZWFrO1xuICNlbmRpZlxuIFx0Y2FzZSBLVk1fQ0FQX1NNQUxMRVJfTUFYUEhZQUREUjpcbkBAIC0zMzY2LDkgKzMzNzMsMTAgQEAgc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHR1aW50MTZfdCB2bWNzX3ZlcnNpb247XG4gXHRcdFx0dm9pZCBfX3VzZXIgKnVzZXJfcHRyO1xuIFxuLVx0XHRcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VlbmFibGVfZXZtY3MpXG4rXHRcdFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkIHx8XG4rXHRcdFx0ICAgICFrdm1fbmVzdGVkX29wcy5lbmFibGVfZXZtY3MpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbi1cdFx0XHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VlbmFibGVfZXZtY3ModmNwdSwgXHUwMDI2dm1jc192ZXJzaW9uKTtcbitcdFx0XHRyID0ga3ZtX25lc3RlZF9jYWxsKGVuYWJsZV9ldm1jcykodmNwdSwgXHUwMDI2dm1jc192ZXJzaW9uKTtcbiBcdFx0XHRpZiAoIXIpIHtcbiBcdFx0XHRcdHVzZXJfcHRyID0gKHZvaWQgX191c2VyICopKHVpbnRwdHJfdCljYXAtXHUwMDNlYXJnc1swXTtcbiBcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9wdHIsIFx1MDAyNnZtY3NfdmVyc2lvbixcbkBAIC0zNzMyLDcgKzM3NDAsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdHUzMiB1c2VyX2RhdGFfc2l6ZTtcbiBcbiBcdFx0ciA9IC1FSU5WQUw7XG4tXHRcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUpXG4rXHRcdGlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0QlVJTERfQlVHX09OKHNpemVvZih1c2VyX2RhdGFfc2l6ZSkgIT0gc2l6ZW9mKHVzZXJfa3ZtX25lc3RlZF9zdGF0ZS1cdTAwM2VzaXplKSk7XG5AQCAtMzc0MCw4ICszNzQ4LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRpZiAoZ2V0X3VzZXIodXNlcl9kYXRhX3NpemUsIFx1MDAyNnVzZXJfa3ZtX25lc3RlZF9zdGF0ZS1cdTAwM2VzaXplKSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSxcbi1cdFx0XHRcdFx0XHQgICAgIHVzZXJfZGF0YV9zaXplKTtcbitcdFx0ciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgdXNlcl9kYXRhX3NpemUpO1xuIFx0XHRpZiAociBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0zNzYyLDcgKzM3NjksNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdGludCBpZHg7XG4gXG4gXHRcdHIgPSAtRUlOVkFMO1xuLVx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKVxuK1x0XHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdHIgPSAtRUZBVUxUO1xuQEAgLTM3ODUsNyArMzc5Miw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4tXHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXNldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFx1MDAyNmt2bV9zdGF0ZSk7XG4rXHRcdHIgPSBrdm1fbmVzdGVkX2NhbGwoc2V0X3N0YXRlKSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFx1MDAyNmt2bV9zdGF0ZSk7XG4gXHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNjkwMyw2ICs2OTEwLDIyIEBAIHN0YXRpYyB2b2lkIGt2bV9zZXR1cF9lZmVyX2NhcHModm9pZClcbiBcdFx0a3ZtX2VuYWJsZV9lZmVyX2JpdHMoRUZFUl9BVVRPSUJSUyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGt2bV9uZXN0ZWRfb3BzX3VwZGF0ZShjb25zdCBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICpuZXN0ZWRfb3BzKVxuK3tcbitcdG1lbWNweShcdTAwMjZrdm1fbmVzdGVkX29wcywgbmVzdGVkX29wcywgc2l6ZW9mKGt2bV9uZXN0ZWRfb3BzKSk7XG4rXG4rI2RlZmluZSBfX0tWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG4rXHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9uZXN0ZWRfIyNmdW5jLCBrdm1fbmVzdGVkX29wcy5mdW5jKTtcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG4rXHRXQVJOX09OKCFrdm1fbmVzdGVkX29wcy5mdW5jKTsgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKVxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgX19LVk1fWDg2X05FU1RFRF9PUFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMChmdW5jKSBcXFxuK1x0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywgKHZvaWQgKilrdm1fbmVzdGVkX29wcy5mdW5jID8gOiBcXFxuK1x0XHRcdFx0XHRcdCAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApO1xuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFx1MDAzZVxuKyN1bmRlZiBfX0tWTV9YODZfTkVTVEVEX09QXG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fb3BzX3VwZGF0ZShzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxuIHtcbiBcdG1lbWNweShcdTAwMjZrdm1feDg2X29wcywgb3BzLVx1MDAzZXJ1bnRpbWVfb3BzLCBzaXplb2Yoa3ZtX3g4Nl9vcHMpKTtcbkBAIC02OTE4LDYgKzY5NDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX29wc191cGRhdGUoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1vcHMuaFx1MDAzZVxuICN1bmRlZiBfX0tWTV9YODZfT1BcbiBcbitcdGt2bV9uZXN0ZWRfb3BzX3VwZGF0ZShvcHMtXHUwMDNlbmVzdGVkX29wcyk7XG4rXG4gXHRrdm1fcG11X29wc191cGRhdGUob3BzLVx1MDAzZXBtdV9vcHMpO1xuIH1cbiBcbkBAIC03NDU0LDExICs3NDc5LDExIEBAIHN0YXRpYyB2b2lkIHBvc3Rfa3ZtX3J1bl9zYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuLVx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcbitcdFx0a3ZtX25lc3RlZF9jYWxsKHRyaXBsZV9mYXVsdCkodmNwdSk7XG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlY2hlY2tfZXZlbnRzKHZjcHUpO1xuK1x0cmV0dXJuIGt2bV9uZXN0ZWRfY2FsbChjaGVja19ldmVudHMpKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNzY5Niw5ICs3NzIxLDcgQEAgc3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XG4gXHR9XG4gXG4tXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHMgXHUwMDI2XHUwMDI2XG4tXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VoYXNfZXZlbnRzKHZjcHUsIHRydWUpKVxuK1x0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGt2bV9uZXN0ZWRfY2FsbChoYXNfZXZlbnRzKSh2Y3B1LCB0cnVlKSlcbiBcdFx0KnJlcV9pbW1lZGlhdGVfZXhpdCA9IHRydWU7XG4gXG4gXHQvKlxuQEAgLTgwMjEsNyArODA0NCw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcbi1cdFx0XHRpZiAodW5saWtlbHkoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyh2Y3B1KSkpIHtcbitcdFx0XHRpZiAodW5saWtlbHkoIWt2bV9uZXN0ZWRfY2FsbChnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKSh2Y3B1KSkpIHtcbiBcdFx0XHRcdHIgPSAwO1xuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuQEAgLTgwNzMsNyArODA5Niw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdH1cbiBcdFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpKSB7XG4gXHRcdFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXG4tXHRcdFx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcbitcdFx0XHRcdGt2bV9uZXN0ZWRfY2FsbCh0cmlwbGVfZmF1bHQpKHZjcHUpO1xuIFxuIFx0XHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSkpIHtcbiBcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfU0hVVERPV047XG5AQCAtODQ5MSw5ICs4NTE0LDcgQEAgYm9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHZjcHUpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHModmNwdSwgZmFsc2UpKVxuK1x0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGt2bV9uZXN0ZWRfY2FsbChoYXNfZXZlbnRzKSh2Y3B1LCBmYWxzZSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0aWYgKGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzKHZjcHUpKVxuQEAgLTg4OTYsOCArODkxNyw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBhIHBlbmRpbmcgVk0tRXhpdCBpZiBMMSB3YW50cyB0byBpbnRlcmNlcHQgdGhlIGV4Y2VwdGlvbi5cbiBcdCAqL1xuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5leGNlcHRpb25fZnJvbV91c2Vyc3BhY2UgXHUwMDI2XHUwMDI2IGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2Vpc19leGNlcHRpb25fdm1leGl0KHZjcHUsIGV4LVx1MDAzZXZlY3Rvcixcbi1cdFx0XHRcdFx0XHRcdGV4LVx1MDAzZWVycm9yX2NvZGUpKSB7XG4rXHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIGV4LVx1MDAzZXZlY3RvciwgZXgtXHUwMDNlZXJyb3JfY29kZSkpIHtcbiBcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXHUwMDNldmVjdG9yLFxuIFx0XHRcdFx0XHQgICBleC1cdTAwM2VoYXNfZXJyb3JfY29kZSwgZXgtXHUwMDNlZXJyb3JfY29kZSxcbiBcdFx0XHRcdFx0ICAgZXgtXHUwMDNlaGFzX3BheWxvYWQsIGV4LVx1MDAzZXBheWxvYWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggOGVjZTQ2ODA4N2E4ZWUuLmI1MTBiNjMxZjBjNTIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC05Myw3ICs5Myw3IEBAIGludCBrdm1fY2hlY2tfbmVzdGVkX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIC8qIEZvcmNpYmx5IGxlYXZlIHRoZSBuZXN0ZWQgbW9kZSBpbiBjYXNlcyBsaWtlIGEgdkNQVSByZXNldCAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWxlYXZlX25lc3RlZCh2Y3B1KTtcbitcdGt2bV9uZXN0ZWRfY2FsbChsZWF2ZV9uZXN0ZWQpKHZjcHUpO1xuIH1cbiBcbiAvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6NTY6MzkuNDI3Njg4NTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY5MDczMTc2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQncyByZWZhY3RvcmluZyB0aGUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvcGVyYXRpb25zLCBlc3NlbnRpYWxseSBzd2FwcGluZyBvdXQgaW5kaXJlY3QgZnVuY3Rpb24gY2FsbHMgZm9yIHN0YXRpYyBvbmVzLiBUaGUgZ29hbCBpcyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBieSBhdm9pZGluZyB0aG9zZSByZXRwb2xpbmUtaW5kdWNpbmcgaW5kaXJlY3QgYnJhbmNoZXMuIFRoZXkncmUgaW50cm9kdWNpbmcgYGt2bV9uZXN0ZWRfY2FsbGAgYW5kIGBLVk1fWDg2X05FU1RFRF9PUGAgbWFjcm9zLCBhbG9uZyB3aXRoIGEgYGt2bV9uZXN0ZWRfb3BzYCBzdHJ1Y3R1cmUgYW5kIGFuIGBlbmFibGVkYCBmbGFnIHdpdGhpbiBpdC4gVGhpcyBzZWVtcyBwcmV0dHkgY2xlYW4sIG1pbWlja2luZyB0aGUgZXhpc3RpbmcgYGt2bV94ODZfb3BzYCByZWZhY3Rvci4gSXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGNvcmUgeDg2IEtWTSBmaWxlcywgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLlxuXG5GdW5jdGlvbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zLiBJdCBsb29rcyBsaWtlIGl0J3MgcHJpbWFyaWx5IHJlcGxhY2luZyBjaGVja3MgbGlrZSBga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2UuLi5gIHdpdGggYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGFuZCB0aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHRocm91Z2ggYGt2bV9uZXN0ZWRfY2FsbGAuIEkgc2VlIHRoYXQgb3B0aW9uYWwgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IHJldHVybmluZyAwIGlmIHRoZXkncmUgbm90IGRlZmluZWQsIHdoaWNoICpzZWVtcyogZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZCBOVUxMIGNoZWNrcy4gVGhlIGNoYW5nZSB0byB0aGUgYGdldF9zdGF0ZWAgY2hlY2sgbG9va3Mgc2FmZS4gSXQncyBlc3NlbnRpYWxseSB0aGUgc2FtZSBsb2dpYywgYnV0IHdpdGggYSBkaWZmZXJlbnQgY2hlY2suXG5cbkkgZGlkIHNwb3Qgc29tZSBzdWJ0bGUgZGlmZmVyZW5jZXMsIGZvciBpbnN0YW5jZTpcblxuKiAgIFNvbWUgY2hlY2tzIG5vdyByZXF1aXJlIHRoZSBga3ZtX25lc3RlZF9vcHMuZW5hYmxlZGAgY2hlY2ssIHdpdGggYSBkaXJlY3QgY2hlY2sgZm9yIHRoZSBuZXN0ZWQgb3BlcmF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFuIGltcHJvdmVtZW50IGluIHRoZSBjYWxsaW5nIG1lY2hhbmlzbSwgd2hpY2gsIHdoaWxlIGNoYW5naW5nIHRoZSBjb250cm9sIGZsb3cgc2xpZ2h0bHksIG1haW50YWlucyB0aGUgc2FtZSBmdW5jdGlvbmFsIG91dHB1dC4gSXQncyBhYm91dCBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCByYXRoZXIgdGhhbiB0aGUgY29yZSBsb2dpYy5cblxuTm93LCBzaG91bGQgd2UgZnV6eiB0aGlzPyBUaGUgcHJvbXB0IHNheXMgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcy4uLkNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvd1wiLiBJdCBsb29rcyBsaWtlIHRoaXMgb25lIGZhbGxzIHVuZGVyIHRoYXQgY2F0ZWdvcnksIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgbG9naWMgcmVtYWlucyB1bmNoYW5nZWQuIEhvd2V2ZXIsIGludHJvZHVjaW5nIGEgbmV3IHN0cnVjdHVyZSBhbmQgbmV3IGNhbGwgbWFjcm9zIGRvZXMgY3JlYXRlIG1vcmUgcG9pbnRzIG9mIGZhaWx1cmUsIHdoaWNoIHN1Z2dlc3RzIGl0IHdhcnJhbnRzIGZ1cnRoZXIgc2NydXRpbnkuXG5cblNvLCBsZXQncyBzZWUuIE15IGZvY3VzIHBvaW50cyBzaG91bGQgaW5jbHVkZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fY2hlY2tfbmVzdGVkX2V2ZW50c2AsIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLCBgdmNwdV9lbnRlcl9ndWVzdGAsIGBrdm1fdmNwdV9oYXNfZXZlbnRzYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYWxzbyBga3ZtX2dldF9odl9jcHVpZGAsIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYC4gVGhlIGhvdCBwYXRocyBsaWtlIGB2Y3B1X2VudGVyX2d1ZXN0YCBhbmQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBhcmUgaW50ZXJlc3RpbmcsIGJ1dCBJJ2QgcmF0aGVyIGF2b2lkIHRoZW0gYXMgaW5pdGlhbCBmdXp6aW5nIGVudHJ5IHBvaW50cy4gSSdkIGxlYW4gdG93YXJkcyBvbmVzIHN1Y2ggYXMgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGBrdm1fZ2V0X2h2X2NwdWlkYCwgYW5kIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYC4gSSdsbCBkbyBhIHF1aWNrIGdyZXAgdG8gbWFrZSBzdXJlIHRoZSBga3ZtX25lc3RlZF9vcHNgIGlzbid0IHVzZWQgaW4gc29tZSBiaXphcnJlIGNvcm5lciBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjU2OjU2LjMzNTAwOTg3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk4NjUwMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9uZXN0ZWRfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTk1NT1leHRlcm4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTk1NjpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTk1Ny1cXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0yNzcyPWludCBrdm1fZ2V0X2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI3ODktXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI3OTA6XFx0aWYgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI3OTEtXFx0XFx0ZXZtY3NfdmVyID0ga3ZtX25lc3RlZF9jYWxsKGdldF9ldm1jc192ZXJzaW9uKSh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xNTY9c3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzIF9fcmVhZF9tb3N0bHk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjE1NzpzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTE1OC1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0yMTk0PWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjM1Ni1cXHRjYXNlIEtWTV9DQVBfTkVTVEVEX1NUQVRFOlxcbmFyY2gveDg2L2t2bS94ODYuYzoyMzU3OlxcdFxcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkID8ga3ZtX25lc3RlZF9jYWxsKGdldF9zdGF0ZSkoTlVMTCwgTlVMTCwgMCkgOiAwO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yMzU4LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTIzNjMtXFx0Y2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOlxcbmFyY2gveDg2L2t2bS94ODYuYzoyMzY0OlxcdFxcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZV9ldm1jcyAhPSBOVUxMO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yMzY1LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTMzNTI9c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMzc1LVxcbmFyY2gveDg2L2t2bS94ODYuYzozMzc2OlxcdFxcdFxcdGlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZCB8fFxcbmFyY2gveDg2L2t2bS94ODYuYzozMzc3OlxcdFxcdFxcdCAgICAha3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMzc4LVxcdFxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTM0MDY9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NDItXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjM3NDM6XFx0XFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zNzQ0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NzEtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjM3NzI6XFx0XFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zNzczLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY5MDE9c3RhdGljIHZvaWQga3ZtX3NldHVwX2VmZXJfY2Fwcyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTItXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY5MTM6c3RhdGljIHZvaWQga3ZtX25lc3RlZF9vcHNfdXBkYXRlKGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHMpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTQte1xcbmFyY2gveDg2L2t2bS94ODYuYzo2OTE1OlxcdG1lbWNweShcXHUwMDI2a3ZtX25lc3RlZF9vcHMsIG5lc3RlZF9vcHMsIHNpemVvZihrdm1fbmVzdGVkX29wcykpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02OTE2LVxcbmFyY2gveDg2L2t2bS94ODYuYy02OTE3LSNkZWZpbmUgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxcXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY5MTg6XFx0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywga3ZtX25lc3RlZF9vcHMuZnVuYyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTktI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxcXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY5MjA6XFx0V0FSTl9PTigha3ZtX25lc3RlZF9vcHMuZnVuYyk7IF9fS1ZNX1g4Nl9ORVNURURfT1AoZnVuYylcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjkyMS0jZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIF9fS1ZNX1g4Nl9ORVNURURfT1BcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjkyMi0jZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcXFxcbmFyY2gveDg2L2t2bS94ODYuYzo2OTIzOlxcdHN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X25lc3RlZF8jI2Z1bmMsICh2b2lkICopa3ZtX25lc3RlZF9vcHMuZnVuYyA/IDogXFxcXFxcbmFyY2gveDg2L2t2bS94ODYuYy02OTI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY5Mjk9c3RhdGljIGlubGluZSB2b2lkIGt2bV9vcHNfdXBkYXRlKHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjk0My1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6Njk0NDpcXHRrdm1fbmVzdGVkX29wc191cGRhdGUob3BzLVxcdTAwM2VuZXN0ZWRfb3BzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjk0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6NTc6MDMuMjMzNjY4OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDUzMDYzMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgaW4gS1ZNLiBSZXBsYWNpbmcgdGhvc2UgaW5kaXJlY3QgY2FsbHMgd2l0aCBzdGF0aWMgY2FsbHMsIHVzaW5nIGBrdm1fbmVzdGVkX29wc2AgYW5kIGBrdm1fbmVzdGVkX2NhbGxgLCB0aGF0J3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0IG1lYW5zIGl0J3Mgbm90IGp1c3QgY29zbWV0aWM7IGl0J3MgYWx0ZXJpbmcgdGhlICptZXRob2QqIG9mIGludm9jYXRpb24uIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdmFsaWRhdGlvbiBub3csIHBhcnRpY3VsYXJseSB0aGF0IGBrdm1fbmVzdGVkX29wcy5lbmFibGVkYCBmbGFnLiBBIGJ1ZyB0aGVyZSwgaW4gdGhlIHNldHVwIG9mIHRoZSBzdGF0aWMgY2FsbHMgdGhlbXNlbHZlcywgb3IgaW4gaG93IHRoYXQgYGVuYWJsZWRgIGZsYWcgaXMgaGFuZGxlZCwgY291bGQgYmUgY2F0YXN0cm9waGljLiBDcmFzaGVzIG9yIHN1YnRsZSBtaXNiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYXJlIG5vdCBzb21ldGhpbmcgSSB3YW50IHRvIGRlYWwgd2l0aCwgYW5kIHRob3NlIGFyZSBwb3RlbnRpYWxseSB2ZXJ5IGRpZmZpY3VsdCB0byBkZWJ1Zy5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCwgb2J2aW91c2x5LCBpcyB0aGUgY29yZS4gVGhlbiB3ZSBoYXZlIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAsIHdoaWNoIGFyZSBlc3NlbnRpYWwgYmVjYXVzZSB0aGV5IHByb3ZpZGUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIFRoZSBkaWZmIGFsc28gYnJpbmdzIHVwIGBLVk1fSFlQRVJWYC4gTm93LCBpcyB0aGF0IGEgc2VwYXJhdGUgb3B0aW9uPyBPciBpcyBpdCBhIHN1Yi1vcHRpb24sIG9yIHBlcmhhcHMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBLVk1gIGlzPyBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy5cblxuQW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gcmV2aWV3IHRob3NlIGZvY3VzZWQgc3ltYm9sczogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fZ2V0X2h2X2NwdWlkYCwgYGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVgLCBhbmQgYGt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXBgLiBUaGV5IGFyZSBsaWtlbHkgYXQgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgdGhhdCdzIGNoYW5naW5nLCBhbmQgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGNhbGxlZCBhbmQgY2hhbmdlZCB0byBlbnN1cmUgbm90aGluZyBpcyBicm9rZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjU3OjA5LjY4NjczNjExNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMxNDI1OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSFlQRVJWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjU3OjE1LjkxODE3MjEwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NDcyMjUxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgYEtWTV9IWVBFUlZgIGluIHRoZSBjb25maWd1cmF0aW9ucy4gSXQncyBjcnVjaWFsIGZvciB0aGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSB0aGlzIHJlZmFjdG9yaW5nIHRvdWNoZXMuIExldCdzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBhbmQgY29uZmlybSB0aGUgY2hvaWNlcy5cblxuRnJvbSB0aGUgYW5hbHlzaXMsIHRoaXMgaXMgKip3b3J0aCBmdXp6aW5nKiosIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kLiBUaGUgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgaG93IEtWTSBoYW5kbGVzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IG1vdmluZyBmcm9tIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHN0YXRpYyBjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQgdGhhdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBzdGVwcywgcGFydGljdWxhcmx5IHRoZSBga3ZtX25lc3RlZF9vcHMuZW5hYmxlZGAgY2hlY2suIEdpdmVuIHRoaXMgY2hhbmdlIGluIGNvbnRyb2wgZmxvdywgYW55IGJ1Z3MgaGVyZSBjb3VsZCBiZSBuYXN0eSwgcG90ZW50aWFsbHkgcmVzdWx0aW5nIGluIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9ycyB3aGVuIG5lc3RpbmcgVk1zLCB3aGljaCBjYW4gYmUgZGlmZmljdWx0IHRvIGRpYWdub3NlLlxuXG5UaGUgaW5pdGlhbCBzZWxlY3Rpb24gb2YgKipmb2N1cyBzeW1ib2xzKiogaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHJldmlld2VkIHRoZSBsaXN0IGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fZ2V0X2h2X2NwdWlkYCwgYGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVgLCBhbmQgYGt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXBgLlxuXG5Eb3VibGUtY2hlY2tpbmcsIGBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwYCBoYW5kbGVzIGBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTYCB3aGljaCwgYXMgZXhwZWN0ZWQsIHVsdGltYXRlbHkgdXNlcyBga3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzYC4gUGVyZmVjdC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHN5bWJvbC5cblxuVGhlbiwgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIGRlYWxzIHdpdGggYEtWTV9DQVBfTkVTVEVEX1NUQVRFYCBhbmQgYEtWTV9DQVBfSFlQRVJWX0VOTElHSFRFTkVEX1ZNQ1NgLCBhbmQgdGhhdCBhbGlnbnMgd2l0aCB0aGUgY2hhbmdlcyBhbmQgbmV3IGxvZ2ljLiBJdCdzIGEgdmFsaWQgY2hvaWNlLlxuXG5ga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaGFuZGxpbmcgb2YgYEtWTV9HRVRfTkVTVEVEX1NUQVRFYCBhbmQgYEtWTV9TRVRfTkVTVEVEX1NUQVRFYCBtYWtlcyBpdCBhIHNvbGlkIGNob2ljZS5cblxuYGt2bV9nZXRfaHZfY3B1aWRgIHVzZXMgYGdldF9ldm1jc192ZXJzaW9uYCwgc28gaXQgYWxzbyB3YXJyYW50cyBzY3J1dGlueS5cblxuQW5kIGZpbmFsbHksIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYCBpcyBjYWxsaW5nIGBodl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaGAsIHNvIGl0IGZpdHMgdGhlIGZvY3VzIHRvby5cblxuWWVzLCB0aGlzIGlzIGFsbCBnb29kLiBJIGNhbiBwcm9jZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjEyLCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjo1NzoyNC41NjU0MDMzOTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjQ2NTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCIsXG4gICAgXCJrdm1fZ2V0X2h2X2NwdWlkXCIsXG4gICAgXCJrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyB0byB1c2Ugc3RhdGljIGNhbGxzIGluc3RlYWQgb2YgaW5kaXJlY3QgZnVuY3Rpb24gcG9pbnRlcnMuIFRoaXMgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgbWVjaGFuaXNtIGFuZCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgbG9naWMgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpLiBCdWdzIGluIHRoaXMgcmVmYWN0b3JpbmcgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvblwiLFxuICAgIFwia3ZtX2dldF9odl9jcHVpZFwiLFxuICAgIFwia3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZVwiLFxuICAgIFwia3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMgdG8gdXNlIHN0YXRpYyBjYWxscyBpbnN0ZWFkIG9mIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIGNoYW5nZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG1lY2hhbmlzbSBhbmQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gYW5kIGNoZWNraW5nIGxvZ2ljIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKS4gQnVncyBpbiB0aGlzIHJlZmFjdG9yaW5nIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqs98b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 02:48:57 +0000 UTC FinishedAt: 2026-07-01 02:57:26 +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": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_HYPERV" ], "series_id": "fe3de385-c584-4a05-a006-8092d3367ae4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_ioctl", "kvm_vm_ioctl_check_extension", "kvm_get_hv_cpuid", "kvm_hv_hypercall_complete", "kvm_vcpu_ioctl_enable_cap" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfaHZfY3B1aWQmIzM0OywKICAgICYjMzQ7a3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMgdG8gdXNlIHN0YXRpYyBjYWxscyBpbnN0ZWFkIG9mIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIGNoYW5nZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG1lY2hhbmlzbSBhbmQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gYW5kIGNoZWNraW5nIGxvZ2ljIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKS4gQnVncyBpbiB0aGlzIHJlZmFjdG9yaW5nIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYyNmI1MzgyNWFhYzJmMzllMzE3MzdkZjdhNTZjYTcxYmIyMzBkYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDAyOjU2OjM2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGIxYmU1YmNlY2FhNDhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXG5AQCAtMCwwICYjNDM7MSwzNiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWYgIWRlZmluZWQoS1ZNX1g4Nl9ORVNURURfT1ApIHx8IFxcXG4mIzQzOyAgICAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCkgfHwgXFxcbiYjNDM7ICAgICFkZWZpbmVkKEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDApXG4mIzQzOyNlcnJvciBNaXNzaW5nIG9uZSBvciBtb3JlIEtWTV9YODZfTkVTVEVEX09QICNkZWZpbmVzXG4mIzQzOyNlbHNlXG4mIzQzOy8qXG4mIzQzOyAqIEtWTV9YODZfTkVTVEVEX09QKCkgYW5kIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKCkgYXJlIHVzZWQgdG8gaGVscFxuJiM0MzsgKiBnZW5lcmF0ZSBib3RoIERFQ0xBUkUvREVGSU5FX1NUQVRJQ19DQUxMKCkgaW52b2NhdGlvbnMgYW5kXG4mIzQzOyAqIFwmIzM0O3N0YXRpY19jYWxsX3VwZGF0ZSgpXCYjMzQ7IGNhbGxzLlxuJiM0MzsgKlxuJiM0MzsgKiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCgpIGNhbiBiZSB1c2VkIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdCBjYW4gaGF2ZVxuJiM0MzsgKiBhIE5VTEwgZGVmaW5pdGlvbi4gIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoKSBjYW4gYmUgdXNlZCBsaWtld2lzZVxuJiM0MzsgKiB0byBtYWtlIGEgZGVmaW5pdGlvbiBvcHRpb25hbCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgZGVmYXVsdCB3aWxsXG4mIzQzOyAqIGJlIF9fc3RhdGljX2NhbGxfcmV0dXJuMC5cbiYjNDM7ICovXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QKGxlYXZlX25lc3RlZClcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoaXNfZXhjZXB0aW9uX3ZtZXhpdClcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoY2hlY2tfZXZlbnRzKVxuJiM0MztLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKGhhc19ldmVudHMpXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QKHRyaXBsZV9mYXVsdClcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoZ2V0X3N0YXRlKVxuJiM0MztLVk1fWDg2X05FU1RFRF9PUChzZXRfc3RhdGUpXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QKGdldF9uZXN0ZWRfc3RhdGVfcGFnZXMpXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAod3JpdGVfbG9nX2RpcnR5KVxuJiM0MztLVk1fWDg2X05FU1RFRF9PUCh0cmFuc2xhdGVfbmVzdGVkX2dwYSlcbiYjNDM7I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4mIzQzO0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKGVuYWJsZV9ldm1jcylcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMChnZXRfZXZtY3NfdmVyc2lvbilcbiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoaHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2gpXG4mIzQzOyNlbmRpZlxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUFxuJiM0MzsjdW5kZWYgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxcbiYjNDM7I3VuZGVmIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjUxNzI1N2E2MzE1MzIuLjdlMDdhOWMyNTlkMDkyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE4NDIsOCAmIzQzOzE4NDIsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFxuIFx0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1cdGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XG4tXG4gXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG5AQCAtMTkwNiw2ICYjNDM7MTkwNCw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHtcbiYjNDM7XHRib29sIGVuYWJsZWQ7XG4mIzQzO1xuIFx0dm9pZCAoKmxlYXZlX25lc3RlZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGJvb2wgKCppc19leGNlcHRpb25fdm1leGl0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3RvcixcbiBcdFx0XHRcdCAgICB1MzIgZXJyb3JfY29kZSk7XG5AQCAtMTkzNyw2ICYjNDM7MTkzNyw3IEBAIHN0cnVjdCBrdm1feDg2X2luaXRfb3BzIHtcbiBcbiBcdHN0cnVjdCBrdm1feDg2X29wcyAqcnVudGltZV9vcHM7XG4gXHRzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHM7XG4mIzQzO1x0c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyAqbmVzdGVkX29wcztcbiB9O1xuIFxuIHN0cnVjdCBrdm1fYXJjaF9hc3luY19wZiB7XG5AQCAtMTk1Miw2ICYjNDM7MTk1Myw3IEBAIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2FwaWN2O1xuIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2lwaXY7XG4gZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfZGV2aWNlX3Bvc3RlZF9pcnFzO1xuIGV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XG4mIzQzO2V4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7XG4gXG4gI2RlZmluZSBrdm1feDg2X2NhbGwoZnVuYykgc3RhdGljX2NhbGwoa3ZtX3g4Nl8jI2Z1bmMpXG4gXG5AQCAtMTk2MSw2ICYjNDM7MTk2MywxNCBAQCBleHRlcm4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzO1xuICNkZWZpbmUgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfT1BcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1vcHMuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIGt2bV9uZXN0ZWRfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2X25lc3RlZF8jI2Z1bmMpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG4mIzQzO1x0REVDTEFSRV9TVEFUSUNfQ0FMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsICooKChzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICopMCktXHUwMDNlZnVuYykpO1xuJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIEtWTV9YODZfTkVTVEVEX09QXG4mIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X05FU1RFRF9PUFxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcdTAwM2VcbiYjNDM7XG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuaW5kZXggMWVlMGQyM2Y4OTQ5NzQuLmIwMTBkY2EzN2I5ZDFjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbkBAIC0yNDA2LDcgJiM0MzsyNDA2LDcgQEAgc3RhdGljIGludCBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcbiBcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuIFxuIFx0aWYgKHRsYl9sb2NrX2NvdW50KVxuLVx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHZjcHUpO1xuJiM0MztcdFx0a3ZtX25lc3RlZF9jYWxsKGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKSh2Y3B1KTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI3ODcsOCAmIzQzOzI3ODcsOCBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCxcbiBcdH07XG4gXHRpbnQgaSwgbmVudCA9IEFSUkFZX1NJWkUoY3B1aWRfZW50cmllcyk7XG4gXG4tXHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfZXZtY3NfdmVyc2lvbilcbi1cdFx0ZXZtY3NfdmVyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfZXZtY3NfdmVyc2lvbih2Y3B1KTtcbiYjNDM7XHRpZiAoa3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbiYjNDM7XHRcdGV2bWNzX3ZlciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfZXZtY3NfdmVyc2lvbikodmNwdSk7XG4gXG4gXHRpZiAoY3B1aWQtXHUwMDNlbmVudCBcdTAwM2MgbmVudClcbiBcdFx0cmV0dXJuIC1FMkJJRztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmhcbmluZGV4IGM5ZjYyOGI5N2RhZWI5Li5mYTA1Y2EyYzg1NDllNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS5oXG5AQCAtMzg1LDkgJiM0MzszODUsOCBAQCBzdGF0aWMgaW5saW5lIGdwYV90IGt2bV90cmFuc2xhdGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHRpZiAoIW1tdV9pc19uZXN0ZWQodmNwdSkgfHwgdyA9PSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubmdwYV93YWxrKVxuIFx0XHRyZXR1cm4gZ3BhO1xuLVx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNldHJhbnNsYXRlX25lc3RlZF9ncGEodmNwdSwgZ3BhLCBhY2Nlc3MsXG4tXHRcdFx0XHRcdFx0XHQgICAgZXhjZXB0aW9uLFxuLVx0XHRcdFx0XHRcdFx0ICAgIHB0ZV9hY2Nlc3MpO1xuJiM0MztcdHJldHVybiBrdm1fbmVzdGVkX2NhbGwodHJhbnNsYXRlX25lc3RlZF9ncGEpKHZjcHUsIGdwYSwgYWNjZXNzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGV4Y2VwdGlvbiwgcHRlX2FjY2Vzcyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oXG5pbmRleCBlNzNmYzA5ZWM0ZGIyZS4uNGVlN2IwM2U3NjJkMGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaFxuQEAgLTIzNSw3ICYjNDM7MjM1LDcgQEAgc3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdFx0IShwdGUgXHUwMDI2IFBUX0dVRVNUX0RJUlRZX01BU0spKSB7XG4gXHRcdFx0dHJhY2Vfa3ZtX21tdV9zZXRfZGlydHlfYml0KHRhYmxlX2dmbiwgaW5kZXgsIHNpemVvZihwdGUpKTtcbiAjaWYgUFRUWVBFID09IFBUVFlQRV9FUFRcbi1cdFx0XHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2V3cml0ZV9sb2dfZGlydHkodmNwdSwgYWRkcikpXG4mIzQzO1x0XHRcdGlmIChrdm1fbmVzdGVkX2NhbGwod3JpdGVfbG9nX2RpcnR5KSh2Y3B1LCBhZGRyKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuICNlbmRpZlxuIFx0XHRcdHB0ZSB8PSBQVF9HVUVTVF9ESVJUWV9NQVNLO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5pbmRleCBiYTk4NWEwMjIwOGEzZS4uNWY2ZDk5NzFhM2YyMjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5AQCAtMjE2Miw3ICYjNDM7MjE2Miw3IEBAIHN0YXRpYyBncGFfdCBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4gXHRyZXR1cm4gdy1cdTAwM2VndmFfdG9fZ3BhKHZjcHUsIHcsIGdwYSwgYWNjZXNzLCBleGNlcHRpb24pO1xuIH1cbiBcbi1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0ge1xuJiM0MztzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQubGVhdmVfbmVzdGVkID0gc3ZtX2xlYXZlX25lc3RlZCxcbiBcdC50cmFuc2xhdGVfbmVzdGVkX2dwYSA9IHN2bV90cmFuc2xhdGVfbmVzdGVkX2dwYSxcbiBcdC5pc19leGNlcHRpb25fdm1leGl0ID0gbmVzdGVkX3N2bV9pc19leGNlcHRpb25fdm1leGl0LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBlZjY5YTUxYWIyN2Y5OC4uZDM4MDdmNGFiYjQ5OWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtNTQyNiw4ICYjNDM7NTQyNiw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmNoZWNrX2ludGVyY2VwdCA9IHN2bV9jaGVja19pbnRlcmNlcHQsXG4gXHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gc3ZtX2hhbmRsZV9leGl0X2lycW9mZixcbiBcbi1cdC5uZXN0ZWRfb3BzID0gXHUwMDI2c3ZtX25lc3RlZF9vcHMsXG4tXG4gXHQuZGVsaXZlcl9pbnRlcnJ1cHQgPSBzdm1fZGVsaXZlcl9pbnRlcnJ1cHQsXG4gXHQucGlfdXBkYXRlX2lydGUgPSBhdmljX3BpX3VwZGF0ZV9pcnRlLFxuIFx0LnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsXG5AQCAtNTY0Niw2ICYjNDM7NTY0NCw3IEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiYjNDM7XHRzdm1fbmVzdGVkX29wcy5lbmFibGVkID0gbmVzdGVkO1xuIFxuIFx0LypcbiBcdCAqIEtWTSYjMzk7cyBNTVUgZG9lc24mIzM5O3Qgc3VwcG9ydCB1c2luZyAyLWxldmVsIHBhZ2luZyBmb3IgaXRzZWxmLCBhbmQgdGh1c1xuQEAgLTU3NzIsNiAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgc3ZtX2luaXRfb3BzIF9faW5pdGRhdGEgPSB7XG4gXG4gXHQucnVudGltZV9vcHMgPSBcdTAwMjZzdm1feDg2X29wcyxcbiBcdC5wbXVfb3BzID0gXHUwMDI2YW1kX3BtdV9vcHMsXG4mIzQzO1x0Lm5lc3RlZF9vcHMgPSBcdTAwMjZzdm1fbmVzdGVkX29wcyxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIF9fc3ZtX2V4aXQodm9pZClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCA4M2Q5OTIxMjc3ZWFjMi4uMDRmOTg2ZTNkNDM5YWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC05OTUsOCAmIzQzOzk5NSw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXG4gXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSxcbiBcbi1cdC5uZXN0ZWRfb3BzID0gXHUwMDI2dm14X25lc3RlZF9vcHMsXG4tXG4gXHQucGlfdXBkYXRlX2lydGUgPSB2bXhfcGlfdXBkYXRlX2lydGUsXG4gXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcbiBcbkBAIC0xMDM4LDYgJiM0MzsxMDM2LDcgQEAgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgdnRfaW5pdF9vcHMgX19pbml0ZGF0YSA9IHtcbiBcbiBcdC5ydW50aW1lX29wcyA9IFx1MDAyNnZ0X3g4Nl9vcHMsXG4gXHQucG11X29wcyA9IFx1MDAyNmludGVsX3BtdV9vcHMsXG4mIzQzO1x0Lm5lc3RlZF9vcHMgPSBcdTAwMjZ2bXhfbmVzdGVkX29wcyxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCB2dF9leGl0KHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDA2MzVlOTI0NzFjODllLi5jYmIyMDlkOGE4ZjBkMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC03NDg0LDcgJiM0Mzs3NDg0LDcgQEAgc3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbiBcdHJldHVybiB3LVx1MDAzZWd2YV90b19ncGEodmNwdSwgdywgZ3BhLCBhY2Nlc3MsIGV4Y2VwdGlvbik7XG4gfVxuIFxuLXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XG4mIzQzO3N0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxuIFx0LnRyYW5zbGF0ZV9uZXN0ZWRfZ3BhID0gdm14X3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhLFxuIFx0LmlzX2V4Y2VwdGlvbl92bWV4aXQgPSBuZXN0ZWRfdm14X2lzX2V4Y2VwdGlvbl92bWV4aXQsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IDM2ODFkNTY1ZjE3Nzg5Li5lZjllMWJjMzllZGJiZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC04Nzg2LDYgJiM0Mzs4Nzg2LDcgQEAgX19pbml0IGludCB2bXhfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcdFx0aWYgKHIpXG4gXHRcdFx0cmV0dXJuIHI7XG4gXHR9XG4mIzQzO1x0dm14X25lc3RlZF9vcHMuZW5hYmxlZCA9IG5lc3RlZDtcbiBcbiBcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIocGlfd2FrZXVwX2hhbmRsZXIpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjViYTRhYWMzNzY0MDZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0xNTQsNiAmIzQzOzE1NCw3IEBAIHN0YXRpYyBpbnQgc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gc3RhdGljIERFRklORV9NVVRFWCh2ZW5kb3JfbW9kdWxlX2xvY2spO1xuIFxuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcyBfX3JlYWRfbW9zdGx5O1xuJiM0MztzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7XG4gXG4gI2RlZmluZSBLVk1fWDg2X09QKGZ1bmMpXHRcdFx0XHRcdCAgICAgXFxcbiBcdERFRklORV9TVEFUSUNfQ0FMTF9OVUxMKGt2bV94ODZfIyNmdW5jLFx0XHRcdCAgICAgXFxcbkBAIC0xNjUsNiAmIzQzOzE2NiwxMyBAQCBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfZ2V0X2NzX2RiX2xfYml0cyk7XG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2NhY2hlX3JlZyk7XG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2dldF9jcGwpO1xuIFxuJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdERFRklORV9TVEFUSUNfQ0FMTF9OVUxMKGt2bV94ODZfbmVzdGVkXyMjZnVuYyxcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0KigoKHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKikwKS1cdTAwM2VmdW5jKSk7XG4mIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9ORVNURURfT1BcbiYjNDM7I2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfTkVTVEVEX09QXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFx1MDAzZVxuJiM0MztcbiB1bnNpZ25lZCBpbnQgbWluX3RpbWVyX3BlcmlvZF91cyA9IDIwMDtcbiBtb2R1bGVfcGFyYW0obWluX3RpbWVyX3BlcmlvZF91cywgdWludCwgMDY0NCk7XG4gXG5AQCAtNDU0LDcgJiM0Mzs0NjIsNyBAQCBzdGF0aWMgdm9pZCBrdm1fbXVsdGlwbGVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG5yLFxuIFx0ICogd2FudHMgdG8gaW50ZXJjZXB0IHRoZSBleGNlcHRpb24uXG4gXHQgKi9cbiBcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaXNfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgZXJyb3JfY29kZSkpIHtcbiYjNDM7XHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIG5yLCBlcnJvcl9jb2RlKSkge1xuIFx0XHRrdm1fcXVldWVfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgaGFzX2Vycm9yLCBlcnJvcl9jb2RlLFxuIFx0XHRcdFx0XHQgICBoYXNfcGF5bG9hZCwgcGF5bG9hZCk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzQ2LDE1ICYjNDM7MjM1NCwxNCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdHIgXHUwMDI2PSB+S1ZNX1gyQVBJQ19FTkFCTEVfU1VQUFJFU1NfRU9JX0JST0FEQ0FTVDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfTkVTVEVEX1NUQVRFOlxuLVx0XHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUgP1xuLVx0XHRcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X3N0YXRlKE5VTEwsIE5VTEwsIDApIDogMDtcbiYjNDM7XHRcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkID8ga3ZtX25lc3RlZF9jYWxsKGdldF9zdGF0ZSkoTlVMTCwgTlVMTCwgMCkgOiAwO1xuIFx0XHRicmVhaztcbiAjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbiBcdGNhc2UgS1ZNX0NBUF9IWVBFUlZfRElSRUNUX1RMQkZMVVNIOlxuIFx0XHRyID0ga3ZtX3g4Nl9vcHMuZW5hYmxlX2wyX3RsYl9mbHVzaCAhPSBOVUxMO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX0NBUF9IWVBFUlZfRU5MSUdIVEVORURfVk1DUzpcbi1cdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZW5hYmxlX2V2bWNzICE9IE5VTEw7XG4mIzQzO1x0XHRyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzICE9IE5VTEw7XG4gXHRcdGJyZWFrO1xuICNlbmRpZlxuIFx0Y2FzZSBLVk1fQ0FQX1NNQUxMRVJfTUFYUEhZQUREUjpcbkBAIC0zMzY2LDkgJiM0MzszMzczLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0dWludDE2X3Qgdm1jc192ZXJzaW9uO1xuIFx0XHRcdHZvaWQgX191c2VyICp1c2VyX3B0cjtcbiBcbi1cdFx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZW5hYmxlX2V2bWNzKVxuJiM0MztcdFx0XHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgfHxcbiYjNDM7XHRcdFx0ICAgICFrdm1fbmVzdGVkX29wcy5lbmFibGVfZXZtY3MpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbi1cdFx0XHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VlbmFibGVfZXZtY3ModmNwdSwgXHUwMDI2dm1jc192ZXJzaW9uKTtcbiYjNDM7XHRcdFx0ciA9IGt2bV9uZXN0ZWRfY2FsbChlbmFibGVfZXZtY3MpKHZjcHUsIFx1MDAyNnZtY3NfdmVyc2lvbik7XG4gXHRcdFx0aWYgKCFyKSB7XG4gXHRcdFx0XHR1c2VyX3B0ciA9ICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpY2FwLVx1MDAzZWFyZ3NbMF07XG4gXHRcdFx0XHRpZiAoY29weV90b191c2VyKHVzZXJfcHRyLCBcdTAwMjZ2bWNzX3ZlcnNpb24sXG5AQCAtMzczMiw3ICYjNDM7Mzc0MCw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0dTMyIHVzZXJfZGF0YV9zaXplO1xuIFxuIFx0XHRyID0gLUVJTlZBTDtcbi1cdFx0aWYgKCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9zdGF0ZSlcbiYjNDM7XHRcdGlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0QlVJTERfQlVHX09OKHNpemVvZih1c2VyX2RhdGFfc2l6ZSkgIT0gc2l6ZW9mKHVzZXJfa3ZtX25lc3RlZF9zdGF0ZS1cdTAwM2VzaXplKSk7XG5AQCAtMzc0MCw4ICYjNDM7Mzc0OCw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0aWYgKGdldF91c2VyKHVzZXJfZGF0YV9zaXplLCBcdTAwMjZ1c2VyX2t2bV9uZXN0ZWRfc3RhdGUtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXG4tXHRcdFx0XHRcdFx0ICAgICB1c2VyX2RhdGFfc2l6ZSk7XG4mIzQzO1x0XHRyID0ga3ZtX25lc3RlZF9jYWxsKGdldF9zdGF0ZSkodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLCB1c2VyX2RhdGFfc2l6ZSk7XG4gXHRcdGlmIChyIFx1MDAzYyAwKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTM3NjIsNyAmIzQzOzM3NjksNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdGludCBpZHg7XG4gXG4gXHRcdHIgPSAtRUlOVkFMO1xuLVx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKVxuJiM0MztcdFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRyID0gLUVGQVVMVDtcbkBAIC0zNzg1LDcgJiM0MzszNzkyLDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KTtcbi1cdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgXHUwMDI2a3ZtX3N0YXRlKTtcbiYjNDM7XHRcdHIgPSBrdm1fbmVzdGVkX2NhbGwoc2V0X3N0YXRlKSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFx1MDAyNmt2bV9zdGF0ZSk7XG4gXHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNjkwMyw2ICYjNDM7NjkxMCwyMiBAQCBzdGF0aWMgdm9pZCBrdm1fc2V0dXBfZWZlcl9jYXBzKHZvaWQpXG4gXHRcdGt2bV9lbmFibGVfZWZlcl9iaXRzKEVGRVJfQVVUT0lCUlMpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX25lc3RlZF9vcHNfdXBkYXRlKGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHMpXG4mIzQzO3tcbiYjNDM7XHRtZW1jcHkoXHUwMDI2a3ZtX25lc3RlZF9vcHMsIG5lc3RlZF9vcHMsIHNpemVvZihrdm1fbmVzdGVkX29wcykpO1xuJiM0MztcbiYjNDM7I2RlZmluZSBfX0tWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG4mIzQzO1x0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywga3ZtX25lc3RlZF9vcHMuZnVuYyk7XG4mIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1AoZnVuYykgXFxcbiYjNDM7XHRXQVJOX09OKCFrdm1fbmVzdGVkX29wcy5mdW5jKTsgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKVxuJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIF9fS1ZNX1g4Nl9ORVNURURfT1BcbiYjNDM7I2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKGZ1bmMpIFxcXG4mIzQzO1x0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywgKHZvaWQgKilrdm1fbmVzdGVkX29wcy5mdW5jID8gOiBcXFxuJiM0MztcdFx0XHRcdFx0XHQgICh2b2lkICopX19zdGF0aWNfY2FsbF9yZXR1cm4wKTtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXHUwMDNlXG4mIzQzOyN1bmRlZiBfX0tWTV9YODZfTkVTVEVEX09QXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9vcHNfdXBkYXRlKHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXG4ge1xuIFx0bWVtY3B5KFx1MDAyNmt2bV94ODZfb3BzLCBvcHMtXHUwMDNlcnVudGltZV9vcHMsIHNpemVvZihrdm1feDg2X29wcykpO1xuQEAgLTY5MTgsNiAmIzQzOzY5NDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX29wc191cGRhdGUoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1vcHMuaFx1MDAzZVxuICN1bmRlZiBfX0tWTV9YODZfT1BcbiBcbiYjNDM7XHRrdm1fbmVzdGVkX29wc191cGRhdGUob3BzLVx1MDAzZW5lc3RlZF9vcHMpO1xuJiM0MztcbiBcdGt2bV9wbXVfb3BzX3VwZGF0ZShvcHMtXHUwMDNlcG11X29wcyk7XG4gfVxuIFxuQEAgLTc0NTQsMTEgJiM0Mzs3NDc5LDExIEBAIHN0YXRpYyB2b2lkIHBvc3Rfa3ZtX3J1bl9zYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuLVx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcbiYjNDM7XHRcdGt2bV9uZXN0ZWRfY2FsbCh0cmlwbGVfZmF1bHQpKHZjcHUpO1xuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbi1cdHJldHVybiBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWNoZWNrX2V2ZW50cyh2Y3B1KTtcbiYjNDM7XHRyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKGNoZWNrX2V2ZW50cykodmNwdSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC03Njk2LDkgJiM0Mzs3NzIxLDcgQEAgc3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XG4gXHR9XG4gXG4tXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHMgXHUwMDI2XHUwMDI2XG4tXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VoYXNfZXZlbnRzKHZjcHUsIHRydWUpKVxuJiM0MztcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBrdm1fbmVzdGVkX2NhbGwoaGFzX2V2ZW50cykodmNwdSwgdHJ1ZSkpXG4gXHRcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xuIFxuIFx0LypcbkBAIC04MDIxLDcgJiM0Mzs4MDQ0LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0fVxuIFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkge1xuLVx0XHRcdGlmICh1bmxpa2VseSgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHZjcHUpKSkge1xuJiM0MztcdFx0XHRpZiAodW5saWtlbHkoIWt2bV9uZXN0ZWRfY2FsbChnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKSh2Y3B1KSkpIHtcbiBcdFx0XHRcdHIgPSAwO1xuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuQEAgLTgwNzMsNyAmIzQzOzgwOTYsNyBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR9XG4gXHRcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuIFx0XHRcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpKVxuLVx0XHRcdFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2V0cmlwbGVfZmF1bHQodmNwdSk7XG4mIzQzO1x0XHRcdFx0a3ZtX25lc3RlZF9jYWxsKHRyaXBsZV9mYXVsdCkodmNwdSk7XG4gXG4gXHRcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuIFx0XHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9TSFVURE9XTjtcbkBAIC04NDkxLDkgJiM0Mzs4NTE0LDcgQEAgYm9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHZjcHUpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHModmNwdSwgZmFsc2UpKVxuJiM0MztcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBrdm1fbmVzdGVkX2NhbGwoaGFzX2V2ZW50cykodmNwdSwgZmFsc2UpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGlmIChrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyh2Y3B1KSlcbkBAIC04ODk2LDggJiM0Mzs4OTE3LDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGEgcGVuZGluZyBWTS1FeGl0IGlmIEwxIHdhbnRzIHRvIGludGVyY2VwdCB0aGUgZXhjZXB0aW9uLlxuIFx0ICovXG4gXHRpZiAodmNwdS1cdTAwM2VhcmNoLmV4Y2VwdGlvbl9mcm9tX3VzZXJzcGFjZSBcdTAwMjZcdTAwMjYgaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXHUwMDNldmVjdG9yLFxuLVx0XHRcdFx0XHRcdFx0ZXgtXHUwMDNlZXJyb3JfY29kZSkpIHtcbiYjNDM7XHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIGV4LVx1MDAzZXZlY3RvciwgZXgtXHUwMDNlZXJyb3JfY29kZSkpIHtcbiBcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXHUwMDNldmVjdG9yLFxuIFx0XHRcdFx0XHQgICBleC1cdTAwM2VoYXNfZXJyb3JfY29kZSwgZXgtXHUwMDNlZXJyb3JfY29kZSxcbiBcdFx0XHRcdFx0ICAgZXgtXHUwMDNlaGFzX3BheWxvYWQsIGV4LVx1MDAzZXBheWxvYWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggOGVjZTQ2ODA4N2E4ZWUuLmI1MTBiNjMxZjBjNTIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC05Myw3ICYjNDM7OTMsNyBAQCBpbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiAvKiBGb3JjaWJseSBsZWF2ZSB0aGUgbmVzdGVkIG1vZGUgaW4gY2FzZXMgbGlrZSBhIHZDUFUgcmVzZXQgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VsZWF2ZV9uZXN0ZWQodmNwdSk7XG4mIzQzO1x0a3ZtX25lc3RlZF9jYWxsKGxlYXZlX25lc3RlZCkodmNwdSk7XG4gfVxuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OywKICAgICYjMzQ7a3ZtX2dldF9odl9jcHVpZCYjMzQ7LAogICAgJiMzNDtrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyB0byB1c2Ugc3RhdGljIGNhbGxzIGluc3RlYWQgb2YgaW5kaXJlY3QgZnVuY3Rpb24gcG9pbnRlcnMuIFRoaXMgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgbWVjaGFuaXNtIGFuZCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgbG9naWMgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpLiBCdWdzIGluIHRoaXMgcmVmYWN0b3JpbmcgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjZiNTM4MjVhYWMyZjM5ZTMxNzM3ZGY3YTU2Y2E3MWJiMjMwZGIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAwMjo1NjozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMWJlNWJjZWNhYTQ4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmgKQEAgLTAsMCAmIzQzOzEsMzYgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZiAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUCkgfHwgXAomIzQzOyAgICAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCkgfHwgXAomIzQzOyAgICAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKQomIzQzOyNlcnJvciBNaXNzaW5nIG9uZSBvciBtb3JlIEtWTV9YODZfTkVTVEVEX09QICNkZWZpbmVzCiYjNDM7I2Vsc2UKJiM0MzsvKgomIzQzOyAqIEtWTV9YODZfTkVTVEVEX09QKCkgYW5kIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKCkgYXJlIHVzZWQgdG8gaGVscAomIzQzOyAqIGdlbmVyYXRlIGJvdGggREVDTEFSRS9ERUZJTkVfU1RBVElDX0NBTEwoKSBpbnZvY2F0aW9ucyBhbmQKJiM0MzsgKiAmIzM0O3N0YXRpY19jYWxsX3VwZGF0ZSgpJiMzNDsgY2FsbHMuCiYjNDM7ICoKJiM0MzsgKiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCgpIGNhbiBiZSB1c2VkIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdCBjYW4gaGF2ZQomIzQzOyAqIGEgTlVMTCBkZWZpbml0aW9uLiAgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCgpIGNhbiBiZSB1c2VkIGxpa2V3aXNlCiYjNDM7ICogdG8gbWFrZSBhIGRlZmluaXRpb24gb3B0aW9uYWwsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGRlZmF1bHQgd2lsbAomIzQzOyAqIGJlIF9fc3RhdGljX2NhbGxfcmV0dXJuMC4KJiM0MzsgKi8KJiM0MztLVk1fWDg2X05FU1RFRF9PUChsZWF2ZV9uZXN0ZWQpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoaXNfZXhjZXB0aW9uX3ZtZXhpdCkKJiM0MztLVk1fWDg2X05FU1RFRF9PUChjaGVja19ldmVudHMpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMChoYXNfZXZlbnRzKQomIzQzO0tWTV9YODZfTkVTVEVEX09QKHRyaXBsZV9mYXVsdCkKJiM0MztLVk1fWDg2X05FU1RFRF9PUChnZXRfc3RhdGUpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1Aoc2V0X3N0YXRlKQomIzQzO0tWTV9YODZfTkVTVEVEX09QKGdldF9uZXN0ZWRfc3RhdGVfcGFnZXMpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCh3cml0ZV9sb2dfZGlydHkpCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AodHJhbnNsYXRlX25lc3RlZF9ncGEpCiYjNDM7I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwoZW5hYmxlX2V2bWNzKQomIzQzO0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoZ2V0X2V2bWNzX3ZlcnNpb24pCiYjNDM7S1ZNX1g4Nl9ORVNURURfT1AoaHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2gpCiYjNDM7I2VuZGlmCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I3VuZGVmIEtWTV9YODZfTkVTVEVEX09QCiYjNDM7I3VuZGVmIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMCiYjNDM7I3VuZGVmIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGI1MTcyNTdhNjMxNTMyLi43ZTA3YTljMjU5ZDA5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xODQyLDggJiM0MzsxODQyLDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHsKIAogCXZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLQljb25zdCBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICpuZXN0ZWRfb3BzOwotCiAJdm9pZCAoKnZjcHVfYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJdm9pZCAoKnZjcHVfdW5ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIApAQCAtMTkwNiw2ICYjNDM7MTkwNCw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiB9OwogCiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHsKJiM0MzsJYm9vbCBlbmFibGVkOwomIzQzOwogCXZvaWQgKCpsZWF2ZV9uZXN0ZWQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJYm9vbCAoKmlzX2V4Y2VwdGlvbl92bWV4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yLAogCQkJCSAgICB1MzIgZXJyb3JfY29kZSk7CkBAIC0xOTM3LDYgJiM0MzsxOTM3LDcgQEAgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgewogCiAJc3RydWN0IGt2bV94ODZfb3BzICpydW50aW1lX29wczsKIAlzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHM7CiYjNDM7CXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7CiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2hfYXN5bmNfcGYgewpAQCAtMTk1Miw2ICYjNDM7MTk1Myw3IEBAIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2FwaWN2OwogZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfaXBpdjsKIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2RldmljZV9wb3N0ZWRfaXJxczsKIGV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMga3ZtX25lc3RlZF9vcHMgX19yZWFkX21vc3RseTsKIAogI2RlZmluZSBrdm1feDg2X2NhbGwoZnVuYykgc3RhdGljX2NhbGwoa3ZtX3g4Nl8jI2Z1bmMpCiAKQEAgLTE5NjEsNiAmIzQzOzE5NjMsMTQgQEAgZXh0ZXJuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wczsKICNkZWZpbmUgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfT1AKICNpbmNsdWRlICZsdDthc20va3ZtLXg4Ni1vcHMuaCZndDsKIAomIzQzOyNkZWZpbmUga3ZtX25lc3RlZF9jYWxsKGZ1bmMpIHN0YXRpY19jYWxsKGt2bV94ODZfbmVzdGVkXyMjZnVuYykKJiM0MzsKJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFwKJiM0MzsJREVDTEFSRV9TVEFUSUNfQ0FMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsICooKChzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICopMCktJmd0O2Z1bmMpKTsKJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIEtWTV9YODZfTkVTVEVEX09QCiYjNDM7I2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfTkVTVEVEX09QCiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaCZndDsKJiM0MzsKICNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMKaW5kZXggMWVlMGQyM2Y4OTQ5NzQuLmIwMTBkY2EzN2I5ZDFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5jCkBAIC0yNDA2LDcgJiM0MzsyNDA2LDcgQEAgc3RhdGljIGludCBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdCkKIAlyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAogCWlmICh0bGJfbG9ja19jb3VudCkKLQkJa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7aHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2godmNwdSk7CiYjNDM7CQlrdm1fbmVzdGVkX2NhbGwoaHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2gpKHZjcHUpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3ODcsOCAmIzQzOzI3ODcsOCBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKIAl9OwogCWludCBpLCBuZW50ID0gQVJSQVlfU0laRShjcHVpZF9lbnRyaWVzKTsKIAotCWlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtnZXRfZXZtY3NfdmVyc2lvbikKLQkJZXZtY3NfdmVyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Z2V0X2V2bWNzX3ZlcnNpb24odmNwdSk7CiYjNDM7CWlmIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKQomIzQzOwkJZXZtY3NfdmVyID0ga3ZtX25lc3RlZF9jYWxsKGdldF9ldm1jc192ZXJzaW9uKSh2Y3B1KTsKIAogCWlmIChjcHVpZC0mZ3Q7bmVudCAmbHQ7IG5lbnQpCiAJCXJldHVybiAtRTJCSUc7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmgKaW5kZXggYzlmNjI4Yjk3ZGFlYjkuLmZhMDVjYTJjODU0OWU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS5oCkBAIC0zODUsOSAmIzQzOzM4NSw4IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogewogCWlmICghbW11X2lzX25lc3RlZCh2Y3B1KSB8fCB3ID09ICZhbXA7dmNwdS0mZ3Q7YXJjaC5uZ3BhX3dhbGspCiAJCXJldHVybiBncGE7Ci0JcmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHZjcHUsIGdwYSwgYWNjZXNzLAotCQkJCQkJCSAgICBleGNlcHRpb24sCi0JCQkJCQkJICAgIHB0ZV9hY2Nlc3MpOwomIzQzOwlyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKSh2Y3B1LCBncGEsIGFjY2VzcywKJiM0MzsJCQkJCQkgICAgIGV4Y2VwdGlvbiwgcHRlX2FjY2Vzcyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmggYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgKaW5kZXggZTczZmMwOWVjNGRiMmUuLjRlZTdiMDNlNzYyZDBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oCkBAIC0yMzUsNyAmIzQzOzIzNSw3IEBAIHN0YXRpYyBpbnQgRk5BTUUodXBkYXRlX2FjY2Vzc2VkX2RpcnR5X2JpdHMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkhKHB0ZSAmYW1wOyBQVF9HVUVTVF9ESVJUWV9NQVNLKSkgewogCQkJdHJhY2Vfa3ZtX21tdV9zZXRfZGlydHlfYml0KHRhYmxlX2dmbiwgaW5kZXgsIHNpemVvZihwdGUpKTsKICNpZiBQVFRZUEUgPT0gUFRUWVBFX0VQVAotCQkJaWYgKGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O3dyaXRlX2xvZ19kaXJ0eSh2Y3B1LCBhZGRyKSkKJiM0MzsJCQlpZiAoa3ZtX25lc3RlZF9jYWxsKHdyaXRlX2xvZ19kaXJ0eSkodmNwdSwgYWRkcikpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIAkJCXB0ZSB8PSBQVF9HVUVTVF9ESVJUWV9NQVNLOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKaW5kZXggYmE5ODVhMDIyMDhhM2UuLjVmNmQ5OTcxYTNmMjI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKQEAgLTIxNjIsNyAmIzQzOzIxNjIsNyBAQCBzdGF0aWMgZ3BhX3Qgc3ZtX3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLAogCXJldHVybiB3LSZndDtndmFfdG9fZ3BhKHZjcHUsIHcsIGdwYSwgYWNjZXNzLCBleGNlcHRpb24pOwogfQogCi1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0gewomIzQzO3N0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgX19pbml0ZGF0YSA9IHsKIAkubGVhdmVfbmVzdGVkID0gc3ZtX2xlYXZlX25lc3RlZCwKIAkudHJhbnNsYXRlX25lc3RlZF9ncGEgPSBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEsCiAJLmlzX2V4Y2VwdGlvbl92bWV4aXQgPSBuZXN0ZWRfc3ZtX2lzX2V4Y2VwdGlvbl92bWV4aXQsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCBlZjY5YTUxYWIyN2Y5OC4uZDM4MDdmNGFiYjQ5OWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtNTQyNiw4ICYjNDM7NTQyNiw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0gewogCS5jaGVja19pbnRlcmNlcHQgPSBzdm1fY2hlY2tfaW50ZXJjZXB0LAogCS5oYW5kbGVfZXhpdF9pcnFvZmYgPSBzdm1faGFuZGxlX2V4aXRfaXJxb2ZmLAogCi0JLm5lc3RlZF9vcHMgPSAmYW1wO3N2bV9uZXN0ZWRfb3BzLAotCiAJLmRlbGl2ZXJfaW50ZXJydXB0ID0gc3ZtX2RlbGl2ZXJfaW50ZXJydXB0LAogCS5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsCiAJLnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsCkBAIC01NjQ2LDYgJiM0Mzs1NjQ0LDcgQEAgc3RhdGljIF9faW5pdCBpbnQgc3ZtX2hhcmR3YXJlX3NldHVwKHZvaWQpCiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJfQomIzQzOwlzdm1fbmVzdGVkX29wcy5lbmFibGVkID0gbmVzdGVkOwogCiAJLyoKIAkgKiBLVk0mIzM5O3MgTU1VIGRvZXNuJiMzOTt0IHN1cHBvcnQgdXNpbmcgMi1sZXZlbCBwYWdpbmcgZm9yIGl0c2VsZiwgYW5kIHRodXMKQEAgLTU3NzIsNiAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgc3ZtX2luaXRfb3BzIF9faW5pdGRhdGEgPSB7CiAKIAkucnVudGltZV9vcHMgPSAmYW1wO3N2bV94ODZfb3BzLAogCS5wbXVfb3BzID0gJmFtcDthbWRfcG11X29wcywKJiM0MzsJLm5lc3RlZF9vcHMgPSAmYW1wO3N2bV9uZXN0ZWRfb3BzLAogfTsKIAogc3RhdGljIHZvaWQgX19zdm1fZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwppbmRleCA4M2Q5OTIxMjc3ZWFjMi4uMDRmOTg2ZTNkNDM5YWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCkBAIC05OTUsOCAmIzQzOzk5NSw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAKIAkudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSwKIAotCS5uZXN0ZWRfb3BzID0gJmFtcDt2bXhfbmVzdGVkX29wcywKLQogCS5waV91cGRhdGVfaXJ0ZSA9IHZteF9waV91cGRhdGVfaXJ0ZSwKIAkucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcywKIApAQCAtMTAzOCw2ICYjNDM7MTAzNiw3IEBAIHN0cnVjdCBrdm1feDg2X2luaXRfb3BzIHZ0X2luaXRfb3BzIF9faW5pdGRhdGEgPSB7CiAKIAkucnVudGltZV9vcHMgPSAmYW1wO3Z0X3g4Nl9vcHMsCiAJLnBtdV9vcHMgPSAmYW1wO2ludGVsX3BtdV9vcHMsCiYjNDM7CS5uZXN0ZWRfb3BzID0gJmFtcDt2bXhfbmVzdGVkX29wcywKIH07CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2dF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCAwNjM1ZTkyNDcxYzg5ZS4uY2JiMjA5ZDhhOGYwZDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwpAQCAtNzQ4NCw3ICYjNDM7NzQ4NCw3IEBAIHN0YXRpYyBncGFfdCB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCiAJcmV0dXJuIHctJmd0O2d2YV90b19ncGEodmNwdSwgdywgZ3BhLCBhY2Nlc3MsIGV4Y2VwdGlvbik7CiB9CiAKLXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7CiYjNDM7c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0gewogCS5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLAogCS50cmFuc2xhdGVfbmVzdGVkX2dwYSA9IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYSwKIAkuaXNfZXhjZXB0aW9uX3ZtZXhpdCA9IG5lc3RlZF92bXhfaXNfZXhjZXB0aW9uX3ZtZXhpdCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IDM2ODFkNTY1ZjE3Nzg5Li5lZjllMWJjMzllZGJiZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC04Nzg2LDYgJiM0Mzs4Nzg2LDcgQEAgX19pbml0IGludCB2bXhfaGFyZHdhcmVfc2V0dXAodm9pZCkKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAl9CiYjNDM7CXZteF9uZXN0ZWRfb3BzLmVuYWJsZWQgPSBuZXN0ZWQ7CiAKIAlrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKHBpX3dha2V1cF9oYW5kbGVyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDA2MjZlODM1ZTllYjc3Li41YmE0YWFjMzc2NDA2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMTU0LDYgJiM0MzsxNTQsNyBAQCBzdGF0aWMgaW50IHN5bmNfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogc3RhdGljIERFRklORV9NVVRFWCh2ZW5kb3JfbW9kdWxlX2xvY2spOwogCiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHMgX19yZWFkX21vc3RseTsKJiM0MztzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7CiAKICNkZWZpbmUgS1ZNX1g4Nl9PUChmdW5jKQkJCQkJICAgICBcCiAJREVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl8jI2Z1bmMsCQkJICAgICBcCkBAIC0xNjUsNiAmIzQzOzE2NiwxMyBAQCBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfZ2V0X2NzX2RiX2xfYml0cyk7CiBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfY2FjaGVfcmVnKTsKIEVYUE9SVF9TVEFUSUNfQ0FMTF9HUEwoa3ZtX3g4Nl9nZXRfY3BsKTsKIAomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1AoZnVuYykJCQkJCQkJXAomIzQzOwlERUZJTkVfU1RBVElDX0NBTExfTlVMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsCQkJCVwKJiM0MzsJCQkJKigoKHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKikwKS0mZ3Q7ZnVuYykpOwomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9ORVNURURfT1AKJiM0MzsjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9ORVNURURfT1AKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oJmd0OwomIzQzOwogdW5zaWduZWQgaW50IG1pbl90aW1lcl9wZXJpb2RfdXMgPSAyMDA7CiBtb2R1bGVfcGFyYW0obWluX3RpbWVyX3BlcmlvZF91cywgdWludCwgMDY0NCk7CiAKQEAgLTQ1NCw3ICYjNDM7NDYyLDcgQEAgc3RhdGljIHZvaWQga3ZtX211bHRpcGxlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuciwKIAkgKiB3YW50cyB0byBpbnRlcmNlcHQgdGhlIGV4Y2VwdGlvbi4KIAkgKi8KIAlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2lzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgbnIsIGVycm9yX2NvZGUpKSB7CiYjNDM7CSAgICBrdm1fbmVzdGVkX2NhbGwoaXNfZXhjZXB0aW9uX3ZtZXhpdCkodmNwdSwgbnIsIGVycm9yX2NvZGUpKSB7CiAJCWt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIG5yLCBoYXNfZXJyb3IsIGVycm9yX2NvZGUsCiAJCQkJCSAgIGhhc19wYXlsb2FkLCBwYXlsb2FkKTsKIAkJcmV0dXJuOwpAQCAtMjM0NiwxNSAmIzQzOzIzNTQsMTQgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAkJCXIgJmFtcDs9IH5LVk1fWDJBUElDX0VOQUJMRV9TVVBQUkVTU19FT0lfQlJPQURDQVNUOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfTkVTVEVEX1NUQVRFOgotCQlyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Z2V0X3N0YXRlID8KLQkJCWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2dldF9zdGF0ZShOVUxMLCBOVUxMLCAwKSA6IDA7CiYjNDM7CQlyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCA/IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKE5VTEwsIE5VTEwsIDApIDogMDsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlYKIAljYXNlIEtWTV9DQVBfSFlQRVJWX0RJUkVDVF9UTEJGTFVTSDoKIAkJciA9IGt2bV94ODZfb3BzLmVuYWJsZV9sMl90bGJfZmx1c2ggIT0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOgotCQlyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7ZW5hYmxlX2V2bWNzICE9IE5VTEw7CiYjNDM7CQlyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCAmYW1wOyZhbXA7IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZV9ldm1jcyAhPSBOVUxMOwogCQlicmVhazsKICNlbmRpZgogCWNhc2UgS1ZNX0NBUF9TTUFMTEVSX01BWFBIWUFERFI6CkBAIC0zMzY2LDkgJiM0MzszMzczLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQl1aW50MTZfdCB2bWNzX3ZlcnNpb247CiAJCQl2b2lkIF9fdXNlciAqdXNlcl9wdHI7CiAKLQkJCWlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7ZW5hYmxlX2V2bWNzKQomIzQzOwkJCWlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZCB8fAomIzQzOwkJCSAgICAha3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzKQogCQkJCXJldHVybiAtRU5PVFRZOwotCQkJciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2VuYWJsZV9ldm1jcyh2Y3B1LCAmYW1wO3ZtY3NfdmVyc2lvbik7CiYjNDM7CQkJciA9IGt2bV9uZXN0ZWRfY2FsbChlbmFibGVfZXZtY3MpKHZjcHUsICZhbXA7dm1jc192ZXJzaW9uKTsKIAkJCWlmICghcikgewogCQkJCXVzZXJfcHRyID0gKHZvaWQgX191c2VyICopKHVpbnRwdHJfdCljYXAtJmd0O2FyZ3NbMF07CiAJCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX3B0ciwgJmFtcDt2bWNzX3ZlcnNpb24sCkBAIC0zNzMyLDcgJiM0MzszNzQwLDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQl1MzIgdXNlcl9kYXRhX3NpemU7CiAKIAkJciA9IC1FSU5WQUw7Ci0JCWlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Z2V0X3N0YXRlKQomIzQzOwkJaWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKQogCQkJYnJlYWs7CiAKIAkJQlVJTERfQlVHX09OKHNpemVvZih1c2VyX2RhdGFfc2l6ZSkgIT0gc2l6ZW9mKHVzZXJfa3ZtX25lc3RlZF9zdGF0ZS0mZ3Q7c2l6ZSkpOwpAQCAtMzc0MCw4ICYjNDM7Mzc0OCw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJaWYgKGdldF91c2VyKHVzZXJfZGF0YV9zaXplLCAmYW1wO3VzZXJfa3ZtX25lc3RlZF9zdGF0ZS0mZ3Q7c2l6ZSkpCiAJCQlicmVhazsKIAotCQlyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Z2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwKLQkJCQkJCSAgICAgdXNlcl9kYXRhX3NpemUpOwomIzQzOwkJciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgdXNlcl9kYXRhX3NpemUpOwogCQlpZiAociAmbHQ7IDApCiAJCQlicmVhazsKIApAQCAtMzc2Miw3ICYjNDM7Mzc2OSw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJaW50IGlkeDsKIAogCQlyID0gLUVJTlZBTDsKLQkJaWYgKCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtzZXRfc3RhdGUpCiYjNDM7CQlpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpCiAJCQlicmVhazsKIAogCQlyID0gLUVGQVVMVDsKQEAgLTM3ODUsNyAmIzQzOzM3OTIsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQlicmVhazsKIAogCQlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c3JjdSk7Ci0JCXIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtzZXRfc3RhdGUodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLCAmYW1wO2t2bV9zdGF0ZSk7CiYjNDM7CQlyID0ga3ZtX25lc3RlZF9jYWxsKHNldF9zdGF0ZSkodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLCAmYW1wO2t2bV9zdGF0ZSk7CiAJCXNyY3VfcmVhZF91bmxvY2soJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3NyY3UsIGlkeCk7CiAJCWJyZWFrOwogCX0KQEAgLTY5MDMsNiAmIzQzOzY5MTAsMjIgQEAgc3RhdGljIHZvaWQga3ZtX3NldHVwX2VmZXJfY2Fwcyh2b2lkKQogCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX0FVVE9JQlJTKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGt2bV9uZXN0ZWRfb3BzX3VwZGF0ZShjb25zdCBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICpuZXN0ZWRfb3BzKQomIzQzO3sKJiM0MzsJbWVtY3B5KCZhbXA7a3ZtX25lc3RlZF9vcHMsIG5lc3RlZF9vcHMsIHNpemVvZihrdm1fbmVzdGVkX29wcykpOwomIzQzOwomIzQzOyNkZWZpbmUgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcCiYjNDM7CXN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X25lc3RlZF8jI2Z1bmMsIGt2bV9uZXN0ZWRfb3BzLmZ1bmMpOwomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1AoZnVuYykgXAomIzQzOwlXQVJOX09OKCFrdm1fbmVzdGVkX29wcy5mdW5jKTsgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKQomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgX19LVk1fWDg2X05FU1RFRF9PUAomIzQzOyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMChmdW5jKSBcCiYjNDM7CXN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X25lc3RlZF8jI2Z1bmMsICh2b2lkICopa3ZtX25lc3RlZF9vcHMuZnVuYyA/IDogXAomIzQzOwkJCQkJCSAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApOwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmgmZ3Q7CiYjNDM7I3VuZGVmIF9fS1ZNX1g4Nl9ORVNURURfT1AKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX29wc191cGRhdGUoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcykKIHsKIAltZW1jcHkoJmFtcDtrdm1feDg2X29wcywgb3BzLSZndDtydW50aW1lX29wcywgc2l6ZW9mKGt2bV94ODZfb3BzKSk7CkBAIC02OTE4LDYgJiM0Mzs2OTQxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9vcHNfdXBkYXRlKHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpCiAjaW5jbHVkZSAmbHQ7YXNtL2t2bS14ODYtb3BzLmgmZ3Q7CiAjdW5kZWYgX19LVk1fWDg2X09QCiAKJiM0MzsJa3ZtX25lc3RlZF9vcHNfdXBkYXRlKG9wcy0mZ3Q7bmVzdGVkX29wcyk7CiYjNDM7CiAJa3ZtX3BtdV9vcHNfdXBkYXRlKG9wcy0mZ3Q7cG11X29wcyk7CiB9CiAKQEAgLTc0NTQsMTEgJiM0Mzs3NDc5LDExIEBAIHN0YXRpYyB2b2lkIHBvc3Rfa3ZtX3J1bl9zYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGludCBrdm1fY2hlY2tfbmVzdGVkX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpKSB7Ci0JCWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O3RyaXBsZV9mYXVsdCh2Y3B1KTsKJiM0MzsJCWt2bV9uZXN0ZWRfY2FsbCh0cmlwbGVfZmF1bHQpKHZjcHUpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlyZXR1cm4ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7Y2hlY2tfZXZlbnRzKHZjcHUpOwomIzQzOwlyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKGNoZWNrX2V2ZW50cykodmNwdSk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9pbmplY3RfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTc2OTYsOSAmIzQzOzc3MjEsNyBAQCBzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQlrdm1feDg2X2NhbGwoZW5hYmxlX2lycV93aW5kb3cpKHZjcHUpOwogCX0KIAotCWlmIChpc19ndWVzdF9tb2RlKHZjcHUpICZhbXA7JmFtcDsKLQkgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy0mZ3Q7aGFzX2V2ZW50cyAmYW1wOyZhbXA7Ci0JICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2hhc19ldmVudHModmNwdSwgdHJ1ZSkpCiYjNDM7CWlmIChpc19ndWVzdF9tb2RlKHZjcHUpICZhbXA7JmFtcDsga3ZtX25lc3RlZF9jYWxsKGhhc19ldmVudHMpKHZjcHUsIHRydWUpKQogCQkqcmVxX2ltbWVkaWF0ZV9leGl0ID0gdHJ1ZTsKIAogCS8qCkBAIC04MDIxLDcgJiM0Mzs4MDQ0LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJfQogCiAJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpKSB7Ci0JCQlpZiAodW5saWtlbHkoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2dldF9uZXN0ZWRfc3RhdGVfcGFnZXModmNwdSkpKSB7CiYjNDM7CQkJaWYgKHVubGlrZWx5KCFrdm1fbmVzdGVkX2NhbGwoZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcykodmNwdSkpKSB7CiAJCQkJciA9IDA7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC04MDczLDcgJiM0Mzs4MDk2LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJfQogCQlpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSkpIHsKIAkJCWlmIChpc19ndWVzdF9tb2RlKHZjcHUpKQotCQkJCWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O3RyaXBsZV9mYXVsdCh2Y3B1KTsKJiM0MzsJCQkJa3ZtX25lc3RlZF9jYWxsKHRyaXBsZV9mYXVsdCkodmNwdSk7CiAKIAkJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSkpIHsKIAkJCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfU0hVVERPV047CkBAIC04NDkxLDkgJiM0Mzs4NTE0LDcgQEAgYm9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoa3ZtX2h2X2hhc19zdGltZXJfcGVuZGluZyh2Y3B1KSkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtJmd0O2hhc19ldmVudHMgJmFtcDsmYW1wOwotCSAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtoYXNfZXZlbnRzKHZjcHUsIGZhbHNlKSkKJiM0MzsJaWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOyBrdm1fbmVzdGVkX2NhbGwoaGFzX2V2ZW50cykodmNwdSwgZmFsc2UpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCWlmIChrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyh2Y3B1KSkKQEAgLTg4OTYsOCAmIzQzOzg5MTcsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqIGEgcGVuZGluZyBWTS1FeGl0IGlmIEwxIHdhbnRzIHRvIGludGVyY2VwdCB0aGUgZXhjZXB0aW9uLgogCSAqLwogCWlmICh2Y3B1LSZndDthcmNoLmV4Y2VwdGlvbl9mcm9tX3VzZXJzcGFjZSAmYW1wOyZhbXA7IGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOwotCSAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtpc19leGNlcHRpb25fdm1leGl0KHZjcHUsIGV4LSZndDt2ZWN0b3IsCi0JCQkJCQkJZXgtJmd0O2Vycm9yX2NvZGUpKSB7CiYjNDM7CSAgICBrdm1fbmVzdGVkX2NhbGwoaXNfZXhjZXB0aW9uX3ZtZXhpdCkodmNwdSwgZXgtJmd0O3ZlY3RvciwgZXgtJmd0O2Vycm9yX2NvZGUpKSB7CiAJCWt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIGV4LSZndDt2ZWN0b3IsCiAJCQkJCSAgIGV4LSZndDtoYXNfZXJyb3JfY29kZSwgZXgtJmd0O2Vycm9yX2NvZGUsCiAJCQkJCSAgIGV4LSZndDtoYXNfcGF5bG9hZCwgZXgtJmd0O3BheWxvYWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IDhlY2U0NjgwODdhOGVlLi5iNTEwYjYzMWYwYzUyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtOTMsNyAmIzQzOzkzLDcgQEAgaW50IGt2bV9jaGVja19uZXN0ZWRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAvKiBGb3JjaWJseSBsZWF2ZSB0aGUgbmVzdGVkIG1vZGUgaW4gY2FzZXMgbGlrZSBhIHZDUFUgcmVzZXQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDtsZWF2ZV9uZXN0ZWQodmNwdSk7CiYjNDM7CWt2bV9uZXN0ZWRfY2FsbChsZWF2ZV9uZXN0ZWQpKHZjcHUpOwogfQogCiAvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTE3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTUwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMsIGVzc2VudGlhbGx5IHN3YXBwaW5nIG91dCBpbmRpcmVjdCBmdW5jdGlvbiBjYWxscyBmb3Igc3RhdGljIG9uZXMuIFRoZSBnb2FsIGlzIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGJ5IGF2b2lkaW5nIHRob3NlIHJldHBvbGluZS1pbmR1Y2luZyBpbmRpcmVjdCBicmFuY2hlcy4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYGt2bV9uZXN0ZWRfY2FsbGAgYW5kIGBLVk1fWDg2X05FU1RFRF9PUGAgbWFjcm9zLCBhbG9uZyB3aXRoIGEgYGt2bV9uZXN0ZWRfb3BzYCBzdHJ1Y3R1cmUgYW5kIGFuIGBlbmFibGVkYCBmbGFnIHdpdGhpbiBpdC4gVGhpcyBzZWVtcyBwcmV0dHkgY2xlYW4sIG1pbWlja2luZyB0aGUgZXhpc3RpbmcgYGt2bV94ODZfb3BzYCByZWZhY3Rvci4gSXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGNvcmUgeDg2IEtWTSBmaWxlcywgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLgoKRnVuY3Rpb25hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZXJlIGFyZSBubyByZWdyZXNzaW9ucy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwcmltYXJpbHkgcmVwbGFjaW5nIGNoZWNrcyBsaWtlIGBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLSZndDsuLi5gIHdpdGggYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGFuZCB0aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHRocm91Z2ggYGt2bV9uZXN0ZWRfY2FsbGAuIEkgc2VlIHRoYXQgb3B0aW9uYWwgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IHJldHVybmluZyAwIGlmIHRoZXkmIzM5O3JlIG5vdCBkZWZpbmVkLCB3aGljaCAqc2VlbXMqIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgTlVMTCBjaGVja3MuIFRoZSBjaGFuZ2UgdG8gdGhlIGBnZXRfc3RhdGVgIGNoZWNrIGxvb2tzIHNhZmUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGxvZ2ljLCBidXQgd2l0aCBhIGRpZmZlcmVudCBjaGVjay4KCkkgZGlkIHNwb3Qgc29tZSBzdWJ0bGUgZGlmZmVyZW5jZXMsIGZvciBpbnN0YW5jZToKCiogICBTb21lIGNoZWNrcyBub3cgcmVxdWlyZSB0aGUgYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGNoZWNrLCB3aXRoIGEgZGlyZWN0IGNoZWNrIGZvciB0aGUgbmVzdGVkIG9wZXJhdGlvbi4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYW4gaW1wcm92ZW1lbnQgaW4gdGhlIGNhbGxpbmcgbWVjaGFuaXNtLCB3aGljaCwgd2hpbGUgY2hhbmdpbmcgdGhlIGNvbnRyb2wgZmxvdyBzbGlnaHRseSwgbWFpbnRhaW5zIHRoZSBzYW1lIGZ1bmN0aW9uYWwgb3V0cHV0LiBJdCYjMzk7cyBhYm91dCBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCByYXRoZXIgdGhhbiB0aGUgY29yZSBsb2dpYy4KCk5vdywgc2hvdWxkIHdlIGZ1enogdGhpcz8gVGhlIHByb21wdCBzYXlzICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLlB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi5DaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cmIzM0Oy4gSXQgbG9va3MgbGlrZSB0aGlzIG9uZSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIHJlbWFpbnMgdW5jaGFuZ2VkLiBIb3dldmVyLCBpbnRyb2R1Y2luZyBhIG5ldyBzdHJ1Y3R1cmUgYW5kIG5ldyBjYWxsIG1hY3JvcyBkb2VzIGNyZWF0ZSBtb3JlIHBvaW50cyBvZiBmYWlsdXJlLCB3aGljaCBzdWdnZXN0cyBpdCB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LgoKU28sIGxldCYjMzk7cyBzZWUuIE15IGZvY3VzIHBvaW50cyBzaG91bGQgaW5jbHVkZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fY2hlY2tfbmVzdGVkX2V2ZW50c2AsIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLCBgdmNwdV9lbnRlcl9ndWVzdGAsIGBrdm1fdmNwdV9oYXNfZXZlbnRzYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYWxzbyBga3ZtX2dldF9odl9jcHVpZGAsIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYC4gVGhlIGhvdCBwYXRocyBsaWtlIGB2Y3B1X2VudGVyX2d1ZXN0YCBhbmQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBhcmUgaW50ZXJlc3RpbmcsIGJ1dCBJJiMzOTtkIHJhdGhlciBhdm9pZCB0aGVtIGFzIGluaXRpYWwgZnV6emluZyBlbnRyeSBwb2ludHMuIEkmIzM5O2QgbGVhbiB0b3dhcmRzIG9uZXMgc3VjaCBhcyBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYGt2bV9nZXRfaHZfY3B1aWRgLCBhbmQgYGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVgLiBJJiMzOTtsbCBkbyBhIHF1aWNrIGdyZXAgdG8gbWFrZSBzdXJlIHRoZSBga3ZtX25lc3RlZF9vcHNgIGlzbiYjMzk7dCB1c2VkIGluIHNvbWUgYml6YXJyZSBjb3JuZXIgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbmVzdGVkX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTE5NTU9ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcztcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTk1NjpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xOTU3LVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0yNzcyPWludCBrdm1fZ2V0X2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNzg5LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI3OTA6XHRpZiAoa3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNzkxLVx0XHRldm1jc192ZXIgPSBrdm1fbmVzdGVkX2NhbGwoZ2V0X2V2bWNzX3ZlcnNpb24pKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xNTY9c3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzIF9fcmVhZF9tb3N0bHk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTU3OnN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMga3ZtX25lc3RlZF9vcHMgX19yZWFkX21vc3RseTtcbmFyY2gveDg2L2t2bS94ODYuYy0xNTgtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTIxOTQ9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjM1Ni1cdGNhc2UgS1ZNX0NBUF9ORVNURURfU1RBVEU6XG5hcmNoL3g4Ni9rdm0veDg2LmM6MjM1NzpcdFx0ciA9IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgPyBrdm1fbmVzdGVkX2NhbGwoZ2V0X3N0YXRlKShOVUxMLCBOVUxMLCAwKSA6IDA7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjM1OC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTIzNjMtXHRjYXNlIEtWTV9DQVBfSFlQRVJWX0VOTElHSFRFTkVEX1ZNQ1M6XG5hcmNoL3g4Ni9rdm0veDg2LmM6MjM2NDpcdFx0ciA9IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgXHUwMDI2XHUwMDI2IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZV9ldm1jcyAhPSBOVUxMO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTIzNjUtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0zMzUyPXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTMzNzUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzM3NjpcdFx0XHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgfHxcbmFyY2gveDg2L2t2bS94ODYuYzozMzc3Olx0XHRcdCAgICAha3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTMzNzgtXHRcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MzQwNj1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NDItXHRcdHIgPSAtRUlOVkFMO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjM3NDM6XHRcdGlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbmFyY2gveDg2L2t2bS94ODYuYy0zNzQ0LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zNzcxLVx0XHRyID0gLUVJTlZBTDtcbmFyY2gveDg2L2t2bS94ODYuYzozNzcyOlx0XHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzc3My1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjkwMT1zdGF0aWMgdm9pZCBrdm1fc2V0dXBfZWZlcl9jYXBzKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTItXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjkxMzpzdGF0aWMgdm9pZCBrdm1fbmVzdGVkX29wc191cGRhdGUoY29uc3Qgc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyAqbmVzdGVkX29wcylcbmFyY2gveDg2L2t2bS94ODYuYy02OTE0LXtcbmFyY2gveDg2L2t2bS94ODYuYzo2OTE1Olx0bWVtY3B5KFx1MDAyNmt2bV9uZXN0ZWRfb3BzLCBuZXN0ZWRfb3BzLCBzaXplb2Yoa3ZtX25lc3RlZF9vcHMpKTtcbmFyY2gveDg2L2t2bS94ODYuYy02OTE2LVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTctI2RlZmluZSBfX0tWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjkxODpcdHN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X25lc3RlZF8jI2Z1bmMsIGt2bV9uZXN0ZWRfb3BzLmZ1bmMpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTktI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY5MjA6XHRXQVJOX09OKCFrdm1fbmVzdGVkX29wcy5mdW5jKTsgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MjEtI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCBfX0tWTV9YODZfTkVTVEVEX09QXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjkyMi0jZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcbmFyY2gveDg2L2t2bS94ODYuYzo2OTIzOlx0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywgKHZvaWQgKilrdm1fbmVzdGVkX29wcy5mdW5jID8gOiBcXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MjQtXHRcdFx0XHRcdFx0ICAodm9pZCAqKV9fc3RhdGljX2NhbGxfcmV0dXJuMCk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTY5Mjk9c3RhdGljIGlubGluZSB2b2lkIGt2bV9vcHNfdXBkYXRlKHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5NDMtXG5hcmNoL3g4Ni9rdm0veDg2LmM6Njk0NDpcdGt2bV9uZXN0ZWRfb3BzX3VwZGF0ZShvcHMtXHUwMDNlbmVzdGVkX29wcyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjk0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBpbiBLVk0uIFJlcGxhY2luZyB0aG9zZSBpbmRpcmVjdCBjYWxscyB3aXRoIHN0YXRpYyBjYWxscywgdXNpbmcgYGt2bV9uZXN0ZWRfb3BzYCBhbmQgYGt2bV9uZXN0ZWRfY2FsbGAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0IG1lYW5zIGl0JiMzOTtzIG5vdCBqdXN0IGNvc21ldGljOyBpdCYjMzk7cyBhbHRlcmluZyB0aGUgKm1ldGhvZCogb2YgaW52b2NhdGlvbi4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGluaXRpYWxpemF0aW9uIGFuZCB2YWxpZGF0aW9uIG5vdywgcGFydGljdWxhcmx5IHRoYXQgYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGZsYWcuIEEgYnVnIHRoZXJlLCBpbiB0aGUgc2V0dXAgb2YgdGhlIHN0YXRpYyBjYWxscyB0aGVtc2VsdmVzLCBvciBpbiBob3cgdGhhdCBgZW5hYmxlZGAgZmxhZyBpcyBoYW5kbGVkLCBjb3VsZCBiZSBjYXRhc3Ryb3BoaWMuIENyYXNoZXMgb3Igc3VidGxlIG1pc2JlaGF2aW9yIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhcmUgbm90IHNvbWV0aGluZyBJIHdhbnQgdG8gZGVhbCB3aXRoLCBhbmQgdGhvc2UgYXJlIHBvdGVudGlhbGx5IHZlcnkgZGlmZmljdWx0IHRvIGRlYnVnLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCwgb2J2aW91c2x5LCBpcyB0aGUgY29yZS4gVGhlbiB3ZSBoYXZlIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAsIHdoaWNoIGFyZSBlc3NlbnRpYWwgYmVjYXVzZSB0aGV5IHByb3ZpZGUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIFRoZSBkaWZmIGFsc28gYnJpbmdzIHVwIGBLVk1fSFlQRVJWYC4gTm93LCBpcyB0aGF0IGEgc2VwYXJhdGUgb3B0aW9uPyBPciBpcyBpdCBhIHN1Yi1vcHRpb24sIG9yIHBlcmhhcHMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBLVk1gIGlzPyBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy4KCkFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHJldmlldyB0aG9zZSBmb2N1c2VkIHN5bWJvbHM6IGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLCBga3ZtX2dldF9odl9jcHVpZGAsIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYCwgYW5kIGBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwYC4gVGhleSBhcmUgbGlrZWx5IGF0IHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgY2hhbmdpbmcsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGNhbGxlZCBhbmQgY2hhbmdlZCB0byBlbnN1cmUgbm90aGluZyBpcyBicm9rZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9IWVBFUlYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTgyPWNvbmZpZyBLVk1fU01NXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjEyCgkJCQkJCQlvdXRwdXQ6IDE4MAoJCQkJCQkJdGhvdWdodHM6IDQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gTmVzdGVkIFZpcnR1YWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCB0aGlzIHBhdGNoIG92ZXIsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGBLVk1fSFlQRVJWYCBpbiB0aGUgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IHRoaXMgcmVmYWN0b3JpbmcgdG91Y2hlcy4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBhbmQgY29uZmlybSB0aGUgY2hvaWNlcy4KCkZyb20gdGhlIGFuYWx5c2lzLCB0aGlzIGlzICoqd29ydGggZnV6emluZyoqLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBzb3VuZC4gVGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGhvdyBLVk0gaGFuZGxlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIHNwZWNpZmljYWxseSBtb3ZpbmcgZnJvbSBpbmRpcmVjdCBmdW5jdGlvbiBwb2ludGVycyB0byBzdGF0aWMgY2FsbHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IHRoYXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gc3RlcHMsIHBhcnRpY3VsYXJseSB0aGUgYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGNoZWNrLiBHaXZlbiB0aGlzIGNoYW5nZSBpbiBjb250cm9sIGZsb3csIGFueSBidWdzIGhlcmUgY291bGQgYmUgbmFzdHksIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvcnMgd2hlbiBuZXN0aW5nIFZNcywgd2hpY2ggY2FuIGJlIGRpZmZpY3VsdCB0byBkaWFnbm9zZS4KClRoZSBpbml0aWFsIHNlbGVjdGlvbiBvZiAqKmZvY3VzIHN5bWJvbHMqKiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgcmV2aWV3ZWQgdGhlIGxpc3QgYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBzdXJlOiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCwgYGt2bV9nZXRfaHZfY3B1aWRgLCBga3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZWAsIGFuZCBga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcGAuCgpEb3VibGUtY2hlY2tpbmcsIGBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwYCBoYW5kbGVzIGBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTYCB3aGljaCwgYXMgZXhwZWN0ZWQsIHVsdGltYXRlbHkgdXNlcyBga3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzYC4gUGVyZmVjdC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHN5bWJvbC4KClRoZW4sIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBkZWFscyB3aXRoIGBLVk1fQ0FQX05FU1RFRF9TVEFURWAgYW5kIGBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTYCwgYW5kIHRoYXQgYWxpZ25zIHdpdGggdGhlIGNoYW5nZXMgYW5kIG5ldyBsb2dpYy4gSXQmIzM5O3MgYSB2YWxpZCBjaG9pY2UuCgpga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaGFuZGxpbmcgb2YgYEtWTV9HRVRfTkVTVEVEX1NUQVRFYCBhbmQgYEtWTV9TRVRfTkVTVEVEX1NUQVRFYCBtYWtlcyBpdCBhIHNvbGlkIGNob2ljZS4KCmBrdm1fZ2V0X2h2X2NwdWlkYCB1c2VzIGBnZXRfZXZtY3NfdmVyc2lvbmAsIHNvIGl0IGFsc28gd2FycmFudHMgc2NydXRpbnkuCgpBbmQgZmluYWxseSwgYGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVgIGlzIGNhbGxpbmcgYGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoYCwgc28gaXQgZml0cyB0aGUgZm9jdXMgdG9vLgoKWWVzLCB0aGlzIGlzIGFsbCBnb29kLiBJIGNhbiBwcm9jZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfaHZfY3B1aWQmIzM0OywKICAgICYjMzQ7a3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDtrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMgdG8gdXNlIHN0YXRpYyBjYWxscyBpbnN0ZWFkIG9mIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIGNoYW5nZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG1lY2hhbmlzbSBhbmQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gYW5kIGNoZWNraW5nIGxvZ2ljIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKS4gQnVncyBpbiB0aGlzIHJlZmFjdG9yaW5nIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24mIzM0OywKICAgICYjMzQ7a3ZtX2dldF9odl9jcHVpZCYjMzQ7LAogICAgJiMzNDtrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyB0byB1c2Ugc3RhdGljIGNhbGxzIGluc3RlYWQgb2YgaW5kaXJlY3QgZnVuY3Rpb24gcG9pbnRlcnMuIFRoaXMgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgbWVjaGFuaXNtIGFuZCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgbG9naWMgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpLiBCdWdzIGluIHRoaXMgcmVmYWN0b3JpbmcgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6NTY6MzguNDYzNTg2NTg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0OTgzMTU1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCIsXG4gICAgXCJrdm1fZ2V0X2h2X2NwdWlkXCIsXG4gICAgXCJrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyB0byB1c2Ugc3RhdGljIGNhbGxzIGluc3RlYWQgb2YgaW5kaXJlY3QgZnVuY3Rpb24gcG9pbnRlcnMuIFRoaXMgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgbWVjaGFuaXNtIGFuZCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgbG9naWMgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpLiBCdWdzIGluIHRoaXMgcmVmYWN0b3JpbmcgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjo1NjozOC40NjM1OTU2OTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTE0Nzc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyNmI1MzgyNWFhYzJmMzllMzE3MzdkZjdhNTZjYTcxYmIyMzBkYjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwMjo1NjozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGIxYmU1YmNlY2FhNDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcXG5AQCAtMCwwICsxLDM2IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZiAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUCkgfHwgXFxcXFxcbisgICAgIWRlZmluZWQoS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwpIHx8IFxcXFxcXG4rICAgICFkZWZpbmVkKEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDApXFxuKyNlcnJvciBNaXNzaW5nIG9uZSBvciBtb3JlIEtWTV9YODZfTkVTVEVEX09QICNkZWZpbmVzXFxuKyNlbHNlXFxuKy8qXFxuKyAqIEtWTV9YODZfTkVTVEVEX09QKCkgYW5kIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKCkgYXJlIHVzZWQgdG8gaGVscFxcbisgKiBnZW5lcmF0ZSBib3RoIERFQ0xBUkUvREVGSU5FX1NUQVRJQ19DQUxMKCkgaW52b2NhdGlvbnMgYW5kXFxuKyAqIFxcXCJzdGF0aWNfY2FsbF91cGRhdGUoKVxcXCIgY2FsbHMuXFxuKyAqXFxuKyAqIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKCkgY2FuIGJlIHVzZWQgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGNhbiBoYXZlXFxuKyAqIGEgTlVMTCBkZWZpbml0aW9uLiAgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCgpIGNhbiBiZSB1c2VkIGxpa2V3aXNlXFxuKyAqIHRvIG1ha2UgYSBkZWZpbml0aW9uIG9wdGlvbmFsLCBidXQgaW4gdGhpcyBjYXNlIHRoZSBkZWZhdWx0IHdpbGxcXG4rICogYmUgX19zdGF0aWNfY2FsbF9yZXR1cm4wLlxcbisgKi9cXG4rS1ZNX1g4Nl9ORVNURURfT1AobGVhdmVfbmVzdGVkKVxcbitLVk1fWDg2X05FU1RFRF9PUChpc19leGNlcHRpb25fdm1leGl0KVxcbitLVk1fWDg2X05FU1RFRF9PUChjaGVja19ldmVudHMpXFxuK0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoaGFzX2V2ZW50cylcXG4rS1ZNX1g4Nl9ORVNURURfT1AodHJpcGxlX2ZhdWx0KVxcbitLVk1fWDg2X05FU1RFRF9PUChnZXRfc3RhdGUpXFxuK0tWTV9YODZfTkVTVEVEX09QKHNldF9zdGF0ZSlcXG4rS1ZNX1g4Nl9ORVNURURfT1AoZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcylcXG4rS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCh3cml0ZV9sb2dfZGlydHkpXFxuK0tWTV9YODZfTkVTVEVEX09QKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKVxcbisjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG4rS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwoZW5hYmxlX2V2bWNzKVxcbitLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKGdldF9ldm1jc192ZXJzaW9uKVxcbitLVk1fWDg2X05FU1RFRF9PUChodl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaClcXG4rI2VuZGlmXFxuKyNlbmRpZlxcbitcXG4rI3VuZGVmIEtWTV9YODZfTkVTVEVEX09QXFxuKyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTFxcbisjdW5kZWYgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi43ZTA3YTljMjU5ZDA5MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC0xODQyLDggKzE4NDIsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbiBcXG4gXFx0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuLVxcdGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XFxuLVxcbiBcXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0dm9pZCAoKnZjcHVfdW5ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuQEAgLTE5MDYsNiArMTkwNCw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHtcXG4rXFx0Ym9vbCBlbmFibGVkO1xcbitcXG4gXFx0dm9pZCAoKmxlYXZlX25lc3RlZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFx0Ym9vbCAoKmlzX2V4Y2VwdGlvbl92bWV4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yLFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIGVycm9yX2NvZGUpO1xcbkBAIC0xOTM3LDYgKzE5MzcsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyB7XFxuIFxcbiBcXHRzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKnJ1bnRpbWVfb3BzO1xcbiBcXHRzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHM7XFxuK1xcdHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3ZtX2FyY2hfYXN5bmNfcGYge1xcbkBAIC0xOTUyLDYgKzE5NTMsNyBAQCBleHRlcm4gYm9vbCBfX3JlYWRfbW9zdGx5IGVuYWJsZV9hcGljdjtcXG4gZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfaXBpdjtcXG4gZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfZGV2aWNlX3Bvc3RlZF9pcnFzO1xcbiBleHRlcm4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzO1xcbitleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xcbiBcXG4gI2RlZmluZSBrdm1feDg2X2NhbGwoZnVuYykgc3RhdGljX2NhbGwoa3ZtX3g4Nl8jI2Z1bmMpXFxuIFxcbkBAIC0xOTYxLDYgKzE5NjMsMTQgQEAgZXh0ZXJuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcztcXG4gI2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9PUFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bS14ODYtb3BzLmhcXHUwMDNlXFxuIFxcbisjZGVmaW5lIGt2bV9uZXN0ZWRfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2X25lc3RlZF8jI2Z1bmMpXFxuK1xcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXFxcXG4rXFx0REVDTEFSRV9TVEFUSUNfQ0FMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsICooKChzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICopMCktXFx1MDAzZWZ1bmMpKTtcXG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCBLVk1fWDg2X05FU1RFRF9PUFxcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9ORVNURURfT1BcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFxcdTAwM2VcXG4rXFxuICNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcXG5pbmRleCAxZWUwZDIzZjg5NDk3NC4uYjAxMGRjYTM3YjlkMWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jXFxuQEAgLTI0MDYsNyArMjQwNiw3IEBAIHN0YXRpYyBpbnQga3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCByZXN1bHQpXFxuIFxcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbiBcXG4gXFx0aWYgKHRsYl9sb2NrX2NvdW50KVxcbi1cXHRcXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2Vodl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaCh2Y3B1KTtcXG4rXFx0XFx0a3ZtX25lc3RlZF9jYWxsKGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKSh2Y3B1KTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMjc4Nyw4ICsyNzg3LDggQEAgaW50IGt2bV9nZXRfaHZfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsXFxuIFxcdH07XFxuIFxcdGludCBpLCBuZW50ID0gQVJSQVlfU0laRShjcHVpZF9lbnRyaWVzKTtcXG4gXFxuLVxcdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfZXZtY3NfdmVyc2lvbilcXG4tXFx0XFx0ZXZtY3NfdmVyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X2V2bWNzX3ZlcnNpb24odmNwdSk7XFxuK1xcdGlmIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxcbitcXHRcXHRldm1jc192ZXIgPSBrdm1fbmVzdGVkX2NhbGwoZ2V0X2V2bWNzX3ZlcnNpb24pKHZjcHUpO1xcbiBcXG4gXFx0aWYgKGNwdWlkLVxcdTAwM2VuZW50IFxcdTAwM2MgbmVudClcXG4gXFx0XFx0cmV0dXJuIC1FMkJJRztcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5oIGIvYXJjaC94ODYva3ZtL21tdS5oXFxuaW5kZXggYzlmNjI4Yjk3ZGFlYjkuLmZhMDVjYTJjODU0OWU1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaFxcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUuaFxcbkBAIC0zODUsOSArMzg1LDggQEAgc3RhdGljIGlubGluZSBncGFfdCBrdm1fdHJhbnNsYXRlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0aWYgKCFtbXVfaXNfbmVzdGVkKHZjcHUpIHx8IHcgPT0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubmdwYV93YWxrKVxcbiBcXHRcXHRyZXR1cm4gZ3BhO1xcbi1cXHRyZXR1cm4ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNldHJhbnNsYXRlX25lc3RlZF9ncGEodmNwdSwgZ3BhLCBhY2Nlc3MsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBleGNlcHRpb24sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwdGVfYWNjZXNzKTtcXG4rXFx0cmV0dXJuIGt2bV9uZXN0ZWRfY2FsbCh0cmFuc2xhdGVfbmVzdGVkX2dwYSkodmNwdSwgZ3BhLCBhY2Nlc3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXhjZXB0aW9uLCBwdGVfYWNjZXNzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9oYXNfbWlycm9yZWRfdGRwKGNvbnN0IHN0cnVjdCBrdm0gKmt2bSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oXFxuaW5kZXggZTczZmMwOWVjNGRiMmUuLjRlZTdiMDNlNzYyZDBmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaFxcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaFxcbkBAIC0yMzUsNyArMjM1LDcgQEAgc3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHQhKHB0ZSBcXHUwMDI2IFBUX0dVRVNUX0RJUlRZX01BU0spKSB7XFxuIFxcdFxcdFxcdHRyYWNlX2t2bV9tbXVfc2V0X2RpcnR5X2JpdCh0YWJsZV9nZm4sIGluZGV4LCBzaXplb2YocHRlKSk7XFxuICNpZiBQVFRZUEUgPT0gUFRUWVBFX0VQVFxcbi1cXHRcXHRcXHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNld3JpdGVfbG9nX2RpcnR5KHZjcHUsIGFkZHIpKVxcbitcXHRcXHRcXHRpZiAoa3ZtX25lc3RlZF9jYWxsKHdyaXRlX2xvZ19kaXJ0eSkodmNwdSwgYWRkcikpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAjZW5kaWZcXG4gXFx0XFx0XFx0cHRlIHw9IFBUX0dVRVNUX0RJUlRZX01BU0s7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuaW5kZXggYmE5ODVhMDIyMDhhM2UuLjVmNmQ5OTcxYTNmMjI0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuQEAgLTIxNjIsNyArMjE2Miw3IEBAIHN0YXRpYyBncGFfdCBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuIFxcdHJldHVybiB3LVxcdTAwM2VndmFfdG9fZ3BhKHZjcHUsIHcsIGdwYSwgYWNjZXNzLCBleGNlcHRpb24pO1xcbiB9XFxuIFxcbi1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0ge1xcbitzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzIF9faW5pdGRhdGEgPSB7XFxuIFxcdC5sZWF2ZV9uZXN0ZWQgPSBzdm1fbGVhdmVfbmVzdGVkLFxcbiBcXHQudHJhbnNsYXRlX25lc3RlZF9ncGEgPSBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEsXFxuIFxcdC5pc19leGNlcHRpb25fdm1leGl0ID0gbmVzdGVkX3N2bV9pc19leGNlcHRpb25fdm1leGl0LFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li5kMzgwN2Y0YWJiNDk5ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC01NDI2LDggKzU0MjYsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LmNoZWNrX2ludGVyY2VwdCA9IHN2bV9jaGVja19pbnRlcmNlcHQsXFxuIFxcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSBzdm1faGFuZGxlX2V4aXRfaXJxb2ZmLFxcbiBcXG4tXFx0Lm5lc3RlZF9vcHMgPSBcXHUwMDI2c3ZtX25lc3RlZF9vcHMsXFxuLVxcbiBcXHQuZGVsaXZlcl9pbnRlcnJ1cHQgPSBzdm1fZGVsaXZlcl9pbnRlcnJ1cHQsXFxuIFxcdC5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsXFxuIFxcdC5zZXR1cF9tY2UgPSBzdm1fc2V0dXBfbWNlLFxcbkBAIC01NjQ2LDYgKzU2NDQsNyBAQCBzdGF0aWMgX19pbml0IGludCBzdm1faGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbiBcXHR9XFxuK1xcdHN2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgPSBuZXN0ZWQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBLVk0ncyBNTVUgZG9lc24ndCBzdXBwb3J0IHVzaW5nIDItbGV2ZWwgcGFnaW5nIGZvciBpdHNlbGYsIGFuZCB0aHVzXFxuQEAgLTU3NzIsNiArNTc3MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyBzdm1faW5pdF9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFxuIFxcdC5ydW50aW1lX29wcyA9IFxcdTAwMjZzdm1feDg2X29wcyxcXG4gXFx0LnBtdV9vcHMgPSBcXHUwMDI2YW1kX3BtdV9vcHMsXFxuK1xcdC5uZXN0ZWRfb3BzID0gXFx1MDAyNnN2bV9uZXN0ZWRfb3BzLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgX19zdm1fZXhpdCh2b2lkKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuaW5kZXggODNkOTkyMTI3N2VhYzIuLjA0Zjk4NmUzZDQzOWFmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5AQCAtOTk1LDggKzk5NSw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuIFxcbiBcXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSxcXG4gXFxuLVxcdC5uZXN0ZWRfb3BzID0gXFx1MDAyNnZteF9uZXN0ZWRfb3BzLFxcbi1cXG4gXFx0LnBpX3VwZGF0ZV9pcnRlID0gdm14X3BpX3VwZGF0ZV9pcnRlLFxcbiBcXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcXG4gXFxuQEAgLTEwMzgsNiArMTAzNiw3IEBAIHN0cnVjdCBrdm1feDg2X2luaXRfb3BzIHZ0X2luaXRfb3BzIF9faW5pdGRhdGEgPSB7XFxuIFxcbiBcXHQucnVudGltZV9vcHMgPSBcXHUwMDI2dnRfeDg2X29wcyxcXG4gXFx0LnBtdV9vcHMgPSBcXHUwMDI2aW50ZWxfcG11X29wcyxcXG4rXFx0Lm5lc3RlZF9vcHMgPSBcXHUwMDI2dm14X25lc3RlZF9vcHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdnRfZXhpdCh2b2lkKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbmluZGV4IDA2MzVlOTI0NzFjODllLi5jYmIyMDlkOGE4ZjBkMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbkBAIC03NDg0LDcgKzc0ODQsNyBAQCBzdGF0aWMgZ3BhX3Qgdm14X3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbiBcXHRyZXR1cm4gdy1cXHUwMDNlZ3ZhX3RvX2dwYSh2Y3B1LCB3LCBncGEsIGFjY2VzcywgZXhjZXB0aW9uKTtcXG4gfVxcbiBcXG4tc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcXG4rc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQubGVhdmVfbmVzdGVkID0gdm14X2xlYXZlX25lc3RlZCxcXG4gXFx0LnRyYW5zbGF0ZV9uZXN0ZWRfZ3BhID0gdm14X3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhLFxcbiBcXHQuaXNfZXhjZXB0aW9uX3ZtZXhpdCA9IG5lc3RlZF92bXhfaXNfZXhjZXB0aW9uX3ZtZXhpdCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCAzNjgxZDU2NWYxNzc4OS4uZWY5ZTFiYzM5ZWRiYmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5AQCAtODc4Niw2ICs4Nzg2LDcgQEAgX19pbml0IGludCB2bXhfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbiBcXHR9XFxuK1xcdHZteF9uZXN0ZWRfb3BzLmVuYWJsZWQgPSBuZXN0ZWQ7XFxuIFxcbiBcXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKHBpX3dha2V1cF9oYW5kbGVyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IDA2MjZlODM1ZTllYjc3Li41YmE0YWFjMzc2NDA2YyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMTU0LDYgKzE1NCw3IEBAIHN0YXRpYyBpbnQgc3luY19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgodmVuZG9yX21vZHVsZV9sb2NrKTtcXG4gXFxuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcyBfX3JlYWRfbW9zdGx5O1xcbitzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7XFxuIFxcbiAjZGVmaW5lIEtWTV9YODZfT1AoZnVuYylcXHRcXHRcXHRcXHRcXHQgICAgIFxcXFxcXG4gXFx0REVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl8jI2Z1bmMsXFx0XFx0XFx0ICAgICBcXFxcXFxuQEAgLTE2NSw2ICsxNjYsMTMgQEAgRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2dldF9jc19kYl9sX2JpdHMpO1xcbiBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfY2FjaGVfcmVnKTtcXG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2dldF9jcGwpO1xcbiBcXG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0REVGSU5FX1NUQVRJQ19DQUxMX05VTEwoa3ZtX3g4Nl9uZXN0ZWRfIyNmdW5jLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0KigoKHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKikwKS1cXHUwMDNlZnVuYykpO1xcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIEtWTV9YODZfTkVTVEVEX09QXFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X05FU1RFRF9PUFxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXFx1MDAzZVxcbitcXG4gdW5zaWduZWQgaW50IG1pbl90aW1lcl9wZXJpb2RfdXMgPSAyMDA7XFxuIG1vZHVsZV9wYXJhbShtaW5fdGltZXJfcGVyaW9kX3VzLCB1aW50LCAwNjQ0KTtcXG4gXFxuQEAgLTQ1NCw3ICs0NjIsNyBAQCBzdGF0aWMgdm9pZCBrdm1fbXVsdGlwbGVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG5yLFxcbiBcXHQgKiB3YW50cyB0byBpbnRlcmNlcHQgdGhlIGV4Y2VwdGlvbi5cXG4gXFx0ICovXFxuIFxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2Vpc19leGNlcHRpb25fdm1leGl0KHZjcHUsIG5yLCBlcnJvcl9jb2RlKSkge1xcbitcXHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIG5yLCBlcnJvcl9jb2RlKSkge1xcbiBcXHRcXHRrdm1fcXVldWVfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgaGFzX2Vycm9yLCBlcnJvcl9jb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBoYXNfcGF5bG9hZCwgcGF5bG9hZCk7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjM0NiwxNSArMjM1NCwxNCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRcXHRcXHRyIFxcdTAwMjY9IH5LVk1fWDJBUElDX0VOQUJMRV9TVVBQUkVTU19FT0lfQlJPQURDQVNUO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX05FU1RFRF9TVEFURTpcXG4tXFx0XFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWdldF9zdGF0ZSA/XFxuLVxcdFxcdFxcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWdldF9zdGF0ZShOVUxMLCBOVUxMLCAwKSA6IDA7XFxuK1xcdFxcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkID8ga3ZtX25lc3RlZF9jYWxsKGdldF9zdGF0ZSkoTlVMTCwgTlVMTCwgMCkgOiAwO1xcbiBcXHRcXHRicmVhaztcXG4gI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuIFxcdGNhc2UgS1ZNX0NBUF9IWVBFUlZfRElSRUNUX1RMQkZMVVNIOlxcbiBcXHRcXHRyID0ga3ZtX3g4Nl9vcHMuZW5hYmxlX2wyX3RsYl9mbHVzaCAhPSBOVUxMO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOlxcbi1cXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZW5hYmxlX2V2bWNzICE9IE5VTEw7XFxuK1xcdFxcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZV9ldm1jcyAhPSBOVUxMO1xcbiBcXHRcXHRicmVhaztcXG4gI2VuZGlmXFxuIFxcdGNhc2UgS1ZNX0NBUF9TTUFMTEVSX01BWFBIWUFERFI6XFxuQEAgLTMzNjYsOSArMzM3MywxMCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHR1aW50MTZfdCB2bWNzX3ZlcnNpb247XFxuIFxcdFxcdFxcdHZvaWQgX191c2VyICp1c2VyX3B0cjtcXG4gXFxuLVxcdFxcdFxcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZW5hYmxlX2V2bWNzKVxcbitcXHRcXHRcXHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgfHxcXG4rXFx0XFx0XFx0ICAgICFrdm1fbmVzdGVkX29wcy5lbmFibGVfZXZtY3MpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi1cXHRcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZW5hYmxlX2V2bWNzKHZjcHUsIFxcdTAwMjZ2bWNzX3ZlcnNpb24pO1xcbitcXHRcXHRcXHRyID0ga3ZtX25lc3RlZF9jYWxsKGVuYWJsZV9ldm1jcykodmNwdSwgXFx1MDAyNnZtY3NfdmVyc2lvbik7XFxuIFxcdFxcdFxcdGlmICghcikge1xcbiBcXHRcXHRcXHRcXHR1c2VyX3B0ciA9ICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpY2FwLVxcdTAwM2VhcmdzWzBdO1xcbiBcXHRcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHVzZXJfcHRyLCBcXHUwMDI2dm1jc192ZXJzaW9uLFxcbkBAIC0zNzMyLDcgKzM3NDAsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdHUzMiB1c2VyX2RhdGFfc2l6ZTtcXG4gXFxuIFxcdFxcdHIgPSAtRUlOVkFMO1xcbi1cXHRcXHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWdldF9zdGF0ZSlcXG4rXFx0XFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2YodXNlcl9kYXRhX3NpemUpICE9IHNpemVvZih1c2VyX2t2bV9uZXN0ZWRfc3RhdGUtXFx1MDAzZXNpemUpKTtcXG5AQCAtMzc0MCw4ICszNzQ4LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRpZiAoZ2V0X3VzZXIodXNlcl9kYXRhX3NpemUsIFxcdTAwMjZ1c2VyX2t2bV9uZXN0ZWRfc3RhdGUtXFx1MDAzZXNpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfc3RhdGUodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVzZXJfZGF0YV9zaXplKTtcXG4rXFx0XFx0ciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgdXNlcl9kYXRhX3NpemUpO1xcbiBcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5AQCAtMzc2Miw3ICszNzY5LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRpbnQgaWR4O1xcbiBcXG4gXFx0XFx0ciA9IC1FSU5WQUw7XFxuLVxcdFxcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlc2V0X3N0YXRlKVxcbitcXHRcXHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuQEAgLTM3ODUsNyArMzc5Miw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG4tXFx0XFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZXNldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFxcdTAwMjZrdm1fc3RhdGUpO1xcbitcXHRcXHRyID0ga3ZtX25lc3RlZF9jYWxsKHNldF9zdGF0ZSkodmNwdSwgdXNlcl9rdm1fbmVzdGVkX3N0YXRlLCBcXHUwMDI2a3ZtX3N0YXRlKTtcXG4gXFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC02OTAzLDYgKzY5MTAsMjIgQEAgc3RhdGljIHZvaWQga3ZtX3NldHVwX2VmZXJfY2Fwcyh2b2lkKVxcbiBcXHRcXHRrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX0FVVE9JQlJTKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3ZtX25lc3RlZF9vcHNfdXBkYXRlKGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHMpXFxuK3tcXG4rXFx0bWVtY3B5KFxcdTAwMjZrdm1fbmVzdGVkX29wcywgbmVzdGVkX29wcywgc2l6ZW9mKGt2bV9uZXN0ZWRfb3BzKSk7XFxuK1xcbisjZGVmaW5lIF9fS1ZNX1g4Nl9ORVNURURfT1AoZnVuYykgXFxcXFxcbitcXHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9uZXN0ZWRfIyNmdW5jLCBrdm1fbmVzdGVkX29wcy5mdW5jKTtcXG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxcXFxuK1xcdFdBUk5fT04oIWt2bV9uZXN0ZWRfb3BzLmZ1bmMpOyBfX0tWTV9YODZfTkVTVEVEX09QKGZ1bmMpXFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgX19LVk1fWDg2X05FU1RFRF9PUFxcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcXFxcbitcXHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9uZXN0ZWRfIyNmdW5jLCAodm9pZCAqKWt2bV9uZXN0ZWRfb3BzLmZ1bmMgPyA6IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAodm9pZCAqKV9fc3RhdGljX2NhbGxfcmV0dXJuMCk7XFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcXHUwMDNlXFxuKyN1bmRlZiBfX0tWTV9YODZfTkVTVEVEX09QXFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fb3BzX3VwZGF0ZShzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbiB7XFxuIFxcdG1lbWNweShcXHUwMDI2a3ZtX3g4Nl9vcHMsIG9wcy1cXHUwMDNlcnVudGltZV9vcHMsIHNpemVvZihrdm1feDg2X29wcykpO1xcbkBAIC02OTE4LDYgKzY5NDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX29wc191cGRhdGUoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0teDg2LW9wcy5oXFx1MDAzZVxcbiAjdW5kZWYgX19LVk1fWDg2X09QXFxuIFxcbitcXHRrdm1fbmVzdGVkX29wc191cGRhdGUob3BzLVxcdTAwM2VuZXN0ZWRfb3BzKTtcXG4rXFxuIFxcdGt2bV9wbXVfb3BzX3VwZGF0ZShvcHMtXFx1MDAzZXBtdV9vcHMpO1xcbiB9XFxuIFxcbkBAIC03NDU0LDExICs3NDc5LDExIEBAIHN0YXRpYyB2b2lkIHBvc3Rfa3ZtX3J1bl9zYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gaW50IGt2bV9jaGVja19uZXN0ZWRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSkpIHtcXG4tXFx0XFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNldHJpcGxlX2ZhdWx0KHZjcHUpO1xcbitcXHRcXHRrdm1fbmVzdGVkX2NhbGwodHJpcGxlX2ZhdWx0KSh2Y3B1KTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VjaGVja19ldmVudHModmNwdSk7XFxuK1xcdHJldHVybiBrdm1fbmVzdGVkX2NhbGwoY2hlY2tfZXZlbnRzKSh2Y3B1KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQga3ZtX2luamVjdF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC03Njk2LDkgKzc3MjEsNyBAQCBzdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzKHZjcHUsIHRydWUpKVxcbitcXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcXHUwMDI2XFx1MDAyNiBrdm1fbmVzdGVkX2NhbGwoaGFzX2V2ZW50cykodmNwdSwgdHJ1ZSkpXFxuIFxcdFxcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xcbiBcXG4gXFx0LypcXG5AQCAtODAyMSw3ICs4MDQ0LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcXG4tXFx0XFx0XFx0aWYgKHVubGlrZWx5KCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHZjcHUpKSkge1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkoIWt2bV9uZXN0ZWRfY2FsbChnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKSh2Y3B1KSkpIHtcXG4gXFx0XFx0XFx0XFx0ciA9IDA7XFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRcXHR9XFxuQEAgLTgwNzMsNyArODA5Niw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpKSB7XFxuIFxcdFxcdFxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpKVxcbi1cXHRcXHRcXHRcXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2V0cmlwbGVfZmF1bHQodmNwdSk7XFxuK1xcdFxcdFxcdFxcdGt2bV9uZXN0ZWRfY2FsbCh0cmlwbGVfZmF1bHQpKHZjcHUpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xcbiBcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfU0hVVERPV047XFxuQEAgLTg0OTEsOSArODUxNCw3IEBAIGJvb2wga3ZtX3ZjcHVfaGFzX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmIChrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzKHZjcHUsIGZhbHNlKSlcXG4rXFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjYga3ZtX25lc3RlZF9jYWxsKGhhc19ldmVudHMpKHZjcHUsIGZhbHNlKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRpZiAoa3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHModmNwdSkpXFxuQEAgLTg4OTYsOCArODkxNyw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqIGEgcGVuZGluZyBWTS1FeGl0IGlmIEwxIHdhbnRzIHRvIGludGVyY2VwdCB0aGUgZXhjZXB0aW9uLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uX2Zyb21fdXNlcnNwYWNlIFxcdTAwMjZcXHUwMDI2IGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXFx1MDAzZXZlY3RvcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZXgtXFx1MDAzZWVycm9yX2NvZGUpKSB7XFxuK1xcdCAgICBrdm1fbmVzdGVkX2NhbGwoaXNfZXhjZXB0aW9uX3ZtZXhpdCkodmNwdSwgZXgtXFx1MDAzZXZlY3RvciwgZXgtXFx1MDAzZWVycm9yX2NvZGUpKSB7XFxuIFxcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIGV4LVxcdTAwM2V2ZWN0b3IsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGV4LVxcdTAwM2VoYXNfZXJyb3JfY29kZSwgZXgtXFx1MDAzZWVycm9yX2NvZGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGV4LVxcdTAwM2VoYXNfcGF5bG9hZCwgZXgtXFx1MDAzZXBheWxvYWQpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcXG5pbmRleCA4ZWNlNDY4MDg3YThlZS4uYjUxMGI2MzFmMGM1MjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXFxuQEAgLTkzLDcgKzkzLDcgQEAgaW50IGt2bV9jaGVja19uZXN0ZWRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIC8qIEZvcmNpYmx5IGxlYXZlIHRoZSBuZXN0ZWQgbW9kZSBpbiBjYXNlcyBsaWtlIGEgdkNQVSByZXNldCAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlbGVhdmVfbmVzdGVkKHZjcHUpO1xcbitcXHRrdm1fbmVzdGVkX2NhbGwobGVhdmVfbmVzdGVkKSh2Y3B1KTtcXG4gfVxcbiBcXG4gLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6NTY6MzkuNDI3NjgzNDkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUzNDE5ODk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxcIixcbiAgICBcImt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25cIixcbiAgICBcImt2bV9nZXRfaHZfY3B1aWRcIixcbiAgICBcImt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVcIixcbiAgICBcImt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvcGVyYXRpb25zIHRvIHVzZSBzdGF0aWMgY2FsbHMgaW5zdGVhZCBvZiBpbmRpcmVjdCBmdW5jdGlvbiBwb2ludGVycy4gVGhpcyBjaGFuZ2VzIHRoZSBleGVjdXRpb24gZmxvdyBtZWNoYW5pc20gYW5kIGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uIGFuZCBjaGVja2luZyBsb2dpYyAoa3ZtX25lc3RlZF9vcHMuZW5hYmxlZCkuIEJ1Z3MgaW4gdGhpcyByZWZhY3RvcmluZyBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI2YjUzODI1YWFjMmYzOWUzMTczN2RmN2E1NmNhNzFiYjIzMGRiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDI6NTY6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtbmVzdGVkLW9wcy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMWJlNWJjZWNhYTQ4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFxuQEAgLTAsMCArMSwzNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rI2lmICFkZWZpbmVkKEtWTV9YODZfTkVTVEVEX09QKSB8fCBcXFxuKyAgICAhZGVmaW5lZChLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCkgfHwgXFxcbisgICAgIWRlZmluZWQoS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMClcbisjZXJyb3IgTWlzc2luZyBvbmUgb3IgbW9yZSBLVk1fWDg2X05FU1RFRF9PUCAjZGVmaW5lc1xuKyNlbHNlXG4rLypcbisgKiBLVk1fWDg2X05FU1RFRF9PUCgpIGFuZCBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCgpIGFyZSB1c2VkIHRvIGhlbHBcbisgKiBnZW5lcmF0ZSBib3RoIERFQ0xBUkUvREVGSU5FX1NUQVRJQ19DQUxMKCkgaW52b2NhdGlvbnMgYW5kXG4rICogXCJzdGF0aWNfY2FsbF91cGRhdGUoKVwiIGNhbGxzLlxuKyAqXG4rICogS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwoKSBjYW4gYmUgdXNlZCBmb3IgdGhvc2UgZnVuY3Rpb25zIHRoYXQgY2FuIGhhdmVcbisgKiBhIE5VTEwgZGVmaW5pdGlvbi4gIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoKSBjYW4gYmUgdXNlZCBsaWtld2lzZVxuKyAqIHRvIG1ha2UgYSBkZWZpbml0aW9uIG9wdGlvbmFsLCBidXQgaW4gdGhpcyBjYXNlIHRoZSBkZWZhdWx0IHdpbGxcbisgKiBiZSBfX3N0YXRpY19jYWxsX3JldHVybjAuXG4rICovXG4rS1ZNX1g4Nl9ORVNURURfT1AobGVhdmVfbmVzdGVkKVxuK0tWTV9YODZfTkVTVEVEX09QKGlzX2V4Y2VwdGlvbl92bWV4aXQpXG4rS1ZNX1g4Nl9ORVNURURfT1AoY2hlY2tfZXZlbnRzKVxuK0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoaGFzX2V2ZW50cylcbitLVk1fWDg2X05FU1RFRF9PUCh0cmlwbGVfZmF1bHQpXG4rS1ZNX1g4Nl9ORVNURURfT1AoZ2V0X3N0YXRlKVxuK0tWTV9YODZfTkVTVEVEX09QKHNldF9zdGF0ZSlcbitLVk1fWDg2X05FU1RFRF9PUChnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKVxuK0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAod3JpdGVfbG9nX2RpcnR5KVxuK0tWTV9YODZfTkVTVEVEX09QKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKVxuKyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuK0tWTV9YODZfTkVTVEVEX09QX09QVElPTkFMKGVuYWJsZV9ldm1jcylcbitLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwKGdldF9ldm1jc192ZXJzaW9uKVxuK0tWTV9YODZfTkVTVEVEX09QKGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKVxuKyNlbmRpZlxuKyNlbmRpZlxuK1xuKyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUFxuKyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTFxuKyN1bmRlZiBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTF9SRVQwXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI1MTcyNTdhNjMxNTMyLi43ZTA3YTljMjU5ZDA5MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xODQyLDggKzE4NDIsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFxuIFx0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1cdGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XG4tXG4gXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG5AQCAtMTkwNiw2ICsxOTA0LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiB9O1xuIFxuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMge1xuK1x0Ym9vbCBlbmFibGVkO1xuK1xuIFx0dm9pZCAoKmxlYXZlX25lc3RlZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGJvb2wgKCppc19leGNlcHRpb25fdm1leGl0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3RvcixcbiBcdFx0XHRcdCAgICB1MzIgZXJyb3JfY29kZSk7XG5AQCAtMTkzNyw2ICsxOTM3LDcgQEAgc3RydWN0IGt2bV94ODZfaW5pdF9vcHMge1xuIFxuIFx0c3RydWN0IGt2bV94ODZfb3BzICpydW50aW1lX29wcztcbiBcdHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcztcbitcdHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHM7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfYXN5bmNfcGYge1xuQEAgLTE5NTIsNiArMTk1Myw3IEBAIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2FwaWN2O1xuIGV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX2lwaXY7XG4gZXh0ZXJuIGJvb2wgX19yZWFkX21vc3RseSBlbmFibGVfZGV2aWNlX3Bvc3RlZF9pcnFzO1xuIGV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XG4rZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMga3ZtX25lc3RlZF9vcHMgX19yZWFkX21vc3RseTtcbiBcbiAjZGVmaW5lIGt2bV94ODZfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2XyMjZnVuYylcbiBcbkBAIC0xOTYxLDYgKzE5NjMsMTQgQEAgZXh0ZXJuIHN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcztcbiAjZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X09QXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bS14ODYtb3BzLmhcdTAwM2VcbiBcbisjZGVmaW5lIGt2bV9uZXN0ZWRfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2X25lc3RlZF8jI2Z1bmMpXG4rXG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxuK1x0REVDTEFSRV9TVEFUSUNfQ0FMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsICooKChzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICopMCktXHUwMDNlZnVuYykpO1xuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9ORVNURURfT1BcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9ORVNURURfT1BcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1uZXN0ZWQtb3BzLmhcdTAwM2VcbitcbiAjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9WTV9BTExPQ1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZClcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2h5cGVydi5jIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jXG5pbmRleCAxZWUwZDIzZjg5NDk3NC4uYjAxMGRjYTM3YjlkMWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuQEAgLTI0MDYsNyArMjQwNiw3IEBAIHN0YXRpYyBpbnQga3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCByZXN1bHQpXG4gXHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbiBcbiBcdGlmICh0bGJfbG9ja19jb3VudClcbi1cdFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2Vodl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaCh2Y3B1KTtcbitcdFx0a3ZtX25lc3RlZF9jYWxsKGh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKSh2Y3B1KTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI3ODcsOCArMjc4Nyw4IEBAIGludCBrdm1fZ2V0X2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLFxuIFx0fTtcbiBcdGludCBpLCBuZW50ID0gQVJSQVlfU0laRShjcHVpZF9lbnRyaWVzKTtcbiBcbi1cdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9ldm1jc192ZXJzaW9uKVxuLVx0XHRldm1jc192ZXIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9ldm1jc192ZXJzaW9uKHZjcHUpO1xuK1x0aWYgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXG4rXHRcdGV2bWNzX3ZlciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfZXZtY3NfdmVyc2lvbikodmNwdSk7XG4gXG4gXHRpZiAoY3B1aWQtXHUwMDNlbmVudCBcdTAwM2MgbmVudClcbiBcdFx0cmV0dXJuIC1FMkJJRztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmggYi9hcmNoL3g4Ni9rdm0vbW11LmhcbmluZGV4IGM5ZjYyOGI5N2RhZWI5Li5mYTA1Y2EyYzg1NDllNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUuaFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS5oXG5AQCAtMzg1LDkgKzM4NSw4IEBAIHN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIHtcbiBcdGlmICghbW11X2lzX25lc3RlZCh2Y3B1KSB8fCB3ID09IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5uZ3BhX3dhbGspXG4gXHRcdHJldHVybiBncGE7XG4tXHRyZXR1cm4ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2V0cmFuc2xhdGVfbmVzdGVkX2dwYSh2Y3B1LCBncGEsIGFjY2Vzcyxcbi1cdFx0XHRcdFx0XHRcdCAgICBleGNlcHRpb24sXG4tXHRcdFx0XHRcdFx0XHQgICAgcHRlX2FjY2Vzcyk7XG4rXHRyZXR1cm4ga3ZtX25lc3RlZF9jYWxsKHRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKSh2Y3B1LCBncGEsIGFjY2VzcyxcbitcdFx0XHRcdFx0XHQgICAgIGV4Y2VwdGlvbiwgcHRlX2FjY2Vzcyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faGFzX21pcnJvcmVkX3RkcChjb25zdCBzdHJ1Y3Qga3ZtICprdm0pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oXG5pbmRleCBlNzNmYzA5ZWM0ZGIyZS4uNGVlN2IwM2U3NjJkMGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmhcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaFxuQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgaW50IEZOQU1FKHVwZGF0ZV9hY2Nlc3NlZF9kaXJ0eV9iaXRzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHQhKHB0ZSBcdTAwMjYgUFRfR1VFU1RfRElSVFlfTUFTSykpIHtcbiBcdFx0XHR0cmFjZV9rdm1fbW11X3NldF9kaXJ0eV9iaXQodGFibGVfZ2ZuLCBpbmRleCwgc2l6ZW9mKHB0ZSkpO1xuICNpZiBQVFRZUEUgPT0gUFRUWVBFX0VQVFxuLVx0XHRcdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXdyaXRlX2xvZ19kaXJ0eSh2Y3B1LCBhZGRyKSlcbitcdFx0XHRpZiAoa3ZtX25lc3RlZF9jYWxsKHdyaXRlX2xvZ19kaXJ0eSkodmNwdSwgYWRkcikpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAjZW5kaWZcbiBcdFx0XHRwdGUgfD0gUFRfR1VFU1RfRElSVFlfTUFTSztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuaW5kZXggYmE5ODVhMDIyMDhhM2UuLjVmNmQ5OTcxYTNmMjI0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuQEAgLTIxNjIsNyArMjE2Miw3IEBAIHN0YXRpYyBncGFfdCBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4gXHRyZXR1cm4gdy1cdTAwM2VndmFfdG9fZ3BhKHZjcHUsIHcsIGdwYSwgYWNjZXNzLCBleGNlcHRpb24pO1xuIH1cbiBcbi1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0ge1xuK3N0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5sZWF2ZV9uZXN0ZWQgPSBzdm1fbGVhdmVfbmVzdGVkLFxuIFx0LnRyYW5zbGF0ZV9uZXN0ZWRfZ3BhID0gc3ZtX3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhLFxuIFx0LmlzX2V4Y2VwdGlvbl92bWV4aXQgPSBuZXN0ZWRfc3ZtX2lzX2V4Y2VwdGlvbl92bWV4aXQsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li5kMzgwN2Y0YWJiNDk5ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NDI2LDggKzU0MjYsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5jaGVja19pbnRlcmNlcHQgPSBzdm1fY2hlY2tfaW50ZXJjZXB0LFxuIFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHN2bV9oYW5kbGVfZXhpdF9pcnFvZmYsXG4gXG4tXHQubmVzdGVkX29wcyA9IFx1MDAyNnN2bV9uZXN0ZWRfb3BzLFxuLVxuIFx0LmRlbGl2ZXJfaW50ZXJydXB0ID0gc3ZtX2RlbGl2ZXJfaW50ZXJydXB0LFxuIFx0LnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSxcbiBcdC5zZXR1cF9tY2UgPSBzdm1fc2V0dXBfbWNlLFxuQEAgLTU2NDYsNiArNTY0NCw3IEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbitcdHN2bV9uZXN0ZWRfb3BzLmVuYWJsZWQgPSBuZXN0ZWQ7XG4gXG4gXHQvKlxuIFx0ICogS1ZNJ3MgTU1VIGRvZXNuJ3Qgc3VwcG9ydCB1c2luZyAyLWxldmVsIHBhZ2luZyBmb3IgaXRzZWxmLCBhbmQgdGh1c1xuQEAgLTU3NzIsNiArNTc3MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyBzdm1faW5pdF9vcHMgX19pbml0ZGF0YSA9IHtcbiBcbiBcdC5ydW50aW1lX29wcyA9IFx1MDAyNnN2bV94ODZfb3BzLFxuIFx0LnBtdV9vcHMgPSBcdTAwMjZhbWRfcG11X29wcyxcbitcdC5uZXN0ZWRfb3BzID0gXHUwMDI2c3ZtX25lc3RlZF9vcHMsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBfX3N2bV9leGl0KHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggODNkOTkyMTI3N2VhYzIuLjA0Zjk4NmUzZDQzOWFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtOTk1LDggKzk5NSw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXG4gXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSxcbiBcbi1cdC5uZXN0ZWRfb3BzID0gXHUwMDI2dm14X25lc3RlZF9vcHMsXG4tXG4gXHQucGlfdXBkYXRlX2lydGUgPSB2bXhfcGlfdXBkYXRlX2lydGUsXG4gXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcbiBcbkBAIC0xMDM4LDYgKzEwMzYsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyB2dF9pbml0X29wcyBfX2luaXRkYXRhID0ge1xuIFxuIFx0LnJ1bnRpbWVfb3BzID0gXHUwMDI2dnRfeDg2X29wcyxcbiBcdC5wbXVfb3BzID0gXHUwMDI2aW50ZWxfcG11X29wcyxcbitcdC5uZXN0ZWRfb3BzID0gXHUwMDI2dm14X25lc3RlZF9vcHMsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgdnRfZXhpdCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAwNjM1ZTkyNDcxYzg5ZS4uY2JiMjA5ZDhhOGYwZDEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNzQ4NCw3ICs3NDg0LDcgQEAgc3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbiBcdHJldHVybiB3LVx1MDAzZWd2YV90b19ncGEodmNwdSwgdywgZ3BhLCBhY2Nlc3MsIGV4Y2VwdGlvbik7XG4gfVxuIFxuLXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XG4rc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmxlYXZlX25lc3RlZCA9IHZteF9sZWF2ZV9uZXN0ZWQsXG4gXHQudHJhbnNsYXRlX25lc3RlZF9ncGEgPSB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEsXG4gXHQuaXNfZXhjZXB0aW9uX3ZtZXhpdCA9IG5lc3RlZF92bXhfaXNfZXhjZXB0aW9uX3ZtZXhpdCxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggMzY4MWQ1NjVmMTc3ODkuLmVmOWUxYmMzOWVkYmJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTg3ODYsNiArODc4Niw3IEBAIF9faW5pdCBpbnQgdm14X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHRcdGlmIChyKVxuIFx0XHRcdHJldHVybiByO1xuIFx0fVxuK1x0dm14X25lc3RlZF9vcHMuZW5hYmxlZCA9IG5lc3RlZDtcbiBcbiBcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIocGlfd2FrZXVwX2hhbmRsZXIpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjViYTRhYWMzNzY0MDZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0xNTQsNiArMTU0LDcgQEAgc3RhdGljIGludCBzeW5jX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKHZlbmRvcl9tb2R1bGVfbG9jayk7XG4gXG4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzIF9fcmVhZF9tb3N0bHk7XG4rc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xuIFxuICNkZWZpbmUgS1ZNX1g4Nl9PUChmdW5jKVx0XHRcdFx0XHQgICAgIFxcXG4gXHRERUZJTkVfU1RBVElDX0NBTExfTlVMTChrdm1feDg2XyMjZnVuYyxcdFx0XHQgICAgIFxcXG5AQCAtMTY1LDYgKzE2NiwxMyBAQCBFWFBPUlRfU1RBVElDX0NBTExfR1BMKGt2bV94ODZfZ2V0X2NzX2RiX2xfYml0cyk7XG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2NhY2hlX3JlZyk7XG4gRVhQT1JUX1NUQVRJQ19DQUxMX0dQTChrdm1feDg2X2dldF9jcGwpO1xuIFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1AoZnVuYylcdFx0XHRcdFx0XHRcdFxcXG4rXHRERUZJTkVfU1RBVElDX0NBTExfTlVMTChrdm1feDg2X25lc3RlZF8jI2Z1bmMsXHRcdFx0XHRcXFxuK1x0XHRcdFx0KigoKHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKikwKS1cdTAwM2VmdW5jKSk7XG4rI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUF9PUFRJT05BTCBLVk1fWDg2X05FU1RFRF9PUFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X05FU1RFRF9PUFxuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFx1MDAzZVxuK1xuIHVuc2lnbmVkIGludCBtaW5fdGltZXJfcGVyaW9kX3VzID0gMjAwO1xuIG1vZHVsZV9wYXJhbShtaW5fdGltZXJfcGVyaW9kX3VzLCB1aW50LCAwNjQ0KTtcbiBcbkBAIC00NTQsNyArNDYyLDcgQEAgc3RhdGljIHZvaWQga3ZtX211bHRpcGxlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBucixcbiBcdCAqIHdhbnRzIHRvIGludGVyY2VwdCB0aGUgZXhjZXB0aW9uLlxuIFx0ICovXG4gXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgbnIsIGVycm9yX2NvZGUpKSB7XG4rXHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIG5yLCBlcnJvcl9jb2RlKSkge1xuIFx0XHRrdm1fcXVldWVfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgaGFzX2Vycm9yLCBlcnJvcl9jb2RlLFxuIFx0XHRcdFx0XHQgICBoYXNfcGF5bG9hZCwgcGF5bG9hZCk7XG4gXHRcdHJldHVybjtcbkBAIC0yMzQ2LDE1ICsyMzU0LDE0IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRcdFx0ciBcdTAwMjY9IH5LVk1fWDJBUElDX0VOQUJMRV9TVVBQUkVTU19FT0lfQlJPQURDQVNUO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX0NBUF9ORVNURURfU1RBVEU6XG4tXHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9zdGF0ZSA/XG4tXHRcdFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUoTlVMTCwgTlVMTCwgMCkgOiAwO1xuK1x0XHRyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCA/IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKE5VTEwsIE5VTEwsIDApIDogMDtcbiBcdFx0YnJlYWs7XG4gI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4gXHRjYXNlIEtWTV9DQVBfSFlQRVJWX0RJUkVDVF9UTEJGTFVTSDpcbiBcdFx0ciA9IGt2bV94ODZfb3BzLmVuYWJsZV9sMl90bGJfZmx1c2ggIT0gTlVMTDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfSFlQRVJWX0VOTElHSFRFTkVEX1ZNQ1M6XG4tXHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWVuYWJsZV9ldm1jcyAhPSBOVUxMO1xuK1x0XHRyID0ga3ZtX25lc3RlZF9vcHMuZW5hYmxlZCBcdTAwMjZcdTAwMjYga3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzICE9IE5VTEw7XG4gXHRcdGJyZWFrO1xuICNlbmRpZlxuIFx0Y2FzZSBLVk1fQ0FQX1NNQUxMRVJfTUFYUEhZQUREUjpcbkBAIC0zMzY2LDkgKzMzNzMsMTAgQEAgc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHR1aW50MTZfdCB2bWNzX3ZlcnNpb247XG4gXHRcdFx0dm9pZCBfX3VzZXIgKnVzZXJfcHRyO1xuIFxuLVx0XHRcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VlbmFibGVfZXZtY3MpXG4rXHRcdFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkIHx8XG4rXHRcdFx0ICAgICFrdm1fbmVzdGVkX29wcy5lbmFibGVfZXZtY3MpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbi1cdFx0XHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VlbmFibGVfZXZtY3ModmNwdSwgXHUwMDI2dm1jc192ZXJzaW9uKTtcbitcdFx0XHRyID0ga3ZtX25lc3RlZF9jYWxsKGVuYWJsZV9ldm1jcykodmNwdSwgXHUwMDI2dm1jc192ZXJzaW9uKTtcbiBcdFx0XHRpZiAoIXIpIHtcbiBcdFx0XHRcdHVzZXJfcHRyID0gKHZvaWQgX191c2VyICopKHVpbnRwdHJfdCljYXAtXHUwMDNlYXJnc1swXTtcbiBcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9wdHIsIFx1MDAyNnZtY3NfdmVyc2lvbixcbkBAIC0zNzMyLDcgKzM3NDAsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdHUzMiB1c2VyX2RhdGFfc2l6ZTtcbiBcbiBcdFx0ciA9IC1FSU5WQUw7XG4tXHRcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUpXG4rXHRcdGlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZClcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0QlVJTERfQlVHX09OKHNpemVvZih1c2VyX2RhdGFfc2l6ZSkgIT0gc2l6ZW9mKHVzZXJfa3ZtX25lc3RlZF9zdGF0ZS1cdTAwM2VzaXplKSk7XG5AQCAtMzc0MCw4ICszNzQ4LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRpZiAoZ2V0X3VzZXIodXNlcl9kYXRhX3NpemUsIFx1MDAyNnVzZXJfa3ZtX25lc3RlZF9zdGF0ZS1cdTAwM2VzaXplKSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSxcbi1cdFx0XHRcdFx0XHQgICAgIHVzZXJfZGF0YV9zaXplKTtcbitcdFx0ciA9IGt2bV9uZXN0ZWRfY2FsbChnZXRfc3RhdGUpKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSwgdXNlcl9kYXRhX3NpemUpO1xuIFx0XHRpZiAociBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0zNzYyLDcgKzM3NjksNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdGludCBpZHg7XG4gXG4gXHRcdHIgPSAtRUlOVkFMO1xuLVx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKVxuK1x0XHRpZiAoIWt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdHIgPSAtRUZBVUxUO1xuQEAgLTM3ODUsNyArMzc5Miw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4tXHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXNldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFx1MDAyNmt2bV9zdGF0ZSk7XG4rXHRcdHIgPSBrdm1fbmVzdGVkX2NhbGwoc2V0X3N0YXRlKSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFx1MDAyNmt2bV9zdGF0ZSk7XG4gXHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNjkwMyw2ICs2OTEwLDIyIEBAIHN0YXRpYyB2b2lkIGt2bV9zZXR1cF9lZmVyX2NhcHModm9pZClcbiBcdFx0a3ZtX2VuYWJsZV9lZmVyX2JpdHMoRUZFUl9BVVRPSUJSUyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGt2bV9uZXN0ZWRfb3BzX3VwZGF0ZShjb25zdCBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzICpuZXN0ZWRfb3BzKVxuK3tcbitcdG1lbWNweShcdTAwMjZrdm1fbmVzdGVkX29wcywgbmVzdGVkX29wcywgc2l6ZW9mKGt2bV9uZXN0ZWRfb3BzKSk7XG4rXG4rI2RlZmluZSBfX0tWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG4rXHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl9uZXN0ZWRfIyNmdW5jLCBrdm1fbmVzdGVkX29wcy5mdW5jKTtcbisjZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QKGZ1bmMpIFxcXG4rXHRXQVJOX09OKCFrdm1fbmVzdGVkX29wcy5mdW5jKTsgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKVxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUwgX19LVk1fWDg2X05FU1RFRF9PUFxuKyNkZWZpbmUgS1ZNX1g4Nl9ORVNURURfT1BfT1BUSU9OQUxfUkVUMChmdW5jKSBcXFxuK1x0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywgKHZvaWQgKilrdm1fbmVzdGVkX29wcy5mdW5jID8gOiBcXFxuK1x0XHRcdFx0XHRcdCAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApO1xuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm0teDg2LW5lc3RlZC1vcHMuaFx1MDAzZVxuKyN1bmRlZiBfX0tWTV9YODZfTkVTVEVEX09QXG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fb3BzX3VwZGF0ZShzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxuIHtcbiBcdG1lbWNweShcdTAwMjZrdm1feDg2X29wcywgb3BzLVx1MDAzZXJ1bnRpbWVfb3BzLCBzaXplb2Yoa3ZtX3g4Nl9vcHMpKTtcbkBAIC02OTE4LDYgKzY5NDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX29wc191cGRhdGUoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1vcHMuaFx1MDAzZVxuICN1bmRlZiBfX0tWTV9YODZfT1BcbiBcbitcdGt2bV9uZXN0ZWRfb3BzX3VwZGF0ZShvcHMtXHUwMDNlbmVzdGVkX29wcyk7XG4rXG4gXHRrdm1fcG11X29wc191cGRhdGUob3BzLVx1MDAzZXBtdV9vcHMpO1xuIH1cbiBcbkBAIC03NDU0LDExICs3NDc5LDExIEBAIHN0YXRpYyB2b2lkIHBvc3Rfa3ZtX3J1bl9zYXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuLVx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcbitcdFx0a3ZtX25lc3RlZF9jYWxsKHRyaXBsZV9mYXVsdCkodmNwdSk7XG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlY2hlY2tfZXZlbnRzKHZjcHUpO1xuK1x0cmV0dXJuIGt2bV9uZXN0ZWRfY2FsbChjaGVja19ldmVudHMpKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrdm1faW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNzY5Niw5ICs3NzIxLDcgQEAgc3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdGt2bV94ODZfY2FsbChlbmFibGVfaXJxX3dpbmRvdykodmNwdSk7XG4gXHR9XG4gXG4tXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHMgXHUwMDI2XHUwMDI2XG4tXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VoYXNfZXZlbnRzKHZjcHUsIHRydWUpKVxuK1x0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGt2bV9uZXN0ZWRfY2FsbChoYXNfZXZlbnRzKSh2Y3B1LCB0cnVlKSlcbiBcdFx0KnJlcV9pbW1lZGlhdGVfZXhpdCA9IHRydWU7XG4gXG4gXHQvKlxuQEAgLTgwMjEsNyArODA0NCw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcbi1cdFx0XHRpZiAodW5saWtlbHkoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyh2Y3B1KSkpIHtcbitcdFx0XHRpZiAodW5saWtlbHkoIWt2bV9uZXN0ZWRfY2FsbChnZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKSh2Y3B1KSkpIHtcbiBcdFx0XHRcdHIgPSAwO1xuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuQEAgLTgwNzMsNyArODA5Niw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdH1cbiBcdFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpKSB7XG4gXHRcdFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXG4tXHRcdFx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcbitcdFx0XHRcdGt2bV9uZXN0ZWRfY2FsbCh0cmlwbGVfZmF1bHQpKHZjcHUpO1xuIFxuIFx0XHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgdmNwdSkpIHtcbiBcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfU0hVVERPV047XG5AQCAtODQ5MSw5ICs4NTE0LDcgQEAgYm9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHZjcHUpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyBcdTAwMjZcdTAwMjZcbi1cdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHModmNwdSwgZmFsc2UpKVxuK1x0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGt2bV9uZXN0ZWRfY2FsbChoYXNfZXZlbnRzKSh2Y3B1LCBmYWxzZSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0aWYgKGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzKHZjcHUpKVxuQEAgLTg4OTYsOCArODkxNyw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBhIHBlbmRpbmcgVk0tRXhpdCBpZiBMMSB3YW50cyB0byBpbnRlcmNlcHQgdGhlIGV4Y2VwdGlvbi5cbiBcdCAqL1xuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5leGNlcHRpb25fZnJvbV91c2Vyc3BhY2UgXHUwMDI2XHUwMDI2IGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2Vpc19leGNlcHRpb25fdm1leGl0KHZjcHUsIGV4LVx1MDAzZXZlY3Rvcixcbi1cdFx0XHRcdFx0XHRcdGV4LVx1MDAzZWVycm9yX2NvZGUpKSB7XG4rXHQgICAga3ZtX25lc3RlZF9jYWxsKGlzX2V4Y2VwdGlvbl92bWV4aXQpKHZjcHUsIGV4LVx1MDAzZXZlY3RvciwgZXgtXHUwMDNlZXJyb3JfY29kZSkpIHtcbiBcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXHUwMDNldmVjdG9yLFxuIFx0XHRcdFx0XHQgICBleC1cdTAwM2VoYXNfZXJyb3JfY29kZSwgZXgtXHUwMDNlZXJyb3JfY29kZSxcbiBcdFx0XHRcdFx0ICAgZXgtXHUwMDNlaGFzX3BheWxvYWQsIGV4LVx1MDAzZXBheWxvYWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggOGVjZTQ2ODA4N2E4ZWUuLmI1MTBiNjMxZjBjNTIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC05Myw3ICs5Myw3IEBAIGludCBrdm1fY2hlY2tfbmVzdGVkX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIC8qIEZvcmNpYmx5IGxlYXZlIHRoZSBuZXN0ZWQgbW9kZSBpbiBjYXNlcyBsaWtlIGEgdkNQVSByZXNldCAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWxlYXZlX25lc3RlZCh2Y3B1KTtcbitcdGt2bV9uZXN0ZWRfY2FsbChsZWF2ZV9uZXN0ZWQpKHZjcHUpO1xuIH1cbiBcbiAvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6NTY6MzkuNDI3Njg4NTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY5MDczMTc2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQncyByZWZhY3RvcmluZyB0aGUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvcGVyYXRpb25zLCBlc3NlbnRpYWxseSBzd2FwcGluZyBvdXQgaW5kaXJlY3QgZnVuY3Rpb24gY2FsbHMgZm9yIHN0YXRpYyBvbmVzLiBUaGUgZ29hbCBpcyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBieSBhdm9pZGluZyB0aG9zZSByZXRwb2xpbmUtaW5kdWNpbmcgaW5kaXJlY3QgYnJhbmNoZXMuIFRoZXkncmUgaW50cm9kdWNpbmcgYGt2bV9uZXN0ZWRfY2FsbGAgYW5kIGBLVk1fWDg2X05FU1RFRF9PUGAgbWFjcm9zLCBhbG9uZyB3aXRoIGEgYGt2bV9uZXN0ZWRfb3BzYCBzdHJ1Y3R1cmUgYW5kIGFuIGBlbmFibGVkYCBmbGFnIHdpdGhpbiBpdC4gVGhpcyBzZWVtcyBwcmV0dHkgY2xlYW4sIG1pbWlja2luZyB0aGUgZXhpc3RpbmcgYGt2bV94ODZfb3BzYCByZWZhY3Rvci4gSXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGNvcmUgeDg2IEtWTSBmaWxlcywgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLlxuXG5GdW5jdGlvbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zLiBJdCBsb29rcyBsaWtlIGl0J3MgcHJpbWFyaWx5IHJlcGxhY2luZyBjaGVja3MgbGlrZSBga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2UuLi5gIHdpdGggYGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWRgIGFuZCB0aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHRocm91Z2ggYGt2bV9uZXN0ZWRfY2FsbGAuIEkgc2VlIHRoYXQgb3B0aW9uYWwgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IHJldHVybmluZyAwIGlmIHRoZXkncmUgbm90IGRlZmluZWQsIHdoaWNoICpzZWVtcyogZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZCBOVUxMIGNoZWNrcy4gVGhlIGNoYW5nZSB0byB0aGUgYGdldF9zdGF0ZWAgY2hlY2sgbG9va3Mgc2FmZS4gSXQncyBlc3NlbnRpYWxseSB0aGUgc2FtZSBsb2dpYywgYnV0IHdpdGggYSBkaWZmZXJlbnQgY2hlY2suXG5cbkkgZGlkIHNwb3Qgc29tZSBzdWJ0bGUgZGlmZmVyZW5jZXMsIGZvciBpbnN0YW5jZTpcblxuKiAgIFNvbWUgY2hlY2tzIG5vdyByZXF1aXJlIHRoZSBga3ZtX25lc3RlZF9vcHMuZW5hYmxlZGAgY2hlY2ssIHdpdGggYSBkaXJlY3QgY2hlY2sgZm9yIHRoZSBuZXN0ZWQgb3BlcmF0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFuIGltcHJvdmVtZW50IGluIHRoZSBjYWxsaW5nIG1lY2hhbmlzbSwgd2hpY2gsIHdoaWxlIGNoYW5naW5nIHRoZSBjb250cm9sIGZsb3cgc2xpZ2h0bHksIG1haW50YWlucyB0aGUgc2FtZSBmdW5jdGlvbmFsIG91dHB1dC4gSXQncyBhYm91dCBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCByYXRoZXIgdGhhbiB0aGUgY29yZSBsb2dpYy5cblxuTm93LCBzaG91bGQgd2UgZnV6eiB0aGlzPyBUaGUgcHJvbXB0IHNheXMgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcy4uLkNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvd1wiLiBJdCBsb29rcyBsaWtlIHRoaXMgb25lIGZhbGxzIHVuZGVyIHRoYXQgY2F0ZWdvcnksIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgbG9naWMgcmVtYWlucyB1bmNoYW5nZWQuIEhvd2V2ZXIsIGludHJvZHVjaW5nIGEgbmV3IHN0cnVjdHVyZSBhbmQgbmV3IGNhbGwgbWFjcm9zIGRvZXMgY3JlYXRlIG1vcmUgcG9pbnRzIG9mIGZhaWx1cmUsIHdoaWNoIHN1Z2dlc3RzIGl0IHdhcnJhbnRzIGZ1cnRoZXIgc2NydXRpbnkuXG5cblNvLCBsZXQncyBzZWUuIE15IGZvY3VzIHBvaW50cyBzaG91bGQgaW5jbHVkZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fY2hlY2tfbmVzdGVkX2V2ZW50c2AsIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgLCBgdmNwdV9lbnRlcl9ndWVzdGAsIGBrdm1fdmNwdV9oYXNfZXZlbnRzYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYWxzbyBga3ZtX2dldF9odl9jcHVpZGAsIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYC4gVGhlIGhvdCBwYXRocyBsaWtlIGB2Y3B1X2VudGVyX2d1ZXN0YCBhbmQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBhcmUgaW50ZXJlc3RpbmcsIGJ1dCBJJ2QgcmF0aGVyIGF2b2lkIHRoZW0gYXMgaW5pdGlhbCBmdXp6aW5nIGVudHJ5IHBvaW50cy4gSSdkIGxlYW4gdG93YXJkcyBvbmVzIHN1Y2ggYXMgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGBrdm1fZ2V0X2h2X2NwdWlkYCwgYW5kIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYC4gSSdsbCBkbyBhIHF1aWNrIGdyZXAgdG8gbWFrZSBzdXJlIHRoZSBga3ZtX25lc3RlZF9vcHNgIGlzbid0IHVzZWQgaW4gc29tZSBiaXphcnJlIGNvcm5lciBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjU2OjU2LjMzNTAwOTg3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk4NjUwMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9uZXN0ZWRfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTk1NT1leHRlcm4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTk1NjpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBrdm1fbmVzdGVkX29wcyBfX3JlYWRfbW9zdGx5O1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTk1Ny1cXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0yNzcyPWludCBrdm1fZ2V0X2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI3ODktXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI3OTA6XFx0aWYgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI3OTEtXFx0XFx0ZXZtY3NfdmVyID0ga3ZtX25lc3RlZF9jYWxsKGdldF9ldm1jc192ZXJzaW9uKSh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xNTY9c3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzIF9fcmVhZF9tb3N0bHk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjE1NzpzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIGt2bV9uZXN0ZWRfb3BzIF9fcmVhZF9tb3N0bHk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTE1OC1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0yMTk0PWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjM1Ni1cXHRjYXNlIEtWTV9DQVBfTkVTVEVEX1NUQVRFOlxcbmFyY2gveDg2L2t2bS94ODYuYzoyMzU3OlxcdFxcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkID8ga3ZtX25lc3RlZF9jYWxsKGdldF9zdGF0ZSkoTlVMTCwgTlVMTCwgMCkgOiAwO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yMzU4LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTIzNjMtXFx0Y2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOlxcbmFyY2gveDg2L2t2bS94ODYuYzoyMzY0OlxcdFxcdHIgPSBrdm1fbmVzdGVkX29wcy5lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGt2bV9uZXN0ZWRfb3BzLmVuYWJsZV9ldm1jcyAhPSBOVUxMO1xcbmFyY2gveDg2L2t2bS94ODYuYy0yMzY1LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTMzNTI9c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMzc1LVxcbmFyY2gveDg2L2t2bS94ODYuYzozMzc2OlxcdFxcdFxcdGlmICgha3ZtX25lc3RlZF9vcHMuZW5hYmxlZCB8fFxcbmFyY2gveDg2L2t2bS94ODYuYzozMzc3OlxcdFxcdFxcdCAgICAha3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMzc4LVxcdFxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTM0MDY9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NDItXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjM3NDM6XFx0XFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zNzQ0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NzEtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjM3NzI6XFx0XFx0aWYgKCFrdm1fbmVzdGVkX29wcy5lbmFibGVkKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zNzczLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY5MDE9c3RhdGljIHZvaWQga3ZtX3NldHVwX2VmZXJfY2Fwcyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTItXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY5MTM6c3RhdGljIHZvaWQga3ZtX25lc3RlZF9vcHNfdXBkYXRlKGNvbnN0IHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgKm5lc3RlZF9vcHMpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTQte1xcbmFyY2gveDg2L2t2bS94ODYuYzo2OTE1OlxcdG1lbWNweShcXHUwMDI2a3ZtX25lc3RlZF9vcHMsIG5lc3RlZF9vcHMsIHNpemVvZihrdm1fbmVzdGVkX29wcykpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02OTE2LVxcbmFyY2gveDg2L2t2bS94ODYuYy02OTE3LSNkZWZpbmUgX19LVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxcXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY5MTg6XFx0c3RhdGljX2NhbGxfdXBkYXRlKGt2bV94ODZfbmVzdGVkXyMjZnVuYywga3ZtX25lc3RlZF9vcHMuZnVuYyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY5MTktI2RlZmluZSBLVk1fWDg2X05FU1RFRF9PUChmdW5jKSBcXFxcXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY5MjA6XFx0V0FSTl9PTigha3ZtX25lc3RlZF9vcHMuZnVuYyk7IF9fS1ZNX1g4Nl9ORVNURURfT1AoZnVuYylcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjkyMS0jZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMIF9fS1ZNX1g4Nl9ORVNURURfT1BcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjkyMi0jZGVmaW5lIEtWTV9YODZfTkVTVEVEX09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcXFxcbmFyY2gveDg2L2t2bS94ODYuYzo2OTIzOlxcdHN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2X25lc3RlZF8jI2Z1bmMsICh2b2lkICopa3ZtX25lc3RlZF9vcHMuZnVuYyA/IDogXFxcXFxcbmFyY2gveDg2L2t2bS94ODYuYy02OTI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgKHZvaWQgKilfX3N0YXRpY19jYWxsX3JldHVybjApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY5Mjk9c3RhdGljIGlubGluZSB2b2lkIGt2bV9vcHNfdXBkYXRlKHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjk0My1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6Njk0NDpcXHRrdm1fbmVzdGVkX29wc191cGRhdGUob3BzLVxcdTAwM2VuZXN0ZWRfb3BzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjk0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6NTc6MDMuMjMzNjY4OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDUzMDYzMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgaW4gS1ZNLiBSZXBsYWNpbmcgdGhvc2UgaW5kaXJlY3QgY2FsbHMgd2l0aCBzdGF0aWMgY2FsbHMsIHVzaW5nIGBrdm1fbmVzdGVkX29wc2AgYW5kIGBrdm1fbmVzdGVkX2NhbGxgLCB0aGF0J3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0IG1lYW5zIGl0J3Mgbm90IGp1c3QgY29zbWV0aWM7IGl0J3MgYWx0ZXJpbmcgdGhlICptZXRob2QqIG9mIGludm9jYXRpb24uIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdmFsaWRhdGlvbiBub3csIHBhcnRpY3VsYXJseSB0aGF0IGBrdm1fbmVzdGVkX29wcy5lbmFibGVkYCBmbGFnLiBBIGJ1ZyB0aGVyZSwgaW4gdGhlIHNldHVwIG9mIHRoZSBzdGF0aWMgY2FsbHMgdGhlbXNlbHZlcywgb3IgaW4gaG93IHRoYXQgYGVuYWJsZWRgIGZsYWcgaXMgaGFuZGxlZCwgY291bGQgYmUgY2F0YXN0cm9waGljLiBDcmFzaGVzIG9yIHN1YnRsZSBtaXNiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYXJlIG5vdCBzb21ldGhpbmcgSSB3YW50IHRvIGRlYWwgd2l0aCwgYW5kIHRob3NlIGFyZSBwb3RlbnRpYWxseSB2ZXJ5IGRpZmZpY3VsdCB0byBkZWJ1Zy5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCwgb2J2aW91c2x5LCBpcyB0aGUgY29yZS4gVGhlbiB3ZSBoYXZlIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAsIHdoaWNoIGFyZSBlc3NlbnRpYWwgYmVjYXVzZSB0aGV5IHByb3ZpZGUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIFRoZSBkaWZmIGFsc28gYnJpbmdzIHVwIGBLVk1fSFlQRVJWYC4gTm93LCBpcyB0aGF0IGEgc2VwYXJhdGUgb3B0aW9uPyBPciBpcyBpdCBhIHN1Yi1vcHRpb24sIG9yIHBlcmhhcHMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBLVk1gIGlzPyBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy5cblxuQW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gcmV2aWV3IHRob3NlIGZvY3VzZWQgc3ltYm9sczogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fZ2V0X2h2X2NwdWlkYCwgYGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVgLCBhbmQgYGt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXBgLiBUaGV5IGFyZSBsaWtlbHkgYXQgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgdGhhdCdzIGNoYW5naW5nLCBhbmQgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGNhbGxlZCBhbmQgY2hhbmdlZCB0byBlbnN1cmUgbm90aGluZyBpcyBicm9rZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjU3OjA5LjY4NjczNjExNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMxNDI1OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSFlQRVJWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjU3OjE1LjkxODE3MjEwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NDcyMjUxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgYEtWTV9IWVBFUlZgIGluIHRoZSBjb25maWd1cmF0aW9ucy4gSXQncyBjcnVjaWFsIGZvciB0aGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSB0aGlzIHJlZmFjdG9yaW5nIHRvdWNoZXMuIExldCdzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBhbmQgY29uZmlybSB0aGUgY2hvaWNlcy5cblxuRnJvbSB0aGUgYW5hbHlzaXMsIHRoaXMgaXMgKip3b3J0aCBmdXp6aW5nKiosIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kLiBUaGUgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgaG93IEtWTSBoYW5kbGVzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IG1vdmluZyBmcm9tIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHN0YXRpYyBjYWxscy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQgdGhhdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBzdGVwcywgcGFydGljdWxhcmx5IHRoZSBga3ZtX25lc3RlZF9vcHMuZW5hYmxlZGAgY2hlY2suIEdpdmVuIHRoaXMgY2hhbmdlIGluIGNvbnRyb2wgZmxvdywgYW55IGJ1Z3MgaGVyZSBjb3VsZCBiZSBuYXN0eSwgcG90ZW50aWFsbHkgcmVzdWx0aW5nIGluIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGJlaGF2aW9ycyB3aGVuIG5lc3RpbmcgVk1zLCB3aGljaCBjYW4gYmUgZGlmZmljdWx0IHRvIGRpYWdub3NlLlxuXG5UaGUgaW5pdGlhbCBzZWxlY3Rpb24gb2YgKipmb2N1cyBzeW1ib2xzKiogaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHJldmlld2VkIHRoZSBsaXN0IGFnYWluIHRvIGJlIGFic29sdXRlbHkgc3VyZTogYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAsIGBrdm1fZ2V0X2h2X2NwdWlkYCwgYGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGVgLCBhbmQgYGt2bV92Y3B1X2lvY3RsX2VuYWJsZV9jYXBgLlxuXG5Eb3VibGUtY2hlY2tpbmcsIGBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwYCBoYW5kbGVzIGBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTYCB3aGljaCwgYXMgZXhwZWN0ZWQsIHVsdGltYXRlbHkgdXNlcyBga3ZtX25lc3RlZF9vcHMuZW5hYmxlX2V2bWNzYC4gUGVyZmVjdC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHN5bWJvbC5cblxuVGhlbiwgYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gIGRlYWxzIHdpdGggYEtWTV9DQVBfTkVTVEVEX1NUQVRFYCBhbmQgYEtWTV9DQVBfSFlQRVJWX0VOTElHSFRFTkVEX1ZNQ1NgLCBhbmQgdGhhdCBhbGlnbnMgd2l0aCB0aGUgY2hhbmdlcyBhbmQgbmV3IGxvZ2ljLiBJdCdzIGEgdmFsaWQgY2hvaWNlLlxuXG5ga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaGFuZGxpbmcgb2YgYEtWTV9HRVRfTkVTVEVEX1NUQVRFYCBhbmQgYEtWTV9TRVRfTkVTVEVEX1NUQVRFYCBtYWtlcyBpdCBhIHNvbGlkIGNob2ljZS5cblxuYGt2bV9nZXRfaHZfY3B1aWRgIHVzZXMgYGdldF9ldm1jc192ZXJzaW9uYCwgc28gaXQgYWxzbyB3YXJyYW50cyBzY3J1dGlueS5cblxuQW5kIGZpbmFsbHksIGBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlYCBpcyBjYWxsaW5nIGBodl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaGAsIHNvIGl0IGZpdHMgdGhlIGZvY3VzIHRvby5cblxuWWVzLCB0aGlzIGlzIGFsbCBnb29kLiBJIGNhbiBwcm9jZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjEyLCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjo1NzoyNC41NjU0MDMzOTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjQ2NTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uXCIsXG4gICAgXCJrdm1fZ2V0X2h2X2NwdWlkXCIsXG4gICAgXCJrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlXCIsXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3BlcmF0aW9ucyB0byB1c2Ugc3RhdGljIGNhbGxzIGluc3RlYWQgb2YgaW5kaXJlY3QgZnVuY3Rpb24gcG9pbnRlcnMuIFRoaXMgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgbWVjaGFuaXNtIGFuZCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgbG9naWMgKGt2bV9uZXN0ZWRfb3BzLmVuYWJsZWQpLiBCdWdzIGluIHRoaXMgcmVmYWN0b3JpbmcgY291bGQgbGVhZCB0byBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvblwiLFxuICAgIFwia3ZtX2dldF9odl9jcHVpZFwiLFxuICAgIFwia3ZtX2h2X2h5cGVyY2FsbF9jb21wbGV0ZVwiLFxuICAgIFwia3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9wZXJhdGlvbnMgdG8gdXNlIHN0YXRpYyBjYWxscyBpbnN0ZWFkIG9mIGluZGlyZWN0IGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIGNoYW5nZXMgdGhlIGV4ZWN1dGlvbiBmbG93IG1lY2hhbmlzbSBhbmQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gYW5kIGNoZWNraW5nIGxvZ2ljIChrdm1fbmVzdGVkX29wcy5lbmFibGVkKS4gQnVncyBpbiB0aGlzIHJlZmFjdG9yaW5nIGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqs98b[1] Phase: Succeeded StartedAt: 2026-07-01 02:57:38 +0000 UTC FinishedAt: 2026-07-01 02:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 02:57:38 +0000 UTC FinishedAt: 2026-07-01 02:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2] Phase: Succeeded StartedAt: 2026-07-01 02:57:38 +0000 UTC FinishedAt: 2026-07-01 07:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 02:57:39 +0000 UTC FinishedAt: 2026-07-01 07:05:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 02:57:39 +0000 UTC FinishedAt: 2026-07-01 02:58:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 02:57:39 +0000 UTC FinishedAt: 2026-07-01 02:58:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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-workflowqs98b/series-workflowqs98b-convert-artifact-538063459/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 02:58:51 +0000 UTC FinishedAt: 2026-07-01 03:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 02:58:51 +0000 UTC FinishedAt: 2026-07-01 03:29:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*22940a8c-4b27-4c4d-a8f5-55c8a081cb60,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-workflowqs98b/series-workflowqs98b-convert-artifact-538063459/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": "6d64893e-080d-456d-a191-de56e8ca1665", "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-workflowqs98b/series-workflowqs98b-build-action-3761130961/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 02:58:51 +0000 UTC FinishedAt: 2026-07-01 03:28:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*22940a8c-4b27-4c4d-a8f5-55c8a081cb60,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-workflowqs98b/series-workflowqs98b-convert-artifact-538063459/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": "6d64893e-080d-456d-a191-de56e8ca1665", "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-workflowqs98b/series-workflowqs98b-build-action-3761130961/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:29:08 +0000 UTC FinishedAt: 2026-07-01 03:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:29:08 +0000 UTC FinishedAt: 2026-07-01 03:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:29:08 +0000 UTC FinishedAt: 2026-07-01 03:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:29:08 +0000 UTC FinishedAt: 2026-07-01 03:29:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-workflowqs98b/series-workflowqs98b-convert-artifact-1371064986/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:29:28 +0000 UTC FinishedAt: 2026-07-01 03:31:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:29:28 +0000 UTC FinishedAt: 2026-07-01 03:31:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6d64893e-080d-456d-a191-de56e8ca1665,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-workflowqs98b/series-workflowqs98b-build-action-3761130961/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-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:31:48 +0000 UTC FinishedAt: 2026-07-01 03:31:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:31:48 +0000 UTC FinishedAt: 2026-07-01 03:31:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:31:48 +0000 UTC FinishedAt: 2026-07-01 04:00:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:31:48 +0000 UTC FinishedAt: 2026-07-01 04:00:31 +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:*22940a8c-4b27-4c4d-a8f5-55c8a081cb60,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-workflowqs98b/series-workflowqs98b-convert-artifact-1371064986/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": "8c4dbd9e-0006-4761-b1f6-3a86d7e12735", "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-workflowqs98b/series-workflowqs98b-build-action-1749055102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 03:31:48 +0000 UTC FinishedAt: 2026-07-01 04:00:21 +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:*22940a8c-4b27-4c4d-a8f5-55c8a081cb60,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-workflowqs98b/series-workflowqs98b-convert-artifact-1371064986/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": "8c4dbd9e-0006-4761-b1f6-3a86d7e12735", "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-workflowqs98b/series-workflowqs98b-build-action-1749055102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 04:00:31 +0000 UTC FinishedAt: 2026-07-01 04:00:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 04:00:31 +0000 UTC FinishedAt: 2026-07-01 04:00:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 04:00:31 +0000 UTC FinishedAt: 2026-07-01 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 04:00:31 +0000 UTC FinishedAt: 2026-07-01 04:02:27 +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:*8c4dbd9e-0006-4761-b1f6-3a86d7e12735,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-workflowqs98b/series-workflowqs98b-build-action-1749055102/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-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 04:02:37 +0000 UTC FinishedAt: 2026-07-01 07:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 04:02:37 +0000 UTC FinishedAt: 2026-07-01 07:05:44 +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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"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:*6d64893e-080d-456d-a191-de56e8ca1665,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c4dbd9e-0006-4761-b1f6-3a86d7e12735,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-workflowqs98b/series-workflowqs98b-build-action-3761130961/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-workflowqs98b/series-workflowqs98b-build-action-1749055102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 04:02:37 +0000 UTC FinishedAt: 2026-07-01 04:02:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 04:02:37 +0000 UTC FinishedAt: 2026-07-01 04:02:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqs98b/series-workflowqs98b-convert-artifact-1109492815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 04:02:37 +0000 UTC FinishedAt: 2026-07-01 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 04:02:37 +0000 UTC FinishedAt: 2026-07-01 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","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-01 04:02:37 +0000 UTC FinishedAt: 2026-07-01 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 04:02:47 +0000 UTC FinishedAt: 2026-07-01 07:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqs98b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"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_arch_vcpu_ioctl","kvm_vm_ioctl_check_extension","kvm_get_hv_cpuid","kvm_hv_hypercall_complete","kvm_vcpu_ioctl_enable_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_HYPERV"],"series_id":"fe3de385-c584-4a05-a006-8092d3367ae4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 04:02:47 +0000 UTC FinishedAt: 2026-07-01 07:05:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6d64893e-080d-456d-a191-de56e8ca1665,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c4dbd9e-0006-4761-b1f6-3a86d7e12735,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqs98b/series-workflowqs98b-build-action-3761130961/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqs98b/series-workflowqs98b-build-action-1749055102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqs98b/series-workflowqs98b-convert-artifact-1109492815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}