Name: series-workflowjvbks Phase: Succeeded StartedAt: 2026-08-05 22:24:35 +0000 UTC FinishedAt: 2026-08-06 02:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[0] Phase: Succeeded StartedAt: 2026-08-05 22:24:35 +0000 UTC FinishedAt: 2026-08-05 22:28:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 22:24:35 +0000 UTC FinishedAt: 2026-08-05 22:28:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "363b15d8551ef6749fac410377a8422325008dae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "363b15d8551ef6749fac410377a8422325008dae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "daa723b8-e93a-4c2f-a2c1-03525b439477" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_tramp_arena_base", "bpf_prog_has_arena_ctx_arg", "bpf_jit_supports_arena_args", "bpf_struct_ops_desc_init", "btf_distill_func_proto", "btf_ctx_access", "bpf_check_attach_target" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBfYXJlbmFfYmFzZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YnBmX3N0cnVjdF9vcHNfZGVzY19pbml0JiMzNDssCiAgICAmIzM0O2J0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8mIzM0OywKICAgICYjMzQ7YnRmX2N0eF9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBwYXNzaW5nIGFyZW5hIHBvaW50ZXJzIHRvIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlY29nbml6ZSBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX19udWxsYWJsZWAgYW5ub3RhdGlvbnMsIGFuZCB1cGRhdGVzIHRoZSB4ODYgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIHByb3Blcmx5IHJlYmFzZSB0aGVzZSBwb2ludGVycyB0byB0aGUga2VybmVsJiMzOTtzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDYxNTIzZmU0NzE0ZjljZmE0MmRjN2I4MGEwNjg3NWE2Yjk2NGY5NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMjI6MjY6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbmluZGV4IGNiZGU4NmQwODJjY2UuLmMwNDQ2NTliNzY4OTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5AQCAtMjc4LDYgJiM0MzsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgfVxuIFxuJiM0MzsyLjMuOCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBBbm5vdGF0aW9uc1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7Qm90aCBhbm5vdGF0aW9ucyBpbmRpY2F0ZSB0aGF0IHRoZSBwb2ludGVyIGFyZ3VtZW50IHBvaW50cyBpbnRvIHRoZVxuJiM0MztjYWxsaW5nIHByb2dyYW0mIzM5O3MgYXJlbmEuIFRoZSBKSVQgcmViYXNlcyB0aGUgdmFsdWUgYXQgdGhlIGNhbGwgc2l0ZSBzb1xuJiM0Mzt0aGUga2Z1bmMgcmVjZWl2ZXMgYSBkaXJlY3RseSBkZXJlZmVyZW5jZWFibGUga2VybmVsIGFkZHJlc3MsIHN1YmplY3QgdG9cbiYjNDM7dGhlIGFjY2VzcyBydWxlcyBkZXNjcmliZWQgaW4gOnJlZjpgQlBGX2tmdW5jX2FyZW5hX2FjY2Vzc2AgKGF0IG1vc3RcbiYjNDM7YGBHVUFSRF9TWiAvIDJgYCwgMzIgS2lCLCBwYXN0IHRoZSBwb2ludGVyIGluIGEgc2luZ2xlIHVuY2hlY2tlZCBhY2Nlc3MpLlxuJiM0MztcbiYjNDM7V2l0aCBgYF9fYXJlbmFgYCB0aGUgcmViYXNlIGlzIHVuY29uZGl0aW9uYWwgYW5kIHRoZSBhcmd1bWVudCBpcyBuZXZlclxuJiM0MztOVUxMOiBhIHZhbHVlIHdob3NlIGxvd2VyIDMyIGJpdHMgYXJlIHplcm8gYXJyaXZlcyBhcyB0aGUgYXJlbmEgYmFzZVxuJiM0MzthZGRyZXNzIChhcmVuYSBvZmZzZXQgMCkuIFRoZSBrZnVuYyBtdXN0IG5vdCBjaGVjayB0aGUgYXJndW1lbnQgZm9yIE5VTEwuXG4mIzQzO1dpdGggYGBfX2FyZW5hX19udWxsYWJsZWBgIHN1Y2ggYSB2YWx1ZSBhcnJpdmVzIGFzIE5VTEwgaW5zdGVhZCBhbmQgdGhlXG4mIzQzO2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuXG4mIzQzO1xuJiM0MztBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiYjNDM7XG4mIzQzOyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKVxuJiM0MzsgICAgICAgIHtcbiYjNDM7ICAgICAgICAuLi5cbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuJiM0MztDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4mIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbiYjNDM7cHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXNcbiYjNDM7bm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4mIzQzO1xuJiM0MztUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4mIzQzO2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZVxuJiM0MztrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzXG4mIzQzO2l0IHdoaWxlIHNhdmluZyB0aGUgYXJndW1lbnRzLCBzbyB0aGUgY2FsbGJhY2sgcmVjZWl2ZXMgYW4gYXJlbmEgcG9pbnRlclxuJiM0MztpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3RcbiYjNDM7cGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9fbnVsbGFibGVgYCBhIE5VTEwga2VybmVsIHBvaW50ZXIgYXJyaXZlcyBhcyBOVUxMLlxuJiM0MztIb3dldmVyLCB0aGVyZSBpcyBubyBvYmxpZ2F0aW9uIHRvIHByb3ZlIHRvIHRoZSB2ZXJpZmllciB0aGF0IHN1Y2ggYSBwb2ludGVyIGlzXG4mIzQzO25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpblxuJiM0MzthIHByb2dyYW0gKG9yIG9idGFpbmVkIGZyb20gYW55IG90aGVyIHNvdXJjZSkuXG4mIzQzO1xuIC4uIF9CUEZfa2Z1bmNfbm9kZWY6XG4gXG4gMi40IFVzaW5nIGFuIGV4aXN0aW5nIGtlcm5lbCBmdW5jdGlvblxuQEAgLTUxNSw2ICYjNDM7NTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0XG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXG4gYmVpbmcgc3VmZml4ZWQgd2l0aCBgYF9fX2luaXRgYC5cbiBcbiYjNDM7Li4gX0JQRl9rZnVuY19hcmVuYV9hY2Nlc3M6XG4mIzQzO1xuIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDAxZTdjZTU2OWMxZWQuLjVjNWMzMmFiYTIzOTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE2NzgsNiAmIzQzOzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZWJhc2UgdGhlIF9fYXJlbmEgYXJncyBvZiBhIGtmdW5jIGNhbGwgdG8gYXJlbmEga2VybmVsIGFkZHJlc3NlcyxcbiYjNDM7ICogck4gPSBrZXJuX3ZtX3N0YXJ0ICYjNDM7ICh1MzIpck4sIHdpdGggUjEyIGhvbGRpbmcga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZVxuJiM0MzsgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXNcbiYjNDM7ICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKipwcHJvZylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XG4mIzQzO1x0dTggKnByb2cgPSAqcHByb2c7XG4mIzQzO1x0dTggKnN0YXJ0ID0gcHJvZztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pO1xuJiM0MztcdGlmICghZm0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBmbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTggZmxhZ3MgPSBmbS1cdTAwM2VhcmdfZmxhZ3NbaV07XG4mIzQzO1x0XHR1MzIgcmVnID0gQlBGX1JFR18xICYjNDM7IGk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBtb3YgZU4sIGVOOiB0cnVuY2F0ZSBhbmQgY2xlYXIgdGhlIHVwcGVyIDMyIGJpdHMgKi9cbiYjNDM7XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCBmYWxzZSwgcmVnLCByZWcpO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xuJiM0MztcdFx0XHQvKiB0ZXN0IGVOLCBlTjsganogb3ZlciB0aGUgMy1ieXRlIGFkZCAqL1xuJiM0MztcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xuJiM0MztcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCByZWcsIHJlZykpO1xuJiM0MztcdFx0XHRFTUlUMihYODZfSkUsIDMpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogYWRkIHJOLCByMTIgKi9cbiYjNDM7XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIHJlZywgWDg2X1JFR19SMTIsIHRydWUpO1xuJiM0MztcdFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnBwcm9nID0gcHJvZztcbiYjNDM7XHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbiBcdFx0ICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZylcbiB7XG5AQCAtMjU4Myw2ICYjNDM7MjYyNywxMiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoIWltbTMyKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGlmIChzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xuJiM0MztcdFx0XHRcdGVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgXHUwMDI2cHJvZyk7XG4mIzQzO1x0XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdFx0aXAgJiM0Mzs9IGVycjtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGlmIChwcml2X2ZyYW1lX3B0cikge1xuIFx0XHRcdFx0cHVzaF9yOShcdTAwMjZwcm9nKTtcbiBcdFx0XHRcdGlwICYjNDM7PSAyO1xuQEAgLTI5OTMsMTEgJiM0MzszMDQzLDM5IEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pXG4gXHRyZXR1cm4gbnJfdXNlZF9yZWdzO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheVxuJiM0MzsgKiBpbnRvIHRoZSBCUEYgY3R4LCByYXggPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KS4gQSBudWxsYWJsZSBhcmdcbiYjNDM7ICogcHJlc2VydmVzIE5VTEwsIHRlc3RlZCBvbiB0aGUgZnVsbCA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXRcbiYjNDM7ICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZFxuJiM0MzsgKiB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hIHBvaW50ZXIgcmVnaXN0ZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pXG4mIzQzO3tcbiYjNDM7XHR1OCAqcHJvZyA9ICpwcHJvZztcbiYjNDM7XG4mIzQzO1x0aWYgKG51bGxhYmxlKSB7XG4mIzQzO1x0XHRpZiAoc3JjX3JlZyAhPSBCUEZfUkVHXzApXG4mIzQzO1x0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xuJiM0MztcdFx0LyogdGVzdCByYXgsIHJheDsganogb3ZlciB0aGUgNS1ieXRlIHN1YiAqL1xuJiM0MztcdFx0RU1JVDMoMHg0OCwgMHg4NSwgMHhDMCk7XG4mIzQzO1x0XHRFTUlUMihYODZfSkUsIDUpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3JjX3JlZyAhPSBCUEZfUkVHXzApIHtcbiYjNDM7XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCBmYWxzZSwgQlBGX1JFR18wLCBzcmNfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1x0Lyogc3ViIGVheCwgYmFzZV9sbyAqL1xuJiM0MztcdEVNSVQxX29mZjMyKDB4MkQsIGJhc2VfbG8pO1xuJiM0MztcbiYjNDM7XHQqcHByb2cgPSBwcm9nO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbi1cdFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXG4mIzQzO1x0XHQgICAgICBpbnQgc3RhY2tfc2l6ZSwgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIHUzMiBmbGFncyxcbiYjNDM7XHRcdCAgICAgIHU2NCBhcmVuYV9iYXNlKVxuIHtcbiBcdGludCBhcmdfcmVncywgZmlyc3Rfb2ZmID0gMCwgbnJfcmVncyA9IDAsIG5yX3N0YWNrX3Nsb3RzID0gMDtcbiBcdGJvb2wgdXNlX2ptcCA9IGJwZl90cmFtcG9saW5lX3VzZV9qbXAoZmxhZ3MpO1xuJiM0MztcdGludCBzdGFja19hcmdzX29mZiA9ICh1c2Vfam1wIHx8IChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpKSA/IDE2IDogMjQ7XG4gXHRpbnQgaSwgajtcbiBcbiBcdC8qIFN0b3JlIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byBzdGFjay5cbkBAIC0zMDA2LDYgJiM0MzszMDg0LDkgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0ICogbW92IFFXT1JEIFBUUiBbcmJwLTB4OF0scnNpXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbl90KGludCwgbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfQVJHUyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuJiM0MztcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XG4gXHRcdGFyZ19yZWdzID0gKG0tXHUwMDNlYXJnX3NpemVbaV0gJiM0MzsgNykgLyA4O1xuIFxuIFx0XHQvKiBBY2NvcmRpbmcgdG8gdGhlIHJlc2VhcmNoIG9mIFlvbmdob25nLCBzdHJ1Y3QgbWVtYmVyc1xuQEAgLTMwMjksMTYgJiM0MzszMTEwLDE5IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbiBcdFx0XHQvKiBjb3B5IGZ1bmN0aW9uIGFyZ3VtZW50cyBmcm9tIG9yaWdpbiBzdGFjayBmcmFtZVxuIFx0XHRcdCAqIGludG8gY3VycmVudCBzdGFjayBmcmFtZS5cbiBcdFx0XHQgKlxuLVx0XHRcdCAqIFRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBhcmd1bWVudHMgb24tc3RhY2tcbi1cdFx0XHQgKiBpczpcbi1cdFx0XHQgKiAgIHJicCAmIzQzOyA4KHB1c2ggcmJwKSAmIzQzO1xuLVx0XHRcdCAqICAgOChyZXR1cm4gYWRkciBvZiBvcmlnaW4gY2FsbCkgJiM0Mztcbi1cdFx0XHQgKiAgIDgocmV0dXJuIGFkZHIgb2YgdGhlIGNhbGxlcilcbi1cdFx0XHQgKiB3aGljaCBtZWFuczogcmJwICYjNDM7IDI0XG4mIzQzO1x0XHRcdCAqIFRoZSBhcmd1bWVudHMgb24tc3RhY2sgc3RhcnQgYWJvdmUgdGhlIHNhdmVkIHJicFxuJiM0MztcdFx0XHQgKiBhbmQgdGhlIHJldHVybiBhZGRyZXNzZXM6IHR3byByZXR1cm4gYWRkcmVzc2VzXG4mIzQzO1x0XHRcdCAqIChvcmlnaW4gY2FsbCBhbmQgY2FsbGVyKSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzXG4mIzQzO1x0XHRcdCAqIGVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwsIHNvIHJicCAmIzQzOyAyNCwgYW5kXG4mIzQzO1x0XHRcdCAqIGEgc2luZ2xlIG9uZSB3aGVuIGl0IGlzIGVudGVyZWQgd2l0aCBhIGptcCBvclxuJiM0MztcdFx0XHQgKiBjYWxsZWQgaW5kaXJlY3RseSwgc28gcmJwICYjNDM7IDE2LlxuIFx0XHRcdCAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqJiM0MzsmIzQzOykge1xuIFx0XHRcdFx0ZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsXG4tXHRcdFx0XHRcdCBucl9zdGFja19zbG90cyAqIDggJiM0MzsgMTYgJiM0MzsgKCF1c2Vfam1wKSAqIDgpO1xuJiM0MztcdFx0XHRcdFx0IG5yX3N0YWNrX3Nsb3RzICogOCAmIzQzOyBzdGFja19hcmdzX29mZik7XG4mIzQzO1x0XHRcdFx0aWYgKGFyZW5hX2FyZylcbiYjNDM7XHRcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgQlBGX1JFR18wLCBudWxsYWJsZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgKHUzMilhcmVuYV9iYXNlKTtcbiBcdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLFxuIFx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuIFxuQEAgLTMwNTksOSAmIzQzOzMxNDMsMTMgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFxuIFx0XHRcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLFxuLVx0XHRcdFx0XHQgbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSAmIzQzOyBucl9yZWdzLFxuLVx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuJiM0MztcdFx0XHRcdHUzMiBzcmMgPSBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICYjNDM7IG5yX3JlZ3M7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmIChhcmVuYV9hcmcpIHtcbiYjNDM7XHRcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgc3JjLCBudWxsYWJsZSwgKHUzMilhcmVuYV9iYXNlKTtcbiYjNDM7XHRcdFx0XHRcdHNyYyA9IEJQRl9SRUdfMDtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBzcmMsIC1zdGFja19zaXplKTtcbiBcdFx0XHRcdHN0YWNrX3NpemUgLT0gODtcbiBcdFx0XHRcdG5yX3JlZ3MmIzQzOyYjNDM7O1xuIFx0XHRcdH1cbkBAIC0zMzU3LDYgJiM0MzszNDQ1LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdHZvaWQgKm9yaWdfY2FsbCA9IGZ1bmNfYWRkcjtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250O1xuIFx0dTggKipicmFuY2hlcyA9IE5VTEw7XG4mIzQzO1x0dTY0IGFyZW5hX2Jhc2U7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFx0dTggKnByb2c7XG4gXHRib29sIHNhdmVfcmV0O1xuQEAgLTMzNjksNiAmIzQzOzM0NTgsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuIFxuJiM0MztcdGFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkmIzQzOyYjNDM7KVxuIFx0XHRucl9yZWdzICYjNDM7PSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDggLSAxO1xuIFxuQEAgLTM1MDMsNyAmIzQzOzM1OTQsNyBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWlwX29mZiwgKGxvbmcpZnVuY19hZGRyKTtcbiBcdH1cbiBcbi1cdHNhdmVfYXJncyhtLCBcdTAwMjZwcm9nLCByZWdzX29mZiwgZmFsc2UsIGZsYWdzKTtcbiYjNDM7XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncywgYXJlbmFfYmFzZSk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuIFx0XHQvKiBhcmcxOiBtb3YgcmRpLCBpbSAqL1xuQEAgLTM1NDUsNyAmIzQzOzM2MzYsNyBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbiBcdFx0cmVzdG9yZV9yZWdzKG0sIFx1MDAyNnByb2csIHJlZ3Nfb2ZmKTtcbi1cdFx0c2F2ZV9hcmdzKG0sIFx1MDAyNnByb2csIGFyZ19zdGFja19vZmYsIHRydWUsIGZsYWdzKTtcbiYjNDM7XHRcdHNhdmVfYXJncyhtLCBcdTAwMjZwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncywgMCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCkge1xuIFx0XHRcdC8qIEJlZm9yZSBjYWxsaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgbG9hZCB0aGVcbkBAIC00MDQ2LDYgJiM0Mzs0MTM3LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4ge1xuIFx0aWYgKHRleHRfcG9rZV9jb3B5KGRzdCwgc3JjLCBsZW4pID09IE5VTEwpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLjY4ZmY2Njc4N2FlMWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTIxMCw2ICYjNDM7MTIxMCwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2dfb2ZmbG9hZCB7XG4gLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi9cbiAjZGVmaW5lIEJURl9GTU9ERUxfU0lHTkVEX0FSR1x0XHRCSVQoMSlcbiBcbiYjNDM7LyogVGhlIGFyZ3VtZW50IGlzIGFuIGFyZW5hIHBvaW50ZXIuICovXG4mIzQzOyNkZWZpbmUgQlRGX0ZNT0RFTF9BUkVOQV9BUkdcdFx0QklUKDIpXG4mIzQzO1xuJiM0MzsvKiBUaGUgYXJndW1lbnQgaXMgbnVsbGFibGUuICovXG4mIzQzOyNkZWZpbmUgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkdcdFx0QklUKDMpXG4mIzQzO1xuIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7XG4gXHR1OCByZXRfc2l6ZTtcbiBcdHU4IHJldF9mbGFncztcbkBAIC0xMjgzLDYgJiM0MzsxMjg5LDE1IEBAIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMge1xuIFx0aW50IG5yX25vZGVzO1xuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBhcmVuYSBiYXNlIGFnYWluc3Qgd2hpY2ggYSBzdHJ1Y3Rfb3BzIHRyYW1wb2xpbmUgY29udmVydHMgdGhlXG4mIzQzOyAqIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRyB3aGlsZSBzYXZpbmcgdGhlbSBpbnRvIHRoZSBCUEZcbiYjNDM7ICogY3R4LCBjdHhbYXJnXSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuIFplcm8gd2hlbiB0aGUgdHJhbXBvbGluZVxuJiM0MzsgKiBjb252ZXJ0cyBub3RoaW5nLlxuJiM0MzsgKi9cbiYjNDM7dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbiYjNDM7XHRcdFx0IHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzKTtcbiYjNDM7XG4gc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4O1xuIFxuIC8qIERpZmZlcmVudCB1c2UgY2FzZXMgZm9yIEJQRiB0cmFtcG9saW5lOlxuQEAgLTIzNTIsNiAmIzQzOzIzNjcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfZnNlc3Npb25fY29va2llX2NudChzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpub2RlcylcbiBcbiBpbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvLCB1MzIgY250KTtcbiYjNDM7Ym9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19DR1JPVVBfQlBGKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX0xTTSlcbiBpbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IGEyYTQwY2FjYTBhMGUuLmE5NTU1ZDE3ZmQ4ZWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTE3Nyw4ICYjNDM7MTE3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV91bnBhY2tfa2V5KHU2NCBrZXksIHUzMiAqb2JqX2lkLCB1MzIgKmJ0Zl9pZClcbiBcdFx0KmJ0Zl9pZCA9IGtleSBcdTAwMjYgMHg3RkZGRkZGRjtcbiB9XG4gXG4taW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcbiYjNDM7aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xuIGludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDMyZDUyOTdjNTU3ZTUuLjM2Y2UzNDAzZmU1OTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTE4Myw2ICYjNDM7MTE4Myw3IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCk7XG4mIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5pbmRleCA0ZTdhNDhjMDJiZTVjLi5jZWQ3YjE4MjQ2YTk2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcbkBAIC0xNDcsNiAmIzQzOzE0Nyw4IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcbiBcbiAjZGVmaW5lIE1BWUJFX05VTExfU1VGRklYIFwmIzM0O19fbnVsbGFibGVcJiMzNDtcbiAjZGVmaW5lIFJFRkNPVU5URURfU1VGRklYIFwmIzM0O19fcmVmXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQVJFTkFfU1VGRklYIFwmIzM0O19fYXJlbmFcJiMzNDtcbiYjNDM7I2RlZmluZSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCBcJiMzNDtfX2FyZW5hX19udWxsYWJsZVwmIzM0O1xuIFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxuICAqIHN0cnVjdF9vcHMgdHlwZS5cbkBAIC0xNTksNyAmIzQzOzE2MSw3IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcbiAgKiB0byBwcm92aWRlIGFuIGFycmF5IG9mIHN0cnVjdCBicGZfY3R4X2FyZ19hdXgsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXNcbiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZVxuICAqIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW0gYXNzaWduZWQgdG8gdGhlIG1lbWJlci4gSGVyZSwgd2Ugb25seSBjYXJlIGFib3V0XG4tICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZS5cbiYjNDM7ICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZSwgX19yZWYgb3IgX19hcmVuYS5cbiAgKlxuICAqIFRoZSBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IGlzIGV2ZW50dWFsbHkgYXNzaWduZWQgdG9cbiAgKiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm8gb2YgQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbXMgYW5kIHBhc3NlZCB0byB0aGVcbkBAIC0xNzIsMTAgJiM0MzsxNzQsMTIgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHQgICAgY29uc3QgY2hhciAqc3Rfb3BzX25hbWUsXG4gXHRcdFx0ICAgIGNvbnN0IGNoYXIgKm1lbWJlcl9uYW1lLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG8sIHZvaWQgKnN0dWJfZnVuY19hZGRyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptb2RlbCxcbiBcdFx0XHQgICAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvICphcmdfaW5mbylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnN0dWJfZnVuY19wcm90bywgKnBvaW50ZWRfdHlwZTtcbi1cdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlO1xuJiM0MztcdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlLCBpc19hcmVuYSA9IGZhbHNlO1xuJiM0MztcdGJvb2wgaXNfYXJlbmFfbnVsbGFibGUgPSBmYWxzZTtcbiBcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnN0dWJfYXJncywgKmFyZ3M7XG4gXHRzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvLCAqaW5mb19idWY7XG4gXHR1MzIgbmFyZ3MsIGFyZ19ubywgaW5mb19jbnQgPSAwO1xuQEAgLTIyNSwyNyAmIzQzOzIyOSwzNSBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxuIFx0LyogUHJlcGFyZSBpbmZvIGZvciBldmVyeSBudWxsYWJsZSBhcmd1bWVudCAqL1xuIFx0aW5mbyA9IGluZm9fYnVmO1xuIFx0Zm9yIChhcmdfbm8gPSAwOyBhcmdfbm8gXHUwMDNjIG5hcmdzOyBhcmdfbm8mIzQzOyYjNDM7KSB7XG4tXHRcdC8qIFNraXAgYXJndW1lbnRzIHRoYXQgaXMgbm90IHN1ZmZpeGVkIHdpdGhcbi1cdFx0ICogXCYjMzQ7X19udWxsYWJsZSBvciBfX3JlZlwmIzM0Oy5cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGFyZSBub3Qgc3VmZml4ZWQgd2l0aCBcJiMzNDtfX2FyZW5hX19udWxsYWJsZVwmIzM0OyxcbiYjNDM7XHRcdCAqIFwmIzM0O19fYXJlbmFcJiMzNDssIFwmIzM0O19fbnVsbGFibGVcJiMzNDssIG9yIFwmIzM0O19fcmVmXCYjMzQ7LlxuIFx0XHQgKi9cbi1cdFx0aXNfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sXG4tXHRcdFx0XHRcdFx0ICAgICBNQVlCRV9OVUxMX1NVRkZJWCk7XG4mIzQzO1x0XHRpc19hcmVuYV9udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCk7XG4mIzQzO1x0XHRpc19hcmVuYSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSwgQVJFTkFfU1VGRklYKTtcbiYjNDM7XHRcdGlzX251bGxhYmxlID0gIWlzX2FyZW5hX251bGxhYmxlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sIE1BWUJFX05VTExfU1VGRklYKTtcbiBcdFx0aXNfcmVmY291bnRlZCA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbiBcdFx0XHRcdFx0XHQgICAgICAgUkVGQ09VTlRFRF9TVUZGSVgpO1xuIFxuLVx0XHRpZiAoaXNfbnVsbGFibGUpXG4mIzQzO1x0XHRpZiAoaXNfYXJlbmFfbnVsbGFibGUpXG4mIzQzO1x0XHRcdHN1ZmZpeCA9IEFSRU5BX01BWUJFX05VTExfU1VGRklYO1xuJiM0MztcdFx0ZWxzZSBpZiAoaXNfYXJlbmEpXG4mIzQzO1x0XHRcdHN1ZmZpeCA9IEFSRU5BX1NVRkZJWDtcbiYjNDM7XHRcdGVsc2UgaWYgKGlzX251bGxhYmxlKVxuIFx0XHRcdHN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYO1xuIFx0XHRlbHNlIGlmIChpc19yZWZjb3VudGVkKVxuIFx0XHRcdHN1ZmZpeCA9IFJFRkNPVU5URURfU1VGRklYO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovXG4tXHRcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0Zixcbi1cdFx0XHRcdFx0XHQgICAgYXJnc1thcmdfbm9dLnR5cGUsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmFyZ19idGZfaWQpO1xuLVx0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fFxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QsIG9yIGFueSBwb2ludGVyIGZvciBfX2FyZW5hIG9yXG4mIzQzO1x0XHQgKiBfX2FyZW5hX19udWxsYWJsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLCBhcmdzW2FyZ19ub10udHlwZSwgXHUwMDI2YXJnX2J0Zl9pZCk7XG4mIzQzO1x0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fCAoIWlzX2FyZW5hIFx1MDAyNlx1MDAyNiAhaXNfYXJlbmFfbnVsbGFibGUgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkpIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3N0dWIgZnVuY3Rpb24gJXMgaGFzICVzIHRhZ2dpbmcgdG8gYW4gdW5zdXBwb3J0ZWQgdHlwZVxcblwmIzM0OyxcbiBcdFx0XHRcdHN0dWJfZm5hbWUsIHN1ZmZpeCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuQEAgLTI2OCw3ICYjNDM7MjgwLDE4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdGluZm8tXHUwMDNlYnRmX2lkID0gYXJnX2J0Zl9pZDtcbiBcdFx0aW5mby1cdTAwM2VidGYgPSBidGY7XG4gXHRcdGluZm8tXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xuLVx0XHRpZiAoaXNfbnVsbGFibGUpIHtcbiYjNDM7XHRcdGlmIChpc19hcmVuYSB8fCBpc19hcmVuYV9udWxsYWJsZSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLFxuJiM0MztcdFx0XHQgKiBQVFJfVE9fQVJFTkEgZW5jb21wYXNzZXMgcG90ZW50aWFsIE5VTEwgdmFsdWVzLCBidXRcbiYjNDM7XHRcdFx0ICogd2UgZG8gbm90IGZvcmNlIHRoZSBwcm9ncmFtIHRvIGNoZWNrIGl0LCBvciBtYWludGFpblxuJiM0MztcdFx0XHQgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IFBUUl9UT19BUkVOQTtcbiYjNDM7XHRcdFx0bW9kZWwtXHUwMDNlYXJnX2ZsYWdzW2FyZ19ub10gfD0gQlRGX0ZNT0RFTF9BUkVOQV9BUkc7XG4mIzQzO1x0XHRcdGlmIChpc19hcmVuYV9udWxsYWJsZSlcbiYjNDM7XHRcdFx0XHRtb2RlbC1cdTAwM2VhcmdfZmxhZ3NbYXJnX25vXSB8PSBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XHRcdH0gZWxzZSBpZiAoaXNfbnVsbGFibGUpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXJlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEIHwgUFRSX01BWUJFX05VTEw7XG4gXHRcdH0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQ7XG5AQCAtNDYwLDYgJiM0Mzs0ODMsNyBAQCBpbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcbiBcdFx0c3R1Yl9mdW5jX2FkZHIgPSAqKHZvaWQgKiopKHN0X29wcy1cdTAwM2VjZmlfc3R1YnMgJiM0MzsgbW9mZik7XG4gXHRcdGVyciA9IHByZXBhcmVfYXJnX2luZm8oYnRmLCBzdF9vcHMtXHUwMDNlbmFtZSwgbW5hbWUsXG4gXHRcdFx0XHQgICAgICAgZnVuY19wcm90bywgc3R1Yl9mdW5jX2FkZHIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNnN0X29wcy1cdTAwM2VmdW5jX21vZGVsc1tpXSxcbiBcdFx0XHRcdCAgICAgICBhcmdfaW5mbyAmIzQzOyBpKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGVycm91dDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNDI0MTQ2MzNjZjI2My4uNjYwNjE4N2VkNGY0MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC02OTYzLDE1ICYjNDM7Njk2MywxOSBAQCBib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHQvKiBjaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCBvciBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwsIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMIG9yXG4mIzQzO1x0ICogUFRSX1RPX0FSRU5BIChib3RoIG51bGxhYmxlIGFuZCBub24tbnVsbGFibGUgY2FzZXMpLlxuJiM0MztcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmN0eF9hcmdfaW5mbyA9IFx1MDAyNnByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mb1tpXTtcbiBcdFx0dTMyIHR5cGUsIGZsYWc7XG4gXG4gXHRcdHR5cGUgPSBiYXNlX3R5cGUoY3R4X2FyZ19pbmZvLVx1MDAzZXJlZ190eXBlKTtcbiBcdFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGUpO1xuLVx0XHRpZiAoY3R4X2FyZ19pbmZvLVx1MDAzZW9mZnNldCA9PSBvZmYgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpIHtcbiYjNDM7XHRcdGlmIChjdHhfYXJnX2luZm8tXHUwMDNlb2Zmc2V0ID09IG9mZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAodHlwZSA9PSBQVFJfVE9fQVJFTkEgfHxcbiYjNDM7XHRcdCAgICAgKHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjYgKGZsYWcgXHUwMDI2IFBUUl9NQVlCRV9OVUxMKSkpKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IGN0eF9hcmdfaW5mby1cdTAwM2VyZWdfdHlwZTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuQEAgLTc1MzksNiAmIzQzOzc1NDMsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4mIzQzO3tcbiYjNDM7XHR1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xuJiM0MztcbiYjNDM7XHRpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYV9fbnVsbGFibGVcJiMzNDspKVxuJiM0MztcdFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9BUkVOQV9BUkcgfCBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XHRlbHNlIGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2FyZW5hXCYjMzQ7KSlcbiYjNDM7XHRcdGZsYWdzIHw9IEJURl9GTU9ERUxfQVJFTkFfQVJHO1xuJiM0MztcdGVsc2UgaWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fbnVsbGFibGVcJiMzNDspKVxuJiM0MztcdFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmbGFncztcbiYjNDM7fVxuJiM0MztcbiBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdCAgIHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmMsXG5AQCAtNzYwNCw3ICYjNDM7NzYyNCw3IEBAIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bS1cdTAwM2Vhcmdfc2l6ZVtpXSA9IHJldDtcbi1cdFx0bS1cdTAwM2VhcmdfZmxhZ3NbaV0gPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTtcbiYjNDM7XHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhidGYsIFx1MDAyNmFyZ3NbaV0sIHQpO1xuIFx0fVxuIFx0bS1cdTAwM2Vucl9hcmdzID0gbmFyZ3M7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jIGIva2VybmVsL2JwZi9jaGVja19idGYuY1xuaW5kZXggOTNiZWJlNmZlMTJlNy4uMGU4YjNjY2M3YTViOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcbkBAIC0yOCw5ICYjNDM7MjgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2Fibm9ybWFsX3JldHVybihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuICNkZWZpbmUgTUlOX0JQRl9GVU5DSU5GT19TSVpFXHQ4XG4gI2RlZmluZSBNQVhfRlVOQ0lORk9fUkVDX1NJWkVcdDI1MlxuIFxuLXN0YXRpYyBpbnQgY2hlY2tfYnRmX2Z1bmNfZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLVx0XHRcdFx0YnBmcHRyX3QgdWF0dHIpXG4mIzQzO3N0YXRpYyBpbnQgcHJlcGFyZV9idGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuJiM0MztcdFx0XHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4mIzQzO1x0XHRcdCAgICBicGZwdHJfdCB1YXR0cilcbiB7XG4gXHR1MzIga3JlY19zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfZnVuY19pbmZvKTtcbiBcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdHlwZSwgKmZ1bmNfcHJvdG87XG5AQCAtNDA3LDkgJiM0Mzs0MDcsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tXHRcdFx0ICAgICBicGZwdHJfdCB1YXR0cilcbiYjNDM7aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiYjNDM7XHRcdFx0IGJwZnB0cl90IHVhdHRyKVxuIHtcbiBcdHN0cnVjdCBidGYgKmJ0ZjtcbiBcdGludCBlcnI7XG5AQCAtNDI5LDcgJiM0Mzs0MjksNyBAQCBpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gXHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlYnRmID0gYnRmO1xuIFxuLVx0ZXJyID0gY2hlY2tfYnRmX2Z1bmNfZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG4mIzQzO1x0ZXJyID0gcHJlcGFyZV9idGZfZnVuYyhlbnYsIGF0dHIsIHVhdHRyKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtMzMwOCw2ICYjNDM7MzMwOCwxMSBAQCBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzO2Jvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZClcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuaW5kZXggZWQ3OTk5YWQ2YzY2Yy4uZTA3YWYzNWVkMDQwMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTUyOSw2ICYjNDM7NTI5LDM2IEBAIGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hXG4gXHRyZXR1cm4gdG5vZGVzO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIGFyZW5hIGJhc2UgYWdhaW5zdCB3aGljaCBzYXZlX2FyZ3MoKSBjb252ZXJ0cyB0aGUgYXJndW1lbnRzIG1hcmtlZFxuJiM0MzsgKiB3aXRoIEJURl9GTU9ERUxfQVJFTkFfQVJHLiBPbmx5IHRoZSBzdHJ1Y3Rfb3BzIGluZGlyZWN0IHRyYW1wb2xpbmVcbiYjNDM7ICogY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUgcHJvZyB3aG9zZSBhcmVuYSBpcyBrbm93biBhdFxuJiM0MzsgKiBnZW5lcmF0aW9uIHRpbWUuIFJldHVybiAwIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBjb252ZXJ0LlxuJiM0MzsgKi9cbiYjNDM7dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbiYjNDM7XHRcdFx0IHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHx8XG4mIzQzO1x0ICAgIHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ucl9ub2RlcyAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG0tXHUwMDNlbnJfYXJnczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRpZiAoaSA9PSBtLVx1MDAzZW5yX2FyZ3MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVmVyaWZpY2F0aW9uIHJlamVjdHMgYW4gYXJlbmEgYXJndW1lbnQgd2l0aG91dCBhbiBhcmVuYS4gKi9cbiYjNDM7XHRwcm9nID0gdG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5vZGVzWzBdLVx1MDAzZWxpbmstXHUwMDNlcHJvZztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2ZyZWUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pXG4ge1xuIFx0YnBmX2ltYWdlX2tzeW1fZGVsKFx1MDAyNmltLVx1MDAzZWtzeW0pO1xuQEAgLTkyMCw2ICYjNDM7OTUwLDEzIEBAIHN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuIFx0aW50IGNudCA9IDAsIGk7XG4gXG4gXHRraW5kID0gYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFyZW5hIGN0eCBhcmdzIGFyZSBjb252ZXJ0ZWQgb25seSBieSBzdHJ1Y3Rfb3BzIGluZGlyZWN0XG4mIzQzO1x0ICogdHJhbXBvbGluZXMuIFRoZXkgbXVzdCBuZXZlciBiZSBhdHRhY2hlZCB0byBhIGdlbmVyaWMgdHJhbXBvbGluZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RTVVBQO1xuJiM0MztcbiBcdGlmICh0ci1cdTAwM2VleHRlbnNpb25fcHJvZylcbiBcdFx0LyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuXG4gXHRcdCAqIGNhbm5vdCBvdmVyd3JpdGUgZXh0ZW5zaW9uIHByb2cgZWl0aGVyLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMDk1ODhiN2IwOGIwYS4uODNlZGY0MWM3ZmU5YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjg0Miw3ICYjNDM7Mjg0Miw3IEBAIGludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiYjNDM7c3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4gXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiwgZXhfY2JfaW5zbjtcbkBAIC0yODU0LDggJiM0MzsyODU0LDcgQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFicGZfcHNldWRvX2Z1bmMoaW5zbikgXHUwMDI2XHUwMDI2ICFicGZfcHNldWRvX2NhbGwoaW5zbikgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pKVxuJiM0MztcdFx0aWYgKCFicGZfcHNldWRvX2Z1bmMoaW5zbikgXHUwMDI2XHUwMDI2ICFicGZfcHNldWRvX2NhbGwoaW5zbikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICghZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG5AQCAtMjg2MywxMSAmIzQzOzI4NjIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXHRcdH1cbiBcbi1cdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSB8fCBicGZfcHNldWRvX2NhbGwoaW5zbikpXG4tXHRcdFx0cmV0ID0gYWRkX3N1YnByb2coZW52LCBpICYjNDM7IGluc24tXHUwMDNlaW1tICYjNDM7IDEpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gYnBmX2FkZF9rZnVuY19jYWxsKGVudiwgaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmKTtcbi1cbiYjNDM7XHRcdHJldCA9IGFkZF9zdWJwcm9nKGVudiwgaSAmIzQzOyBpbnNuLVx1MDAzZWltbSAmIzQzOyAxKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuQEAgLTI5MDUsNiAmIzQzOzI5MDAsMjggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhZGRfa2Z1bmNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4mIzQzO1x0aW50IGksIHJldCwgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWVudi1cdTAwM2VicGZfY2FwYWJsZSkge1xuJiM0MztcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bG9hZGluZy9jYWxsaW5nIG90aGVyIGJwZiBvciBrZXJuZWwgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIGZvciBDQVBfQlBGIGFuZCBDQVBfU1lTX0FETUlOXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBicGZfYWRkX2tmdW5jX2NhbGwoZW52LCBpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRpbnQgaSwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQsIG9mZiwgY3VyX3N1YnByb2cgPSAwO1xuQEAgLTEwODkyLDkgJiM0MzsxMDkwOSwxNiBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0ZlxuIFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fcmVmY291bnRlZF9rcHRyXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYV9fbnVsbGFibGVcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4tXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19udWxsYWJsZVwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuICFpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoYnRmLCBhcmcpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX251bGxhYmxlXCYjMzQ7KTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX25vbm93bl9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuQEAgLTEwOTEyLDYgJiM0MzsxMDkzNiwxMiBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfaXJxX2ZsYWcoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtXG4gXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19pcnFfZmxhZ1wmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmEoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKGJ0ZiwgYXJnKSB8fFxuJiM0MztcdCAgICAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2FyZW5hXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxuIFx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWUpXG5AQCAtMTExMzIsNiAmIzQzOzExMTYyLDcgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuIFx0S0ZfQVJHX1BUUl9UT19JUlFfRkxBRyxcbiBcdEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSyxcbiBcdEtGX0FSR19QVFJfVE9fVEFTS19XT1JLLFxuJiM0MztcdEtGX0FSR19QVFJfVE9fQVJFTkEsXG4gfTtcbiBcbiBlbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG5AQCAtMTE0MTcsNyAmIzQzOzExNDQ4LDYgQEAgZ2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiBcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cih0KSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVxuIFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLVx1MDAzZWJ0ZiwgdC1cdTAwM2V0eXBlLCBOVUxMKTtcbiBcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QtXHUwMDNlbmFtZV9vZmYpO1xuIFxuQEAgLTExNDY2LDcgJiM0MzsxMTQ5NiwyOSBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcbiBcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuIFx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XG4tXHRlbHNlIGlmIChhcmcgJiM0MzsgMSBcdTAwM2MgbmFyZ3MgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FyZW5hKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKSB7XG4mIzQzO1x0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG4mIzQzO1x0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggYXJlbmEgcG9pbnRlciBhcmd1bWVudHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bWV0YS1cdTAwM2VmdW5jX25hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKCFlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7JXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHJlZ19mcm9tX2FyZ25vKGFyZ25vKSBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCb3RoIHN1ZmZpeGVzIGFjY2VwdCBhIGNvbnN0YW50IHplcm8uIFRoZSBmdW5jdGlvbiBtb2RlbCBkZXRlcm1pbmVzXG4mIzQzO1x0XHQgKiB3aGV0aGVyIHRoZSBKSVQgcmViYXNlcyBpdCB0byB0aGUgYXJlbmEgYmFzZSBvciBwcmVzZXJ2ZXMgTlVMTC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0FSRU5BIHwgUFRSX01BWUJFX05VTEw7XG4mIzQzO1x0fSBlbHNlIGlmIChhcmcgJiM0MzsgMSBcdTAwM2MgbmFyZ3MgXHUwMDI2XHUwMDI2XG4gXHRcdCAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyAmIzQzOyAxXSkgfHxcbiBcdFx0ICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICYjNDM7IDFdKSkpIHtcbiBcdFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcdTAwMjZcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG5AQCAtMTIxNjAsNyAmIzQzOzEyMjEyLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbiBcbiBcdFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSBcdTAwMjZcdTAwMjYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1tpXSkpIHtcbiYjNDM7XHRcdCAgICAhdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbkBAIC0xMjIxMyw2ICYjNDM7MTIyNjUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fVEFTS19XT1JLOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fSVJRX0ZMQUc6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOlxuJiM0MztcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FSRU5BOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fRFlOUFRSOlxuIFx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7XG5AQCAtMTIyNzksNiAmIzQzOzEyMzMyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRtZXRhLVx1MDAzZXJldF9idGZfaWQgID0gcmV0O1xuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19BUkVOQTpcbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDpcbiBcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MpKSB7XG4gXHRcdFx0XHRpZiAoIWlzX2JwZl9vYmpfZHJvcF9rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpKSB7XG5AQCAtMTg4MDgsMTAgJiM0MzsxODg2OCwyMSBAQCBpbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0cmV0dXJuIHByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mbyA/IDAgOiAtRU5PTUVNO1xuIH1cbiBcbiYjNDM7Ym9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGJhc2VfdHlwZShwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV0ucmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICpmdW5jX3Byb3RvO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcztcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXHUwMDNlcHJvZztcbkBAIC0xODg5MCwxMCAmIzQzOzE4OTYxLDIzIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5jbnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvW2ldLnJlZmNvdW50ZWQpIHtcbiYjNDM7XHRhcmdfaW5mbyA9IFx1MDAyNnN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZ19pbmZvLVx1MDAzZWNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8gPSBcdTAwMjZhcmdfaW5mby1cdTAwM2VpbmZvW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXJlZmNvdW50ZWQpXG4gXHRcdFx0aGFzX3JlZmNvdW50ZWRfYXJnID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmIChiYXNlX3R5cGUoaW5mby1cdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0FSRU5BKSB7XG4mIzQzO1x0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2FyZW5hIGFyZ3VtZW50IG9mICVzIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRtbmFtZSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE4OTE0LDggJiM0MzsxODk5OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcbiBcdGVudi1cdTAwM2VvcHMgPSBzdF9vcHMtXHUwMDNldmVyaWZpZXJfb3BzO1xuIFxuLVx0cmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmluZm8sXG4tXHRcdFx0XHRcdCAgc3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uY250KTtcbiYjNDM7XHRyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgYXJnX2luZm8tXHUwMDNlaW5mbywgYXJnX2luZm8tXHUwMDNlY250KTtcbiB9XG4gI2RlZmluZSBTRUNVUklUWV9QUkVGSVggXCYjMzQ7c2VjdXJpdHlfXCYjMzQ7XG4gXG5AQCAtMTkxNzksNiAmIzQzOzE5MjYyLDE3IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdGJwZl9sb2cobG9nLCBcJiMzNDtTdWJwcm9nICVzIGRvZXNuJiMzOTt0IGV4aXN0XFxuXCYjMzQ7LCB0bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIHN0cnVjdF9vcHMgaW5kaXJlY3QgdHJhbXBvbGluZSBjb252ZXJ0cyBhcmVuYSBhcmd1bWVudHNcbiYjNDM7XHRcdCAqIGJlZm9yZSBpbnZva2luZyBpdHMgcHJvZ3JhbS4gQSB0cmFjaW5nIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlXG4mIzQzO1x0XHQgKiBtYWluIHByb2dyYW0gd291bGQgc2VlIHRoZSBjb252ZXJ0ZWQgb2Zmc2V0IGFzIGEgcmVndWxhciBCVEZcbiYjNDM7XHRcdCAqIHBvaW50ZXIuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwcm9nX3RyYWNpbmcgXHUwMDI2XHUwMDI2IHN1YnByb2cgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyh0Z3RfcHJvZykpIHtcbiYjNDM7XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O0Nhbm5vdCB0cmFjZSBhIHRhcmdldCB3aXRoIGFyZW5hIGNvbnRleHQgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuIFx0XHRpZiAoYXV4LVx1MDAzZWZ1bmMgXHUwMDI2XHUwMDI2IGF1eC1cdTAwM2VmdW5jW3N1YnByb2ddLVx1MDAzZWF1eC1cdTAwM2VleGNlcHRpb25fY2IpIHtcbiBcdFx0XHRicGZfbG9nKGxvZyxcbiBcdFx0XHRcdFwmIzM0OyVzIHByb2dyYW1zIGNhbm5vdCBhdHRhY2ggdG8gZXhjZXB0aW9uIGNhbGxiYWNrXFxuXCYjMzQ7LFxuQEAgLTIwMjY5LDExICYjNDM7MjAzNjMsMTMgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVudi1cdTAwM2VleHBsb3JlZF9zdGF0ZXNbaV0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZW52LVx1MDAzZWZyZWVfbGlzdCk7XG4gXG4tXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG4mIzQzO1x0LyogUHJlcGFyZSBCVEYgYW5kIGZ1bmNfaW5mbyBuZWVkZWQgdG8gZGlzY292ZXIgYWxsIHN1YnByb2dyYW1zLiAqL1xuJiM0MztcdHJldCA9IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHRyZXQgPSBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoZW52KTtcbiYjNDM7XHQvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYmVmb3JlIHZhbGlkYXRpbmcgdGhlaXIgbGF5b3V0IGFuZCBCVEYuICovXG4mIzQzO1x0cmV0ID0gYWRkX3N1YnByb2dzKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbkBAIC0yMDI4MSwxNCAmIzQzOzIwMzc3LDIxIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4mIzQzO1x0LyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi9cbiBcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuIFxuJiM0MztcdC8qIFZhbGlkYXRlIGluc3RydWN0aW9ucyBhbmQgcmVzb2x2ZSB0aGUgcHJvZ3JhbSYjMzk7cyByZWZlcmVuY2VkIHJlc291cmNlcy4gKi9cbiBcdHJldCA9IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbiYjNDM7XHQvKiBCdWlsZCBrZnVuYyBwcm90b3R5cGVzIGFmdGVyIHJlc29sdmluZyBwcm9ncmFtIHJlc291cmNlcy4gKi9cbiYjNDM7XHRyZXQgPSBhZGRfa2Z1bmNzKGVudik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuJiM0MztcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSkge1xuIFx0XHRyZXQgPSBicGZfcHJvZ19vZmZsb2FkX3ZlcmlmaWVyX3ByZXAoZW52LVx1MDAzZXByb2cpO1xuIFx0XHRpZiAocmV0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zMjNkNzA3YzU0M2ZhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTAsMCAmIzQzOzEsNzQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N0cnVjdF9vcHNfYXJlbmEuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzOy8qXG4mIzQzOyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXG4mIzQzOyAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXJlbmFfYXJnKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuJiM0MztcdHN0cnVjdCBzdHJ1Y3Rfb3BzX2FyZW5hICpza2VsO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfbWFwX19hdHRhY2hfc3RydWN0X29wcyhza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9hcmVuYSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwmIzM0O2F0dGFjaF9zdHJ1Y3Rfb3BzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnRyaWdnZXIpLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2dG9wdHMpO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcJiMzNDt0cmlnZ2VyX3JldHZhbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0c3RydWN0X29wc19hcmVuYV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBwcm9ncmFtIHdpdGggbm8gYXJlbmEgY2Fubm90IGF0dGFjaCB0byBhIG1lbWJlciB3aXRoIGFuIF9fYXJlbmFcbiYjNDM7ICogYXJndW1lbnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBhcmVuYV9hcmdfZmFpbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN0cnVjdF9vcHNfYXJlbmFfZmFpbCAqc2tlbDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmIChBU1NFUlRfRVJSX1BUUihza2VsLCBcJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaFxuJiM0MzsgKiB0ZXN0X3N0cnVjdF9vcHNfcHJpdmF0ZV9zdGFjayBhbHNvIGF0dGFjaGVzOyByZWdpc3RlcmluZyBpdCB0d2ljZSBmYWlsc1xuJiM0MzsgKiB3aXRoIC1FRVhJU1QuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxuJiM0MztcdCAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuJiM0MztcdCAqIGFyZ3VtZW50c1wmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4mIzQzO1x0ICovXG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YXJlbmFfYXJnXCYjMzQ7KSlcbiYjNDM7XHRcdGFyZW5hX2FyZygpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2FyZ19mYWlsXCYjMzQ7KSlcbiYjNDM7XHRcdGFyZW5hX2FyZ19mYWlsKCk7XG4mIzQzOyNlbHNlXG4mIzQzO1x0dGVzdF9fc2tpcCgpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCBiNzliYWZjYTY4ZjdhLi4xMTBhMzNiNmUxYzI1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTIsNiAmIzQzOzIsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDthcmVuYV9rZnVuYy5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXJlbmFfa2Z1bmNfaml0LnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2NhcF9oZWxwZXJzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9hbGlnbi5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9hbmQuc2tlbC5oXCYjMzQ7XG5AQCAtMTYxLDYgJiM0MzsxNjMsMTUgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3RzX2F1eChjb25zdCBjaGFyICpza2VsX25hbWUsXG4gXG4gI2RlZmluZSBSVU4oc2tlbCkgcnVuX3Rlc3RzX2F1eCgjc2tlbCwgc2tlbCMjX19lbGZfYnl0ZXMsIE5VTEwpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSB0ZXN0IGtmdW5jcyBsaXZlIGluIGJwZl90ZXN0bW9kLiBSZXNvbHZpbmcga2Z1bmNzIGFnYWluc3QgbW9kdWxlXG4mIzQzOyAqIEJURnMgbmVlZHMgQ0FQX1NZU19BRE1JTiwgc28gcnVuIHdpdGggZnVsbCBjYXBhYmlsaXRpZXMgaW5zdGVhZCBvZlxuJiM0MzsgKiB0aHJvdWdoIHRoZSB2ZXJpZmllciB0ZXN0cyYjMzk7IGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRlc3RfYXJlbmFfa2Z1bmModm9pZCkgICAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFMoYXJlbmFfa2Z1bmMpOyB9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfYXJlbmFfa2Z1bmNfaml0KHZvaWQpICAgICAgICAgICAgICAgeyBSVU5fVEVTVFMoYXJlbmFfa2Z1bmNfaml0KTsgfVxuJiM0MztcbiB2b2lkIHRlc3RfdmVyaWZpZXJfYWxpZ24odm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYWxpZ24pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2FuZCh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2FuZCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYXJlbmEodm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYXJlbmEpOyB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2YzM4MmNlODFhZjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5AQCAtMCwwICYjNDM7MSwyNjAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfZXhwZXJpbWVudGFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi9cbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuJiM0Mzt9IGFyZW5hIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPY2N1cGllcyBwYWdlIDAgc28gbm8gYWxsb2NhdGlvbiBsYW5kcyBhdCBhcmVuYSBvZmZzZXQgMCwgd2hpY2ggdGhlXG4mIzQzOyAqIG51bGxhYmxlIHRlc3RzIGJlbG93IG11c3QgYmUgYWJsZSB0byB0ZWxsIGFwYXJ0IGZyb20gTlVMTC5cbiYjNDM7ICovXG4mIzQzO3U2NCBfX2FyZW5hIGFyZW5hX3BhZDtcbiYjNDM7XG4mIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xuJiM0Mzt2b2xhdGlsZSB1NjQgc3Rhc2g7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4mIzQzO1x0dTY0IF9fYXJlbmEgKnZhbDtcbiYjNDM7XHR1NjQgcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0LyogUFRSX1RPX0FSRU5BIGFyZ3VtZW50ICovXG4mIzQzO1x0KnZhbCA9IDQxO1xuJiM0MztcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0LyogdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2NhbGFyICovXG4mIzQzO1x0c3Rhc2ggPSAodTMyKSh1NjQpdmFsO1xuJiM0MztcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcdGlmIChyZXQgIT0gNDIgfHwgKnZhbCAhPSA0MylcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgZnVsbCB1c2VyIGFkZHJlc3MgYXMgYSBzY2FsYXIgKi9cbiYjNDM7XHRzdGFzaCA9ICh1NjQpdmFsO1xuJiM0MztcdGJwZl9hZGRyX3NwYWNlX2Nhc3Qoc3Rhc2gsIDEsIDApO1xuJiM0MztcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcdGlmIChyZXQgIT0gNDMgfHwgKnZhbCAhPSA0NClcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQaW4gdGhlIHJlYmFzZSBzZW1hbnRpY3MgdXNpbmcgdGhlIGNhcHR1cmUga2Z1bmNzLCB3aGljaCByZXR1cm4gdGhlIHJhd1xuJiM0MzsgKiBhcmd1bWVudCB2YWx1ZTogX19hcmVuYSByZWJhc2VzIHVuY29uZGl0aW9uYWxseSwgc28gemVybyBsb3cgMzIgYml0c1xuJiM0MzsgKiBhcnJpdmUgYXMgdGhlIGFyZW5hIGtlcm5lbCBiYXNlLCB3aGlsZSBfX2FyZW5hX19udWxsYWJsZSB0dXJucyB0aGVtIGludG9cbiYjNDM7ICogTlVMTC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4mIzQzO1x0dTY0IF9fYXJlbmEgKnZhbDtcbiYjNDM7XHR1NjQgYmFzZSwgb2ZmO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YmFzZSA9IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChOVUxMKTtcbiYjNDM7XHRpZiAoIWJhc2UpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgY29udHJpYnV0ZSAqL1xuJiM0MztcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSBiYXNlKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdG9mZiA9ICh1MzIpKHU2NCl2YWw7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICYjNDM7IG9mZilcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KE5VTEwpICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gNTtcbiYjNDM7XG4mIzQzO1x0c3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopc3Rhc2gpICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gNjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICYjNDM7IG9mZilcbiYjNDM7XHRcdHJldHVybiA3O1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ19udWxsYWJsZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4mIzQzO1x0dTY0IF9fYXJlbmEgKnZhbDtcbiYjNDM7XHR1NjQgcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0KnZhbCA9IDQxO1xuJiM0MztcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChOVUxMKSAhPSAweGRlYWRiZWVmKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHR2YWxbMF0gPSAxO1xuJiM0MztcdHZhbFsxXSA9IDI7XG4mIzQzO1x0dmFsWzJdID0gNDtcbiYjNDM7XHR2YWxbM10gPSA4O1xuJiM0MztcdHZhbFs0XSA9IDE2O1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbiYjNDM7XHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSxcbiYjNDM7XHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFs0XSkgIT0gMzEpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbiYjNDM7XHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSwgTlVMTCkgIT0gMTUpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHR2YWxbMF0gPSA3O1xuJiM0MztcdHZhbFsxXSA9IDU7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCBOVUxMKSAhPSA3KVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCAodTY0ICopXHUwMDI2dmFsWzFdKSAhPSAxMilcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqL1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4mIzQzO1x0dTY0IF9fYXJlbmEgKnZhbDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdHN0YXNoID0gKHU2NCl2YWwgJiM0MzsgUEFHRV9TSVpFO1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7YXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCYjMzQ7KVxuJiM0MztpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopMSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclwmIzM0OylcbiYjNDM7aW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBidWYgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiB1c2UgdGhlIGFyZW5hIHNvIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgYXJlbmEgcHJlc2VuY2UgY2hlY2sgKi9cbiYjNDM7XHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0YnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KFx1MDAyNmJ1Zik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XCYjMzQ7KVxuJiM0MztpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoMSwgMiwgMywgNCwgNSwgKHU2NCAqKTEpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7YXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzliOTE4NjYyNjE2MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMCwwICYjNDM7MSw5OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhlIEpJVC1lbWl0dGVkIHJlYmFzZSBzZXF1ZW5jZXMgZm9yIF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlXG4mIzQzOyAqIGtmdW5jIGFyZ3VtZW50cy4gVGhlIGNhcHR1cmUga2Z1bmNzIHRha2UgdGhlIGFyZ3VtZW50IHdpdGhvdXRcbiYjNDM7ICogZGVyZWZlcmVuY2luZyBpdCwgc28gdGhlc2UgdGVzdHMgcGluIG9ubHkgdGhlIGVtaXR0ZWQgY29kZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xuJiM0Mzt2b2xhdGlsZSB1NjQgc3Rhc2g7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkaSwgJWVkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y2FsbHFcdHt7Lip9fVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVlZGksICVlZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JWVkaSwgJWVkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGplXHRMMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7TDA6XHRjYWxscVx0e3suKn19XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3Rhc2ggPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWRpLCAlZWRpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVlc2ksICVlc2lcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcnNpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkeCwgJWVkeFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZHhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWN4LCAlZWN4XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJjeFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVyOGQsICVyOGRcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JXI4ZCwgJXI4ZFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGplXHRMMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyOFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtMMDpcdGNhbGxxXHR7ey4qfX1cJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0dmFsWzBdID0gMTtcbiYjNDM7XHR2YWxbMV0gPSAyO1xuJiM0MztcdHZhbFsyXSA9IDQ7XG4mIzQzO1x0dmFsWzNdID0gODtcbiYjNDM7XHR2YWxbNF0gPSAxNjtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbiYjNDM7XHRcdFx0XHQgICAodTY0ICopXHUwMDI2dmFsWzJdLCAodTY0ICopXHUwMDI2dmFsWzNdLFxuJiM0MztcdFx0XHRcdCAgICh1NjQgKilcdTAwMjZ2YWxbNF0pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QgKi9cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iYTA0YzczZDhkOTY3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5AQCAtMCwwICYjNDM7MSwxMTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWxzLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovXG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7LyogYWxzbyBhc3NvY2lhdGVzIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgYXJlbmEgKi9cbiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XG4mIzQzOy8qIHJhdyB2YWx1ZSBvZiB0aGUgbGFzdCBfX2FyZW5hIGN0eCBhcmd1bWVudCwgY2FwdHVyZWQgYnkgdGVzdF9hcmVuYV9jYiAqL1xuJiM0Mzt1NjQgX19hcmVuYSBjYl9wdHJfdmFsO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYVwmIzM0OylcbiYjNDM7aW50IHRlc3RfYXJlbmFfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xuJiM0MztcbiYjNDM7XHRhcmVuYV90b3VjaCYjNDM7JiM0Mzs7XG4mIzQzO1x0Y2JfcHRyX3ZhbCA9IGN0eFswXTtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9udWxsYWJsZV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMF07XG4mIzQzO1xuJiM0MztcdGFyZW5hX3RvdWNoJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAoIXB0cilcbiYjNDM7XHRcdHJldHVybiAweGJlZTtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX3N0YWNrXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07XG4mIzQzO1xuJiM0MztcdGFyZW5hX3RvdWNoJiM0MzsmIzQzOztcbiYjNDM7XHQvKiBwaW4gdGhlIHNsb3QgbGF5b3V0OiB0aGUgbGVhZGluZyBhcmdzIGZpbGwgY3R4WzBdLi5jdHhbN10gKi9cbiYjNDM7XHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXG4mIzQzO1x0XHRyZXR1cm4gMHhiYWQ7XG4mIzQzO1x0KnB0ciAmIzQzOz0gMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmtcJiMzNDspXG4mIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7XG4mIzQzO1x0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsXG4mIzQzO307XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IHRyaWdnZXIodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSA0MTtcbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDIpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgY2FsbGJhY2sgbXVzdCBoYXZlIHNlZW4gZXhhY3RseSAodTMyKShrYWRkciAtIGtlcm5fdm1fc3RhcnQpLFxuJiM0MztcdCAqIHdoaWNoIGlzIHRoZSBhcmVuYSBvZmZzZXQgb2YgdmFsIHdpdGggdGhlIHVwcGVyIDMyIGJpdHMgY2xlYXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNiX3B0cl92YWwgIT0gKHUzMikodTY0KXZhbClcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDU7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDMpXG4mIzQzO1x0XHRyZXR1cm4gNjtcbiYjNDM7XG4mIzQzO1x0LyogTlVMTCBzdXJ2aXZlcyB0aGUgbnVsbGFibGUga2Z1bmMgYW5kIHRoZSB0cmFtcG9saW5lIGFzIE5VTEwgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShOVUxMKTtcbiYjNDM7XHRpZiAocmV0ICE9IDB4YmVlKVxuJiM0MztcdFx0cmV0dXJuIDc7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaygodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDg7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDQpXG4mIzQzO1x0XHRyZXR1cm4gOTtcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjFjMGVjNzI3ZDYzNzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwmIzM0O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzOy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9ub19hcmVuYSh1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7LnN0cnVjdF9vcHMubGlua1wmIzM0OylcbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xuJiM0MztcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX25vX2FyZW5hLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBlYjBmOWI1ZTE4ZDg1Li4yOTYzYzI5Zjk2YmE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTIzNyw2ICYjNDM7MjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpXG4ge1xuIH1cbiBcbiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHR1NjQgb2xkO1xuJiM0MztcbiYjNDM7XHRvbGQgPSAqdmFsX19hcmVuYTtcbiYjNDM7XHQqdmFsX19hcmVuYSA9IG9sZCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiBvbGQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QodTY0ICp2YWxfX2FyZW5hX19udWxsYWJsZSlcbiYjNDM7e1xuJiM0MztcdHU2NCBvbGQ7XG4mIzQzO1xuJiM0MztcdGlmICghdmFsX19hcmVuYV9fbnVsbGFibGUpXG4mIzQzO1x0XHRyZXR1cm4gMHhkZWFkYmVlZjtcbiYjNDM7XG4mIzQzO1x0b2xkID0gKnZhbF9fYXJlbmFfX251bGxhYmxlO1xuJiM0MztcdCp2YWxfX2FyZW5hX19udWxsYWJsZSA9IG9sZCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiBvbGQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1NjQpdmFsX19hcmVuYTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1NjQpdmFsX19hcmVuYV9fbnVsbGFibGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hLFxuJiM0MztcdFx0XHRcdFx0ICAgdTY0ICpjX19hcmVuYSwgdTY0ICpkX19hcmVuYSxcbiYjNDM7XHRcdFx0XHRcdCAgIHU2NCAqZV9fYXJlbmFfX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICphX19hcmVuYSAmIzQzOyAqYl9fYXJlbmEgJiM0MzsgKmNfX2FyZW5hICYjNDM7ICpkX19hcmVuYSAmIzQzO1xuJiM0MztcdCAgICAgICAoZV9fYXJlbmFfX251bGxhYmxlID8gKmVfX2FyZW5hX19udWxsYWJsZSA6IDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSxcbiYjNDM7XHRcdFx0XHRcdFx0dTY0ICpmX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhICYjNDM7IGIgJiM0MzsgYyAmIzQzOyBkICYjNDM7IGUgJiM0MzsgKmZfX2FyZW5hO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKmFfX2FyZW5hICYjNDM7IChiX19hcmVuYV9fbnVsbGFibGUgPyAqYl9fYXJlbmFfX251bGxhYmxlIDogMCk7XG4mIzQzO31cbiYjNDM7XG4gX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfZHlucHRyX3Rlc3Qoc3RydWN0IGJwZl9keW5wdHIgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyX19udWxsYWJsZSlcbiB7XG5AQCAtMzQ3LDkgJiM0MzszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XG4gXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxuIFx0LnRlc3RfMiA9IGJwZl90ZXN0bW9kX3Rlc3RfNCxcbiYjNDM7XHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4mIzQzO1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxuJiM0MztcdC50ZXN0X2FyZW5hX3N0YWNrID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcbkBAIC0zNjgsNiAmIzQzOzQzOCwyMSBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIodm9pZClcbiBcdHN0X29wczMtXHUwMDNldGVzdF8yKCk7XG4gfVxuIFxuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYShwdHJfX2FyZW5hKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX251bGxhYmxlKHB0cl9fYXJlbmFfX251bGxhYmxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtNzU1LDYgJiM0Mzs4NDAsMTMgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90ZXN0bW9kX3NlcV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX3ZhbHVlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY29tbW9uX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19keW5wdHJfdGVzdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX25lc3RlZF9hY3F1aXJlX25vbnplcm9fb2Zmc2V0X3Rlc3QsIEtGX0FDUVVJUkUpXG5AQCAtNzcwLDYgJiM0Mzs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDYsNiAmIzQzOzEwNiwxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdGludCAoKnRlc3RfMikodm9pZCk7XG4mIzQzO1x0LyogVXNlZCB0byB0ZXN0IGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzLiAqL1xuJiM0MztcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcbiYjNDM7XHRpbnQgKCp0ZXN0X2FyZW5hX251bGxhYmxlKSh1NjQgKnB0cik7XG4mIzQzO1x0LyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi9cbiYjNDM7XHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuJiM0MztcdFx0XHRcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xuIH07XG4gXG4gc3RydWN0IHN0X29wc19hcmdzIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuaW5kZXggYzM2YmI5MTFkZWZhNy4uZGM3YzQwYmQxMjk5MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbkBAIC05OCw2ICYjNDM7OTgsMTYgQEAgdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlbGVhc2Uoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTtcbiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVmKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XG4gXG4gdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEodm9pZCAqbWVtLCBpbnQgbGVuKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hLFxuJiM0MztcdFx0XHRcdCBfX3U2NCAqY19fYXJlbmEsIF9fdTY0ICpkX19hcmVuYSxcbiYjNDM7XHRcdFx0XHQgX191NjQgKmVfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCwgX191NjQgZSxcbiYjNDM7XHRcdFx0XHQgICAgIF9fdTY0ICpmX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiBpbnQgKmJwZl9rZnVuY19jYWxsX3Rlc3RfZ2V0X3Jkd3JfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmR3cl9idWZfc2l6ZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9hY3FfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xuQEAgLTExMSw2ICYjNDM7MTIxLDkgQEAgdTMyIGJwZl9rZnVuY19jYWxsX3Rlc3Rfc3RhdGljX3VudXNlZF9hcmcodTMyIGFyZywgdTMyIHVudXNlZCkgX19rc3ltO1xuICNlbmRpZlxuIFxuIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4mIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxuIFx0XHRcdFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wX2FyZW5hX2Jhc2UmIzM0OywKICAgICYjMzQ7YnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdCYjMzQ7LAogICAgJiMzNDtidGZfZGlzdGlsbF9mdW5jX3Byb3RvJiMzNDssCiAgICAmIzM0O2J0Zl9jdHhfYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jaGVja19hdHRhY2hfdGFyZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgcGFzc2luZyBhcmVuYSBwb2ludGVycyB0byBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrcy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWNvZ25pemUgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9fbnVsbGFibGVgIGFubm90YXRpb25zLCBhbmQgdXBkYXRlcyB0aGUgeDg2IEJQRiBKSVQgYW5kIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiB0byBwcm9wZXJseSByZWJhc2UgdGhlc2UgcG9pbnRlcnMgdG8gdGhlIGtlcm5lbCYjMzk7cyBhcmVuYSBiYXNlIGFkZHJlc3MuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocyBpbiB0aGUgdmVyaWZpZXIsIEJURiBwYXJzaW5nLCBhbmQgSklUIGNvbXBpbGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2MTUyM2ZlNDcxNGY5Y2ZhNDJkYzdiODBhMDY4NzVhNmI5NjRmOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjI2OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKaW5kZXggY2JkZTg2ZDA4MmNjZS4uYzA0NDY1OWI3Njg5MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CkBAIC0yNzgsNiAmIzQzOzI3OCw0MyBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjoKICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgfQogCiYjNDM7Mi4zLjggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgQW5ub3RhdGlvbnMKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO0JvdGggYW5ub3RhdGlvbnMgaW5kaWNhdGUgdGhhdCB0aGUgcG9pbnRlciBhcmd1bWVudCBwb2ludHMgaW50byB0aGUKJiM0MztjYWxsaW5nIHByb2dyYW0mIzM5O3MgYXJlbmEuIFRoZSBKSVQgcmViYXNlcyB0aGUgdmFsdWUgYXQgdGhlIGNhbGwgc2l0ZSBzbwomIzQzO3RoZSBrZnVuYyByZWNlaXZlcyBhIGRpcmVjdGx5IGRlcmVmZXJlbmNlYWJsZSBrZXJuZWwgYWRkcmVzcywgc3ViamVjdCB0bwomIzQzO3RoZSBhY2Nlc3MgcnVsZXMgZGVzY3JpYmVkIGluIDpyZWY6YEJQRl9rZnVuY19hcmVuYV9hY2Nlc3NgIChhdCBtb3N0CiYjNDM7YGBHVUFSRF9TWiAvIDJgYCwgMzIgS2lCLCBwYXN0IHRoZSBwb2ludGVyIGluIGEgc2luZ2xlIHVuY2hlY2tlZCBhY2Nlc3MpLgomIzQzOwomIzQzO1dpdGggYGBfX2FyZW5hYGAgdGhlIHJlYmFzZSBpcyB1bmNvbmRpdGlvbmFsIGFuZCB0aGUgYXJndW1lbnQgaXMgbmV2ZXIKJiM0MztOVUxMOiBhIHZhbHVlIHdob3NlIGxvd2VyIDMyIGJpdHMgYXJlIHplcm8gYXJyaXZlcyBhcyB0aGUgYXJlbmEgYmFzZQomIzQzO2FkZHJlc3MgKGFyZW5hIG9mZnNldCAwKS4gVGhlIGtmdW5jIG11c3Qgbm90IGNoZWNrIHRoZSBhcmd1bWVudCBmb3IgTlVMTC4KJiM0MztXaXRoIGBgX19hcmVuYV9fbnVsbGFibGVgYCBzdWNoIGEgdmFsdWUgYXJyaXZlcyBhcyBOVUxMIGluc3RlYWQgYW5kIHRoZQomIzQzO2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuCiYjNDM7CiYjNDM7QW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiYjNDM7CiYjNDM7ICAgICAgICBfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2Nlc3NfaXRlbShzdHJ1Y3QgaXRlbSAqaXRlbV9fYXJlbmEpCiYjNDM7ICAgICAgICB7CiYjNDM7ICAgICAgICAuLi4KJiM0MzsgICAgICAgIH0KJiM0MzsKJiM0MztDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoCiYjNDM7YXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZQomIzQzO3Byb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzCiYjNDM7bm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuCiYjNDM7CiYjNDM7VGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YgomIzQzO2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZQomIzQzO2tlcm5lbCBjYWxsZXIgcGFzc2VzIHRoZSBrZXJuZWwgYXJlbmEgYWRkcmVzcyBhbmQgdGhlIHRyYW1wb2xpbmUgY29udmVydHMKJiM0MztpdCB3aGlsZSBzYXZpbmcgdGhlIGFyZ3VtZW50cywgc28gdGhlIGNhbGxiYWNrIHJlY2VpdmVzIGFuIGFyZW5hIHBvaW50ZXIKJiM0MztpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3QKJiM0MztwYXNzIE5VTEwuIFdpdGggYGBfX2FyZW5hX19udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuCiYjNDM7SG93ZXZlciwgdGhlcmUgaXMgbm8gb2JsaWdhdGlvbiB0byBwcm92ZSB0byB0aGUgdmVyaWZpZXIgdGhhdCBzdWNoIGEgcG9pbnRlciBpcwomIzQzO25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpbgomIzQzO2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS4KJiM0MzsKIC4uIF9CUEZfa2Z1bmNfbm9kZWY6CiAKIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb24KQEAgLTUxNSw2ICYjNDM7NTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0CiBQVFJfVE9fQlRGX0lEIHR5cGUgbWF0Y2hpbmcgaWYgdHdvIHR5cGVzIGhhdmUgdGhlIGV4YWN0IHNhbWUgbmFtZSwgd2l0aCBvbmUKIGJlaW5nIHN1ZmZpeGVkIHdpdGggYGBfX19pbml0YGAuCiAKJiM0MzsuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczoKJiM0MzsKIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggMDFlN2NlNTY5YzFlZC4uNWM1YzMyYWJhMjM5NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTY3OCw2ICYjNDM7MTY3OCw1MCBAQCBzdGF0aWMgaW50IGVtaXRfc3BlY3RyZV9iaGJfYmFycmllcih1OCAqKnBwcm9nLCB1OCAqaXAsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHJOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXJOLCB3aXRoIFIxMiBob2xkaW5nIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUKJiM0MzsgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMKJiM0MzsgKiBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbWl0dGVkIGJ5dGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsJdTggKnN0YXJ0ID0gcHJvZzsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGJwZl9wcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4IGZsYWdzID0gZm0tJmd0O2FyZ19mbGFnc1tpXTsKJiM0MzsJCXUzMiByZWcgPSBCUEZfUkVHXzEgJiM0MzsgaTsKJiM0MzsKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIWJwZl9wcm9nLSZndDthdXgtJmd0O2FyZW5hKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgZmFsc2UsIHJlZywgcmVnKTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRykgewomIzQzOwkJCS8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovCiYjNDM7CQkJbWF5YmVfZW1pdF9tb2QoJmFtcDtwcm9nLCByZWcsIHJlZywgZmFsc2UpOwomIzQzOwkJCUVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7CiYjNDM7CQkJRU1JVDIoWDg2X0pFLCAzKTsKJiM0MzsJCX0KJiM0MzsJCS8qIGFkZCByTiwgcjEyICovCiYjNDM7CQltYXliZV9lbWl0X21vZCgmYW1wO3Byb2csIHJlZywgWDg2X1JFR19SMTIsIHRydWUpOwomIzQzOwkJRU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7CXJldHVybiBwcm9nIC0gc3RhcnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLAogCQkgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKQogewpAQCAtMjU4Myw2ICYjNDM7MjYyNywxMiBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCX0KIAkJCWlmICghaW1tMzIpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJaWYgKHNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7CiYjNDM7CQkJCWVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgJmFtcDtwcm9nKTsKJiM0MzsJCQkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCQlpcCAmIzQzOz0gZXJyOwomIzQzOwkJCX0KIAkJCWlmIChwcml2X2ZyYW1lX3B0cikgewogCQkJCXB1c2hfcjkoJmFtcDtwcm9nKTsKIAkJCQlpcCAmIzQzOz0gMjsKQEAgLTI5OTMsMTEgJiM0MzszMDQzLDM5IEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pCiAJcmV0dXJuIG5yX3VzZWRfcmVnczsKIH0KIAomIzQzOy8qCiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheQomIzQzOyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZwomIzQzOyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0CiYjNDM7ICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZAomIzQzOyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pCiYjNDM7ewomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsKJiM0MzsJaWYgKG51bGxhYmxlKSB7CiYjNDM7CQlpZiAoc3JjX3JlZyAhPSBCUEZfUkVHXzApCiYjNDM7CQkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgdHJ1ZSwgQlBGX1JFR18wLCBzcmNfcmVnKTsKJiM0MzsJCS8qIHRlc3QgcmF4LCByYXg7IGp6IG92ZXIgdGhlIDUtYnl0ZSBzdWIgKi8KJiM0MzsJCUVNSVQzKDB4NDgsIDB4ODUsIDB4QzApOwomIzQzOwkJRU1JVDIoWDg2X0pFLCA1KTsKJiM0MzsJfSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkgewomIzQzOwkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7CiYjNDM7CX0KJiM0MzsJLyogc3ViIGVheCwgYmFzZV9sbyAqLwomIzQzOwlFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTsKJiM0MzsKJiM0MzsJKnBwcm9nID0gcHJvZzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csCi0JCSAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzKQomIzQzOwkJICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MsCiYjNDM7CQkgICAgICB1NjQgYXJlbmFfYmFzZSkKIHsKIAlpbnQgYXJnX3JlZ3MsIGZpcnN0X29mZiA9IDAsIG5yX3JlZ3MgPSAwLCBucl9zdGFja19zbG90cyA9IDA7CiAJYm9vbCB1c2Vfam1wID0gYnBmX3RyYW1wb2xpbmVfdXNlX2ptcChmbGFncyk7CiYjNDM7CWludCBzdGFja19hcmdzX29mZiA9ICh1c2Vfam1wIHx8IChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9JTkRJUkVDVCkpID8gMTYgOiAyNDsKIAlpbnQgaSwgajsKIAogCS8qIFN0b3JlIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byBzdGFjay4KQEAgLTMwMDYsNiAmIzQzOzMwODQsOSBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csCiAJICogbW92IFFXT1JEIFBUUiBbcmJwLTB4OF0scnNpCiAJICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IG1pbl90KGludCwgbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX0FSR1MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYm9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlICZhbXA7JmFtcDsgKG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX0FSRU5BX0FSRyk7CiYjNDM7CQlib29sIG51bGxhYmxlID0gbS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHOwomIzQzOwogCQlhcmdfcmVncyA9IChtLSZndDthcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDg7CiAKIAkJLyogQWNjb3JkaW5nIHRvIHRoZSByZXNlYXJjaCBvZiBZb25naG9uZywgc3RydWN0IG1lbWJlcnMKQEAgLTMwMjksMTYgJiM0MzszMTEwLDE5IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZywKIAkJCS8qIGNvcHkgZnVuY3Rpb24gYXJndW1lbnRzIGZyb20gb3JpZ2luIHN0YWNrIGZyYW1lCiAJCQkgKiBpbnRvIGN1cnJlbnQgc3RhY2sgZnJhbWUuCiAJCQkgKgotCQkJICogVGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGFyZ3VtZW50cyBvbi1zdGFjawotCQkJICogaXM6Ci0JCQkgKiAgIHJicCAmIzQzOyA4KHB1c2ggcmJwKSAmIzQzOwotCQkJICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSAmIzQzOwotCQkJICogICA4KHJldHVybiBhZGRyIG9mIHRoZSBjYWxsZXIpCi0JCQkgKiB3aGljaCBtZWFuczogcmJwICYjNDM7IDI0CiYjNDM7CQkJICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwCiYjNDM7CQkJICogYW5kIHRoZSByZXR1cm4gYWRkcmVzc2VzOiB0d28gcmV0dXJuIGFkZHJlc3NlcwomIzQzOwkJCSAqIChvcmlnaW4gY2FsbCBhbmQgY2FsbGVyKSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzCiYjNDM7CQkJICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICYjNDM7IDI0LCBhbmQKJiM0MzsJCQkgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3IKJiM0MzsJCQkgKiBjYWxsZWQgaW5kaXJlY3RseSwgc28gcmJwICYjNDM7IDE2LgogCQkJICovCiAJCQlmb3IgKGogPSAwOyBqICZsdDsgYXJnX3JlZ3M7IGomIzQzOyYjNDM7KSB7CiAJCQkJZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsCi0JCQkJCSBucl9zdGFja19zbG90cyAqIDggJiM0MzsgMTYgJiM0MzsgKCF1c2Vfam1wKSAqIDgpOwomIzQzOwkJCQkJIG5yX3N0YWNrX3Nsb3RzICogOCAmIzQzOyBzdGFja19hcmdzX29mZik7CiYjNDM7CQkJCWlmIChhcmVuYV9hcmcpCiYjNDM7CQkJCQllbWl0X2FyZW5hX2FyZ19jb252KHByb2csIEJQRl9SRUdfMCwgbnVsbGFibGUsCiYjNDM7CQkJCQkJCSAgICAodTMyKWFyZW5hX2Jhc2UpOwogCQkJCWVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLAogCQkJCQkgLXN0YWNrX3NpemUpOwogCkBAIC0zMDU5LDkgJiM0MzszMTQzLDEzIEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZywKIAogCQkJLyogY29weSB0aGUgYXJndW1lbnRzIGZyb20gcmVncyBpbnRvIHN0YWNrICovCiAJCQlmb3IgKGogPSAwOyBqICZsdDsgYXJnX3JlZ3M7IGomIzQzOyYjNDM7KSB7Ci0JCQkJZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLAotCQkJCQkgbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSAmIzQzOyBucl9yZWdzLAotCQkJCQkgLXN0YWNrX3NpemUpOwomIzQzOwkJCQl1MzIgc3JjID0gbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSAmIzQzOyBucl9yZWdzOwomIzQzOwomIzQzOwkJCQlpZiAoYXJlbmFfYXJnKSB7CiYjNDM7CQkJCQllbWl0X2FyZW5hX2FyZ19jb252KHByb2csIHNyYywgbnVsbGFibGUsICh1MzIpYXJlbmFfYmFzZSk7CiYjNDM7CQkJCQlzcmMgPSBCUEZfUkVHXzA7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBzcmMsIC1zdGFja19zaXplKTsKIAkJCQlzdGFja19zaXplIC09IDg7CiAJCQkJbnJfcmVncyYjNDM7JiM0Mzs7CiAJCQl9CkBAIC0zMzU3LDYgJiM0MzszNDQ1LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAl2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7CiAJaW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7CiAJdTggKipicmFuY2hlcyA9IE5VTEw7CiYjNDM7CXU2NCBhcmVuYV9iYXNlOwogCXU2NCBmdW5jX21ldGE7CiAJdTggKnByb2c7CiAJYm9vbCBzYXZlX3JldDsKQEAgLTMzNjksNiAmIzQzOzM0NTgsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbQogCVdBUk5fT05fT05DRSgoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpICZhbXA7JmFtcDsKIAkJICAgICAoZmxhZ3MgJmFtcDsgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpOwogCiYjNDM7CWFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbS0mZ3Q7bnJfYXJnczsgaSYjNDM7JiM0MzspCiAJCW5yX3JlZ3MgJiM0Mzs9IChtLSZndDthcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDggLSAxOwogCkBAIC0zNTAzLDcgJiM0MzszNTk0LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAkJZW1pdF9zdG9yZV9zdGFja19pbW02NCgmYW1wO3Byb2csIEJQRl9SRUdfMCwgLWlwX29mZiwgKGxvbmcpZnVuY19hZGRyKTsKIAl9CiAKLQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCByZWdzX29mZiwgZmFsc2UsIGZsYWdzKTsKJiM0MzsJc2F2ZV9hcmdzKG0sICZhbXA7cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncywgYXJlbmFfYmFzZSk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7CiAJCS8qIGFyZzE6IG1vdiByZGksIGltICovCkBAIC0zNTQ1LDcgJiM0MzszNjM2LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAogCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHsKIAkJcmVzdG9yZV9yZWdzKG0sICZhbXA7cHJvZywgcmVnc19vZmYpOwotCQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncyk7CiYjNDM7CQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncywgMCk7CiAKIAkJaWYgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFgpIHsKIAkJCS8qIEJlZm9yZSBjYWxsaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgbG9hZCB0aGUKQEAgLTQwNDYsNiAmIzQzOzQxMzcsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCiB7CiAJaWYgKHRleHRfcG9rZV9jb3B5KGRzdCwgc3JjLCBsZW4pID09IE5VTEwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3M2JhY2ZjNjQ0NGRmLi42OGZmNjY3ODdhZTFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTEyMTAsNiAmIzQzOzEyMTAsMTIgQEAgc3RydWN0IGJwZl9wcm9nX29mZmxvYWQgewogLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi8KICNkZWZpbmUgQlRGX0ZNT0RFTF9TSUdORURfQVJHCQlCSVQoMSkKIAomIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBhbiBhcmVuYSBwb2ludGVyLiAqLwomIzQzOyNkZWZpbmUgQlRGX0ZNT0RFTF9BUkVOQV9BUkcJCUJJVCgyKQomIzQzOwomIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBudWxsYWJsZS4gKi8KJiM0MzsjZGVmaW5lIEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHCQlCSVQoMykKJiM0MzsKIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7CiAJdTggcmV0X3NpemU7CiAJdTggcmV0X2ZsYWdzOwpAQCAtMTI4Myw2ICYjNDM7MTI4OSwxNSBAQCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzIHsKIAlpbnQgbnJfbm9kZXM7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgYXJlbmEgYmFzZSBhZ2FpbnN0IHdoaWNoIGEgc3RydWN0X29wcyB0cmFtcG9saW5lIGNvbnZlcnRzIHRoZQomIzQzOyAqIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRyB3aGlsZSBzYXZpbmcgdGhlbSBpbnRvIHRoZSBCUEYKJiM0MzsgKiBjdHgsIGN0eFthcmddID0gKHUzMikoa2FkZHIgLSBrZXJuX3ZtX3N0YXJ0KS4gWmVybyB3aGVuIHRoZSB0cmFtcG9saW5lCiYjNDM7ICogY29udmVydHMgbm90aGluZy4KJiM0MzsgKi8KJiM0Mzt1NjQgYnBmX3RyYW1wX2FyZW5hX2Jhc2UoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLAomIzQzOwkJCSBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHUzMiBmbGFncyk7CiYjNDM7CiBzdHJ1Y3QgYnBmX3RyYW1wX3J1bl9jdHg7CiAKIC8qIERpZmZlcmVudCB1c2UgY2FzZXMgZm9yIEJQRiB0cmFtcG9saW5lOgpAQCAtMjM1Miw2ICYjNDM7MjM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9mc2Vzc2lvbl9jb29raWVfY250KHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKm5vZGVzKQogCiBpbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sIHUzMiBjbnQpOwomIzQzO2Jvb2wgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0NHUk9VUF9CUEYpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfQlBGX0xTTSkKIGludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCmluZGV4IGEyYTQwY2FjYTBhMGUuLmE5NTU1ZDE3ZmQ4ZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaApAQCAtMTE3Nyw4ICYjNDM7MTE3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV91bnBhY2tfa2V5KHU2NCBrZXksIHUzMiAqb2JqX2lkLCB1MzIgKmJ0Zl9pZCkKIAkJKmJ0Zl9pZCA9IGtleSAmYW1wOyAweDdGRkZGRkZGOwogfQogCi1pbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7CiYjNDM7aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7CiBpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCSAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaAppbmRleCAzMmQ1Mjk3YzU1N2U1Li4zNmNlMzQwM2ZlNTk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTExODMsNiAmIzQzOzExODMsNyBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKTsKIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpOwomIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpOwogYm9vbCBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpOwogYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMKaW5kZXggNGU3YTQ4YzAyYmU1Yy4uY2VkN2IxODI0NmE5NiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYwpAQCAtMTQ3LDYgJiM0MzsxNDcsOCBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpCiAKICNkZWZpbmUgTUFZQkVfTlVMTF9TVUZGSVggJiMzNDtfX251bGxhYmxlJiMzNDsKICNkZWZpbmUgUkVGQ09VTlRFRF9TVUZGSVggJiMzNDtfX3JlZiYjMzQ7CiYjNDM7I2RlZmluZSBBUkVOQV9TVUZGSVggJiMzNDtfX2FyZW5hJiMzNDsKJiM0MzsjZGVmaW5lIEFSRU5BX01BWUJFX05VTExfU1VGRklYICYjMzQ7X19hcmVuYV9fbnVsbGFibGUmIzM0OwogCiAvKiBQcmVwYXJlIGFyZ3VtZW50IGluZm8gZm9yIGV2ZXJ5IG51bGxhYmxlIGFyZ3VtZW50IG9mIGEgbWVtYmVyIG9mIGEKICAqIHN0cnVjdF9vcHMgdHlwZS4KQEAgLTE1OSw3ICYjNDM7MTYxLDcgQEAgdm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKQogICogdG8gcHJvdmlkZSBhbiBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4LCB3aGljaCBpbiB0dXJuIHByb3ZpZGVzCiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZQogICogQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbSBhc3NpZ25lZCB0byB0aGUgbWVtYmVyLiBIZXJlLCB3ZSBvbmx5IGNhcmUgYWJvdXQKLSAqIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIF9fbnVsbGFibGUuCiYjNDM7ICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZSwgX19yZWYgb3IgX19hcmVuYS4KICAqCiAgKiBUaGUgYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCBpcyBldmVudHVhbGx5IGFzc2lnbmVkIHRvCiAgKiBwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mbyBvZiBCUEYgc3RydWN0X29wcyBwcm9ncmFtcyBhbmQgcGFzc2VkIHRvIHRoZQpAQCAtMTcyLDEwICYjNDM7MTc0LDEyIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsCiAJCQkgICAgY29uc3QgY2hhciAqc3Rfb3BzX25hbWUsCiAJCQkgICAgY29uc3QgY2hhciAqbWVtYmVyX25hbWUsCiAJCQkgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jX3Byb3RvLCB2b2lkICpzdHViX2Z1bmNfYWRkciwKJiM0MzsJCQkgICAgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptb2RlbCwKIAkJCSAgICBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvKQogewogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3R1Yl9mdW5jX3Byb3RvLCAqcG9pbnRlZF90eXBlOwotCWJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlOwomIzQzOwlib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZSwgaXNfYXJlbmEgPSBmYWxzZTsKJiM0MzsJYm9vbCBpc19hcmVuYV9udWxsYWJsZSA9IGZhbHNlOwogCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnN0dWJfYXJncywgKmFyZ3M7CiAJc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgKmluZm9fYnVmOwogCXUzMiBuYXJncywgYXJnX25vLCBpbmZvX2NudCA9IDA7CkBAIC0yMjUsMjcgJiM0MzsyMjksMzUgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZiwKIAkvKiBQcmVwYXJlIGluZm8gZm9yIGV2ZXJ5IG51bGxhYmxlIGFyZ3VtZW50ICovCiAJaW5mbyA9IGluZm9fYnVmOwogCWZvciAoYXJnX25vID0gMDsgYXJnX25vICZsdDsgbmFyZ3M7IGFyZ19ubyYjNDM7JiM0MzspIHsKLQkJLyogU2tpcCBhcmd1bWVudHMgdGhhdCBpcyBub3Qgc3VmZml4ZWQgd2l0aAotCQkgKiAmIzM0O19fbnVsbGFibGUgb3IgX19yZWYmIzM0Oy4KJiM0MzsJCS8qCiYjNDM7CQkgKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGFyZSBub3Qgc3VmZml4ZWQgd2l0aCAmIzM0O19fYXJlbmFfX251bGxhYmxlJiMzNDssCiYjNDM7CQkgKiAmIzM0O19fYXJlbmEmIzM0OywgJiMzNDtfX251bGxhYmxlJiMzNDssIG9yICYjMzQ7X19yZWYmIzM0Oy4KIAkJICovCi0JCWlzX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsICZhbXA7c3R1Yl9hcmdzW2FyZ19ub10sCi0JCQkJCQkgICAgIE1BWUJFX05VTExfU1VGRklYKTsKJiM0MzsJCWlzX2FyZW5hX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsICZhbXA7c3R1Yl9hcmdzW2FyZ19ub10sCiYjNDM7CQkJCQkJCSAgIEFSRU5BX01BWUJFX05VTExfU1VGRklYKTsKJiM0MzsJCWlzX2FyZW5hID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsICZhbXA7c3R1Yl9hcmdzW2FyZ19ub10sIEFSRU5BX1NVRkZJWCk7CiYjNDM7CQlpc19udWxsYWJsZSA9ICFpc19hcmVuYV9udWxsYWJsZSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsICZhbXA7c3R1Yl9hcmdzW2FyZ19ub10sIE1BWUJFX05VTExfU1VGRklYKTsKIAkJaXNfcmVmY291bnRlZCA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCAmYW1wO3N0dWJfYXJnc1thcmdfbm9dLAogCQkJCQkJICAgICAgIFJFRkNPVU5URURfU1VGRklYKTsKIAotCQlpZiAoaXNfbnVsbGFibGUpCiYjNDM7CQlpZiAoaXNfYXJlbmFfbnVsbGFibGUpCiYjNDM7CQkJc3VmZml4ID0gQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVg7CiYjNDM7CQllbHNlIGlmIChpc19hcmVuYSkKJiM0MzsJCQlzdWZmaXggPSBBUkVOQV9TVUZGSVg7CiYjNDM7CQllbHNlIGlmIChpc19udWxsYWJsZSkKIAkJCXN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYOwogCQllbHNlIGlmIChpc19yZWZjb3VudGVkKQogCQkJc3VmZml4ID0gUkVGQ09VTlRFRF9TVUZGSVg7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCi0JCS8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovCi0JCXBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0ZiwKLQkJCQkJCSAgICBhcmdzW2FyZ19ub10udHlwZSwKLQkJCQkJCSAgICAmYW1wO2FyZ19idGZfaWQpOwotCQlpZiAoIXBvaW50ZWRfdHlwZSB8fAotCQkgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QsIG9yIGFueSBwb2ludGVyIGZvciBfX2FyZW5hIG9yCiYjNDM7CQkgKiBfX2FyZW5hX19udWxsYWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJcG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLCBhcmdzW2FyZ19ub10udHlwZSwgJmFtcDthcmdfYnRmX2lkKTsKJiM0MzsJCWlmICghcG9pbnRlZF90eXBlIHx8ICghaXNfYXJlbmEgJmFtcDsmYW1wOyAhaXNfYXJlbmFfbnVsbGFibGUgJmFtcDsmYW1wOyAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpKSB7CiAJCQlwcl93YXJuKCYjMzQ7c3R1YiBmdW5jdGlvbiAlcyBoYXMgJXMgdGFnZ2luZyB0byBhbiB1bnN1cHBvcnRlZCB0eXBlXG4mIzM0OywKIAkJCQlzdHViX2ZuYW1lLCBzdWZmaXgpOwogCQkJZ290byBlcnJfb3V0OwpAQCAtMjY4LDcgJiM0MzsyODAsMTggQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZiwKIAkJaW5mby0mZ3Q7YnRmX2lkID0gYXJnX2J0Zl9pZDsKIAkJaW5mby0mZ3Q7YnRmID0gYnRmOwogCQlpbmZvLSZndDtvZmZzZXQgPSBvZmZzZXQ7Ci0JCWlmIChpc19udWxsYWJsZSkgewomIzQzOwkJaWYgKGlzX2FyZW5hIHx8IGlzX2FyZW5hX251bGxhYmxlKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLAomIzQzOwkJCSAqIFBUUl9UT19BUkVOQSBlbmNvbXBhc3NlcyBwb3RlbnRpYWwgTlVMTCB2YWx1ZXMsIGJ1dAomIzQzOwkJCSAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW4KJiM0MzsJCQkgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLgomIzQzOwkJCSAqLwomIzQzOwkJCWluZm8tJmd0O3JlZ190eXBlID0gUFRSX1RPX0FSRU5BOwomIzQzOwkJCW1vZGVsLSZndDthcmdfZmxhZ3NbYXJnX25vXSB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRzsKJiM0MzsJCQlpZiAoaXNfYXJlbmFfbnVsbGFibGUpCiYjNDM7CQkJCW1vZGVsLSZndDthcmdfZmxhZ3NbYXJnX25vXSB8PSBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsJCX0gZWxzZSBpZiAoaXNfbnVsbGFibGUpIHsKIAkJCWluZm8tJmd0O3JlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEIHwgUFRSX01BWUJFX05VTEw7CiAJCX0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkgewogCQkJaW5mby0mZ3Q7cmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQ7CkBAIC00NjAsNiAmIzQzOzQ4Myw3IEBAIGludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLAogCQlzdHViX2Z1bmNfYWRkciA9ICoodm9pZCAqKikoc3Rfb3BzLSZndDtjZmlfc3R1YnMgJiM0MzsgbW9mZik7CiAJCWVyciA9IHByZXBhcmVfYXJnX2luZm8oYnRmLCBzdF9vcHMtJmd0O25hbWUsIG1uYW1lLAogCQkJCSAgICAgICBmdW5jX3Byb3RvLCBzdHViX2Z1bmNfYWRkciwKJiM0MzsJCQkJICAgICAgICZhbXA7c3Rfb3BzLSZndDtmdW5jX21vZGVsc1tpXSwKIAkJCQkgICAgICAgYXJnX2luZm8gJiM0MzsgaSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm91dDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jCmluZGV4IDQyNDE0NjMzY2YyNjMuLjY2MDYxODdlZDRmNDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnRmLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuYwpAQCAtNjk2MywxNSAmIzQzOzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSwKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIGNoZWNrIGZvciBQVFJfVE9fUkRPTkxZX0JVRl9PUl9OVUxMIG9yIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMICovCiYjNDM7CS8qCiYjNDM7CSAqIENoZWNrIGZvciBQVFJfVE9fUkRPTkxZX0JVRl9PUl9OVUxMLCBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCBvcgomIzQzOwkgKiBQVFJfVE9fQVJFTkEgKGJvdGggbnVsbGFibGUgYW5kIG5vbi1udWxsYWJsZSBjYXNlcykuCiYjNDM7CSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mb19zaXplOyBpJiM0MzsmIzQzOykgewogCQljb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSAmYW1wO3Byb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvW2ldOwogCQl1MzIgdHlwZSwgZmxhZzsKIAogCQl0eXBlID0gYmFzZV90eXBlKGN0eF9hcmdfaW5mby0mZ3Q7cmVnX3R5cGUpOwogCQlmbGFnID0gdHlwZV9mbGFnKGN0eF9hcmdfaW5mby0mZ3Q7cmVnX3R5cGUpOwotCQlpZiAoY3R4X2FyZ19pbmZvLSZndDtvZmZzZXQgPT0gb2ZmICZhbXA7JmFtcDsgdHlwZSA9PSBQVFJfVE9fQlVGICZhbXA7JmFtcDsKLQkJICAgIChmbGFnICZhbXA7IFBUUl9NQVlCRV9OVUxMKSkgewomIzQzOwkJaWYgKGN0eF9hcmdfaW5mby0mZ3Q7b2Zmc2V0ID09IG9mZiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHR5cGUgPT0gUFRSX1RPX0FSRU5BIHx8CiYjNDM7CQkgICAgICh0eXBlID09IFBUUl9UT19CVUYgJmFtcDsmYW1wOyAoZmxhZyAmYW1wOyBQVFJfTUFZQkVfTlVMTCkpKSkgewogCQkJaW5mby0mZ3Q7cmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tJmd0O3JlZ190eXBlOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KQEAgLTc1MzksNiAmIzQzOzc1NDMsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCkKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKJiM0MztzdGF0aWMgdTggX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpCiYjNDM7ewomIzQzOwl1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpOwomIzQzOwomIzQzOwlpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hX19udWxsYWJsZSYjMzQ7KSkKJiM0MzsJCWZsYWdzIHw9IEJURl9GTU9ERUxfQVJFTkFfQVJHIHwgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CWVsc2UgaWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19hcmVuYSYjMzQ7KSkKJiM0MzsJCWZsYWdzIHw9IEJURl9GTU9ERUxfQVJFTkFfQVJHOwomIzQzOwllbHNlIGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fbnVsbGFibGUmIzM0OykpCiYjNDM7CQlmbGFncyB8PSBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsKJiM0MzsJcmV0dXJuIGZsYWdzOwomIzQzO30KJiM0MzsKIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csCiAJCQkgICBzdHJ1Y3QgYnRmICpidGYsCiAJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmMsCkBAIC03NjA0LDcgJiM0Mzs3NjI0LDcgQEAgaW50IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCW0tJmd0O2FyZ19zaXplW2ldID0gcmV0OwotCQltLSZndDthcmdfZmxhZ3NbaV0gPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTsKJiM0MzsJCW0tJmd0O2FyZ19mbGFnc1tpXSA9IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoYnRmLCAmYW1wO2FyZ3NbaV0sIHQpOwogCX0KIAltLSZndDtucl9hcmdzID0gbmFyZ3M7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jIGIva2VybmVsL2JwZi9jaGVja19idGYuYwppbmRleCA5M2JlYmU2ZmUxMmU3Li4wZThiM2NjYzdhNWI5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2hlY2tfYnRmLmMKQEAgLTI4LDkgJiM0MzsyOCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWJub3JtYWxfcmV0dXJuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAjZGVmaW5lIE1JTl9CUEZfRlVOQ0lORk9fU0laRQk4CiAjZGVmaW5lIE1BWF9GVU5DSU5GT19SRUNfU0laRQkyNTIKIAotc3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCWNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLAotCQkJCWJwZnB0cl90IHVhdHRyKQomIzQzO3N0YXRpYyBpbnQgcHJlcGFyZV9idGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCSAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwKJiM0MzsJCQkgICAgYnBmcHRyX3QgdWF0dHIpCiB7CiAJdTMyIGtyZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyk7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlLCAqZnVuY19wcm90bzsKQEAgLTQwNyw5ICYjNDM7NDA3LDkgQEAgc3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLAotCQkJICAgICBicGZwdHJfdCB1YXR0cikKJiM0MztpbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsCiYjNDM7CQkJIGJwZnB0cl90IHVhdHRyKQogewogCXN0cnVjdCBidGYgKmJ0ZjsKIAlpbnQgZXJyOwpAQCAtNDI5LDcgJiM0Mzs0MjksNyBAQCBpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJfQogCWVudi0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtidGYgPSBidGY7CiAKLQllcnIgPSBjaGVja19idGZfZnVuY19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTsKJiM0MzsJZXJyID0gcHJlcGFyZV9idGZfZnVuYyhlbnYsIGF0dHIsIHVhdHRyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuYwppbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuYwpAQCAtMzMwOCw2ICYjNDM7MzMwOCwxMSBAQCBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0Mztib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpCiB7CiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCBlZDc5OTlhZDZjNjZjLi5lMDdhZjM1ZWQwNDAyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwpAQCAtNTI5LDYgJiM0Mzs1MjksMzYgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2EKIAlyZXR1cm4gdG5vZGVzOwogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgYXJlbmEgYmFzZSBhZ2FpbnN0IHdoaWNoIHNhdmVfYXJncygpIGNvbnZlcnRzIHRoZSBhcmd1bWVudHMgbWFya2VkCiYjNDM7ICogd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRy4gT25seSB0aGUgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lCiYjNDM7ICogY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUgcHJvZyB3aG9zZSBhcmVuYSBpcyBrbm93biBhdAomIzQzOyAqIGdlbmVyYXRpb24gdGltZS4gUmV0dXJuIDAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbnZlcnQuCiYjNDM7ICovCiYjNDM7dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwKJiM0MzsJCQkgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIShmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgfHwKJiM0MzsJICAgIHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ucl9ub2RlcyAhPSAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBtLSZndDtucl9hcmdzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CWlmIChpID09IG0tJmd0O25yX2FyZ3MpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogVmVyaWZpY2F0aW9uIHJlamVjdHMgYW4gYXJlbmEgYXJndW1lbnQgd2l0aG91dCBhbiBhcmVuYS4gKi8KJiM0MzsJcHJvZyA9IHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ub2Rlc1swXS0mZ3Q7bGluay0mZ3Q7cHJvZzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChwcm9nLSZndDthdXgtJmd0O2FyZW5hKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSkKIHsKIAlicGZfaW1hZ2Vfa3N5bV9kZWwoJmFtcDtpbS0mZ3Q7a3N5bSk7CkBAIC05MjAsNiAmIzQzOzk1MCwxMyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwKIAlpbnQgY250ID0gMCwgaTsKIAogCWtpbmQgPSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAobm9kZS0mZ3Q7bGluay0mZ3Q7cHJvZyk7CiYjNDM7CS8qCiYjNDM7CSAqIEFyZW5hIGN0eCBhcmdzIGFyZSBjb252ZXJ0ZWQgb25seSBieSBzdHJ1Y3Rfb3BzIGluZGlyZWN0CiYjNDM7CSAqIHRyYW1wb2xpbmVzLiBUaGV5IG11c3QgbmV2ZXIgYmUgYXR0YWNoZWQgdG8gYSBnZW5lcmljIHRyYW1wb2xpbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKG5vZGUtJmd0O2xpbmstJmd0O3Byb2cpKSkKJiM0MzsJCXJldHVybiAtRU5PVFNVUFA7CiYjNDM7CiAJaWYgKHRyLSZndDtleHRlbnNpb25fcHJvZykKIAkJLyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuCiAJCSAqIGNhbm5vdCBvdmVyd3JpdGUgZXh0ZW5zaW9uIHByb2cgZWl0aGVyLgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDA5NTg4YjdiMDhiMGEuLjgzZWRmNDFjN2ZlOWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTI4NDIsNyAmIzQzOzI4NDIsNyBAQCBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQomIzQzO3N0YXRpYyBpbnQgYWRkX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2cgPSBlbnYtJmd0O3N1YnByb2dfaW5mbzsKIAlpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuLCBleF9jYl9pbnNuOwpAQCAtMjg1NCw4ICYjNDM7Mjg1NCw3IEBAIHN0YXRpYyBpbnQgYWRkX3N1YnByb2dfYW5kX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCXJldHVybiByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgaW5zbl9jbnQ7IGkmIzQzOyYjNDM7LCBpbnNuJiM0MzsmIzQzOykgewotCQlpZiAoIWJwZl9wc2V1ZG9fZnVuYyhpbnNuKSAmYW1wOyZhbXA7ICFicGZfcHNldWRvX2NhbGwoaW5zbikgJmFtcDsmYW1wOwotCQkgICAgIWJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSkKJiM0MzsJCWlmICghYnBmX3BzZXVkb19mdW5jKGluc24pICZhbXA7JmFtcDsgIWJwZl9wc2V1ZG9fY2FsbChpbnNuKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghZW52LSZndDticGZfY2FwYWJsZSkgewpAQCAtMjg2MywxMSAmIzQzOzI4NjIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQogCi0JCWlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikgfHwgYnBmX3BzZXVkb19jYWxsKGluc24pKQotCQkJcmV0ID0gYWRkX3N1YnByb2coZW52LCBpICYjNDM7IGluc24tJmd0O2ltbSAmIzQzOyAxKTsKLQkJZWxzZQotCQkJcmV0ID0gYnBmX2FkZF9rZnVuY19jYWxsKGVudiwgaW5zbi0mZ3Q7aW1tLCBpbnNuLSZndDtvZmYpOwotCiYjNDM7CQlyZXQgPSBhZGRfc3VicHJvZyhlbnYsIGkgJiM0MzsgaW5zbi0mZ3Q7aW1tICYjNDM7IDEpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMjkwNSw2ICYjNDM7MjkwMCwyOCBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhZGRfa2Z1bmNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKJiM0MzsJaW50IGksIHJldCwgaW5zbl9jbnQgPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFlbnYtJmd0O2JwZl9jYXBhYmxlKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7bG9hZGluZy9jYWxsaW5nIG90aGVyIGJwZiBvciBrZXJuZWwgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIGZvciBDQVBfQlBGIGFuZCBDQVBfU1lTX0FETUlOXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IGJwZl9hZGRfa2Z1bmNfY2FsbChlbnYsIGluc24tJmd0O2ltbSwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCWludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7CkBAIC0xMDg5Miw5ICYjNDM7MTA5MDksMTYgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGYKIAlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX3JlZmNvdW50ZWRfa3B0ciYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJCQljb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hX19udWxsYWJsZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbnVsbGFibGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiB7Ci0JcmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19udWxsYWJsZSYjMzQ7KTsKJiM0MzsJcmV0dXJuICFpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoYnRmLCBhcmcpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19udWxsYWJsZSYjMzQ7KTsKIH0KIAogc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX25vbm93bl9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKQpAQCAtMTA5MTIsNiAmIzQzOzEwOTM2LDEyIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0KIAlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2lycV9mbGFnJiMzNDspOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FyZW5hKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShidGYsIGFyZykgfHwKJiM0MzsJICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19hcmVuYSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiAJCQkJCSAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLAogCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xMTEzMiw2ICYjNDM7MTExNjIsNyBAQCBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7CiAJS0ZfQVJHX1BUUl9UT19JUlFfRkxBRywKIAlLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssCiAJS0ZfQVJHX1BUUl9UT19UQVNLX1dPUkssCiYjNDM7CUtGX0FSR19QVFJfVE9fQVJFTkEsCiB9OwogCiBlbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7CkBAIC0xMTQxNyw3ICYjNDM7MTE0NDgsNiBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAogCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtJmd0O2J0ZiwgdC0mZ3Q7dHlwZSwgTlVMTCk7CiAJcmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtJmd0O2J0ZiwgcmVmX3QtJmd0O25hbWVfb2ZmKTsKIApAQCAtMTE0NjYsNyAmIzQzOzExNDk2LDI5IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiAJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOwogCWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQogCQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7Ci0JZWxzZSBpZiAoYXJnICYjNDM7IDEgJmx0OyBuYXJncyAmYW1wOyZhbXA7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkgewomIzQzOwkJaWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkgewomIzQzOwkJCXZlcmJvc2UoZW52LCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xuJiMzNDssCiYjNDM7CQkJCW1ldGEtJmd0O2Z1bmNfbmFtZSk7CiYjNDM7CQkJcmV0dXJuIC1FTk9UU1VQUDsKJiM0MzsJCX0KJiM0MzsJCWlmICghZW52LSZndDtwcm9nLSZndDthdXgtJmd0O2FyZW5hKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsCiYjNDM7CQkJCSYjMzQ7JXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXG4mIzM0OywKJiM0MzsJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChyZWdfZnJvbV9hcmdubyhhcmdubykgJmx0OyAwKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxuJiMzNDssCiYjNDM7CQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQkvKgomIzQzOwkJICogQm90aCBzdWZmaXhlcyBhY2NlcHQgYSBjb25zdGFudCB6ZXJvLiBUaGUgZnVuY3Rpb24gbW9kZWwgZGV0ZXJtaW5lcwomIzQzOwkJICogd2hldGhlciB0aGUgSklUIHJlYmFzZXMgaXQgdG8gdGhlIGFyZW5hIGJhc2Ugb3IgcHJlc2VydmVzIE5VTEwuCiYjNDM7CQkgKi8KJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19BUkVOQSB8IFBUUl9NQVlCRV9OVUxMOwomIzQzOwl9IGVsc2UgaWYgKGFyZyAmIzQzOyAxICZsdDsgbmFyZ3MgJmFtcDsmYW1wOwogCQkgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmcgJiM0MzsgMV0pIHx8CiAJCSAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSkpKSB7CiAJCWlmICghYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgJmFtcDsmYW1wOyAhYnRmX3R5cGVfaXNfc2NhbGFyKHJlZl90KSAmYW1wOyZhbXA7CkBAIC0xMjE2MCw3ICYjNDM7MTIyMTIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpOwogCiAJCWlmIChidGZfdHlwZV9pc19wdHIodCkgJmFtcDsmYW1wOyAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy0mZ3Q7dHlwZSkpICZhbXA7JmFtcDsKLQkJICAgICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbaV0pKSB7CiYjNDM7CQkgICAgIXR5cGVfbWF5X2JlX251bGwoa2ZfYXJnX3R5cGUpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgJXNcbiYjMzQ7LAogCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiAJCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTEyMjEzLDYgJiM0MzsxMjI2NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19JUlFfRkxBRzoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s6CiYjNDM7CQljYXNlIEtGX0FSR19QVFJfVE9fQVJFTkE6CiAJCQlicmVhazsKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0RZTlBUUjoKIAkJCWFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7CkBAIC0xMjI3OSw2ICYjNDM7MTIzMzIsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWUKIAkJCQltZXRhLSZndDtyZXRfYnRmX2lkICA9IHJldDsKIAkJCX0KIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBLRl9BUkdfUFRSX1RPX0FSRU5BOgomIzQzOwkJCWlmIChyZWctJmd0O3R5cGUgIT0gUFRSX1RPX0FSRU5BICZhbXA7JmFtcDsgcmVnLSZndDt0eXBlICE9IFNDQUxBUl9WQUxVRSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxuJiMzNDssCiYjNDM7CQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ6CiAJCQlpZiAocmVnLSZndDt0eXBlID09IChQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DKSkgewogCQkJCWlmICghaXNfYnBmX29ial9kcm9wX2tmdW5jKG1ldGEtJmd0O2Z1bmNfaWQpKSB7CkBAIC0xODgwOCwxMCAmIzQzOzE4ODY4LDIxIEBAIGludCBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJcmV0dXJuIHByb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvID8gMCA6IC1FTk9NRU07CiB9CiAKJiM0Mztib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcHJvZy0mZ3Q7YXV4LSZndDtjdHhfYXJnX2luZm9fc2l6ZTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoYmFzZV90eXBlKHByb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvW2ldLnJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqZnVuY19wcm90bzsKIAljb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2M7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87CiAJY29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHM7CiAJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjsKIAlzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtJmd0O3Byb2c7CkBAIC0xODg5MCwxMCAmIzQzOzE4OTYxLDIzIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IHN0X29wc19kZXNjLSZndDthcmdfaW5mb1ttZW1iZXJfaWR4XS5jbnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChzdF9vcHNfZGVzYy0mZ3Q7YXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mb1tpXS5yZWZjb3VudGVkKSB7CiYjNDM7CWFyZ19pbmZvID0gJmFtcDtzdF9vcHNfZGVzYy0mZ3Q7YXJnX2luZm9bbWVtYmVyX2lkeF07CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBhcmdfaW5mby0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbyA9ICZhbXA7YXJnX2luZm8tJmd0O2luZm9baV07CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7cmVmY291bnRlZCkKIAkJCWhhc19yZWZjb3VudGVkX2FyZyA9IHRydWU7Ci0JCQlicmVhazsKJiM0MzsJCWlmIChiYXNlX3R5cGUoaW5mby0mZ3Q7cmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkgewomIzQzOwkJCWlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtRU5PVFNVUFA7CiYjNDM7CQkJfQomIzQzOwkJCWlmICghcHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwKJiM0MzsJCQkJCSYjMzQ7YXJlbmEgYXJndW1lbnQgb2YgJXMgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxuJiMzNDssCiYjNDM7CQkJCQltbmFtZSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KIAkJfQogCX0KIApAQCAtMTg5MTQsOCAmIzQzOzE4OTk4LDcgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lOwogCWVudi0mZ3Q7b3BzID0gc3Rfb3BzLSZndDt2ZXJpZmllcl9vcHM7CiAKLQlyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgc3Rfb3BzX2Rlc2MtJmd0O2FyZ19pbmZvW21lbWJlcl9pZHhdLmluZm8sCi0JCQkJCSAgc3Rfb3BzX2Rlc2MtJmd0O2FyZ19pbmZvW21lbWJlcl9pZHhdLmNudCk7CiYjNDM7CXJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBhcmdfaW5mby0mZ3Q7aW5mbywgYXJnX2luZm8tJmd0O2NudCk7CiB9CiAjZGVmaW5lIFNFQ1VSSVRZX1BSRUZJWCAmIzM0O3NlY3VyaXR5XyYjMzQ7CiAKQEAgLTE5MTc5LDYgJiM0MzsxOTI2MiwxNyBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywKIAkJCWJwZl9sb2cobG9nLCAmIzM0O1N1YnByb2cgJXMgZG9lc24mIzM5O3QgZXhpc3RcbiYjMzQ7LCB0bmFtZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIEEgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lIGNvbnZlcnRzIGFyZW5hIGFyZ3VtZW50cwomIzQzOwkJICogYmVmb3JlIGludm9raW5nIGl0cyBwcm9ncmFtLiBBIHRyYWNpbmcgcHJvZ3JhbSBhdHRhY2hlZCB0byB0aGUKJiM0MzsJCSAqIG1haW4gcHJvZ3JhbSB3b3VsZCBzZWUgdGhlIGNvbnZlcnRlZCBvZmZzZXQgYXMgYSByZWd1bGFyIEJURgomIzQzOwkJICogcG9pbnRlci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHByb2dfdHJhY2luZyAmYW1wOyZhbXA7IHN1YnByb2cgPT0gMCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcodGd0X3Byb2cpKSB7CiYjNDM7CQkJYnBmX2xvZyhsb2csICYjMzQ7Q2Fubm90IHRyYWNlIGEgdGFyZ2V0IHdpdGggYXJlbmEgY29udGV4dCBhcmd1bWVudHNcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQl9CiAJCWlmIChhdXgtJmd0O2Z1bmMgJmFtcDsmYW1wOyBhdXgtJmd0O2Z1bmNbc3VicHJvZ10tJmd0O2F1eC0mZ3Q7ZXhjZXB0aW9uX2NiKSB7CiAJCQlicGZfbG9nKGxvZywKIAkJCQkmIzM0OyVzIHByb2dyYW1zIGNhbm5vdCBhdHRhY2ggdG8gZXhjZXB0aW9uIGNhbGxiYWNrXG4mIzM0OywKQEAgLTIwMjY5LDExICYjNDM7MjAzNjMsMTMgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsCiAJCUlOSVRfTElTVF9IRUFEKCZhbXA7ZW52LSZndDtleHBsb3JlZF9zdGF0ZXNbaV0pOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZW52LSZndDtmcmVlX2xpc3QpOwogCi0JcmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpOwomIzQzOwkvKiBQcmVwYXJlIEJURiBhbmQgZnVuY19pbmZvIG5lZWRlZCB0byBkaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMuICovCiYjNDM7CXJldCA9IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIHNraXBfZnVsbF9jaGVjazsKIAotCXJldCA9IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhlbnYpOwomIzQzOwkvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYmVmb3JlIHZhbGlkYXRpbmcgdGhlaXIgbGF5b3V0IGFuZCBCVEYuICovCiYjNDM7CXJldCA9IGFkZF9zdWJwcm9ncyhlbnYpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIHNraXBfZnVsbF9jaGVjazsKIApAQCAtMjAyODEsMTQgJiM0MzsyMDM3NywyMSBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBza2lwX2Z1bGxfY2hlY2s7CiAKJiM0MzsJLyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi8KIAlyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gc2tpcF9mdWxsX2NoZWNrOwogCiYjNDM7CS8qIFZhbGlkYXRlIGluc3RydWN0aW9ucyBhbmQgcmVzb2x2ZSB0aGUgcHJvZ3JhbSYjMzk7cyByZWZlcmVuY2VkIHJlc291cmNlcy4gKi8KIAlyZXQgPSBjaGVja19hbmRfcmVzb2x2ZV9pbnNucyhlbnYpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIHNraXBfZnVsbF9jaGVjazsKIAomIzQzOwkvKiBCdWlsZCBrZnVuYyBwcm90b3R5cGVzIGFmdGVyIHJlc29sdmluZyBwcm9ncmFtIHJlc291cmNlcy4gKi8KJiM0MzsJcmV0ID0gYWRkX2tmdW5jcyhlbnYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gc2tpcF9mdWxsX2NoZWNrOwomIzQzOwogCWlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LSZndDtwcm9nLSZndDthdXgpKSB7CiAJCXJldCA9IGJwZl9wcm9nX29mZmxvYWRfdmVyaWZpZXJfcHJlcChlbnYtJmd0O3Byb2cpOwogCQlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zMjNkNzA3YzU0M2ZhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKQEAgLTAsMCAmIzQzOzEsNzQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7c3RydWN0X29wc19hcmVuYS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsvKgomIzQzOyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlCiYjNDM7ICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXJlbmFfYXJnKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwomIzQzOwlzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9tYXBfX2F0dGFjaF9zdHJ1Y3Rfb3BzKHNrZWwtJmd0O21hcHMudGVzdG1vZF9hcmVuYSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaF9zdHJ1Y3Rfb3BzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnRyaWdnZXIpLAomIzQzOwkJCQkgICAgICZhbXA7dG9wdHMpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuJiMzNDspOwomIzQzOwlBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O3RyaWdnZXJfcmV0dmFsJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CXN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBwcm9ncmFtIHdpdGggbm8gYXJlbmEgY2Fubm90IGF0dGFjaCB0byBhIG1lbWJlciB3aXRoIGFuIF9fYXJlbmEKJiM0MzsgKiBhcmd1bWVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhcmVuYV9hcmdfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHN0cnVjdF9vcHNfYXJlbmFfZmFpbCAqc2tlbDsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaAomIzQzOyAqIHRlc3Rfc3RydWN0X29wc19wcml2YXRlX3N0YWNrIGFsc28gYXR0YWNoZXM7IHJlZ2lzdGVyaW5nIGl0IHR3aWNlIGZhaWxzCiYjNDM7ICogd2l0aCAtRUVYSVNULgomIzQzOyAqLwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LgomIzQzOwkgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYQomIzQzOwkgKiBhcmd1bWVudHMmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuCiYjNDM7CSAqLwomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnJiMzNDspKQomIzQzOwkJYXJlbmFfYXJnKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnX2ZhaWwmIzM0OykpCiYjNDM7CQlhcmVuYV9hcmdfZmFpbCgpOwomIzQzOyNlbHNlCiYjNDM7CXRlc3RfX3NraXAoKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCBiNzliYWZjYTY4ZjdhLi4xMTBhMzNiNmUxYzI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTIsNiAmIzQzOzIsOCBAQAogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDthcmVuYV9rZnVuYy5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YXJlbmFfa2Z1bmNfaml0LnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2NhcF9oZWxwZXJzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9hbGlnbi5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9hbmQuc2tlbC5oJiMzNDsKQEAgLTE2MSw2ICYjNDM7MTYzLDE1IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0c19hdXgoY29uc3QgY2hhciAqc2tlbF9uYW1lLAogCiAjZGVmaW5lIFJVTihza2VsKSBydW5fdGVzdHNfYXV4KCNza2VsLCBza2VsIyNfX2VsZl9ieXRlcywgTlVMTCkKIAomIzQzOy8qCiYjNDM7ICogVGhlIHRlc3Qga2Z1bmNzIGxpdmUgaW4gYnBmX3Rlc3Rtb2QuIFJlc29sdmluZyBrZnVuY3MgYWdhaW5zdCBtb2R1bGUKJiM0MzsgKiBCVEZzIG5lZWRzIENBUF9TWVNfQURNSU4sIHNvIHJ1biB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzIGluc3RlYWQgb2YKJiM0MzsgKiB0aHJvdWdoIHRoZSB2ZXJpZmllciB0ZXN0cyYjMzk7IGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuCiYjNDM7ICovCiYjNDM7dm9pZCB0ZXN0X2FyZW5hX2tmdW5jKHZvaWQpICAgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKGFyZW5hX2tmdW5jKTsgfQomIzQzOwomIzQzO3ZvaWQgdGVzdF9hcmVuYV9rZnVuY19qaXQodm9pZCkgICAgICAgICAgICAgICB7IFJVTl9URVNUUyhhcmVuYV9rZnVuY19qaXQpOyB9CiYjNDM7CiB2b2lkIHRlc3RfdmVyaWZpZXJfYWxpZ24odm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYWxpZ24pOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfYW5kKHZvaWQpICAgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYW5kKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2FyZW5hKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2FyZW5hKTsgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNmMzODJjZTgxYWY2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMKQEAgLTAsMCAmIzQzOzEsMjYwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFUwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CS8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFsLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovCiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9jY3VwaWVzIHBhZ2UgMCBzbyBubyBhbGxvY2F0aW9uIGxhbmRzIGF0IGFyZW5hIG9mZnNldCAwLCB3aGljaCB0aGUKJiM0MzsgKiBudWxsYWJsZSB0ZXN0cyBiZWxvdyBtdXN0IGJlIGFibGUgdG8gdGVsbCBhcGFydCBmcm9tIE5VTEwuCiYjNDM7ICovCiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfcGFkOwomIzQzOwomIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqLwomIzQzO3ZvbGF0aWxlIHU2NCBzdGFzaDsKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO2ludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsJdTY0IHJldDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CS8qIFBUUl9UT19BUkVOQSBhcmd1bWVudCAqLwomIzQzOwkqdmFsID0gNDE7CiYjNDM7CXJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CS8qIHRoZSBsb3cgMzIgYml0cyBhcyBhIHNjYWxhciAqLwomIzQzOwlzdGFzaCA9ICh1MzIpKHU2NCl2YWw7CiYjNDM7CXJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpOwomIzQzOwlpZiAocmV0ICE9IDQyIHx8ICp2YWwgIT0gNDMpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJLyogdGhlIGZ1bGwgdXNlciBhZGRyZXNzIGFzIGEgc2NhbGFyICovCiYjNDM7CXN0YXNoID0gKHU2NCl2YWw7CiYjNDM7CWJwZl9hZGRyX3NwYWNlX2Nhc3Qoc3Rhc2gsIDEsIDApOwomIzQzOwlyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTsKJiM0MzsJaWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KQomIzQzOwkJcmV0dXJuIDQ7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQaW4gdGhlIHJlYmFzZSBzZW1hbnRpY3MgdXNpbmcgdGhlIGNhcHR1cmUga2Z1bmNzLCB3aGljaCByZXR1cm4gdGhlIHJhdwomIzQzOyAqIGFyZ3VtZW50IHZhbHVlOiBfX2FyZW5hIHJlYmFzZXMgdW5jb25kaXRpb25hbGx5LCBzbyB6ZXJvIGxvdyAzMiBiaXRzCiYjNDM7ICogYXJyaXZlIGFzIHRoZSBhcmVuYSBrZXJuZWwgYmFzZSwgd2hpbGUgX19hcmVuYV9fbnVsbGFibGUgdHVybnMgdGhlbSBpbnRvCiYjNDM7ICogTlVMTC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO2ludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CXU2NCBiYXNlLCBvZmY7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwliYXNlID0gYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KE5VTEwpOwomIzQzOwlpZiAoIWJhc2UpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJLyogb25seSB0aGUgbG93IDMyIGJpdHMgY29udHJpYnV0ZSAqLwomIzQzOwlzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpICE9IGJhc2UpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJb2ZmID0gKHUzMikodTY0KXZhbDsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICYjNDM7IG9mZikKJiM0MzsJCXJldHVybiA0OwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KE5VTEwpICE9IDApCiYjNDM7CQlyZXR1cm4gNTsKJiM0MzsKJiM0MzsJc3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSAwKQomIzQzOwkJcmV0dXJuIDY7CiYjNDM7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSAmIzQzOyBvZmYpCiYjNDM7CQlyZXR1cm4gNzsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO2ludCBhcmVuYV9hcmdfbnVsbGFibGUodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsJdTY0IHJldDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CSp2YWwgPSA0MTsKJiM0MzsJcmV0ID0gYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChOVUxMKSAhPSAweGRlYWRiZWVmKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXZhbFswXSA9IDE7CiYjNDM7CXZhbFsxXSA9IDI7CiYjNDM7CXZhbFsyXSA9IDQ7CiYjNDM7CXZhbFszXSA9IDg7CiYjNDM7CXZhbFs0XSA9IDE2OwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKSZhbXA7dmFsWzBdLCAodTY0ICopJmFtcDt2YWxbMV0sCiYjNDM7CQkJCSAgICAgICAodTY0ICopJmFtcDt2YWxbMl0sICh1NjQgKikmYW1wO3ZhbFszXSwKJiM0MzsJCQkJICAgICAgICh1NjQgKikmYW1wO3ZhbFs0XSkgIT0gMzEpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKikmYW1wO3ZhbFswXSwgKHU2NCAqKSZhbXA7dmFsWzFdLAomIzQzOwkJCQkgICAgICAgKHU2NCAqKSZhbXA7dmFsWzJdLCAodTY0ICopJmFtcDt2YWxbM10sIE5VTEwpICE9IDE1KQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwl2YWxbMF0gPSA3OwomIzQzOwl2YWxbMV0gPSA1OwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKSZhbXA7dmFsWzBdLCBOVUxMKSAhPSA3KQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopJmFtcDt2YWxbMF0sICh1NjQgKikmYW1wO3ZhbFsxXSkgIT0gMTIpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqLwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKQomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJc3Rhc2ggPSAodTY0KXZhbCAmIzQzOyBQQUdFX1NJWkU7CiYjNDM7CWJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpOwomIzQzOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7YXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hJiMzNDspCiYjNDM7aW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKTEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhciYjMzQ7KQomIzQzO2ludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1NjQgYnVmID0gMDsKJiM0MzsKJiM0MzsJLyogdXNlIHRoZSBhcmVuYSBzbyB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGFyZW5hIHByZXNlbmNlIGNoZWNrICovCiYjNDM7CWJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoJmFtcDtidWYpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpICZhbXA7JmFtcDsgXAomIzQzOwlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50JiMzNDspCiYjNDM7aW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KDEsIDIsIDMsIDQsIDUsICh1NjQgKikxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7YXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5YjkxODY2MjYxNjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKQEAgLTAsMCAmIzQzOzEsOTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB0aGUgSklULWVtaXR0ZWQgcmViYXNlIHNlcXVlbmNlcyBmb3IgX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUKJiM0MzsgKiBrZnVuYyBhcmd1bWVudHMuIFRoZSBjYXB0dXJlIGtmdW5jcyB0YWtlIHRoZSBhcmd1bWVudCB3aXRob3V0CiYjNDM7ICogZGVyZWZlcmVuY2luZyBpdCwgc28gdGhlc2UgdGVzdHMgcGluIG9ubHkgdGhlIGVtaXR0ZWQgY29kZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IGFyZW5hIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqLwomIzQzO3ZvbGF0aWxlIHU2NCBzdGFzaDsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJdGVzdGwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJamUJTDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtMMDoJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3Rhc2ggPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92bAklZWRpLCAlZWRpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyZGkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVzaSwgJWVzaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcnNpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3ZsCSVlZHgsICVlZHgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkeCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92bAklZWN4LCAlZWN4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyY3gmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJXI4ZCwgJXI4ZCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJdGVzdGwJJXI4ZCwgJXI4ZCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJamUJTDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXI4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O0wwOgljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJdmFsWzBdID0gMTsKJiM0MzsJdmFsWzFdID0gMjsKJiM0MzsJdmFsWzJdID0gNDsKJiM0MzsJdmFsWzNdID0gODsKJiM0MzsJdmFsWzRdID0gMTY7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKikmYW1wO3ZhbFswXSwgKHU2NCAqKSZhbXA7dmFsWzFdLAomIzQzOwkJCQkgICAodTY0ICopJmFtcDt2YWxbMl0sICh1NjQgKikmYW1wO3ZhbFszXSwKJiM0MzsJCQkJICAgKHU2NCAqKSZhbXA7dmFsWzRdKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCAqLwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmJhMDRjNzNkOGQ5NjcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCkBAIC0wLDAgJiM0MzsxLDExNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOwomIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVMKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwkvKiBwYWdlIDAgaG9zdHMgdGhlIGFyZW5hIGdsb2JhbHMsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi8KJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0Mzt9IGFyZW5hIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzOy8qIGFsc28gYXNzb2NpYXRlcyB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGFyZW5hICovCiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7CiYjNDM7LyogcmF3IHZhbHVlIG9mIHRoZSBsYXN0IF9fYXJlbmEgY3R4IGFyZ3VtZW50LCBjYXB0dXJlZCBieSB0ZXN0X2FyZW5hX2NiICovCiYjNDM7dTY0IF9fYXJlbmEgY2JfcHRyX3ZhbDsKJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmEmIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMF07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJY2JfcHRyX3ZhbCA9IGN0eFswXTsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYV9udWxsYWJsZSYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX251bGxhYmxlX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTsKJiM0MzsKJiM0MzsJYXJlbmFfdG91Y2gmIzQzOyYjNDM7OwomIzQzOwlpZiAoIXB0cikKJiM0MzsJCXJldHVybiAweGJlZTsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYV9zdGFjayYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFs4XTsKJiM0MzsKJiM0MzsJYXJlbmFfdG91Y2gmIzQzOyYjNDM7OwomIzQzOwkvKiBwaW4gdGhlIHNsb3QgbGF5b3V0OiB0aGUgbGVhZGluZyBhcmdzIGZpbGwgY3R4WzBdLi5jdHhbN10gKi8KJiM0MzsJaWYgKGN0eFswXSAhPSAxIHx8IGN0eFs3XSAhPSA4KQomIzQzOwkJcmV0dXJuIDB4YmFkOwomIzQzOwkqcHRyICYjNDM7PSAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMubGluayYjMzQ7KQomIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7CiYjNDM7CS50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLAomIzQzOwkudGVzdF9hcmVuYV9udWxsYWJsZSA9ICh2b2lkICopdGVzdF9hcmVuYV9udWxsYWJsZV9jYiwKJiM0MzsJLnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsCiYjNDM7fTsKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IHRyaWdnZXIodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CSp2YWwgPSA0MTsKJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoKHU2NCAqKXZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJaWYgKCp2YWwgIT0gNDIpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNhbGxiYWNrIG11c3QgaGF2ZSBzZWVuIGV4YWN0bHkgKHUzMikoa2FkZHIgLSBrZXJuX3ZtX3N0YXJ0KSwKJiM0MzsJICogd2hpY2ggaXMgdGhlIGFyZW5hIG9mZnNldCBvZiB2YWwgd2l0aCB0aGUgdXBwZXIgMzIgYml0cyBjbGVhci4KJiM0MzsJICovCiYjNDM7CWlmIChjYl9wdHJfdmFsICE9ICh1MzIpKHU2NCl2YWwpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoKHU2NCAqKXZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gNTsKJiM0MzsJaWYgKCp2YWwgIT0gNDMpCiYjNDM7CQlyZXR1cm4gNjsKJiM0MzsKJiM0MzsJLyogTlVMTCBzdXJ2aXZlcyB0aGUgbnVsbGFibGUga2Z1bmMgYW5kIHRoZSB0cmFtcG9saW5lIGFzIE5VTEwgKi8KJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoTlVMTCk7CiYjNDM7CWlmIChyZXQgIT0gMHhiZWUpCiYjNDM7CQlyZXR1cm4gNzsKJiM0MzsKJiM0MzsJLyogdGhlIGFyZW5hIHBvaW50ZXIgaXMgc3RhY2stcGFzc2VkIGludG8gdGhlIHRyYW1wb2xpbmUgaGVyZSAqLwomIzQzOwlyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaygodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiA4OwomIzQzOwlpZiAoKnZhbCAhPSA0NCkKJiM0MzsJCXJldHVybiA5OwomIzQzOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjFjMGVjNzI3ZDYzNzQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYV9mYWlsLmMKQEAgLTAsMCAmIzQzOzEsMjAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzOy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqLwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYSYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX25vX2FyZW5hKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmsmIzM0OykKJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hX2ZhaWwgPSB7CiYjNDM7CS50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX25vX2FyZW5hLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwppbmRleCBlYjBmOWI1ZTE4ZDg1Li4yOTYzYzI5Zjk2YmE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKQEAgLTIzNyw2ICYjNDM7MjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpCiB7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXU2NCBvbGQ7CiYjNDM7CiYjNDM7CW9sZCA9ICp2YWxfX2FyZW5hOwomIzQzOwkqdmFsX19hcmVuYSA9IG9sZCAmIzQzOyAxOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpCiYjNDM7ewomIzQzOwl1NjQgb2xkOwomIzQzOwomIzQzOwlpZiAoIXZhbF9fYXJlbmFfX251bGxhYmxlKQomIzQzOwkJcmV0dXJuIDB4ZGVhZGJlZWY7CiYjNDM7CiYjNDM7CW9sZCA9ICp2YWxfX2FyZW5hX19udWxsYWJsZTsKJiM0MzsJKnZhbF9fYXJlbmFfX251bGxhYmxlID0gb2xkICYjNDM7IDE7CiYjNDM7CXJldHVybiBvbGQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1NjQpdmFsX19hcmVuYTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1NjQpdmFsX19hcmVuYV9fbnVsbGFibGU7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hLAomIzQzOwkJCQkJICAgdTY0ICpjX19hcmVuYSwgdTY0ICpkX19hcmVuYSwKJiM0MzsJCQkJCSAgIHU2NCAqZV9fYXJlbmFfX251bGxhYmxlKQomIzQzO3sKJiM0MzsJcmV0dXJuICphX19hcmVuYSAmIzQzOyAqYl9fYXJlbmEgJiM0MzsgKmNfX2FyZW5hICYjNDM7ICpkX19hcmVuYSAmIzQzOwomIzQzOwkgICAgICAgKGVfX2FyZW5hX19udWxsYWJsZSA/ICplX19hcmVuYV9fbnVsbGFibGUgOiAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdCh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsCiYjNDM7CQkJCQkJdTY0ICpmX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiBhICYjNDM7IGIgJiM0MzsgYyAmIzQzOyBkICYjNDM7IGUgJiM0MzsgKmZfX2FyZW5hOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKmFfX2FyZW5hICYjNDM7IChiX19hcmVuYV9fbnVsbGFibGUgPyAqYl9fYXJlbmFfX251bGxhYmxlIDogMCk7CiYjNDM7fQomIzQzOwogX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfZHlucHRyX3Rlc3Qoc3RydWN0IGJwZl9keW5wdHIgKnB0ciwKIAkJCQkgICAgICAgc3RydWN0IGJwZl9keW5wdHIgKnB0cl9fbnVsbGFibGUpCiB7CkBAIC0zNDcsOSAmIzQzOzM5NywyOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX3Rlc3RfNCh2b2lkKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsCiYjNDM7CQkJCQkgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCwKJiM0MzsJCQkJCSAgICAgIHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7CiAJLnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMywKIAkudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LAomIzQzOwkudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsCiYjNDM7CS50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSwKJiM0MzsJLnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLAogfTsKIAogc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKQpAQCAtMzY4LDYgJiM0Mzs0MzgsMjEgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKHZvaWQpCiAJc3Rfb3BzMy0mZ3Q7dGVzdF8yKCk7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmEocHRyX19hcmVuYSk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSh1NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfbnVsbGFibGUocHRyX19hcmVuYV9fbnVsbGFibGUpOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2sodTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7CiYjNDM7fQomIzQzOwogc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHsKIAlpbnQgYTsKIH07CkBAIC03NTUsNiAmIzQzOzg0MCwxMyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX3ZhbHVlKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jb21tb25fdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19uZXN0ZWRfYWNxdWlyZV9ub256ZXJvX29mZnNldF90ZXN0LCBLRl9BQ1FVSVJFKQpAQCAtNzcwLDYgJiM0Mzs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX2N0eF9yZWxlYXNlLCBLRl9SRUxFQVNFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzEpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMikKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaykKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpOwogQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCmluZGV4IDg2M2ZkMTBmMTYxOTkuLjMzZjJhZjViNzA4NTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaApAQCAtMTA2LDYgJiM0MzsxMDYsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIgewogc3RydWN0IGJwZl90ZXN0bW9kX29wczMgewogCWludCAoKnRlc3RfMSkodm9pZCk7CiAJaW50ICgqdGVzdF8yKSh2b2lkKTsKJiM0MzsJLyogVXNlZCB0byB0ZXN0IGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzLiAqLwomIzQzOwlpbnQgKCp0ZXN0X2FyZW5hKSh1NjQgKnB0cik7CiYjNDM7CWludCAoKnRlc3RfYXJlbmFfbnVsbGFibGUpKHU2NCAqcHRyKTsKJiM0MzsJLyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi8KJiM0MzsJaW50ICgqdGVzdF9hcmVuYV9zdGFjaykodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLCB1NjQgZiwKJiM0MzsJCQkJdTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7CiB9OwogCiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3MgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKaW5kZXggYzM2YmI5MTFkZWZhNy4uZGM3YzQwYmQxMjk5MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCkBAIC05OCw2ICYjNDM7OTgsMTYgQEAgdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlbGVhc2Uoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTsKIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWYoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTsKIAogdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEodm9pZCAqbWVtLCBpbnQgbGVuKSBfX2tzeW07CiYjNDM7X191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KF9fdTY0ICp2YWxfX2FyZW5hKSBfX2tzeW07CiYjNDM7X191NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KF9fdTY0ICp2YWxfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTsKJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYSwKJiM0MzsJCQkJIF9fdTY0ICpjX19hcmVuYSwgX191NjQgKmRfX2FyZW5hLAomIzQzOwkJCQkgX191NjQgKmVfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdChfX3U2NCBhLCBfX3U2NCBiLCBfX3U2NCBjLCBfX3U2NCBkLCBfX3U2NCBlLAomIzQzOwkJCQkgICAgIF9fdTY0ICpmX19hcmVuYSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwogaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZHdyX21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkd3JfYnVmX3NpemUpIF9fa3N5bTsKIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltOwogaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07CkBAIC0xMTEsNiAmIzQzOzEyMSw5IEBAIHUzMiBicGZfa2Z1bmNfY2FsbF90ZXN0X3N0YXRpY191bnVzZWRfYXJnKHUzMiBhcmcsIHUzMiB1bnVzZWQpIF9fa3N5bTsKICNlbmRpZgogCiB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwomIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwogCiBfX3U2NCBicGZfa2Z1bmNfY2FsbF90ZXN0MShzdHJ1Y3Qgc29jayAqc2ssIF9fdTMyIGEsIF9fdTY0IGIsCiAJCQkJX191MzIgYywgX191NjQgZCkgX19rc3ltOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAwMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgUG9pbnRlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9fbnVsbGFibGVgIGFubm90YXRpb25zIHRvIEJQRiBrZnVuY3MgYW5kIGBzdHJ1Y3Rfb3BzYCwgd2hpY2ggaXMgcHJldHR5IGludGVyZXN0aW5nLiBJdCYjMzk7cyB0b3VjaGluZyB0aGUgeDg2IEJQRiBKSVQsIHBsdXMgc29tZSBjb3JlIEJQRiBjb21wb25lbnRzIGxpa2UgdGhlIHZlcmlmaWVyLCBCVEYgaGFuZGxpbmcsIHN0cnVjdCBvcHMsIGFuZCBldmVuIHRoZSB0cmFtcG9saW5lIGxvZ2ljLiBHaXZlbiB0aGUgdmVyaWZpZXIgYW5kIEpJVCBhcmUgaW52b2x2ZWQsIHRoaXMgYWJzb2x1dGVseSBzY3JlYW1zIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGtleSBzeW1ib2xzIGltcGFjdGVkLiBJJiMzOTttIHNlZWluZyBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgYWNyb3NzIGEgcmFuZ2Ugb2YgZnVuY3Rpb25zIOKAkyBzb21lIHN0YXRpYywgc29tZSBnbG9iYWwuIFRoZSBzdGF0aWMgb25lcyBhcmUgbGVzcyBvZiBhIGRpcmVjdCBjb25jZXJuIGluaXRpYWxseSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbm9uLXN0YXRpYyBvbmVzOiBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBgc2F2ZV9hcmdzYCwgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGBicGZfdHJhbXBfYXJlbmFfYmFzZWAsIGBwcmVwYXJlX2FyZ19pbmZvYCwgYGJ0Zl9jdHhfYWNjZXNzYCwgYF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3NgLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBicGZfcHJlcGFyZV9idGZfaW5mb2AsIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYWRkX3N1YnByb2dzYCwgYGFkZF9rZnVuY3NgLCBgaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlYCwgYGlzX2tmdW5jX2FyZ19hcmVuYWAsIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AsIGBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZGAsIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGAsIGBicGZfY2hlY2tgCgpJJiMzOTttIHRoaW5raW5nIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBhbnl0aGluZyB0aGF0JiMzOTtzIGEgcG90ZW50aWFsIGJvdW5kYXJ5IG9yIGludGVyYWN0aW9uIHBvaW50LiBJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgY2FuZGlkYXRlczogYGJwZl90cmFtcF9hcmVuYV9iYXNlYCwgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCwgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AuIExldCYjMzk7cyB0aHJvdyBpbiBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgYnRmX2N0eF9hY2Nlc3NgIGJlY2F1c2UgdGhlc2UgYXJlIGludm9sdmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxscyB0byBgcHJlcGFyZV9hcmdfaW5mb2AgaW4gYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAsIHRvby4KCldhaXQsIGBicGZfY2hlY2tgIGlzIHdheSB0b28gYnJvYWQuIExldCYjMzk7cyBmaWx0ZXIgdGhhdCBvdXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAgaW4gYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AuIEkgd2lsbCBhbHNvIGNoZWNrIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AsIGBidGZfY3R4X2FjY2Vzc2AgaW4gYGtlcm5lbC9icGYvYnRmLmNgLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AgaW4gYGtlcm5lbC9icGYvYnRmLmNgLCBhbmQgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYAoKSSYjMzk7bSBnb2luZyB0byB3b3JrIHdpdGggYGJwZl90cmFtcF9hcmVuYV9iYXNlYCwgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCwgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYCwgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gZ3VpZGUgbXkgdGVzdGluZyBhbmQgZGV0ZXJtaW5lIHdoYXQgdGhlIHBhdGNoIGFjdGl2YXRlcy4gYGtlcm5lbC9icGYvYCBwb2ludHMgdG8gYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoZSBKSVQgcGFydCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCB1c2VzIGBDT05GSUdfQlBGX0pJVGAuIFRoZSBgc3RydWN0X29wc2Agc2lkZSBpcyBsaWtlbHkgdW5kZXIgYm90aCBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQlBGX0pJVCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQlBGX0pJVGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgcGFydGljdWxhcmx5IHRoZSB4ODYgb25lLCBnaXZlbiB0aGlzIGlzIGxpa2VseSB4ODYgcmVsYXRlZC4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBvcHRpb24sIGFsb25nc2lkZSBvdGhlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGF0IGZpbGUgY2xvc2VseSB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IHJlbGV2YW50IHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkxvY2F0aW5nIHRoZSBSZWxldmFudCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBhcmUgbG9jYXRlZCwgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGV5JiMzOTtsbCBiZSBpbiBvbmUgb2YgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIHByZXR0eSB3ZWxsLW9yZ2FuaXplZCwgc28gdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgYXJlIGBrZXJuZWwvYnBmL0tjb25maWdgIChzaW5jZSB0aGlzIGlzIEJQRi1yZWxhdGVkKSBvciBwb3NzaWJseSBgbmV0L0tjb25maWdgIChiZWNhdXNlIEJQRiBpcyBoZWF2aWx5IHVzZWQgaW4gbmV0d29ya2luZyBjb250ZXh0cykuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIGZpbGVzIGRpcmVjdGx5LiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBjb252ZW50aW9uLCBzbyBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IEkmIzM5O2xsIGZpbmQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZXJlLCBvciBhdCBsZWFzdCBiZSBwb2ludGVkIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODE2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBuZWVkIGJvdGggYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGVuYWJsZWQuIFRoYXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkLCBnZW5lcmFsbHkgaW5kaWNhdGluZyB3ZSYjMzk7cmUgcGxhbm5pbmcgdG8gbGV2ZXJhZ2UgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhbmQsIG9mIGNvdXJzZSwgdGhlIEpJVCBjb21waWxlciBmb3IgQlBGIGJ5dGVjb2RlLiBNYWtlcyBzZW5zZS4gQnV0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBzdWJ0bHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgZmxhZ3MgcmVsYXRlZCB0byBgYnBmX2FyZW5hYC4gSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVsYXRlZCBrZXJuZWwgbW9kdWxlcyB0byBiZSBmdWxseSBpbmZvcm1lZCBiZWZvcmUgSSBwcm9jZWVkLiBEb24mIzM5O3Qgd2FudCB0byBnZXQgdHJpcHBlZCB1cCBieSBhIGhpZGRlbiBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfQVJFTkEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgQ29tcGlsYXRpb24qKgoKSG1tLCB0aGVyZSYjMzk7cyBubyBgQ09ORklHX0JQRl9BUkVOQWAgZGVmaW5lZC4gVGhhdCYjMzk7cyBhIGJpdCBvZGQ7IEkgY291bGQgaGF2ZSBzd29ybiBJJiMzOTtkIHNlZW4gaXQgc29tZXdoZXJlLiBXYWl0LCBob2xkIG9uLiBJcyBpdCBgQ09ORklHX0JQRl9FVkVOVFNgIGluc3RlYWQ/IFBlcmhhcHMgaXQmIzM5O3MgYSBuZXdlciwgbW9yZSBzdHJlYW1saW5lZCBvcHRpb24sIG9yIG1heWJlIGl0JiMzOTtzIHJlbGF0ZWQsIGp1c3QgbmFtZWQgZGlmZmVyZW50bHkuIFJpZ2h0LCBuZWVkIHRvIHZlcmlmeSB0aGF0LgoKVG8gZmlndXJlIG91dCBob3cgdGhlIGBicGZfc3RydWN0X29wcy5jYCBhbmQgYHRyYW1wb2xpbmUuY2AgZmlsZXMgYXJlIGJlaW5nIGhhbmRsZWQsIEkgc2hvdWxkIGV4YW1pbmUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IHRob3NlIHNwZWNpZmljIHNvdXJjZXMgYXJlIGJ1aWx0IGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIHRoZW0uIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSBob3cgdGhlIGRlcGVuZGVuY2llcyBhcmUgYXJyYW5nZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJ1Y3Rfb3BzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQlBGIFZlcmlmaWNhdGlvbiBhbmQgSklUIENvbXBpbGF0aW9uIENoZWNrKioKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UganVzdCBlbmFibGluZyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBzaG91bGQgZ2l2ZSBtZSBldmVyeXRoaW5nIEkgbmVlZCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBhbmQgaG9wZWZ1bGx5IHNpbXBsaWZpZXMgdGhpbmdzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgdHJhbXBvbGluZS5vYCBvYmplY3QgZmlsZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaXRzIHJvbGUgd2l0aGluIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFVuZGVyc3RhbmRpbmcgaXRzIGJ1aWxkIHByb2Nlc3Mgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBob3cgdGhlIEJQRiB0cmFtcG9saW5lcyBhcmUgY3JlYXRlZCBhbmQgaW50ZWdyYXRlZCwgd2hpY2ggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFtcG9saW5lLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgYW5kIFRyYW1wb2xpbmVzKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfSklUYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGB0cmFtcG9saW5lLm9gIOKAkyB0aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gcmVtZW1iZXIuIE5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMuIEJhc2VkIG9uIG15IHF1aWNrIHNjYW4sIHRoZXNlIGFyZSB0aGUgb25lcyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb246CgoqICAgYGJwZl90cmFtcF9hcmVuYV9iYXNlYAoqICAgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYAoqICAgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYAoqICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AKKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYAoqICAgYGJ0Zl9jdHhfYWNjZXNzYAoqICAgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAKKiAgIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGAKCk5vdywgSSYjMzk7bSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIG9yIGdsb2JhbGx5IGFjY2Vzc2libGUgYmVjYXVzZSB0aGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyBlYXN5IGl0IGlzIHRvIGludGVyYWN0IHdpdGggaXRzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zNDc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcywgdTMyIG1vZmYpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM1My1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozNTQ6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU1LVx0XHRcdCAgICAgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTg4OT1idGZfYWRkX3N0cnVjdF9vcHMoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk5MjAtXG5rZXJuZWwvYnBmL2J0Zi5jOjk5MjE6XHRlcnIgPSBicGZfc3RydWN0X29wc19kZXNjX2luaXQoXHUwMDI2dGFiLVx1MDAzZW9wc1tidGYtXHUwMDNlc3RydWN0X29wc190YWItXHUwMDNlY250XSwgYnRmLCBsb2cpO1xua2VybmVsL2JwZi9idGYuYy05OTIyLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFNjb3BlICZhbXA7IE1ldGhvZCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCYjMzk7cyBjb25maXJtZWQgdG8gYmUgZ2xvYmFsIGluIG5hdHVyZS4gR29vZCwgaW1wb3J0YW50IHRvIGVzdGFibGlzaCB0aGF0IGF0IHRoZSBvdXRzZXQuIE5vdywgd2l0aCB0aGF0IGVzdGFibGlzaGVkIEkgbmVlZCB0byBsb29rIGludG8gYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGdsb2JhbCBpbmZsdWVuY2UgbWFuaWZlc3RzLCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIG1hbmFnZWQgb3IgY29uc3RyYWluZWQuIE5lZWQgdG8gZGl2ZSBkZWVwIGludG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTY4NTA9Ym9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTcwMzEtXHRcdFx0cmV0dXJuIGZhbHNlO1xua2VybmVsL2JwZi9idGYuYzo3MDMyOlx0XHQvKiBDaGVja2VkIGJ5IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0ICovXG5rZXJuZWwvYnBmL2J0Zi5jLTcwMzMtXHRcdHRuYW1lICYjNDM7PSBzaXplb2YoXCYjMzQ7YnRmX3RyYWNlX1wmIzM0OykgLSAxO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MjQ9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3NTc6XHRcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIHRndF9wcm9nLCBidGZfaWQsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzU4LVx0XHRcdFx0XHQgICAgICBcdTAwMjZ0Z3RfaW5mbyk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzMy1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzQ6XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCBOVUxMLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNS1cdFx0XHRcdCAgICAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMTMwPXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTQxLSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjE0MjogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxNDMtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTE5Mj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTIwNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTIwNjppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTIwNy1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTYzMD1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NjAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2NjE6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NjItXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR2xvYmFsIFNjb3BlIENoZWNrIGFuZCBUYXJnZXRlZCBGdW5jdGlvbiBSZXZpZXcqKgoKT2theSwgc28gdGhlIHNjb3BlLi4uIHllYWgsIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IGdsb2JhbC4gTmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBub3cgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIGNoZWNrIHRoZSBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AgZnVuY3Rpb24uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGF0IGltcGxlbWVudGF0aW9uLiBHb3R0YSBjaGVjayBob3cgdGhhdCYjMzk7cyB3b3JraW5nIHdpdGhpbiB0aGUgZ2xvYmFsIGNvbnRleHQsIGFuZCBlbnN1cmUgaXRzIGhhbmRsaW5nIG9mIHdoYXRldmVyIGl0IGlzIGNvbmNlcm5lZCB3aXRoIGFsaWducyB3aXRoIHdoYXQgSSYjMzk7bSBleHBlY3RpbmcuIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoaXMsIHNvIGxldCYjMzk7cyBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmX2Rpc3RpbGxfZnVuY19wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zNTQ9aW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ2MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo0NjI6XHRcdGlmIChidGZfZGlzdGlsbF9mdW5jX3Byb3RvKGxvZywgYnRmLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ2My1cdFx0XHRcdFx0ICAgZnVuY19wcm90bywgbW5hbWUsXG4tLVxua2VybmVsL2JwZi9idGYuYz03NTQ2PXN0YXRpYyB1OCBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc1NjEtXG5rZXJuZWwvYnBmL2J0Zi5jOjc1NjI6aW50IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvYnRmLmMtNzU2My1cdFx0XHQgICBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTI3Mjg9aW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgxMS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyODEyOlx0ZXJyID0gYnRmX2Rpc3RpbGxfZnVuY19wcm90byhcdTAwMjZlbnYtXHUwMDNlbG9nLCBrZnVuYy5idGYsIGtmdW5jLnByb3RvLCBrZnVuYy5uYW1lLCBcdTAwMjZmdW5jX21vZGVsKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODEzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyMDY9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDMzLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDM0Olx0XHRyZXQgPSBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKGxvZywgYnRmLCB0LCB0bmFtZSwgXHUwMDI2dGd0X2luZm8tXHUwMDNlZm1vZGVsKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQzNS1cdFx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0Nzc6XHRcdHJldCA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8obG9nLCBidGYsIHQsIHRuYW1lLCBcdTAwMjZ0Z3RfaW5mby1cdTAwM2VmbW9kZWwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDc4LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTczMD1pbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc2MDpcdGVyciA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oTlVMTCwgYnRmLCB0LCB0bmFtZSwgXHUwMDI2dGd0X2luZm8tXHUwMDNlZm1vZGVsKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc2MS1cdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDE0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR2xvYmFsIFNjb3BlIENoZWNrIGFuZCBDb250ZXh0dWFsIEFjY2VzcyoqCgpSaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGdsb2JhbCBzaXR1YXRpb24gaGVyZS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbi4gTm93LCBnaXZlbiB0aGF0IGdsb2JhbCBuYXR1cmUsIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIHNwZWNpZmljIGFjY2VzcyBwYXR0ZXJucyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhY3Jvc3MgdGhlIGVudGlyZSBzeXN0ZW0uCgpUaGVyZWZvcmUsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBidGZfY3R4X2FjY2Vzc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggZ2xvYmFsIHZhcmlhYmxlcyBvciBnbG9iYWwgc3RhdGUuIEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIHRvIHVucGFjaz8gSSBuZWVkIHRvIGtub3c6IHdoYXQmIzM5O3MgdGhlIGFjY2VzcyBncmFudWxhcml0eT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29udGV4dCB3aXRoaW4gd2hpY2ggdGhpcyBhY2Nlc3Mgb2NjdXJzLCBlc3BlY2lhbGx5IGlmIHRoYXQgY29udGV4dCBpcyBnbG9iYWwsIG9yIGluZmx1ZW5jZWQgYnkgZ2xvYmFsIHN0YXRlPyBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgaW4gdGhlIGdsb2JhbCBjb250ZXh0LCBhcyB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3VyIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2xzbS5jPTQxNj1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsc21fdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9icGZfbHNtLmMtNDE3LVx0LmdldF9mdW5jX3Byb3RvID0gYnBmX2xzbV9mdW5jX3Byb3RvLFxua2VybmVsL2JwZi9icGZfbHNtLmM6NDE4Olx0LmlzX3ZhbGlkX2FjY2VzcyA9IGJ0Zl9jdHhfYWNjZXNzLFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDE5LX07XG4tLVxua2VybmVsL2JwZi9idGYuYz02NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjg0OS1cbmtlcm5lbC9icGYvYnRmLmM6Njg1MDpib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxua2VybmVsL2JwZi9idGYuYy02ODUxLVx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzEwMy19XG5rZXJuZWwvYnBmL2J0Zi5jOjcxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoYnRmX2N0eF9hY2Nlc3MpO1xua2VybmVsL2JwZi9idGYuYy03MTA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjk4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipHbG9iYWwgU2NvcGUgYW5kIEJURiBQcmVwYXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCBoYXMgYSBnbG9iYWwgaW1wYWN0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGlzc3VlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBjb3JlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIGBicGZfcHJlcGFyZV9idGZfaW5mb2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIGZpbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBnbG9iYWwgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcmVwYXJlX2J0Zl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQwOS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDEwOmludCBicGZfcHJlcGFyZV9idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MTEtXHRcdFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDI1OD1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNjYtXHQvKiBQcmVwYXJlIEJURiBhbmQgZnVuY19pbmZvIG5lZWRlZCB0byBkaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzNjc6XHRyZXQgPSBicGZfcHJlcGFyZV9idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM2OC1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTY29wZSAmYW1wOyBDb250ZXh0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0JiMzOTtzIHVuZXF1aXZvY2FsbHkgZ2xvYmFsLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBmbGFncyBhbmQgcHJvbXB0cyBhIHRob3JvdWdoIGV4YW1pbmF0aW9uIG9mIGl0cyBpbXBsaWNhdGlvbnMgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBCZWZvcmUgcHJvY2VlZGluZywgSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AuIFRoaXMgaXMgY3J1Y2lhbC4gVGhpcyB3aWxsIHRlbGwgbWUgd2hldGhlciB3ZSBoYXZlIGFyZW5hIGNvbnRleHQgYXJndW1lbnRzLiBUaGlzIGNvdWxkIGhhdmUgYSBnbG9iYWwgZWZmZWN0LCBhbmQgbWlnaHQgYmUgaW1wb3J0YW50IGluIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIGluaXRpYWwgYXNzZXJ0aW9uLiBUaGUgb3V0Y29tZSBoZXJlIHdpbGwgc3RlZXIgdGhlIHN1YnNlcXVlbnQgbGluZSBvZiBpbnF1aXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk0Mj1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTYtXHQgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk1NzpcdGlmIChXQVJOX09OX09OQ0UoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcobm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk1OC1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NjI9aW50IGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4NzE6Ym9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NzIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTIwNj1pbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkyNzEtXHRcdGlmIChwcm9nX3RyYWNpbmcgXHUwMDI2XHUwMDI2IHN1YnByb2cgPT0gMCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTI3MjpcdFx0ICAgIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKHRndF9wcm9nKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjczLVx0XHRcdGJwZl9sb2cobG9nLCBcJiMzNDtDYW5ub3QgdHJhY2UgYSB0YXJnZXQgd2l0aCBhcmVuYSBjb250ZXh0IGFyZ3VtZW50c1xcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQmIzM5O3MgYSBkaXJlY3Qgc3RyZWFtIG9mIG15IHRob3VnaHRzOgoKKipBZGRyZXNzaW5nIEdsb2JhbCBTY29wZSBpbiBlQlBGIENvbnRleHQqKgoKUmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHNjb3BlIGhlcmUuIFRoZSBzaXR1YXRpb24uLi4gWWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGdsb2JhbCBpbiBuYXR1cmUsIG5vdCBpc29sYXRlZC4gSXQmIzM5O3MgaW1wYWN0aW5nIG1vcmUgdGhhbiBqdXN0IG9uZSBzcGVjaWZpYyBsb2NhbCBhcmVhLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBicGZfdHJhbXBfYXJlbmFfYmFzZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhhdCB2YXJpYWJsZS4gVGhhdCYjMzk7cyB0aGUga2V5IHBvaW50IG9mIGludmVzdGlnYXRpb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wX2FyZW5hX2Jhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz01MDg9YnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2FyZylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MzctICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1Mzg6dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUzOS1cdFx0XHQgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0Mzc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR2xvYmFsIFNjb3BlIGFuZCBKSVQgQXJlbmEgQXJndW1lbnRzKioKCkFscmlnaHQsIHRoYXQgb2JzZXJ2YXRpb24gYWJvdXQgdGhlIHNpdHVhdGlvbiBhdCBoYW5kLi4uIHllcCwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyBpbXBhY3RpbmcgdGhlIHN5c3RlbSBnbG9iYWxseS4gTm8gbG9jYWxpemVkIGlzc3VlIGhlcmU7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0td2lkZSBlZmZlY3QuCgpOb3csIGdpdmVuIHRoYXQgc2NvcGUsIGFuZCB3aXRoIG15IGV4cGVyaWVuY2UgaW4gdGhlc2UgbG93LWxldmVsIGNvbnRleHRzLCBteSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGEgc3BlY2lmaWMgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYXNjZXJ0YWluIHRoZSBzdXBwb3J0IGxldmVsLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBzdXBwb3J0IGxldmVsIGlzIGdvaW5nIHRvIGRpY3RhdGUgdGhlIGFwcHJvcHJpYXRlIGNvdXJzZSBvZiBhY3Rpb24sIGFuZCBpdCB3b3VsZCBiZSBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgZm9yIGEgZmV3IGRpZmZlcmVudCBwb3RlbnRpYWwgc29sdXRpb25zIHRoYXQgSSBhbSBtdWxsaW5nIG92ZXIuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZsYWcgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9MzMwNj1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEwLVxua2VybmVsL2JwZi9jb3JlLmM6MzMxMTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMTIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTQyMj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQ5OS1cdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExNTAwOlx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1MDEtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcblwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4ODE9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODk3MC1cdFx0aWYgKGJhc2VfdHlwZShpbmZvLVx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODk3MTpcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5NzItXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMTkKCQkJCQkJCW91dHB1dDogMjQxCgkJCQkJCQl0aG91Z2h0czogMTEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQb2ludGVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZ2xvYmFsLCB3aGljaCBtZWFucyBpdCBwb3RlbnRpYWxseSB0b3VjaGVzIGEgbG90IG9mIGRpZmZlcmVudCBhcmVhcy4gTXkgaW5pdGlhbCBwYXNzIGhhcyBpZGVudGlmaWVkIHNldmVyYWwga2V5IHN5bWJvbHMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290OgoKKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWAKKiAgIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AKKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgCiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YAoqICAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gCiogICBgYnRmX2N0eF9hY2Nlc3NgCiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgCgpXYWl0LCBgYnBmX3ByZXBhcmVfYnRmX2luZm9gIGlzbiYjMzk7dCBhIG5ldyBmZWF0dXJlLCBqdXN0IGEgcmVuYW1lLiBJJiMzOTtsbCBkcm9wIHRoYXQuIEFuZCwgbG9va2luZyBhdCB0aGUgb3RoZXJzLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBidGZfY3R4X2FjY2Vzc2AsIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgIGFuZCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGFyZSBtb2RpZmllZCwgYnV0IHRoZXkgYXJlIHJlbGF0aXZlbHkgZ2VuZXJpYyBmdW5jdGlvbnMsIHNvIEkmIzM5O2xsIGtlZXAgdGhlbSBhcyBJIGRvbiYjMzk7dCB3YW50IHRvIGV4Y2x1ZGUgYW55IHBvdGVudGlhbCBhcmVhcy4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucy4gSG1tLCBpcyBgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0YCBhZmZlY3RlZD8gTm8sIHRoYXQgbG9va3MgdW50b3VjaGVkIGJ5IHRoaXMgcGF0Y2guCgpSaWdodCwgbGV0JiMzOTtzIHJlZmluZSB0aGF0IGZvY3VzIGxpc3Qgb25lIG1vcmUgdGltZToKCiogICBgYnBmX3RyYW1wX2FyZW5hX2Jhc2VgCiogICBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgCiogICBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYAoqICAgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAKKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYAoqICAgYGJ0Zl9jdHhfYWNjZXNzYAoqICAgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YAoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9KSVRgIHNlZW0gbGlrZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoIGltcGxpZXMgYENPTkZJR19YODZgIGlzIG5lZWRlZC4gSG93ZXZlciwgc2luY2UgYFg4NmAgaXMgYW4gYXJjaGl0ZWN0dXJlIGNvbmZpZywgYW5kIG5vdCB1c3VhbGx5IHNwZWNpZmllZCBpbiBgRW5hYmxlQ29uZmlnc2AgSSB3aWxsIGp1c3Qgc3BlY2lmeSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgYEJQRl9KSVRfQUxXQVlTX09OYCBpcyBuZWNlc3NhcnkuIE5vLCBgQlBGX0pJVGAgYWxvbmUgaXMgc3VmZmljaWVudC4KCk9rYXksIGxldCYjMzk7cyBjcmFmdCB0aGUgcmVhc29uaW5nIGZvciB0aGlzLiBUaGlzIHBhdGNoIGVuYWJsZXMgcGFzc2luZyBhcmVuYSBwb2ludGVycyB0byBCUEYga2Z1bmNzIGFuZCBgc3RydWN0X29wc2AgY2FsbGJhY2tzLiBJdCBjaGFuZ2VzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfX251bGxhYmxlYCBhbm5vdGF0aW9ucywgYW5kIHVwZGF0ZXMgdGhlIHg4NiBCUEYgSklUIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gY29ycmVjdGx5IHJlYmFzZSB0aGVzZSBwb2ludGVycyB0byB0aGUga2VybmVsJiMzOTtzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBhZGRzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIGFsbCByZWFjaGFibGUgdGhyb3VnaCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCB3aGljaCBtYWtlcyBpdCBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCBteSBmb2N1c2VkIHN5bWJvbHMgYXJlOgoKKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWAKKiAgIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AKKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgCiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YAoqICAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gCiogICBgYnRmX2N0eF9hY2Nlc3NgCiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgCgphbmQgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZToKCiogICBgQlBGX1NZU0NBTExgCiogICBgQlBGX0pJVGAKCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRob3NlIHN5bWJvbHMgYXJlIGluZGVlZCB3aGF0IEkgdGhpbmsgdGhleSBhcmUuIGBicGZfdHJhbXBfYXJlbmFfYmFzZWAgbG9va3MgY29ycmVjdDsgaXQmIzM5O3MgYSBuZXcgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gR29vZC4gYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCBpcyBuZXcsIGZvdW5kIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBQZXJmZWN0LiBBbmQgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgaXMgbmV3bHkgYWRkZWQgaW4gYGtlcm5lbC9icGYvY29yZS5jYCBhbmQgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIENoZWNrZWQuIExvb2tzIGxpa2UgdGhlIG90aGVyIDQgYXJlIG1vZGlmaWNhdGlvbnMgdG8gZmlsZXMgc3VjaCBhcyBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYCBhbmQgYGtlcm5lbC9icGYvYnRmLmNgLiBBbGwgZ29vZC4KClNlZW1zIGxpa2UgZXZlcnl0aGluZyBjaGVja3Mgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcF9hcmVuYV9iYXNlJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0OywKICAgICYjMzQ7YnRmX2Rpc3RpbGxfZnVuY19wcm90byYjMzQ7LAogICAgJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7LAogICAgJiMzNDticGZfY2hlY2tfYXR0YWNoX3RhcmdldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBhc3NpbmcgYXJlbmEgcG9pbnRlcnMgdG8gQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVjb2duaXplIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfX251bGxhYmxlYCBhbm5vdGF0aW9ucywgYW5kIHVwZGF0ZXMgdGhlIHg4NiBCUEYgSklUIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gcHJvcGVybHkgcmViYXNlIHRoZXNlIHBvaW50ZXJzIHRvIHRoZSBrZXJuZWwmIzM5O3MgYXJlbmEgYmFzZSBhZGRyZXNzLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvZGUgcGF0aHMgaW4gdGhlIHZlcmlmaWVyLCBCVEYgcGFyc2luZywgYW5kIEpJVCBjb21waWxhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBfYXJlbmFfYmFzZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YnBmX3N0cnVjdF9vcHNfZGVzY19pbml0JiMzNDssCiAgICAmIzM0O2J0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8mIzM0OywKICAgICYjMzQ7YnRmX2N0eF9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBwYXNzaW5nIGFyZW5hIHBvaW50ZXJzIHRvIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlY29nbml6ZSBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX19udWxsYWJsZWAgYW5ub3RhdGlvbnMsIGFuZCB1cGRhdGVzIHRoZSB4ODYgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIHByb3Blcmx5IHJlYmFzZSB0aGVzZSBwb2ludGVycyB0byB0aGUga2VybmVsJiMzOTtzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MjY6NDIuNTQ1MjU1MzIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2MjQ2NzQ0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBfYXJlbmFfYmFzZVwiLFxuICAgIFwiYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdcIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gICAgXCJidGZfY3R4X2FjY2Vzc1wiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBhc3NpbmcgYXJlbmEgcG9pbnRlcnMgdG8gQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVjb2duaXplIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfX251bGxhYmxlYCBhbm5vdGF0aW9ucywgYW5kIHVwZGF0ZXMgdGhlIHg4NiBCUEYgSklUIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gcHJvcGVybHkgcmViYXNlIHRoZXNlIHBvaW50ZXJzIHRvIHRoZSBrZXJuZWwncyBhcmVuYSBiYXNlIGFkZHJlc3MuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocyBpbiB0aGUgdmVyaWZpZXIsIEJURiBwYXJzaW5nLCBhbmQgSklUIGNvbXBpbGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MjY6NDIuNTQ1MjYxMTgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQwMDk4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNjE1MjNmZTQ3MTRmOWNmYTQyZGM3YjgwYTA2ODc1YTZiOTY0Zjk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMjI6MjY6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG5pbmRleCBjYmRlODZkMDgyY2NlLi5jMDQ0NjU5Yjc2ODkxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuQEAgLTI3OCw2ICsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XFxuICAgICAgICAgICAgICAgICAuLi5cXG4gICAgICAgICB9XFxuIFxcbisyLjMuOCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBBbm5vdGF0aW9uc1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rQm90aCBhbm5vdGF0aW9ucyBpbmRpY2F0ZSB0aGF0IHRoZSBwb2ludGVyIGFyZ3VtZW50IHBvaW50cyBpbnRvIHRoZVxcbitjYWxsaW5nIHByb2dyYW0ncyBhcmVuYS4gVGhlIEpJVCByZWJhc2VzIHRoZSB2YWx1ZSBhdCB0aGUgY2FsbCBzaXRlIHNvXFxuK3RoZSBrZnVuYyByZWNlaXZlcyBhIGRpcmVjdGx5IGRlcmVmZXJlbmNlYWJsZSBrZXJuZWwgYWRkcmVzcywgc3ViamVjdCB0b1xcbit0aGUgYWNjZXNzIHJ1bGVzIGRlc2NyaWJlZCBpbiA6cmVmOmBCUEZfa2Z1bmNfYXJlbmFfYWNjZXNzYCAoYXQgbW9zdFxcbitgYEdVQVJEX1NaIC8gMmBgLCAzMiBLaUIsIHBhc3QgdGhlIHBvaW50ZXIgaW4gYSBzaW5nbGUgdW5jaGVja2VkIGFjY2VzcykuXFxuK1xcbitXaXRoIGBgX19hcmVuYWBgIHRoZSByZWJhc2UgaXMgdW5jb25kaXRpb25hbCBhbmQgdGhlIGFyZ3VtZW50IGlzIG5ldmVyXFxuK05VTEw6IGEgdmFsdWUgd2hvc2UgbG93ZXIgMzIgYml0cyBhcmUgemVybyBhcnJpdmVzIGFzIHRoZSBhcmVuYSBiYXNlXFxuK2FkZHJlc3MgKGFyZW5hIG9mZnNldCAwKS4gVGhlIGtmdW5jIG11c3Qgbm90IGNoZWNrIHRoZSBhcmd1bWVudCBmb3IgTlVMTC5cXG4rV2l0aCBgYF9fYXJlbmFfX251bGxhYmxlYGAgc3VjaCBhIHZhbHVlIGFycml2ZXMgYXMgTlVMTCBpbnN0ZWFkIGFuZCB0aGVcXG4ra2Z1bmMgbXVzdCBjaGVjayBiZWZvcmUgZGVyZWZlcmVuY2luZy5cXG4rXFxuK0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxcbitcXG4rICAgICAgICBfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2Nlc3NfaXRlbShzdHJ1Y3QgaXRlbSAqaXRlbV9fYXJlbmEpXFxuKyAgICAgICAge1xcbisgICAgICAgIC4uLlxcbisgICAgICAgIH1cXG4rXFxuK0NhbGxpbmcgc3VjaCBhIGtmdW5jIHJlcXVpcmVzIHRoZSBwcm9ncmFtIHRvIHVzZSBhbiBhcmVuYSBtYXAgYW5kIGEgSklUIHdpdGhcXG4rYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxcbitwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xcbitub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cXG4rXFxuK1RoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcXG4rZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXFxuK2tlcm5lbCBjYWxsZXIgcGFzc2VzIHRoZSBrZXJuZWwgYXJlbmEgYWRkcmVzcyBhbmQgdGhlIHRyYW1wb2xpbmUgY29udmVydHNcXG4raXQgd2hpbGUgc2F2aW5nIHRoZSBhcmd1bWVudHMsIHNvIHRoZSBjYWxsYmFjayByZWNlaXZlcyBhbiBhcmVuYSBwb2ludGVyXFxuK2l0IGNhbiBkZXJlZmVyZW5jZSBkaXJlY3RseS4gV2l0aCBgYF9fYXJlbmFgYCB0aGUga2VybmVsIGNhbGxlciBtdXN0IG5vdFxcbitwYXNzIE5VTEwuIFdpdGggYGBfX2FyZW5hX19udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXFxuK0hvd2V2ZXIsIHRoZXJlIGlzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmUgdG8gdGhlIHZlcmlmaWVyIHRoYXQgc3VjaCBhIHBvaW50ZXIgaXNcXG4rbm9uLU5VTEwgYmVmb3JlIHVzZSwgaW4tbGluZSB3aXRoIGV4aXN0aW5nIHNlbWFudGljcyBvZiBhcmVuYSBwb2ludGVycyB1c2VkIGluXFxuK2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cXG4rXFxuIC4uIF9CUEZfa2Z1bmNfbm9kZWY6XFxuIFxcbiAyLjQgVXNpbmcgYW4gZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9uXFxuQEAgLTUxNSw2ICs1NTIsOCBAQCBJbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBzdWNoIHJlcXVpcmVtZW50cywgdGhlIHZlcmlmaWVyIHdpbGwgZW5mb3JjZSBzdHJpY3RcXG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXFxuIGJlaW5nIHN1ZmZpeGVkIHdpdGggYGBfX19pbml0YGAuXFxuIFxcbisuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcXG4rXFxuIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCAwMWU3Y2U1NjljMWVkLi41YzVjMzJhYmEyMzk2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0xNjc4LDYgKzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXFxuKyAqIHJOID0ga2Vybl92bV9zdGFydCArICh1MzIpck4sIHdpdGggUjEyIGhvbGRpbmcga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZVxcbisgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXNcXG4rICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcXG4rXFx0dTggKnByb2cgPSAqcHByb2c7XFxuK1xcdHU4ICpzdGFydCA9IHByb2c7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pO1xcbitcXHRpZiAoIWZtKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW5fdChpbnQsIGZtLVxcdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcXG4rXFx0XFx0dTggZmxhZ3MgPSBmbS1cXHUwMDNlYXJnX2ZsYWdzW2ldO1xcbitcXHRcXHR1MzIgcmVnID0gQlBGX1JFR18xICsgaTtcXG4rXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRSghYnBmX3Byb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdC8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqL1xcbitcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csIGZhbHNlLCByZWcsIHJlZyk7XFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XFxuK1xcdFxcdFxcdC8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovXFxuK1xcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xcbitcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCByZWcsIHJlZykpO1xcbitcXHRcXHRcXHRFTUlUMihYODZfSkUsIDMpO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIGFkZCByTiwgcjEyICovXFxuK1xcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcXG4rXFx0XFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xcbitcXHR9XFxuK1xcbitcXHQqcHByb2cgPSBwcm9nO1xcbitcXHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuIFxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuIHtcXG5AQCAtMjU4Myw2ICsyNjI3LDEyIEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmICghaW1tMzIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGJwZl9wcm9nLCBpbnNuLCBcXHUwMDI2cHJvZyk7XFxuK1xcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRcXHRpcCArPSBlcnI7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHByaXZfZnJhbWVfcHRyKSB7XFxuIFxcdFxcdFxcdFxcdHB1c2hfcjkoXFx1MDAyNnByb2cpO1xcbiBcXHRcXHRcXHRcXHRpcCArPSAyO1xcbkBAIC0yOTkzLDExICszMDQzLDM5IEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pXFxuIFxcdHJldHVybiBucl91c2VkX3JlZ3M7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXlcXG4rICogaW50byB0aGUgQlBGIGN0eCwgcmF4ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCkuIEEgbnVsbGFibGUgYXJnXFxuKyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0XFxuKyAqIHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlIHVwcGVyIGhhbGYsIHNvIHRoZSBzdG9yZWRcXG4rICogdmFsdWUgc2F0aXNmaWVzIHRoZSBKSVQgaW52YXJpYW50IGZvciBhcmVuYSBwb2ludGVyIHJlZ2lzdGVycy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGVtaXRfYXJlbmFfYXJnX2NvbnYodTggKipwcHJvZywgdTMyIHNyY19yZWcsIGJvb2wgbnVsbGFibGUsIHUzMiBiYXNlX2xvKVxcbit7XFxuK1xcdHU4ICpwcm9nID0gKnBwcm9nO1xcbitcXG4rXFx0aWYgKG51bGxhYmxlKSB7XFxuK1xcdFxcdGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMClcXG4rXFx0XFx0XFx0ZW1pdF9tb3ZfcmVnKFxcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xcbitcXHRcXHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXFxuK1xcdFxcdEVNSVQzKDB4NDgsIDB4ODUsIDB4QzApO1xcbitcXHRcXHRFTUlUMihYODZfSkUsIDUpO1xcbitcXHR9IGVsc2UgaWYgKHNyY19yZWcgIT0gQlBGX1JFR18wKSB7XFxuK1xcdFxcdGVtaXRfbW92X3JlZyhcXHUwMDI2cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XFxuK1xcdH1cXG4rXFx0Lyogc3ViIGVheCwgYmFzZV9sbyAqL1xcbitcXHRFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTtcXG4rXFxuK1xcdCpwcHJvZyA9IHByb2c7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4tXFx0XFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXFxuK1xcdFxcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxcbitcXHRcXHQgICAgICB1NjQgYXJlbmFfYmFzZSlcXG4ge1xcbiBcXHRpbnQgYXJnX3JlZ3MsIGZpcnN0X29mZiA9IDAsIG5yX3JlZ3MgPSAwLCBucl9zdGFja19zbG90cyA9IDA7XFxuIFxcdGJvb2wgdXNlX2ptcCA9IGJwZl90cmFtcG9saW5lX3VzZV9qbXAoZmxhZ3MpO1xcbitcXHRpbnQgc3RhY2tfYXJnc19vZmYgPSAodXNlX2ptcCB8fCAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkpID8gMTYgOiAyNDtcXG4gXFx0aW50IGksIGo7XFxuIFxcbiBcXHQvKiBTdG9yZSBmdW5jdGlvbiBhcmd1bWVudHMgdG8gc3RhY2suXFxuQEAgLTMwMDYsNiArMzA4NCw5IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0ICogbW92IFFXT1JEIFBUUiBbcmJwLTB4OF0scnNpXFxuIFxcdCAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWluX3QoaW50LCBtLVxcdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfQVJHUyk7IGkrKykge1xcbitcXHRcXHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXFx1MDAyNlxcdTAwMjYgKG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcXG4rXFx0XFx0Ym9vbCBudWxsYWJsZSA9IG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXG4gXFx0XFx0YXJnX3JlZ3MgPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDg7XFxuIFxcbiBcXHRcXHQvKiBBY2NvcmRpbmcgdG8gdGhlIHJlc2VhcmNoIG9mIFlvbmdob25nLCBzdHJ1Y3QgbWVtYmVyc1xcbkBAIC0zMDI5LDE2ICszMTEwLDE5IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0XFx0XFx0LyogY29weSBmdW5jdGlvbiBhcmd1bWVudHMgZnJvbSBvcmlnaW4gc3RhY2sgZnJhbWVcXG4gXFx0XFx0XFx0ICogaW50byBjdXJyZW50IHN0YWNrIGZyYW1lLlxcbiBcXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBUaGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXJndW1lbnRzIG9uLXN0YWNrXFxuLVxcdFxcdFxcdCAqIGlzOlxcbi1cXHRcXHRcXHQgKiAgIHJicCArIDgocHVzaCByYnApICtcXG4tXFx0XFx0XFx0ICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSArXFxuLVxcdFxcdFxcdCAqICAgOChyZXR1cm4gYWRkciBvZiB0aGUgY2FsbGVyKVxcbi1cXHRcXHRcXHQgKiB3aGljaCBtZWFuczogcmJwICsgMjRcXG4rXFx0XFx0XFx0ICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwXFxuK1xcdFxcdFxcdCAqIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3NlczogdHdvIHJldHVybiBhZGRyZXNzZXNcXG4rXFx0XFx0XFx0ICogKG9yaWdpbiBjYWxsIGFuZCBjYWxsZXIpIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXNcXG4rXFx0XFx0XFx0ICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICsgMjQsIGFuZFxcbitcXHRcXHRcXHQgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3JcXG4rXFx0XFx0XFx0ICogY2FsbGVkIGluZGlyZWN0bHksIHNvIHJicCArIDE2LlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcXG4gXFx0XFx0XFx0XFx0ZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsXFxuLVxcdFxcdFxcdFxcdFxcdCBucl9zdGFja19zbG90cyAqIDggKyAxNiArICghdXNlX2ptcCkgKiA4KTtcXG4rXFx0XFx0XFx0XFx0XFx0IG5yX3N0YWNrX3Nsb3RzICogOCArIHN0YWNrX2FyZ3Nfb2ZmKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGFyZW5hX2FyZylcXG4rXFx0XFx0XFx0XFx0XFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBCUEZfUkVHXzAsIG51bGxhYmxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHUzMilhcmVuYV9iYXNlKTtcXG4gXFx0XFx0XFx0XFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsXFxuIFxcdFxcdFxcdFxcdFxcdCAtc3RhY2tfc2l6ZSk7XFxuIFxcbkBAIC0zMDU5LDkgKzMxNDMsMTMgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxcbiBcXG4gXFx0XFx0XFx0LyogY29weSB0aGUgYXJndW1lbnRzIGZyb20gcmVncyBpbnRvIHN0YWNrICovXFxuIFxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBhcmdfcmVnczsgaisrKSB7XFxuLVxcdFxcdFxcdFxcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCxcXG4tXFx0XFx0XFx0XFx0XFx0IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzLFxcbi1cXHRcXHRcXHRcXHRcXHQgLXN0YWNrX3NpemUpO1xcbitcXHRcXHRcXHRcXHR1MzIgc3JjID0gbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSArIG5yX3JlZ3M7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAoYXJlbmFfYXJnKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgc3JjLCBudWxsYWJsZSwgKHUzMilhcmVuYV9iYXNlKTtcXG4rXFx0XFx0XFx0XFx0XFx0c3JjID0gQlBGX1JFR18wO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgc3JjLCAtc3RhY2tfc2l6ZSk7XFxuIFxcdFxcdFxcdFxcdHN0YWNrX3NpemUgLT0gODtcXG4gXFx0XFx0XFx0XFx0bnJfcmVncysrO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTMzNTcsNiArMzQ0NSw3IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXFxuIFxcdHZvaWQgKm9yaWdfY2FsbCA9IGZ1bmNfYWRkcjtcXG4gXFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7XFxuIFxcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xcbitcXHR1NjQgYXJlbmFfYmFzZTtcXG4gXFx0dTY0IGZ1bmNfbWV0YTtcXG4gXFx0dTggKnByb2c7XFxuIFxcdGJvb2wgc2F2ZV9yZXQ7XFxuQEAgLTMzNjksNiArMzQ1OCw4IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXFxuIFxcdFdBUk5fT05fT05DRSgoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAoZmxhZ3MgXFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XFxuIFxcbitcXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbS1cXHUwMDNlbnJfYXJnczsgaSsrKVxcbiBcXHRcXHRucl9yZWdzICs9IChtLVxcdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XFxuIFxcbkBAIC0zNTAzLDcgKzM1OTQsNyBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxcbiBcXHRcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFxcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1pcF9vZmYsIChsb25nKWZ1bmNfYWRkcik7XFxuIFxcdH1cXG4gXFxuLVxcdHNhdmVfYXJncyhtLCBcXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyk7XFxuK1xcdHNhdmVfYXJncyhtLCBcXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncywgYXJlbmFfYmFzZSk7XFxuIFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcXG4gXFx0XFx0LyogYXJnMTogbW92IHJkaSwgaW0gKi9cXG5AQCAtMzU0NSw3ICszNjM2LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xcbiBcXHRcXHRyZXN0b3JlX3JlZ3MobSwgXFx1MDAyNnByb2csIHJlZ3Nfb2ZmKTtcXG4tXFx0XFx0c2F2ZV9hcmdzKG0sIFxcdTAwMjZwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncyk7XFxuK1xcdFxcdHNhdmVfYXJncyhtLCBcXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MsIDApO1xcbiBcXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCkge1xcbiBcXHRcXHRcXHQvKiBCZWZvcmUgY2FsbGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIGxvYWQgdGhlXFxuQEAgLTQwNDYsNiArNDEzNywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdGlmICh0ZXh0X3Bva2VfY29weShkc3QsIHNyYywgbGVuKSA9PSBOVUxMKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLjY4ZmY2Njc4N2FlMWQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMTIxMCw2ICsxMjEwLDEyIEBAIHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkIHtcXG4gLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi9cXG4gI2RlZmluZSBCVEZfRk1PREVMX1NJR05FRF9BUkdcXHRcXHRCSVQoMSlcXG4gXFxuKy8qIFRoZSBhcmd1bWVudCBpcyBhbiBhcmVuYSBwb2ludGVyLiAqL1xcbisjZGVmaW5lIEJURl9GTU9ERUxfQVJFTkFfQVJHXFx0XFx0QklUKDIpXFxuK1xcbisvKiBUaGUgYXJndW1lbnQgaXMgbnVsbGFibGUuICovXFxuKyNkZWZpbmUgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkdcXHRcXHRCSVQoMylcXG4rXFxuIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7XFxuIFxcdHU4IHJldF9zaXplO1xcbiBcXHR1OCByZXRfZmxhZ3M7XFxuQEAgLTEyODMsNiArMTI4OSwxNSBAQCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzIHtcXG4gXFx0aW50IG5yX25vZGVzO1xcbiB9O1xcbiBcXG4rLypcXG4rICogVGhlIGFyZW5hIGJhc2UgYWdhaW5zdCB3aGljaCBhIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBjb252ZXJ0cyB0aGVcXG4rICogYXJndW1lbnRzIG1hcmtlZCB3aXRoIEJURl9GTU9ERUxfQVJFTkFfQVJHIHdoaWxlIHNhdmluZyB0aGVtIGludG8gdGhlIEJQRlxcbisgKiBjdHgsIGN0eFthcmddID0gKHUzMikoa2FkZHIgLSBrZXJuX3ZtX3N0YXJ0KS4gWmVybyB3aGVuIHRoZSB0cmFtcG9saW5lXFxuKyAqIGNvbnZlcnRzIG5vdGhpbmcuXFxuKyAqL1xcbit1NjQgYnBmX3RyYW1wX2FyZW5hX2Jhc2UoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcbitcXHRcXHRcXHQgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MpO1xcbitcXG4gc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4O1xcbiBcXG4gLyogRGlmZmVyZW50IHVzZSBjYXNlcyBmb3IgQlBGIHRyYW1wb2xpbmU6XFxuQEAgLTIzNTIsNiArMjM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9mc2Vzc2lvbl9jb29raWVfY250KHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKm5vZGVzKVxcbiBcXG4gaW50IGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sIHUzMiBjbnQpO1xcbitib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfQ0dST1VQX0JQRikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX0xTTSlcXG4gaW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IGEyYTQwY2FjYTBhMGUuLmE5NTU1ZDE3ZmQ4ZWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtMTE3Nyw4ICsxMTc3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3VucGFja19rZXkodTY0IGtleSwgdTMyICpvYmpfaWQsIHUzMiAqYnRmX2lkKVxcbiBcXHRcXHQqYnRmX2lkID0ga2V5IFxcdTAwMjYgMHg3RkZGRkZGRjtcXG4gfVxcbiBcXG4taW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XFxuK2ludCBicGZfcHJlcGFyZV9idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbitcXHRcXHRcXHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcXG4gaW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uMzZjZTM0MDNmZTU5OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbkBAIC0xMTgzLDYgKzExODMsNyBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTtcXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpO1xcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpO1xcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyh2b2lkKTtcXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG5pbmRleCA0ZTdhNDhjMDJiZTVjLi5jZWQ3YjE4MjQ2YTk2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xcbisrKyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xcbkBAIC0xNDcsNiArMTQ3LDggQEAgdm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKVxcbiBcXG4gI2RlZmluZSBNQVlCRV9OVUxMX1NVRkZJWCBcXFwiX19udWxsYWJsZVxcXCJcXG4gI2RlZmluZSBSRUZDT1VOVEVEX1NVRkZJWCBcXFwiX19yZWZcXFwiXFxuKyNkZWZpbmUgQVJFTkFfU1VGRklYIFxcXCJfX2FyZW5hXFxcIlxcbisjZGVmaW5lIEFSRU5BX01BWUJFX05VTExfU1VGRklYIFxcXCJfX2FyZW5hX19udWxsYWJsZVxcXCJcXG4gXFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxcbiAgKiBzdHJ1Y3Rfb3BzIHR5cGUuXFxuQEAgLTE1OSw3ICsxNjEsNyBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXFxuICAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlc1xcbiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZVxcbiAgKiBCUEYgc3RydWN0X29wcyBwcm9ncmFtIGFzc2lnbmVkIHRvIHRoZSBtZW1iZXIuIEhlcmUsIHdlIG9ubHkgY2FyZSBhYm91dFxcbi0gKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLlxcbisgKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLCBfX3JlZiBvciBfX2FyZW5hLlxcbiAgKlxcbiAgKiBUaGUgYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCBpcyBldmVudHVhbGx5IGFzc2lnbmVkIHRvXFxuICAqIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvIG9mIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW1zIGFuZCBwYXNzZWQgdG8gdGhlXFxuQEAgLTE3MiwxMCArMTc0LDEyIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpzdF9vcHNfbmFtZSxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm1lbWJlcl9uYW1lLFxcbiBcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jX3Byb3RvLCB2b2lkICpzdHViX2Z1bmNfYWRkcixcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbW9kZWwsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3R1Yl9mdW5jX3Byb3RvLCAqcG9pbnRlZF90eXBlO1xcbi1cXHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZTtcXG4rXFx0Ym9vbCBpc19udWxsYWJsZSA9IGZhbHNlLCBpc19yZWZjb3VudGVkID0gZmFsc2UsIGlzX2FyZW5hID0gZmFsc2U7XFxuK1xcdGJvb2wgaXNfYXJlbmFfbnVsbGFibGUgPSBmYWxzZTtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc3R1Yl9hcmdzLCAqYXJncztcXG4gXFx0c3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgKmluZm9fYnVmO1xcbiBcXHR1MzIgbmFyZ3MsIGFyZ19ubywgaW5mb19jbnQgPSAwO1xcbkBAIC0yMjUsMjcgKzIyOSwzNSBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHQvKiBQcmVwYXJlIGluZm8gZm9yIGV2ZXJ5IG51bGxhYmxlIGFyZ3VtZW50ICovXFxuIFxcdGluZm8gPSBpbmZvX2J1ZjtcXG4gXFx0Zm9yIChhcmdfbm8gPSAwOyBhcmdfbm8gXFx1MDAzYyBuYXJnczsgYXJnX25vKyspIHtcXG4tXFx0XFx0LyogU2tpcCBhcmd1bWVudHMgdGhhdCBpcyBub3Qgc3VmZml4ZWQgd2l0aFxcbi1cXHRcXHQgKiBcXFwiX19udWxsYWJsZSBvciBfX3JlZlxcXCIuXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNraXAgYXJndW1lbnRzIHRoYXQgYXJlIG5vdCBzdWZmaXhlZCB3aXRoIFxcXCJfX2FyZW5hX19udWxsYWJsZVxcXCIsXFxuK1xcdFxcdCAqIFxcXCJfX2FyZW5hXFxcIiwgXFxcIl9fbnVsbGFibGVcXFwiLCBvciBcXFwiX19yZWZcXFwiLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aXNfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1BWUJFX05VTExfU1VGRklYKTtcXG4rXFx0XFx0aXNfYXJlbmFfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCk7XFxuK1xcdFxcdGlzX2FyZW5hID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFxcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSwgQVJFTkFfU1VGRklYKTtcXG4rXFx0XFx0aXNfbnVsbGFibGUgPSAhaXNfYXJlbmFfbnVsbGFibGUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFxcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSwgTUFZQkVfTlVMTF9TVUZGSVgpO1xcbiBcXHRcXHRpc19yZWZjb3VudGVkID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFxcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFJFRkNPVU5URURfU1VGRklYKTtcXG4gXFxuLVxcdFxcdGlmIChpc19udWxsYWJsZSlcXG4rXFx0XFx0aWYgKGlzX2FyZW5hX251bGxhYmxlKVxcbitcXHRcXHRcXHRzdWZmaXggPSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWDtcXG4rXFx0XFx0ZWxzZSBpZiAoaXNfYXJlbmEpXFxuK1xcdFxcdFxcdHN1ZmZpeCA9IEFSRU5BX1NVRkZJWDtcXG4rXFx0XFx0ZWxzZSBpZiAoaXNfbnVsbGFibGUpXFxuIFxcdFxcdFxcdHN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYO1xcbiBcXHRcXHRlbHNlIGlmIChpc19yZWZjb3VudGVkKVxcbiBcXHRcXHRcXHRzdWZmaXggPSBSRUZDT1VOVEVEX1NVRkZJWDtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdC8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovXFxuLVxcdFxcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0ZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGFyZ3NbYXJnX25vXS50eXBlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmFyZ19idGZfaWQpO1xcbi1cXHRcXHRpZiAoIXBvaW50ZWRfdHlwZSB8fFxcbi1cXHRcXHQgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0LCBvciBhbnkgcG9pbnRlciBmb3IgX19hcmVuYSBvclxcbitcXHRcXHQgKiBfX2FyZW5hX19udWxsYWJsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0ZiwgYXJnc1thcmdfbm9dLnR5cGUsIFxcdTAwMjZhcmdfYnRmX2lkKTtcXG4rXFx0XFx0aWYgKCFwb2ludGVkX3R5cGUgfHwgKCFpc19hcmVuYSBcXHUwMDI2XFx1MDAyNiAhaXNfYXJlbmFfbnVsbGFibGUgXFx1MDAyNlxcdTAwMjYgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSkge1xcbiBcXHRcXHRcXHRwcl93YXJuKFxcXCJzdHViIGZ1bmN0aW9uICVzIGhhcyAlcyB0YWdnaW5nIHRvIGFuIHVuc3VwcG9ydGVkIHR5cGVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHN0dWJfZm5hbWUsIHN1ZmZpeCk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG5AQCAtMjY4LDcgKzI4MCwxOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRpbmZvLVxcdTAwM2VidGZfaWQgPSBhcmdfYnRmX2lkO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VidGYgPSBidGY7XFxuIFxcdFxcdGluZm8tXFx1MDAzZW9mZnNldCA9IG9mZnNldDtcXG4tXFx0XFx0aWYgKGlzX251bGxhYmxlKSB7XFxuK1xcdFxcdGlmIChpc19hcmVuYSB8fCBpc19hcmVuYV9udWxsYWJsZSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLFxcbitcXHRcXHRcXHQgKiBQVFJfVE9fQVJFTkEgZW5jb21wYXNzZXMgcG90ZW50aWFsIE5VTEwgdmFsdWVzLCBidXRcXG4rXFx0XFx0XFx0ICogd2UgZG8gbm90IGZvcmNlIHRoZSBwcm9ncmFtIHRvIGNoZWNrIGl0LCBvciBtYWludGFpblxcbitcXHRcXHRcXHQgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fQVJFTkE7XFxuK1xcdFxcdFxcdG1vZGVsLVxcdTAwM2VhcmdfZmxhZ3NbYXJnX25vXSB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcXG4rXFx0XFx0XFx0aWYgKGlzX2FyZW5hX251bGxhYmxlKVxcbitcXHRcXHRcXHRcXHRtb2RlbC1cXHUwMDNlYXJnX2ZsYWdzW2FyZ19ub10gfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XFxuK1xcdFxcdH0gZWxzZSBpZiAoaXNfbnVsbGFibGUpIHtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQgfCBQVFJfTUFZQkVfTlVMTDtcXG4gXFx0XFx0fSBlbHNlIGlmIChpc19yZWZjb3VudGVkKSB7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZXJlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEO1xcbkBAIC00NjAsNiArNDgzLDcgQEAgaW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXFxuIFxcdFxcdHN0dWJfZnVuY19hZGRyID0gKih2b2lkICoqKShzdF9vcHMtXFx1MDAzZWNmaV9zdHVicyArIG1vZmYpO1xcbiBcXHRcXHRlcnIgPSBwcmVwYXJlX2FyZ19pbmZvKGJ0Ziwgc3Rfb3BzLVxcdTAwM2VuYW1lLCBtbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGZ1bmNfcHJvdG8sIHN0dWJfZnVuY19hZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnN0X29wcy1cXHUwMDNlZnVuY19tb2RlbHNbaV0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBhcmdfaW5mbyArIGkpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGVycm91dDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcXG5pbmRleCA0MjQxNDYzM2NmMjYzLi42NjA2MTg3ZWQ0ZjQzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXFxuQEAgLTY5NjMsMTUgKzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBjaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCBvciBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCAqL1xcbitcXHQvKlxcbitcXHQgKiBDaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCwgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgb3JcXG4rXFx0ICogUFRSX1RPX0FSRU5BIChib3RoIG51bGxhYmxlIGFuZCBub24tbnVsbGFibGUgY2FzZXMpLlxcbitcXHQgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkrKykge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSBcXHUwMDI2cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjdHhfYXJnX2luZm9baV07XFxuIFxcdFxcdHUzMiB0eXBlLCBmbGFnO1xcbiBcXG4gXFx0XFx0dHlwZSA9IGJhc2VfdHlwZShjdHhfYXJnX2luZm8tXFx1MDAzZXJlZ190eXBlKTtcXG4gXFx0XFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXFx1MDAzZXJlZ190eXBlKTtcXG4tXFx0XFx0aWYgKGN0eF9hcmdfaW5mby1cXHUwMDNlb2Zmc2V0ID09IG9mZiBcXHUwMDI2XFx1MDAyNiB0eXBlID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChmbGFnIFxcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XFxuK1xcdFxcdGlmIChjdHhfYXJnX2luZm8tXFx1MDAzZW9mZnNldCA9PSBvZmYgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICh0eXBlID09IFBUUl9UT19BUkVOQSB8fFxcbitcXHRcXHQgICAgICh0eXBlID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjYgKGZsYWcgXFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpKSkge1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VyZWdfdHlwZSA9IGN0eF9hcmdfaW5mby1cXHUwMDNlcmVnX3R5cGU7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuQEAgLTc1MzksNiArNzU0MywyMiBAQCBzdGF0aWMgdTggX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxcbiBcXHRyZXR1cm4gZmxhZ3M7XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcXG4re1xcbitcXHR1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xcbitcXG4rXFx0aWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX2FyZW5hX19udWxsYWJsZVxcXCIpKVxcbitcXHRcXHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRyB8IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXHRlbHNlIGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYVxcXCIpKVxcbitcXHRcXHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcXG4rXFx0ZWxzZSBpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9fbnVsbGFibGVcXFwiKSlcXG4rXFx0XFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XFxuK1xcbitcXHRyZXR1cm4gZmxhZ3M7XFxuK31cXG4rXFxuIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLFxcbkBAIC03NjA0LDcgKzc2MjQsNyBAQCBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRtLVxcdTAwM2Vhcmdfc2l6ZVtpXSA9IHJldDtcXG4tXFx0XFx0bS1cXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3ModCk7XFxuK1xcdFxcdG0tXFx1MDAzZWFyZ19mbGFnc1tpXSA9IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoYnRmLCBcXHUwMDI2YXJnc1tpXSwgdCk7XFxuIFxcdH1cXG4gXFx0bS1cXHUwMDNlbnJfYXJncyA9IG5hcmdzO1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jaGVja19idGYuYyBiL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcXG5pbmRleCA5M2JlYmU2ZmUxMmU3Li4wZThiM2NjYzdhNWI5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jXFxuQEAgLTI4LDkgKzI4LDkgQEAgc3RhdGljIGludCBjaGVja19hYm5vcm1hbF9yZXR1cm4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gI2RlZmluZSBNSU5fQlBGX0ZVTkNJTkZPX1NJWkVcXHQ4XFxuICNkZWZpbmUgTUFYX0ZVTkNJTkZPX1JFQ19TSVpFXFx0MjUyXFxuIFxcbi1zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdFxcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi1cXHRcXHRcXHRcXHRicGZwdHJfdCB1YXR0cilcXG4rc3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuK1xcdFxcdFxcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4rXFx0XFx0XFx0ICAgIGJwZnB0cl90IHVhdHRyKVxcbiB7XFxuIFxcdHUzMiBrcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGUsICpmdW5jX3Byb3RvO1xcbkBAIC00MDcsOSArNDA3LDkgQEAgc3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4taW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi1cXHRcXHRcXHQgICAgIGJwZnB0cl90IHVhdHRyKVxcbitpbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4rXFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbitcXHRcXHRcXHQgYnBmcHRyX3QgdWF0dHIpXFxuIHtcXG4gXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC00MjksNyArNDI5LDcgQEAgaW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHR9XFxuIFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VidGYgPSBidGY7XFxuIFxcbi1cXHRlcnIgPSBjaGVja19idGZfZnVuY19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTtcXG4rXFx0ZXJyID0gcHJlcGFyZV9idGZfZnVuYyhlbnYsIGF0dHIsIHVhdHRyKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcXG5pbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXFxuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcXG5AQCAtMzMwOCw2ICszMzA4LDExIEBAIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK2Jvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbmluZGV4IGVkNzk5OWFkNmM2NmMuLmUwN2FmMzVlZDA0MDIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbkBAIC01MjksNiArNTI5LDM2IEBAIGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hXFxuIFxcdHJldHVybiB0bm9kZXM7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFRoZSBhcmVuYSBiYXNlIGFnYWluc3Qgd2hpY2ggc2F2ZV9hcmdzKCkgY29udmVydHMgdGhlIGFyZ3VtZW50cyBtYXJrZWRcXG4rICogd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRy4gT25seSB0aGUgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lXFxuKyAqIGNvbnZlcnRzOiBpdCBkaXNwYXRjaGVzIHRvIGEgc2luZ2xlIHByb2cgd2hvc2UgYXJlbmEgaXMga25vd24gYXRcXG4rICogZ2VuZXJhdGlvbiB0aW1lLiBSZXR1cm4gMCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29udmVydC5cXG4rICovXFxuK3U2NCBicGZfdHJhbXBfYXJlbmFfYmFzZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHUzMiBmbGFncylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgfHxcXG4rXFx0ICAgIHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ucl9ub2RlcyAhPSAxKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtLVxcdTAwM2Vucl9hcmdzOyBpKyspXFxuK1xcdFxcdGlmIChtLVxcdTAwM2VhcmdfZmxhZ3NbaV0gXFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdGlmIChpID09IG0tXFx1MDAzZW5yX2FyZ3MpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVmVyaWZpY2F0aW9uIHJlamVjdHMgYW4gYXJlbmEgYXJndW1lbnQgd2l0aG91dCBhbiBhcmVuYS4gKi9cXG4rXFx0cHJvZyA9IHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ub2Rlc1swXS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZztcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhcmVuYSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2ZyZWUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pXFxuIHtcXG4gXFx0YnBmX2ltYWdlX2tzeW1fZGVsKFxcdTAwMjZpbS1cXHUwMDNla3N5bSk7XFxuQEAgLTkyMCw2ICs5NTAsMTMgQEAgc3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuIFxcdGludCBjbnQgPSAwLCBpO1xcbiBcXG4gXFx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVxcdTAwM2VsaW5rLVxcdTAwM2Vwcm9nKTtcXG4rXFx0LypcXG4rXFx0ICogQXJlbmEgY3R4IGFyZ3MgYXJlIGNvbnZlcnRlZCBvbmx5IGJ5IHN0cnVjdF9vcHMgaW5kaXJlY3RcXG4rXFx0ICogdHJhbXBvbGluZXMuIFRoZXkgbXVzdCBuZXZlciBiZSBhdHRhY2hlZCB0byBhIGdlbmVyaWMgdHJhbXBvbGluZS5cXG4rXFx0ICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcobm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZykpKVxcbitcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXG4gXFx0aWYgKHRyLVxcdTAwM2VleHRlbnNpb25fcHJvZylcXG4gXFx0XFx0LyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuXFxuIFxcdFxcdCAqIGNhbm5vdCBvdmVyd3JpdGUgZXh0ZW5zaW9uIHByb2cgZWl0aGVyLlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCAwOTU4OGI3YjA4YjBhLi44M2VkZjQxYzdmZTljIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0yODQyLDcgKzI4NDIsNyBAQCBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4rc3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbiBcXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuLCBleF9jYl9pbnNuO1xcbkBAIC0yODU0LDggKzI4NTQsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xcbi1cXHRcXHRpZiAoIWJwZl9wc2V1ZG9fZnVuYyhpbnNuKSBcXHUwMDI2XFx1MDAyNiAhYnBmX3BzZXVkb19jYWxsKGluc24pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pKVxcbitcXHRcXHRpZiAoIWJwZl9wc2V1ZG9fZnVuYyhpbnNuKSBcXHUwMDI2XFx1MDAyNiAhYnBmX3BzZXVkb19jYWxsKGluc24pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmICghZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbkBAIC0yODYzLDExICsyODYyLDcgQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSB8fCBicGZfcHNldWRvX2NhbGwoaW5zbikpXFxuLVxcdFxcdFxcdHJldCA9IGFkZF9zdWJwcm9nKGVudiwgaSArIGluc24tXFx1MDAzZWltbSArIDEpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJldCA9IGJwZl9hZGRfa2Z1bmNfY2FsbChlbnYsIGluc24tXFx1MDAzZWltbSwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4tXFxuK1xcdFxcdHJldCA9IGFkZF9zdWJwcm9nKGVudiwgaSArIGluc24tXFx1MDAzZWltbSArIDEpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbkBAIC0yOTA1LDYgKzI5MDAsMjggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYWRkX2tmdW5jcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbitcXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xcbitcXHRcXHRpZiAoIWJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoIWVudi1cXHUwMDNlYnBmX2NhcGFibGUpIHtcXG4rXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgZm9yIENBUF9CUEYgYW5kIENBUF9TWVNfQURNSU5cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBicGZfYWRkX2tmdW5jX2NhbGwoZW52LCBpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XFxuQEAgLTEwODkyLDkgKzEwOTA5LDE2IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmXFxuIFxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19yZWZjb3VudGVkX2twdHJcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbit7XFxuK1xcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYV9fbnVsbGFibGVcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX251bGxhYmxlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbiB7XFxuLVxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19udWxsYWJsZVxcXCIpO1xcbitcXHRyZXR1cm4gIWlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShidGYsIGFyZykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX251bGxhYmxlXFxcIik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19ub25vd25fYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG5AQCAtMTA5MTIsNiArMTA5MzYsMTIgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2lycV9mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbVxcbiBcXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9faXJxX2ZsYWdcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FyZW5hKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbit7XFxuK1xcdHJldHVybiBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoYnRmLCBhcmcpIHx8XFxuK1xcdCAgICAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYVxcXCIpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKm5hbWUpXFxuQEAgLTExMTMyLDYgKzExMTYyLDcgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xcbiBcXHRLRl9BUkdfUFRSX1RPX0lSUV9GTEFHLFxcbiBcXHRLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssXFxuIFxcdEtGX0FSR19QVFJfVE9fVEFTS19XT1JLLFxcbitcXHRLRl9BUkdfUFRSX1RPX0FSRU5BLFxcbiB9O1xcbiBcXG4gZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbkBAIC0xMTQxNyw3ICsxMTQ0OCw2IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuIFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4tXFxuIFxcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cXHUwMDNlYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gXFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtXFx1MDAzZWJ0ZiwgcmVmX3QtXFx1MDAzZW5hbWVfb2ZmKTtcXG4gXFxuQEAgLTExNDY2LDcgKzExNDk2LDI5IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuIFxcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xcbiBcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbiBcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XFxuLVxcdGVsc2UgaWYgKGFyZyArIDEgXFx1MDAzYyBuYXJncyBcXHUwMDI2XFx1MDAyNlxcbitcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfYXJlbmEobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSkge1xcbitcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VmdW5jX25hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmICghZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXHRcXFwiJXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocmVnX2Zyb21fYXJnbm8oYXJnbm8pIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEJvdGggc3VmZml4ZXMgYWNjZXB0IGEgY29uc3RhbnQgemVyby4gVGhlIGZ1bmN0aW9uIG1vZGVsIGRldGVybWluZXNcXG4rXFx0XFx0ICogd2hldGhlciB0aGUgSklUIHJlYmFzZXMgaXQgdG8gdGhlIGFyZW5hIGJhc2Ugb3IgcHJlc2VydmVzIE5VTEwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQVJFTkEgfCBQVFJfTUFZQkVfTlVMTDtcXG4rXFx0fSBlbHNlIGlmIChhcmcgKyAxIFxcdTAwM2MgbmFyZ3MgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkgfHxcXG4gXFx0XFx0ICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkpKSB7XFxuIFxcdFxcdGlmICghYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgXFx1MDAyNlxcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMTIxNjAsNyArMTIyMTIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xcbiBcXG4gXFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSBcXHUwMDI2XFx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbaV0pKSB7XFxuK1xcdFxcdCAgICAhdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbkBAIC0xMjIxMyw2ICsxMjI2NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19JUlFfRkxBRzpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s6XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19BUkVOQTpcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19EWU5QVFI6XFxuIFxcdFxcdFxcdGFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7XFxuQEAgLTEyMjc5LDYgKzEyMzMyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZXJldF9idGZfaWQgID0gcmV0O1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQVJFTkE6XFxuK1xcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgIT0gUFRSX1RPX0FSRU5BIFxcdTAwMjZcXHUwMDI2IHJlZy1cXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ6XFxuIFxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MpKSB7XFxuIFxcdFxcdFxcdFxcdGlmICghaXNfYnBmX29ial9kcm9wX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpKSB7XFxuQEAgLTE4ODA4LDEwICsxODg2OCwyMSBAQCBpbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXHRyZXR1cm4gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjdHhfYXJnX2luZm8gPyAwIDogLUVOT01FTTtcXG4gfVxcbiBcXG4rYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjdHhfYXJnX2luZm9fc2l6ZTsgaSsrKVxcbitcXHRcXHRpZiAoYmFzZV90eXBlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvW2ldLnJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICpmdW5jX3Byb3RvO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2M7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuQEAgLTE4ODkwLDEwICsxODk2MSwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3Rfb3BzX2Rlc2MtXFx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudDsgaSsrKSB7XFxuLVxcdFxcdGlmIChzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mb1tpXS5yZWZjb3VudGVkKSB7XFxuK1xcdGFyZ19pbmZvID0gXFx1MDAyNnN0X29wc19kZXNjLVxcdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZ19pbmZvLVxcdTAwM2VjbnQ7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXFx1MDAyNmFyZ19pbmZvLVxcdTAwM2VpbmZvW2ldO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXJlZmNvdW50ZWQpXFxuIFxcdFxcdFxcdGhhc19yZWZjb3VudGVkX2FyZyA9IHRydWU7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoYmFzZV90eXBlKGluZm8tXFx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcXG4rXFx0XFx0XFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiYXJlbmEgYXJndW1lbnQgb2YgJXMgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0bW5hbWUpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTE4OTE0LDggKzE4OTk4LDcgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcXG4gXFx0ZW52LVxcdTAwM2VvcHMgPSBzdF9vcHMtXFx1MDAzZXZlcmlmaWVyX29wcztcXG4gXFxuLVxcdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mbyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uY250KTtcXG4rXFx0cmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIGFyZ19pbmZvLVxcdTAwM2VpbmZvLCBhcmdfaW5mby1cXHUwMDNlY250KTtcXG4gfVxcbiAjZGVmaW5lIFNFQ1VSSVRZX1BSRUZJWCBcXFwic2VjdXJpdHlfXFxcIlxcbiBcXG5AQCAtMTkxNzksNiArMTkyNjIsMTcgQEAgaW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuIFxcdFxcdFxcdGJwZl9sb2cobG9nLCBcXFwiU3VicHJvZyAlcyBkb2Vzbid0IGV4aXN0XFxcXG5cXFwiLCB0bmFtZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lIGNvbnZlcnRzIGFyZW5hIGFyZ3VtZW50c1xcbitcXHRcXHQgKiBiZWZvcmUgaW52b2tpbmcgaXRzIHByb2dyYW0uIEEgdHJhY2luZyBwcm9ncmFtIGF0dGFjaGVkIHRvIHRoZVxcbitcXHRcXHQgKiBtYWluIHByb2dyYW0gd291bGQgc2VlIHRoZSBjb252ZXJ0ZWQgb2Zmc2V0IGFzIGEgcmVndWxhciBCVEZcXG4rXFx0XFx0ICogcG9pbnRlci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChwcm9nX3RyYWNpbmcgXFx1MDAyNlxcdTAwMjYgc3VicHJvZyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyh0Z3RfcHJvZykpIHtcXG4rXFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJDYW5ub3QgdHJhY2UgYSB0YXJnZXQgd2l0aCBhcmVuYSBjb250ZXh0IGFyZ3VtZW50c1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAoYXV4LVxcdTAwM2VmdW5jIFxcdTAwMjZcXHUwMDI2IGF1eC1cXHUwMDNlZnVuY1tzdWJwcm9nXS1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fY2IpIHtcXG4gXFx0XFx0XFx0YnBmX2xvZyhsb2csXFxuIFxcdFxcdFxcdFxcdFxcXCIlcyBwcm9ncmFtcyBjYW5ub3QgYXR0YWNoIHRvIGV4Y2VwdGlvbiBjYWxsYmFja1xcXFxuXFxcIixcXG5AQCAtMjAyNjksMTEgKzIwMzYzLDEzIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZW52LVxcdTAwM2VleHBsb3JlZF9zdGF0ZXNbaV0pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZW52LVxcdTAwM2VmcmVlX2xpc3QpO1xcbiBcXG4tXFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xcbitcXHQvKiBQcmVwYXJlIEJURiBhbmQgZnVuY19pbmZvIG5lZWRlZCB0byBkaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMuICovXFxuK1xcdHJldCA9IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuIFxcbi1cXHRyZXQgPSBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoZW52KTtcXG4rXFx0LyogRGlzY292ZXIgYWxsIHN1YnByb2dyYW1zIGJlZm9yZSB2YWxpZGF0aW5nIHRoZWlyIGxheW91dCBhbmQgQlRGLiAqL1xcbitcXHRyZXQgPSBhZGRfc3VicHJvZ3MoZW52KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xcbiBcXG5AQCAtMjAyODEsMTQgKzIwMzc3LDIxIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuIFxcbitcXHQvKiBWYWxpZGF0ZSBCVEYgYWdhaW5zdCB0aGUgY29tcGxldGUgc3VicHJvZ3JhbSBsYXlvdXQgYW5kIGFwcGx5IENPLVJFLiAqL1xcbiBcXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4gXFxuK1xcdC8qIFZhbGlkYXRlIGluc3RydWN0aW9ucyBhbmQgcmVzb2x2ZSB0aGUgcHJvZ3JhbSdzIHJlZmVyZW5jZWQgcmVzb3VyY2VzLiAqL1xcbiBcXHRyZXQgPSBjaGVja19hbmRfcmVzb2x2ZV9pbnNucyhlbnYpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuIFxcbitcXHQvKiBCdWlsZCBrZnVuYyBwcm90b3R5cGVzIGFmdGVyIHJlc29sdmluZyBwcm9ncmFtIHJlc291cmNlcy4gKi9cXG4rXFx0cmV0ID0gYWRkX2tmdW5jcyhlbnYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuK1xcbiBcXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4KSkge1xcbiBcXHRcXHRyZXQgPSBicGZfcHJvZ19vZmZsb2FkX3ZlcmlmaWVyX3ByZXAoZW52LVxcdTAwM2Vwcm9nKTtcXG4gXFx0XFx0aWYgKHJldClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzIzZDcwN2M1NDNmYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbkBAIC0wLDAgKzEsNzQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInN0cnVjdF9vcHNfYXJlbmEuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFxcXCJcXG4rXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuKy8qXFxuKyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXFxuKyAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXJlbmFfYXJnKHZvaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG4rXFx0c3RydWN0IHN0cnVjdF9vcHNfYXJlbmEgKnNrZWw7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRza2VsID0gc3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bGluayA9IGJwZl9tYXBfX2F0dGFjaF9zdHJ1Y3Rfb3BzKHNrZWwtXFx1MDAzZW1hcHMudGVzdG1vZF9hcmVuYSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYXR0YWNoX3N0cnVjdF9vcHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy50cmlnZ2VyKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dG9wdHMpO1xcbitcXHRBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW5cXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXFxcInRyaWdnZXJfcmV0dmFsXFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXHRzdHJ1Y3Rfb3BzX2FyZW5hX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBBIHByb2dyYW0gd2l0aCBubyBhcmVuYSBjYW5ub3QgYXR0YWNoIHRvIGEgbWVtYmVyIHdpdGggYW4gX19hcmVuYVxcbisgKiBhcmd1bWVudC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGFyZW5hX2FyZ19mYWlsKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHN0cnVjdF9vcHNfYXJlbmFfZmFpbCAqc2tlbDtcXG4rXFxuK1xcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKEFTU0VSVF9FUlJfUFRSKHNrZWwsIFxcXCJzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3RydWN0X29wc19hcmVuYV9mYWlsX19kZXN0cm95KHNrZWwpO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rLypcXG4rICogU2VyaWFsaXplZCBiZWNhdXNlIGl0IGF0dGFjaGVzIHRoZSBzaW5nbGV0b24gYnBmX3Rlc3Rtb2Rfb3BzMywgd2hpY2hcXG4rICogdGVzdF9zdHJ1Y3Rfb3BzX3ByaXZhdGVfc3RhY2sgYWxzbyBhdHRhY2hlczsgcmVnaXN0ZXJpbmcgaXQgdHdpY2UgZmFpbHNcXG4rICogd2l0aCAtRUVYSVNULlxcbisgKi9cXG4rdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxcbitcXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hXFxuK1xcdCAqIGFyZ3VtZW50c1xcXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxcbitcXHQgKi9cXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2FyZ1xcXCIpKVxcbitcXHRcXHRhcmVuYV9hcmcoKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2FyZ19mYWlsXFxcIikpXFxuK1xcdFxcdGFyZW5hX2FyZ19mYWlsKCk7XFxuKyNlbHNlXFxuK1xcdHRlc3RfX3NraXAoKTtcXG4rI2VuZGlmXFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5pbmRleCBiNzliYWZjYTY4ZjdhLi4xMTBhMzNiNmUxYzI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuQEAgLTIsNiArMiw4IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcImFyZW5hX2tmdW5jLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImFyZW5hX2tmdW5jX2ppdC5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJjYXBfaGVscGVycy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYWxpZ24uc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYW5kLnNrZWwuaFxcXCJcXG5AQCAtMTYxLDYgKzE2MywxNSBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdHNfYXV4KGNvbnN0IGNoYXIgKnNrZWxfbmFtZSxcXG4gXFxuICNkZWZpbmUgUlVOKHNrZWwpIHJ1bl90ZXN0c19hdXgoI3NrZWwsIHNrZWwjI19fZWxmX2J5dGVzLCBOVUxMKVxcbiBcXG4rLypcXG4rICogVGhlIHRlc3Qga2Z1bmNzIGxpdmUgaW4gYnBmX3Rlc3Rtb2QuIFJlc29sdmluZyBrZnVuY3MgYWdhaW5zdCBtb2R1bGVcXG4rICogQlRGcyBuZWVkcyBDQVBfU1lTX0FETUlOLCBzbyBydW4gd2l0aCBmdWxsIGNhcGFiaWxpdGllcyBpbnN0ZWFkIG9mXFxuKyAqIHRocm91Z2ggdGhlIHZlcmlmaWVyIHRlc3RzJyBjYXBhYmlsaXR5LXJlc3RyaWN0ZWQgcnVubmVyLlxcbisgKi9cXG4rdm9pZCB0ZXN0X2FyZW5hX2tmdW5jKHZvaWQpICAgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKGFyZW5hX2tmdW5jKTsgfVxcbitcXG4rdm9pZCB0ZXN0X2FyZW5hX2tmdW5jX2ppdCh2b2lkKSAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKGFyZW5hX2tmdW5jX2ppdCk7IH1cXG4rXFxuIHZvaWQgdGVzdF92ZXJpZmllcl9hbGlnbih2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9hbGlnbik7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2FuZCh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2FuZCk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2FyZW5hKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2FyZW5hKTsgfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNmMzODJjZTgxYWY2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuQEAgLTAsMCArMSwyNjAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi9cXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4rfSBhcmVuYSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbisvKlxcbisgKiBPY2N1cGllcyBwYWdlIDAgc28gbm8gYWxsb2NhdGlvbiBsYW5kcyBhdCBhcmVuYSBvZmZzZXQgMCwgd2hpY2ggdGhlXFxuKyAqIG51bGxhYmxlIHRlc3RzIGJlbG93IG11c3QgYmUgYWJsZSB0byB0ZWxsIGFwYXJ0IGZyb20gTlVMTC5cXG4rICovXFxuK3U2NCBfX2FyZW5hIGFyZW5hX3BhZDtcXG4rXFxuKy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xcbit2b2xhdGlsZSB1NjQgc3Rhc2g7XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdC8qIFBUUl9UT19BUkVOQSBhcmd1bWVudCAqL1xcbitcXHQqdmFsID0gNDE7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdC8qIHRoZSBsb3cgMzIgYml0cyBhcyBhIHNjYWxhciAqL1xcbitcXHRzdGFzaCA9ICh1MzIpKHU2NCl2YWw7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xcbitcXHRpZiAocmV0ICE9IDQyIHx8ICp2YWwgIT0gNDMpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXG4rXFx0LyogdGhlIGZ1bGwgdXNlciBhZGRyZXNzIGFzIGEgc2NhbGFyICovXFxuK1xcdHN0YXNoID0gKHU2NCl2YWw7XFxuK1xcdGJwZl9hZGRyX3NwYWNlX2Nhc3Qoc3Rhc2gsIDEsIDApO1xcbitcXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcXG4rXFx0aWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogUGluIHRoZSByZWJhc2Ugc2VtYW50aWNzIHVzaW5nIHRoZSBjYXB0dXJlIGtmdW5jcywgd2hpY2ggcmV0dXJuIHRoZSByYXdcXG4rICogYXJndW1lbnQgdmFsdWU6IF9fYXJlbmEgcmViYXNlcyB1bmNvbmRpdGlvbmFsbHksIHNvIHplcm8gbG93IDMyIGJpdHNcXG4rICogYXJyaXZlIGFzIHRoZSBhcmVuYSBrZXJuZWwgYmFzZSwgd2hpbGUgX19hcmVuYV9fbnVsbGFibGUgdHVybnMgdGhlbSBpbnRvXFxuKyAqIE5VTEwuXFxuKyAqL1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcdHU2NCBiYXNlLCBvZmY7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRiYXNlID0gYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KE5VTEwpO1xcbitcXHRpZiAoIWJhc2UpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXG4rXFx0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgY29udHJpYnV0ZSAqL1xcbitcXHRzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDtcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpICE9IGJhc2UpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXG4rXFx0b2ZmID0gKHUzMikodTY0KXZhbDtcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICsgb2ZmKVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoTlVMTCkgIT0gMClcXG4rXFx0XFx0cmV0dXJuIDU7XFxuK1xcbitcXHRzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDtcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopc3Rhc2gpICE9IDApXFxuK1xcdFxcdHJldHVybiA2O1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICsgb2ZmKVxcbitcXHRcXHRyZXR1cm4gNztcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGFyZW5hX2FyZ19udWxsYWJsZSh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcdHU2NCByZXQ7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHQqdmFsID0gNDE7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoTlVMTCkgIT0gMHhkZWFkYmVlZilcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHR2YWxbMF0gPSAxO1xcbitcXHR2YWxbMV0gPSAyO1xcbitcXHR2YWxbMl0gPSA0O1xcbitcXHR2YWxbM10gPSA4O1xcbitcXHR2YWxbNF0gPSAxNjtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXFx1MDAyNnZhbFswXSwgKHU2NCAqKVxcdTAwMjZ2YWxbMV0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICAodTY0ICopXFx1MDAyNnZhbFsyXSwgKHU2NCAqKVxcdTAwMjZ2YWxbM10sXFxuK1xcdFxcdFxcdFxcdCAgICAgICAodTY0ICopXFx1MDAyNnZhbFs0XSkgIT0gMzEpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVxcdTAwMjZ2YWxbMF0sICh1NjQgKilcXHUwMDI2dmFsWzFdLFxcbitcXHRcXHRcXHRcXHQgICAgICAgKHU2NCAqKVxcdTAwMjZ2YWxbMl0sICh1NjQgKilcXHUwMDI2dmFsWzNdLCBOVUxMKSAhPSAxNSlcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxcbit7XFxuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxcbitcXHR1NjQgX19hcmVuYSAqdmFsO1xcbitcXG4rXFx0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0dmFsWzBdID0gNztcXG4rXFx0dmFsWzFdID0gNTtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopXFx1MDAyNnZhbFswXSwgTlVMTCkgIT0gNylcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVxcdTAwMjZ2YWxbMF0sICh1NjQgKilcXHUwMDI2dmFsWzFdKSAhPSAxMilcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxcbit7XFxuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxcbitcXHR1NjQgX19hcmVuYSAqdmFsO1xcbitcXG4rXFx0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0c3Rhc2ggPSAodTY0KXZhbCArIFBBR0VfU0laRTtcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJhcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXFwiKVxcbitpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcXG4re1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKTEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ZhaWx1cmUgX19tc2coXFxcImlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXFxcIilcXG4raW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcXG4re1xcbitcXHR1NjQgYnVmID0gMDtcXG4rXFxuK1xcdC8qIHVzZSB0aGUgYXJlbmEgc28gdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBhcmVuYSBwcmVzZW5jZSBjaGVjayAqL1xcbitcXHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoXFx1MDAyNmJ1Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XFxcIilcXG4raW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KDEsIDIsIDMsIDQsIDUsICh1NjQgKikxKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2Rlc2NyaXB0aW9uKFxcXCJhcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3RcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jOWI5MTg2NjI2MTYyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xcbkBAIC0wLDAgKzEsOTggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rLypcXG4rICogVmVyaWZ5IHRoZSBKSVQtZW1pdHRlZCByZWJhc2Ugc2VxdWVuY2VzIGZvciBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZVxcbisgKiBrZnVuYyBhcmd1bWVudHMuIFRoZSBjYXB0dXJlIGtmdW5jcyB0YWtlIHRoZSBhcmd1bWVudCB3aXRob3V0XFxuKyAqIGRlcmVmZXJlbmNpbmcgaXQsIHNvIHRoZXNlIHRlc3RzIHBpbiBvbmx5IHRoZSBlbWl0dGVkIGNvZGUuXFxuKyAqL1xcbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfZXhwZXJpbWVudGFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXFwiXFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuKy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xcbit2b2xhdGlsZSB1NjQgc3Rhc2g7XFxuK1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92bFxcdCVlZGksICVlZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkaVxcXCIpXFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNhbGxxXFx0e3suKn19XFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3Rhc2ggPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JWVkaSwgJWVkaVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHRlc3RsXFx0JWVkaSwgJWVkaVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGplXFx0TDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkaVxcXCIpXFxuK19faml0ZWQoXFxcIkwwOlxcdGNhbGxxXFx0e3suKn19XFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWRpLCAlZWRpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JWVzaSwgJWVzaVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcnNpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92bFxcdCVlZHgsICVlZHhcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkeFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWN4LCAlZWN4XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyY3hcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHRlc3RsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGplXFx0TDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXI4XFxcIilcXG4rX19qaXRlZChcXFwiTDA6XFx0Y2FsbHFcXHR7ey4qfX1cXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxcbit7XFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHR2YWxbMF0gPSAxO1xcbitcXHR2YWxbMV0gPSAyO1xcbitcXHR2YWxbMl0gPSA0O1xcbitcXHR2YWxbM10gPSA4O1xcbitcXHR2YWxbNF0gPSAxNjtcXG4rXFxuK1xcdGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcXHUwMDI2dmFsWzBdLCAodTY0ICopXFx1MDAyNnZhbFsxXSxcXG4rXFx0XFx0XFx0XFx0ICAgKHU2NCAqKVxcdTAwMjZ2YWxbMl0sICh1NjQgKilcXHUwMDI2dmFsWzNdLFxcbitcXHRcXHRcXHRcXHQgICAodTY0ICopXFx1MDAyNnZhbFs0XSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWYgLyogX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QgKi9cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmEwNGM3M2Q4ZDk2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxuQEAgLTAsMCArMSwxMTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfZXhwZXJpbWVudGFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XFxuK1xcdC8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFscywgcGFnZSAxIGlzIGZvciBhbGxvY2F0aW9ucyAqL1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuKy8qIGFsc28gYXNzb2NpYXRlcyB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGFyZW5hICovXFxuK3U2NCBfX2FyZW5hIGFyZW5hX3RvdWNoO1xcbisvKiByYXcgdmFsdWUgb2YgdGhlIGxhc3QgX19hcmVuYSBjdHggYXJndW1lbnQsIGNhcHR1cmVkIGJ5IHRlc3RfYXJlbmFfY2IgKi9cXG4rdTY0IF9fYXJlbmEgY2JfcHRyX3ZhbDtcXG4rXFxuK1NFQyhcXFwic3RydWN0X29wcy90ZXN0X2FyZW5hXFxcIilcXG4raW50IHRlc3RfYXJlbmFfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTtcXG4rXFxuK1xcdGFyZW5hX3RvdWNoKys7XFxuK1xcdGNiX3B0cl92YWwgPSBjdHhbMF07XFxuK1xcdCpwdHIgKz0gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXFxcIilcXG4raW50IHRlc3RfYXJlbmFfbnVsbGFibGVfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTtcXG4rXFxuK1xcdGFyZW5hX3RvdWNoKys7XFxuK1xcdGlmICghcHRyKVxcbitcXHRcXHRyZXR1cm4gMHhiZWU7XFxuK1xcdCpwdHIgKz0gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3RydWN0X29wcy90ZXN0X2FyZW5hX3N0YWNrXFxcIilcXG4raW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFs4XTtcXG4rXFxuK1xcdGFyZW5hX3RvdWNoKys7XFxuK1xcdC8qIHBpbiB0aGUgc2xvdCBsYXlvdXQ6IHRoZSBsZWFkaW5nIGFyZ3MgZmlsbCBjdHhbMF0uLmN0eFs3XSAqL1xcbitcXHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXFxuK1xcdFxcdHJldHVybiAweGJhZDtcXG4rXFx0KnB0ciArPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCIuc3RydWN0X29wcy5saW5rXFxcIilcXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcXG4rXFx0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXFxuK1xcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLFxcbitcXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcXG4rfTtcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCB0cmlnZ2VyKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdCp2YWwgPSA0MTtcXG4rXFx0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoKHU2NCAqKXZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHRpZiAoKnZhbCAhPSA0MilcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgY2FsbGJhY2sgbXVzdCBoYXZlIHNlZW4gZXhhY3RseSAodTMyKShrYWRkciAtIGtlcm5fdm1fc3RhcnQpLFxcbitcXHQgKiB3aGljaCBpcyB0aGUgYXJlbmEgb2Zmc2V0IG9mIHZhbCB3aXRoIHRoZSB1cHBlciAzMiBiaXRzIGNsZWFyLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNiX3B0cl92YWwgIT0gKHUzMikodTY0KXZhbClcXG4rXFx0XFx0cmV0dXJuIDQ7XFxuK1xcbitcXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIDU7XFxuK1xcdGlmICgqdmFsICE9IDQzKVxcbitcXHRcXHRyZXR1cm4gNjtcXG4rXFxuK1xcdC8qIE5VTEwgc3Vydml2ZXMgdGhlIG51bGxhYmxlIGtmdW5jIGFuZCB0aGUgdHJhbXBvbGluZSBhcyBOVUxMICovXFxuK1xcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKE5VTEwpO1xcbitcXHRpZiAocmV0ICE9IDB4YmVlKVxcbitcXHRcXHRyZXR1cm4gNztcXG4rXFxuK1xcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cXG4rXFx0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soKHU2NCAqKXZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiA4O1xcbitcXHRpZiAoKnZhbCAhPSA0NClcXG4rXFx0XFx0cmV0dXJuIDk7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xYzBlYzcyN2Q2Mzc0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xcbkBAIC0wLDAgKzEsMjAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxcIlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbisvKiBObyBhcmVuYSBpbiB0aGUgcHJvZ3JhbTogYXR0YWNoaW5nIHRvIHRlc3RfYXJlbmEgbXVzdCBiZSByZWplY3RlZC4gKi9cXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9ub19hcmVuYSh1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCIuc3RydWN0X29wcy5saW5rXFxcIilcXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xcbitcXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9ub19hcmVuYSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5pbmRleCBlYjBmOWI1ZTE4ZDg1Li4yOTYzYzI5Zjk2YmE1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuQEAgLTIzNyw2ICsyMzcsNTYgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfY29tbW9uX3Rlc3Qodm9pZClcXG4ge1xcbiB9XFxuIFxcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYSlcXG4re1xcbitcXHR1NjQgb2xkO1xcbitcXG4rXFx0b2xkID0gKnZhbF9fYXJlbmE7XFxuK1xcdCp2YWxfX2FyZW5hID0gb2xkICsgMTtcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKVxcbit7XFxuK1xcdHU2NCBvbGQ7XFxuK1xcbitcXHRpZiAoIXZhbF9fYXJlbmFfX251bGxhYmxlKVxcbitcXHRcXHRyZXR1cm4gMHhkZWFkYmVlZjtcXG4rXFxuK1xcdG9sZCA9ICp2YWxfX2FyZW5hX19udWxsYWJsZTtcXG4rXFx0KnZhbF9fYXJlbmFfX251bGxhYmxlID0gb2xkICsgMTtcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuICh1NjQpdmFsX19hcmVuYTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKVxcbit7XFxuK1xcdHJldHVybiAodTY0KXZhbF9fYXJlbmFfX251bGxhYmxlO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTY0ICpjX19hcmVuYSwgdTY0ICpkX19hcmVuYSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTY0ICplX19hcmVuYV9fbnVsbGFibGUpXFxuK3tcXG4rXFx0cmV0dXJuICphX19hcmVuYSArICpiX19hcmVuYSArICpjX19hcmVuYSArICpkX19hcmVuYSArXFxuK1xcdCAgICAgICAoZV9fYXJlbmFfX251bGxhYmxlID8gKmVfX2FyZW5hX19udWxsYWJsZSA6IDApO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dTY0ICpmX19hcmVuYSlcXG4re1xcbitcXHRyZXR1cm4gYSArIGIgKyBjICsgZCArIGUgKyAqZl9fYXJlbmE7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hX19udWxsYWJsZSlcXG4re1xcbitcXHRyZXR1cm4gKmFfX2FyZW5hICsgKGJfX2FyZW5hX19udWxsYWJsZSA/ICpiX19hcmVuYV9fbnVsbGFibGUgOiAwKTtcXG4rfVxcbitcXG4gX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfZHlucHRyX3Rlc3Qoc3RydWN0IGJwZl9keW5wdHIgKnB0cixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfZHlucHRyICpwdHJfX251bGxhYmxlKVxcbiB7XFxuQEAgLTM0Nyw5ICszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSh1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSh1NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHU2NCBlLCB1NjQgZiwgdTY0IGcsIHU2NCBoLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XFxuIFxcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXFxuIFxcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXFxuK1xcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcXG4rXFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxcbitcXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpXFxuQEAgLTM2OCw2ICs0MzgsMjEgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKHZvaWQpXFxuIFxcdHN0X29wczMtXFx1MDAzZXRlc3RfMigpO1xcbiB9XFxuIFxcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiBzdF9vcHMzLVxcdTAwM2V0ZXN0X2FyZW5hKHB0cl9fYXJlbmEpO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSlcXG4re1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX19udWxsYWJsZSk7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuIHN0X29wczMtXFx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XFxuK31cXG4rXFxuIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7XFxuIFxcdGludCBhO1xcbiB9O1xcbkBAIC03NTUsNiArODQwLDEzIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90ZXN0bW9kX3NlcV9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX3ZhbHVlKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfbWVtX2xlbl9wYXNzMSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19keW5wdHJfdGVzdClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19uZXN0ZWRfYWNxdWlyZV9ub256ZXJvX29mZnNldF90ZXN0LCBLRl9BQ1FVSVJFKVxcbkBAIC03NzAsNiArODYyLDkgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX2N0eF9jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX2N0eF9yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XFxuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcbkBAIC0xMDYsNiArMTA2LDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xcbiBcXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xcbiBcXHRpbnQgKCp0ZXN0XzIpKHZvaWQpO1xcbitcXHQvKiBVc2VkIHRvIHRlc3QgYXJlbmEgcG9pbnRlciBhcmd1bWVudHMuICovXFxuK1xcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcXG4rXFx0aW50ICgqdGVzdF9hcmVuYV9udWxsYWJsZSkodTY0ICpwdHIpO1xcbitcXHQvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqL1xcbitcXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxcbitcXHRcXHRcXHRcXHR1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuaW5kZXggYzM2YmI5MTFkZWZhNy4uZGM3YzQwYmQxMjk5MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcbkBAIC05OCw2ICs5OCwxNiBAQCB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVsZWFzZShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCkgX19rc3ltO1xcbiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVmKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XFxuIFxcbiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfbWVtX2xlbl9wYXNzMSh2b2lkICptZW0sIGludCBsZW4pIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KF9fdTY0ICp2YWxfX2FyZW5hKSBfX2tzeW07XFxuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KF9fdTY0ICp2YWxfX2FyZW5hKSBfX2tzeW07XFxuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoX191NjQgKmFfX2FyZW5hLCBfX3U2NCAqYl9fYXJlbmEsXFxuK1xcdFxcdFxcdFxcdCBfX3U2NCAqY19fYXJlbmEsIF9fdTY0ICpkX19hcmVuYSxcXG4rXFx0XFx0XFx0XFx0IF9fdTY0ICplX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsIF9fdTY0IGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgX191NjQgKmZfX2FyZW5hKSBfX2tzeW07XFxuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xcbiBpbnQgKmJwZl9rZnVuY19jYWxsX3Rlc3RfZ2V0X3Jkd3JfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmR3cl9idWZfc2l6ZSkgX19rc3ltO1xcbiBpbnQgKmJwZl9rZnVuY19jYWxsX3Rlc3RfZ2V0X3Jkb25seV9tZW0oc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnAsIGNvbnN0IGludCByZG9ubHlfYnVmX3NpemUpIF9fa3N5bTtcXG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XFxuQEAgLTExMSw2ICsxMjEsOSBAQCB1MzIgYnBmX2tmdW5jX2NhbGxfdGVzdF9zdGF0aWNfdW51c2VkX2FyZyh1MzIgYXJnLCB1MzIgdW51c2VkKSBfX2tzeW07XFxuICNlbmRpZlxcbiBcXG4gdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4gXFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcXG4gXFx0XFx0XFx0XFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNjo0My4wODAwMzI5MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NzA4OTg4ODg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcF9hcmVuYV9iYXNlXCIsXG4gICAgXCJicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCIsXG4gICAgXCJicGZfc3RydWN0X29wc19kZXNjX2luaXRcIixcbiAgICBcImJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9cIixcbiAgICBcImJ0Zl9jdHhfYWNjZXNzXCIsXG4gICAgXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgcGFzc2luZyBhcmVuYSBwb2ludGVycyB0byBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrcy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWNvZ25pemUgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9fbnVsbGFibGVgIGFubm90YXRpb25zLCBhbmQgdXBkYXRlcyB0aGUgeDg2IEJQRiBKSVQgYW5kIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiB0byBwcm9wZXJseSByZWJhc2UgdGhlc2UgcG9pbnRlcnMgdG8gdGhlIGtlcm5lbCdzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjE1MjNmZTQ3MTRmOWNmYTQyZGM3YjgwYTA2ODc1YTZiOTY0Zjk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAyMjoyNjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5pbmRleCBjYmRlODZkMDgyY2NlLi5jMDQ0NjU5Yjc2ODkxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTI3OCw2ICsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgfVxuIFxuKzIuMy44IF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlIEFubm90YXRpb25zXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbitCb3RoIGFubm90YXRpb25zIGluZGljYXRlIHRoYXQgdGhlIHBvaW50ZXIgYXJndW1lbnQgcG9pbnRzIGludG8gdGhlXG4rY2FsbGluZyBwcm9ncmFtJ3MgYXJlbmEuIFRoZSBKSVQgcmViYXNlcyB0aGUgdmFsdWUgYXQgdGhlIGNhbGwgc2l0ZSBzb1xuK3RoZSBrZnVuYyByZWNlaXZlcyBhIGRpcmVjdGx5IGRlcmVmZXJlbmNlYWJsZSBrZXJuZWwgYWRkcmVzcywgc3ViamVjdCB0b1xuK3RoZSBhY2Nlc3MgcnVsZXMgZGVzY3JpYmVkIGluIDpyZWY6YEJQRl9rZnVuY19hcmVuYV9hY2Nlc3NgIChhdCBtb3N0XG4rYGBHVUFSRF9TWiAvIDJgYCwgMzIgS2lCLCBwYXN0IHRoZSBwb2ludGVyIGluIGEgc2luZ2xlIHVuY2hlY2tlZCBhY2Nlc3MpLlxuK1xuK1dpdGggYGBfX2FyZW5hYGAgdGhlIHJlYmFzZSBpcyB1bmNvbmRpdGlvbmFsIGFuZCB0aGUgYXJndW1lbnQgaXMgbmV2ZXJcbitOVUxMOiBhIHZhbHVlIHdob3NlIGxvd2VyIDMyIGJpdHMgYXJlIHplcm8gYXJyaXZlcyBhcyB0aGUgYXJlbmEgYmFzZVxuK2FkZHJlc3MgKGFyZW5hIG9mZnNldCAwKS4gVGhlIGtmdW5jIG11c3Qgbm90IGNoZWNrIHRoZSBhcmd1bWVudCBmb3IgTlVMTC5cbitXaXRoIGBgX19hcmVuYV9fbnVsbGFibGVgYCBzdWNoIGEgdmFsdWUgYXJyaXZlcyBhcyBOVUxMIGluc3RlYWQgYW5kIHRoZVxuK2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuXG4rXG4rQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4rXG4rICAgICAgICBfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2Nlc3NfaXRlbShzdHJ1Y3QgaXRlbSAqaXRlbV9fYXJlbmEpXG4rICAgICAgICB7XG4rICAgICAgICAuLi5cbisgICAgICAgIH1cbitcbitDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4rYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxuK3Byb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXG4rbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4rXG4rVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YlxuK2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZVxuK2tlcm5lbCBjYWxsZXIgcGFzc2VzIHRoZSBrZXJuZWwgYXJlbmEgYWRkcmVzcyBhbmQgdGhlIHRyYW1wb2xpbmUgY29udmVydHNcbitpdCB3aGlsZSBzYXZpbmcgdGhlIGFyZ3VtZW50cywgc28gdGhlIGNhbGxiYWNrIHJlY2VpdmVzIGFuIGFyZW5hIHBvaW50ZXJcbitpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3RcbitwYXNzIE5VTEwuIFdpdGggYGBfX2FyZW5hX19udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXG4rSG93ZXZlciwgdGhlcmUgaXMgbm8gb2JsaWdhdGlvbiB0byBwcm92ZSB0byB0aGUgdmVyaWZpZXIgdGhhdCBzdWNoIGEgcG9pbnRlciBpc1xuK25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpblxuK2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cbitcbiAuLiBfQlBGX2tmdW5jX25vZGVmOlxuIFxuIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb25cbkBAIC01MTUsNiArNTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0XG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXG4gYmVpbmcgc3VmZml4ZWQgd2l0aCBgYF9fX2luaXRgYC5cbiBcbisuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcbitcbiAyLjggQWNjZXNzaW5nIGFyZW5hIG1lbW9yeSB0aHJvdWdoIGtmdW5jIGFyZ3VtZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCAwMWU3Y2U1NjljMWVkLi41YzVjMzJhYmEyMzk2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xNjc4LDYgKzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXG4rICogck4gPSBrZXJuX3ZtX3N0YXJ0ICsgKHUzMilyTiwgd2l0aCBSMTIgaG9sZGluZyBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlXG4rICogYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZCBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzXG4rICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cbisgKi9cbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKipwcHJvZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtO1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXHR1OCAqc3RhcnQgPSBwcm9nO1xuK1x0aW50IGk7XG4rXG4rXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XG4rXHRpZiAoIWZtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbl90KGludCwgZm0tXHUwMDNlbnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XG4rXHRcdHU4IGZsYWdzID0gZm0tXHUwMDNlYXJnX2ZsYWdzW2ldO1xuK1x0XHR1MzIgcmVnID0gQlBGX1JFR18xICsgaTtcbitcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKFdBUk5fT05fT05DRSghYnBmX3Byb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogbW92IGVOLCBlTjogdHJ1bmNhdGUgYW5kIGNsZWFyIHRoZSB1cHBlciAzMiBiaXRzICovXG4rXHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCBmYWxzZSwgcmVnLCByZWcpO1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XG4rXHRcdFx0LyogdGVzdCBlTiwgZU47IGp6IG92ZXIgdGhlIDMtYnl0ZSBhZGQgKi9cbitcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xuK1x0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XG4rXHRcdFx0RU1JVDIoWDg2X0pFLCAzKTtcbitcdFx0fVxuK1x0XHQvKiBhZGQgck4sIHIxMiAqL1xuK1x0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcbitcdFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xuK1x0fVxuK1xuK1x0KnBwcm9nID0gcHJvZztcbitcdHJldHVybiBwcm9nIC0gc3RhcnQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbiBcdFx0ICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZylcbiB7XG5AQCAtMjU4Myw2ICsyNjI3LDEyIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFx0XHRcdGlmICghaW1tMzIpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRcdGVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgXHUwMDI2cHJvZyk7XG4rXHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdFx0aXAgKz0gZXJyO1xuK1x0XHRcdH1cbiBcdFx0XHRpZiAocHJpdl9mcmFtZV9wdHIpIHtcbiBcdFx0XHRcdHB1c2hfcjkoXHUwMDI2cHJvZyk7XG4gXHRcdFx0XHRpcCArPSAyO1xuQEAgLTI5OTMsMTEgKzMwNDMsMzkgQEAgc3RhdGljIGludCBnZXRfbnJfdXNlZF9yZWdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSlcbiBcdHJldHVybiBucl91c2VkX3JlZ3M7XG4gfVxuIFxuKy8qXG4rICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheVxuKyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZ1xuKyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0XG4rICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZFxuKyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pXG4re1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXG4rXHRpZiAobnVsbGFibGUpIHtcbitcdFx0aWYgKHNyY19yZWcgIT0gQlBGX1JFR18wKVxuK1x0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xuK1x0XHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXG4rXHRcdEVNSVQzKDB4NDgsIDB4ODUsIDB4QzApO1xuK1x0XHRFTUlUMihYODZfSkUsIDUpO1xuK1x0fSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xuK1x0XHRlbWl0X21vdl9yZWcoXHUwMDI2cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XG4rXHR9XG4rXHQvKiBzdWIgZWF4LCBiYXNlX2xvICovXG4rXHRFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTtcbitcbitcdCpwcHJvZyA9IHByb2c7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbi1cdFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXG4rXHRcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxuK1x0XHQgICAgICB1NjQgYXJlbmFfYmFzZSlcbiB7XG4gXHRpbnQgYXJnX3JlZ3MsIGZpcnN0X29mZiA9IDAsIG5yX3JlZ3MgPSAwLCBucl9zdGFja19zbG90cyA9IDA7XG4gXHRib29sIHVzZV9qbXAgPSBicGZfdHJhbXBvbGluZV91c2Vfam1wKGZsYWdzKTtcbitcdGludCBzdGFja19hcmdzX29mZiA9ICh1c2Vfam1wIHx8IChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpKSA/IDE2IDogMjQ7XG4gXHRpbnQgaSwgajtcbiBcbiBcdC8qIFN0b3JlIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byBzdGFjay5cbkBAIC0zMDA2LDYgKzMwODQsOSBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csXG4gXHQgKiBtb3YgUVdPUkQgUFRSIFtyYnAtMHg4XSxyc2lcbiBcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19BUkdTKTsgaSsrKSB7XG4rXHRcdGJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSBcdTAwMjZcdTAwMjYgKG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRyk7XG4rXHRcdGJvb2wgbnVsbGFibGUgPSBtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4rXG4gXHRcdGFyZ19yZWdzID0gKG0tXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDg7XG4gXG4gXHRcdC8qIEFjY29yZGluZyB0byB0aGUgcmVzZWFyY2ggb2YgWW9uZ2hvbmcsIHN0cnVjdCBtZW1iZXJzXG5AQCAtMzAyOSwxNiArMzExMCwxOSBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csXG4gXHRcdFx0LyogY29weSBmdW5jdGlvbiBhcmd1bWVudHMgZnJvbSBvcmlnaW4gc3RhY2sgZnJhbWVcbiBcdFx0XHQgKiBpbnRvIGN1cnJlbnQgc3RhY2sgZnJhbWUuXG4gXHRcdFx0ICpcbi1cdFx0XHQgKiBUaGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXJndW1lbnRzIG9uLXN0YWNrXG4tXHRcdFx0ICogaXM6XG4tXHRcdFx0ICogICByYnAgKyA4KHB1c2ggcmJwKSArXG4tXHRcdFx0ICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSArXG4tXHRcdFx0ICogICA4KHJldHVybiBhZGRyIG9mIHRoZSBjYWxsZXIpXG4tXHRcdFx0ICogd2hpY2ggbWVhbnM6IHJicCArIDI0XG4rXHRcdFx0ICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwXG4rXHRcdFx0ICogYW5kIHRoZSByZXR1cm4gYWRkcmVzc2VzOiB0d28gcmV0dXJuIGFkZHJlc3Nlc1xuK1x0XHRcdCAqIChvcmlnaW4gY2FsbCBhbmQgY2FsbGVyKSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzXG4rXHRcdFx0ICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICsgMjQsIGFuZFxuK1x0XHRcdCAqIGEgc2luZ2xlIG9uZSB3aGVuIGl0IGlzIGVudGVyZWQgd2l0aCBhIGptcCBvclxuK1x0XHRcdCAqIGNhbGxlZCBpbmRpcmVjdGx5LCBzbyByYnAgKyAxNi5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBhcmdfcmVnczsgaisrKSB7XG4gXHRcdFx0XHRlbWl0X2xkeChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR19GUCxcbi1cdFx0XHRcdFx0IG5yX3N0YWNrX3Nsb3RzICogOCArIDE2ICsgKCF1c2Vfam1wKSAqIDgpO1xuK1x0XHRcdFx0XHQgbnJfc3RhY2tfc2xvdHMgKiA4ICsgc3RhY2tfYXJnc19vZmYpO1xuK1x0XHRcdFx0aWYgKGFyZW5hX2FyZylcbitcdFx0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBCUEZfUkVHXzAsIG51bGxhYmxlLFxuK1x0XHRcdFx0XHRcdFx0ICAgICh1MzIpYXJlbmFfYmFzZSk7XG4gXHRcdFx0XHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCxcbiBcdFx0XHRcdFx0IC1zdGFja19zaXplKTtcbiBcbkBAIC0zMDU5LDkgKzMxNDMsMTMgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFxuIFx0XHRcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcbi1cdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCxcbi1cdFx0XHRcdFx0IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzLFxuLVx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuK1x0XHRcdFx0dTMyIHNyYyA9IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzO1xuK1xuK1x0XHRcdFx0aWYgKGFyZW5hX2FyZykge1xuK1x0XHRcdFx0XHRlbWl0X2FyZW5hX2FyZ19jb252KHByb2csIHNyYywgbnVsbGFibGUsICh1MzIpYXJlbmFfYmFzZSk7XG4rXHRcdFx0XHRcdHNyYyA9IEJQRl9SRUdfMDtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgc3JjLCAtc3RhY2tfc2l6ZSk7XG4gXHRcdFx0XHRzdGFja19zaXplIC09IDg7XG4gXHRcdFx0XHRucl9yZWdzKys7XG4gXHRcdFx0fVxuQEAgLTMzNTcsNiArMzQ0NSw3IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXHR2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7XG4gXHRpbnQgY29va2llX29mZiwgY29va2llX2NudDtcbiBcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xuK1x0dTY0IGFyZW5hX2Jhc2U7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFx0dTggKnByb2c7XG4gXHRib29sIHNhdmVfcmV0O1xuQEAgLTMzNjksNiArMzQ1OCw4IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXHRXQVJOX09OX09OQ0UoKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKGZsYWdzIFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XG4gXG4rXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKylcbiBcdFx0bnJfcmVncyArPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XG4gXG5AQCAtMzUwMyw3ICszNTk0LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1pcF9vZmYsIChsb25nKWZ1bmNfYWRkcik7XG4gXHR9XG4gXG4tXHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyk7XG4rXHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncywgYXJlbmFfYmFzZSk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuIFx0XHQvKiBhcmcxOiBtb3YgcmRpLCBpbSAqL1xuQEAgLTM1NDUsNyArMzYzNiw3IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuIFx0XHRyZXN0b3JlX3JlZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYpO1xuLVx0XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MpO1xuK1x0XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MsIDApO1xuIFxuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFgpIHtcbiBcdFx0XHQvKiBCZWZvcmUgY2FsbGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIGxvYWQgdGhlXG5AQCAtNDA0Niw2ICs0MTM3LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbit7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuIHtcbiBcdGlmICh0ZXh0X3Bva2VfY29weShkc3QsIHNyYywgbGVuKSA9PSBOVUxMKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3M2JhY2ZjNjQ0NGRmLi42OGZmNjY3ODdhZTFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTEyMTAsNiArMTIxMCwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2dfb2ZmbG9hZCB7XG4gLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi9cbiAjZGVmaW5lIEJURl9GTU9ERUxfU0lHTkVEX0FSR1x0XHRCSVQoMSlcbiBcbisvKiBUaGUgYXJndW1lbnQgaXMgYW4gYXJlbmEgcG9pbnRlci4gKi9cbisjZGVmaW5lIEJURl9GTU9ERUxfQVJFTkFfQVJHXHRcdEJJVCgyKVxuK1xuKy8qIFRoZSBhcmd1bWVudCBpcyBudWxsYWJsZS4gKi9cbisjZGVmaW5lIEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHXHRcdEJJVCgzKVxuK1xuIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7XG4gXHR1OCByZXRfc2l6ZTtcbiBcdHU4IHJldF9mbGFncztcbkBAIC0xMjgzLDYgKzEyODksMTUgQEAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyB7XG4gXHRpbnQgbnJfbm9kZXM7XG4gfTtcbiBcbisvKlxuKyAqIFRoZSBhcmVuYSBiYXNlIGFnYWluc3Qgd2hpY2ggYSBzdHJ1Y3Rfb3BzIHRyYW1wb2xpbmUgY29udmVydHMgdGhlXG4rICogYXJndW1lbnRzIG1hcmtlZCB3aXRoIEJURl9GTU9ERUxfQVJFTkFfQVJHIHdoaWxlIHNhdmluZyB0aGVtIGludG8gdGhlIEJQRlxuKyAqIGN0eCwgY3R4W2FyZ10gPSAodTMyKShrYWRkciAtIGtlcm5fdm1fc3RhcnQpLiBaZXJvIHdoZW4gdGhlIHRyYW1wb2xpbmVcbisgKiBjb252ZXJ0cyBub3RoaW5nLlxuKyAqL1xuK3U2NCBicGZfdHJhbXBfYXJlbmFfYmFzZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4rXHRcdFx0IHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzKTtcbitcbiBzdHJ1Y3QgYnBmX3RyYW1wX3J1bl9jdHg7XG4gXG4gLyogRGlmZmVyZW50IHVzZSBjYXNlcyBmb3IgQlBGIHRyYW1wb2xpbmU6XG5AQCAtMjM1Miw2ICsyMzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYnBmX2ZzZXNzaW9uX2Nvb2tpZV9jbnQoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqbm9kZXMpXG4gXG4gaW50IGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgdTMyIGNudCk7XG4rYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19DR1JPVVBfQlBGKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX0xTTSlcbiBpbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IGEyYTQwY2FjYTBhMGUuLmE5NTU1ZDE3ZmQ4ZWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTE3Nyw4ICsxMTc3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3VucGFja19rZXkodTY0IGtleSwgdTMyICpvYmpfaWQsIHUzMiAqYnRmX2lkKVxuIFx0XHQqYnRmX2lkID0ga2V5IFx1MDAyNiAweDdGRkZGRkZGO1xuIH1cbiBcbi1pbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xuK2ludCBicGZfcHJlcGFyZV9idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xuIGludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDMyZDUyOTdjNTU3ZTUuLjM2Y2UzNDAzZmU1OTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTE4Myw2ICsxMTgzLDcgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKTtcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuaW5kZXggNGU3YTQ4YzAyYmU1Yy4uY2VkN2IxODI0NmE5NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuKysrIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5AQCAtMTQ3LDYgKzE0Nyw4IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcbiBcbiAjZGVmaW5lIE1BWUJFX05VTExfU1VGRklYIFwiX19udWxsYWJsZVwiXG4gI2RlZmluZSBSRUZDT1VOVEVEX1NVRkZJWCBcIl9fcmVmXCJcbisjZGVmaW5lIEFSRU5BX1NVRkZJWCBcIl9fYXJlbmFcIlxuKyNkZWZpbmUgQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVggXCJfX2FyZW5hX19udWxsYWJsZVwiXG4gXG4gLyogUHJlcGFyZSBhcmd1bWVudCBpbmZvIGZvciBldmVyeSBudWxsYWJsZSBhcmd1bWVudCBvZiBhIG1lbWJlciBvZiBhXG4gICogc3RydWN0X29wcyB0eXBlLlxuQEAgLTE1OSw3ICsxNjEsNyBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXG4gICogdG8gcHJvdmlkZSBhbiBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4LCB3aGljaCBpbiB0dXJuIHByb3ZpZGVzXG4gICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdXNlZCBieSB0aGUgdmVyaWZpZXIgdG8gY2hlY2sgdGhlIGFyZ3VtZW50cyBvZiB0aGVcbiAgKiBCUEYgc3RydWN0X29wcyBwcm9ncmFtIGFzc2lnbmVkIHRvIHRoZSBtZW1iZXIuIEhlcmUsIHdlIG9ubHkgY2FyZSBhYm91dFxuLSAqIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIF9fbnVsbGFibGUuXG4rICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZSwgX19yZWYgb3IgX19hcmVuYS5cbiAgKlxuICAqIFRoZSBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IGlzIGV2ZW50dWFsbHkgYXNzaWduZWQgdG9cbiAgKiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm8gb2YgQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbXMgYW5kIHBhc3NlZCB0byB0aGVcbkBAIC0xNzIsMTAgKzE3NCwxMiBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgICBjb25zdCBjaGFyICpzdF9vcHNfbmFtZSxcbiBcdFx0XHQgICAgY29uc3QgY2hhciAqbWVtYmVyX25hbWUsXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuY19wcm90bywgdm9pZCAqc3R1Yl9mdW5jX2FkZHIsXG4rXHRcdFx0ICAgIHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbW9kZWwsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm8pXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpzdHViX2Z1bmNfcHJvdG8sICpwb2ludGVkX3R5cGU7XG4tXHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZTtcbitcdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlLCBpc19hcmVuYSA9IGZhbHNlO1xuK1x0Ym9vbCBpc19hcmVuYV9udWxsYWJsZSA9IGZhbHNlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc3R1Yl9hcmdzLCAqYXJncztcbiBcdHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sICppbmZvX2J1ZjtcbiBcdHUzMiBuYXJncywgYXJnX25vLCBpbmZvX2NudCA9IDA7XG5AQCAtMjI1LDI3ICsyMjksMzUgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcbiBcdC8qIFByZXBhcmUgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgKi9cbiBcdGluZm8gPSBpbmZvX2J1ZjtcbiBcdGZvciAoYXJnX25vID0gMDsgYXJnX25vIFx1MDAzYyBuYXJnczsgYXJnX25vKyspIHtcbi1cdFx0LyogU2tpcCBhcmd1bWVudHMgdGhhdCBpcyBub3Qgc3VmZml4ZWQgd2l0aFxuLVx0XHQgKiBcIl9fbnVsbGFibGUgb3IgX19yZWZcIi5cbitcdFx0LypcbitcdFx0ICogU2tpcCBhcmd1bWVudHMgdGhhdCBhcmUgbm90IHN1ZmZpeGVkIHdpdGggXCJfX2FyZW5hX19udWxsYWJsZVwiLFxuK1x0XHQgKiBcIl9fYXJlbmFcIiwgXCJfX251bGxhYmxlXCIsIG9yIFwiX19yZWZcIi5cbiBcdFx0ICovXG4tXHRcdGlzX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxuLVx0XHRcdFx0XHRcdCAgICAgTUFZQkVfTlVMTF9TVUZGSVgpO1xuK1x0XHRpc19hcmVuYV9udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbitcdFx0XHRcdFx0XHRcdCAgIEFSRU5BX01BWUJFX05VTExfU1VGRklYKTtcbitcdFx0aXNfYXJlbmEgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sIEFSRU5BX1NVRkZJWCk7XG4rXHRcdGlzX251bGxhYmxlID0gIWlzX2FyZW5hX251bGxhYmxlIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSwgTUFZQkVfTlVMTF9TVUZGSVgpO1xuIFx0XHRpc19yZWZjb3VudGVkID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxuIFx0XHRcdFx0XHRcdCAgICAgICBSRUZDT1VOVEVEX1NVRkZJWCk7XG4gXG4tXHRcdGlmIChpc19udWxsYWJsZSlcbitcdFx0aWYgKGlzX2FyZW5hX251bGxhYmxlKVxuK1x0XHRcdHN1ZmZpeCA9IEFSRU5BX01BWUJFX05VTExfU1VGRklYO1xuK1x0XHRlbHNlIGlmIChpc19hcmVuYSlcbitcdFx0XHRzdWZmaXggPSBBUkVOQV9TVUZGSVg7XG4rXHRcdGVsc2UgaWYgKGlzX251bGxhYmxlKVxuIFx0XHRcdHN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYO1xuIFx0XHRlbHNlIGlmIChpc19yZWZjb3VudGVkKVxuIFx0XHRcdHN1ZmZpeCA9IFJFRkNPVU5URURfU1VGRklYO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovXG4tXHRcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0Zixcbi1cdFx0XHRcdFx0XHQgICAgYXJnc1thcmdfbm9dLnR5cGUsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmFyZ19idGZfaWQpO1xuLVx0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fFxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0LCBvciBhbnkgcG9pbnRlciBmb3IgX19hcmVuYSBvclxuK1x0XHQgKiBfX2FyZW5hX19udWxsYWJsZS5cbitcdFx0ICovXG4rXHRcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0ZiwgYXJnc1thcmdfbm9dLnR5cGUsIFx1MDAyNmFyZ19idGZfaWQpO1xuK1x0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fCAoIWlzX2FyZW5hIFx1MDAyNlx1MDAyNiAhaXNfYXJlbmFfbnVsbGFibGUgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkpIHtcbiBcdFx0XHRwcl93YXJuKFwic3R1YiBmdW5jdGlvbiAlcyBoYXMgJXMgdGFnZ2luZyB0byBhbiB1bnN1cHBvcnRlZCB0eXBlXFxuXCIsXG4gXHRcdFx0XHRzdHViX2ZuYW1lLCBzdWZmaXgpO1xuIFx0XHRcdGdvdG8gZXJyX291dDtcbkBAIC0yNjgsNyArMjgwLDE4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdGluZm8tXHUwMDNlYnRmX2lkID0gYXJnX2J0Zl9pZDtcbiBcdFx0aW5mby1cdTAwM2VidGYgPSBidGY7XG4gXHRcdGluZm8tXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xuLVx0XHRpZiAoaXNfbnVsbGFibGUpIHtcbitcdFx0aWYgKGlzX2FyZW5hIHx8IGlzX2FyZW5hX251bGxhYmxlKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLFxuK1x0XHRcdCAqIFBUUl9UT19BUkVOQSBlbmNvbXBhc3NlcyBwb3RlbnRpYWwgTlVMTCB2YWx1ZXMsIGJ1dFxuK1x0XHRcdCAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW5cbitcdFx0XHQgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fQVJFTkE7XG4rXHRcdFx0bW9kZWwtXHUwMDNlYXJnX2ZsYWdzW2FyZ19ub10gfD0gQlRGX0ZNT0RFTF9BUkVOQV9BUkc7XG4rXHRcdFx0aWYgKGlzX2FyZW5hX251bGxhYmxlKVxuK1x0XHRcdFx0bW9kZWwtXHUwMDNlYXJnX2ZsYWdzW2FyZ19ub10gfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4rXHRcdH0gZWxzZSBpZiAoaXNfbnVsbGFibGUpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXJlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEIHwgUFRSX01BWUJFX05VTEw7XG4gXHRcdH0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQ7XG5AQCAtNDYwLDYgKzQ4Myw3IEBAIGludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLFxuIFx0XHRzdHViX2Z1bmNfYWRkciA9ICoodm9pZCAqKikoc3Rfb3BzLVx1MDAzZWNmaV9zdHVicyArIG1vZmYpO1xuIFx0XHRlcnIgPSBwcmVwYXJlX2FyZ19pbmZvKGJ0Ziwgc3Rfb3BzLVx1MDAzZW5hbWUsIG1uYW1lLFxuIFx0XHRcdFx0ICAgICAgIGZ1bmNfcHJvdG8sIHN0dWJfZnVuY19hZGRyLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNnN0X29wcy1cdTAwM2VmdW5jX21vZGVsc1tpXSxcbiBcdFx0XHRcdCAgICAgICBhcmdfaW5mbyArIGkpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJyb3V0O1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA0MjQxNDYzM2NmMjYzLi42NjA2MTg3ZWQ0ZjQzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTY5NjMsMTUgKzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0LyogY2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwgb3IgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgKi9cbitcdC8qXG4rXHQgKiBDaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCwgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgb3JcbitcdCAqIFBUUl9UT19BUkVOQSAoYm90aCBudWxsYWJsZSBhbmQgbm9uLW51bGxhYmxlIGNhc2VzKS5cbitcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkrKykge1xuIFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSBcdTAwMjZwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV07XG4gXHRcdHUzMiB0eXBlLCBmbGFnO1xuIFxuIFx0XHR0eXBlID0gYmFzZV90eXBlKGN0eF9hcmdfaW5mby1cdTAwM2VyZWdfdHlwZSk7XG4gXHRcdGZsYWcgPSB0eXBlX2ZsYWcoY3R4X2FyZ19pbmZvLVx1MDAzZXJlZ190eXBlKTtcbi1cdFx0aWYgKGN0eF9hcmdfaW5mby1cdTAwM2VvZmZzZXQgPT0gb2ZmIFx1MDAyNlx1MDAyNiB0eXBlID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoZmxhZyBcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XG4rXHRcdGlmIChjdHhfYXJnX2luZm8tXHUwMDNlb2Zmc2V0ID09IG9mZiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICh0eXBlID09IFBUUl9UT19BUkVOQSB8fFxuK1x0XHQgICAgICh0eXBlID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2IChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpKSkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGU7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbkBAIC03NTM5LDYgKzc1NDMsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4rc3RhdGljIHU4IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4re1xuK1x0dTggZmxhZ3MgPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTtcbitcbitcdGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fYXJlbmFfX251bGxhYmxlXCIpKVxuK1x0XHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRyB8IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1x0ZWxzZSBpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX2FyZW5hXCIpKVxuK1x0XHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcbitcdGVsc2UgaWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19udWxsYWJsZVwiKSlcbitcdFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4rXG4rXHRyZXR1cm4gZmxhZ3M7XG4rfVxuK1xuIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYyxcbkBAIC03NjA0LDcgKzc2MjQsNyBAQCBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHRcdG0tXHUwMDNlYXJnX3NpemVbaV0gPSByZXQ7XG4tXHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3ModCk7XG4rXHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhidGYsIFx1MDAyNmFyZ3NbaV0sIHQpO1xuIFx0fVxuIFx0bS1cdTAwM2Vucl9hcmdzID0gbmFyZ3M7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jIGIva2VybmVsL2JwZi9jaGVja19idGYuY1xuaW5kZXggOTNiZWJlNmZlMTJlNy4uMGU4YjNjY2M3YTViOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcbisrKyBiL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcbkBAIC0yOCw5ICsyOCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWJub3JtYWxfcmV0dXJuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gI2RlZmluZSBNSU5fQlBGX0ZVTkNJTkZPX1NJWkVcdDhcbiAjZGVmaW5lIE1BWF9GVU5DSU5GT19SRUNfU0laRVx0MjUyXG4gXG4tc3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdFx0Y29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tXHRcdFx0XHRicGZwdHJfdCB1YXR0cilcbitzdGF0aWMgaW50IHByZXBhcmVfYnRmX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4rXHRcdFx0ICAgIGJwZnB0cl90IHVhdHRyKVxuIHtcbiBcdHUzMiBrcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlLCAqZnVuY19wcm90bztcbkBAIC00MDcsOSArNDA3LDkgQEAgc3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLVx0XHRcdCAgICAgYnBmcHRyX3QgdWF0dHIpXG4raW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4rXHRcdFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuK1x0XHRcdCBicGZwdHJfdCB1YXR0cilcbiB7XG4gXHRzdHJ1Y3QgYnRmICpidGY7XG4gXHRpbnQgZXJyO1xuQEAgLTQyOSw3ICs0MjksNyBAQCBpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gXHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlYnRmID0gYnRmO1xuIFxuLVx0ZXJyID0gY2hlY2tfYnRmX2Z1bmNfZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG4rXHRlcnIgPSBwcmVwYXJlX2J0Zl9mdW5jKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmEzZTFmYWUzMmVhY2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0zMzA4LDYgKzMzMDgsMTEgQEAgYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK2Jvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCBlZDc5OTlhZDZjNjZjLi5lMDdhZjM1ZWQwNDAyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtNTI5LDYgKzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxuIFx0cmV0dXJuIHRub2RlcztcbiB9XG4gXG4rLypcbisgKiBUaGUgYXJlbmEgYmFzZSBhZ2FpbnN0IHdoaWNoIHNhdmVfYXJncygpIGNvbnZlcnRzIHRoZSBhcmd1bWVudHMgbWFya2VkXG4rICogd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRy4gT25seSB0aGUgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lXG4rICogY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUgcHJvZyB3aG9zZSBhcmVuYSBpcyBrbm93biBhdFxuKyAqIGdlbmVyYXRpb24gdGltZS4gUmV0dXJuIDAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbnZlcnQuXG4rICovXG4rdTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbitcdFx0XHQgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIShmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHx8XG4rXHQgICAgdG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5yX25vZGVzICE9IDEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpKyspXG4rXHRcdGlmIChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpXG4rXHRcdFx0YnJlYWs7XG4rXHRpZiAoaSA9PSBtLVx1MDAzZW5yX2FyZ3MpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVmVyaWZpY2F0aW9uIHJlamVjdHMgYW4gYXJlbmEgYXJndW1lbnQgd2l0aG91dCBhbiBhcmVuYS4gKi9cbitcdHByb2cgPSB0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubm9kZXNbMF0tXHUwMDNlbGluay1cdTAwM2Vwcm9nO1xuK1x0aWYgKFdBUk5fT05fT05DRSghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQocHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSlcbiB7XG4gXHRicGZfaW1hZ2Vfa3N5bV9kZWwoXHUwMDI2aW0tXHUwMDNla3N5bSk7XG5AQCAtOTIwLDYgKzk1MCwxMyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbiBcdGludCBjbnQgPSAwLCBpO1xuIFxuIFx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG4rXHQvKlxuK1x0ICogQXJlbmEgY3R4IGFyZ3MgYXJlIGNvbnZlcnRlZCBvbmx5IGJ5IHN0cnVjdF9vcHMgaW5kaXJlY3RcbitcdCAqIHRyYW1wb2xpbmVzLiBUaGV5IG11c3QgbmV2ZXIgYmUgYXR0YWNoZWQgdG8gYSBnZW5lcmljIHRyYW1wb2xpbmUuXG4rXHQgKi9cbitcdGlmIChXQVJOX09OX09OQ0UoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcobm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpKSlcbitcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbitcbiBcdGlmICh0ci1cdTAwM2VleHRlbnNpb25fcHJvZylcbiBcdFx0LyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuXG4gXHRcdCAqIGNhbm5vdCBvdmVyd3JpdGUgZXh0ZW5zaW9uIHByb2cgZWl0aGVyLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMDk1ODhiN2IwOGIwYS4uODNlZGY0MWM3ZmU5YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjg0Miw3ICsyODQyLDcgQEAgaW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuK3N0YXRpYyBpbnQgYWRkX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2cgPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvO1xuIFx0aW50IGksIHJldCwgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4sIGV4X2NiX2luc247XG5AQCAtMjg1NCw4ICsyODU0LDcgQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xuLVx0XHRpZiAoIWJwZl9wc2V1ZG9fZnVuYyhpbnNuKSBcdTAwMjZcdTAwMjYgIWJwZl9wc2V1ZG9fY2FsbChpbnNuKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFicGZfcHNldWRvX2tmdW5jX2NhbGwoaW5zbikpXG4rXHRcdGlmICghYnBmX3BzZXVkb19mdW5jKGluc24pIFx1MDAyNlx1MDAyNiAhYnBmX3BzZXVkb19jYWxsKGluc24pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoIWVudi1cdTAwM2VicGZfY2FwYWJsZSkge1xuQEAgLTI4NjMsMTEgKzI4NjIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXHRcdH1cbiBcbi1cdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSB8fCBicGZfcHNldWRvX2NhbGwoaW5zbikpXG4tXHRcdFx0cmV0ID0gYWRkX3N1YnByb2coZW52LCBpICsgaW5zbi1cdTAwM2VpbW0gKyAxKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IGJwZl9hZGRfa2Z1bmNfY2FsbChlbnYsIGluc24tXHUwMDNlaW1tLCBpbnNuLVx1MDAzZW9mZik7XG4tXG4rXHRcdHJldCA9IGFkZF9zdWJwcm9nKGVudiwgaSArIGluc24tXHUwMDNlaW1tICsgMSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC0yOTA1LDYgKzI5MDAsMjggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGFkZF9rZnVuY3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4rXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xuK1x0XHRpZiAoIWJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKCFlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgZm9yIENBUF9CUEYgYW5kIENBUF9TWVNfQURNSU5cXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FUEVSTTtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBicGZfYWRkX2tmdW5jX2NhbGwoZW52LCBpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XG5AQCAtMTA4OTIsOSArMTA5MDksMTYgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZcbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fcmVmY291bnRlZF9rcHRyXCIpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4re1xuK1x0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19hcmVuYV9fbnVsbGFibGVcIik7XG4rfVxuK1xuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4tXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX251bGxhYmxlXCIpO1xuK1x0cmV0dXJuICFpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoYnRmLCBhcmcpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19udWxsYWJsZVwiKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX25vbm93bl9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuQEAgLTEwOTEyLDYgKzEwOTM2LDEyIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW1cbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9faXJxX2ZsYWdcIik7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbit7XG4rXHRyZXR1cm4gaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKGJ0ZiwgYXJnKSB8fFxuK1x0ICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19hcmVuYVwiKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbiBcdFx0XHRcdFx0ICBjb25zdCBjaGFyICpuYW1lKVxuQEAgLTExMTMyLDYgKzExMTYyLDcgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuIFx0S0ZfQVJHX1BUUl9UT19JUlFfRkxBRyxcbiBcdEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSyxcbiBcdEtGX0FSR19QVFJfVE9fVEFTS19XT1JLLFxuK1x0S0ZfQVJHX1BUUl9UT19BUkVOQSxcbiB9O1xuIFxuIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbkBAIC0xMTQxNyw3ICsxMTQ0OCw2IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4gXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cbiBcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cdTAwM2VidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS1cdTAwM2VidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiBcbkBAIC0xMTQ2Niw3ICsxMTQ5NiwyOSBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcbiBcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuIFx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XG4tXHRlbHNlIGlmIChhcmcgKyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSkge1xuK1x0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxuXCIsXG4rXHRcdFx0XHRtZXRhLVx1MDAzZWZ1bmNfbmFtZSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbitcdFx0fVxuK1x0XHRpZiAoIWVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkge1xuK1x0XHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFx0XCIlcyBhcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXG5cIixcbitcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdFx0aWYgKHJlZ19mcm9tX2FyZ25vKGFyZ25vKSBcdTAwM2MgMCkge1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcIiVzIGFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcXG5cIixcbitcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdFx0LypcbitcdFx0ICogQm90aCBzdWZmaXhlcyBhY2NlcHQgYSBjb25zdGFudCB6ZXJvLiBUaGUgZnVuY3Rpb24gbW9kZWwgZGV0ZXJtaW5lc1xuK1x0XHQgKiB3aGV0aGVyIHRoZSBKSVQgcmViYXNlcyBpdCB0byB0aGUgYXJlbmEgYmFzZSBvciBwcmVzZXJ2ZXMgTlVMTC5cbitcdFx0ICovXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19BUkVOQSB8IFBUUl9NQVlCRV9OVUxMO1xuK1x0fSBlbHNlIGlmIChhcmcgKyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcbiBcdFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcdTAwMjZcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG5AQCAtMTIxNjAsNyArMTIyMTIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xuIFxuIFx0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpIFx1MDAyNlx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuK1x0XHQgICAgIXR5cGVfbWF5X2JlX251bGwoa2ZfYXJnX3R5cGUpKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCIsXG4gXHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuQEAgLTEyMjEzLDYgKzEyMjY1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSzpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lSUV9GTEFHOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSzpcbitcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FSRU5BOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fRFlOUFRSOlxuIFx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7XG5AQCAtMTIyNzksNiArMTIzMzIsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdG1ldGEtXHUwMDNlcmV0X2J0Zl9pZCAgPSByZXQ7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEtGX0FSR19QVFJfVE9fQVJFTkE6XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxcblwiLFxuK1x0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEOlxuIFx0XHRcdGlmIChyZWctXHUwMDNldHlwZSA9PSAoUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQykpIHtcbiBcdFx0XHRcdGlmICghaXNfYnBmX29ial9kcm9wX2tmdW5jKG1ldGEtXHUwMDNlZnVuY19pZCkpIHtcbkBAIC0xODgwOCwxMCArMTg4NjgsMjEgQEAgaW50IGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdHJldHVybiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm8gPyAwIDogLUVOT01FTTtcbiB9XG4gXG4rYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9fc2l6ZTsgaSsrKVxuK1x0XHRpZiAoYmFzZV90eXBlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mb1tpXS5yZWdfdHlwZSkgPT0gUFRSX1RPX0FSRU5BKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqZnVuY19wcm90bztcbiBcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcbitcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcztcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXHUwMDNlcHJvZztcbkBAIC0xODg5MCwxMCArMTg5NjEsMjMgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudDsgaSsrKSB7XG4tXHRcdGlmIChzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvW2ldLnJlZmNvdW50ZWQpIHtcbitcdGFyZ19pbmZvID0gXHUwMDI2c3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF07XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmdfaW5mby1cdTAwM2VjbnQ7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXHUwMDI2YXJnX2luZm8tXHUwMDNlaW5mb1tpXTtcbitcbitcdFx0aWYgKGluZm8tXHUwMDNlcmVmY291bnRlZClcbiBcdFx0XHRoYXNfcmVmY291bnRlZF9hcmcgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoYmFzZV90eXBlKGluZm8tXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xuK1x0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcblwiKTtcbitcdFx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpIHtcbitcdFx0XHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFx0XHRcImFyZW5hIGFyZ3VtZW50IG9mICVzIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXG5cIixcbitcdFx0XHRcdFx0bW5hbWUpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTg5MTQsOCArMTg5OTgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XG4gXHRlbnYtXHUwMDNlb3BzID0gc3Rfb3BzLVx1MDAzZXZlcmlmaWVyX29wcztcbiBcbi1cdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvLFxuLVx0XHRcdFx0XHQgIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudCk7XG4rXHRyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgYXJnX2luZm8tXHUwMDNlaW5mbywgYXJnX2luZm8tXHUwMDNlY250KTtcbiB9XG4gI2RlZmluZSBTRUNVUklUWV9QUkVGSVggXCJzZWN1cml0eV9cIlxuIFxuQEAgLTE5MTc5LDYgKzE5MjYyLDE3IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdGJwZl9sb2cobG9nLCBcIlN1YnByb2cgJXMgZG9lc24ndCBleGlzdFxcblwiLCB0bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0LypcbitcdFx0ICogQSBzdHJ1Y3Rfb3BzIGluZGlyZWN0IHRyYW1wb2xpbmUgY29udmVydHMgYXJlbmEgYXJndW1lbnRzXG4rXHRcdCAqIGJlZm9yZSBpbnZva2luZyBpdHMgcHJvZ3JhbS4gQSB0cmFjaW5nIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlXG4rXHRcdCAqIG1haW4gcHJvZ3JhbSB3b3VsZCBzZWUgdGhlIGNvbnZlcnRlZCBvZmZzZXQgYXMgYSByZWd1bGFyIEJURlxuK1x0XHQgKiBwb2ludGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKHByb2dfdHJhY2luZyBcdTAwMjZcdTAwMjYgc3VicHJvZyA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcodGd0X3Byb2cpKSB7XG4rXHRcdFx0YnBmX2xvZyhsb2csIFwiQ2Fubm90IHRyYWNlIGEgdGFyZ2V0IHdpdGggYXJlbmEgY29udGV4dCBhcmd1bWVudHNcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHR9XG4gXHRcdGlmIChhdXgtXHUwMDNlZnVuYyBcdTAwMjZcdTAwMjYgYXV4LVx1MDAzZWZ1bmNbc3VicHJvZ10tXHUwMDNlYXV4LVx1MDAzZWV4Y2VwdGlvbl9jYikge1xuIFx0XHRcdGJwZl9sb2cobG9nLFxuIFx0XHRcdFx0XCIlcyBwcm9ncmFtcyBjYW5ub3QgYXR0YWNoIHRvIGV4Y2VwdGlvbiBjYWxsYmFja1xcblwiLFxuQEAgLTIwMjY5LDExICsyMDM2MywxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZW52LVx1MDAzZWV4cGxvcmVkX3N0YXRlc1tpXSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlbnYtXHUwMDNlZnJlZV9saXN0KTtcbiBcbi1cdHJldCA9IGJwZl9jaGVja19idGZfaW5mb19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTtcbitcdC8qIFByZXBhcmUgQlRGIGFuZCBmdW5jX2luZm8gbmVlZGVkIHRvIGRpc2NvdmVyIGFsbCBzdWJwcm9ncmFtcy4gKi9cbitcdHJldCA9IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHRyZXQgPSBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoZW52KTtcbitcdC8qIERpc2NvdmVyIGFsbCBzdWJwcm9ncmFtcyBiZWZvcmUgdmFsaWRhdGluZyB0aGVpciBsYXlvdXQgYW5kIEJURi4gKi9cbitcdHJldCA9IGFkZF9zdWJwcm9ncyhlbnYpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG5AQCAtMjAyODEsMTQgKzIwMzc3LDIxIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4rXHQvKiBWYWxpZGF0ZSBCVEYgYWdhaW5zdCB0aGUgY29tcGxldGUgc3VicHJvZ3JhbSBsYXlvdXQgYW5kIGFwcGx5IENPLVJFLiAqL1xuIFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4rXHQvKiBWYWxpZGF0ZSBpbnN0cnVjdGlvbnMgYW5kIHJlc29sdmUgdGhlIHByb2dyYW0ncyByZWZlcmVuY2VkIHJlc291cmNlcy4gKi9cbiBcdHJldCA9IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbitcdC8qIEJ1aWxkIGtmdW5jIHByb3RvdHlwZXMgYWZ0ZXIgcmVzb2x2aW5nIHByb2dyYW0gcmVzb3VyY2VzLiAqL1xuK1x0cmV0ID0gYWRkX2tmdW5jcyhlbnYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4rXG4gXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpIHtcbiBcdFx0cmV0ID0gYnBmX3Byb2dfb2ZmbG9hZF92ZXJpZmllcl9wcmVwKGVudi1cdTAwM2Vwcm9nKTtcbiBcdFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzIzZDcwN2M1NDNmYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC0wLDAgKzEsNzQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmEuc2tlbC5oXCJcbisjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmhcIlxuK1xuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rLypcbisgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZVxuKyAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGFyZW5hX2FyZyh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XG4rXHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDtcbitcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGxpbmsgPSBicGZfbWFwX19hdHRhY2hfc3RydWN0X29wcyhza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9hcmVuYSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJhdHRhY2hfc3RydWN0X29wc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnRyaWdnZXIpLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZ0b3B0cyk7XG4rXHRBU1NFUlRfT0soZXJyLCBcInRlc3RfcnVuXCIpO1xuK1x0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCJ0cmlnZ2VyX3JldHZhbFwiKTtcbitcbitvdXQ6XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdHN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuKy8qXG4rICogQSBwcm9ncmFtIHdpdGggbm8gYXJlbmEgY2Fubm90IGF0dGFjaCB0byBhIG1lbWJlciB3aXRoIGFuIF9fYXJlbmFcbisgKiBhcmd1bWVudC5cbisgKi9cbitzdGF0aWMgdm9pZCBhcmVuYV9hcmdfZmFpbCh2b2lkKVxuK3tcbitcdHN0cnVjdCBzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwgKnNrZWw7XG4rXG4rXHRza2VsID0gc3RydWN0X29wc19hcmVuYV9mYWlsX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXCJzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fZGVzdHJveShza2VsKTtcbit9XG4rI2VuZGlmXG4rXG4rLypcbisgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaFxuKyAqIHRlc3Rfc3RydWN0X29wc19wcml2YXRlX3N0YWNrIGFsc28gYXR0YWNoZXM7IHJlZ2lzdGVyaW5nIGl0IHR3aWNlIGZhaWxzXG4rICogd2l0aCAtRUVYSVNULlxuKyAqL1xuK3ZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuXG4rXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuK1x0ICogYXJndW1lbnRzXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuK1x0ICovXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfYXJnXCIpKVxuK1x0XHRhcmVuYV9hcmcoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfYXJnX2ZhaWxcIikpXG4rXHRcdGFyZW5hX2FyZ19mYWlsKCk7XG4rI2Vsc2VcbitcdHRlc3RfX3NraXAoKTtcbisjZW5kaWZcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IGI3OWJhZmNhNjhmN2EuLjExMGEzM2I2ZTFjMjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtMiw2ICsyLDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcImFyZW5hX2tmdW5jLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJhcmVuYV9rZnVuY19qaXQuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImNhcF9oZWxwZXJzLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfYWxpZ24uc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2FuZC5za2VsLmhcIlxuQEAgLTE2MSw2ICsxNjMsMTUgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3RzX2F1eChjb25zdCBjaGFyICpza2VsX25hbWUsXG4gXG4gI2RlZmluZSBSVU4oc2tlbCkgcnVuX3Rlc3RzX2F1eCgjc2tlbCwgc2tlbCMjX19lbGZfYnl0ZXMsIE5VTEwpXG4gXG4rLypcbisgKiBUaGUgdGVzdCBrZnVuY3MgbGl2ZSBpbiBicGZfdGVzdG1vZC4gUmVzb2x2aW5nIGtmdW5jcyBhZ2FpbnN0IG1vZHVsZVxuKyAqIEJURnMgbmVlZHMgQ0FQX1NZU19BRE1JTiwgc28gcnVuIHdpdGggZnVsbCBjYXBhYmlsaXRpZXMgaW5zdGVhZCBvZlxuKyAqIHRocm91Z2ggdGhlIHZlcmlmaWVyIHRlc3RzJyBjYXBhYmlsaXR5LXJlc3RyaWN0ZWQgcnVubmVyLlxuKyAqL1xuK3ZvaWQgdGVzdF9hcmVuYV9rZnVuYyh2b2lkKSAgICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyhhcmVuYV9rZnVuYyk7IH1cbitcbit2b2lkIHRlc3RfYXJlbmFfa2Z1bmNfaml0KHZvaWQpICAgICAgICAgICAgICAgeyBSVU5fVEVTVFMoYXJlbmFfa2Z1bmNfaml0KTsgfVxuK1xuIHZvaWQgdGVzdF92ZXJpZmllcl9hbGlnbih2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9hbGlnbik7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYW5kKHZvaWQpICAgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYW5kKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9hcmVuYSh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9hcmVuYSk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDZjMzgyY2U4MWFmNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbkBAIC0wLDAgKzEsMjYwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcImJwZl9leHBlcmltZW50YWwuaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcIlxuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdC8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFsLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovXG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rLypcbisgKiBPY2N1cGllcyBwYWdlIDAgc28gbm8gYWxsb2NhdGlvbiBsYW5kcyBhdCBhcmVuYSBvZmZzZXQgMCwgd2hpY2ggdGhlXG4rICogbnVsbGFibGUgdGVzdHMgYmVsb3cgbXVzdCBiZSBhYmxlIHRvIHRlbGwgYXBhcnQgZnJvbSBOVUxMLlxuKyAqL1xuK3U2NCBfX2FyZW5hIGFyZW5hX3BhZDtcbitcbisvKiB2b2xhdGlsZSB0byBmb3JjZSB0aGUgc2NhbGFyIHJlbG9hZHMgYmVsb3cgKi9cbit2b2xhdGlsZSB1NjQgc3Rhc2g7XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1x0dTY0IHJldDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIFBUUl9UT19BUkVOQSBhcmd1bWVudCAqL1xuK1x0KnZhbCA9IDQxO1xuK1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxuK1x0XHRyZXR1cm4gMjtcbitcbitcdC8qIHRoZSBsb3cgMzIgYml0cyBhcyBhIHNjYWxhciAqL1xuK1x0c3Rhc2ggPSAodTMyKSh1NjQpdmFsO1xuK1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7XG4rXHRpZiAocmV0ICE9IDQyIHx8ICp2YWwgIT0gNDMpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0LyogdGhlIGZ1bGwgdXNlciBhZGRyZXNzIGFzIGEgc2NhbGFyICovXG4rXHRzdGFzaCA9ICh1NjQpdmFsO1xuK1x0YnBmX2FkZHJfc3BhY2VfY2FzdChzdGFzaCwgMSwgMCk7XG4rXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcdGlmIChyZXQgIT0gNDMgfHwgKnZhbCAhPSA0NClcbitcdFx0cmV0dXJuIDQ7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQaW4gdGhlIHJlYmFzZSBzZW1hbnRpY3MgdXNpbmcgdGhlIGNhcHR1cmUga2Z1bmNzLCB3aGljaCByZXR1cm4gdGhlIHJhd1xuKyAqIGFyZ3VtZW50IHZhbHVlOiBfX2FyZW5hIHJlYmFzZXMgdW5jb25kaXRpb25hbGx5LCBzbyB6ZXJvIGxvdyAzMiBiaXRzXG4rICogYXJyaXZlIGFzIHRoZSBhcmVuYSBrZXJuZWwgYmFzZSwgd2hpbGUgX19hcmVuYV9fbnVsbGFibGUgdHVybnMgdGhlbSBpbnRvXG4rICogTlVMTC5cbisgKi9cbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK2ludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1x0dTY0IGJhc2UsIG9mZjtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJhc2UgPSBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoTlVMTCk7XG4rXHRpZiAoIWJhc2UpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgY29udHJpYnV0ZSAqL1xuK1x0c3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7XG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCkgIT0gYmFzZSlcbitcdFx0cmV0dXJuIDM7XG4rXG4rXHRvZmYgPSAodTMyKSh1NjQpdmFsO1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICsgb2ZmKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoTlVMTCkgIT0gMClcbitcdFx0cmV0dXJuIDU7XG4rXG4rXHRzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDtcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSAwKVxuK1x0XHRyZXR1cm4gNjtcbitcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSArIG9mZilcbitcdFx0cmV0dXJuIDc7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX251bGxhYmxlKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1x0dTY0IHJldDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdCp2YWwgPSA0MTtcbitcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCgodTY0ICopdmFsKTtcbitcdGlmIChyZXQgIT0gNDEgfHwgKnZhbCAhPSA0MilcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KE5VTEwpICE9IDB4ZGVhZGJlZWYpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1xuK1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0dmFsWzBdID0gMTtcbitcdHZhbFsxXSA9IDI7XG4rXHR2YWxbMl0gPSA0O1xuK1x0dmFsWzNdID0gODtcbitcdHZhbFs0XSA9IDE2O1xuK1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0sXG4rXHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSxcbitcdFx0XHRcdCAgICAgICAodTY0ICopXHUwMDI2dmFsWzRdKSAhPSAzMSlcbitcdFx0cmV0dXJuIDI7XG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbitcdFx0XHRcdCAgICAgICAodTY0ICopXHUwMDI2dmFsWzJdLCAodTY0ICopXHUwMDI2dmFsWzNdLCBOVUxMKSAhPSAxNSlcbitcdFx0cmV0dXJuIDM7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1xuK1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0dmFsWzBdID0gNztcbitcdHZhbFsxXSA9IDU7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgTlVMTCkgIT0gNylcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSkgIT0gMTIpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1xuK1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0c3Rhc2ggPSAodTY0KXZhbCArIFBBR0VfU0laRTtcbitcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCIpXG4raW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKikxKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXCIpXG4raW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbit7XG4rXHR1NjQgYnVmID0gMDtcbitcbitcdC8qIHVzZSB0aGUgYXJlbmEgc28gdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBhcmVuYSBwcmVzZW5jZSBjaGVjayAqL1xuK1x0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0YnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KFx1MDAyNmJ1Zik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpIFx1MDAyNlx1MDAyNiBcXFxuK1x0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKVxuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFwiKVxuK2ludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdCgxLCAyLCAzLCA0LCA1LCAodTY0ICopMSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2Vsc2VcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fZGVzY3JpcHRpb24oXCJhcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3RcIilcbitfX3N1Y2Nlc3NcbitpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2VuZGlmXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5YjkxODY2MjYxNjJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTAsMCArMSw5OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuK1xuKy8qXG4rICogVmVyaWZ5IHRoZSBKSVQtZW1pdHRlZCByZWJhc2Ugc2VxdWVuY2VzIGZvciBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZVxuKyAqIGtmdW5jIGFyZ3VtZW50cy4gVGhlIGNhcHR1cmUga2Z1bmNzIHRha2UgdGhlIGFyZ3VtZW50IHdpdGhvdXRcbisgKiBkZXJlZmVyZW5jaW5nIGl0LCBzbyB0aGVzZSB0ZXN0cyBwaW4gb25seSB0aGUgZW1pdHRlZCBjb2RlLlxuKyAqL1xuKyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCJcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rLyogdm9sYXRpbGUgdG8gZm9yY2UgdGhlIHNjYWxhciByZWxvYWRzIGJlbG93ICovXG4rdm9sYXRpbGUgdTY0IHN0YXNoO1xuK1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdG1vdmxcdCVlZGksICVlZGlcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdGNhbGxxXHR7ey4qfX1cIilcbitfX3N1Y2Nlc3NcbitpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxuK3tcbitcdHN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlZWRpLCAlZWRpXCIpXG4rX19qaXRlZChcIlx0dGVzdGxcdCVlZGksICVlZGlcIilcbitfX2ppdGVkKFwiXHRqZVx0TDBcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4rX19qaXRlZChcIkwwOlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fc3VjY2Vzc1xuK2ludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcbit7XG4rXHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0YnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0bW92bFx0JWVkaSwgJWVkaVwiKVxuK19faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlZXNpLCAlZXNpXCIpXG4rX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJzaVwiKVxuK19faml0ZWQoXCJcdG1vdmxcdCVlZHgsICVlZHhcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmR4XCIpXG4rX19qaXRlZChcIlx0bW92bFx0JWVjeCwgJWVjeFwiKVxuK19faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyY3hcIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlcjhkLCAlcjhkXCIpXG4rX19qaXRlZChcIlx0dGVzdGxcdCVyOGQsICVyOGRcIilcbitfX2ppdGVkKFwiXHRqZVx0TDBcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcjhcIilcbitfX2ppdGVkKFwiTDA6XHRjYWxscVx0e3suKn19XCIpXG4rX19zdWNjZXNzXG4raW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICp2YWw7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHR2YWxbMF0gPSAxO1xuK1x0dmFsWzFdID0gMjtcbitcdHZhbFsyXSA9IDQ7XG4rXHR2YWxbM10gPSA4O1xuK1x0dmFsWzRdID0gMTY7XG4rXG4rXHRicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCAodTY0ICopXHUwMDI2dmFsWzFdLFxuK1x0XHRcdFx0ICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSxcbitcdFx0XHRcdCAgICh1NjQgKilcdTAwMjZ2YWxbNF0pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZiAvKiBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCAqL1xuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJhMDRjNzNkOGQ5Njdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC0wLDAgKzEsMTE1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXCJcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdC8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFscywgcGFnZSAxIGlzIGZvciBhbGxvY2F0aW9ucyAqL1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuKy8qIGFsc28gYXNzb2NpYXRlcyB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGFyZW5hICovXG4rdTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XG4rLyogcmF3IHZhbHVlIG9mIHRoZSBsYXN0IF9fYXJlbmEgY3R4IGFyZ3VtZW50LCBjYXB0dXJlZCBieSB0ZXN0X2FyZW5hX2NiICovXG4rdTY0IF9fYXJlbmEgY2JfcHRyX3ZhbDtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFcIilcbitpbnQgdGVzdF9hcmVuYV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbit7XG4rXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xuK1xuK1x0YXJlbmFfdG91Y2grKztcbitcdGNiX3B0cl92YWwgPSBjdHhbMF07XG4rXHQqcHRyICs9IDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXCIpXG4raW50IHRlc3RfYXJlbmFfbnVsbGFibGVfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4re1xuK1x0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTtcbitcbitcdGFyZW5hX3RvdWNoKys7XG4rXHRpZiAoIXB0cilcbitcdFx0cmV0dXJuIDB4YmVlO1xuK1x0KnB0ciArPSAxO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYV9zdGFja1wiKVxuK2ludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07XG4rXG4rXHRhcmVuYV90b3VjaCsrO1xuK1x0LyogcGluIHRoZSBzbG90IGxheW91dDogdGhlIGxlYWRpbmcgYXJncyBmaWxsIGN0eFswXS4uY3R4WzddICovXG4rXHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXG4rXHRcdHJldHVybiAweGJhZDtcbitcdCpwdHIgKz0gMTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbitcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuK1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4rXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbit9O1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgdHJpZ2dlcih2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcdGludCByZXQ7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHQqdmFsID0gNDE7XG4rXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAyO1xuK1x0aWYgKCp2YWwgIT0gNDIpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0LypcbitcdCAqIFRoZSBjYWxsYmFjayBtdXN0IGhhdmUgc2VlbiBleGFjdGx5ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCksXG4rXHQgKiB3aGljaCBpcyB0aGUgYXJlbmEgb2Zmc2V0IG9mIHZhbCB3aXRoIHRoZSB1cHBlciAzMiBiaXRzIGNsZWFyLlxuK1x0ICovXG4rXHRpZiAoY2JfcHRyX3ZhbCAhPSAodTMyKSh1NjQpdmFsKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDU7XG4rXHRpZiAoKnZhbCAhPSA0MylcbitcdFx0cmV0dXJuIDY7XG4rXG4rXHQvKiBOVUxMIHN1cnZpdmVzIHRoZSBudWxsYWJsZSBrZnVuYyBhbmQgdGhlIHRyYW1wb2xpbmUgYXMgTlVMTCAqL1xuK1x0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoTlVMTCk7XG4rXHRpZiAocmV0ICE9IDB4YmVlKVxuK1x0XHRyZXR1cm4gNztcbitcbitcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDg7XG4rXHRpZiAoKnZhbCAhPSA0NClcbitcdFx0cmV0dXJuIDk7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWMwZWM3MjdkNjM3NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXG5AQCAtMCwwICsxLDIwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuKy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYVwiKVxuK2ludCB0ZXN0X2FyZW5hX25vX2FyZW5hKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xuK1x0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfbm9fYXJlbmEsXG4rfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggZWIwZjliNWUxOGQ4NS4uMjk2M2MyOWY5NmJhNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0yMzcsNiArMjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpXG4ge1xuIH1cbiBcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYSlcbit7XG4rXHR1NjQgb2xkO1xuK1xuK1x0b2xkID0gKnZhbF9fYXJlbmE7XG4rXHQqdmFsX19hcmVuYSA9IG9sZCArIDE7XG4rXHRyZXR1cm4gb2xkO1xuK31cbitcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpXG4re1xuK1x0dTY0IG9sZDtcbitcbitcdGlmICghdmFsX19hcmVuYV9fbnVsbGFibGUpXG4rXHRcdHJldHVybiAweGRlYWRiZWVmO1xuK1xuK1x0b2xkID0gKnZhbF9fYXJlbmFfX251bGxhYmxlO1xuK1x0KnZhbF9fYXJlbmFfX251bGxhYmxlID0gb2xkICsgMTtcbitcdHJldHVybiBvbGQ7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKVxuK3tcbitcdHJldHVybiAodTY0KXZhbF9fYXJlbmE7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QodTY0ICp2YWxfX2FyZW5hX19udWxsYWJsZSlcbit7XG4rXHRyZXR1cm4gKHU2NCl2YWxfX2FyZW5hX19udWxsYWJsZTtcbit9XG4rXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KHU2NCAqYV9fYXJlbmEsIHU2NCAqYl9fYXJlbmEsXG4rXHRcdFx0XHRcdCAgIHU2NCAqY19fYXJlbmEsIHU2NCAqZF9fYXJlbmEsXG4rXHRcdFx0XHRcdCAgIHU2NCAqZV9fYXJlbmFfX251bGxhYmxlKVxuK3tcbitcdHJldHVybiAqYV9fYXJlbmEgKyAqYl9fYXJlbmEgKyAqY19fYXJlbmEgKyAqZF9fYXJlbmEgK1xuK1x0ICAgICAgIChlX19hcmVuYV9fbnVsbGFibGUgPyAqZV9fYXJlbmFfX251bGxhYmxlIDogMCk7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLFxuK1x0XHRcdFx0XHRcdHU2NCAqZl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIGEgKyBiICsgYyArIGQgKyBlICsgKmZfX2FyZW5hO1xuK31cbitcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpXG4re1xuK1x0cmV0dXJuICphX19hcmVuYSArIChiX19hcmVuYV9fbnVsbGFibGUgPyAqYl9fYXJlbmFfX251bGxhYmxlIDogMCk7XG4rfVxuK1xuIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KHN0cnVjdCBicGZfZHlucHRyICpwdHIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9keW5wdHIgKnB0cl9fbnVsbGFibGUpXG4ge1xuQEAgLTM0Nyw5ICszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLFxuK1x0XHRcdFx0XHQgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCxcbitcdFx0XHRcdFx0ICAgICAgdTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xuIFx0LnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMyxcbiBcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXG4rXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4rXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4rXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpXG5AQCAtMzY4LDYgKzQzOCwyMSBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIodm9pZClcbiBcdHN0X29wczMtXHUwMDNldGVzdF8yKCk7XG4gfVxuIFxuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSh1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYShwdHJfX2FyZW5hKTtcbit9XG4rXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpXG4re1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX19udWxsYWJsZSk7XG4rfVxuK1xuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcbit9XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtNzU1LDYgKzg0MCwxMyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfdmFsdWUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jb21tb25fdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZHlucHRyX3Rlc3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19uZXN0ZWRfYWNxdWlyZV9ub256ZXJvX29mZnNldF90ZXN0LCBLRl9BQ1FVSVJFKVxuQEAgLTc3MCw2ICs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDYsNiArMTA2LDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbitcdC8qIFVzZWQgdG8gdGVzdCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50cy4gKi9cbitcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcbitcdGludCAoKnRlc3RfYXJlbmFfbnVsbGFibGUpKHU2NCAqcHRyKTtcbitcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXG4rXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuK1x0XHRcdFx0dTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCBjMzZiYjkxMWRlZmE3Li5kYzdjNDBiZDEyOTkzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTk4LDYgKzk4LDE2IEBAIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWxlYXNlKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XG4gdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlZihzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCkgX19rc3ltO1xuIFxuIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKHZvaWQgKm1lbSwgaW50IGxlbikgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoX191NjQgKnZhbF9fYXJlbmEpIF9fa3N5bTtcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoX191NjQgKmFfX2FyZW5hLCBfX3U2NCAqYl9fYXJlbmEsXG4rXHRcdFx0XHQgX191NjQgKmNfX2FyZW5hLCBfX3U2NCAqZF9fYXJlbmEsXG4rXHRcdFx0XHQgX191NjQgKmVfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdChfX3U2NCBhLCBfX3U2NCBiLCBfX3U2NCBjLCBfX3U2NCBkLCBfX3U2NCBlLFxuK1x0XHRcdFx0ICAgICBfX3U2NCAqZl9fYXJlbmEpIF9fa3N5bTtcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiBpbnQgKmJwZl9rZnVuY19jYWxsX3Rlc3RfZ2V0X3Jkd3JfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmR3cl9idWZfc2l6ZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9hY3FfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xuQEAgLTExMSw2ICsxMjEsOSBAQCB1MzIgYnBmX2tmdW5jX2NhbGxfdGVzdF9zdGF0aWNfdW51c2VkX2FyZyh1MzIgYXJnLCB1MzIgdW51c2VkKSBfX2tzeW07XG4gI2VuZGlmXG4gXG4gdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYShfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiBcbiBfX3U2NCBicGZfa2Z1bmNfY2FsbF90ZXN0MShzdHJ1Y3Qgc29jayAqc2ssIF9fdTMyIGEsIF9fdTY0IGIsXG4gXHRcdFx0XHRfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNjo0My4wODAwMzU0NzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzM4OTc3Nzg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQb2ludGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9fbnVsbGFibGVgIGFubm90YXRpb25zIHRvIEJQRiBrZnVuY3MgYW5kIGBzdHJ1Y3Rfb3BzYCwgd2hpY2ggaXMgcHJldHR5IGludGVyZXN0aW5nLiBJdCdzIHRvdWNoaW5nIHRoZSB4ODYgQlBGIEpJVCwgcGx1cyBzb21lIGNvcmUgQlBGIGNvbXBvbmVudHMgbGlrZSB0aGUgdmVyaWZpZXIsIEJURiBoYW5kbGluZywgc3RydWN0IG9wcywgYW5kIGV2ZW4gdGhlIHRyYW1wb2xpbmUgbG9naWMuIEdpdmVuIHRoZSB2ZXJpZmllciBhbmQgSklUIGFyZSBpbnZvbHZlZCwgdGhpcyBhYnNvbHV0ZWx5IHNjcmVhbXMgZm9yIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSBrZXkgc3ltYm9scyBpbXBhY3RlZC4gSSdtIHNlZWluZyBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgYWNyb3NzIGEgcmFuZ2Ugb2YgZnVuY3Rpb25zIOKAkyBzb21lIHN0YXRpYywgc29tZSBnbG9iYWwuIFRoZSBzdGF0aWMgb25lcyBhcmUgbGVzcyBvZiBhIGRpcmVjdCBjb25jZXJuIGluaXRpYWxseSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBub24tc3RhdGljIG9uZXM6IGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGBzYXZlX2FyZ3NgLCBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgYGJwZl90cmFtcF9hcmVuYV9iYXNlYCwgYHByZXBhcmVfYXJnX2luZm9gLCBgYnRmX2N0eF9hY2Nlc3NgLCBgX19nZXRfYXJnX2Ztb2RlbF9mbGFnc2AsIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCwgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYCwgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGBhZGRfc3VicHJvZ3NgLCBgYWRkX2tmdW5jc2AsIGBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGVgLCBgaXNfa2Z1bmNfYXJnX2FyZW5hYCwgYGdldF9rZnVuY19hcmdfdHlwZWAsIGBjaGVja19rZnVuY19hcmdzYCwgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCwgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYCwgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YCwgYGJwZl9jaGVja2BcblxuSSdtIHRoaW5raW5nIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBhbnl0aGluZyB0aGF0J3MgYSBwb3RlbnRpYWwgYm91bmRhcnkgb3IgaW50ZXJhY3Rpb24gcG9pbnQuIEknbSB6ZXJvaW5nIGluIG9uIGEgZmV3IGNhbmRpZGF0ZXM6IGBicGZfdHJhbXBfYXJlbmFfYmFzZWAsIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AsIGBicGZfcHJlcGFyZV9idGZfaW5mb2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBMZXQncyB0aHJvdyBpbiBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgYnRmX2N0eF9hY2Nlc3NgIGJlY2F1c2UgdGhlc2UgYXJlIGludm9sdmVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxzIHRvIGBwcmVwYXJlX2FyZ19pbmZvYCBpbiBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCwgdG9vLlxuXG5XYWl0LCBgYnBmX2NoZWNrYCBpcyB3YXkgdG9vIGJyb2FkLiBMZXQncyBmaWx0ZXIgdGhhdCBvdXQuIEknbGwgbmVlZCB0byBjaGVjayBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCBpbiBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYC4gSSB3aWxsIGFsc28gY2hlY2sgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYGJ0Zl9jdHhfYWNjZXNzYCBpbiBga2VybmVsL2JwZi9idGYuY2AsIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBpbiBga2VybmVsL2JwZi9idGYuY2AsIGFuZCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgXG5cbkknbSBnb2luZyB0byB3b3JrIHdpdGggYGJwZl90cmFtcF9hcmVuYV9iYXNlYCwgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCwgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYCwgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBndWlkZSBteSB0ZXN0aW5nIGFuZCBkZXRlcm1pbmUgd2hhdCB0aGUgcGF0Y2ggYWN0aXZhdGVzLiBga2VybmVsL2JwZi9gIHBvaW50cyB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhlIEpJVCBwYXJ0IGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIHVzZXMgYENPTkZJR19CUEZfSklUYC4gVGhlIGBzdHJ1Y3Rfb3BzYCBzaWRlIGlzIGxpa2VseSB1bmRlciBib3RoIGBDT05GSUdfQlBGX0pJVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjAwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNjo1Ni40Njk4MTY1NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NTkxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI2OjU2LjUyMjc4MDAzNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTk3NDk0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRl9KSVQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQlBGX0pJVGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgcGFydGljdWxhcmx5IHRoZSB4ODYgb25lLCBnaXZlbiB0aGlzIGlzIGxpa2VseSB4ODYgcmVsYXRlZC4gVGhlcmVmb3JlLCBsZXQncyBkcmlsbCBkb3duIGludG8gYGFyY2gveDg2L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9uLCBhbG9uZ3NpZGUgb3RoZXIgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGF0IGZpbGUgY2xvc2VseSB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IHJlbGV2YW50IHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MjY6NTkuODQyNTMzMDkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjUzMzI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNjo1OS44ODg3OTM1NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjExNDY1MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqTG9jYXRpbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgYXJlIGxvY2F0ZWQsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhleSdsbCBiZSBpbiBvbmUgb2YgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIHByZXR0eSB3ZWxsLW9yZ2FuaXplZCwgc28gdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgYXJlIGBrZXJuZWwvYnBmL0tjb25maWdgIChzaW5jZSB0aGlzIGlzIEJQRi1yZWxhdGVkKSBvciBwb3NzaWJseSBgbmV0L0tjb25maWdgIChiZWNhdXNlIEJQRiBpcyBoZWF2aWx5IHVzZWQgaW4gbmV0d29ya2luZyBjb250ZXh0cykuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgZmlsZXMgZGlyZWN0bHkuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgY29udmVudGlvbiwgc28gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IEknbGwgZmluZCB3aGF0IEknbSBsb29raW5nIGZvciB0aGVyZSwgb3IgYXQgbGVhc3QgYmUgcG9pbnRlZCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM4MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjAzLjEwMDI2MjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwMjQ3MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzowMy40MDA1MTQ4OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM0MjY5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYsIGFuZCBpdCBsb29rcyBsaWtlIHdlIG5lZWQgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAgZW5hYmxlZC4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCwgZ2VuZXJhbGx5IGluZGljYXRpbmcgd2UncmUgcGxhbm5pbmcgdG8gbGV2ZXJhZ2UgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhbmQsIG9mIGNvdXJzZSwgdGhlIEpJVCBjb21waWxlciBmb3IgQlBGIGJ5dGVjb2RlLiBNYWtlcyBzZW5zZS4gQnV0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBmbGFncyByZWxhdGVkIHRvIGBicGZfYXJlbmFgLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYW55IHJlbGF0ZWQga2VybmVsIG1vZHVsZXMgdG8gYmUgZnVsbHkgaW5mb3JtZWQgYmVmb3JlIEkgcHJvY2VlZC4gRG9uJ3Qgd2FudCB0byBnZXQgdHJpcHBlZCB1cCBieSBhIGhpZGRlbiBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgxNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjA3LjIzNDc4ODI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNzk2NzQ5NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9BUkVOQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjA5LjA2Mjc2NjA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODQ5Mjc4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCUEYgQ29tcGlsYXRpb24qKlxuXG5IbW0sIHRoZXJlJ3Mgbm8gYENPTkZJR19CUEZfQVJFTkFgIGRlZmluZWQuIFRoYXQncyBhIGJpdCBvZGQ7IEkgY291bGQgaGF2ZSBzd29ybiBJJ2Qgc2VlbiBpdCBzb21ld2hlcmUuIFdhaXQsIGhvbGQgb24uIElzIGl0IGBDT05GSUdfQlBGX0VWRU5UU2AgaW5zdGVhZD8gUGVyaGFwcyBpdCdzIGEgbmV3ZXIsIG1vcmUgc3RyZWFtbGluZWQgb3B0aW9uLCBvciBtYXliZSBpdCdzIHJlbGF0ZWQsIGp1c3QgbmFtZWQgZGlmZmVyZW50bHkuIFJpZ2h0LCBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5UbyBmaWd1cmUgb3V0IGhvdyB0aGUgYGJwZl9zdHJ1Y3Rfb3BzLmNgIGFuZCBgdHJhbXBvbGluZS5jYCBmaWxlcyBhcmUgYmVpbmcgaGFuZGxlZCwgSSBzaG91bGQgZXhhbWluZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCBob3cgdGhvc2Ugc3BlY2lmaWMgc291cmNlcyBhcmUgYnVpbHQgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gdGhlbS4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBzZWUgaG93IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGFycmFuZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjEyLjk0NzY5NjU0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNzM4NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cnVjdF9vcHMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3N0cnVjdF9vcHMub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXNrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MTIuOTk1ODc0NzE5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzA3MTkyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCUEYgVmVyaWZpY2F0aW9uIGFuZCBKSVQgQ29tcGlsYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGp1c3QgZW5hYmxpbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAgc2hvdWxkIGdpdmUgbWUgZXZlcnl0aGluZyBJIG5lZWQgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBhbmQgaG9wZWZ1bGx5IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYHRyYW1wb2xpbmUub2Agb2JqZWN0IGZpbGUuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGl0cyByb2xlIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBVbmRlcnN0YW5kaW5nIGl0cyBidWlsZCBwcm9jZXNzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gaG93IHRoZSBCUEYgdHJhbXBvbGluZXMgYXJlIGNyZWF0ZWQgYW5kIGludGVncmF0ZWQsIHdoaWNoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzoxNi42MjY1OTczMjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzgyODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjE2LjY3MTk4NTE3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU5MzI5NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBhbmQgVHJhbXBvbGluZXMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX0pJVGAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciBgdHJhbXBvbGluZS5vYCDigJMgdGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gcmVtZW1iZXIuIE5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcy4gQmFzZWQgb24gbXkgcXVpY2sgc2NhbiwgdGhlc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBvbjpcblxuKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWBcbiogICBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgXG4qICAgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYFxuKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgXG4qICAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gXG4qICAgYGJ0Zl9jdHhfYWNjZXNzYFxuKiAgIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgXG4qICAgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YFxuXG5Ob3csIEknbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGl0J3MgZXhwb3J0ZWQgb3IgZ2xvYmFsbHkgYWNjZXNzaWJsZSBiZWNhdXNlIHRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IGVhc3kgaXQgaXMgdG8gaW50ZXJhY3Qgd2l0aCBpdHMgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3ODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MjEuMjMxMzE5NDY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQxNzk0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RydWN0X29wc19kZXNjX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTM0Nz1pbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1NDppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU1LVxcdFxcdFxcdCAgICAgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz05ODg5PWJ0Zl9hZGRfc3RydWN0X29wcyhzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05OTIwLVxcbmtlcm5lbC9icGYvYnRmLmM6OTkyMTpcXHRlcnIgPSBicGZfc3RydWN0X29wc19kZXNjX2luaXQoXFx1MDAyNnRhYi1cXHUwMDNlb3BzW2J0Zi1cXHUwMDNlc3RydWN0X29wc190YWItXFx1MDAzZWNudF0sIGJ0ZiwgbG9nKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTk5MjItXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MjEuMjgyNzQyOTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3NzQzNTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTY29wZSBcdTAwMjYgTWV0aG9kKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCdzIGNvbmZpcm1lZCB0byBiZSBnbG9iYWwgaW4gbmF0dXJlLiBHb29kLCBpbXBvcnRhbnQgdG8gZXN0YWJsaXNoIHRoYXQgYXQgdGhlIG91dHNldC4gTm93LCB3aXRoIHRoYXQgZXN0YWJsaXNoZWQgSSBuZWVkIHRvIGxvb2sgaW50byBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBnbG9iYWwgaW5mbHVlbmNlIG1hbmlmZXN0cywgYW5kIGhvdyBpdCdzIGJlaW5nIG1hbmFnZWQgb3IgY29uc3RyYWluZWQuIE5lZWQgdG8gZGl2ZSBkZWVwIGludG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDUxNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjI0LjE2MDE4MTQ5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMjUwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja19hdHRhY2hfdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnRmLmM9Njg1MD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MDMxLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjcwMzI6XFx0XFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNzAzMy1cXHRcXHR0bmFtZSArPSBzaXplb2YoXFxcImJ0Zl90cmFjZV9cXFwiKSAtIDE7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjI0PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1Ni1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzU3OlxcdFxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIHRndF9wcm9nLCBidGZfaWQsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1OC1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGd0X2luZm8pO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTMzLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzQ6XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM1LVxcdFxcdFxcdFxcdCAgICAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zl9pZCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjEzMD1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTQxLSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxNDI6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjE0My0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkxOTI9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTIwNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkyMDY6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjA3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk2MzA9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NjAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjYxOlxcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NjItXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MjQuMzAxNDQxMDExWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODkwNzMxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqR2xvYmFsIFNjb3BlIENoZWNrIGFuZCBUYXJnZXRlZCBGdW5jdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB0aGUgc2NvcGUuLi4geWVhaCwgSSdtIHRoaW5raW5nIHRoaXMgaXMgZGVmaW5pdGVseSBnbG9iYWwuIE5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5BbHJpZ2h0LCBub3cgbGV0J3MgZHJpbGwgZG93biBhbmQgY2hlY2sgdGhlIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoYXQgaW1wbGVtZW50YXRpb24uIEdvdHRhIGNoZWNrIGhvdyB0aGF0J3Mgd29ya2luZyB3aXRoaW4gdGhlIGdsb2JhbCBjb250ZXh0LCBhbmQgZW5zdXJlIGl0cyBoYW5kbGluZyBvZiB3aGF0ZXZlciBpdCBpcyBjb25jZXJuZWQgd2l0aCBhbGlnbnMgd2l0aCB3aGF0IEknbSBleHBlY3RpbmcuIEl0J3MgYSBrZXkgcGllY2UgaW4gdGhpcywgc28gbGV0J3MgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MjguNTkwNTE2NzY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQzNzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zNTQ9aW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNDYxLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo0NjI6XFx0XFx0aWYgKGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8obG9nLCBidGYsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ2My1cXHRcXHRcXHRcXHRcXHQgICBmdW5jX3Byb3RvLCBtbmFtZSxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NzU0Nj1zdGF0aWMgdTggX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTc1NjEtXFxua2VybmVsL2JwZi9idGYuYzo3NTYyOmludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi9idGYuYy03NTYzLVxcdFxcdFxcdCAgIHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yNzI4PWludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgxMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjgxMjpcXHRlcnIgPSBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywga2Z1bmMuYnRmLCBrZnVuYy5wcm90bywga2Z1bmMubmFtZSwgXFx1MDAyNmZ1bmNfbW9kZWwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODEzLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyMDY9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzMtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDM0OlxcdFxcdHJldCA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8obG9nLCBidGYsIHQsIHRuYW1lLCBcXHUwMDI2dGd0X2luZm8tXFx1MDAzZWZtb2RlbCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDc3OlxcdFxcdHJldCA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8obG9nLCBidGYsIHQsIHRuYW1lLCBcXHUwMDI2dGd0X2luZm8tXFx1MDAzZWZtb2RlbCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDc4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzMwPWludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc1OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NjA6XFx0ZXJyID0gYnRmX2Rpc3RpbGxfZnVuY19wcm90byhOVUxMLCBidGYsIHQsIHRuYW1lLCBcXHUwMDI2dGd0X2luZm8tXFx1MDAzZWZtb2RlbCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzYxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzoyOC42NzI5NTgyMDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MDA3Njk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqR2xvYmFsIFNjb3BlIENoZWNrIGFuZCBDb250ZXh0dWFsIEFjY2VzcyoqXG5cblJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFyOiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBnbG9iYWwgc2l0dWF0aW9uIGhlcmUuIFRoYXQncyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbi4gTm93LCBnaXZlbiB0aGF0IGdsb2JhbCBuYXR1cmUsIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIHNwZWNpZmljIGFjY2VzcyBwYXR0ZXJucyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhY3Jvc3MgdGhlIGVudGlyZSBzeXN0ZW0uXG5cblRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJ0Zl9jdHhfYWNjZXNzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZnVuY3Rpb24gd2l0aCBnbG9iYWwgdmFyaWFibGVzIG9yIGdsb2JhbCBzdGF0ZS4gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQ/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgdG8gdW5wYWNrPyBJIG5lZWQgdG8ga25vdzogd2hhdCdzIHRoZSBhY2Nlc3MgZ3JhbnVsYXJpdHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoaXMgYWNjZXNzIG9jY3VycywgZXNwZWNpYWxseSBpZiB0aGF0IGNvbnRleHQgaXMgZ2xvYmFsLCBvciBpbmZsdWVuY2VkIGJ5IGdsb2JhbCBzdGF0ZT8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIGluIHRoZSBnbG9iYWwgY29udGV4dCwgYXMgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3VyIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQxNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjMzLjMzMzA0MDkwM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5ODUwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX2N0eF9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfbHNtLmM9NDE2PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGxzbV92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDE3LVxcdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTg6XFx0LmlzX3ZhbGlkX2FjY2VzcyA9IGJ0Zl9jdHhfYWNjZXNzLFxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxOS19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02ODQ5LVxcbmtlcm5lbC9icGYvYnRmLmM6Njg1MDpib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbmtlcm5lbC9icGYvYnRmLmMtNjg1MS1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MTAzLX1cXG5rZXJuZWwvYnBmL2J0Zi5jOjcxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoYnRmX2N0eF9hY2Nlc3MpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzEwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MzMuMzg0MDM0MTY3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDg0NTQ4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipHbG9iYWwgU2NvcGUgYW5kIEJURiBQcmVwYXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgaGFzIGEgZ2xvYmFsIGltcGFjdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyBpc3N1ZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgY29yZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyBgYnBmX3ByZXBhcmVfYnRmX2luZm9gLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgdG8gZmluZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGdsb2JhbCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzozNi4zMzI0OTE1OTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTg5NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcmVwYXJlX2J0Zl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzQxPXN0YXRpYyBpbnQgY2hlY2tfY29yZV9yZWxvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQwOS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cXHRcXHRcXHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAyNTg9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNjYtXFx0LyogUHJlcGFyZSBCVEYgYW5kIGZ1bmNfaW5mbyBuZWVkZWQgdG8gZGlzY292ZXIgYWxsIHN1YnByb2dyYW1zLiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM2NzpcXHRyZXQgPSBicGZfcHJlcGFyZV9idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNjgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjM2LjM4NzY4ODg3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE3MTIwNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNjb3BlIFx1MDAyNiBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCdzIHVuZXF1aXZvY2FsbHkgZ2xvYmFsLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBmbGFncyBhbmQgcHJvbXB0cyBhIHRob3JvdWdoIGV4YW1pbmF0aW9uIG9mIGl0cyBpbXBsaWNhdGlvbnMgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBCZWZvcmUgcHJvY2VlZGluZywgSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgLiBUaGlzIGlzIGNydWNpYWwuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgd2UgaGF2ZSBhcmVuYSBjb250ZXh0IGFyZ3VtZW50cy4gVGhpcyBjb3VsZCBoYXZlIGEgZ2xvYmFsIGVmZmVjdCwgYW5kIG1pZ2h0IGJlIGltcG9ydGFudCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBpbml0aWFsIGFzc2VydGlvbi4gVGhlIG91dGNvbWUgaGVyZSB3aWxsIHN0ZWVyIHRoZSBzdWJzZXF1ZW50IGxpbmUgb2YgaW5xdWlyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0NDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzozOS4zMDQ4MTIyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMDYxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTQyPXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTU2LVxcdCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk1NzpcXHRpZiAoV0FSTl9PTl9PTkNFKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2cpKSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTgtXFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg2Mj1pbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODcwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg3MTpib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NzIte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MjA2PWludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjcxLVxcdFxcdGlmIChwcm9nX3RyYWNpbmcgXFx1MDAyNlxcdTAwMjYgc3VicHJvZyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MjcyOlxcdFxcdCAgICBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyh0Z3RfcHJvZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkyNzMtXFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJDYW5ub3QgdHJhY2UgYSB0YXJnZXQgd2l0aCBhcmVuYSBjb250ZXh0IGFyZ3VtZW50c1xcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjM5LjM1MTkyMzgyNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYyOTYwOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQncyBhIGRpcmVjdCBzdHJlYW0gb2YgbXkgdGhvdWdodHM6XG5cbioqQWRkcmVzc2luZyBHbG9iYWwgU2NvcGUgaW4gZUJQRiBDb250ZXh0KipcblxuUmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgc2NvcGUgaGVyZS4gVGhlIHNpdHVhdGlvbi4uLiBZZXMsIGl0J3MgZGVmaW5pdGVseSBnbG9iYWwgaW4gbmF0dXJlLCBub3QgaXNvbGF0ZWQuIEl0J3MgaW1wYWN0aW5nIG1vcmUgdGhhbiBqdXN0IG9uZSBzcGVjaWZpYyBsb2NhbCBhcmVhLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgYnBmX3RyYW1wX2FyZW5hX2Jhc2VgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGF0IHZhcmlhYmxlLiBUaGF0J3MgdGhlIGtleSBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6NDIuODE0ODg3MDk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4ODYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBfYXJlbmFfYmFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz01MDg9YnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2FyZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUzNy0gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1Mzg6dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MzktXFx0XFx0XFx0IHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzo0Mi44NjEyODE1ODFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NzM2ODg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqR2xvYmFsIFNjb3BlIGFuZCBKSVQgQXJlbmEgQXJndW1lbnRzKipcblxuQWxyaWdodCwgdGhhdCBvYnNlcnZhdGlvbiBhYm91dCB0aGUgc2l0dWF0aW9uIGF0IGhhbmQuLi4geWVwLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQncyBpbXBhY3RpbmcgdGhlIHN5c3RlbSBnbG9iYWxseS4gTm8gbG9jYWxpemVkIGlzc3VlIGhlcmU7IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbS13aWRlIGVmZmVjdC5cblxuTm93LCBnaXZlbiB0aGF0IHNjb3BlLCBhbmQgd2l0aCBteSBleHBlcmllbmNlIGluIHRoZXNlIGxvdy1sZXZlbCBjb250ZXh0cywgbXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBhIHNwZWNpZmljIGZ1bmN0aW9uLiBXZSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgc3VwcG9ydCBsZXZlbC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgc3VwcG9ydCBsZXZlbCBpcyBnb2luZyB0byBkaWN0YXRlIHRoZSBhcHByb3ByaWF0ZSBjb3Vyc2Ugb2YgYWN0aW9uLCBhbmQgaXQgd291bGQgYmUgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGZvciBhIGZldyBkaWZmZXJlbnQgcG90ZW50aWFsIHNvbHV0aW9ucyB0aGF0IEkgYW0gbXVsbGluZyBvdmVyLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZsYWcgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzNzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzo0Ni4zMDg2NTMyODRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjcwNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NvcmUuYz0zMzA2PWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzMxMC1cXG5rZXJuZWwvYnBmL2NvcmUuYzozMzExOmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMzMTIte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNDIyPWdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0OTktXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FyZW5hKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE1MDA6XFx0XFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTUwMS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg4MT1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5NzAtXFx0XFx0aWYgKGJhc2VfdHlwZShpbmZvLVxcdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0FSRU5BKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTcxOlxcdFxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5NzItXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYSBhcmd1bWVudHNcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzo0Ni4zNTYzMzAxMjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3Mzg3MjAwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgUG9pbnRlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZ2xvYmFsLCB3aGljaCBtZWFucyBpdCBwb3RlbnRpYWxseSB0b3VjaGVzIGEgbG90IG9mIGRpZmZlcmVudCBhcmVhcy4gTXkgaW5pdGlhbCBwYXNzIGhhcyBpZGVudGlmaWVkIHNldmVyYWwga2V5IHN5bWJvbHMuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdDpcblxuKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWBcbiogICBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgXG4qICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2BcbiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YFxuKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYFxuKiAgIGBidGZfY3R4X2FjY2Vzc2BcbiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgXG5cbldhaXQsIGBicGZfcHJlcGFyZV9idGZfaW5mb2AgaXNuJ3QgYSBuZXcgZmVhdHVyZSwganVzdCBhIHJlbmFtZS4gSSdsbCBkcm9wIHRoYXQuIEFuZCwgbG9va2luZyBhdCB0aGUgb3RoZXJzLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBidGZfY3R4X2FjY2Vzc2AsIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgIGFuZCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGFyZSBtb2RpZmllZCwgYnV0IHRoZXkgYXJlIHJlbGF0aXZlbHkgZ2VuZXJpYyBmdW5jdGlvbnMsIHNvIEknbGwga2VlcCB0aGVtIGFzIEkgZG9uJ3Qgd2FudCB0byBleGNsdWRlIGFueSBwb3RlbnRpYWwgYXJlYXMuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGNoZWNrIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zLiBIbW0sIGlzIGBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnRgIGFmZmVjdGVkPyBObywgdGhhdCBsb29rcyB1bnRvdWNoZWQgYnkgdGhpcyBwYXRjaC5cblxuUmlnaHQsIGxldCdzIHJlZmluZSB0aGF0IGZvY3VzIGxpc3Qgb25lIG1vcmUgdGltZTpcblxuKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWBcbiogICBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgXG4qICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2BcbiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YFxuKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYFxuKiAgIGBidGZfY3R4X2FjY2Vzc2BcbiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBzZWVtIGxpa2Ugb2J2aW91cyBjYW5kaWRhdGVzLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB3aGljaCBpbXBsaWVzIGBDT05GSUdfWDg2YCBpcyBuZWVkZWQuIEhvd2V2ZXIsIHNpbmNlIGBYODZgIGlzIGFuIGFyY2hpdGVjdHVyZSBjb25maWcsIGFuZCBub3QgdXN1YWxseSBzcGVjaWZpZWQgaW4gYEVuYWJsZUNvbmZpZ3NgIEkgd2lsbCBqdXN0IHNwZWNpZnkgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgYEJQRl9KSVRfQUxXQVlTX09OYCBpcyBuZWNlc3NhcnkuIE5vLCBgQlBGX0pJVGAgYWxvbmUgaXMgc3VmZmljaWVudC5cblxuT2theSwgbGV0J3MgY3JhZnQgdGhlIHJlYXNvbmluZyBmb3IgdGhpcy4gVGhpcyBwYXRjaCBlbmFibGVzIHBhc3NpbmcgYXJlbmEgcG9pbnRlcnMgdG8gQlBGIGtmdW5jcyBhbmQgYHN0cnVjdF9vcHNgIGNhbGxiYWNrcy4gSXQgY2hhbmdlcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGhhbmRsZSBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX19udWxsYWJsZWAgYW5ub3RhdGlvbnMsIGFuZCB1cGRhdGVzIHRoZSB4ODYgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGNvcnJlY3RseSByZWJhc2UgdGhlc2UgcG9pbnRlcnMgdG8gdGhlIGtlcm5lbCdzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBhZGRzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIGFsbCByZWFjaGFibGUgdGhyb3VnaCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCB3aGljaCBtYWtlcyBpdCBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzZWQgc3ltYm9scyBhcmU6XG5cbiogICBgYnBmX3RyYW1wX2FyZW5hX2Jhc2VgXG4qICAgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYFxuKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgXG4qICAgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGBcbiogICBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2BcbiogICBgYnRmX2N0eF9hY2Nlc3NgXG4qICAgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YFxuXG5hbmQgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZTpcblxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgQlBGX0pJVGBcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aG9zZSBzeW1ib2xzIGFyZSBpbmRlZWQgd2hhdCBJIHRoaW5rIHRoZXkgYXJlLiBgYnBmX3RyYW1wX2FyZW5hX2Jhc2VgIGxvb2tzIGNvcnJlY3Q7IGl0J3MgYSBuZXcgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gR29vZC4gYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCBpcyBuZXcsIGZvdW5kIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBQZXJmZWN0LiBBbmQgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgaXMgbmV3bHkgYWRkZWQgaW4gYGtlcm5lbC9icGYvY29yZS5jYCBhbmQgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIENoZWNrZWQuIExvb2tzIGxpa2UgdGhlIG90aGVyIDQgYXJlIG1vZGlmaWNhdGlvbnMgdG8gZmlsZXMgc3VjaCBhcyBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYCBhbmQgYGtlcm5lbC9icGYvYnRmLmNgLiBBbGwgZ29vZC5cblxuU2VlbXMgbGlrZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDE5LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjg6MDAuMDk1MDUyMjk5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4NjY2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wX2FyZW5hX2Jhc2VcIixcbiAgICBcImJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdFwiLFxuICAgIFwiYnRmX2Rpc3RpbGxfZnVuY19wcm90b1wiLFxuICAgIFwiYnRmX2N0eF9hY2Nlc3NcIixcbiAgICBcImJwZl9jaGVja19hdHRhY2hfdGFyZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBwYXNzaW5nIGFyZW5hIHBvaW50ZXJzIHRvIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlY29nbml6ZSBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX19udWxsYWJsZWAgYW5ub3RhdGlvbnMsIGFuZCB1cGRhdGVzIHRoZSB4ODYgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIHByb3Blcmx5IHJlYmFzZSB0aGVzZSBwb2ludGVycyB0byB0aGUga2VybmVsJ3MgYXJlbmEgYmFzZSBhZGRyZXNzLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvZGUgcGF0aHMgaW4gdGhlIHZlcmlmaWVyLCBCVEYgcGFyc2luZywgYW5kIEpJVCBjb21waWxhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBfYXJlbmFfYmFzZVwiLFxuICAgIFwiYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdcIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gICAgXCJidGZfY3R4X2FjY2Vzc1wiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBhc3NpbmcgYXJlbmEgcG9pbnRlcnMgdG8gQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVjb2duaXplIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfX251bGxhYmxlYCBhbm5vdGF0aW9ucywgYW5kIHVwZGF0ZXMgdGhlIHg4NiBCUEYgSklUIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gcHJvcGVybHkgcmViYXNlIHRoZXNlIHBvaW50ZXJzIHRvIHRoZSBrZXJuZWwncyBhcmVuYSBiYXNlIGFkZHJlc3MuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocyBpbiB0aGUgdmVyaWZpZXIsIEJURiBwYXJzaW5nLCBhbmQgSklUIGNvbXBpbGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjvbks[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 22:24:35 +0000 UTC FinishedAt: 2026-08-05 22:28:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "363b15d8551ef6749fac410377a8422325008dae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "363b15d8551ef6749fac410377a8422325008dae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "daa723b8-e93a-4c2f-a2c1-03525b439477" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_tramp_arena_base", "bpf_prog_has_arena_ctx_arg", "bpf_jit_supports_arena_args", "bpf_struct_ops_desc_init", "btf_distill_func_proto", "btf_ctx_access", "bpf_check_attach_target" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBfYXJlbmFfYmFzZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YnBmX3N0cnVjdF9vcHNfZGVzY19pbml0JiMzNDssCiAgICAmIzM0O2J0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8mIzM0OywKICAgICYjMzQ7YnRmX2N0eF9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBwYXNzaW5nIGFyZW5hIHBvaW50ZXJzIHRvIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlY29nbml6ZSBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX19udWxsYWJsZWAgYW5ub3RhdGlvbnMsIGFuZCB1cGRhdGVzIHRoZSB4ODYgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIHByb3Blcmx5IHJlYmFzZSB0aGVzZSBwb2ludGVycyB0byB0aGUga2VybmVsJiMzOTtzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDYxNTIzZmU0NzE0ZjljZmE0MmRjN2I4MGEwNjg3NWE2Yjk2NGY5NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMjI6MjY6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbmluZGV4IGNiZGU4NmQwODJjY2UuLmMwNDQ2NTliNzY4OTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5AQCAtMjc4LDYgJiM0MzsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgfVxuIFxuJiM0MzsyLjMuOCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBBbm5vdGF0aW9uc1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7Qm90aCBhbm5vdGF0aW9ucyBpbmRpY2F0ZSB0aGF0IHRoZSBwb2ludGVyIGFyZ3VtZW50IHBvaW50cyBpbnRvIHRoZVxuJiM0MztjYWxsaW5nIHByb2dyYW0mIzM5O3MgYXJlbmEuIFRoZSBKSVQgcmViYXNlcyB0aGUgdmFsdWUgYXQgdGhlIGNhbGwgc2l0ZSBzb1xuJiM0Mzt0aGUga2Z1bmMgcmVjZWl2ZXMgYSBkaXJlY3RseSBkZXJlZmVyZW5jZWFibGUga2VybmVsIGFkZHJlc3MsIHN1YmplY3QgdG9cbiYjNDM7dGhlIGFjY2VzcyBydWxlcyBkZXNjcmliZWQgaW4gOnJlZjpgQlBGX2tmdW5jX2FyZW5hX2FjY2Vzc2AgKGF0IG1vc3RcbiYjNDM7YGBHVUFSRF9TWiAvIDJgYCwgMzIgS2lCLCBwYXN0IHRoZSBwb2ludGVyIGluIGEgc2luZ2xlIHVuY2hlY2tlZCBhY2Nlc3MpLlxuJiM0MztcbiYjNDM7V2l0aCBgYF9fYXJlbmFgYCB0aGUgcmViYXNlIGlzIHVuY29uZGl0aW9uYWwgYW5kIHRoZSBhcmd1bWVudCBpcyBuZXZlclxuJiM0MztOVUxMOiBhIHZhbHVlIHdob3NlIGxvd2VyIDMyIGJpdHMgYXJlIHplcm8gYXJyaXZlcyBhcyB0aGUgYXJlbmEgYmFzZVxuJiM0MzthZGRyZXNzIChhcmVuYSBvZmZzZXQgMCkuIFRoZSBrZnVuYyBtdXN0IG5vdCBjaGVjayB0aGUgYXJndW1lbnQgZm9yIE5VTEwuXG4mIzQzO1dpdGggYGBfX2FyZW5hX19udWxsYWJsZWBgIHN1Y2ggYSB2YWx1ZSBhcnJpdmVzIGFzIE5VTEwgaW5zdGVhZCBhbmQgdGhlXG4mIzQzO2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuXG4mIzQzO1xuJiM0MztBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiYjNDM7XG4mIzQzOyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl9wcm9jZXNzX2l0ZW0oc3RydWN0IGl0ZW0gKml0ZW1fX2FyZW5hKVxuJiM0MzsgICAgICAgIHtcbiYjNDM7ICAgICAgICAuLi5cbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuJiM0MztDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4mIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbiYjNDM7cHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXNcbiYjNDM7bm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4mIzQzO1xuJiM0MztUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4mIzQzO2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZVxuJiM0MztrZXJuZWwgY2FsbGVyIHBhc3NlcyB0aGUga2VybmVsIGFyZW5hIGFkZHJlc3MgYW5kIHRoZSB0cmFtcG9saW5lIGNvbnZlcnRzXG4mIzQzO2l0IHdoaWxlIHNhdmluZyB0aGUgYXJndW1lbnRzLCBzbyB0aGUgY2FsbGJhY2sgcmVjZWl2ZXMgYW4gYXJlbmEgcG9pbnRlclxuJiM0MztpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3RcbiYjNDM7cGFzcyBOVUxMLiBXaXRoIGBgX19hcmVuYV9fbnVsbGFibGVgYCBhIE5VTEwga2VybmVsIHBvaW50ZXIgYXJyaXZlcyBhcyBOVUxMLlxuJiM0MztIb3dldmVyLCB0aGVyZSBpcyBubyBvYmxpZ2F0aW9uIHRvIHByb3ZlIHRvIHRoZSB2ZXJpZmllciB0aGF0IHN1Y2ggYSBwb2ludGVyIGlzXG4mIzQzO25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpblxuJiM0MzthIHByb2dyYW0gKG9yIG9idGFpbmVkIGZyb20gYW55IG90aGVyIHNvdXJjZSkuXG4mIzQzO1xuIC4uIF9CUEZfa2Z1bmNfbm9kZWY6XG4gXG4gMi40IFVzaW5nIGFuIGV4aXN0aW5nIGtlcm5lbCBmdW5jdGlvblxuQEAgLTUxNSw2ICYjNDM7NTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0XG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXG4gYmVpbmcgc3VmZml4ZWQgd2l0aCBgYF9fX2luaXRgYC5cbiBcbiYjNDM7Li4gX0JQRl9rZnVuY19hcmVuYV9hY2Nlc3M6XG4mIzQzO1xuIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDAxZTdjZTU2OWMxZWQuLjVjNWMzMmFiYTIzOTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE2NzgsNiAmIzQzOzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZWJhc2UgdGhlIF9fYXJlbmEgYXJncyBvZiBhIGtmdW5jIGNhbGwgdG8gYXJlbmEga2VybmVsIGFkZHJlc3NlcyxcbiYjNDM7ICogck4gPSBrZXJuX3ZtX3N0YXJ0ICYjNDM7ICh1MzIpck4sIHdpdGggUjEyIGhvbGRpbmcga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZVxuJiM0MzsgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXNcbiYjNDM7ICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKipwcHJvZylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XG4mIzQzO1x0dTggKnByb2cgPSAqcHByb2c7XG4mIzQzO1x0dTggKnN0YXJ0ID0gcHJvZztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pO1xuJiM0MztcdGlmICghZm0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBmbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTggZmxhZ3MgPSBmbS1cdTAwM2VhcmdfZmxhZ3NbaV07XG4mIzQzO1x0XHR1MzIgcmVnID0gQlBGX1JFR18xICYjNDM7IGk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKCFicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBtb3YgZU4sIGVOOiB0cnVuY2F0ZSBhbmQgY2xlYXIgdGhlIHVwcGVyIDMyIGJpdHMgKi9cbiYjNDM7XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCBmYWxzZSwgcmVnLCByZWcpO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xuJiM0MztcdFx0XHQvKiB0ZXN0IGVOLCBlTjsganogb3ZlciB0aGUgMy1ieXRlIGFkZCAqL1xuJiM0MztcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xuJiM0MztcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCByZWcsIHJlZykpO1xuJiM0MztcdFx0XHRFTUlUMihYODZfSkUsIDMpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogYWRkIHJOLCByMTIgKi9cbiYjNDM7XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIHJlZywgWDg2X1JFR19SMTIsIHRydWUpO1xuJiM0MztcdFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnBwcm9nID0gcHJvZztcbiYjNDM7XHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbiBcdFx0ICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZylcbiB7XG5AQCAtMjU4Myw2ICYjNDM7MjYyNywxMiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoIWltbTMyKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGlmIChzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xuJiM0MztcdFx0XHRcdGVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgXHUwMDI2cHJvZyk7XG4mIzQzO1x0XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdFx0aXAgJiM0Mzs9IGVycjtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGlmIChwcml2X2ZyYW1lX3B0cikge1xuIFx0XHRcdFx0cHVzaF9yOShcdTAwMjZwcm9nKTtcbiBcdFx0XHRcdGlwICYjNDM7PSAyO1xuQEAgLTI5OTMsMTEgJiM0MzszMDQzLDM5IEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pXG4gXHRyZXR1cm4gbnJfdXNlZF9yZWdzO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheVxuJiM0MzsgKiBpbnRvIHRoZSBCUEYgY3R4LCByYXggPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KS4gQSBudWxsYWJsZSBhcmdcbiYjNDM7ICogcHJlc2VydmVzIE5VTEwsIHRlc3RlZCBvbiB0aGUgZnVsbCA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXRcbiYjNDM7ICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZFxuJiM0MzsgKiB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hIHBvaW50ZXIgcmVnaXN0ZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pXG4mIzQzO3tcbiYjNDM7XHR1OCAqcHJvZyA9ICpwcHJvZztcbiYjNDM7XG4mIzQzO1x0aWYgKG51bGxhYmxlKSB7XG4mIzQzO1x0XHRpZiAoc3JjX3JlZyAhPSBCUEZfUkVHXzApXG4mIzQzO1x0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xuJiM0MztcdFx0LyogdGVzdCByYXgsIHJheDsganogb3ZlciB0aGUgNS1ieXRlIHN1YiAqL1xuJiM0MztcdFx0RU1JVDMoMHg0OCwgMHg4NSwgMHhDMCk7XG4mIzQzO1x0XHRFTUlUMihYODZfSkUsIDUpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3JjX3JlZyAhPSBCUEZfUkVHXzApIHtcbiYjNDM7XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCBmYWxzZSwgQlBGX1JFR18wLCBzcmNfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1x0Lyogc3ViIGVheCwgYmFzZV9sbyAqL1xuJiM0MztcdEVNSVQxX29mZjMyKDB4MkQsIGJhc2VfbG8pO1xuJiM0MztcbiYjNDM7XHQqcHByb2cgPSBwcm9nO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbi1cdFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXG4mIzQzO1x0XHQgICAgICBpbnQgc3RhY2tfc2l6ZSwgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIHUzMiBmbGFncyxcbiYjNDM7XHRcdCAgICAgIHU2NCBhcmVuYV9iYXNlKVxuIHtcbiBcdGludCBhcmdfcmVncywgZmlyc3Rfb2ZmID0gMCwgbnJfcmVncyA9IDAsIG5yX3N0YWNrX3Nsb3RzID0gMDtcbiBcdGJvb2wgdXNlX2ptcCA9IGJwZl90cmFtcG9saW5lX3VzZV9qbXAoZmxhZ3MpO1xuJiM0MztcdGludCBzdGFja19hcmdzX29mZiA9ICh1c2Vfam1wIHx8IChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpKSA/IDE2IDogMjQ7XG4gXHRpbnQgaSwgajtcbiBcbiBcdC8qIFN0b3JlIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byBzdGFjay5cbkBAIC0zMDA2LDYgJiM0MzszMDg0LDkgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFx0ICogbW92IFFXT1JEIFBUUiBbcmJwLTB4OF0scnNpXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbl90KGludCwgbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfQVJHUyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuJiM0MztcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XG4gXHRcdGFyZ19yZWdzID0gKG0tXHUwMDNlYXJnX3NpemVbaV0gJiM0MzsgNykgLyA4O1xuIFxuIFx0XHQvKiBBY2NvcmRpbmcgdG8gdGhlIHJlc2VhcmNoIG9mIFlvbmdob25nLCBzdHJ1Y3QgbWVtYmVyc1xuQEAgLTMwMjksMTYgJiM0MzszMTEwLDE5IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbiBcdFx0XHQvKiBjb3B5IGZ1bmN0aW9uIGFyZ3VtZW50cyBmcm9tIG9yaWdpbiBzdGFjayBmcmFtZVxuIFx0XHRcdCAqIGludG8gY3VycmVudCBzdGFjayBmcmFtZS5cbiBcdFx0XHQgKlxuLVx0XHRcdCAqIFRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBhcmd1bWVudHMgb24tc3RhY2tcbi1cdFx0XHQgKiBpczpcbi1cdFx0XHQgKiAgIHJicCAmIzQzOyA4KHB1c2ggcmJwKSAmIzQzO1xuLVx0XHRcdCAqICAgOChyZXR1cm4gYWRkciBvZiBvcmlnaW4gY2FsbCkgJiM0Mztcbi1cdFx0XHQgKiAgIDgocmV0dXJuIGFkZHIgb2YgdGhlIGNhbGxlcilcbi1cdFx0XHQgKiB3aGljaCBtZWFuczogcmJwICYjNDM7IDI0XG4mIzQzO1x0XHRcdCAqIFRoZSBhcmd1bWVudHMgb24tc3RhY2sgc3RhcnQgYWJvdmUgdGhlIHNhdmVkIHJicFxuJiM0MztcdFx0XHQgKiBhbmQgdGhlIHJldHVybiBhZGRyZXNzZXM6IHR3byByZXR1cm4gYWRkcmVzc2VzXG4mIzQzO1x0XHRcdCAqIChvcmlnaW4gY2FsbCBhbmQgY2FsbGVyKSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzXG4mIzQzO1x0XHRcdCAqIGVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwsIHNvIHJicCAmIzQzOyAyNCwgYW5kXG4mIzQzO1x0XHRcdCAqIGEgc2luZ2xlIG9uZSB3aGVuIGl0IGlzIGVudGVyZWQgd2l0aCBhIGptcCBvclxuJiM0MztcdFx0XHQgKiBjYWxsZWQgaW5kaXJlY3RseSwgc28gcmJwICYjNDM7IDE2LlxuIFx0XHRcdCAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqJiM0MzsmIzQzOykge1xuIFx0XHRcdFx0ZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsXG4tXHRcdFx0XHRcdCBucl9zdGFja19zbG90cyAqIDggJiM0MzsgMTYgJiM0MzsgKCF1c2Vfam1wKSAqIDgpO1xuJiM0MztcdFx0XHRcdFx0IG5yX3N0YWNrX3Nsb3RzICogOCAmIzQzOyBzdGFja19hcmdzX29mZik7XG4mIzQzO1x0XHRcdFx0aWYgKGFyZW5hX2FyZylcbiYjNDM7XHRcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgQlBGX1JFR18wLCBudWxsYWJsZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgKHUzMilhcmVuYV9iYXNlKTtcbiBcdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLFxuIFx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuIFxuQEAgLTMwNTksOSAmIzQzOzMxNDMsMTMgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFxuIFx0XHRcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqJiM0MzsmIzQzOykge1xuLVx0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLFxuLVx0XHRcdFx0XHQgbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSAmIzQzOyBucl9yZWdzLFxuLVx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuJiM0MztcdFx0XHRcdHUzMiBzcmMgPSBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICYjNDM7IG5yX3JlZ3M7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmIChhcmVuYV9hcmcpIHtcbiYjNDM7XHRcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgc3JjLCBudWxsYWJsZSwgKHUzMilhcmVuYV9iYXNlKTtcbiYjNDM7XHRcdFx0XHRcdHNyYyA9IEJQRl9SRUdfMDtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBzcmMsIC1zdGFja19zaXplKTtcbiBcdFx0XHRcdHN0YWNrX3NpemUgLT0gODtcbiBcdFx0XHRcdG5yX3JlZ3MmIzQzOyYjNDM7O1xuIFx0XHRcdH1cbkBAIC0zMzU3LDYgJiM0MzszNDQ1LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdHZvaWQgKm9yaWdfY2FsbCA9IGZ1bmNfYWRkcjtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250O1xuIFx0dTggKipicmFuY2hlcyA9IE5VTEw7XG4mIzQzO1x0dTY0IGFyZW5hX2Jhc2U7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFx0dTggKnByb2c7XG4gXHRib29sIHNhdmVfcmV0O1xuQEAgLTMzNjksNiAmIzQzOzM0NTgsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuIFxuJiM0MztcdGFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkmIzQzOyYjNDM7KVxuIFx0XHRucl9yZWdzICYjNDM7PSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDggLSAxO1xuIFxuQEAgLTM1MDMsNyAmIzQzOzM1OTQsNyBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWlwX29mZiwgKGxvbmcpZnVuY19hZGRyKTtcbiBcdH1cbiBcbi1cdHNhdmVfYXJncyhtLCBcdTAwMjZwcm9nLCByZWdzX29mZiwgZmFsc2UsIGZsYWdzKTtcbiYjNDM7XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncywgYXJlbmFfYmFzZSk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuIFx0XHQvKiBhcmcxOiBtb3YgcmRpLCBpbSAqL1xuQEAgLTM1NDUsNyAmIzQzOzM2MzYsNyBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbiBcdFx0cmVzdG9yZV9yZWdzKG0sIFx1MDAyNnByb2csIHJlZ3Nfb2ZmKTtcbi1cdFx0c2F2ZV9hcmdzKG0sIFx1MDAyNnByb2csIGFyZ19zdGFja19vZmYsIHRydWUsIGZsYWdzKTtcbiYjNDM7XHRcdHNhdmVfYXJncyhtLCBcdTAwMjZwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncywgMCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCkge1xuIFx0XHRcdC8qIEJlZm9yZSBjYWxsaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgbG9hZCB0aGVcbkBAIC00MDQ2LDYgJiM0Mzs0MTM3LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4ge1xuIFx0aWYgKHRleHRfcG9rZV9jb3B5KGRzdCwgc3JjLCBsZW4pID09IE5VTEwpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLjY4ZmY2Njc4N2FlMWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTIxMCw2ICYjNDM7MTIxMCwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2dfb2ZmbG9hZCB7XG4gLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi9cbiAjZGVmaW5lIEJURl9GTU9ERUxfU0lHTkVEX0FSR1x0XHRCSVQoMSlcbiBcbiYjNDM7LyogVGhlIGFyZ3VtZW50IGlzIGFuIGFyZW5hIHBvaW50ZXIuICovXG4mIzQzOyNkZWZpbmUgQlRGX0ZNT0RFTF9BUkVOQV9BUkdcdFx0QklUKDIpXG4mIzQzO1xuJiM0MzsvKiBUaGUgYXJndW1lbnQgaXMgbnVsbGFibGUuICovXG4mIzQzOyNkZWZpbmUgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkdcdFx0QklUKDMpXG4mIzQzO1xuIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7XG4gXHR1OCByZXRfc2l6ZTtcbiBcdHU4IHJldF9mbGFncztcbkBAIC0xMjgzLDYgJiM0MzsxMjg5LDE1IEBAIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMge1xuIFx0aW50IG5yX25vZGVzO1xuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBhcmVuYSBiYXNlIGFnYWluc3Qgd2hpY2ggYSBzdHJ1Y3Rfb3BzIHRyYW1wb2xpbmUgY29udmVydHMgdGhlXG4mIzQzOyAqIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRyB3aGlsZSBzYXZpbmcgdGhlbSBpbnRvIHRoZSBCUEZcbiYjNDM7ICogY3R4LCBjdHhbYXJnXSA9ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCkuIFplcm8gd2hlbiB0aGUgdHJhbXBvbGluZVxuJiM0MzsgKiBjb252ZXJ0cyBub3RoaW5nLlxuJiM0MzsgKi9cbiYjNDM7dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbiYjNDM7XHRcdFx0IHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzKTtcbiYjNDM7XG4gc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4O1xuIFxuIC8qIERpZmZlcmVudCB1c2UgY2FzZXMgZm9yIEJQRiB0cmFtcG9saW5lOlxuQEAgLTIzNTIsNiAmIzQzOzIzNjcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfZnNlc3Npb25fY29va2llX2NudChzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpub2RlcylcbiBcbiBpbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvLCB1MzIgY250KTtcbiYjNDM7Ym9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19DR1JPVVBfQlBGKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX0xTTSlcbiBpbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IGEyYTQwY2FjYTBhMGUuLmE5NTU1ZDE3ZmQ4ZWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTE3Nyw4ICYjNDM7MTE3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV91bnBhY2tfa2V5KHU2NCBrZXksIHUzMiAqb2JqX2lkLCB1MzIgKmJ0Zl9pZClcbiBcdFx0KmJ0Zl9pZCA9IGtleSBcdTAwMjYgMHg3RkZGRkZGRjtcbiB9XG4gXG4taW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcbiYjNDM7aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xuIGludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDMyZDUyOTdjNTU3ZTUuLjM2Y2UzNDAzZmU1OTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTE4Myw2ICYjNDM7MTE4Myw3IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCk7XG4mIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5pbmRleCA0ZTdhNDhjMDJiZTVjLi5jZWQ3YjE4MjQ2YTk2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcbkBAIC0xNDcsNiAmIzQzOzE0Nyw4IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcbiBcbiAjZGVmaW5lIE1BWUJFX05VTExfU1VGRklYIFwmIzM0O19fbnVsbGFibGVcJiMzNDtcbiAjZGVmaW5lIFJFRkNPVU5URURfU1VGRklYIFwmIzM0O19fcmVmXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQVJFTkFfU1VGRklYIFwmIzM0O19fYXJlbmFcJiMzNDtcbiYjNDM7I2RlZmluZSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCBcJiMzNDtfX2FyZW5hX19udWxsYWJsZVwmIzM0O1xuIFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxuICAqIHN0cnVjdF9vcHMgdHlwZS5cbkBAIC0xNTksNyAmIzQzOzE2MSw3IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcbiAgKiB0byBwcm92aWRlIGFuIGFycmF5IG9mIHN0cnVjdCBicGZfY3R4X2FyZ19hdXgsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXNcbiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZVxuICAqIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW0gYXNzaWduZWQgdG8gdGhlIG1lbWJlci4gSGVyZSwgd2Ugb25seSBjYXJlIGFib3V0XG4tICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZS5cbiYjNDM7ICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZSwgX19yZWYgb3IgX19hcmVuYS5cbiAgKlxuICAqIFRoZSBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IGlzIGV2ZW50dWFsbHkgYXNzaWduZWQgdG9cbiAgKiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm8gb2YgQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbXMgYW5kIHBhc3NlZCB0byB0aGVcbkBAIC0xNzIsMTAgJiM0MzsxNzQsMTIgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHQgICAgY29uc3QgY2hhciAqc3Rfb3BzX25hbWUsXG4gXHRcdFx0ICAgIGNvbnN0IGNoYXIgKm1lbWJlcl9uYW1lLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG8sIHZvaWQgKnN0dWJfZnVuY19hZGRyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptb2RlbCxcbiBcdFx0XHQgICAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2FyZ19pbmZvICphcmdfaW5mbylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnN0dWJfZnVuY19wcm90bywgKnBvaW50ZWRfdHlwZTtcbi1cdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlO1xuJiM0MztcdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlLCBpc19hcmVuYSA9IGZhbHNlO1xuJiM0MztcdGJvb2wgaXNfYXJlbmFfbnVsbGFibGUgPSBmYWxzZTtcbiBcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnN0dWJfYXJncywgKmFyZ3M7XG4gXHRzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvLCAqaW5mb19idWY7XG4gXHR1MzIgbmFyZ3MsIGFyZ19ubywgaW5mb19jbnQgPSAwO1xuQEAgLTIyNSwyNyAmIzQzOzIyOSwzNSBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxuIFx0LyogUHJlcGFyZSBpbmZvIGZvciBldmVyeSBudWxsYWJsZSBhcmd1bWVudCAqL1xuIFx0aW5mbyA9IGluZm9fYnVmO1xuIFx0Zm9yIChhcmdfbm8gPSAwOyBhcmdfbm8gXHUwMDNjIG5hcmdzOyBhcmdfbm8mIzQzOyYjNDM7KSB7XG4tXHRcdC8qIFNraXAgYXJndW1lbnRzIHRoYXQgaXMgbm90IHN1ZmZpeGVkIHdpdGhcbi1cdFx0ICogXCYjMzQ7X19udWxsYWJsZSBvciBfX3JlZlwmIzM0Oy5cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGFyZSBub3Qgc3VmZml4ZWQgd2l0aCBcJiMzNDtfX2FyZW5hX19udWxsYWJsZVwmIzM0OyxcbiYjNDM7XHRcdCAqIFwmIzM0O19fYXJlbmFcJiMzNDssIFwmIzM0O19fbnVsbGFibGVcJiMzNDssIG9yIFwmIzM0O19fcmVmXCYjMzQ7LlxuIFx0XHQgKi9cbi1cdFx0aXNfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sXG4tXHRcdFx0XHRcdFx0ICAgICBNQVlCRV9OVUxMX1NVRkZJWCk7XG4mIzQzO1x0XHRpc19hcmVuYV9udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCk7XG4mIzQzO1x0XHRpc19hcmVuYSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSwgQVJFTkFfU1VGRklYKTtcbiYjNDM7XHRcdGlzX251bGxhYmxlID0gIWlzX2FyZW5hX251bGxhYmxlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sIE1BWUJFX05VTExfU1VGRklYKTtcbiBcdFx0aXNfcmVmY291bnRlZCA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbiBcdFx0XHRcdFx0XHQgICAgICAgUkVGQ09VTlRFRF9TVUZGSVgpO1xuIFxuLVx0XHRpZiAoaXNfbnVsbGFibGUpXG4mIzQzO1x0XHRpZiAoaXNfYXJlbmFfbnVsbGFibGUpXG4mIzQzO1x0XHRcdHN1ZmZpeCA9IEFSRU5BX01BWUJFX05VTExfU1VGRklYO1xuJiM0MztcdFx0ZWxzZSBpZiAoaXNfYXJlbmEpXG4mIzQzO1x0XHRcdHN1ZmZpeCA9IEFSRU5BX1NVRkZJWDtcbiYjNDM7XHRcdGVsc2UgaWYgKGlzX251bGxhYmxlKVxuIFx0XHRcdHN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYO1xuIFx0XHRlbHNlIGlmIChpc19yZWZjb3VudGVkKVxuIFx0XHRcdHN1ZmZpeCA9IFJFRkNPVU5URURfU1VGRklYO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovXG4tXHRcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0Zixcbi1cdFx0XHRcdFx0XHQgICAgYXJnc1thcmdfbm9dLnR5cGUsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmFyZ19idGZfaWQpO1xuLVx0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fFxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QsIG9yIGFueSBwb2ludGVyIGZvciBfX2FyZW5hIG9yXG4mIzQzO1x0XHQgKiBfX2FyZW5hX19udWxsYWJsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLCBhcmdzW2FyZ19ub10udHlwZSwgXHUwMDI2YXJnX2J0Zl9pZCk7XG4mIzQzO1x0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fCAoIWlzX2FyZW5hIFx1MDAyNlx1MDAyNiAhaXNfYXJlbmFfbnVsbGFibGUgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkpIHtcbiBcdFx0XHRwcl93YXJuKFwmIzM0O3N0dWIgZnVuY3Rpb24gJXMgaGFzICVzIHRhZ2dpbmcgdG8gYW4gdW5zdXBwb3J0ZWQgdHlwZVxcblwmIzM0OyxcbiBcdFx0XHRcdHN0dWJfZm5hbWUsIHN1ZmZpeCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuQEAgLTI2OCw3ICYjNDM7MjgwLDE4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdGluZm8tXHUwMDNlYnRmX2lkID0gYXJnX2J0Zl9pZDtcbiBcdFx0aW5mby1cdTAwM2VidGYgPSBidGY7XG4gXHRcdGluZm8tXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xuLVx0XHRpZiAoaXNfbnVsbGFibGUpIHtcbiYjNDM7XHRcdGlmIChpc19hcmVuYSB8fCBpc19hcmVuYV9udWxsYWJsZSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLFxuJiM0MztcdFx0XHQgKiBQVFJfVE9fQVJFTkEgZW5jb21wYXNzZXMgcG90ZW50aWFsIE5VTEwgdmFsdWVzLCBidXRcbiYjNDM7XHRcdFx0ICogd2UgZG8gbm90IGZvcmNlIHRoZSBwcm9ncmFtIHRvIGNoZWNrIGl0LCBvciBtYWludGFpblxuJiM0MztcdFx0XHQgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IFBUUl9UT19BUkVOQTtcbiYjNDM7XHRcdFx0bW9kZWwtXHUwMDNlYXJnX2ZsYWdzW2FyZ19ub10gfD0gQlRGX0ZNT0RFTF9BUkVOQV9BUkc7XG4mIzQzO1x0XHRcdGlmIChpc19hcmVuYV9udWxsYWJsZSlcbiYjNDM7XHRcdFx0XHRtb2RlbC1cdTAwM2VhcmdfZmxhZ3NbYXJnX25vXSB8PSBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XHRcdH0gZWxzZSBpZiAoaXNfbnVsbGFibGUpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXJlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEIHwgUFRSX01BWUJFX05VTEw7XG4gXHRcdH0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQ7XG5AQCAtNDYwLDYgJiM0Mzs0ODMsNyBAQCBpbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcbiBcdFx0c3R1Yl9mdW5jX2FkZHIgPSAqKHZvaWQgKiopKHN0X29wcy1cdTAwM2VjZmlfc3R1YnMgJiM0MzsgbW9mZik7XG4gXHRcdGVyciA9IHByZXBhcmVfYXJnX2luZm8oYnRmLCBzdF9vcHMtXHUwMDNlbmFtZSwgbW5hbWUsXG4gXHRcdFx0XHQgICAgICAgZnVuY19wcm90bywgc3R1Yl9mdW5jX2FkZHIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNnN0X29wcy1cdTAwM2VmdW5jX21vZGVsc1tpXSxcbiBcdFx0XHRcdCAgICAgICBhcmdfaW5mbyAmIzQzOyBpKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGVycm91dDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xuaW5kZXggNDI0MTQ2MzNjZjI2My4uNjYwNjE4N2VkNGY0MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmNcbkBAIC02OTYzLDE1ICYjNDM7Njk2MywxOSBAQCBib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHQvKiBjaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCBvciBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwsIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMIG9yXG4mIzQzO1x0ICogUFRSX1RPX0FSRU5BIChib3RoIG51bGxhYmxlIGFuZCBub24tbnVsbGFibGUgY2FzZXMpLlxuJiM0MztcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmN0eF9hcmdfaW5mbyA9IFx1MDAyNnByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mb1tpXTtcbiBcdFx0dTMyIHR5cGUsIGZsYWc7XG4gXG4gXHRcdHR5cGUgPSBiYXNlX3R5cGUoY3R4X2FyZ19pbmZvLVx1MDAzZXJlZ190eXBlKTtcbiBcdFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGUpO1xuLVx0XHRpZiAoY3R4X2FyZ19pbmZvLVx1MDAzZW9mZnNldCA9PSBvZmYgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpIHtcbiYjNDM7XHRcdGlmIChjdHhfYXJnX2luZm8tXHUwMDNlb2Zmc2V0ID09IG9mZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAodHlwZSA9PSBQVFJfVE9fQVJFTkEgfHxcbiYjNDM7XHRcdCAgICAgKHR5cGUgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjYgKGZsYWcgXHUwMDI2IFBUUl9NQVlCRV9OVUxMKSkpKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IGN0eF9hcmdfaW5mby1cdTAwM2VyZWdfdHlwZTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuQEAgLTc1MzksNiAmIzQzOzc1NDMsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4mIzQzO3tcbiYjNDM7XHR1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xuJiM0MztcbiYjNDM7XHRpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYV9fbnVsbGFibGVcJiMzNDspKVxuJiM0MztcdFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9BUkVOQV9BUkcgfCBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XHRlbHNlIGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2FyZW5hXCYjMzQ7KSlcbiYjNDM7XHRcdGZsYWdzIHw9IEJURl9GTU9ERUxfQVJFTkFfQVJHO1xuJiM0MztcdGVsc2UgaWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fbnVsbGFibGVcJiMzNDspKVxuJiM0MztcdFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmbGFncztcbiYjNDM7fVxuJiM0MztcbiBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdCAgIHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmMsXG5AQCAtNzYwNCw3ICYjNDM7NzYyNCw3IEBAIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0bS1cdTAwM2Vhcmdfc2l6ZVtpXSA9IHJldDtcbi1cdFx0bS1cdTAwM2VhcmdfZmxhZ3NbaV0gPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTtcbiYjNDM7XHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhidGYsIFx1MDAyNmFyZ3NbaV0sIHQpO1xuIFx0fVxuIFx0bS1cdTAwM2Vucl9hcmdzID0gbmFyZ3M7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jIGIva2VybmVsL2JwZi9jaGVja19idGYuY1xuaW5kZXggOTNiZWJlNmZlMTJlNy4uMGU4YjNjY2M3YTViOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcbkBAIC0yOCw5ICYjNDM7MjgsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2Fibm9ybWFsX3JldHVybihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuICNkZWZpbmUgTUlOX0JQRl9GVU5DSU5GT19TSVpFXHQ4XG4gI2RlZmluZSBNQVhfRlVOQ0lORk9fUkVDX1NJWkVcdDI1MlxuIFxuLXN0YXRpYyBpbnQgY2hlY2tfYnRmX2Z1bmNfZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLVx0XHRcdFx0YnBmcHRyX3QgdWF0dHIpXG4mIzQzO3N0YXRpYyBpbnQgcHJlcGFyZV9idGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuJiM0MztcdFx0XHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4mIzQzO1x0XHRcdCAgICBicGZwdHJfdCB1YXR0cilcbiB7XG4gXHR1MzIga3JlY19zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfZnVuY19pbmZvKTtcbiBcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdHlwZSwgKmZ1bmNfcHJvdG87XG5AQCAtNDA3LDkgJiM0Mzs0MDcsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tXHRcdFx0ICAgICBicGZwdHJfdCB1YXR0cilcbiYjNDM7aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiYjNDM7XHRcdFx0IGJwZnB0cl90IHVhdHRyKVxuIHtcbiBcdHN0cnVjdCBidGYgKmJ0ZjtcbiBcdGludCBlcnI7XG5AQCAtNDI5LDcgJiM0Mzs0MjksNyBAQCBpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gXHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlYnRmID0gYnRmO1xuIFxuLVx0ZXJyID0gY2hlY2tfYnRmX2Z1bmNfZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG4mIzQzO1x0ZXJyID0gcHJlcGFyZV9idGZfZnVuYyhlbnYsIGF0dHIsIHVhdHRyKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtMzMwOCw2ICYjNDM7MzMwOCwxMSBAQCBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzO2Jvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZClcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuaW5kZXggZWQ3OTk5YWQ2YzY2Yy4uZTA3YWYzNWVkMDQwMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTUyOSw2ICYjNDM7NTI5LDM2IEBAIGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hXG4gXHRyZXR1cm4gdG5vZGVzO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIGFyZW5hIGJhc2UgYWdhaW5zdCB3aGljaCBzYXZlX2FyZ3MoKSBjb252ZXJ0cyB0aGUgYXJndW1lbnRzIG1hcmtlZFxuJiM0MzsgKiB3aXRoIEJURl9GTU9ERUxfQVJFTkFfQVJHLiBPbmx5IHRoZSBzdHJ1Y3Rfb3BzIGluZGlyZWN0IHRyYW1wb2xpbmVcbiYjNDM7ICogY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUgcHJvZyB3aG9zZSBhcmVuYSBpcyBrbm93biBhdFxuJiM0MzsgKiBnZW5lcmF0aW9uIHRpbWUuIFJldHVybiAwIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBjb252ZXJ0LlxuJiM0MzsgKi9cbiYjNDM7dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbiYjNDM7XHRcdFx0IHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHx8XG4mIzQzO1x0ICAgIHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ucl9ub2RlcyAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG0tXHUwMDNlbnJfYXJnczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRpZiAoaSA9PSBtLVx1MDAzZW5yX2FyZ3MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVmVyaWZpY2F0aW9uIHJlamVjdHMgYW4gYXJlbmEgYXJndW1lbnQgd2l0aG91dCBhbiBhcmVuYS4gKi9cbiYjNDM7XHRwcm9nID0gdG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5vZGVzWzBdLVx1MDAzZWxpbmstXHUwMDNlcHJvZztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2ZyZWUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pXG4ge1xuIFx0YnBmX2ltYWdlX2tzeW1fZGVsKFx1MDAyNmltLVx1MDAzZWtzeW0pO1xuQEAgLTkyMCw2ICYjNDM7OTUwLDEzIEBAIHN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuIFx0aW50IGNudCA9IDAsIGk7XG4gXG4gXHRraW5kID0gYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFyZW5hIGN0eCBhcmdzIGFyZSBjb252ZXJ0ZWQgb25seSBieSBzdHJ1Y3Rfb3BzIGluZGlyZWN0XG4mIzQzO1x0ICogdHJhbXBvbGluZXMuIFRoZXkgbXVzdCBuZXZlciBiZSBhdHRhY2hlZCB0byBhIGdlbmVyaWMgdHJhbXBvbGluZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RTVVBQO1xuJiM0MztcbiBcdGlmICh0ci1cdTAwM2VleHRlbnNpb25fcHJvZylcbiBcdFx0LyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuXG4gXHRcdCAqIGNhbm5vdCBvdmVyd3JpdGUgZXh0ZW5zaW9uIHByb2cgZWl0aGVyLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMDk1ODhiN2IwOGIwYS4uODNlZGY0MWM3ZmU5YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjg0Miw3ICYjNDM7Mjg0Miw3IEBAIGludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiYjNDM7c3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cdTAwM2VzdWJwcm9nX2luZm87XG4gXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiwgZXhfY2JfaW5zbjtcbkBAIC0yODU0LDggJiM0MzsyODU0LDcgQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKCFicGZfcHNldWRvX2Z1bmMoaW5zbikgXHUwMDI2XHUwMDI2ICFicGZfcHNldWRvX2NhbGwoaW5zbikgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pKVxuJiM0MztcdFx0aWYgKCFicGZfcHNldWRvX2Z1bmMoaW5zbikgXHUwMDI2XHUwMDI2ICFicGZfcHNldWRvX2NhbGwoaW5zbikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmICghZW52LVx1MDAzZWJwZl9jYXBhYmxlKSB7XG5AQCAtMjg2MywxMSAmIzQzOzI4NjIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXHRcdH1cbiBcbi1cdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSB8fCBicGZfcHNldWRvX2NhbGwoaW5zbikpXG4tXHRcdFx0cmV0ID0gYWRkX3N1YnByb2coZW52LCBpICYjNDM7IGluc24tXHUwMDNlaW1tICYjNDM7IDEpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gYnBmX2FkZF9rZnVuY19jYWxsKGVudiwgaW5zbi1cdTAwM2VpbW0sIGluc24tXHUwMDNlb2ZmKTtcbi1cbiYjNDM7XHRcdHJldCA9IGFkZF9zdWJwcm9nKGVudiwgaSAmIzQzOyBpbnNuLVx1MDAzZWltbSAmIzQzOyAxKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuQEAgLTI5MDUsNiAmIzQzOzI5MDAsMjggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhZGRfa2Z1bmNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4mIzQzO1x0aW50IGksIHJldCwgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWVudi1cdTAwM2VicGZfY2FwYWJsZSkge1xuJiM0MztcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bG9hZGluZy9jYWxsaW5nIG90aGVyIGJwZiBvciBrZXJuZWwgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIGZvciBDQVBfQlBGIGFuZCBDQVBfU1lTX0FETUlOXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBicGZfYWRkX2tmdW5jX2NhbGwoZW52LCBpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgY2hlY2tfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRpbnQgaSwgc3VicHJvZ19zdGFydCwgc3VicHJvZ19lbmQsIG9mZiwgY3VyX3N1YnByb2cgPSAwO1xuQEAgLTEwODkyLDkgJiM0MzsxMDkwOSwxNiBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0ZlxuIFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fcmVmY291bnRlZF9rcHRyXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19hcmVuYV9fbnVsbGFibGVcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4tXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19udWxsYWJsZVwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuICFpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoYnRmLCBhcmcpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX251bGxhYmxlXCYjMzQ7KTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX25vbm93bl9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuQEAgLTEwOTEyLDYgJiM0MzsxMDkzNiwxMiBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfaXJxX2ZsYWcoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtXG4gXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19pcnFfZmxhZ1wmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmEoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKGJ0ZiwgYXJnKSB8fFxuJiM0MztcdCAgICAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2FyZW5hXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxuIFx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWUpXG5AQCAtMTExMzIsNiAmIzQzOzExMTYyLDcgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuIFx0S0ZfQVJHX1BUUl9UT19JUlFfRkxBRyxcbiBcdEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSyxcbiBcdEtGX0FSR19QVFJfVE9fVEFTS19XT1JLLFxuJiM0MztcdEtGX0FSR19QVFJfVE9fQVJFTkEsXG4gfTtcbiBcbiBlbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG5AQCAtMTE0MTcsNyAmIzQzOzExNDQ4LDYgQEAgZ2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiBcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cih0KSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVxuIFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLVx1MDAzZWJ0ZiwgdC1cdTAwM2V0eXBlLCBOVUxMKTtcbiBcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QtXHUwMDNlbmFtZV9vZmYpO1xuIFxuQEAgLTExNDY2LDcgJiM0MzsxMTQ5NiwyOSBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcbiBcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuIFx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XG4tXHRlbHNlIGlmIChhcmcgJiM0MzsgMSBcdTAwM2MgbmFyZ3MgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FyZW5hKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKSB7XG4mIzQzO1x0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG4mIzQzO1x0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggYXJlbmEgcG9pbnRlciBhcmd1bWVudHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bWV0YS1cdTAwM2VmdW5jX25hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKCFlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7JXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHJlZ19mcm9tX2FyZ25vKGFyZ25vKSBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCb3RoIHN1ZmZpeGVzIGFjY2VwdCBhIGNvbnN0YW50IHplcm8uIFRoZSBmdW5jdGlvbiBtb2RlbCBkZXRlcm1pbmVzXG4mIzQzO1x0XHQgKiB3aGV0aGVyIHRoZSBKSVQgcmViYXNlcyBpdCB0byB0aGUgYXJlbmEgYmFzZSBvciBwcmVzZXJ2ZXMgTlVMTC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0FSRU5BIHwgUFRSX01BWUJFX05VTEw7XG4mIzQzO1x0fSBlbHNlIGlmIChhcmcgJiM0MzsgMSBcdTAwM2MgbmFyZ3MgXHUwMDI2XHUwMDI2XG4gXHRcdCAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyAmIzQzOyAxXSkgfHxcbiBcdFx0ICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICYjNDM7IDFdKSkpIHtcbiBcdFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcdTAwMjZcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG5AQCAtMTIxNjAsNyAmIzQzOzEyMjEyLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbiBcbiBcdFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSBcdTAwMjZcdTAwMjYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1tpXSkpIHtcbiYjNDM7XHRcdCAgICAhdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbkBAIC0xMjIxMyw2ICYjNDM7MTIyNjUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fVEFTS19XT1JLOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fSVJRX0ZMQUc6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOlxuJiM0MztcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FSRU5BOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fRFlOUFRSOlxuIFx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7XG5AQCAtMTIyNzksNiAmIzQzOzEyMzMyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0XHRtZXRhLVx1MDAzZXJldF9idGZfaWQgID0gcmV0O1xuIFx0XHRcdH1cbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19BUkVOQTpcbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDpcbiBcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MpKSB7XG4gXHRcdFx0XHRpZiAoIWlzX2JwZl9vYmpfZHJvcF9rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpKSB7XG5AQCAtMTg4MDgsMTAgJiM0MzsxODg2OCwyMSBAQCBpbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0cmV0dXJuIHByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mbyA/IDAgOiAtRU5PTUVNO1xuIH1cbiBcbiYjNDM7Ym9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGJhc2VfdHlwZShwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV0ucmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICpmdW5jX3Byb3RvO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcztcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXHUwMDNlcHJvZztcbkBAIC0xODg5MCwxMCAmIzQzOzE4OTYxLDIzIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5jbnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvW2ldLnJlZmNvdW50ZWQpIHtcbiYjNDM7XHRhcmdfaW5mbyA9IFx1MDAyNnN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZ19pbmZvLVx1MDAzZWNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8gPSBcdTAwMjZhcmdfaW5mby1cdTAwM2VpbmZvW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXJlZmNvdW50ZWQpXG4gXHRcdFx0aGFzX3JlZmNvdW50ZWRfYXJnID0gdHJ1ZTtcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmIChiYXNlX3R5cGUoaW5mby1cdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0FSRU5BKSB7XG4mIzQzO1x0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2FyZW5hIGFyZ3VtZW50IG9mICVzIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRtbmFtZSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE4OTE0LDggJiM0MzsxODk5OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcbiBcdGVudi1cdTAwM2VvcHMgPSBzdF9vcHMtXHUwMDNldmVyaWZpZXJfb3BzO1xuIFxuLVx0cmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmluZm8sXG4tXHRcdFx0XHRcdCAgc3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uY250KTtcbiYjNDM7XHRyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgYXJnX2luZm8tXHUwMDNlaW5mbywgYXJnX2luZm8tXHUwMDNlY250KTtcbiB9XG4gI2RlZmluZSBTRUNVUklUWV9QUkVGSVggXCYjMzQ7c2VjdXJpdHlfXCYjMzQ7XG4gXG5AQCAtMTkxNzksNiAmIzQzOzE5MjYyLDE3IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdGJwZl9sb2cobG9nLCBcJiMzNDtTdWJwcm9nICVzIGRvZXNuJiMzOTt0IGV4aXN0XFxuXCYjMzQ7LCB0bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIHN0cnVjdF9vcHMgaW5kaXJlY3QgdHJhbXBvbGluZSBjb252ZXJ0cyBhcmVuYSBhcmd1bWVudHNcbiYjNDM7XHRcdCAqIGJlZm9yZSBpbnZva2luZyBpdHMgcHJvZ3JhbS4gQSB0cmFjaW5nIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlXG4mIzQzO1x0XHQgKiBtYWluIHByb2dyYW0gd291bGQgc2VlIHRoZSBjb252ZXJ0ZWQgb2Zmc2V0IGFzIGEgcmVndWxhciBCVEZcbiYjNDM7XHRcdCAqIHBvaW50ZXIuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwcm9nX3RyYWNpbmcgXHUwMDI2XHUwMDI2IHN1YnByb2cgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyh0Z3RfcHJvZykpIHtcbiYjNDM7XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O0Nhbm5vdCB0cmFjZSBhIHRhcmdldCB3aXRoIGFyZW5hIGNvbnRleHQgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuIFx0XHRpZiAoYXV4LVx1MDAzZWZ1bmMgXHUwMDI2XHUwMDI2IGF1eC1cdTAwM2VmdW5jW3N1YnByb2ddLVx1MDAzZWF1eC1cdTAwM2VleGNlcHRpb25fY2IpIHtcbiBcdFx0XHRicGZfbG9nKGxvZyxcbiBcdFx0XHRcdFwmIzM0OyVzIHByb2dyYW1zIGNhbm5vdCBhdHRhY2ggdG8gZXhjZXB0aW9uIGNhbGxiYWNrXFxuXCYjMzQ7LFxuQEAgLTIwMjY5LDExICYjNDM7MjAzNjMsMTMgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVudi1cdTAwM2VleHBsb3JlZF9zdGF0ZXNbaV0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZW52LVx1MDAzZWZyZWVfbGlzdCk7XG4gXG4tXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG4mIzQzO1x0LyogUHJlcGFyZSBCVEYgYW5kIGZ1bmNfaW5mbyBuZWVkZWQgdG8gZGlzY292ZXIgYWxsIHN1YnByb2dyYW1zLiAqL1xuJiM0MztcdHJldCA9IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHRyZXQgPSBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoZW52KTtcbiYjNDM7XHQvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYmVmb3JlIHZhbGlkYXRpbmcgdGhlaXIgbGF5b3V0IGFuZCBCVEYuICovXG4mIzQzO1x0cmV0ID0gYWRkX3N1YnByb2dzKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbkBAIC0yMDI4MSwxNCAmIzQzOzIwMzc3LDIxIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4mIzQzO1x0LyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi9cbiBcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuIFxuJiM0MztcdC8qIFZhbGlkYXRlIGluc3RydWN0aW9ucyBhbmQgcmVzb2x2ZSB0aGUgcHJvZ3JhbSYjMzk7cyByZWZlcmVuY2VkIHJlc291cmNlcy4gKi9cbiBcdHJldCA9IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbiYjNDM7XHQvKiBCdWlsZCBrZnVuYyBwcm90b3R5cGVzIGFmdGVyIHJlc29sdmluZyBwcm9ncmFtIHJlc291cmNlcy4gKi9cbiYjNDM7XHRyZXQgPSBhZGRfa2Z1bmNzKGVudik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xuJiM0MztcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSkge1xuIFx0XHRyZXQgPSBicGZfcHJvZ19vZmZsb2FkX3ZlcmlmaWVyX3ByZXAoZW52LVx1MDAzZXByb2cpO1xuIFx0XHRpZiAocmV0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zMjNkNzA3YzU0M2ZhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTAsMCAmIzQzOzEsNzQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N0cnVjdF9vcHNfYXJlbmEuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzOy8qXG4mIzQzOyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXG4mIzQzOyAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXJlbmFfYXJnKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuJiM0MztcdHN0cnVjdCBzdHJ1Y3Rfb3BzX2FyZW5hICpza2VsO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfbWFwX19hdHRhY2hfc3RydWN0X29wcyhza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9hcmVuYSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwmIzM0O2F0dGFjaF9zdHJ1Y3Rfb3BzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnRyaWdnZXIpLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2dG9wdHMpO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcJiMzNDt0cmlnZ2VyX3JldHZhbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0c3RydWN0X29wc19hcmVuYV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBwcm9ncmFtIHdpdGggbm8gYXJlbmEgY2Fubm90IGF0dGFjaCB0byBhIG1lbWJlciB3aXRoIGFuIF9fYXJlbmFcbiYjNDM7ICogYXJndW1lbnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBhcmVuYV9hcmdfZmFpbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN0cnVjdF9vcHNfYXJlbmFfZmFpbCAqc2tlbDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmIChBU1NFUlRfRVJSX1BUUihza2VsLCBcJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaFxuJiM0MzsgKiB0ZXN0X3N0cnVjdF9vcHNfcHJpdmF0ZV9zdGFjayBhbHNvIGF0dGFjaGVzOyByZWdpc3RlcmluZyBpdCB0d2ljZSBmYWlsc1xuJiM0MzsgKiB3aXRoIC1FRVhJU1QuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxuJiM0MztcdCAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuJiM0MztcdCAqIGFyZ3VtZW50c1wmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4mIzQzO1x0ICovXG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YXJlbmFfYXJnXCYjMzQ7KSlcbiYjNDM7XHRcdGFyZW5hX2FyZygpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2FyZ19mYWlsXCYjMzQ7KSlcbiYjNDM7XHRcdGFyZW5hX2FyZ19mYWlsKCk7XG4mIzQzOyNlbHNlXG4mIzQzO1x0dGVzdF9fc2tpcCgpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCBiNzliYWZjYTY4ZjdhLi4xMTBhMzNiNmUxYzI1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuQEAgLTIsNiAmIzQzOzIsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDthcmVuYV9rZnVuYy5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXJlbmFfa2Z1bmNfaml0LnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2NhcF9oZWxwZXJzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9hbGlnbi5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9hbmQuc2tlbC5oXCYjMzQ7XG5AQCAtMTYxLDYgJiM0MzsxNjMsMTUgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3RzX2F1eChjb25zdCBjaGFyICpza2VsX25hbWUsXG4gXG4gI2RlZmluZSBSVU4oc2tlbCkgcnVuX3Rlc3RzX2F1eCgjc2tlbCwgc2tlbCMjX19lbGZfYnl0ZXMsIE5VTEwpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSB0ZXN0IGtmdW5jcyBsaXZlIGluIGJwZl90ZXN0bW9kLiBSZXNvbHZpbmcga2Z1bmNzIGFnYWluc3QgbW9kdWxlXG4mIzQzOyAqIEJURnMgbmVlZHMgQ0FQX1NZU19BRE1JTiwgc28gcnVuIHdpdGggZnVsbCBjYXBhYmlsaXRpZXMgaW5zdGVhZCBvZlxuJiM0MzsgKiB0aHJvdWdoIHRoZSB2ZXJpZmllciB0ZXN0cyYjMzk7IGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRlc3RfYXJlbmFfa2Z1bmModm9pZCkgICAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFMoYXJlbmFfa2Z1bmMpOyB9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfYXJlbmFfa2Z1bmNfaml0KHZvaWQpICAgICAgICAgICAgICAgeyBSVU5fVEVTVFMoYXJlbmFfa2Z1bmNfaml0KTsgfVxuJiM0MztcbiB2b2lkIHRlc3RfdmVyaWZpZXJfYWxpZ24odm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYWxpZ24pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2FuZCh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2FuZCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYXJlbmEodm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYXJlbmEpOyB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2YzM4MmNlODFhZjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5AQCAtMCwwICYjNDM7MSwyNjAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfZXhwZXJpbWVudGFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi9cbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuJiM0Mzt9IGFyZW5hIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPY2N1cGllcyBwYWdlIDAgc28gbm8gYWxsb2NhdGlvbiBsYW5kcyBhdCBhcmVuYSBvZmZzZXQgMCwgd2hpY2ggdGhlXG4mIzQzOyAqIG51bGxhYmxlIHRlc3RzIGJlbG93IG11c3QgYmUgYWJsZSB0byB0ZWxsIGFwYXJ0IGZyb20gTlVMTC5cbiYjNDM7ICovXG4mIzQzO3U2NCBfX2FyZW5hIGFyZW5hX3BhZDtcbiYjNDM7XG4mIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xuJiM0Mzt2b2xhdGlsZSB1NjQgc3Rhc2g7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4mIzQzO1x0dTY0IF9fYXJlbmEgKnZhbDtcbiYjNDM7XHR1NjQgcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0LyogUFRSX1RPX0FSRU5BIGFyZ3VtZW50ICovXG4mIzQzO1x0KnZhbCA9IDQxO1xuJiM0MztcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0LyogdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2NhbGFyICovXG4mIzQzO1x0c3Rhc2ggPSAodTMyKSh1NjQpdmFsO1xuJiM0MztcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcdGlmIChyZXQgIT0gNDIgfHwgKnZhbCAhPSA0MylcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgZnVsbCB1c2VyIGFkZHJlc3MgYXMgYSBzY2FsYXIgKi9cbiYjNDM7XHRzdGFzaCA9ICh1NjQpdmFsO1xuJiM0MztcdGJwZl9hZGRyX3NwYWNlX2Nhc3Qoc3Rhc2gsIDEsIDApO1xuJiM0MztcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcdGlmIChyZXQgIT0gNDMgfHwgKnZhbCAhPSA0NClcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQaW4gdGhlIHJlYmFzZSBzZW1hbnRpY3MgdXNpbmcgdGhlIGNhcHR1cmUga2Z1bmNzLCB3aGljaCByZXR1cm4gdGhlIHJhd1xuJiM0MzsgKiBhcmd1bWVudCB2YWx1ZTogX19hcmVuYSByZWJhc2VzIHVuY29uZGl0aW9uYWxseSwgc28gemVybyBsb3cgMzIgYml0c1xuJiM0MzsgKiBhcnJpdmUgYXMgdGhlIGFyZW5hIGtlcm5lbCBiYXNlLCB3aGlsZSBfX2FyZW5hX19udWxsYWJsZSB0dXJucyB0aGVtIGludG9cbiYjNDM7ICogTlVMTC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4mIzQzO1x0dTY0IF9fYXJlbmEgKnZhbDtcbiYjNDM7XHR1NjQgYmFzZSwgb2ZmO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YmFzZSA9IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChOVUxMKTtcbiYjNDM7XHRpZiAoIWJhc2UpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgY29udHJpYnV0ZSAqL1xuJiM0MztcdHN0YXNoID0gMHhiYWRjMGZmZTAwMDAwMDAwO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSBiYXNlKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdG9mZiA9ICh1MzIpKHU2NCl2YWw7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICYjNDM7IG9mZilcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KE5VTEwpICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gNTtcbiYjNDM7XG4mIzQzO1x0c3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopc3Rhc2gpICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gNjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICYjNDM7IG9mZilcbiYjNDM7XHRcdHJldHVybiA3O1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ19udWxsYWJsZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4mIzQzO1x0dTY0IF9fYXJlbmEgKnZhbDtcbiYjNDM7XHR1NjQgcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0KnZhbCA9IDQxO1xuJiM0MztcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChOVUxMKSAhPSAweGRlYWRiZWVmKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHR2YWxbMF0gPSAxO1xuJiM0MztcdHZhbFsxXSA9IDI7XG4mIzQzO1x0dmFsWzJdID0gNDtcbiYjNDM7XHR2YWxbM10gPSA4O1xuJiM0MztcdHZhbFs0XSA9IDE2O1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbiYjNDM7XHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSxcbiYjNDM7XHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFs0XSkgIT0gMzEpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHRpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbiYjNDM7XHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSwgTlVMTCkgIT0gMTUpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHR2YWxbMF0gPSA3O1xuJiM0MztcdHZhbFsxXSA9IDU7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCBOVUxMKSAhPSA3KVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCAodTY0ICopXHUwMDI2dmFsWzFdKSAhPSAxMilcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqL1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7aW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4mIzQzO1x0dTY0IF9fYXJlbmEgKnZhbDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdHN0YXNoID0gKHU2NCl2YWwgJiM0MzsgUEFHRV9TSVpFO1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7YXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCYjMzQ7KVxuJiM0MztpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopMSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclwmIzM0OylcbiYjNDM7aW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBidWYgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiB1c2UgdGhlIGFyZW5hIHNvIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgYXJlbmEgcHJlc2VuY2UgY2hlY2sgKi9cbiYjNDM7XHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0YnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KFx1MDAyNmJ1Zik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XCYjMzQ7KVxuJiM0MztpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoMSwgMiwgMywgNCwgNSwgKHU2NCAqKTEpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7YXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzliOTE4NjYyNjE2MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMCwwICYjNDM7MSw5OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhlIEpJVC1lbWl0dGVkIHJlYmFzZSBzZXF1ZW5jZXMgZm9yIF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlXG4mIzQzOyAqIGtmdW5jIGFyZ3VtZW50cy4gVGhlIGNhcHR1cmUga2Z1bmNzIHRha2UgdGhlIGFyZ3VtZW50IHdpdGhvdXRcbiYjNDM7ICogZGVyZWZlcmVuY2luZyBpdCwgc28gdGhlc2UgdGVzdHMgcGluIG9ubHkgdGhlIGVtaXR0ZWQgY29kZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xuJiM0Mzt2b2xhdGlsZSB1NjQgc3Rhc2g7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkaSwgJWVkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y2FsbHFcdHt7Lip9fVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVlZGksICVlZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JWVkaSwgJWVkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGplXHRMMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZGlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7TDA6XHRjYWxscVx0e3suKn19XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3Rhc2ggPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWRpLCAlZWRpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJkaVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVlc2ksICVlc2lcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcnNpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkeCwgJWVkeFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZHhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWN4LCAlZWN4XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJjeFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdmxcdCVyOGQsICVyOGRcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JXI4ZCwgJXI4ZFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGplXHRMMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyOFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtMMDpcdGNhbGxxXHR7ey4qfX1cJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0dmFsWzBdID0gMTtcbiYjNDM7XHR2YWxbMV0gPSAyO1xuJiM0MztcdHZhbFsyXSA9IDQ7XG4mIzQzO1x0dmFsWzNdID0gODtcbiYjNDM7XHR2YWxbNF0gPSAxNjtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbiYjNDM7XHRcdFx0XHQgICAodTY0ICopXHUwMDI2dmFsWzJdLCAodTY0ICopXHUwMDI2dmFsWzNdLFxuJiM0MztcdFx0XHRcdCAgICh1NjQgKilcdTAwMjZ2YWxbNF0pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QgKi9cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iYTA0YzczZDhkOTY3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5AQCAtMCwwICYjNDM7MSwxMTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWxzLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovXG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7LyogYWxzbyBhc3NvY2lhdGVzIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgYXJlbmEgKi9cbiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XG4mIzQzOy8qIHJhdyB2YWx1ZSBvZiB0aGUgbGFzdCBfX2FyZW5hIGN0eCBhcmd1bWVudCwgY2FwdHVyZWQgYnkgdGVzdF9hcmVuYV9jYiAqL1xuJiM0Mzt1NjQgX19hcmVuYSBjYl9wdHJfdmFsO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYVwmIzM0OylcbiYjNDM7aW50IHRlc3RfYXJlbmFfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xuJiM0MztcbiYjNDM7XHRhcmVuYV90b3VjaCYjNDM7JiM0Mzs7XG4mIzQzO1x0Y2JfcHRyX3ZhbCA9IGN0eFswXTtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9udWxsYWJsZV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMF07XG4mIzQzO1xuJiM0MztcdGFyZW5hX3RvdWNoJiM0MzsmIzQzOztcbiYjNDM7XHRpZiAoIXB0cilcbiYjNDM7XHRcdHJldHVybiAweGJlZTtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX3N0YWNrXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07XG4mIzQzO1xuJiM0MztcdGFyZW5hX3RvdWNoJiM0MzsmIzQzOztcbiYjNDM7XHQvKiBwaW4gdGhlIHNsb3QgbGF5b3V0OiB0aGUgbGVhZGluZyBhcmdzIGZpbGwgY3R4WzBdLi5jdHhbN10gKi9cbiYjNDM7XHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXG4mIzQzO1x0XHRyZXR1cm4gMHhiYWQ7XG4mIzQzO1x0KnB0ciAmIzQzOz0gMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmtcJiMzNDspXG4mIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7XG4mIzQzO1x0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsXG4mIzQzO307XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IHRyaWdnZXIodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuJiM0MztcdHU2NCBfX2FyZW5hICp2YWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSA0MTtcbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDIpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgY2FsbGJhY2sgbXVzdCBoYXZlIHNlZW4gZXhhY3RseSAodTMyKShrYWRkciAtIGtlcm5fdm1fc3RhcnQpLFxuJiM0MztcdCAqIHdoaWNoIGlzIHRoZSBhcmVuYSBvZmZzZXQgb2YgdmFsIHdpdGggdGhlIHVwcGVyIDMyIGJpdHMgY2xlYXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNiX3B0cl92YWwgIT0gKHUzMikodTY0KXZhbClcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDU7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDMpXG4mIzQzO1x0XHRyZXR1cm4gNjtcbiYjNDM7XG4mIzQzO1x0LyogTlVMTCBzdXJ2aXZlcyB0aGUgbnVsbGFibGUga2Z1bmMgYW5kIHRoZSB0cmFtcG9saW5lIGFzIE5VTEwgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShOVUxMKTtcbiYjNDM7XHRpZiAocmV0ICE9IDB4YmVlKVxuJiM0MztcdFx0cmV0dXJuIDc7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaygodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDg7XG4mIzQzO1x0aWYgKCp2YWwgIT0gNDQpXG4mIzQzO1x0XHRyZXR1cm4gOTtcbiYjNDM7XG4mIzQzO1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjFjMGVjNzI3ZDYzNzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwmIzM0O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzOy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9ub19hcmVuYSh1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7LnN0cnVjdF9vcHMubGlua1wmIzM0OylcbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xuJiM0MztcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX25vX2FyZW5hLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBlYjBmOWI1ZTE4ZDg1Li4yOTYzYzI5Zjk2YmE1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTIzNyw2ICYjNDM7MjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpXG4ge1xuIH1cbiBcbiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHR1NjQgb2xkO1xuJiM0MztcbiYjNDM7XHRvbGQgPSAqdmFsX19hcmVuYTtcbiYjNDM7XHQqdmFsX19hcmVuYSA9IG9sZCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiBvbGQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QodTY0ICp2YWxfX2FyZW5hX19udWxsYWJsZSlcbiYjNDM7e1xuJiM0MztcdHU2NCBvbGQ7XG4mIzQzO1xuJiM0MztcdGlmICghdmFsX19hcmVuYV9fbnVsbGFibGUpXG4mIzQzO1x0XHRyZXR1cm4gMHhkZWFkYmVlZjtcbiYjNDM7XG4mIzQzO1x0b2xkID0gKnZhbF9fYXJlbmFfX251bGxhYmxlO1xuJiM0MztcdCp2YWxfX2FyZW5hX19udWxsYWJsZSA9IG9sZCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiBvbGQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1NjQpdmFsX19hcmVuYTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1NjQpdmFsX19hcmVuYV9fbnVsbGFibGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hLFxuJiM0MztcdFx0XHRcdFx0ICAgdTY0ICpjX19hcmVuYSwgdTY0ICpkX19hcmVuYSxcbiYjNDM7XHRcdFx0XHRcdCAgIHU2NCAqZV9fYXJlbmFfX251bGxhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICphX19hcmVuYSAmIzQzOyAqYl9fYXJlbmEgJiM0MzsgKmNfX2FyZW5hICYjNDM7ICpkX19hcmVuYSAmIzQzO1xuJiM0MztcdCAgICAgICAoZV9fYXJlbmFfX251bGxhYmxlID8gKmVfX2FyZW5hX19udWxsYWJsZSA6IDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSxcbiYjNDM7XHRcdFx0XHRcdFx0dTY0ICpmX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhICYjNDM7IGIgJiM0MzsgYyAmIzQzOyBkICYjNDM7IGUgJiM0MzsgKmZfX2FyZW5hO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKmFfX2FyZW5hICYjNDM7IChiX19hcmVuYV9fbnVsbGFibGUgPyAqYl9fYXJlbmFfX251bGxhYmxlIDogMCk7XG4mIzQzO31cbiYjNDM7XG4gX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfZHlucHRyX3Rlc3Qoc3RydWN0IGJwZl9keW5wdHIgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyX19udWxsYWJsZSlcbiB7XG5AQCAtMzQ3LDkgJiM0MzszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XG4gXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxuIFx0LnRlc3RfMiA9IGJwZl90ZXN0bW9kX3Rlc3RfNCxcbiYjNDM7XHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4mIzQzO1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxuJiM0MztcdC50ZXN0X2FyZW5hX3N0YWNrID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcbkBAIC0zNjgsNiAmIzQzOzQzOCwyMSBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIodm9pZClcbiBcdHN0X29wczMtXHUwMDNldGVzdF8yKCk7XG4gfVxuIFxuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYShwdHJfX2FyZW5hKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX251bGxhYmxlKHB0cl9fYXJlbmFfX251bGxhYmxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtNzU1LDYgJiM0Mzs4NDAsMTMgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX25leHQsIEtGX0lURVJfTkVYVCB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90ZXN0bW9kX3NlcV9kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX3ZhbHVlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY29tbW9uX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19keW5wdHJfdGVzdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX25lc3RlZF9hY3F1aXJlX25vbnplcm9fb2Zmc2V0X3Rlc3QsIEtGX0FDUVVJUkUpXG5AQCAtNzcwLDYgJiM0Mzs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDYsNiAmIzQzOzEwNiwxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdGludCAoKnRlc3RfMikodm9pZCk7XG4mIzQzO1x0LyogVXNlZCB0byB0ZXN0IGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzLiAqL1xuJiM0MztcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcbiYjNDM7XHRpbnQgKCp0ZXN0X2FyZW5hX251bGxhYmxlKSh1NjQgKnB0cik7XG4mIzQzO1x0LyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi9cbiYjNDM7XHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuJiM0MztcdFx0XHRcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xuIH07XG4gXG4gc3RydWN0IHN0X29wc19hcmdzIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuaW5kZXggYzM2YmI5MTFkZWZhNy4uZGM3YzQwYmQxMjk5MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbkBAIC05OCw2ICYjNDM7OTgsMTYgQEAgdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlbGVhc2Uoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTtcbiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVmKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XG4gXG4gdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEodm9pZCAqbWVtLCBpbnQgbGVuKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4mIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hLFxuJiM0MztcdFx0XHRcdCBfX3U2NCAqY19fYXJlbmEsIF9fdTY0ICpkX19hcmVuYSxcbiYjNDM7XHRcdFx0XHQgX191NjQgKmVfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCwgX191NjQgZSxcbiYjNDM7XHRcdFx0XHQgICAgIF9fdTY0ICpmX19hcmVuYSkgX19rc3ltO1xuJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiBpbnQgKmJwZl9rZnVuY19jYWxsX3Rlc3RfZ2V0X3Jkd3JfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmR3cl9idWZfc2l6ZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9hY3FfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xuQEAgLTExMSw2ICYjNDM7MTIxLDkgQEAgdTMyIGJwZl9rZnVuY19jYWxsX3Rlc3Rfc3RhdGljX3VudXNlZF9hcmcodTMyIGFyZywgdTMyIHVudXNlZCkgX19rc3ltO1xuICNlbmRpZlxuIFxuIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4mIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxuIFx0XHRcdFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wX2FyZW5hX2Jhc2UmIzM0OywKICAgICYjMzQ7YnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdCYjMzQ7LAogICAgJiMzNDtidGZfZGlzdGlsbF9mdW5jX3Byb3RvJiMzNDssCiAgICAmIzM0O2J0Zl9jdHhfYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jaGVja19hdHRhY2hfdGFyZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgcGFzc2luZyBhcmVuYSBwb2ludGVycyB0byBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrcy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWNvZ25pemUgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9fbnVsbGFibGVgIGFubm90YXRpb25zLCBhbmQgdXBkYXRlcyB0aGUgeDg2IEJQRiBKSVQgYW5kIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiB0byBwcm9wZXJseSByZWJhc2UgdGhlc2UgcG9pbnRlcnMgdG8gdGhlIGtlcm5lbCYjMzk7cyBhcmVuYSBiYXNlIGFkZHJlc3MuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocyBpbiB0aGUgdmVyaWZpZXIsIEJURiBwYXJzaW5nLCBhbmQgSklUIGNvbXBpbGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2MTUyM2ZlNDcxNGY5Y2ZhNDJkYzdiODBhMDY4NzVhNmI5NjRmOTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjI2OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKaW5kZXggY2JkZTg2ZDA4MmNjZS4uYzA0NDY1OWI3Njg5MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CkBAIC0yNzgsNiAmIzQzOzI3OCw0MyBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjoKICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgfQogCiYjNDM7Mi4zLjggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgQW5ub3RhdGlvbnMKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO0JvdGggYW5ub3RhdGlvbnMgaW5kaWNhdGUgdGhhdCB0aGUgcG9pbnRlciBhcmd1bWVudCBwb2ludHMgaW50byB0aGUKJiM0MztjYWxsaW5nIHByb2dyYW0mIzM5O3MgYXJlbmEuIFRoZSBKSVQgcmViYXNlcyB0aGUgdmFsdWUgYXQgdGhlIGNhbGwgc2l0ZSBzbwomIzQzO3RoZSBrZnVuYyByZWNlaXZlcyBhIGRpcmVjdGx5IGRlcmVmZXJlbmNlYWJsZSBrZXJuZWwgYWRkcmVzcywgc3ViamVjdCB0bwomIzQzO3RoZSBhY2Nlc3MgcnVsZXMgZGVzY3JpYmVkIGluIDpyZWY6YEJQRl9rZnVuY19hcmVuYV9hY2Nlc3NgIChhdCBtb3N0CiYjNDM7YGBHVUFSRF9TWiAvIDJgYCwgMzIgS2lCLCBwYXN0IHRoZSBwb2ludGVyIGluIGEgc2luZ2xlIHVuY2hlY2tlZCBhY2Nlc3MpLgomIzQzOwomIzQzO1dpdGggYGBfX2FyZW5hYGAgdGhlIHJlYmFzZSBpcyB1bmNvbmRpdGlvbmFsIGFuZCB0aGUgYXJndW1lbnQgaXMgbmV2ZXIKJiM0MztOVUxMOiBhIHZhbHVlIHdob3NlIGxvd2VyIDMyIGJpdHMgYXJlIHplcm8gYXJyaXZlcyBhcyB0aGUgYXJlbmEgYmFzZQomIzQzO2FkZHJlc3MgKGFyZW5hIG9mZnNldCAwKS4gVGhlIGtmdW5jIG11c3Qgbm90IGNoZWNrIHRoZSBhcmd1bWVudCBmb3IgTlVMTC4KJiM0MztXaXRoIGBgX19hcmVuYV9fbnVsbGFibGVgYCBzdWNoIGEgdmFsdWUgYXJyaXZlcyBhcyBOVUxMIGluc3RlYWQgYW5kIHRoZQomIzQzO2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuCiYjNDM7CiYjNDM7QW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiYjNDM7CiYjNDM7ICAgICAgICBfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2Nlc3NfaXRlbShzdHJ1Y3QgaXRlbSAqaXRlbV9fYXJlbmEpCiYjNDM7ICAgICAgICB7CiYjNDM7ICAgICAgICAuLi4KJiM0MzsgICAgICAgIH0KJiM0MzsKJiM0MztDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoCiYjNDM7YXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZQomIzQzO3Byb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzCiYjNDM7bm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuCiYjNDM7CiYjNDM7VGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YgomIzQzO2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZQomIzQzO2tlcm5lbCBjYWxsZXIgcGFzc2VzIHRoZSBrZXJuZWwgYXJlbmEgYWRkcmVzcyBhbmQgdGhlIHRyYW1wb2xpbmUgY29udmVydHMKJiM0MztpdCB3aGlsZSBzYXZpbmcgdGhlIGFyZ3VtZW50cywgc28gdGhlIGNhbGxiYWNrIHJlY2VpdmVzIGFuIGFyZW5hIHBvaW50ZXIKJiM0MztpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3QKJiM0MztwYXNzIE5VTEwuIFdpdGggYGBfX2FyZW5hX19udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuCiYjNDM7SG93ZXZlciwgdGhlcmUgaXMgbm8gb2JsaWdhdGlvbiB0byBwcm92ZSB0byB0aGUgdmVyaWZpZXIgdGhhdCBzdWNoIGEgcG9pbnRlciBpcwomIzQzO25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpbgomIzQzO2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS4KJiM0MzsKIC4uIF9CUEZfa2Z1bmNfbm9kZWY6CiAKIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb24KQEAgLTUxNSw2ICYjNDM7NTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0CiBQVFJfVE9fQlRGX0lEIHR5cGUgbWF0Y2hpbmcgaWYgdHdvIHR5cGVzIGhhdmUgdGhlIGV4YWN0IHNhbWUgbmFtZSwgd2l0aCBvbmUKIGJlaW5nIHN1ZmZpeGVkIHdpdGggYGBfX19pbml0YGAuCiAKJiM0MzsuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczoKJiM0MzsKIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggMDFlN2NlNTY5YzFlZC4uNWM1YzMyYWJhMjM5NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTY3OCw2ICYjNDM7MTY3OCw1MCBAQCBzdGF0aWMgaW50IGVtaXRfc3BlY3RyZV9iaGJfYmFycmllcih1OCAqKnBwcm9nLCB1OCAqaXAsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHJOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXJOLCB3aXRoIFIxMiBob2xkaW5nIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUKJiM0MzsgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMKJiM0MzsgKiBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbWl0dGVkIGJ5dGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsJdTggKnN0YXJ0ID0gcHJvZzsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGJwZl9wcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4IGZsYWdzID0gZm0tJmd0O2FyZ19mbGFnc1tpXTsKJiM0MzsJCXUzMiByZWcgPSBCUEZfUkVHXzEgJiM0MzsgaTsKJiM0MzsKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIWJwZl9wcm9nLSZndDthdXgtJmd0O2FyZW5hKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgZmFsc2UsIHJlZywgcmVnKTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRykgewomIzQzOwkJCS8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovCiYjNDM7CQkJbWF5YmVfZW1pdF9tb2QoJmFtcDtwcm9nLCByZWcsIHJlZywgZmFsc2UpOwomIzQzOwkJCUVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7CiYjNDM7CQkJRU1JVDIoWDg2X0pFLCAzKTsKJiM0MzsJCX0KJiM0MzsJCS8qIGFkZCByTiwgcjEyICovCiYjNDM7CQltYXliZV9lbWl0X21vZCgmYW1wO3Byb2csIHJlZywgWDg2X1JFR19SMTIsIHRydWUpOwomIzQzOwkJRU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7CXJldHVybiBwcm9nIC0gc3RhcnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLAogCQkgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKQogewpAQCAtMjU4Myw2ICYjNDM7MjYyNywxMiBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCX0KIAkJCWlmICghaW1tMzIpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJaWYgKHNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7CiYjNDM7CQkJCWVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgJmFtcDtwcm9nKTsKJiM0MzsJCQkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCQlpcCAmIzQzOz0gZXJyOwomIzQzOwkJCX0KIAkJCWlmIChwcml2X2ZyYW1lX3B0cikgewogCQkJCXB1c2hfcjkoJmFtcDtwcm9nKTsKIAkJCQlpcCAmIzQzOz0gMjsKQEAgLTI5OTMsMTEgJiM0MzszMDQzLDM5IEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pCiAJcmV0dXJuIG5yX3VzZWRfcmVnczsKIH0KIAomIzQzOy8qCiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheQomIzQzOyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZwomIzQzOyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0CiYjNDM7ICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZAomIzQzOyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pCiYjNDM7ewomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsKJiM0MzsJaWYgKG51bGxhYmxlKSB7CiYjNDM7CQlpZiAoc3JjX3JlZyAhPSBCUEZfUkVHXzApCiYjNDM7CQkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgdHJ1ZSwgQlBGX1JFR18wLCBzcmNfcmVnKTsKJiM0MzsJCS8qIHRlc3QgcmF4LCByYXg7IGp6IG92ZXIgdGhlIDUtYnl0ZSBzdWIgKi8KJiM0MzsJCUVNSVQzKDB4NDgsIDB4ODUsIDB4QzApOwomIzQzOwkJRU1JVDIoWDg2X0pFLCA1KTsKJiM0MzsJfSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkgewomIzQzOwkJZW1pdF9tb3ZfcmVnKCZhbXA7cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7CiYjNDM7CX0KJiM0MzsJLyogc3ViIGVheCwgYmFzZV9sbyAqLwomIzQzOwlFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTsKJiM0MzsKJiM0MzsJKnBwcm9nID0gcHJvZzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csCi0JCSAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzKQomIzQzOwkJICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MsCiYjNDM7CQkgICAgICB1NjQgYXJlbmFfYmFzZSkKIHsKIAlpbnQgYXJnX3JlZ3MsIGZpcnN0X29mZiA9IDAsIG5yX3JlZ3MgPSAwLCBucl9zdGFja19zbG90cyA9IDA7CiAJYm9vbCB1c2Vfam1wID0gYnBmX3RyYW1wb2xpbmVfdXNlX2ptcChmbGFncyk7CiYjNDM7CWludCBzdGFja19hcmdzX29mZiA9ICh1c2Vfam1wIHx8IChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9JTkRJUkVDVCkpID8gMTYgOiAyNDsKIAlpbnQgaSwgajsKIAogCS8qIFN0b3JlIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byBzdGFjay4KQEAgLTMwMDYsNiAmIzQzOzMwODQsOSBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csCiAJICogbW92IFFXT1JEIFBUUiBbcmJwLTB4OF0scnNpCiAJICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IG1pbl90KGludCwgbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX0FSR1MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYm9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlICZhbXA7JmFtcDsgKG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX0FSRU5BX0FSRyk7CiYjNDM7CQlib29sIG51bGxhYmxlID0gbS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHOwomIzQzOwogCQlhcmdfcmVncyA9IChtLSZndDthcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDg7CiAKIAkJLyogQWNjb3JkaW5nIHRvIHRoZSByZXNlYXJjaCBvZiBZb25naG9uZywgc3RydWN0IG1lbWJlcnMKQEAgLTMwMjksMTYgJiM0MzszMTEwLDE5IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZywKIAkJCS8qIGNvcHkgZnVuY3Rpb24gYXJndW1lbnRzIGZyb20gb3JpZ2luIHN0YWNrIGZyYW1lCiAJCQkgKiBpbnRvIGN1cnJlbnQgc3RhY2sgZnJhbWUuCiAJCQkgKgotCQkJICogVGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIGFyZ3VtZW50cyBvbi1zdGFjawotCQkJICogaXM6Ci0JCQkgKiAgIHJicCAmIzQzOyA4KHB1c2ggcmJwKSAmIzQzOwotCQkJICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSAmIzQzOwotCQkJICogICA4KHJldHVybiBhZGRyIG9mIHRoZSBjYWxsZXIpCi0JCQkgKiB3aGljaCBtZWFuczogcmJwICYjNDM7IDI0CiYjNDM7CQkJICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwCiYjNDM7CQkJICogYW5kIHRoZSByZXR1cm4gYWRkcmVzc2VzOiB0d28gcmV0dXJuIGFkZHJlc3NlcwomIzQzOwkJCSAqIChvcmlnaW4gY2FsbCBhbmQgY2FsbGVyKSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzCiYjNDM7CQkJICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICYjNDM7IDI0LCBhbmQKJiM0MzsJCQkgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3IKJiM0MzsJCQkgKiBjYWxsZWQgaW5kaXJlY3RseSwgc28gcmJwICYjNDM7IDE2LgogCQkJICovCiAJCQlmb3IgKGogPSAwOyBqICZsdDsgYXJnX3JlZ3M7IGomIzQzOyYjNDM7KSB7CiAJCQkJZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsCi0JCQkJCSBucl9zdGFja19zbG90cyAqIDggJiM0MzsgMTYgJiM0MzsgKCF1c2Vfam1wKSAqIDgpOwomIzQzOwkJCQkJIG5yX3N0YWNrX3Nsb3RzICogOCAmIzQzOyBzdGFja19hcmdzX29mZik7CiYjNDM7CQkJCWlmIChhcmVuYV9hcmcpCiYjNDM7CQkJCQllbWl0X2FyZW5hX2FyZ19jb252KHByb2csIEJQRl9SRUdfMCwgbnVsbGFibGUsCiYjNDM7CQkJCQkJCSAgICAodTMyKWFyZW5hX2Jhc2UpOwogCQkJCWVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLAogCQkJCQkgLXN0YWNrX3NpemUpOwogCkBAIC0zMDU5LDkgJiM0MzszMTQzLDEzIEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZywKIAogCQkJLyogY29weSB0aGUgYXJndW1lbnRzIGZyb20gcmVncyBpbnRvIHN0YWNrICovCiAJCQlmb3IgKGogPSAwOyBqICZsdDsgYXJnX3JlZ3M7IGomIzQzOyYjNDM7KSB7Ci0JCQkJZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLAotCQkJCQkgbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSAmIzQzOyBucl9yZWdzLAotCQkJCQkgLXN0YWNrX3NpemUpOwomIzQzOwkJCQl1MzIgc3JjID0gbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSAmIzQzOyBucl9yZWdzOwomIzQzOwomIzQzOwkJCQlpZiAoYXJlbmFfYXJnKSB7CiYjNDM7CQkJCQllbWl0X2FyZW5hX2FyZ19jb252KHByb2csIHNyYywgbnVsbGFibGUsICh1MzIpYXJlbmFfYmFzZSk7CiYjNDM7CQkJCQlzcmMgPSBCUEZfUkVHXzA7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBzcmMsIC1zdGFja19zaXplKTsKIAkJCQlzdGFja19zaXplIC09IDg7CiAJCQkJbnJfcmVncyYjNDM7JiM0Mzs7CiAJCQl9CkBAIC0zMzU3LDYgJiM0MzszNDQ1LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAl2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7CiAJaW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7CiAJdTggKipicmFuY2hlcyA9IE5VTEw7CiYjNDM7CXU2NCBhcmVuYV9iYXNlOwogCXU2NCBmdW5jX21ldGE7CiAJdTggKnByb2c7CiAJYm9vbCBzYXZlX3JldDsKQEAgLTMzNjksNiAmIzQzOzM0NTgsOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbQogCVdBUk5fT05fT05DRSgoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpICZhbXA7JmFtcDsKIAkJICAgICAoZmxhZ3MgJmFtcDsgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpOwogCiYjNDM7CWFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbS0mZ3Q7bnJfYXJnczsgaSYjNDM7JiM0MzspCiAJCW5yX3JlZ3MgJiM0Mzs9IChtLSZndDthcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDggLSAxOwogCkBAIC0zNTAzLDcgJiM0MzszNTk0LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAkJZW1pdF9zdG9yZV9zdGFja19pbW02NCgmYW1wO3Byb2csIEJQRl9SRUdfMCwgLWlwX29mZiwgKGxvbmcpZnVuY19hZGRyKTsKIAl9CiAKLQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCByZWdzX29mZiwgZmFsc2UsIGZsYWdzKTsKJiM0MzsJc2F2ZV9hcmdzKG0sICZhbXA7cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncywgYXJlbmFfYmFzZSk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7CiAJCS8qIGFyZzE6IG1vdiByZGksIGltICovCkBAIC0zNTQ1LDcgJiM0MzszNjM2LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW0KIAogCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHsKIAkJcmVzdG9yZV9yZWdzKG0sICZhbXA7cHJvZywgcmVnc19vZmYpOwotCQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncyk7CiYjNDM7CQlzYXZlX2FyZ3MobSwgJmFtcDtwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncywgMCk7CiAKIAkJaWYgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFgpIHsKIAkJCS8qIEJlZm9yZSBjYWxsaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgbG9hZCB0aGUKQEAgLTQwNDYsNiAmIzQzOzQxMzcsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCiB7CiAJaWYgKHRleHRfcG9rZV9jb3B5KGRzdCwgc3JjLCBsZW4pID09IE5VTEwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3M2JhY2ZjNjQ0NGRmLi42OGZmNjY3ODdhZTFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTEyMTAsNiAmIzQzOzEyMTAsMTIgQEAgc3RydWN0IGJwZl9wcm9nX29mZmxvYWQgewogLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi8KICNkZWZpbmUgQlRGX0ZNT0RFTF9TSUdORURfQVJHCQlCSVQoMSkKIAomIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBhbiBhcmVuYSBwb2ludGVyLiAqLwomIzQzOyNkZWZpbmUgQlRGX0ZNT0RFTF9BUkVOQV9BUkcJCUJJVCgyKQomIzQzOwomIzQzOy8qIFRoZSBhcmd1bWVudCBpcyBudWxsYWJsZS4gKi8KJiM0MzsjZGVmaW5lIEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHCQlCSVQoMykKJiM0MzsKIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7CiAJdTggcmV0X3NpemU7CiAJdTggcmV0X2ZsYWdzOwpAQCAtMTI4Myw2ICYjNDM7MTI4OSwxNSBAQCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzIHsKIAlpbnQgbnJfbm9kZXM7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgYXJlbmEgYmFzZSBhZ2FpbnN0IHdoaWNoIGEgc3RydWN0X29wcyB0cmFtcG9saW5lIGNvbnZlcnRzIHRoZQomIzQzOyAqIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRyB3aGlsZSBzYXZpbmcgdGhlbSBpbnRvIHRoZSBCUEYKJiM0MzsgKiBjdHgsIGN0eFthcmddID0gKHUzMikoa2FkZHIgLSBrZXJuX3ZtX3N0YXJ0KS4gWmVybyB3aGVuIHRoZSB0cmFtcG9saW5lCiYjNDM7ICogY29udmVydHMgbm90aGluZy4KJiM0MzsgKi8KJiM0Mzt1NjQgYnBmX3RyYW1wX2FyZW5hX2Jhc2UoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLAomIzQzOwkJCSBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHUzMiBmbGFncyk7CiYjNDM7CiBzdHJ1Y3QgYnBmX3RyYW1wX3J1bl9jdHg7CiAKIC8qIERpZmZlcmVudCB1c2UgY2FzZXMgZm9yIEJQRiB0cmFtcG9saW5lOgpAQCAtMjM1Miw2ICYjNDM7MjM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9mc2Vzc2lvbl9jb29raWVfY250KHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKm5vZGVzKQogCiBpbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sIHUzMiBjbnQpOwomIzQzO2Jvb2wgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0NHUk9VUF9CUEYpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfQlBGX0xTTSkKIGludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCmluZGV4IGEyYTQwY2FjYTBhMGUuLmE5NTU1ZDE3ZmQ4ZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaApAQCAtMTE3Nyw4ICYjNDM7MTE3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV91bnBhY2tfa2V5KHU2NCBrZXksIHUzMiAqb2JqX2lkLCB1MzIgKmJ0Zl9pZCkKIAkJKmJ0Zl9pZCA9IGtleSAmYW1wOyAweDdGRkZGRkZGOwogfQogCi1pbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7CiYjNDM7aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7CiBpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCSAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaAppbmRleCAzMmQ1Mjk3YzU1N2U1Li4zNmNlMzQwM2ZlNTk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTExODMsNiAmIzQzOzExODMsNyBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKTsKIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpOwomIzQzO2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpOwogYm9vbCBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpOwogYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCk7CiBib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMKaW5kZXggNGU3YTQ4YzAyYmU1Yy4uY2VkN2IxODI0NmE5NiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYwpAQCAtMTQ3LDYgJiM0MzsxNDcsOCBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpCiAKICNkZWZpbmUgTUFZQkVfTlVMTF9TVUZGSVggJiMzNDtfX251bGxhYmxlJiMzNDsKICNkZWZpbmUgUkVGQ09VTlRFRF9TVUZGSVggJiMzNDtfX3JlZiYjMzQ7CiYjNDM7I2RlZmluZSBBUkVOQV9TVUZGSVggJiMzNDtfX2FyZW5hJiMzNDsKJiM0MzsjZGVmaW5lIEFSRU5BX01BWUJFX05VTExfU1VGRklYICYjMzQ7X19hcmVuYV9fbnVsbGFibGUmIzM0OwogCiAvKiBQcmVwYXJlIGFyZ3VtZW50IGluZm8gZm9yIGV2ZXJ5IG51bGxhYmxlIGFyZ3VtZW50IG9mIGEgbWVtYmVyIG9mIGEKICAqIHN0cnVjdF9vcHMgdHlwZS4KQEAgLTE1OSw3ICYjNDM7MTYxLDcgQEAgdm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKQogICogdG8gcHJvdmlkZSBhbiBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4LCB3aGljaCBpbiB0dXJuIHByb3ZpZGVzCiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZQogICogQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbSBhc3NpZ25lZCB0byB0aGUgbWVtYmVyLiBIZXJlLCB3ZSBvbmx5IGNhcmUgYWJvdXQKLSAqIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIF9fbnVsbGFibGUuCiYjNDM7ICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZSwgX19yZWYgb3IgX19hcmVuYS4KICAqCiAgKiBUaGUgYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCBpcyBldmVudHVhbGx5IGFzc2lnbmVkIHRvCiAgKiBwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mbyBvZiBCUEYgc3RydWN0X29wcyBwcm9ncmFtcyBhbmQgcGFzc2VkIHRvIHRoZQpAQCAtMTcyLDEwICYjNDM7MTc0LDEyIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsCiAJCQkgICAgY29uc3QgY2hhciAqc3Rfb3BzX25hbWUsCiAJCQkgICAgY29uc3QgY2hhciAqbWVtYmVyX25hbWUsCiAJCQkgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jX3Byb3RvLCB2b2lkICpzdHViX2Z1bmNfYWRkciwKJiM0MzsJCQkgICAgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptb2RlbCwKIAkJCSAgICBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvKQogewogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3R1Yl9mdW5jX3Byb3RvLCAqcG9pbnRlZF90eXBlOwotCWJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlOwomIzQzOwlib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZSwgaXNfYXJlbmEgPSBmYWxzZTsKJiM0MzsJYm9vbCBpc19hcmVuYV9udWxsYWJsZSA9IGZhbHNlOwogCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnN0dWJfYXJncywgKmFyZ3M7CiAJc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgKmluZm9fYnVmOwogCXUzMiBuYXJncywgYXJnX25vLCBpbmZvX2NudCA9IDA7CkBAIC0yMjUsMjcgJiM0MzsyMjksMzUgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZiwKIAkvKiBQcmVwYXJlIGluZm8gZm9yIGV2ZXJ5IG51bGxhYmxlIGFyZ3VtZW50ICovCiAJaW5mbyA9IGluZm9fYnVmOwogCWZvciAoYXJnX25vID0gMDsgYXJnX25vICZsdDsgbmFyZ3M7IGFyZ19ubyYjNDM7JiM0MzspIHsKLQkJLyogU2tpcCBhcmd1bWVudHMgdGhhdCBpcyBub3Qgc3VmZml4ZWQgd2l0aAotCQkgKiAmIzM0O19fbnVsbGFibGUgb3IgX19yZWYmIzM0Oy4KJiM0MzsJCS8qCiYjNDM7CQkgKiBTa2lwIGFyZ3VtZW50cyB0aGF0IGFyZSBub3Qgc3VmZml4ZWQgd2l0aCAmIzM0O19fYXJlbmFfX251bGxhYmxlJiMzNDssCiYjNDM7CQkgKiAmIzM0O19fYXJlbmEmIzM0OywgJiMzNDtfX251bGxhYmxlJiMzNDssIG9yICYjMzQ7X19yZWYmIzM0Oy4KIAkJICovCi0JCWlzX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsICZhbXA7c3R1Yl9hcmdzW2FyZ19ub10sCi0JCQkJCQkgICAgIE1BWUJFX05VTExfU1VGRklYKTsKJiM0MzsJCWlzX2FyZW5hX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsICZhbXA7c3R1Yl9hcmdzW2FyZ19ub10sCiYjNDM7CQkJCQkJCSAgIEFSRU5BX01BWUJFX05VTExfU1VGRklYKTsKJiM0MzsJCWlzX2FyZW5hID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsICZhbXA7c3R1Yl9hcmdzW2FyZ19ub10sIEFSRU5BX1NVRkZJWCk7CiYjNDM7CQlpc19udWxsYWJsZSA9ICFpc19hcmVuYV9udWxsYWJsZSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsICZhbXA7c3R1Yl9hcmdzW2FyZ19ub10sIE1BWUJFX05VTExfU1VGRklYKTsKIAkJaXNfcmVmY291bnRlZCA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCAmYW1wO3N0dWJfYXJnc1thcmdfbm9dLAogCQkJCQkJICAgICAgIFJFRkNPVU5URURfU1VGRklYKTsKIAotCQlpZiAoaXNfbnVsbGFibGUpCiYjNDM7CQlpZiAoaXNfYXJlbmFfbnVsbGFibGUpCiYjNDM7CQkJc3VmZml4ID0gQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVg7CiYjNDM7CQllbHNlIGlmIChpc19hcmVuYSkKJiM0MzsJCQlzdWZmaXggPSBBUkVOQV9TVUZGSVg7CiYjNDM7CQllbHNlIGlmIChpc19udWxsYWJsZSkKIAkJCXN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYOwogCQllbHNlIGlmIChpc19yZWZjb3VudGVkKQogCQkJc3VmZml4ID0gUkVGQ09VTlRFRF9TVUZGSVg7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCi0JCS8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovCi0JCXBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0ZiwKLQkJCQkJCSAgICBhcmdzW2FyZ19ub10udHlwZSwKLQkJCQkJCSAgICAmYW1wO2FyZ19idGZfaWQpOwotCQlpZiAoIXBvaW50ZWRfdHlwZSB8fAotCQkgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogU2hvdWxkIGJlIGEgcG9pbnRlciB0byBzdHJ1Y3QsIG9yIGFueSBwb2ludGVyIGZvciBfX2FyZW5hIG9yCiYjNDM7CQkgKiBfX2FyZW5hX19udWxsYWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJcG9pbnRlZF90eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoYnRmLCBhcmdzW2FyZ19ub10udHlwZSwgJmFtcDthcmdfYnRmX2lkKTsKJiM0MzsJCWlmICghcG9pbnRlZF90eXBlIHx8ICghaXNfYXJlbmEgJmFtcDsmYW1wOyAhaXNfYXJlbmFfbnVsbGFibGUgJmFtcDsmYW1wOyAhYnRmX3R5cGVfaXNfc3RydWN0KHBvaW50ZWRfdHlwZSkpKSB7CiAJCQlwcl93YXJuKCYjMzQ7c3R1YiBmdW5jdGlvbiAlcyBoYXMgJXMgdGFnZ2luZyB0byBhbiB1bnN1cHBvcnRlZCB0eXBlXG4mIzM0OywKIAkJCQlzdHViX2ZuYW1lLCBzdWZmaXgpOwogCQkJZ290byBlcnJfb3V0OwpAQCAtMjY4LDcgJiM0MzsyODAsMTggQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZiwKIAkJaW5mby0mZ3Q7YnRmX2lkID0gYXJnX2J0Zl9pZDsKIAkJaW5mby0mZ3Q7YnRmID0gYnRmOwogCQlpbmZvLSZndDtvZmZzZXQgPSBvZmZzZXQ7Ci0JCWlmIChpc19udWxsYWJsZSkgewomIzQzOwkJaWYgKGlzX2FyZW5hIHx8IGlzX2FyZW5hX251bGxhYmxlKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLAomIzQzOwkJCSAqIFBUUl9UT19BUkVOQSBlbmNvbXBhc3NlcyBwb3RlbnRpYWwgTlVMTCB2YWx1ZXMsIGJ1dAomIzQzOwkJCSAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW4KJiM0MzsJCQkgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLgomIzQzOwkJCSAqLwomIzQzOwkJCWluZm8tJmd0O3JlZ190eXBlID0gUFRSX1RPX0FSRU5BOwomIzQzOwkJCW1vZGVsLSZndDthcmdfZmxhZ3NbYXJnX25vXSB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRzsKJiM0MzsJCQlpZiAoaXNfYXJlbmFfbnVsbGFibGUpCiYjNDM7CQkJCW1vZGVsLSZndDthcmdfZmxhZ3NbYXJnX25vXSB8PSBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsJCX0gZWxzZSBpZiAoaXNfbnVsbGFibGUpIHsKIAkJCWluZm8tJmd0O3JlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEIHwgUFRSX01BWUJFX05VTEw7CiAJCX0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkgewogCQkJaW5mby0mZ3Q7cmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQ7CkBAIC00NjAsNiAmIzQzOzQ4Myw3IEBAIGludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLAogCQlzdHViX2Z1bmNfYWRkciA9ICoodm9pZCAqKikoc3Rfb3BzLSZndDtjZmlfc3R1YnMgJiM0MzsgbW9mZik7CiAJCWVyciA9IHByZXBhcmVfYXJnX2luZm8oYnRmLCBzdF9vcHMtJmd0O25hbWUsIG1uYW1lLAogCQkJCSAgICAgICBmdW5jX3Byb3RvLCBzdHViX2Z1bmNfYWRkciwKJiM0MzsJCQkJICAgICAgICZhbXA7c3Rfb3BzLSZndDtmdW5jX21vZGVsc1tpXSwKIAkJCQkgICAgICAgYXJnX2luZm8gJiM0MzsgaSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm91dDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jCmluZGV4IDQyNDE0NjMzY2YyNjMuLjY2MDYxODdlZDRmNDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnRmLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuYwpAQCAtNjk2MywxNSAmIzQzOzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSwKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIGNoZWNrIGZvciBQVFJfVE9fUkRPTkxZX0JVRl9PUl9OVUxMIG9yIFBUUl9UT19SRFdSX0JVRl9PUl9OVUxMICovCiYjNDM7CS8qCiYjNDM7CSAqIENoZWNrIGZvciBQVFJfVE9fUkRPTkxZX0JVRl9PUl9OVUxMLCBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCBvcgomIzQzOwkgKiBQVFJfVE9fQVJFTkEgKGJvdGggbnVsbGFibGUgYW5kIG5vbi1udWxsYWJsZSBjYXNlcykuCiYjNDM7CSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBwcm9nLSZndDthdXgtJmd0O2N0eF9hcmdfaW5mb19zaXplOyBpJiM0MzsmIzQzOykgewogCQljb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSAmYW1wO3Byb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvW2ldOwogCQl1MzIgdHlwZSwgZmxhZzsKIAogCQl0eXBlID0gYmFzZV90eXBlKGN0eF9hcmdfaW5mby0mZ3Q7cmVnX3R5cGUpOwogCQlmbGFnID0gdHlwZV9mbGFnKGN0eF9hcmdfaW5mby0mZ3Q7cmVnX3R5cGUpOwotCQlpZiAoY3R4X2FyZ19pbmZvLSZndDtvZmZzZXQgPT0gb2ZmICZhbXA7JmFtcDsgdHlwZSA9PSBQVFJfVE9fQlVGICZhbXA7JmFtcDsKLQkJICAgIChmbGFnICZhbXA7IFBUUl9NQVlCRV9OVUxMKSkgewomIzQzOwkJaWYgKGN0eF9hcmdfaW5mby0mZ3Q7b2Zmc2V0ID09IG9mZiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHR5cGUgPT0gUFRSX1RPX0FSRU5BIHx8CiYjNDM7CQkgICAgICh0eXBlID09IFBUUl9UT19CVUYgJmFtcDsmYW1wOyAoZmxhZyAmYW1wOyBQVFJfTUFZQkVfTlVMTCkpKSkgewogCQkJaW5mby0mZ3Q7cmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tJmd0O3JlZ190eXBlOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KQEAgLTc1MzksNiAmIzQzOzc1NDMsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCkKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKJiM0MztzdGF0aWMgdTggX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpCiYjNDM7ewomIzQzOwl1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpOwomIzQzOwomIzQzOwlpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hX19udWxsYWJsZSYjMzQ7KSkKJiM0MzsJCWZsYWdzIHw9IEJURl9GTU9ERUxfQVJFTkFfQVJHIHwgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CWVsc2UgaWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19hcmVuYSYjMzQ7KSkKJiM0MzsJCWZsYWdzIHw9IEJURl9GTU9ERUxfQVJFTkFfQVJHOwomIzQzOwllbHNlIGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fbnVsbGFibGUmIzM0OykpCiYjNDM7CQlmbGFncyB8PSBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsKJiM0MzsJcmV0dXJuIGZsYWdzOwomIzQzO30KJiM0MzsKIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csCiAJCQkgICBzdHJ1Y3QgYnRmICpidGYsCiAJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmMsCkBAIC03NjA0LDcgJiM0Mzs3NjI0LDcgQEAgaW50IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCW0tJmd0O2FyZ19zaXplW2ldID0gcmV0OwotCQltLSZndDthcmdfZmxhZ3NbaV0gPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTsKJiM0MzsJCW0tJmd0O2FyZ19mbGFnc1tpXSA9IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoYnRmLCAmYW1wO2FyZ3NbaV0sIHQpOwogCX0KIAltLSZndDtucl9hcmdzID0gbmFyZ3M7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jIGIva2VybmVsL2JwZi9jaGVja19idGYuYwppbmRleCA5M2JlYmU2ZmUxMmU3Li4wZThiM2NjYzdhNWI5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2hlY2tfYnRmLmMKQEAgLTI4LDkgJiM0MzsyOCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWJub3JtYWxfcmV0dXJuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAjZGVmaW5lIE1JTl9CUEZfRlVOQ0lORk9fU0laRQk4CiAjZGVmaW5lIE1BWF9GVU5DSU5GT19SRUNfU0laRQkyNTIKIAotc3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCWNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLAotCQkJCWJwZnB0cl90IHVhdHRyKQomIzQzO3N0YXRpYyBpbnQgcHJlcGFyZV9idGZfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCSAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwKJiM0MzsJCQkgICAgYnBmcHRyX3QgdWF0dHIpCiB7CiAJdTMyIGtyZWNfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyk7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlLCAqZnVuY19wcm90bzsKQEAgLTQwNyw5ICYjNDM7NDA3LDkgQEAgc3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLAotCQkJICAgICBicGZwdHJfdCB1YXR0cikKJiM0MztpbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsCiYjNDM7CQkJIGJwZnB0cl90IHVhdHRyKQogewogCXN0cnVjdCBidGYgKmJ0ZjsKIAlpbnQgZXJyOwpAQCAtNDI5LDcgJiM0Mzs0MjksNyBAQCBpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJfQogCWVudi0mZ3Q7cHJvZy0mZ3Q7YXV4LSZndDtidGYgPSBidGY7CiAKLQllcnIgPSBjaGVja19idGZfZnVuY19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTsKJiM0MzsJZXJyID0gcHJlcGFyZV9idGZfZnVuYyhlbnYsIGF0dHIsIHVhdHRyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuYwppbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuYwpAQCAtMzMwOCw2ICYjNDM7MzMwOCwxMSBAQCBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0Mztib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpCiB7CiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCBlZDc5OTlhZDZjNjZjLi5lMDdhZjM1ZWQwNDAyIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwpAQCAtNTI5LDYgJiM0Mzs1MjksMzYgQEAgYnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2EKIAlyZXR1cm4gdG5vZGVzOwogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgYXJlbmEgYmFzZSBhZ2FpbnN0IHdoaWNoIHNhdmVfYXJncygpIGNvbnZlcnRzIHRoZSBhcmd1bWVudHMgbWFya2VkCiYjNDM7ICogd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRy4gT25seSB0aGUgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lCiYjNDM7ICogY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUgcHJvZyB3aG9zZSBhcmVuYSBpcyBrbm93biBhdAomIzQzOyAqIGdlbmVyYXRpb24gdGltZS4gUmV0dXJuIDAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbnZlcnQuCiYjNDM7ICovCiYjNDM7dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwKJiM0MzsJCQkgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIShmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgfHwKJiM0MzsJICAgIHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ucl9ub2RlcyAhPSAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBtLSZndDtucl9hcmdzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CWlmIChpID09IG0tJmd0O25yX2FyZ3MpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogVmVyaWZpY2F0aW9uIHJlamVjdHMgYW4gYXJlbmEgYXJndW1lbnQgd2l0aG91dCBhbiBhcmVuYS4gKi8KJiM0MzsJcHJvZyA9IHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ub2Rlc1swXS0mZ3Q7bGluay0mZ3Q7cHJvZzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghcHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChwcm9nLSZndDthdXgtJmd0O2FyZW5hKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSkKIHsKIAlicGZfaW1hZ2Vfa3N5bV9kZWwoJmFtcDtpbS0mZ3Q7a3N5bSk7CkBAIC05MjAsNiAmIzQzOzk1MCwxMyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwKIAlpbnQgY250ID0gMCwgaTsKIAogCWtpbmQgPSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAobm9kZS0mZ3Q7bGluay0mZ3Q7cHJvZyk7CiYjNDM7CS8qCiYjNDM7CSAqIEFyZW5hIGN0eCBhcmdzIGFyZSBjb252ZXJ0ZWQgb25seSBieSBzdHJ1Y3Rfb3BzIGluZGlyZWN0CiYjNDM7CSAqIHRyYW1wb2xpbmVzLiBUaGV5IG11c3QgbmV2ZXIgYmUgYXR0YWNoZWQgdG8gYSBnZW5lcmljIHRyYW1wb2xpbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKG5vZGUtJmd0O2xpbmstJmd0O3Byb2cpKSkKJiM0MzsJCXJldHVybiAtRU5PVFNVUFA7CiYjNDM7CiAJaWYgKHRyLSZndDtleHRlbnNpb25fcHJvZykKIAkJLyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuCiAJCSAqIGNhbm5vdCBvdmVyd3JpdGUgZXh0ZW5zaW9uIHByb2cgZWl0aGVyLgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDA5NTg4YjdiMDhiMGEuLjgzZWRmNDFjN2ZlOWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTI4NDIsNyAmIzQzOzI4NDIsNyBAQCBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQomIzQzO3N0YXRpYyBpbnQgYWRkX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2cgPSBlbnYtJmd0O3N1YnByb2dfaW5mbzsKIAlpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuLCBleF9jYl9pbnNuOwpAQCAtMjg1NCw4ICYjNDM7Mjg1NCw3IEBAIHN0YXRpYyBpbnQgYWRkX3N1YnByb2dfYW5kX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCXJldHVybiByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgaW5zbl9jbnQ7IGkmIzQzOyYjNDM7LCBpbnNuJiM0MzsmIzQzOykgewotCQlpZiAoIWJwZl9wc2V1ZG9fZnVuYyhpbnNuKSAmYW1wOyZhbXA7ICFicGZfcHNldWRvX2NhbGwoaW5zbikgJmFtcDsmYW1wOwotCQkgICAgIWJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSkKJiM0MzsJCWlmICghYnBmX3BzZXVkb19mdW5jKGluc24pICZhbXA7JmFtcDsgIWJwZl9wc2V1ZG9fY2FsbChpbnNuKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghZW52LSZndDticGZfY2FwYWJsZSkgewpAQCAtMjg2MywxMSAmIzQzOzI4NjIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQogCi0JCWlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikgfHwgYnBmX3BzZXVkb19jYWxsKGluc24pKQotCQkJcmV0ID0gYWRkX3N1YnByb2coZW52LCBpICYjNDM7IGluc24tJmd0O2ltbSAmIzQzOyAxKTsKLQkJZWxzZQotCQkJcmV0ID0gYnBmX2FkZF9rZnVuY19jYWxsKGVudiwgaW5zbi0mZ3Q7aW1tLCBpbnNuLSZndDtvZmYpOwotCiYjNDM7CQlyZXQgPSBhZGRfc3VicHJvZyhlbnYsIGkgJiM0MzsgaW5zbi0mZ3Q7aW1tICYjNDM7IDEpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMjkwNSw2ICYjNDM7MjkwMCwyOCBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhZGRfa2Z1bmNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaTsKJiM0MzsJaW50IGksIHJldCwgaW5zbl9jbnQgPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFlbnYtJmd0O2JwZl9jYXBhYmxlKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7bG9hZGluZy9jYWxsaW5nIG90aGVyIGJwZiBvciBrZXJuZWwgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIGZvciBDQVBfQlBGIGFuZCBDQVBfU1lTX0FETUlOXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IGJwZl9hZGRfa2Z1bmNfY2FsbChlbnYsIGluc24tJmd0O2ltbSwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCWludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7CkBAIC0xMDg5Miw5ICYjNDM7MTA5MDksMTYgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGYKIAlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX3JlZmNvdW50ZWRfa3B0ciYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJCQljb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2FyZW5hX19udWxsYWJsZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbnVsbGFibGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiB7Ci0JcmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19udWxsYWJsZSYjMzQ7KTsKJiM0MzsJcmV0dXJuICFpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoYnRmLCBhcmcpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19udWxsYWJsZSYjMzQ7KTsKIH0KIAogc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX25vbm93bl9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKQpAQCAtMTA5MTIsNiAmIzQzOzEwOTM2LDEyIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0KIAlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX2lycV9mbGFnJiMzNDspOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FyZW5hKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShidGYsIGFyZykgfHwKJiM0MzsJICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19hcmVuYSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiAJCQkJCSAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLAogCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xMTEzMiw2ICYjNDM7MTExNjIsNyBAQCBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7CiAJS0ZfQVJHX1BUUl9UT19JUlFfRkxBRywKIAlLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssCiAJS0ZfQVJHX1BUUl9UT19UQVNLX1dPUkssCiYjNDM7CUtGX0FSR19QVFJfVE9fQVJFTkEsCiB9OwogCiBlbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7CkBAIC0xMTQxNyw3ICYjNDM7MTE0NDgsNiBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAogCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtJmd0O2J0ZiwgdC0mZ3Q7dHlwZSwgTlVMTCk7CiAJcmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtJmd0O2J0ZiwgcmVmX3QtJmd0O25hbWVfb2ZmKTsKIApAQCAtMTE0NjYsNyAmIzQzOzExNDk2LDI5IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiAJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOwogCWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQogCQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7Ci0JZWxzZSBpZiAoYXJnICYjNDM7IDEgJmx0OyBuYXJncyAmYW1wOyZhbXA7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkgewomIzQzOwkJaWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkgewomIzQzOwkJCXZlcmJvc2UoZW52LCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xuJiMzNDssCiYjNDM7CQkJCW1ldGEtJmd0O2Z1bmNfbmFtZSk7CiYjNDM7CQkJcmV0dXJuIC1FTk9UU1VQUDsKJiM0MzsJCX0KJiM0MzsJCWlmICghZW52LSZndDtwcm9nLSZndDthdXgtJmd0O2FyZW5hKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsCiYjNDM7CQkJCSYjMzQ7JXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXG4mIzM0OywKJiM0MzsJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChyZWdfZnJvbV9hcmdubyhhcmdubykgJmx0OyAwKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxuJiMzNDssCiYjNDM7CQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQkvKgomIzQzOwkJICogQm90aCBzdWZmaXhlcyBhY2NlcHQgYSBjb25zdGFudCB6ZXJvLiBUaGUgZnVuY3Rpb24gbW9kZWwgZGV0ZXJtaW5lcwomIzQzOwkJICogd2hldGhlciB0aGUgSklUIHJlYmFzZXMgaXQgdG8gdGhlIGFyZW5hIGJhc2Ugb3IgcHJlc2VydmVzIE5VTEwuCiYjNDM7CQkgKi8KJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19BUkVOQSB8IFBUUl9NQVlCRV9OVUxMOwomIzQzOwl9IGVsc2UgaWYgKGFyZyAmIzQzOyAxICZsdDsgbmFyZ3MgJmFtcDsmYW1wOwogCQkgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmcgJiM0MzsgMV0pIHx8CiAJCSAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSkpKSB7CiAJCWlmICghYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgJmFtcDsmYW1wOyAhYnRmX3R5cGVfaXNfc2NhbGFyKHJlZl90KSAmYW1wOyZhbXA7CkBAIC0xMjE2MCw3ICYjNDM7MTIyMTIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpOwogCiAJCWlmIChidGZfdHlwZV9pc19wdHIodCkgJmFtcDsmYW1wOyAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy0mZ3Q7dHlwZSkpICZhbXA7JmFtcDsKLQkJICAgICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbaV0pKSB7CiYjNDM7CQkgICAgIXR5cGVfbWF5X2JlX251bGwoa2ZfYXJnX3R5cGUpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgJXNcbiYjMzQ7LAogCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiAJCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTEyMjEzLDYgJiM0MzsxMjI2NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19JUlFfRkxBRzoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s6CiYjNDM7CQljYXNlIEtGX0FSR19QVFJfVE9fQVJFTkE6CiAJCQlicmVhazsKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0RZTlBUUjoKIAkJCWFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7CkBAIC0xMjI3OSw2ICYjNDM7MTIzMzIsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWUKIAkJCQltZXRhLSZndDtyZXRfYnRmX2lkICA9IHJldDsKIAkJCX0KIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBLRl9BUkdfUFRSX1RPX0FSRU5BOgomIzQzOwkJCWlmIChyZWctJmd0O3R5cGUgIT0gUFRSX1RPX0FSRU5BICZhbXA7JmFtcDsgcmVnLSZndDt0eXBlICE9IFNDQUxBUl9WQUxVRSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxuJiMzNDssCiYjNDM7CQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ6CiAJCQlpZiAocmVnLSZndDt0eXBlID09IChQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DKSkgewogCQkJCWlmICghaXNfYnBmX29ial9kcm9wX2tmdW5jKG1ldGEtJmd0O2Z1bmNfaWQpKSB7CkBAIC0xODgwOCwxMCAmIzQzOzE4ODY4LDIxIEBAIGludCBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJcmV0dXJuIHByb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvID8gMCA6IC1FTk9NRU07CiB9CiAKJiM0Mztib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcHJvZy0mZ3Q7YXV4LSZndDtjdHhfYXJnX2luZm9fc2l6ZTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoYmFzZV90eXBlKHByb2ctJmd0O2F1eC0mZ3Q7Y3R4X2FyZ19pbmZvW2ldLnJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqZnVuY19wcm90bzsKIAljb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2M7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87CiAJY29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHM7CiAJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjsKIAlzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtJmd0O3Byb2c7CkBAIC0xODg5MCwxMCAmIzQzOzE4OTYxLDIzIEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IHN0X29wc19kZXNjLSZndDthcmdfaW5mb1ttZW1iZXJfaWR4XS5jbnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChzdF9vcHNfZGVzYy0mZ3Q7YXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mb1tpXS5yZWZjb3VudGVkKSB7CiYjNDM7CWFyZ19pbmZvID0gJmFtcDtzdF9vcHNfZGVzYy0mZ3Q7YXJnX2luZm9bbWVtYmVyX2lkeF07CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBhcmdfaW5mby0mZ3Q7Y250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbyA9ICZhbXA7YXJnX2luZm8tJmd0O2luZm9baV07CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7cmVmY291bnRlZCkKIAkJCWhhc19yZWZjb3VudGVkX2FyZyA9IHRydWU7Ci0JCQlicmVhazsKJiM0MzsJCWlmIChiYXNlX3R5cGUoaW5mby0mZ3Q7cmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkgewomIzQzOwkJCWlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXG4mIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAtRU5PVFNVUFA7CiYjNDM7CQkJfQomIzQzOwkJCWlmICghcHJvZy0mZ3Q7YXV4LSZndDthcmVuYSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwKJiM0MzsJCQkJCSYjMzQ7YXJlbmEgYXJndW1lbnQgb2YgJXMgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxuJiMzNDssCiYjNDM7CQkJCQltbmFtZSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KIAkJfQogCX0KIApAQCAtMTg5MTQsOCAmIzQzOzE4OTk4LDcgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2Z1bmNfbmFtZSA9IG1uYW1lOwogCWVudi0mZ3Q7b3BzID0gc3Rfb3BzLSZndDt2ZXJpZmllcl9vcHM7CiAKLQlyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgc3Rfb3BzX2Rlc2MtJmd0O2FyZ19pbmZvW21lbWJlcl9pZHhdLmluZm8sCi0JCQkJCSAgc3Rfb3BzX2Rlc2MtJmd0O2FyZ19pbmZvW21lbWJlcl9pZHhdLmNudCk7CiYjNDM7CXJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBhcmdfaW5mby0mZ3Q7aW5mbywgYXJnX2luZm8tJmd0O2NudCk7CiB9CiAjZGVmaW5lIFNFQ1VSSVRZX1BSRUZJWCAmIzM0O3NlY3VyaXR5XyYjMzQ7CiAKQEAgLTE5MTc5LDYgJiM0MzsxOTI2MiwxNyBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywKIAkJCWJwZl9sb2cobG9nLCAmIzM0O1N1YnByb2cgJXMgZG9lc24mIzM5O3QgZXhpc3RcbiYjMzQ7LCB0bmFtZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIEEgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lIGNvbnZlcnRzIGFyZW5hIGFyZ3VtZW50cwomIzQzOwkJICogYmVmb3JlIGludm9raW5nIGl0cyBwcm9ncmFtLiBBIHRyYWNpbmcgcHJvZ3JhbSBhdHRhY2hlZCB0byB0aGUKJiM0MzsJCSAqIG1haW4gcHJvZ3JhbSB3b3VsZCBzZWUgdGhlIGNvbnZlcnRlZCBvZmZzZXQgYXMgYSByZWd1bGFyIEJURgomIzQzOwkJICogcG9pbnRlci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHByb2dfdHJhY2luZyAmYW1wOyZhbXA7IHN1YnByb2cgPT0gMCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcodGd0X3Byb2cpKSB7CiYjNDM7CQkJYnBmX2xvZyhsb2csICYjMzQ7Q2Fubm90IHRyYWNlIGEgdGFyZ2V0IHdpdGggYXJlbmEgY29udGV4dCBhcmd1bWVudHNcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQl9CiAJCWlmIChhdXgtJmd0O2Z1bmMgJmFtcDsmYW1wOyBhdXgtJmd0O2Z1bmNbc3VicHJvZ10tJmd0O2F1eC0mZ3Q7ZXhjZXB0aW9uX2NiKSB7CiAJCQlicGZfbG9nKGxvZywKIAkJCQkmIzM0OyVzIHByb2dyYW1zIGNhbm5vdCBhdHRhY2ggdG8gZXhjZXB0aW9uIGNhbGxiYWNrXG4mIzM0OywKQEAgLTIwMjY5LDExICYjNDM7MjAzNjMsMTMgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsCiAJCUlOSVRfTElTVF9IRUFEKCZhbXA7ZW52LSZndDtleHBsb3JlZF9zdGF0ZXNbaV0pOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZW52LSZndDtmcmVlX2xpc3QpOwogCi0JcmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpOwomIzQzOwkvKiBQcmVwYXJlIEJURiBhbmQgZnVuY19pbmZvIG5lZWRlZCB0byBkaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMuICovCiYjNDM7CXJldCA9IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIHNraXBfZnVsbF9jaGVjazsKIAotCXJldCA9IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhlbnYpOwomIzQzOwkvKiBEaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMgYmVmb3JlIHZhbGlkYXRpbmcgdGhlaXIgbGF5b3V0IGFuZCBCVEYuICovCiYjNDM7CXJldCA9IGFkZF9zdWJwcm9ncyhlbnYpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIHNraXBfZnVsbF9jaGVjazsKIApAQCAtMjAyODEsMTQgJiM0MzsyMDM3NywyMSBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBza2lwX2Z1bGxfY2hlY2s7CiAKJiM0MzsJLyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi8KIAlyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gc2tpcF9mdWxsX2NoZWNrOwogCiYjNDM7CS8qIFZhbGlkYXRlIGluc3RydWN0aW9ucyBhbmQgcmVzb2x2ZSB0aGUgcHJvZ3JhbSYjMzk7cyByZWZlcmVuY2VkIHJlc291cmNlcy4gKi8KIAlyZXQgPSBjaGVja19hbmRfcmVzb2x2ZV9pbnNucyhlbnYpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIHNraXBfZnVsbF9jaGVjazsKIAomIzQzOwkvKiBCdWlsZCBrZnVuYyBwcm90b3R5cGVzIGFmdGVyIHJlc29sdmluZyBwcm9ncmFtIHJlc291cmNlcy4gKi8KJiM0MzsJcmV0ID0gYWRkX2tmdW5jcyhlbnYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gc2tpcF9mdWxsX2NoZWNrOwomIzQzOwogCWlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LSZndDtwcm9nLSZndDthdXgpKSB7CiAJCXJldCA9IGJwZl9wcm9nX29mZmxvYWRfdmVyaWZpZXJfcHJlcChlbnYtJmd0O3Byb2cpOwogCQlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zMjNkNzA3YzU0M2ZhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKQEAgLTAsMCAmIzQzOzEsNzQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7c3RydWN0X29wc19hcmVuYS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsvKgomIzQzOyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlCiYjNDM7ICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXJlbmFfYXJnKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwomIzQzOwlzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9tYXBfX2F0dGFjaF9zdHJ1Y3Rfb3BzKHNrZWwtJmd0O21hcHMudGVzdG1vZF9hcmVuYSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaF9zdHJ1Y3Rfb3BzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnRyaWdnZXIpLAomIzQzOwkJCQkgICAgICZhbXA7dG9wdHMpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuJiMzNDspOwomIzQzOwlBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O3RyaWdnZXJfcmV0dmFsJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CXN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBwcm9ncmFtIHdpdGggbm8gYXJlbmEgY2Fubm90IGF0dGFjaCB0byBhIG1lbWJlciB3aXRoIGFuIF9fYXJlbmEKJiM0MzsgKiBhcmd1bWVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhcmVuYV9hcmdfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHN0cnVjdF9vcHNfYXJlbmFfZmFpbCAqc2tlbDsKJiM0MzsKJiM0MzsJc2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaAomIzQzOyAqIHRlc3Rfc3RydWN0X29wc19wcml2YXRlX3N0YWNrIGFsc28gYXR0YWNoZXM7IHJlZ2lzdGVyaW5nIGl0IHR3aWNlIGZhaWxzCiYjNDM7ICogd2l0aCAtRUVYSVNULgomIzQzOyAqLwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LgomIzQzOwkgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYQomIzQzOwkgKiBhcmd1bWVudHMmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuCiYjNDM7CSAqLwomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnJiMzNDspKQomIzQzOwkJYXJlbmFfYXJnKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnX2ZhaWwmIzM0OykpCiYjNDM7CQlhcmVuYV9hcmdfZmFpbCgpOwomIzQzOyNlbHNlCiYjNDM7CXRlc3RfX3NraXAoKTsKJiM0MzsjZW5kaWYKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCBiNzliYWZjYTY4ZjdhLi4xMTBhMzNiNmUxYzI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTIsNiAmIzQzOzIsOCBAQAogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDthcmVuYV9rZnVuYy5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YXJlbmFfa2Z1bmNfaml0LnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2NhcF9oZWxwZXJzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9hbGlnbi5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9hbmQuc2tlbC5oJiMzNDsKQEAgLTE2MSw2ICYjNDM7MTYzLDE1IEBAIHN0YXRpYyB2b2lkIHJ1bl90ZXN0c19hdXgoY29uc3QgY2hhciAqc2tlbF9uYW1lLAogCiAjZGVmaW5lIFJVTihza2VsKSBydW5fdGVzdHNfYXV4KCNza2VsLCBza2VsIyNfX2VsZl9ieXRlcywgTlVMTCkKIAomIzQzOy8qCiYjNDM7ICogVGhlIHRlc3Qga2Z1bmNzIGxpdmUgaW4gYnBmX3Rlc3Rtb2QuIFJlc29sdmluZyBrZnVuY3MgYWdhaW5zdCBtb2R1bGUKJiM0MzsgKiBCVEZzIG5lZWRzIENBUF9TWVNfQURNSU4sIHNvIHJ1biB3aXRoIGZ1bGwgY2FwYWJpbGl0aWVzIGluc3RlYWQgb2YKJiM0MzsgKiB0aHJvdWdoIHRoZSB2ZXJpZmllciB0ZXN0cyYjMzk7IGNhcGFiaWxpdHktcmVzdHJpY3RlZCBydW5uZXIuCiYjNDM7ICovCiYjNDM7dm9pZCB0ZXN0X2FyZW5hX2tmdW5jKHZvaWQpICAgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKGFyZW5hX2tmdW5jKTsgfQomIzQzOwomIzQzO3ZvaWQgdGVzdF9hcmVuYV9rZnVuY19qaXQodm9pZCkgICAgICAgICAgICAgICB7IFJVTl9URVNUUyhhcmVuYV9rZnVuY19qaXQpOyB9CiYjNDM7CiB2b2lkIHRlc3RfdmVyaWZpZXJfYWxpZ24odm9pZCkgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYWxpZ24pOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfYW5kKHZvaWQpICAgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYW5kKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2FyZW5hKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2FyZW5hKTsgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNmMzODJjZTgxYWY2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMKQEAgLTAsMCAmIzQzOzEsMjYwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFUwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CS8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFsLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovCiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9jY3VwaWVzIHBhZ2UgMCBzbyBubyBhbGxvY2F0aW9uIGxhbmRzIGF0IGFyZW5hIG9mZnNldCAwLCB3aGljaCB0aGUKJiM0MzsgKiBudWxsYWJsZSB0ZXN0cyBiZWxvdyBtdXN0IGJlIGFibGUgdG8gdGVsbCBhcGFydCBmcm9tIE5VTEwuCiYjNDM7ICovCiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfcGFkOwomIzQzOwomIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqLwomIzQzO3ZvbGF0aWxlIHU2NCBzdGFzaDsKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO2ludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsJdTY0IHJldDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CS8qIFBUUl9UT19BUkVOQSBhcmd1bWVudCAqLwomIzQzOwkqdmFsID0gNDE7CiYjNDM7CXJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CS8qIHRoZSBsb3cgMzIgYml0cyBhcyBhIHNjYWxhciAqLwomIzQzOwlzdGFzaCA9ICh1MzIpKHU2NCl2YWw7CiYjNDM7CXJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpOwomIzQzOwlpZiAocmV0ICE9IDQyIHx8ICp2YWwgIT0gNDMpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJLyogdGhlIGZ1bGwgdXNlciBhZGRyZXNzIGFzIGEgc2NhbGFyICovCiYjNDM7CXN0YXNoID0gKHU2NCl2YWw7CiYjNDM7CWJwZl9hZGRyX3NwYWNlX2Nhc3Qoc3Rhc2gsIDEsIDApOwomIzQzOwlyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTsKJiM0MzsJaWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KQomIzQzOwkJcmV0dXJuIDQ7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQaW4gdGhlIHJlYmFzZSBzZW1hbnRpY3MgdXNpbmcgdGhlIGNhcHR1cmUga2Z1bmNzLCB3aGljaCByZXR1cm4gdGhlIHJhdwomIzQzOyAqIGFyZ3VtZW50IHZhbHVlOiBfX2FyZW5hIHJlYmFzZXMgdW5jb25kaXRpb25hbGx5LCBzbyB6ZXJvIGxvdyAzMiBiaXRzCiYjNDM7ICogYXJyaXZlIGFzIHRoZSBhcmVuYSBrZXJuZWwgYmFzZSwgd2hpbGUgX19hcmVuYV9fbnVsbGFibGUgdHVybnMgdGhlbSBpbnRvCiYjNDM7ICogTlVMTC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO2ludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CXU2NCBiYXNlLCBvZmY7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwliYXNlID0gYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KE5VTEwpOwomIzQzOwlpZiAoIWJhc2UpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJLyogb25seSB0aGUgbG93IDMyIGJpdHMgY29udHJpYnV0ZSAqLwomIzQzOwlzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpICE9IGJhc2UpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJb2ZmID0gKHUzMikodTY0KXZhbDsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICYjNDM7IG9mZikKJiM0MzsJCXJldHVybiA0OwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KE5VTEwpICE9IDApCiYjNDM7CQlyZXR1cm4gNTsKJiM0MzsKJiM0MzsJc3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSAwKQomIzQzOwkJcmV0dXJuIDY7CiYjNDM7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSAmIzQzOyBvZmYpCiYjNDM7CQlyZXR1cm4gNzsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO2ludCBhcmVuYV9hcmdfbnVsbGFibGUodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsJdTY0IHJldDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CSp2YWwgPSA0MTsKJiM0MzsJcmV0ID0gYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0ICE9IDQxIHx8ICp2YWwgIT0gNDIpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChOVUxMKSAhPSAweGRlYWRiZWVmKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXZhbFswXSA9IDE7CiYjNDM7CXZhbFsxXSA9IDI7CiYjNDM7CXZhbFsyXSA9IDQ7CiYjNDM7CXZhbFszXSA9IDg7CiYjNDM7CXZhbFs0XSA9IDE2OwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKSZhbXA7dmFsWzBdLCAodTY0ICopJmFtcDt2YWxbMV0sCiYjNDM7CQkJCSAgICAgICAodTY0ICopJmFtcDt2YWxbMl0sICh1NjQgKikmYW1wO3ZhbFszXSwKJiM0MzsJCQkJICAgICAgICh1NjQgKikmYW1wO3ZhbFs0XSkgIT0gMzEpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJaWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKikmYW1wO3ZhbFswXSwgKHU2NCAqKSZhbXA7dmFsWzFdLAomIzQzOwkJCQkgICAgICAgKHU2NCAqKSZhbXA7dmFsWzJdLCAodTY0ICopJmFtcDt2YWxbM10sIE5VTEwpICE9IDE1KQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpCiYjNDM7CXU2NCBfX2FyZW5hICp2YWw7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwl2YWxbMF0gPSA3OwomIzQzOwl2YWxbMV0gPSA1OwomIzQzOwomIzQzOwlpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKSZhbXA7dmFsWzBdLCBOVUxMKSAhPSA3KQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CWlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopJmFtcDt2YWxbMF0sICh1NjQgKikmYW1wO3ZhbFsxXSkgIT0gMTIpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqLwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKQomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJc3Rhc2ggPSAodTY0KXZhbCAmIzQzOyBQQUdFX1NJWkU7CiYjNDM7CWJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpOwomIzQzOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7YXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hJiMzNDspCiYjNDM7aW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKTEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhciYjMzQ7KQomIzQzO2ludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1NjQgYnVmID0gMDsKJiM0MzsKJiM0MzsJLyogdXNlIHRoZSBhcmVuYSBzbyB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGFyZW5hIHByZXNlbmNlIGNoZWNrICovCiYjNDM7CWJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoJmFtcDtidWYpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpICZhbXA7JmFtcDsgXAomIzQzOwlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50JiMzNDspCiYjNDM7aW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KDEsIDIsIDMsIDQsIDUsICh1NjQgKikxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7YXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5YjkxODY2MjYxNjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKQEAgLTAsMCAmIzQzOzEsOTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB0aGUgSklULWVtaXR0ZWQgcmViYXNlIHNlcXVlbmNlcyBmb3IgX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUKJiM0MzsgKiBrZnVuYyBhcmd1bWVudHMuIFRoZSBjYXB0dXJlIGtmdW5jcyB0YWtlIHRoZSBhcmd1bWVudCB3aXRob3V0CiYjNDM7ICogZGVyZWZlcmVuY2luZyBpdCwgc28gdGhlc2UgdGVzdHMgcGluIG9ubHkgdGhlIGVtaXR0ZWQgY29kZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IGFyZW5hIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzOy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqLwomIzQzO3ZvbGF0aWxlIHU2NCBzdGFzaDsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJdGVzdGwJJWVkaSwgJWVkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJamUJTDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtMMDoJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3Rhc2ggPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92bAklZWRpLCAlZWRpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyZGkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJWVzaSwgJWVzaSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcnNpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3ZsCSVlZHgsICVlZHgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkeCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92bAklZWN4LCAlZWN4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyY3gmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdmwJJXI4ZCwgJXI4ZCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJdGVzdGwJJXI4ZCwgJXI4ZCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJamUJTDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXI4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O0wwOgljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1NjQgX19hcmVuYSAqdmFsOwomIzQzOwomIzQzOwl2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJdmFsWzBdID0gMTsKJiM0MzsJdmFsWzFdID0gMjsKJiM0MzsJdmFsWzJdID0gNDsKJiM0MzsJdmFsWzNdID0gODsKJiM0MzsJdmFsWzRdID0gMTY7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKikmYW1wO3ZhbFswXSwgKHU2NCAqKSZhbXA7dmFsWzFdLAomIzQzOwkJCQkgICAodTY0ICopJmFtcDt2YWxbMl0sICh1NjQgKikmYW1wO3ZhbFszXSwKJiM0MzsJCQkJICAgKHU2NCAqKSZhbXA7dmFsWzRdKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCAqLwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmJhMDRjNzNkOGQ5NjcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCkBAIC0wLDAgJiM0MzsxLDExNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOwomIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVMKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZl9hcmVuYV9jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwkvKiBwYWdlIDAgaG9zdHMgdGhlIGFyZW5hIGdsb2JhbHMsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi8KJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0Mzt9IGFyZW5hIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzOy8qIGFsc28gYXNzb2NpYXRlcyB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGFyZW5hICovCiYjNDM7dTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7CiYjNDM7LyogcmF3IHZhbHVlIG9mIHRoZSBsYXN0IF9fYXJlbmEgY3R4IGFyZ3VtZW50LCBjYXB0dXJlZCBieSB0ZXN0X2FyZW5hX2NiICovCiYjNDM7dTY0IF9fYXJlbmEgY2JfcHRyX3ZhbDsKJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmEmIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMF07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJY2JfcHRyX3ZhbCA9IGN0eFswXTsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYV9udWxsYWJsZSYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX251bGxhYmxlX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTsKJiM0MzsKJiM0MzsJYXJlbmFfdG91Y2gmIzQzOyYjNDM7OwomIzQzOwlpZiAoIXB0cikKJiM0MzsJCXJldHVybiAweGJlZTsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYV9zdGFjayYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFs4XTsKJiM0MzsKJiM0MzsJYXJlbmFfdG91Y2gmIzQzOyYjNDM7OwomIzQzOwkvKiBwaW4gdGhlIHNsb3QgbGF5b3V0OiB0aGUgbGVhZGluZyBhcmdzIGZpbGwgY3R4WzBdLi5jdHhbN10gKi8KJiM0MzsJaWYgKGN0eFswXSAhPSAxIHx8IGN0eFs3XSAhPSA4KQomIzQzOwkJcmV0dXJuIDB4YmFkOwomIzQzOwkqcHRyICYjNDM7PSAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMubGluayYjMzQ7KQomIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7CiYjNDM7CS50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLAomIzQzOwkudGVzdF9hcmVuYV9udWxsYWJsZSA9ICh2b2lkICopdGVzdF9hcmVuYV9udWxsYWJsZV9jYiwKJiM0MzsJLnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsCiYjNDM7fTsKJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IHRyaWdnZXIodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkKJiM0MzsJdTY0IF9fYXJlbmEgKnZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CSp2YWwgPSA0MTsKJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoKHU2NCAqKXZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJaWYgKCp2YWwgIT0gNDIpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNhbGxiYWNrIG11c3QgaGF2ZSBzZWVuIGV4YWN0bHkgKHUzMikoa2FkZHIgLSBrZXJuX3ZtX3N0YXJ0KSwKJiM0MzsJICogd2hpY2ggaXMgdGhlIGFyZW5hIG9mZnNldCBvZiB2YWwgd2l0aCB0aGUgdXBwZXIgMzIgYml0cyBjbGVhci4KJiM0MzsJICovCiYjNDM7CWlmIChjYl9wdHJfdmFsICE9ICh1MzIpKHU2NCl2YWwpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoKHU2NCAqKXZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gNTsKJiM0MzsJaWYgKCp2YWwgIT0gNDMpCiYjNDM7CQlyZXR1cm4gNjsKJiM0MzsKJiM0MzsJLyogTlVMTCBzdXJ2aXZlcyB0aGUgbnVsbGFibGUga2Z1bmMgYW5kIHRoZSB0cmFtcG9saW5lIGFzIE5VTEwgKi8KJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoTlVMTCk7CiYjNDM7CWlmIChyZXQgIT0gMHhiZWUpCiYjNDM7CQlyZXR1cm4gNzsKJiM0MzsKJiM0MzsJLyogdGhlIGFyZW5hIHBvaW50ZXIgaXMgc3RhY2stcGFzc2VkIGludG8gdGhlIHRyYW1wb2xpbmUgaGVyZSAqLwomIzQzOwlyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaygodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiA4OwomIzQzOwlpZiAoKnZhbCAhPSA0NCkKJiM0MzsJCXJldHVybiA5OwomIzQzOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjFjMGVjNzI3ZDYzNzQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYV9mYWlsLmMKQEAgLTAsMCAmIzQzOzEsMjAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzOy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqLwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYSYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX25vX2FyZW5hKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmsmIzM0OykKJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hX2ZhaWwgPSB7CiYjNDM7CS50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX25vX2FyZW5hLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwppbmRleCBlYjBmOWI1ZTE4ZDg1Li4yOTYzYzI5Zjk2YmE1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKQEAgLTIzNyw2ICYjNDM7MjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpCiB7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXU2NCBvbGQ7CiYjNDM7CiYjNDM7CW9sZCA9ICp2YWxfX2FyZW5hOwomIzQzOwkqdmFsX19hcmVuYSA9IG9sZCAmIzQzOyAxOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpCiYjNDM7ewomIzQzOwl1NjQgb2xkOwomIzQzOwomIzQzOwlpZiAoIXZhbF9fYXJlbmFfX251bGxhYmxlKQomIzQzOwkJcmV0dXJuIDB4ZGVhZGJlZWY7CiYjNDM7CiYjNDM7CW9sZCA9ICp2YWxfX2FyZW5hX19udWxsYWJsZTsKJiM0MzsJKnZhbF9fYXJlbmFfX251bGxhYmxlID0gb2xkICYjNDM7IDE7CiYjNDM7CXJldHVybiBvbGQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1NjQpdmFsX19hcmVuYTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1NjQpdmFsX19hcmVuYV9fbnVsbGFibGU7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hLAomIzQzOwkJCQkJICAgdTY0ICpjX19hcmVuYSwgdTY0ICpkX19hcmVuYSwKJiM0MzsJCQkJCSAgIHU2NCAqZV9fYXJlbmFfX251bGxhYmxlKQomIzQzO3sKJiM0MzsJcmV0dXJuICphX19hcmVuYSAmIzQzOyAqYl9fYXJlbmEgJiM0MzsgKmNfX2FyZW5hICYjNDM7ICpkX19hcmVuYSAmIzQzOwomIzQzOwkgICAgICAgKGVfX2FyZW5hX19udWxsYWJsZSA/ICplX19hcmVuYV9fbnVsbGFibGUgOiAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdCh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsCiYjNDM7CQkJCQkJdTY0ICpmX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiBhICYjNDM7IGIgJiM0MzsgYyAmIzQzOyBkICYjNDM7IGUgJiM0MzsgKmZfX2FyZW5hOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gKmFfX2FyZW5hICYjNDM7IChiX19hcmVuYV9fbnVsbGFibGUgPyAqYl9fYXJlbmFfX251bGxhYmxlIDogMCk7CiYjNDM7fQomIzQzOwogX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfZHlucHRyX3Rlc3Qoc3RydWN0IGJwZl9keW5wdHIgKnB0ciwKIAkJCQkgICAgICAgc3RydWN0IGJwZl9keW5wdHIgKnB0cl9fbnVsbGFibGUpCiB7CkBAIC0zNDcsOSAmIzQzOzM5NywyOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX3Rlc3RfNCh2b2lkKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hKHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsCiYjNDM7CQkJCQkgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCwKJiM0MzsJCQkJCSAgICAgIHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7CiAJLnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMywKIAkudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LAomIzQzOwkudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsCiYjNDM7CS50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSwKJiM0MzsJLnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLAogfTsKIAogc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKQpAQCAtMzY4LDYgJiM0Mzs0MzgsMjEgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKHZvaWQpCiAJc3Rfb3BzMy0mZ3Q7dGVzdF8yKCk7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmEocHRyX19hcmVuYSk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSh1NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfbnVsbGFibGUocHRyX19hcmVuYV9fbnVsbGFibGUpOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2sodTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7CiYjNDM7fQomIzQzOwogc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHsKIAlpbnQgYTsKIH07CkBAIC03NTUsNiAmIzQzOzg0MCwxMyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX3ZhbHVlKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jb21tb25fdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19uZXN0ZWRfYWNxdWlyZV9ub256ZXJvX29mZnNldF90ZXN0LCBLRl9BQ1FVSVJFKQpAQCAtNzcwLDYgJiM0Mzs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX2N0eF9yZWxlYXNlLCBLRl9SRUxFQVNFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzEpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMikKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaykKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpOwogQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCmluZGV4IDg2M2ZkMTBmMTYxOTkuLjMzZjJhZjViNzA4NTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaApAQCAtMTA2LDYgJiM0MzsxMDYsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIgewogc3RydWN0IGJwZl90ZXN0bW9kX29wczMgewogCWludCAoKnRlc3RfMSkodm9pZCk7CiAJaW50ICgqdGVzdF8yKSh2b2lkKTsKJiM0MzsJLyogVXNlZCB0byB0ZXN0IGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzLiAqLwomIzQzOwlpbnQgKCp0ZXN0X2FyZW5hKSh1NjQgKnB0cik7CiYjNDM7CWludCAoKnRlc3RfYXJlbmFfbnVsbGFibGUpKHU2NCAqcHRyKTsKJiM0MzsJLyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi8KJiM0MzsJaW50ICgqdGVzdF9hcmVuYV9zdGFjaykodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLCB1NjQgZiwKJiM0MzsJCQkJdTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7CiB9OwogCiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3MgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKaW5kZXggYzM2YmI5MTFkZWZhNy4uZGM3YzQwYmQxMjk5MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCkBAIC05OCw2ICYjNDM7OTgsMTYgQEAgdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlbGVhc2Uoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTsKIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWYoc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnApIF9fa3N5bTsKIAogdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X21lbV9sZW5fcGFzczEodm9pZCAqbWVtLCBpbnQgbGVuKSBfX2tzeW07CiYjNDM7X191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KF9fdTY0ICp2YWxfX2FyZW5hKSBfX2tzeW07CiYjNDM7X191NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KF9fdTY0ICp2YWxfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTsKJiM0MztfX3U2NCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYSwKJiM0MzsJCQkJIF9fdTY0ICpjX19hcmVuYSwgX191NjQgKmRfX2FyZW5hLAomIzQzOwkJCQkgX191NjQgKmVfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdChfX3U2NCBhLCBfX3U2NCBiLCBfX3U2NCBjLCBfX3U2NCBkLCBfX3U2NCBlLAomIzQzOwkJCQkgICAgIF9fdTY0ICpmX19hcmVuYSkgX19rc3ltOwomIzQzO19fdTY0IGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwogaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2dldF9yZHdyX21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkd3JfYnVmX3NpemUpIF9fa3N5bTsKIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltOwogaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07CkBAIC0xMTEsNiAmIzQzOzEyMSw5IEBAIHUzMiBicGZfa2Z1bmNfY2FsbF90ZXN0X3N0YXRpY191bnVzZWRfYXJnKHUzMiBhcmcsIHUzMiB1bnVzZWQpIF9fa3N5bTsKICNlbmRpZgogCiB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwomIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwogCiBfX3U2NCBicGZfa2Z1bmNfY2FsbF90ZXN0MShzdHJ1Y3Qgc29jayAqc2ssIF9fdTMyIGEsIF9fdTY0IGIsCiAJCQkJX191MzIgYywgX191NjQgZCkgX19rc3ltOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAwMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgUG9pbnRlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9fbnVsbGFibGVgIGFubm90YXRpb25zIHRvIEJQRiBrZnVuY3MgYW5kIGBzdHJ1Y3Rfb3BzYCwgd2hpY2ggaXMgcHJldHR5IGludGVyZXN0aW5nLiBJdCYjMzk7cyB0b3VjaGluZyB0aGUgeDg2IEJQRiBKSVQsIHBsdXMgc29tZSBjb3JlIEJQRiBjb21wb25lbnRzIGxpa2UgdGhlIHZlcmlmaWVyLCBCVEYgaGFuZGxpbmcsIHN0cnVjdCBvcHMsIGFuZCBldmVuIHRoZSB0cmFtcG9saW5lIGxvZ2ljLiBHaXZlbiB0aGUgdmVyaWZpZXIgYW5kIEpJVCBhcmUgaW52b2x2ZWQsIHRoaXMgYWJzb2x1dGVseSBzY3JlYW1zIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGtleSBzeW1ib2xzIGltcGFjdGVkLiBJJiMzOTttIHNlZWluZyBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgYWNyb3NzIGEgcmFuZ2Ugb2YgZnVuY3Rpb25zIOKAkyBzb21lIHN0YXRpYywgc29tZSBnbG9iYWwuIFRoZSBzdGF0aWMgb25lcyBhcmUgbGVzcyBvZiBhIGRpcmVjdCBjb25jZXJuIGluaXRpYWxseSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbm9uLXN0YXRpYyBvbmVzOiBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBgc2F2ZV9hcmdzYCwgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGBicGZfdHJhbXBfYXJlbmFfYmFzZWAsIGBwcmVwYXJlX2FyZ19pbmZvYCwgYGJ0Zl9jdHhfYWNjZXNzYCwgYF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3NgLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBicGZfcHJlcGFyZV9idGZfaW5mb2AsIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYWRkX3N1YnByb2dzYCwgYGFkZF9rZnVuY3NgLCBgaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlYCwgYGlzX2tmdW5jX2FyZ19hcmVuYWAsIGBnZXRfa2Z1bmNfYXJnX3R5cGVgLCBgY2hlY2tfa2Z1bmNfYXJnc2AsIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AsIGBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZGAsIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGAsIGBicGZfY2hlY2tgCgpJJiMzOTttIHRoaW5raW5nIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBhbnl0aGluZyB0aGF0JiMzOTtzIGEgcG90ZW50aWFsIGJvdW5kYXJ5IG9yIGludGVyYWN0aW9uIHBvaW50LiBJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgY2FuZGlkYXRlczogYGJwZl90cmFtcF9hcmVuYV9iYXNlYCwgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCwgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AuIExldCYjMzk7cyB0aHJvdyBpbiBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgYnRmX2N0eF9hY2Nlc3NgIGJlY2F1c2UgdGhlc2UgYXJlIGludm9sdmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxscyB0byBgcHJlcGFyZV9hcmdfaW5mb2AgaW4gYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAsIHRvby4KCldhaXQsIGBicGZfY2hlY2tgIGlzIHdheSB0b28gYnJvYWQuIExldCYjMzk7cyBmaWx0ZXIgdGhhdCBvdXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAgaW4gYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AuIEkgd2lsbCBhbHNvIGNoZWNrIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AsIGBidGZfY3R4X2FjY2Vzc2AgaW4gYGtlcm5lbC9icGYvYnRmLmNgLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AgaW4gYGtlcm5lbC9icGYvYnRmLmNgLCBhbmQgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYAoKSSYjMzk7bSBnb2luZyB0byB3b3JrIHdpdGggYGJwZl90cmFtcF9hcmVuYV9iYXNlYCwgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCwgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYCwgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gZ3VpZGUgbXkgdGVzdGluZyBhbmQgZGV0ZXJtaW5lIHdoYXQgdGhlIHBhdGNoIGFjdGl2YXRlcy4gYGtlcm5lbC9icGYvYCBwb2ludHMgdG8gYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoZSBKSVQgcGFydCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCB1c2VzIGBDT05GSUdfQlBGX0pJVGAuIFRoZSBgc3RydWN0X29wc2Agc2lkZSBpcyBsaWtlbHkgdW5kZXIgYm90aCBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQlBGX0pJVCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQlBGX0pJVGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgcGFydGljdWxhcmx5IHRoZSB4ODYgb25lLCBnaXZlbiB0aGlzIGlzIGxpa2VseSB4ODYgcmVsYXRlZC4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBvcHRpb24sIGFsb25nc2lkZSBvdGhlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGF0IGZpbGUgY2xvc2VseSB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IHJlbGV2YW50IHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkxvY2F0aW5nIHRoZSBSZWxldmFudCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBhcmUgbG9jYXRlZCwgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGV5JiMzOTtsbCBiZSBpbiBvbmUgb2YgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIHByZXR0eSB3ZWxsLW9yZ2FuaXplZCwgc28gdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgYXJlIGBrZXJuZWwvYnBmL0tjb25maWdgIChzaW5jZSB0aGlzIGlzIEJQRi1yZWxhdGVkKSBvciBwb3NzaWJseSBgbmV0L0tjb25maWdgIChiZWNhdXNlIEJQRiBpcyBoZWF2aWx5IHVzZWQgaW4gbmV0d29ya2luZyBjb250ZXh0cykuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIGZpbGVzIGRpcmVjdGx5LiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBjb252ZW50aW9uLCBzbyBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IEkmIzM5O2xsIGZpbmQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZXJlLCBvciBhdCBsZWFzdCBiZSBwb2ludGVkIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODE2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSBuZWVkIGJvdGggYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGVuYWJsZWQuIFRoYXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkLCBnZW5lcmFsbHkgaW5kaWNhdGluZyB3ZSYjMzk7cmUgcGxhbm5pbmcgdG8gbGV2ZXJhZ2UgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhbmQsIG9mIGNvdXJzZSwgdGhlIEpJVCBjb21waWxlciBmb3IgQlBGIGJ5dGVjb2RlLiBNYWtlcyBzZW5zZS4gQnV0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBzdWJ0bHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgZmxhZ3MgcmVsYXRlZCB0byBgYnBmX2FyZW5hYC4gSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVsYXRlZCBrZXJuZWwgbW9kdWxlcyB0byBiZSBmdWxseSBpbmZvcm1lZCBiZWZvcmUgSSBwcm9jZWVkLiBEb24mIzM5O3Qgd2FudCB0byBnZXQgdHJpcHBlZCB1cCBieSBhIGhpZGRlbiBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfQVJFTkEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgQ29tcGlsYXRpb24qKgoKSG1tLCB0aGVyZSYjMzk7cyBubyBgQ09ORklHX0JQRl9BUkVOQWAgZGVmaW5lZC4gVGhhdCYjMzk7cyBhIGJpdCBvZGQ7IEkgY291bGQgaGF2ZSBzd29ybiBJJiMzOTtkIHNlZW4gaXQgc29tZXdoZXJlLiBXYWl0LCBob2xkIG9uLiBJcyBpdCBgQ09ORklHX0JQRl9FVkVOVFNgIGluc3RlYWQ/IFBlcmhhcHMgaXQmIzM5O3MgYSBuZXdlciwgbW9yZSBzdHJlYW1saW5lZCBvcHRpb24sIG9yIG1heWJlIGl0JiMzOTtzIHJlbGF0ZWQsIGp1c3QgbmFtZWQgZGlmZmVyZW50bHkuIFJpZ2h0LCBuZWVkIHRvIHZlcmlmeSB0aGF0LgoKVG8gZmlndXJlIG91dCBob3cgdGhlIGBicGZfc3RydWN0X29wcy5jYCBhbmQgYHRyYW1wb2xpbmUuY2AgZmlsZXMgYXJlIGJlaW5nIGhhbmRsZWQsIEkgc2hvdWxkIGV4YW1pbmUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IHRob3NlIHNwZWNpZmljIHNvdXJjZXMgYXJlIGJ1aWx0IGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIHRoZW0uIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSBob3cgdGhlIGRlcGVuZGVuY2llcyBhcmUgYXJyYW5nZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJ1Y3Rfb3BzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3N0cnVjdF9vcHMub1xua2VybmVsL2JwZi9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQlBGIFZlcmlmaWNhdGlvbiBhbmQgSklUIENvbXBpbGF0aW9uIENoZWNrKioKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UganVzdCBlbmFibGluZyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBzaG91bGQgZ2l2ZSBtZSBldmVyeXRoaW5nIEkgbmVlZCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBhbmQgaG9wZWZ1bGx5IHNpbXBsaWZpZXMgdGhpbmdzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgdHJhbXBvbGluZS5vYCBvYmplY3QgZmlsZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaXRzIHJvbGUgd2l0aGluIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFVuZGVyc3RhbmRpbmcgaXRzIGJ1aWxkIHByb2Nlc3Mgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byBob3cgdGhlIEJQRiB0cmFtcG9saW5lcyBhcmUgY3JlYXRlZCBhbmQgaW50ZWdyYXRlZCwgd2hpY2ggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFtcG9saW5lLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgYW5kIFRyYW1wb2xpbmVzKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfSklUYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGB0cmFtcG9saW5lLm9gIOKAkyB0aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gcmVtZW1iZXIuIE5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMuIEJhc2VkIG9uIG15IHF1aWNrIHNjYW4sIHRoZXNlIGFyZSB0aGUgb25lcyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb246CgoqICAgYGJwZl90cmFtcF9hcmVuYV9iYXNlYAoqICAgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYAoqICAgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYAoqICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AKKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYAoqICAgYGJ0Zl9jdHhfYWNjZXNzYAoqICAgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAKKiAgIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGAKCk5vdywgSSYjMzk7bSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIG9yIGdsb2JhbGx5IGFjY2Vzc2libGUgYmVjYXVzZSB0aGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyBlYXN5IGl0IGlzIHRvIGludGVyYWN0IHdpdGggaXRzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zNDc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcywgdTMyIG1vZmYpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM1My1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozNTQ6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU1LVx0XHRcdCAgICAgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTg4OT1idGZfYWRkX3N0cnVjdF9vcHMoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcyxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk5MjAtXG5rZXJuZWwvYnBmL2J0Zi5jOjk5MjE6XHRlcnIgPSBicGZfc3RydWN0X29wc19kZXNjX2luaXQoXHUwMDI2dGFiLVx1MDAzZW9wc1tidGYtXHUwMDNlc3RydWN0X29wc190YWItXHUwMDNlY250XSwgYnRmLCBsb2cpO1xua2VybmVsL2JwZi9idGYuYy05OTIyLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFNjb3BlICZhbXA7IE1ldGhvZCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCYjMzk7cyBjb25maXJtZWQgdG8gYmUgZ2xvYmFsIGluIG5hdHVyZS4gR29vZCwgaW1wb3J0YW50IHRvIGVzdGFibGlzaCB0aGF0IGF0IHRoZSBvdXRzZXQuIE5vdywgd2l0aCB0aGF0IGVzdGFibGlzaGVkIEkgbmVlZCB0byBsb29rIGludG8gYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGdsb2JhbCBpbmZsdWVuY2UgbWFuaWZlc3RzLCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIG1hbmFnZWQgb3IgY29uc3RyYWluZWQuIE5lZWQgdG8gZGl2ZSBkZWVwIGludG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTY4NTA9Ym9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTcwMzEtXHRcdFx0cmV0dXJuIGZhbHNlO1xua2VybmVsL2JwZi9idGYuYzo3MDMyOlx0XHQvKiBDaGVja2VkIGJ5IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0ICovXG5rZXJuZWwvYnBmL2J0Zi5jLTcwMzMtXHRcdHRuYW1lICYjNDM7PSBzaXplb2YoXCYjMzQ7YnRmX3RyYWNlX1wmIzM0OykgLSAxO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MjQ9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3NTc6XHRcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIHRndF9wcm9nLCBidGZfaWQsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzU4LVx0XHRcdFx0XHQgICAgICBcdTAwMjZ0Z3RfaW5mbyk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzMy1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzQ6XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCBOVUxMLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNS1cdFx0XHRcdCAgICAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMTMwPXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTQxLSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjE0MjogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxNDMtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTE5Mj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTIwNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTIwNjppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTIwNy1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTYzMD1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NjAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2NjE6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NjItXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR2xvYmFsIFNjb3BlIENoZWNrIGFuZCBUYXJnZXRlZCBGdW5jdGlvbiBSZXZpZXcqKgoKT2theSwgc28gdGhlIHNjb3BlLi4uIHllYWgsIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IGdsb2JhbC4gTmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBub3cgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIGNoZWNrIHRoZSBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AgZnVuY3Rpb24uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGF0IGltcGxlbWVudGF0aW9uLiBHb3R0YSBjaGVjayBob3cgdGhhdCYjMzk7cyB3b3JraW5nIHdpdGhpbiB0aGUgZ2xvYmFsIGNvbnRleHQsIGFuZCBlbnN1cmUgaXRzIGhhbmRsaW5nIG9mIHdoYXRldmVyIGl0IGlzIGNvbmNlcm5lZCB3aXRoIGFsaWducyB3aXRoIHdoYXQgSSYjMzk7bSBleHBlY3RpbmcuIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoaXMsIHNvIGxldCYjMzk7cyBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmX2Rpc3RpbGxfZnVuY19wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zNTQ9aW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ2MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo0NjI6XHRcdGlmIChidGZfZGlzdGlsbF9mdW5jX3Byb3RvKGxvZywgYnRmLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ2My1cdFx0XHRcdFx0ICAgZnVuY19wcm90bywgbW5hbWUsXG4tLVxua2VybmVsL2JwZi9idGYuYz03NTQ2PXN0YXRpYyB1OCBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc1NjEtXG5rZXJuZWwvYnBmL2J0Zi5jOjc1NjI6aW50IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvYnRmLmMtNzU2My1cdFx0XHQgICBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTI3Mjg9aW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgxMS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyODEyOlx0ZXJyID0gYnRmX2Rpc3RpbGxfZnVuY19wcm90byhcdTAwMjZlbnYtXHUwMDNlbG9nLCBrZnVuYy5idGYsIGtmdW5jLnByb3RvLCBrZnVuYy5uYW1lLCBcdTAwMjZmdW5jX21vZGVsKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODEzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyMDY9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDMzLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDM0Olx0XHRyZXQgPSBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKGxvZywgYnRmLCB0LCB0bmFtZSwgXHUwMDI2dGd0X2luZm8tXHUwMDNlZm1vZGVsKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQzNS1cdFx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0Nzc6XHRcdHJldCA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8obG9nLCBidGYsIHQsIHRuYW1lLCBcdTAwMjZ0Z3RfaW5mby1cdTAwM2VmbW9kZWwpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDc4LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTczMD1pbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc2MDpcdGVyciA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oTlVMTCwgYnRmLCB0LCB0bmFtZSwgXHUwMDI2dGd0X2luZm8tXHUwMDNlZm1vZGVsKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc2MS1cdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDE0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR2xvYmFsIFNjb3BlIENoZWNrIGFuZCBDb250ZXh0dWFsIEFjY2VzcyoqCgpSaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGdsb2JhbCBzaXR1YXRpb24gaGVyZS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbi4gTm93LCBnaXZlbiB0aGF0IGdsb2JhbCBuYXR1cmUsIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIHNwZWNpZmljIGFjY2VzcyBwYXR0ZXJucyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhY3Jvc3MgdGhlIGVudGlyZSBzeXN0ZW0uCgpUaGVyZWZvcmUsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBidGZfY3R4X2FjY2Vzc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggZ2xvYmFsIHZhcmlhYmxlcyBvciBnbG9iYWwgc3RhdGUuIEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIHRvIHVucGFjaz8gSSBuZWVkIHRvIGtub3c6IHdoYXQmIzM5O3MgdGhlIGFjY2VzcyBncmFudWxhcml0eT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29udGV4dCB3aXRoaW4gd2hpY2ggdGhpcyBhY2Nlc3Mgb2NjdXJzLCBlc3BlY2lhbGx5IGlmIHRoYXQgY29udGV4dCBpcyBnbG9iYWwsIG9yIGluZmx1ZW5jZWQgYnkgZ2xvYmFsIHN0YXRlPyBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgaW4gdGhlIGdsb2JhbCBjb250ZXh0LCBhcyB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3VyIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2xzbS5jPTQxNj1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBsc21fdmVyaWZpZXJfb3BzID0ge1xua2VybmVsL2JwZi9icGZfbHNtLmMtNDE3LVx0LmdldF9mdW5jX3Byb3RvID0gYnBmX2xzbV9mdW5jX3Byb3RvLFxua2VybmVsL2JwZi9icGZfbHNtLmM6NDE4Olx0LmlzX3ZhbGlkX2FjY2VzcyA9IGJ0Zl9jdHhfYWNjZXNzLFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDE5LX07XG4tLVxua2VybmVsL2JwZi9idGYuYz02NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtNjg0OS1cbmtlcm5lbC9icGYvYnRmLmM6Njg1MDpib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxua2VybmVsL2JwZi9idGYuYy02ODUxLVx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNzEwMy19XG5rZXJuZWwvYnBmL2J0Zi5jOjcxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoYnRmX2N0eF9hY2Nlc3MpO1xua2VybmVsL2JwZi9idGYuYy03MTA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjk4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipHbG9iYWwgU2NvcGUgYW5kIEJURiBQcmVwYXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCBoYXMgYSBnbG9iYWwgaW1wYWN0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGlzc3VlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBjb3JlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIGBicGZfcHJlcGFyZV9idGZfaW5mb2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIGZpbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBnbG9iYWwgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcmVwYXJlX2J0Zl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQwOS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDEwOmludCBicGZfcHJlcGFyZV9idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MTEtXHRcdFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDI1OD1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNjYtXHQvKiBQcmVwYXJlIEJURiBhbmQgZnVuY19pbmZvIG5lZWRlZCB0byBkaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzNjc6XHRyZXQgPSBicGZfcHJlcGFyZV9idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM2OC1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTY29wZSAmYW1wOyBDb250ZXh0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0JiMzOTtzIHVuZXF1aXZvY2FsbHkgZ2xvYmFsLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBmbGFncyBhbmQgcHJvbXB0cyBhIHRob3JvdWdoIGV4YW1pbmF0aW9uIG9mIGl0cyBpbXBsaWNhdGlvbnMgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBCZWZvcmUgcHJvY2VlZGluZywgSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AuIFRoaXMgaXMgY3J1Y2lhbC4gVGhpcyB3aWxsIHRlbGwgbWUgd2hldGhlciB3ZSBoYXZlIGFyZW5hIGNvbnRleHQgYXJndW1lbnRzLiBUaGlzIGNvdWxkIGhhdmUgYSBnbG9iYWwgZWZmZWN0LCBhbmQgbWlnaHQgYmUgaW1wb3J0YW50IGluIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIGluaXRpYWwgYXNzZXJ0aW9uLiBUaGUgb3V0Y29tZSBoZXJlIHdpbGwgc3RlZXIgdGhlIHN1YnNlcXVlbnQgbGluZSBvZiBpbnF1aXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk0Mj1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTYtXHQgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk1NzpcdGlmIChXQVJOX09OX09OQ0UoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcobm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk1OC1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NjI9aW50IGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4NzE6Ym9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NzIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTIwNj1pbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkyNzEtXHRcdGlmIChwcm9nX3RyYWNpbmcgXHUwMDI2XHUwMDI2IHN1YnByb2cgPT0gMCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTI3MjpcdFx0ICAgIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKHRndF9wcm9nKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjczLVx0XHRcdGJwZl9sb2cobG9nLCBcJiMzNDtDYW5ub3QgdHJhY2UgYSB0YXJnZXQgd2l0aCBhcmVuYSBjb250ZXh0IGFyZ3VtZW50c1xcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQmIzM5O3MgYSBkaXJlY3Qgc3RyZWFtIG9mIG15IHRob3VnaHRzOgoKKipBZGRyZXNzaW5nIEdsb2JhbCBTY29wZSBpbiBlQlBGIENvbnRleHQqKgoKUmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHNjb3BlIGhlcmUuIFRoZSBzaXR1YXRpb24uLi4gWWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGdsb2JhbCBpbiBuYXR1cmUsIG5vdCBpc29sYXRlZC4gSXQmIzM5O3MgaW1wYWN0aW5nIG1vcmUgdGhhbiBqdXN0IG9uZSBzcGVjaWZpYyBsb2NhbCBhcmVhLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBicGZfdHJhbXBfYXJlbmFfYmFzZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhhdCB2YXJpYWJsZS4gVGhhdCYjMzk7cyB0aGUga2V5IHBvaW50IG9mIGludmVzdGlnYXRpb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wX2FyZW5hX2Jhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz01MDg9YnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2FyZylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MzctICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1Mzg6dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUzOS1cdFx0XHQgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0Mzc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR2xvYmFsIFNjb3BlIGFuZCBKSVQgQXJlbmEgQXJndW1lbnRzKioKCkFscmlnaHQsIHRoYXQgb2JzZXJ2YXRpb24gYWJvdXQgdGhlIHNpdHVhdGlvbiBhdCBoYW5kLi4uIHllcCwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyBpbXBhY3RpbmcgdGhlIHN5c3RlbSBnbG9iYWxseS4gTm8gbG9jYWxpemVkIGlzc3VlIGhlcmU7IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0td2lkZSBlZmZlY3QuCgpOb3csIGdpdmVuIHRoYXQgc2NvcGUsIGFuZCB3aXRoIG15IGV4cGVyaWVuY2UgaW4gdGhlc2UgbG93LWxldmVsIGNvbnRleHRzLCBteSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGEgc3BlY2lmaWMgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYXNjZXJ0YWluIHRoZSBzdXBwb3J0IGxldmVsLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBzdXBwb3J0IGxldmVsIGlzIGdvaW5nIHRvIGRpY3RhdGUgdGhlIGFwcHJvcHJpYXRlIGNvdXJzZSBvZiBhY3Rpb24sIGFuZCBpdCB3b3VsZCBiZSBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgZm9yIGEgZmV3IGRpZmZlcmVudCBwb3RlbnRpYWwgc29sdXRpb25zIHRoYXQgSSBhbSBtdWxsaW5nIG92ZXIuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZsYWcgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9MzMwNj1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEwLVxua2VybmVsL2JwZi9jb3JlLmM6MzMxMTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMTIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTQyMj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQ5OS1cdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExNTAwOlx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1MDEtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcblwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4ODE9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODk3MC1cdFx0aWYgKGJhc2VfdHlwZShpbmZvLVx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODk3MTpcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5NzItXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMTkKCQkJCQkJCW91dHB1dDogMjQxCgkJCQkJCQl0aG91Z2h0czogMTEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQb2ludGVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZ2xvYmFsLCB3aGljaCBtZWFucyBpdCBwb3RlbnRpYWxseSB0b3VjaGVzIGEgbG90IG9mIGRpZmZlcmVudCBhcmVhcy4gTXkgaW5pdGlhbCBwYXNzIGhhcyBpZGVudGlmaWVkIHNldmVyYWwga2V5IHN5bWJvbHMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290OgoKKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWAKKiAgIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AKKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgCiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YAoqICAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gCiogICBgYnRmX2N0eF9hY2Nlc3NgCiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgCgpXYWl0LCBgYnBmX3ByZXBhcmVfYnRmX2luZm9gIGlzbiYjMzk7dCBhIG5ldyBmZWF0dXJlLCBqdXN0IGEgcmVuYW1lLiBJJiMzOTtsbCBkcm9wIHRoYXQuIEFuZCwgbG9va2luZyBhdCB0aGUgb3RoZXJzLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBidGZfY3R4X2FjY2Vzc2AsIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgIGFuZCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGFyZSBtb2RpZmllZCwgYnV0IHRoZXkgYXJlIHJlbGF0aXZlbHkgZ2VuZXJpYyBmdW5jdGlvbnMsIHNvIEkmIzM5O2xsIGtlZXAgdGhlbSBhcyBJIGRvbiYjMzk7dCB3YW50IHRvIGV4Y2x1ZGUgYW55IHBvdGVudGlhbCBhcmVhcy4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucy4gSG1tLCBpcyBgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0YCBhZmZlY3RlZD8gTm8sIHRoYXQgbG9va3MgdW50b3VjaGVkIGJ5IHRoaXMgcGF0Y2guCgpSaWdodCwgbGV0JiMzOTtzIHJlZmluZSB0aGF0IGZvY3VzIGxpc3Qgb25lIG1vcmUgdGltZToKCiogICBgYnBmX3RyYW1wX2FyZW5hX2Jhc2VgCiogICBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgCiogICBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYAoqICAgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAKKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYAoqICAgYGJ0Zl9jdHhfYWNjZXNzYAoqICAgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YAoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9KSVRgIHNlZW0gbGlrZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoIGltcGxpZXMgYENPTkZJR19YODZgIGlzIG5lZWRlZC4gSG93ZXZlciwgc2luY2UgYFg4NmAgaXMgYW4gYXJjaGl0ZWN0dXJlIGNvbmZpZywgYW5kIG5vdCB1c3VhbGx5IHNwZWNpZmllZCBpbiBgRW5hYmxlQ29uZmlnc2AgSSB3aWxsIGp1c3Qgc3BlY2lmeSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgYEJQRl9KSVRfQUxXQVlTX09OYCBpcyBuZWNlc3NhcnkuIE5vLCBgQlBGX0pJVGAgYWxvbmUgaXMgc3VmZmljaWVudC4KCk9rYXksIGxldCYjMzk7cyBjcmFmdCB0aGUgcmVhc29uaW5nIGZvciB0aGlzLiBUaGlzIHBhdGNoIGVuYWJsZXMgcGFzc2luZyBhcmVuYSBwb2ludGVycyB0byBCUEYga2Z1bmNzIGFuZCBgc3RydWN0X29wc2AgY2FsbGJhY2tzLiBJdCBjaGFuZ2VzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfX251bGxhYmxlYCBhbm5vdGF0aW9ucywgYW5kIHVwZGF0ZXMgdGhlIHg4NiBCUEYgSklUIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gY29ycmVjdGx5IHJlYmFzZSB0aGVzZSBwb2ludGVycyB0byB0aGUga2VybmVsJiMzOTtzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBhZGRzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIGFsbCByZWFjaGFibGUgdGhyb3VnaCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCB3aGljaCBtYWtlcyBpdCBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCBteSBmb2N1c2VkIHN5bWJvbHMgYXJlOgoKKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWAKKiAgIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AKKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgCiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YAoqICAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gCiogICBgYnRmX2N0eF9hY2Nlc3NgCiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgCgphbmQgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZToKCiogICBgQlBGX1NZU0NBTExgCiogICBgQlBGX0pJVGAKCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRob3NlIHN5bWJvbHMgYXJlIGluZGVlZCB3aGF0IEkgdGhpbmsgdGhleSBhcmUuIGBicGZfdHJhbXBfYXJlbmFfYmFzZWAgbG9va3MgY29ycmVjdDsgaXQmIzM5O3MgYSBuZXcgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gR29vZC4gYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCBpcyBuZXcsIGZvdW5kIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBQZXJmZWN0LiBBbmQgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgaXMgbmV3bHkgYWRkZWQgaW4gYGtlcm5lbC9icGYvY29yZS5jYCBhbmQgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIENoZWNrZWQuIExvb2tzIGxpa2UgdGhlIG90aGVyIDQgYXJlIG1vZGlmaWNhdGlvbnMgdG8gZmlsZXMgc3VjaCBhcyBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYCBhbmQgYGtlcm5lbC9icGYvYnRmLmNgLiBBbGwgZ29vZC4KClNlZW1zIGxpa2UgZXZlcnl0aGluZyBjaGVja3Mgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcF9hcmVuYV9iYXNlJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0OywKICAgICYjMzQ7YnRmX2Rpc3RpbGxfZnVuY19wcm90byYjMzQ7LAogICAgJiMzNDtidGZfY3R4X2FjY2VzcyYjMzQ7LAogICAgJiMzNDticGZfY2hlY2tfYXR0YWNoX3RhcmdldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBhc3NpbmcgYXJlbmEgcG9pbnRlcnMgdG8gQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVjb2duaXplIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfX251bGxhYmxlYCBhbm5vdGF0aW9ucywgYW5kIHVwZGF0ZXMgdGhlIHg4NiBCUEYgSklUIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gcHJvcGVybHkgcmViYXNlIHRoZXNlIHBvaW50ZXJzIHRvIHRoZSBrZXJuZWwmIzM5O3MgYXJlbmEgYmFzZSBhZGRyZXNzLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvZGUgcGF0aHMgaW4gdGhlIHZlcmlmaWVyLCBCVEYgcGFyc2luZywgYW5kIEpJVCBjb21waWxhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBfYXJlbmFfYmFzZSYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YnBmX3N0cnVjdF9vcHNfZGVzY19pbml0JiMzNDssCiAgICAmIzM0O2J0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8mIzM0OywKICAgICYjMzQ7YnRmX2N0eF9hY2Nlc3MmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBwYXNzaW5nIGFyZW5hIHBvaW50ZXJzIHRvIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlY29nbml6ZSBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX19udWxsYWJsZWAgYW5ub3RhdGlvbnMsIGFuZCB1cGRhdGVzIHRoZSB4ODYgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIHByb3Blcmx5IHJlYmFzZSB0aGVzZSBwb2ludGVycyB0byB0aGUga2VybmVsJiMzOTtzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MjY6NDIuNTQ1MjU1MzIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2MjQ2NzQ0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBfYXJlbmFfYmFzZVwiLFxuICAgIFwiYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdcIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gICAgXCJidGZfY3R4X2FjY2Vzc1wiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBhc3NpbmcgYXJlbmEgcG9pbnRlcnMgdG8gQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVjb2duaXplIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfX251bGxhYmxlYCBhbm5vdGF0aW9ucywgYW5kIHVwZGF0ZXMgdGhlIHg4NiBCUEYgSklUIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gcHJvcGVybHkgcmViYXNlIHRoZXNlIHBvaW50ZXJzIHRvIHRoZSBrZXJuZWwncyBhcmVuYSBiYXNlIGFkZHJlc3MuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocyBpbiB0aGUgdmVyaWZpZXIsIEJURiBwYXJzaW5nLCBhbmQgSklUIGNvbXBpbGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MjY6NDIuNTQ1MjYxMTgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQwMDk4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNjE1MjNmZTQ3MTRmOWNmYTQyZGM3YjgwYTA2ODc1YTZiOTY0Zjk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMjI6MjY6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG5pbmRleCBjYmRlODZkMDgyY2NlLi5jMDQ0NjU5Yjc2ODkxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuQEAgLTI3OCw2ICsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XFxuICAgICAgICAgICAgICAgICAuLi5cXG4gICAgICAgICB9XFxuIFxcbisyLjMuOCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBBbm5vdGF0aW9uc1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rQm90aCBhbm5vdGF0aW9ucyBpbmRpY2F0ZSB0aGF0IHRoZSBwb2ludGVyIGFyZ3VtZW50IHBvaW50cyBpbnRvIHRoZVxcbitjYWxsaW5nIHByb2dyYW0ncyBhcmVuYS4gVGhlIEpJVCByZWJhc2VzIHRoZSB2YWx1ZSBhdCB0aGUgY2FsbCBzaXRlIHNvXFxuK3RoZSBrZnVuYyByZWNlaXZlcyBhIGRpcmVjdGx5IGRlcmVmZXJlbmNlYWJsZSBrZXJuZWwgYWRkcmVzcywgc3ViamVjdCB0b1xcbit0aGUgYWNjZXNzIHJ1bGVzIGRlc2NyaWJlZCBpbiA6cmVmOmBCUEZfa2Z1bmNfYXJlbmFfYWNjZXNzYCAoYXQgbW9zdFxcbitgYEdVQVJEX1NaIC8gMmBgLCAzMiBLaUIsIHBhc3QgdGhlIHBvaW50ZXIgaW4gYSBzaW5nbGUgdW5jaGVja2VkIGFjY2VzcykuXFxuK1xcbitXaXRoIGBgX19hcmVuYWBgIHRoZSByZWJhc2UgaXMgdW5jb25kaXRpb25hbCBhbmQgdGhlIGFyZ3VtZW50IGlzIG5ldmVyXFxuK05VTEw6IGEgdmFsdWUgd2hvc2UgbG93ZXIgMzIgYml0cyBhcmUgemVybyBhcnJpdmVzIGFzIHRoZSBhcmVuYSBiYXNlXFxuK2FkZHJlc3MgKGFyZW5hIG9mZnNldCAwKS4gVGhlIGtmdW5jIG11c3Qgbm90IGNoZWNrIHRoZSBhcmd1bWVudCBmb3IgTlVMTC5cXG4rV2l0aCBgYF9fYXJlbmFfX251bGxhYmxlYGAgc3VjaCBhIHZhbHVlIGFycml2ZXMgYXMgTlVMTCBpbnN0ZWFkIGFuZCB0aGVcXG4ra2Z1bmMgbXVzdCBjaGVjayBiZWZvcmUgZGVyZWZlcmVuY2luZy5cXG4rXFxuK0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxcbitcXG4rICAgICAgICBfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2Nlc3NfaXRlbShzdHJ1Y3QgaXRlbSAqaXRlbV9fYXJlbmEpXFxuKyAgICAgICAge1xcbisgICAgICAgIC4uLlxcbisgICAgICAgIH1cXG4rXFxuK0NhbGxpbmcgc3VjaCBhIGtmdW5jIHJlcXVpcmVzIHRoZSBwcm9ncmFtIHRvIHVzZSBhbiBhcmVuYSBtYXAgYW5kIGEgSklUIHdpdGhcXG4rYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxcbitwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xcbitub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cXG4rXFxuK1RoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcXG4rZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXFxuK2tlcm5lbCBjYWxsZXIgcGFzc2VzIHRoZSBrZXJuZWwgYXJlbmEgYWRkcmVzcyBhbmQgdGhlIHRyYW1wb2xpbmUgY29udmVydHNcXG4raXQgd2hpbGUgc2F2aW5nIHRoZSBhcmd1bWVudHMsIHNvIHRoZSBjYWxsYmFjayByZWNlaXZlcyBhbiBhcmVuYSBwb2ludGVyXFxuK2l0IGNhbiBkZXJlZmVyZW5jZSBkaXJlY3RseS4gV2l0aCBgYF9fYXJlbmFgYCB0aGUga2VybmVsIGNhbGxlciBtdXN0IG5vdFxcbitwYXNzIE5VTEwuIFdpdGggYGBfX2FyZW5hX19udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXFxuK0hvd2V2ZXIsIHRoZXJlIGlzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmUgdG8gdGhlIHZlcmlmaWVyIHRoYXQgc3VjaCBhIHBvaW50ZXIgaXNcXG4rbm9uLU5VTEwgYmVmb3JlIHVzZSwgaW4tbGluZSB3aXRoIGV4aXN0aW5nIHNlbWFudGljcyBvZiBhcmVuYSBwb2ludGVycyB1c2VkIGluXFxuK2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cXG4rXFxuIC4uIF9CUEZfa2Z1bmNfbm9kZWY6XFxuIFxcbiAyLjQgVXNpbmcgYW4gZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9uXFxuQEAgLTUxNSw2ICs1NTIsOCBAQCBJbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBzdWNoIHJlcXVpcmVtZW50cywgdGhlIHZlcmlmaWVyIHdpbGwgZW5mb3JjZSBzdHJpY3RcXG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXFxuIGJlaW5nIHN1ZmZpeGVkIHdpdGggYGBfX19pbml0YGAuXFxuIFxcbisuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcXG4rXFxuIDIuOCBBY2Nlc3NpbmcgYXJlbmEgbWVtb3J5IHRocm91Z2gga2Z1bmMgYXJndW1lbnRzXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCAwMWU3Y2U1NjljMWVkLi41YzVjMzJhYmEyMzk2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0xNjc4LDYgKzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXFxuKyAqIHJOID0ga2Vybl92bV9zdGFydCArICh1MzIpck4sIHdpdGggUjEyIGhvbGRpbmcga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZVxcbisgKiBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXNcXG4rICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcXG4rXFx0dTggKnByb2cgPSAqcHByb2c7XFxuK1xcdHU4ICpzdGFydCA9IHByb2c7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoYnBmX3Byb2csIGluc24pO1xcbitcXHRpZiAoIWZtKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW5fdChpbnQsIGZtLVxcdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcXG4rXFx0XFx0dTggZmxhZ3MgPSBmbS1cXHUwMDNlYXJnX2ZsYWdzW2ldO1xcbitcXHRcXHR1MzIgcmVnID0gQlBGX1JFR18xICsgaTtcXG4rXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRSghYnBmX3Byb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdC8qIG1vdiBlTiwgZU46IHRydW5jYXRlIGFuZCBjbGVhciB0aGUgdXBwZXIgMzIgYml0cyAqL1xcbitcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csIGZhbHNlLCByZWcsIHJlZyk7XFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XFxuK1xcdFxcdFxcdC8qIHRlc3QgZU4sIGVOOyBqeiBvdmVyIHRoZSAzLWJ5dGUgYWRkICovXFxuK1xcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xcbitcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCByZWcsIHJlZykpO1xcbitcXHRcXHRcXHRFTUlUMihYODZfSkUsIDMpO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIGFkZCByTiwgcjEyICovXFxuK1xcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcXG4rXFx0XFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xcbitcXHR9XFxuK1xcbitcXHQqcHByb2cgPSBwcm9nO1xcbitcXHRyZXR1cm4gcHJvZyAtIHN0YXJ0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuIFxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuIHtcXG5AQCAtMjU4Myw2ICsyNjI3LDEyIEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmICghaW1tMzIpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGJwZl9wcm9nLCBpbnNuLCBcXHUwMDI2cHJvZyk7XFxuK1xcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRcXHRpcCArPSBlcnI7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHByaXZfZnJhbWVfcHRyKSB7XFxuIFxcdFxcdFxcdFxcdHB1c2hfcjkoXFx1MDAyNnByb2cpO1xcbiBcXHRcXHRcXHRcXHRpcCArPSAyO1xcbkBAIC0yOTkzLDExICszMDQzLDM5IEBAIHN0YXRpYyBpbnQgZ2V0X25yX3VzZWRfcmVncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0pXFxuIFxcdHJldHVybiBucl91c2VkX3JlZ3M7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXlcXG4rICogaW50byB0aGUgQlBGIGN0eCwgcmF4ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCkuIEEgbnVsbGFibGUgYXJnXFxuKyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0XFxuKyAqIHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlIHVwcGVyIGhhbGYsIHNvIHRoZSBzdG9yZWRcXG4rICogdmFsdWUgc2F0aXNmaWVzIHRoZSBKSVQgaW52YXJpYW50IGZvciBhcmVuYSBwb2ludGVyIHJlZ2lzdGVycy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGVtaXRfYXJlbmFfYXJnX2NvbnYodTggKipwcHJvZywgdTMyIHNyY19yZWcsIGJvb2wgbnVsbGFibGUsIHUzMiBiYXNlX2xvKVxcbit7XFxuK1xcdHU4ICpwcm9nID0gKnBwcm9nO1xcbitcXG4rXFx0aWYgKG51bGxhYmxlKSB7XFxuK1xcdFxcdGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMClcXG4rXFx0XFx0XFx0ZW1pdF9tb3ZfcmVnKFxcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xcbitcXHRcXHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXFxuK1xcdFxcdEVNSVQzKDB4NDgsIDB4ODUsIDB4QzApO1xcbitcXHRcXHRFTUlUMihYODZfSkUsIDUpO1xcbitcXHR9IGVsc2UgaWYgKHNyY19yZWcgIT0gQlBGX1JFR18wKSB7XFxuK1xcdFxcdGVtaXRfbW92X3JlZyhcXHUwMDI2cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XFxuK1xcdH1cXG4rXFx0Lyogc3ViIGVheCwgYmFzZV9sbyAqL1xcbitcXHRFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTtcXG4rXFxuK1xcdCpwcHJvZyA9IHByb2c7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4tXFx0XFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXFxuK1xcdFxcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxcbitcXHRcXHQgICAgICB1NjQgYXJlbmFfYmFzZSlcXG4ge1xcbiBcXHRpbnQgYXJnX3JlZ3MsIGZpcnN0X29mZiA9IDAsIG5yX3JlZ3MgPSAwLCBucl9zdGFja19zbG90cyA9IDA7XFxuIFxcdGJvb2wgdXNlX2ptcCA9IGJwZl90cmFtcG9saW5lX3VzZV9qbXAoZmxhZ3MpO1xcbitcXHRpbnQgc3RhY2tfYXJnc19vZmYgPSAodXNlX2ptcCB8fCAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkpID8gMTYgOiAyNDtcXG4gXFx0aW50IGksIGo7XFxuIFxcbiBcXHQvKiBTdG9yZSBmdW5jdGlvbiBhcmd1bWVudHMgdG8gc3RhY2suXFxuQEAgLTMwMDYsNiArMzA4NCw5IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0ICogbW92IFFXT1JEIFBUUiBbcmJwLTB4OF0scnNpXFxuIFxcdCAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWluX3QoaW50LCBtLVxcdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfQVJHUyk7IGkrKykge1xcbitcXHRcXHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXFx1MDAyNlxcdTAwMjYgKG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcXG4rXFx0XFx0Ym9vbCBudWxsYWJsZSA9IG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXG4gXFx0XFx0YXJnX3JlZ3MgPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDg7XFxuIFxcbiBcXHRcXHQvKiBBY2NvcmRpbmcgdG8gdGhlIHJlc2VhcmNoIG9mIFlvbmdob25nLCBzdHJ1Y3QgbWVtYmVyc1xcbkBAIC0zMDI5LDE2ICszMTEwLDE5IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4gXFx0XFx0XFx0LyogY29weSBmdW5jdGlvbiBhcmd1bWVudHMgZnJvbSBvcmlnaW4gc3RhY2sgZnJhbWVcXG4gXFx0XFx0XFx0ICogaW50byBjdXJyZW50IHN0YWNrIGZyYW1lLlxcbiBcXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBUaGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXJndW1lbnRzIG9uLXN0YWNrXFxuLVxcdFxcdFxcdCAqIGlzOlxcbi1cXHRcXHRcXHQgKiAgIHJicCArIDgocHVzaCByYnApICtcXG4tXFx0XFx0XFx0ICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSArXFxuLVxcdFxcdFxcdCAqICAgOChyZXR1cm4gYWRkciBvZiB0aGUgY2FsbGVyKVxcbi1cXHRcXHRcXHQgKiB3aGljaCBtZWFuczogcmJwICsgMjRcXG4rXFx0XFx0XFx0ICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwXFxuK1xcdFxcdFxcdCAqIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3NlczogdHdvIHJldHVybiBhZGRyZXNzZXNcXG4rXFx0XFx0XFx0ICogKG9yaWdpbiBjYWxsIGFuZCBjYWxsZXIpIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXNcXG4rXFx0XFx0XFx0ICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICsgMjQsIGFuZFxcbitcXHRcXHRcXHQgKiBhIHNpbmdsZSBvbmUgd2hlbiBpdCBpcyBlbnRlcmVkIHdpdGggYSBqbXAgb3JcXG4rXFx0XFx0XFx0ICogY2FsbGVkIGluZGlyZWN0bHksIHNvIHJicCArIDE2LlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcXG4gXFx0XFx0XFx0XFx0ZW1pdF9sZHgocHJvZywgQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfRlAsXFxuLVxcdFxcdFxcdFxcdFxcdCBucl9zdGFja19zbG90cyAqIDggKyAxNiArICghdXNlX2ptcCkgKiA4KTtcXG4rXFx0XFx0XFx0XFx0XFx0IG5yX3N0YWNrX3Nsb3RzICogOCArIHN0YWNrX2FyZ3Nfb2ZmKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGFyZW5hX2FyZylcXG4rXFx0XFx0XFx0XFx0XFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBCUEZfUkVHXzAsIG51bGxhYmxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHUzMilhcmVuYV9iYXNlKTtcXG4gXFx0XFx0XFx0XFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsXFxuIFxcdFxcdFxcdFxcdFxcdCAtc3RhY2tfc2l6ZSk7XFxuIFxcbkBAIC0zMDU5LDkgKzMxNDMsMTMgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxcbiBcXG4gXFx0XFx0XFx0LyogY29weSB0aGUgYXJndW1lbnRzIGZyb20gcmVncyBpbnRvIHN0YWNrICovXFxuIFxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBhcmdfcmVnczsgaisrKSB7XFxuLVxcdFxcdFxcdFxcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCxcXG4tXFx0XFx0XFx0XFx0XFx0IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzLFxcbi1cXHRcXHRcXHRcXHRcXHQgLXN0YWNrX3NpemUpO1xcbitcXHRcXHRcXHRcXHR1MzIgc3JjID0gbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSArIG5yX3JlZ3M7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAoYXJlbmFfYXJnKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGVtaXRfYXJlbmFfYXJnX2NvbnYocHJvZywgc3JjLCBudWxsYWJsZSwgKHUzMilhcmVuYV9iYXNlKTtcXG4rXFx0XFx0XFx0XFx0XFx0c3JjID0gQlBGX1JFR18wO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgc3JjLCAtc3RhY2tfc2l6ZSk7XFxuIFxcdFxcdFxcdFxcdHN0YWNrX3NpemUgLT0gODtcXG4gXFx0XFx0XFx0XFx0bnJfcmVncysrO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTMzNTcsNiArMzQ0NSw3IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXFxuIFxcdHZvaWQgKm9yaWdfY2FsbCA9IGZ1bmNfYWRkcjtcXG4gXFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7XFxuIFxcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xcbitcXHR1NjQgYXJlbmFfYmFzZTtcXG4gXFx0dTY0IGZ1bmNfbWV0YTtcXG4gXFx0dTggKnByb2c7XFxuIFxcdGJvb2wgc2F2ZV9yZXQ7XFxuQEAgLTMzNjksNiArMzQ1OCw4IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXFxuIFxcdFdBUk5fT05fT05DRSgoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAoZmxhZ3MgXFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XFxuIFxcbitcXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbS1cXHUwMDNlbnJfYXJnczsgaSsrKVxcbiBcXHRcXHRucl9yZWdzICs9IChtLVxcdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XFxuIFxcbkBAIC0zNTAzLDcgKzM1OTQsNyBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxcbiBcXHRcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFxcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1pcF9vZmYsIChsb25nKWZ1bmNfYWRkcik7XFxuIFxcdH1cXG4gXFxuLVxcdHNhdmVfYXJncyhtLCBcXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyk7XFxuK1xcdHNhdmVfYXJncyhtLCBcXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncywgYXJlbmFfYmFzZSk7XFxuIFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcXG4gXFx0XFx0LyogYXJnMTogbW92IHJkaSwgaW0gKi9cXG5AQCAtMzU0NSw3ICszNjM2LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xcbiBcXHRcXHRyZXN0b3JlX3JlZ3MobSwgXFx1MDAyNnByb2csIHJlZ3Nfb2ZmKTtcXG4tXFx0XFx0c2F2ZV9hcmdzKG0sIFxcdTAwMjZwcm9nLCBhcmdfc3RhY2tfb2ZmLCB0cnVlLCBmbGFncyk7XFxuK1xcdFxcdHNhdmVfYXJncyhtLCBcXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MsIDApO1xcbiBcXG4gXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCkge1xcbiBcXHRcXHRcXHQvKiBCZWZvcmUgY2FsbGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIGxvYWQgdGhlXFxuQEAgLTQwNDYsNiArNDEzNywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdGlmICh0ZXh0X3Bva2VfY29weShkc3QsIHNyYywgbGVuKSA9PSBOVUxMKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLjY4ZmY2Njc4N2FlMWQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMTIxMCw2ICsxMjEwLDEyIEBAIHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkIHtcXG4gLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi9cXG4gI2RlZmluZSBCVEZfRk1PREVMX1NJR05FRF9BUkdcXHRcXHRCSVQoMSlcXG4gXFxuKy8qIFRoZSBhcmd1bWVudCBpcyBhbiBhcmVuYSBwb2ludGVyLiAqL1xcbisjZGVmaW5lIEJURl9GTU9ERUxfQVJFTkFfQVJHXFx0XFx0QklUKDIpXFxuK1xcbisvKiBUaGUgYXJndW1lbnQgaXMgbnVsbGFibGUuICovXFxuKyNkZWZpbmUgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkdcXHRcXHRCSVQoMylcXG4rXFxuIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7XFxuIFxcdHU4IHJldF9zaXplO1xcbiBcXHR1OCByZXRfZmxhZ3M7XFxuQEAgLTEyODMsNiArMTI4OSwxNSBAQCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzIHtcXG4gXFx0aW50IG5yX25vZGVzO1xcbiB9O1xcbiBcXG4rLypcXG4rICogVGhlIGFyZW5hIGJhc2UgYWdhaW5zdCB3aGljaCBhIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBjb252ZXJ0cyB0aGVcXG4rICogYXJndW1lbnRzIG1hcmtlZCB3aXRoIEJURl9GTU9ERUxfQVJFTkFfQVJHIHdoaWxlIHNhdmluZyB0aGVtIGludG8gdGhlIEJQRlxcbisgKiBjdHgsIGN0eFthcmddID0gKHUzMikoa2FkZHIgLSBrZXJuX3ZtX3N0YXJ0KS4gWmVybyB3aGVuIHRoZSB0cmFtcG9saW5lXFxuKyAqIGNvbnZlcnRzIG5vdGhpbmcuXFxuKyAqL1xcbit1NjQgYnBmX3RyYW1wX2FyZW5hX2Jhc2UoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcbitcXHRcXHRcXHQgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MpO1xcbitcXG4gc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4O1xcbiBcXG4gLyogRGlmZmVyZW50IHVzZSBjYXNlcyBmb3IgQlBGIHRyYW1wb2xpbmU6XFxuQEAgLTIzNTIsNiArMjM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9mc2Vzc2lvbl9jb29raWVfY250KHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKm5vZGVzKVxcbiBcXG4gaW50IGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sIHUzMiBjbnQpO1xcbitib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfQ0dST1VQX0JQRikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX0xTTSlcXG4gaW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IGEyYTQwY2FjYTBhMGUuLmE5NTU1ZDE3ZmQ4ZWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtMTE3Nyw4ICsxMTc3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3VucGFja19rZXkodTY0IGtleSwgdTMyICpvYmpfaWQsIHUzMiAqYnRmX2lkKVxcbiBcXHRcXHQqYnRmX2lkID0ga2V5IFxcdTAwMjYgMHg3RkZGRkZGRjtcXG4gfVxcbiBcXG4taW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XFxuK2ludCBicGZfcHJlcGFyZV9idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbitcXHRcXHRcXHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcXG4gaW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uMzZjZTM0MDNmZTU5OSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbkBAIC0xMTgzLDYgKzExODMsNyBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTtcXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XFxuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpO1xcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpO1xcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyh2b2lkKTtcXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG5pbmRleCA0ZTdhNDhjMDJiZTVjLi5jZWQ3YjE4MjQ2YTk2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xcbisrKyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xcbkBAIC0xNDcsNiArMTQ3LDggQEAgdm9pZCBicGZfc3RydWN0X29wc19pbWFnZV9mcmVlKHZvaWQgKmltYWdlKVxcbiBcXG4gI2RlZmluZSBNQVlCRV9OVUxMX1NVRkZJWCBcXFwiX19udWxsYWJsZVxcXCJcXG4gI2RlZmluZSBSRUZDT1VOVEVEX1NVRkZJWCBcXFwiX19yZWZcXFwiXFxuKyNkZWZpbmUgQVJFTkFfU1VGRklYIFxcXCJfX2FyZW5hXFxcIlxcbisjZGVmaW5lIEFSRU5BX01BWUJFX05VTExfU1VGRklYIFxcXCJfX2FyZW5hX19udWxsYWJsZVxcXCJcXG4gXFxuIC8qIFByZXBhcmUgYXJndW1lbnQgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgb2YgYSBtZW1iZXIgb2YgYVxcbiAgKiBzdHJ1Y3Rfb3BzIHR5cGUuXFxuQEAgLTE1OSw3ICsxNjEsNyBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXFxuICAqIHRvIHByb3ZpZGUgYW4gYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCwgd2hpY2ggaW4gdHVybiBwcm92aWRlc1xcbiAgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCB1c2VkIGJ5IHRoZSB2ZXJpZmllciB0byBjaGVjayB0aGUgYXJndW1lbnRzIG9mIHRoZVxcbiAgKiBCUEYgc3RydWN0X29wcyBwcm9ncmFtIGFzc2lnbmVkIHRvIHRoZSBtZW1iZXIuIEhlcmUsIHdlIG9ubHkgY2FyZSBhYm91dFxcbi0gKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLlxcbisgKiB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcyBfX251bGxhYmxlLCBfX3JlZiBvciBfX2FyZW5hLlxcbiAgKlxcbiAgKiBUaGUgYXJyYXkgb2Ygc3RydWN0IGJwZl9jdHhfYXJnX2F1eCBpcyBldmVudHVhbGx5IGFzc2lnbmVkIHRvXFxuICAqIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvIG9mIEJQRiBzdHJ1Y3Rfb3BzIHByb2dyYW1zIGFuZCBwYXNzZWQgdG8gdGhlXFxuQEAgLTE3MiwxMCArMTc0LDEyIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpzdF9vcHNfbmFtZSxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm1lbWJlcl9uYW1lLFxcbiBcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jX3Byb3RvLCB2b2lkICpzdHViX2Z1bmNfYWRkcixcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbW9kZWwsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfYXJnX2luZm8gKmFyZ19pbmZvKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqc3R1Yl9mdW5jX3Byb3RvLCAqcG9pbnRlZF90eXBlO1xcbi1cXHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZTtcXG4rXFx0Ym9vbCBpc19udWxsYWJsZSA9IGZhbHNlLCBpc19yZWZjb3VudGVkID0gZmFsc2UsIGlzX2FyZW5hID0gZmFsc2U7XFxuK1xcdGJvb2wgaXNfYXJlbmFfbnVsbGFibGUgPSBmYWxzZTtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc3R1Yl9hcmdzLCAqYXJncztcXG4gXFx0c3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgKmluZm9fYnVmO1xcbiBcXHR1MzIgbmFyZ3MsIGFyZ19ubywgaW5mb19jbnQgPSAwO1xcbkBAIC0yMjUsMjcgKzIyOSwzNSBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHQvKiBQcmVwYXJlIGluZm8gZm9yIGV2ZXJ5IG51bGxhYmxlIGFyZ3VtZW50ICovXFxuIFxcdGluZm8gPSBpbmZvX2J1ZjtcXG4gXFx0Zm9yIChhcmdfbm8gPSAwOyBhcmdfbm8gXFx1MDAzYyBuYXJnczsgYXJnX25vKyspIHtcXG4tXFx0XFx0LyogU2tpcCBhcmd1bWVudHMgdGhhdCBpcyBub3Qgc3VmZml4ZWQgd2l0aFxcbi1cXHRcXHQgKiBcXFwiX19udWxsYWJsZSBvciBfX3JlZlxcXCIuXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNraXAgYXJndW1lbnRzIHRoYXQgYXJlIG5vdCBzdWZmaXhlZCB3aXRoIFxcXCJfX2FyZW5hX19udWxsYWJsZVxcXCIsXFxuK1xcdFxcdCAqIFxcXCJfX2FyZW5hXFxcIiwgXFxcIl9fbnVsbGFibGVcXFwiLCBvciBcXFwiX19yZWZcXFwiLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aXNfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE1BWUJFX05VTExfU1VGRklYKTtcXG4rXFx0XFx0aXNfYXJlbmFfbnVsbGFibGUgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWCk7XFxuK1xcdFxcdGlzX2FyZW5hID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFxcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSwgQVJFTkFfU1VGRklYKTtcXG4rXFx0XFx0aXNfbnVsbGFibGUgPSAhaXNfYXJlbmFfbnVsbGFibGUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICAgYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFxcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSwgTUFZQkVfTlVMTF9TVUZGSVgpO1xcbiBcXHRcXHRpc19yZWZjb3VudGVkID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFxcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFJFRkNPVU5URURfU1VGRklYKTtcXG4gXFxuLVxcdFxcdGlmIChpc19udWxsYWJsZSlcXG4rXFx0XFx0aWYgKGlzX2FyZW5hX251bGxhYmxlKVxcbitcXHRcXHRcXHRzdWZmaXggPSBBUkVOQV9NQVlCRV9OVUxMX1NVRkZJWDtcXG4rXFx0XFx0ZWxzZSBpZiAoaXNfYXJlbmEpXFxuK1xcdFxcdFxcdHN1ZmZpeCA9IEFSRU5BX1NVRkZJWDtcXG4rXFx0XFx0ZWxzZSBpZiAoaXNfbnVsbGFibGUpXFxuIFxcdFxcdFxcdHN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYO1xcbiBcXHRcXHRlbHNlIGlmIChpc19yZWZjb3VudGVkKVxcbiBcXHRcXHRcXHRzdWZmaXggPSBSRUZDT1VOVEVEX1NVRkZJWDtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdC8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovXFxuLVxcdFxcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0ZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGFyZ3NbYXJnX25vXS50eXBlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmFyZ19idGZfaWQpO1xcbi1cXHRcXHRpZiAoIXBvaW50ZWRfdHlwZSB8fFxcbi1cXHRcXHQgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0LCBvciBhbnkgcG9pbnRlciBmb3IgX19hcmVuYSBvclxcbitcXHRcXHQgKiBfX2FyZW5hX19udWxsYWJsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0ZiwgYXJnc1thcmdfbm9dLnR5cGUsIFxcdTAwMjZhcmdfYnRmX2lkKTtcXG4rXFx0XFx0aWYgKCFwb2ludGVkX3R5cGUgfHwgKCFpc19hcmVuYSBcXHUwMDI2XFx1MDAyNiAhaXNfYXJlbmFfbnVsbGFibGUgXFx1MDAyNlxcdTAwMjYgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSkge1xcbiBcXHRcXHRcXHRwcl93YXJuKFxcXCJzdHViIGZ1bmN0aW9uICVzIGhhcyAlcyB0YWdnaW5nIHRvIGFuIHVuc3VwcG9ydGVkIHR5cGVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHN0dWJfZm5hbWUsIHN1ZmZpeCk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG5AQCAtMjY4LDcgKzI4MCwxOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRpbmZvLVxcdTAwM2VidGZfaWQgPSBhcmdfYnRmX2lkO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VidGYgPSBidGY7XFxuIFxcdFxcdGluZm8tXFx1MDAzZW9mZnNldCA9IG9mZnNldDtcXG4tXFx0XFx0aWYgKGlzX251bGxhYmxlKSB7XFxuK1xcdFxcdGlmIChpc19hcmVuYSB8fCBpc19hcmVuYV9udWxsYWJsZSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLFxcbitcXHRcXHRcXHQgKiBQVFJfVE9fQVJFTkEgZW5jb21wYXNzZXMgcG90ZW50aWFsIE5VTEwgdmFsdWVzLCBidXRcXG4rXFx0XFx0XFx0ICogd2UgZG8gbm90IGZvcmNlIHRoZSBwcm9ncmFtIHRvIGNoZWNrIGl0LCBvciBtYWludGFpblxcbitcXHRcXHRcXHQgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fQVJFTkE7XFxuK1xcdFxcdFxcdG1vZGVsLVxcdTAwM2VhcmdfZmxhZ3NbYXJnX25vXSB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcXG4rXFx0XFx0XFx0aWYgKGlzX2FyZW5hX251bGxhYmxlKVxcbitcXHRcXHRcXHRcXHRtb2RlbC1cXHUwMDNlYXJnX2ZsYWdzW2FyZ19ub10gfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XFxuK1xcdFxcdH0gZWxzZSBpZiAoaXNfbnVsbGFibGUpIHtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQgfCBQVFJfTUFZQkVfTlVMTDtcXG4gXFx0XFx0fSBlbHNlIGlmIChpc19yZWZjb3VudGVkKSB7XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZXJlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEO1xcbkBAIC00NjAsNiArNDgzLDcgQEAgaW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXFxuIFxcdFxcdHN0dWJfZnVuY19hZGRyID0gKih2b2lkICoqKShzdF9vcHMtXFx1MDAzZWNmaV9zdHVicyArIG1vZmYpO1xcbiBcXHRcXHRlcnIgPSBwcmVwYXJlX2FyZ19pbmZvKGJ0Ziwgc3Rfb3BzLVxcdTAwM2VuYW1lLCBtbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGZ1bmNfcHJvdG8sIHN0dWJfZnVuY19hZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnN0X29wcy1cXHUwMDNlZnVuY19tb2RlbHNbaV0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBhcmdfaW5mbyArIGkpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGVycm91dDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcXG5pbmRleCA0MjQxNDYzM2NmMjYzLi42NjA2MTg3ZWQ0ZjQzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXFxuQEAgLTY5NjMsMTUgKzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBjaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCBvciBQVFJfVE9fUkRXUl9CVUZfT1JfTlVMTCAqL1xcbitcXHQvKlxcbitcXHQgKiBDaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCwgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgb3JcXG4rXFx0ICogUFRSX1RPX0FSRU5BIChib3RoIG51bGxhYmxlIGFuZCBub24tbnVsbGFibGUgY2FzZXMpLlxcbitcXHQgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkrKykge1xcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSBcXHUwMDI2cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjdHhfYXJnX2luZm9baV07XFxuIFxcdFxcdHUzMiB0eXBlLCBmbGFnO1xcbiBcXG4gXFx0XFx0dHlwZSA9IGJhc2VfdHlwZShjdHhfYXJnX2luZm8tXFx1MDAzZXJlZ190eXBlKTtcXG4gXFx0XFx0ZmxhZyA9IHR5cGVfZmxhZyhjdHhfYXJnX2luZm8tXFx1MDAzZXJlZ190eXBlKTtcXG4tXFx0XFx0aWYgKGN0eF9hcmdfaW5mby1cXHUwMDNlb2Zmc2V0ID09IG9mZiBcXHUwMDI2XFx1MDAyNiB0eXBlID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChmbGFnIFxcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XFxuK1xcdFxcdGlmIChjdHhfYXJnX2luZm8tXFx1MDAzZW9mZnNldCA9PSBvZmYgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICh0eXBlID09IFBUUl9UT19BUkVOQSB8fFxcbitcXHRcXHQgICAgICh0eXBlID09IFBUUl9UT19CVUYgXFx1MDAyNlxcdTAwMjYgKGZsYWcgXFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpKSkge1xcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2VyZWdfdHlwZSA9IGN0eF9hcmdfaW5mby1cXHUwMDNlcmVnX3R5cGU7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuQEAgLTc1MzksNiArNzU0MywyMiBAQCBzdGF0aWMgdTggX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxcbiBcXHRyZXR1cm4gZmxhZ3M7XFxuIH1cXG4gXFxuK3N0YXRpYyB1OCBfX2dldF9hcmdfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcXG4re1xcbitcXHR1OCBmbGFncyA9IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKHQpO1xcbitcXG4rXFx0aWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX2FyZW5hX19udWxsYWJsZVxcXCIpKVxcbitcXHRcXHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRyB8IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXHRlbHNlIGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYVxcXCIpKVxcbitcXHRcXHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcXG4rXFx0ZWxzZSBpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9fbnVsbGFibGVcXFwiKSlcXG4rXFx0XFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XFxuK1xcbitcXHRyZXR1cm4gZmxhZ3M7XFxuK31cXG4rXFxuIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpmdW5jLFxcbkBAIC03NjA0LDcgKzc2MjQsNyBAQCBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRtLVxcdTAwM2Vhcmdfc2l6ZVtpXSA9IHJldDtcXG4tXFx0XFx0bS1cXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3ModCk7XFxuK1xcdFxcdG0tXFx1MDAzZWFyZ19mbGFnc1tpXSA9IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoYnRmLCBcXHUwMDI2YXJnc1tpXSwgdCk7XFxuIFxcdH1cXG4gXFx0bS1cXHUwMDNlbnJfYXJncyA9IG5hcmdzO1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jaGVja19idGYuYyBiL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcXG5pbmRleCA5M2JlYmU2ZmUxMmU3Li4wZThiM2NjYzdhNWI5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jXFxuQEAgLTI4LDkgKzI4LDkgQEAgc3RhdGljIGludCBjaGVja19hYm5vcm1hbF9yZXR1cm4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gI2RlZmluZSBNSU5fQlBGX0ZVTkNJTkZPX1NJWkVcXHQ4XFxuICNkZWZpbmUgTUFYX0ZVTkNJTkZPX1JFQ19TSVpFXFx0MjUyXFxuIFxcbi1zdGF0aWMgaW50IGNoZWNrX2J0Zl9mdW5jX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdFxcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi1cXHRcXHRcXHRcXHRicGZwdHJfdCB1YXR0cilcXG4rc3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuK1xcdFxcdFxcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4rXFx0XFx0XFx0ICAgIGJwZnB0cl90IHVhdHRyKVxcbiB7XFxuIFxcdHUzMiBrcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnR5cGUsICpmdW5jX3Byb3RvO1xcbkBAIC00MDcsOSArNDA3LDkgQEAgc3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4taW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi1cXHRcXHRcXHQgICAgIGJwZnB0cl90IHVhdHRyKVxcbitpbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4rXFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbitcXHRcXHRcXHQgYnBmcHRyX3QgdWF0dHIpXFxuIHtcXG4gXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC00MjksNyArNDI5LDcgQEAgaW50IGJwZl9jaGVja19idGZfaW5mb19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHR9XFxuIFxcdGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VidGYgPSBidGY7XFxuIFxcbi1cXHRlcnIgPSBjaGVja19idGZfZnVuY19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTtcXG4rXFx0ZXJyID0gcHJlcGFyZV9idGZfZnVuYyhlbnYsIGF0dHIsIHVhdHRyKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcXG5pbmRleCBlMjA3NjY2N2IyNDUxLi5hM2UxZmFlMzJlYWNlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXFxuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcXG5AQCAtMzMwOCw2ICszMzA4LDExIEBAIGJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK2Jvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbmluZGV4IGVkNzk5OWFkNmM2NmMuLmUwN2FmMzVlZDA0MDIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbkBAIC01MjksNiArNTI5LDM2IEBAIGJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hXFxuIFxcdHJldHVybiB0bm9kZXM7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFRoZSBhcmVuYSBiYXNlIGFnYWluc3Qgd2hpY2ggc2F2ZV9hcmdzKCkgY29udmVydHMgdGhlIGFyZ3VtZW50cyBtYXJrZWRcXG4rICogd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRy4gT25seSB0aGUgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lXFxuKyAqIGNvbnZlcnRzOiBpdCBkaXNwYXRjaGVzIHRvIGEgc2luZ2xlIHByb2cgd2hvc2UgYXJlbmEgaXMga25vd24gYXRcXG4rICogZ2VuZXJhdGlvbiB0aW1lLiBSZXR1cm4gMCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29udmVydC5cXG4rICovXFxuK3U2NCBicGZfdHJhbXBfYXJlbmFfYmFzZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHUzMiBmbGFncylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgfHxcXG4rXFx0ICAgIHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ucl9ub2RlcyAhPSAxKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtLVxcdTAwM2Vucl9hcmdzOyBpKyspXFxuK1xcdFxcdGlmIChtLVxcdTAwM2VhcmdfZmxhZ3NbaV0gXFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdGlmIChpID09IG0tXFx1MDAzZW5yX2FyZ3MpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVmVyaWZpY2F0aW9uIHJlamVjdHMgYW4gYXJlbmEgYXJndW1lbnQgd2l0aG91dCBhbiBhcmVuYS4gKi9cXG4rXFx0cHJvZyA9IHRub2Rlc1tCUEZfVFJBTVBfRkVOVFJZXS5ub2Rlc1swXS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZztcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhcmVuYSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgYnBmX3RyYW1wX2ltYWdlX2ZyZWUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0pXFxuIHtcXG4gXFx0YnBmX2ltYWdlX2tzeW1fZGVsKFxcdTAwMjZpbS1cXHUwMDNla3N5bSk7XFxuQEAgLTkyMCw2ICs5NTAsMTMgQEAgc3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuIFxcdGludCBjbnQgPSAwLCBpO1xcbiBcXG4gXFx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVxcdTAwM2VsaW5rLVxcdTAwM2Vwcm9nKTtcXG4rXFx0LypcXG4rXFx0ICogQXJlbmEgY3R4IGFyZ3MgYXJlIGNvbnZlcnRlZCBvbmx5IGJ5IHN0cnVjdF9vcHMgaW5kaXJlY3RcXG4rXFx0ICogdHJhbXBvbGluZXMuIFRoZXkgbXVzdCBuZXZlciBiZSBhdHRhY2hlZCB0byBhIGdlbmVyaWMgdHJhbXBvbGluZS5cXG4rXFx0ICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcobm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZykpKVxcbitcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXG4gXFx0aWYgKHRyLVxcdTAwM2VleHRlbnNpb25fcHJvZylcXG4gXFx0XFx0LyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuXFxuIFxcdFxcdCAqIGNhbm5vdCBvdmVyd3JpdGUgZXh0ZW5zaW9uIHByb2cgZWl0aGVyLlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCAwOTU4OGI3YjA4YjBhLi44M2VkZjQxYzdmZTljIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0yODQyLDcgKzI4NDIsNyBAQCBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4rc3RhdGljIGludCBhZGRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZyA9IGVudi1cXHUwMDNlc3VicHJvZ19pbmZvO1xcbiBcXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuLCBleF9jYl9pbnNuO1xcbkBAIC0yODU0LDggKzI4NTQsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xcbi1cXHRcXHRpZiAoIWJwZl9wc2V1ZG9fZnVuYyhpbnNuKSBcXHUwMDI2XFx1MDAyNiAhYnBmX3BzZXVkb19jYWxsKGluc24pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhYnBmX3BzZXVkb19rZnVuY19jYWxsKGluc24pKVxcbitcXHRcXHRpZiAoIWJwZl9wc2V1ZG9fZnVuYyhpbnNuKSBcXHUwMDI2XFx1MDAyNiAhYnBmX3BzZXVkb19jYWxsKGluc24pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmICghZW52LVxcdTAwM2VicGZfY2FwYWJsZSkge1xcbkBAIC0yODYzLDExICsyODYyLDcgQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSB8fCBicGZfcHNldWRvX2NhbGwoaW5zbikpXFxuLVxcdFxcdFxcdHJldCA9IGFkZF9zdWJwcm9nKGVudiwgaSArIGluc24tXFx1MDAzZWltbSArIDEpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJldCA9IGJwZl9hZGRfa2Z1bmNfY2FsbChlbnYsIGluc24tXFx1MDAzZWltbSwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4tXFxuK1xcdFxcdHJldCA9IGFkZF9zdWJwcm9nKGVudiwgaSArIGluc24tXFx1MDAzZWltbSArIDEpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbkBAIC0yOTA1LDYgKzI5MDAsMjggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYWRkX2tmdW5jcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbitcXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xcbitcXHRcXHRpZiAoIWJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoIWVudi1cXHUwMDNlYnBmX2NhcGFibGUpIHtcXG4rXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgZm9yIENBUF9CUEYgYW5kIENBUF9TWVNfQURNSU5cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBicGZfYWRkX2tmdW5jX2NhbGwoZW52LCBpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XFxuQEAgLTEwODkyLDkgKzEwOTA5LDE2IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmXFxuIFxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19yZWZjb3VudGVkX2twdHJcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbit7XFxuK1xcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYV9fbnVsbGFibGVcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX251bGxhYmxlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbiB7XFxuLVxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19udWxsYWJsZVxcXCIpO1xcbitcXHRyZXR1cm4gIWlzX2tmdW5jX2FyZ19hcmVuYV9udWxsYWJsZShidGYsIGFyZykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX251bGxhYmxlXFxcIik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19ub25vd25fYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG5AQCAtMTA5MTIsNiArMTA5MzYsMTIgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2lycV9mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbVxcbiBcXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9faXJxX2ZsYWdcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FyZW5hKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbit7XFxuK1xcdHJldHVybiBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoYnRmLCBhcmcpIHx8XFxuK1xcdCAgICAgICBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19hcmVuYVxcXCIpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKm5hbWUpXFxuQEAgLTExMTMyLDYgKzExMTYyLDcgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xcbiBcXHRLRl9BUkdfUFRSX1RPX0lSUV9GTEFHLFxcbiBcXHRLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssXFxuIFxcdEtGX0FSR19QVFJfVE9fVEFTS19XT1JLLFxcbitcXHRLRl9BUkdfUFRSX1RPX0FSRU5BLFxcbiB9O1xcbiBcXG4gZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbkBAIC0xMTQxNyw3ICsxMTQ0OCw2IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuIFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4tXFxuIFxcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cXHUwMDNlYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gXFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtXFx1MDAzZWJ0ZiwgcmVmX3QtXFx1MDAzZW5hbWVfb2ZmKTtcXG4gXFxuQEAgLTExNDY2LDcgKzExNDk2LDI5IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuIFxcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xcbiBcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbiBcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XFxuLVxcdGVsc2UgaWYgKGFyZyArIDEgXFx1MDAzYyBuYXJncyBcXHUwMDI2XFx1MDAyNlxcbitcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfYXJlbmEobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSkge1xcbitcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VmdW5jX25hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmICghZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXHRcXFwiJXMgYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocmVnX2Zyb21fYXJnbm8oYXJnbm8pIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEJvdGggc3VmZml4ZXMgYWNjZXB0IGEgY29uc3RhbnQgemVyby4gVGhlIGZ1bmN0aW9uIG1vZGVsIGRldGVybWluZXNcXG4rXFx0XFx0ICogd2hldGhlciB0aGUgSklUIHJlYmFzZXMgaXQgdG8gdGhlIGFyZW5hIGJhc2Ugb3IgcHJlc2VydmVzIE5VTEwuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQVJFTkEgfCBQVFJfTUFZQkVfTlVMTDtcXG4rXFx0fSBlbHNlIGlmIChhcmcgKyAxIFxcdTAwM2MgbmFyZ3MgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkgfHxcXG4gXFx0XFx0ICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkpKSB7XFxuIFxcdFxcdGlmICghYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgXFx1MDAyNlxcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMTIxNjAsNyArMTIyMTIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xcbiBcXG4gXFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSBcXHUwMDI2XFx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbaV0pKSB7XFxuK1xcdFxcdCAgICAhdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbkBAIC0xMjIxMyw2ICsxMjI2NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19JUlFfRkxBRzpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s6XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19BUkVOQTpcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19EWU5QVFI6XFxuIFxcdFxcdFxcdGFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7XFxuQEAgLTEyMjc5LDYgKzEyMzMyLDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZXJldF9idGZfaWQgID0gcmV0O1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQVJFTkE6XFxuK1xcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgIT0gUFRSX1RPX0FSRU5BIFxcdTAwMjZcXHUwMDI2IHJlZy1cXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ6XFxuIFxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MpKSB7XFxuIFxcdFxcdFxcdFxcdGlmICghaXNfYnBmX29ial9kcm9wX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpKSB7XFxuQEAgLTE4ODA4LDEwICsxODg2OCwyMSBAQCBpbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXHRyZXR1cm4gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjdHhfYXJnX2luZm8gPyAwIDogLUVOT01FTTtcXG4gfVxcbiBcXG4rYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjdHhfYXJnX2luZm9fc2l6ZTsgaSsrKVxcbitcXHRcXHRpZiAoYmFzZV90eXBlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY3R4X2FyZ19pbmZvW2ldLnJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICpmdW5jX3Byb3RvO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2M7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuQEAgLTE4ODkwLDEwICsxODk2MSwyMyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3Rfb3BzX2Rlc2MtXFx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudDsgaSsrKSB7XFxuLVxcdFxcdGlmIChzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mb1tpXS5yZWZjb3VudGVkKSB7XFxuK1xcdGFyZ19pbmZvID0gXFx1MDAyNnN0X29wc19kZXNjLVxcdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZ19pbmZvLVxcdTAwM2VjbnQ7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXFx1MDAyNmFyZ19pbmZvLVxcdTAwM2VpbmZvW2ldO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXJlZmNvdW50ZWQpXFxuIFxcdFxcdFxcdGhhc19yZWZjb3VudGVkX2FyZyA9IHRydWU7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoYmFzZV90eXBlKGluZm8tXFx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcXG4rXFx0XFx0XFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWFyZW5hKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiYXJlbmEgYXJndW1lbnQgb2YgJXMgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0bW5hbWUpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTE4OTE0LDggKzE4OTk4LDcgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9mdW5jX25hbWUgPSBtbmFtZTtcXG4gXFx0ZW52LVxcdTAwM2VvcHMgPSBzdF9vcHMtXFx1MDAzZXZlcmlmaWVyX29wcztcXG4gXFxuLVxcdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uaW5mbyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdF9vcHNfZGVzYy1cXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF0uY250KTtcXG4rXFx0cmV0dXJuIGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHByb2csIGFyZ19pbmZvLVxcdTAwM2VpbmZvLCBhcmdfaW5mby1cXHUwMDNlY250KTtcXG4gfVxcbiAjZGVmaW5lIFNFQ1VSSVRZX1BSRUZJWCBcXFwic2VjdXJpdHlfXFxcIlxcbiBcXG5AQCAtMTkxNzksNiArMTkyNjIsMTcgQEAgaW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuIFxcdFxcdFxcdGJwZl9sb2cobG9nLCBcXFwiU3VicHJvZyAlcyBkb2Vzbid0IGV4aXN0XFxcXG5cXFwiLCB0bmFtZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lIGNvbnZlcnRzIGFyZW5hIGFyZ3VtZW50c1xcbitcXHRcXHQgKiBiZWZvcmUgaW52b2tpbmcgaXRzIHByb2dyYW0uIEEgdHJhY2luZyBwcm9ncmFtIGF0dGFjaGVkIHRvIHRoZVxcbitcXHRcXHQgKiBtYWluIHByb2dyYW0gd291bGQgc2VlIHRoZSBjb252ZXJ0ZWQgb2Zmc2V0IGFzIGEgcmVndWxhciBCVEZcXG4rXFx0XFx0ICogcG9pbnRlci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChwcm9nX3RyYWNpbmcgXFx1MDAyNlxcdTAwMjYgc3VicHJvZyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyh0Z3RfcHJvZykpIHtcXG4rXFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJDYW5ub3QgdHJhY2UgYSB0YXJnZXQgd2l0aCBhcmVuYSBjb250ZXh0IGFyZ3VtZW50c1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAoYXV4LVxcdTAwM2VmdW5jIFxcdTAwMjZcXHUwMDI2IGF1eC1cXHUwMDNlZnVuY1tzdWJwcm9nXS1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fY2IpIHtcXG4gXFx0XFx0XFx0YnBmX2xvZyhsb2csXFxuIFxcdFxcdFxcdFxcdFxcXCIlcyBwcm9ncmFtcyBjYW5ub3QgYXR0YWNoIHRvIGV4Y2VwdGlvbiBjYWxsYmFja1xcXFxuXFxcIixcXG5AQCAtMjAyNjksMTEgKzIwMzYzLDEzIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZW52LVxcdTAwM2VleHBsb3JlZF9zdGF0ZXNbaV0pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZW52LVxcdTAwM2VmcmVlX2xpc3QpO1xcbiBcXG4tXFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xcbitcXHQvKiBQcmVwYXJlIEJURiBhbmQgZnVuY19pbmZvIG5lZWRlZCB0byBkaXNjb3ZlciBhbGwgc3VicHJvZ3JhbXMuICovXFxuK1xcdHJldCA9IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuIFxcbi1cXHRyZXQgPSBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoZW52KTtcXG4rXFx0LyogRGlzY292ZXIgYWxsIHN1YnByb2dyYW1zIGJlZm9yZSB2YWxpZGF0aW5nIHRoZWlyIGxheW91dCBhbmQgQlRGLiAqL1xcbitcXHRyZXQgPSBhZGRfc3VicHJvZ3MoZW52KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gc2tpcF9mdWxsX2NoZWNrO1xcbiBcXG5AQCAtMjAyODEsMTQgKzIwMzc3LDIxIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuIFxcbitcXHQvKiBWYWxpZGF0ZSBCVEYgYWdhaW5zdCB0aGUgY29tcGxldGUgc3VicHJvZ3JhbSBsYXlvdXQgYW5kIGFwcGx5IENPLVJFLiAqL1xcbiBcXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHNraXBfZnVsbF9jaGVjaztcXG4gXFxuK1xcdC8qIFZhbGlkYXRlIGluc3RydWN0aW9ucyBhbmQgcmVzb2x2ZSB0aGUgcHJvZ3JhbSdzIHJlZmVyZW5jZWQgcmVzb3VyY2VzLiAqL1xcbiBcXHRyZXQgPSBjaGVja19hbmRfcmVzb2x2ZV9pbnNucyhlbnYpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuIFxcbitcXHQvKiBCdWlsZCBrZnVuYyBwcm90b3R5cGVzIGFmdGVyIHJlc29sdmluZyBwcm9ncmFtIHJlc291cmNlcy4gKi9cXG4rXFx0cmV0ID0gYWRkX2tmdW5jcyhlbnYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XFxuK1xcbiBcXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4KSkge1xcbiBcXHRcXHRyZXQgPSBicGZfcHJvZ19vZmZsb2FkX3ZlcmlmaWVyX3ByZXAoZW52LVxcdTAwM2Vwcm9nKTtcXG4gXFx0XFx0aWYgKHJldClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzIzZDcwN2M1NDNmYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbkBAIC0wLDAgKzEsNzQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInN0cnVjdF9vcHNfYXJlbmEuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFxcXCJcXG4rXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuKy8qXFxuKyAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXFxuKyAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXJlbmFfYXJnKHZvaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG4rXFx0c3RydWN0IHN0cnVjdF9vcHNfYXJlbmEgKnNrZWw7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRza2VsID0gc3RydWN0X29wc19hcmVuYV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bGluayA9IGJwZl9tYXBfX2F0dGFjaF9zdHJ1Y3Rfb3BzKHNrZWwtXFx1MDAzZW1hcHMudGVzdG1vZF9hcmVuYSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYXR0YWNoX3N0cnVjdF9vcHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy50cmlnZ2VyKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dG9wdHMpO1xcbitcXHRBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW5cXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXFxcInRyaWdnZXJfcmV0dmFsXFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXHRzdHJ1Y3Rfb3BzX2FyZW5hX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBBIHByb2dyYW0gd2l0aCBubyBhcmVuYSBjYW5ub3QgYXR0YWNoIHRvIGEgbWVtYmVyIHdpdGggYW4gX19hcmVuYVxcbisgKiBhcmd1bWVudC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGFyZW5hX2FyZ19mYWlsKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHN0cnVjdF9vcHNfYXJlbmFfZmFpbCAqc2tlbDtcXG4rXFxuK1xcdHNrZWwgPSBzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKEFTU0VSVF9FUlJfUFRSKHNrZWwsIFxcXCJzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3RydWN0X29wc19hcmVuYV9mYWlsX19kZXN0cm95KHNrZWwpO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rLypcXG4rICogU2VyaWFsaXplZCBiZWNhdXNlIGl0IGF0dGFjaGVzIHRoZSBzaW5nbGV0b24gYnBmX3Rlc3Rtb2Rfb3BzMywgd2hpY2hcXG4rICogdGVzdF9zdHJ1Y3Rfb3BzX3ByaXZhdGVfc3RhY2sgYWxzbyBhdHRhY2hlczsgcmVnaXN0ZXJpbmcgaXQgdHdpY2UgZmFpbHNcXG4rICogd2l0aCAtRUVYSVNULlxcbisgKi9cXG4rdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxcbitcXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hXFxuK1xcdCAqIGFyZ3VtZW50c1xcXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxcbitcXHQgKi9cXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2FyZ1xcXCIpKVxcbitcXHRcXHRhcmVuYV9hcmcoKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2FyZ19mYWlsXFxcIikpXFxuK1xcdFxcdGFyZW5hX2FyZ19mYWlsKCk7XFxuKyNlbHNlXFxuK1xcdHRlc3RfX3NraXAoKTtcXG4rI2VuZGlmXFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5pbmRleCBiNzliYWZjYTY4ZjdhLi4xMTBhMzNiNmUxYzI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuQEAgLTIsNiArMiw4IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcImFyZW5hX2tmdW5jLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImFyZW5hX2tmdW5jX2ppdC5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJjYXBfaGVscGVycy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYWxpZ24uc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYW5kLnNrZWwuaFxcXCJcXG5AQCAtMTYxLDYgKzE2MywxNSBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdHNfYXV4KGNvbnN0IGNoYXIgKnNrZWxfbmFtZSxcXG4gXFxuICNkZWZpbmUgUlVOKHNrZWwpIHJ1bl90ZXN0c19hdXgoI3NrZWwsIHNrZWwjI19fZWxmX2J5dGVzLCBOVUxMKVxcbiBcXG4rLypcXG4rICogVGhlIHRlc3Qga2Z1bmNzIGxpdmUgaW4gYnBmX3Rlc3Rtb2QuIFJlc29sdmluZyBrZnVuY3MgYWdhaW5zdCBtb2R1bGVcXG4rICogQlRGcyBuZWVkcyBDQVBfU1lTX0FETUlOLCBzbyBydW4gd2l0aCBmdWxsIGNhcGFiaWxpdGllcyBpbnN0ZWFkIG9mXFxuKyAqIHRocm91Z2ggdGhlIHZlcmlmaWVyIHRlc3RzJyBjYXBhYmlsaXR5LXJlc3RyaWN0ZWQgcnVubmVyLlxcbisgKi9cXG4rdm9pZCB0ZXN0X2FyZW5hX2tmdW5jKHZvaWQpICAgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKGFyZW5hX2tmdW5jKTsgfVxcbitcXG4rdm9pZCB0ZXN0X2FyZW5hX2tmdW5jX2ppdCh2b2lkKSAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKGFyZW5hX2tmdW5jX2ppdCk7IH1cXG4rXFxuIHZvaWQgdGVzdF92ZXJpZmllcl9hbGlnbih2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9hbGlnbik7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2FuZCh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2FuZCk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2FyZW5hKHZvaWQpICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2FyZW5hKTsgfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNmMzODJjZTgxYWY2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuQEAgLTAsMCArMSwyNjAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0LyogcGFnZSAwIGhvc3RzIHRoZSBhcmVuYSBnbG9iYWwsIHBhZ2UgMSBpcyBmb3IgYWxsb2NhdGlvbnMgKi9cXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4rfSBhcmVuYSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbisvKlxcbisgKiBPY2N1cGllcyBwYWdlIDAgc28gbm8gYWxsb2NhdGlvbiBsYW5kcyBhdCBhcmVuYSBvZmZzZXQgMCwgd2hpY2ggdGhlXFxuKyAqIG51bGxhYmxlIHRlc3RzIGJlbG93IG11c3QgYmUgYWJsZSB0byB0ZWxsIGFwYXJ0IGZyb20gTlVMTC5cXG4rICovXFxuK3U2NCBfX2FyZW5hIGFyZW5hX3BhZDtcXG4rXFxuKy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xcbit2b2xhdGlsZSB1NjQgc3Rhc2g7XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdC8qIFBUUl9UT19BUkVOQSBhcmd1bWVudCAqL1xcbitcXHQqdmFsID0gNDE7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdC8qIHRoZSBsb3cgMzIgYml0cyBhcyBhIHNjYWxhciAqL1xcbitcXHRzdGFzaCA9ICh1MzIpKHU2NCl2YWw7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xcbitcXHRpZiAocmV0ICE9IDQyIHx8ICp2YWwgIT0gNDMpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXG4rXFx0LyogdGhlIGZ1bGwgdXNlciBhZGRyZXNzIGFzIGEgc2NhbGFyICovXFxuK1xcdHN0YXNoID0gKHU2NCl2YWw7XFxuK1xcdGJwZl9hZGRyX3NwYWNlX2Nhc3Qoc3Rhc2gsIDEsIDApO1xcbitcXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcXG4rXFx0aWYgKHJldCAhPSA0MyB8fCAqdmFsICE9IDQ0KVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogUGluIHRoZSByZWJhc2Ugc2VtYW50aWNzIHVzaW5nIHRoZSBjYXB0dXJlIGtmdW5jcywgd2hpY2ggcmV0dXJuIHRoZSByYXdcXG4rICogYXJndW1lbnQgdmFsdWU6IF9fYXJlbmEgcmViYXNlcyB1bmNvbmRpdGlvbmFsbHksIHNvIHplcm8gbG93IDMyIGJpdHNcXG4rICogYXJyaXZlIGFzIHRoZSBhcmVuYSBrZXJuZWwgYmFzZSwgd2hpbGUgX19hcmVuYV9fbnVsbGFibGUgdHVybnMgdGhlbSBpbnRvXFxuKyAqIE5VTEwuXFxuKyAqL1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcdHU2NCBiYXNlLCBvZmY7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRiYXNlID0gYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KE5VTEwpO1xcbitcXHRpZiAoIWJhc2UpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXG4rXFx0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgY29udHJpYnV0ZSAqL1xcbitcXHRzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDtcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpICE9IGJhc2UpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXG4rXFx0b2ZmID0gKHUzMikodTY0KXZhbDtcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICsgb2ZmKVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoTlVMTCkgIT0gMClcXG4rXFx0XFx0cmV0dXJuIDU7XFxuK1xcbitcXHRzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDtcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopc3Rhc2gpICE9IDApXFxuK1xcdFxcdHJldHVybiA2O1xcbitcXG4rXFx0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICsgb2ZmKVxcbitcXHRcXHRyZXR1cm4gNztcXG4rXFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGFyZW5hX2FyZ19udWxsYWJsZSh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcdHU2NCByZXQ7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHQqdmFsID0gNDE7XFxuK1xcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QoTlVMTCkgIT0gMHhkZWFkYmVlZilcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXFxuK3tcXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHR2YWxbMF0gPSAxO1xcbitcXHR2YWxbMV0gPSAyO1xcbitcXHR2YWxbMl0gPSA0O1xcbitcXHR2YWxbM10gPSA4O1xcbitcXHR2YWxbNF0gPSAxNjtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXFx1MDAyNnZhbFswXSwgKHU2NCAqKVxcdTAwMjZ2YWxbMV0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICAodTY0ICopXFx1MDAyNnZhbFsyXSwgKHU2NCAqKVxcdTAwMjZ2YWxbM10sXFxuK1xcdFxcdFxcdFxcdCAgICAgICAodTY0ICopXFx1MDAyNnZhbFs0XSkgIT0gMzEpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVxcdTAwMjZ2YWxbMF0sICh1NjQgKilcXHUwMDI2dmFsWzFdLFxcbitcXHRcXHRcXHRcXHQgICAgICAgKHU2NCAqKVxcdTAwMjZ2YWxbMl0sICh1NjQgKilcXHUwMDI2dmFsWzNdLCBOVUxMKSAhPSAxNSlcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxcbit7XFxuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxcbitcXHR1NjQgX19hcmVuYSAqdmFsO1xcbitcXG4rXFx0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0dmFsWzBdID0gNztcXG4rXFx0dmFsWzFdID0gNTtcXG4rXFxuK1xcdGlmIChicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCgodTY0ICopXFx1MDAyNnZhbFswXSwgTlVMTCkgIT0gNylcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcbitcXHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVxcdTAwMjZ2YWxbMF0sICh1NjQgKilcXHUwMDI2dmFsWzFdKSAhPSAxMilcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxcbit7XFxuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxcbitcXHR1NjQgX19hcmVuYSAqdmFsO1xcbitcXG4rXFx0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0c3Rhc2ggPSAodTY0KXZhbCArIFBBR0VfU0laRTtcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJhcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXFwiKVxcbitpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcXG4re1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKTEpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ZhaWx1cmUgX19tc2coXFxcImlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXFxcIilcXG4raW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcXG4re1xcbitcXHR1NjQgYnVmID0gMDtcXG4rXFxuK1xcdC8qIHVzZSB0aGUgYXJlbmEgc28gdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBhcmVuYSBwcmVzZW5jZSBjaGVjayAqL1xcbitcXHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoXFx1MDAyNmJ1Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XFxcIilcXG4raW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KDEsIDIsIDMsIDQsIDUsICh1NjQgKikxKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2Rlc2NyaXB0aW9uKFxcXCJhcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3RcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jOWI5MTg2NjI2MTYyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xcbkBAIC0wLDAgKzEsOTggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rLypcXG4rICogVmVyaWZ5IHRoZSBKSVQtZW1pdHRlZCByZWJhc2Ugc2VxdWVuY2VzIGZvciBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZVxcbisgKiBrZnVuYyBhcmd1bWVudHMuIFRoZSBjYXB0dXJlIGtmdW5jcyB0YWtlIHRoZSBhcmd1bWVudCB3aXRob3V0XFxuKyAqIGRlcmVmZXJlbmNpbmcgaXQsIHNvIHRoZXNlIHRlc3RzIHBpbiBvbmx5IHRoZSBlbWl0dGVkIGNvZGUuXFxuKyAqL1xcbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfZXhwZXJpbWVudGFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXFwiXFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuKy8qIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBzY2FsYXIgcmVsb2FkcyBiZWxvdyAqL1xcbit2b2xhdGlsZSB1NjQgc3Rhc2g7XFxuK1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92bFxcdCVlZGksICVlZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkaVxcXCIpXFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNhbGxxXFx0e3suKn19XFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3Rhc2ggPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopc3Rhc2gpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JWVkaSwgJWVkaVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHRlc3RsXFx0JWVkaSwgJWVkaVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGplXFx0TDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkaVxcXCIpXFxuK19faml0ZWQoXFxcIkwwOlxcdGNhbGxxXFx0e3suKn19XFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0YnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2FyY2hfeDg2XzY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWRpLCAlZWRpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyZGlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JWVzaSwgJWVzaVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcnNpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92bFxcdCVlZHgsICVlZHhcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkeFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWN4LCAlZWN4XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyY3hcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHRlc3RsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGplXFx0TDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXI4XFxcIilcXG4rX19qaXRlZChcXFwiTDA6XFx0Y2FsbHFcXHR7ey4qfX1cXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxcbit7XFxuK1xcdHU2NCBfX2FyZW5hICp2YWw7XFxuK1xcbitcXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHR2YWxbMF0gPSAxO1xcbitcXHR2YWxbMV0gPSAyO1xcbitcXHR2YWxbMl0gPSA0O1xcbitcXHR2YWxbM10gPSA4O1xcbitcXHR2YWxbNF0gPSAxNjtcXG4rXFxuK1xcdGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcXHUwMDI2dmFsWzBdLCAodTY0ICopXFx1MDAyNnZhbFsxXSxcXG4rXFx0XFx0XFx0XFx0ICAgKHU2NCAqKVxcdTAwMjZ2YWxbMl0sICh1NjQgKilcXHUwMDI2dmFsWzNdLFxcbitcXHRcXHRcXHRcXHQgICAodTY0ICopXFx1MDAyNnZhbFs0XSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWYgLyogX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QgKi9cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmEwNGM3M2Q4ZDk2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxuQEAgLTAsMCArMSwxMTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfZXhwZXJpbWVudGFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XFxuK1xcdC8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFscywgcGFnZSAxIGlzIGZvciBhbGxvY2F0aW9ucyAqL1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuKy8qIGFsc28gYXNzb2NpYXRlcyB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGFyZW5hICovXFxuK3U2NCBfX2FyZW5hIGFyZW5hX3RvdWNoO1xcbisvKiByYXcgdmFsdWUgb2YgdGhlIGxhc3QgX19hcmVuYSBjdHggYXJndW1lbnQsIGNhcHR1cmVkIGJ5IHRlc3RfYXJlbmFfY2IgKi9cXG4rdTY0IF9fYXJlbmEgY2JfcHRyX3ZhbDtcXG4rXFxuK1NFQyhcXFwic3RydWN0X29wcy90ZXN0X2FyZW5hXFxcIilcXG4raW50IHRlc3RfYXJlbmFfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTtcXG4rXFxuK1xcdGFyZW5hX3RvdWNoKys7XFxuK1xcdGNiX3B0cl92YWwgPSBjdHhbMF07XFxuK1xcdCpwdHIgKz0gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXFxcIilcXG4raW50IHRlc3RfYXJlbmFfbnVsbGFibGVfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTtcXG4rXFxuK1xcdGFyZW5hX3RvdWNoKys7XFxuK1xcdGlmICghcHRyKVxcbitcXHRcXHRyZXR1cm4gMHhiZWU7XFxuK1xcdCpwdHIgKz0gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3RydWN0X29wcy90ZXN0X2FyZW5hX3N0YWNrXFxcIilcXG4raW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFs4XTtcXG4rXFxuK1xcdGFyZW5hX3RvdWNoKys7XFxuK1xcdC8qIHBpbiB0aGUgc2xvdCBsYXlvdXQ6IHRoZSBsZWFkaW5nIGFyZ3MgZmlsbCBjdHhbMF0uLmN0eFs3XSAqL1xcbitcXHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXFxuK1xcdFxcdHJldHVybiAweGJhZDtcXG4rXFx0KnB0ciArPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCIuc3RydWN0X29wcy5saW5rXFxcIilcXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcXG4rXFx0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXFxuK1xcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLFxcbitcXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcXG4rfTtcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCB0cmlnZ2VyKHZvaWQgKmN0eClcXG4re1xcbisjaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVClcXG4rXFx0dTY0IF9fYXJlbmEgKnZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdCp2YWwgPSA0MTtcXG4rXFx0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoKHU2NCAqKXZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHRpZiAoKnZhbCAhPSA0MilcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgY2FsbGJhY2sgbXVzdCBoYXZlIHNlZW4gZXhhY3RseSAodTMyKShrYWRkciAtIGtlcm5fdm1fc3RhcnQpLFxcbitcXHQgKiB3aGljaCBpcyB0aGUgYXJlbmEgb2Zmc2V0IG9mIHZhbCB3aXRoIHRoZSB1cHBlciAzMiBiaXRzIGNsZWFyLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNiX3B0cl92YWwgIT0gKHUzMikodTY0KXZhbClcXG4rXFx0XFx0cmV0dXJuIDQ7XFxuK1xcbitcXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSgodTY0ICopdmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIDU7XFxuK1xcdGlmICgqdmFsICE9IDQzKVxcbitcXHRcXHRyZXR1cm4gNjtcXG4rXFxuK1xcdC8qIE5VTEwgc3Vydml2ZXMgdGhlIG51bGxhYmxlIGtmdW5jIGFuZCB0aGUgdHJhbXBvbGluZSBhcyBOVUxMICovXFxuK1xcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKE5VTEwpO1xcbitcXHRpZiAocmV0ICE9IDB4YmVlKVxcbitcXHRcXHRyZXR1cm4gNztcXG4rXFxuK1xcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cXG4rXFx0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soKHU2NCAqKXZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiA4O1xcbitcXHRpZiAoKnZhbCAhPSA0NClcXG4rXFx0XFx0cmV0dXJuIDk7XFxuK1xcbitcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xYzBlYzcyN2Q2Mzc0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuY1xcbkBAIC0wLDAgKzEsMjAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxcIlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbisvKiBObyBhcmVuYSBpbiB0aGUgcHJvZ3JhbTogYXR0YWNoaW5nIHRvIHRlc3RfYXJlbmEgbXVzdCBiZSByZWplY3RlZC4gKi9cXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9ub19hcmVuYSh1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCIuc3RydWN0X29wcy5saW5rXFxcIilcXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xcbitcXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9ub19hcmVuYSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5pbmRleCBlYjBmOWI1ZTE4ZDg1Li4yOTYzYzI5Zjk2YmE1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuQEAgLTIzNyw2ICsyMzcsNTYgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfY29tbW9uX3Rlc3Qodm9pZClcXG4ge1xcbiB9XFxuIFxcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYSlcXG4re1xcbitcXHR1NjQgb2xkO1xcbitcXG4rXFx0b2xkID0gKnZhbF9fYXJlbmE7XFxuK1xcdCp2YWxfX2FyZW5hID0gb2xkICsgMTtcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCh1NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKVxcbit7XFxuK1xcdHU2NCBvbGQ7XFxuK1xcbitcXHRpZiAoIXZhbF9fYXJlbmFfX251bGxhYmxlKVxcbitcXHRcXHRyZXR1cm4gMHhkZWFkYmVlZjtcXG4rXFxuK1xcdG9sZCA9ICp2YWxfX2FyZW5hX19udWxsYWJsZTtcXG4rXFx0KnZhbF9fYXJlbmFfX251bGxhYmxlID0gb2xkICsgMTtcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCh1NjQgKnZhbF9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuICh1NjQpdmFsX19hcmVuYTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdCh1NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKVxcbit7XFxuK1xcdHJldHVybiAodTY0KXZhbF9fYXJlbmFfX251bGxhYmxlO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTY0ICpjX19hcmVuYSwgdTY0ICpkX19hcmVuYSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTY0ICplX19hcmVuYV9fbnVsbGFibGUpXFxuK3tcXG4rXFx0cmV0dXJuICphX19hcmVuYSArICpiX19hcmVuYSArICpjX19hcmVuYSArICpkX19hcmVuYSArXFxuK1xcdCAgICAgICAoZV9fYXJlbmFfX251bGxhYmxlID8gKmVfX2FyZW5hX19udWxsYWJsZSA6IDApO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dTY0ICpmX19hcmVuYSlcXG4re1xcbitcXHRyZXR1cm4gYSArIGIgKyBjICsgZCArIGUgKyAqZl9fYXJlbmE7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdCh1NjQgKmFfX2FyZW5hLCB1NjQgKmJfX2FyZW5hX19udWxsYWJsZSlcXG4re1xcbitcXHRyZXR1cm4gKmFfX2FyZW5hICsgKGJfX2FyZW5hX19udWxsYWJsZSA/ICpiX19hcmVuYV9fbnVsbGFibGUgOiAwKTtcXG4rfVxcbitcXG4gX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfZHlucHRyX3Rlc3Qoc3RydWN0IGJwZl9keW5wdHIgKnB0cixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfZHlucHRyICpwdHJfX251bGxhYmxlKVxcbiB7XFxuQEAgLTM0Nyw5ICszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSh1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSh1NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHU2NCBlLCB1NjQgZiwgdTY0IGcsIHU2NCBoLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XFxuIFxcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXFxuIFxcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXFxuK1xcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcXG4rXFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxcbitcXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpXFxuQEAgLTM2OCw2ICs0MzgsMjEgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKHZvaWQpXFxuIFxcdHN0X29wczMtXFx1MDAzZXRlc3RfMigpO1xcbiB9XFxuIFxcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiBzdF9vcHMzLVxcdTAwM2V0ZXN0X2FyZW5hKHB0cl9fYXJlbmEpO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSlcXG4re1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX19udWxsYWJsZSk7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuIHN0X29wczMtXFx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XFxuK31cXG4rXFxuIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7XFxuIFxcdGludCBhO1xcbiB9O1xcbkBAIC03NTUsNiArODQwLDEzIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90ZXN0bW9kX3NlcV9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX3ZhbHVlKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfbWVtX2xlbl9wYXNzMSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19keW5wdHJfdGVzdClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19uZXN0ZWRfYWNxdWlyZV9ub256ZXJvX29mZnNldF90ZXN0LCBLRl9BQ1FVSVJFKVxcbkBAIC03NzAsNiArODYyLDkgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX2N0eF9jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX2N0eF9yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSlcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XFxuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcbkBAIC0xMDYsNiArMTA2LDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xcbiBcXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xcbiBcXHRpbnQgKCp0ZXN0XzIpKHZvaWQpO1xcbitcXHQvKiBVc2VkIHRvIHRlc3QgYXJlbmEgcG9pbnRlciBhcmd1bWVudHMuICovXFxuK1xcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcXG4rXFx0aW50ICgqdGVzdF9hcmVuYV9udWxsYWJsZSkodTY0ICpwdHIpO1xcbitcXHQvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqL1xcbitcXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxcbitcXHRcXHRcXHRcXHR1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuaW5kZXggYzM2YmI5MTFkZWZhNy4uZGM3YzQwYmQxMjk5MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcbkBAIC05OCw2ICs5OCwxNiBAQCB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVsZWFzZShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCkgX19rc3ltO1xcbiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmVmKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XFxuIFxcbiB2b2lkIGJwZl9rZnVuY19jYWxsX3Rlc3RfbWVtX2xlbl9wYXNzMSh2b2lkICptZW0sIGludCBsZW4pIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KF9fdTY0ICp2YWxfX2FyZW5hKSBfX2tzeW07XFxuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KF9fdTY0ICp2YWxfX2FyZW5hKSBfX2tzeW07XFxuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9jYXBfbnVsbGFibGVfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoX191NjQgKmFfX2FyZW5hLCBfX3U2NCAqYl9fYXJlbmEsXFxuK1xcdFxcdFxcdFxcdCBfX3U2NCAqY19fYXJlbmEsIF9fdTY0ICpkX19hcmVuYSxcXG4rXFx0XFx0XFx0XFx0IF9fdTY0ICplX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcXG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsIF9fdTY0IGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgX191NjQgKmZfX2FyZW5hKSBfX2tzeW07XFxuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9taXhlZF90ZXN0KF9fdTY0ICphX19hcmVuYSwgX191NjQgKmJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xcbiBpbnQgKmJwZl9rZnVuY19jYWxsX3Rlc3RfZ2V0X3Jkd3JfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmR3cl9idWZfc2l6ZSkgX19rc3ltO1xcbiBpbnQgKmJwZl9rZnVuY19jYWxsX3Rlc3RfZ2V0X3Jkb25seV9tZW0oc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgKnAsIGNvbnN0IGludCByZG9ubHlfYnVmX3NpemUpIF9fa3N5bTtcXG4gaW50ICpicGZfa2Z1bmNfY2FsbF90ZXN0X2FjcV9yZG9ubHlfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmRvbmx5X2J1Zl9zaXplKSBfX2tzeW07XFxuQEAgLTExMSw2ICsxMjEsOSBAQCB1MzIgYnBmX2tmdW5jX2NhbGxfdGVzdF9zdGF0aWNfdW51c2VkX2FyZyh1MzIgYXJnLCB1MzIgdW51c2VkKSBfX2tzeW07XFxuICNlbmRpZlxcbiBcXG4gdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4gXFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcXG4gXFx0XFx0XFx0XFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNjo0My4wODAwMzI5MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NzA4OTg4ODg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcF9hcmVuYV9iYXNlXCIsXG4gICAgXCJicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCIsXG4gICAgXCJicGZfc3RydWN0X29wc19kZXNjX2luaXRcIixcbiAgICBcImJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9cIixcbiAgICBcImJ0Zl9jdHhfYWNjZXNzXCIsXG4gICAgXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgcGFzc2luZyBhcmVuYSBwb2ludGVycyB0byBCUEYga2Z1bmNzIGFuZCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrcy4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWNvZ25pemUgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9fbnVsbGFibGVgIGFubm90YXRpb25zLCBhbmQgdXBkYXRlcyB0aGUgeDg2IEJQRiBKSVQgYW5kIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiB0byBwcm9wZXJseSByZWJhc2UgdGhlc2UgcG9pbnRlcnMgdG8gdGhlIGtlcm5lbCdzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjE1MjNmZTQ3MTRmOWNmYTQyZGM3YjgwYTA2ODc1YTZiOTY0Zjk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAyMjoyNjo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5pbmRleCBjYmRlODZkMDgyY2NlLi5jMDQ0NjU5Yjc2ODkxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTI3OCw2ICsyNzgsNDMgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgfVxuIFxuKzIuMy44IF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlIEFubm90YXRpb25zXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbitCb3RoIGFubm90YXRpb25zIGluZGljYXRlIHRoYXQgdGhlIHBvaW50ZXIgYXJndW1lbnQgcG9pbnRzIGludG8gdGhlXG4rY2FsbGluZyBwcm9ncmFtJ3MgYXJlbmEuIFRoZSBKSVQgcmViYXNlcyB0aGUgdmFsdWUgYXQgdGhlIGNhbGwgc2l0ZSBzb1xuK3RoZSBrZnVuYyByZWNlaXZlcyBhIGRpcmVjdGx5IGRlcmVmZXJlbmNlYWJsZSBrZXJuZWwgYWRkcmVzcywgc3ViamVjdCB0b1xuK3RoZSBhY2Nlc3MgcnVsZXMgZGVzY3JpYmVkIGluIDpyZWY6YEJQRl9rZnVuY19hcmVuYV9hY2Nlc3NgIChhdCBtb3N0XG4rYGBHVUFSRF9TWiAvIDJgYCwgMzIgS2lCLCBwYXN0IHRoZSBwb2ludGVyIGluIGEgc2luZ2xlIHVuY2hlY2tlZCBhY2Nlc3MpLlxuK1xuK1dpdGggYGBfX2FyZW5hYGAgdGhlIHJlYmFzZSBpcyB1bmNvbmRpdGlvbmFsIGFuZCB0aGUgYXJndW1lbnQgaXMgbmV2ZXJcbitOVUxMOiBhIHZhbHVlIHdob3NlIGxvd2VyIDMyIGJpdHMgYXJlIHplcm8gYXJyaXZlcyBhcyB0aGUgYXJlbmEgYmFzZVxuK2FkZHJlc3MgKGFyZW5hIG9mZnNldCAwKS4gVGhlIGtmdW5jIG11c3Qgbm90IGNoZWNrIHRoZSBhcmd1bWVudCBmb3IgTlVMTC5cbitXaXRoIGBgX19hcmVuYV9fbnVsbGFibGVgYCBzdWNoIGEgdmFsdWUgYXJyaXZlcyBhcyBOVUxMIGluc3RlYWQgYW5kIHRoZVxuK2tmdW5jIG11c3QgY2hlY2sgYmVmb3JlIGRlcmVmZXJlbmNpbmcuXG4rXG4rQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4rXG4rICAgICAgICBfX2JwZl9rZnVuYyBpbnQgYnBmX3Byb2Nlc3NfaXRlbShzdHJ1Y3QgaXRlbSAqaXRlbV9fYXJlbmEpXG4rICAgICAgICB7XG4rICAgICAgICAuLi5cbisgICAgICAgIH1cbitcbitDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4rYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxuK3Byb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXG4rbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4rXG4rVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YlxuK2Z1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZVxuK2tlcm5lbCBjYWxsZXIgcGFzc2VzIHRoZSBrZXJuZWwgYXJlbmEgYWRkcmVzcyBhbmQgdGhlIHRyYW1wb2xpbmUgY29udmVydHNcbitpdCB3aGlsZSBzYXZpbmcgdGhlIGFyZ3VtZW50cywgc28gdGhlIGNhbGxiYWNrIHJlY2VpdmVzIGFuIGFyZW5hIHBvaW50ZXJcbitpdCBjYW4gZGVyZWZlcmVuY2UgZGlyZWN0bHkuIFdpdGggYGBfX2FyZW5hYGAgdGhlIGtlcm5lbCBjYWxsZXIgbXVzdCBub3RcbitwYXNzIE5VTEwuIFdpdGggYGBfX2FyZW5hX19udWxsYWJsZWBgIGEgTlVMTCBrZXJuZWwgcG9pbnRlciBhcnJpdmVzIGFzIE5VTEwuXG4rSG93ZXZlciwgdGhlcmUgaXMgbm8gb2JsaWdhdGlvbiB0byBwcm92ZSB0byB0aGUgdmVyaWZpZXIgdGhhdCBzdWNoIGEgcG9pbnRlciBpc1xuK25vbi1OVUxMIGJlZm9yZSB1c2UsIGluLWxpbmUgd2l0aCBleGlzdGluZyBzZW1hbnRpY3Mgb2YgYXJlbmEgcG9pbnRlcnMgdXNlZCBpblxuK2EgcHJvZ3JhbSAob3Igb2J0YWluZWQgZnJvbSBhbnkgb3RoZXIgc291cmNlKS5cbitcbiAuLiBfQlBGX2tmdW5jX25vZGVmOlxuIFxuIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb25cbkBAIC01MTUsNiArNTUyLDggQEAgSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgc3VjaCByZXF1aXJlbWVudHMsIHRoZSB2ZXJpZmllciB3aWxsIGVuZm9yY2Ugc3RyaWN0XG4gUFRSX1RPX0JURl9JRCB0eXBlIG1hdGNoaW5nIGlmIHR3byB0eXBlcyBoYXZlIHRoZSBleGFjdCBzYW1lIG5hbWUsIHdpdGggb25lXG4gYmVpbmcgc3VmZml4ZWQgd2l0aCBgYF9fX2luaXRgYC5cbiBcbisuLiBfQlBGX2tmdW5jX2FyZW5hX2FjY2VzczpcbitcbiAyLjggQWNjZXNzaW5nIGFyZW5hIG1lbW9yeSB0aHJvdWdoIGtmdW5jIGFyZ3VtZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCAwMWU3Y2U1NjljMWVkLi41YzVjMzJhYmEyMzk2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xNjc4LDYgKzE2NzgsNTAgQEAgc3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXG4rICogck4gPSBrZXJuX3ZtX3N0YXJ0ICsgKHUzMilyTiwgd2l0aCBSMTIgaG9sZGluZyBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlXG4rICogYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZCBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzXG4rICogYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW1pdHRlZCBieXRlcy5cbisgKi9cbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKipwcHJvZylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtO1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXHR1OCAqc3RhcnQgPSBwcm9nO1xuK1x0aW50IGk7XG4rXG4rXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChicGZfcHJvZywgaW5zbik7XG4rXHRpZiAoIWZtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbl90KGludCwgZm0tXHUwMDNlbnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XG4rXHRcdHU4IGZsYWdzID0gZm0tXHUwMDNlYXJnX2ZsYWdzW2ldO1xuK1x0XHR1MzIgcmVnID0gQlBGX1JFR18xICsgaTtcbitcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKFdBUk5fT05fT05DRSghYnBmX3Byb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0LyogbW92IGVOLCBlTjogdHJ1bmNhdGUgYW5kIGNsZWFyIHRoZSB1cHBlciAzMiBiaXRzICovXG4rXHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCBmYWxzZSwgcmVnLCByZWcpO1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7XG4rXHRcdFx0LyogdGVzdCBlTiwgZU47IGp6IG92ZXIgdGhlIDMtYnl0ZSBhZGQgKi9cbitcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xuK1x0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XG4rXHRcdFx0RU1JVDIoWDg2X0pFLCAzKTtcbitcdFx0fVxuK1x0XHQvKiBhZGQgck4sIHIxMiAqL1xuK1x0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcbitcdFx0RU1JVDIoMHgwMSwgYWRkXzJyZWcoMHhDMCwgcmVnLCBYODZfUkVHX1IxMikpO1xuK1x0fVxuK1xuK1x0KnBwcm9nID0gcHJvZztcbitcdHJldHVybiBwcm9nIC0gc3RhcnQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbiBcdFx0ICB1OCAqcndfaW1hZ2UsIGludCBvbGRwcm9nbGVuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgYm9vbCBqbXBfcGFkZGluZylcbiB7XG5AQCAtMjU4Myw2ICsyNjI3LDEyIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFx0XHRcdGlmICghaW1tMzIpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRpZiAoc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRcdGVyciA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhicGZfcHJvZywgaW5zbiwgXHUwMDI2cHJvZyk7XG4rXHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdFx0aXAgKz0gZXJyO1xuK1x0XHRcdH1cbiBcdFx0XHRpZiAocHJpdl9mcmFtZV9wdHIpIHtcbiBcdFx0XHRcdHB1c2hfcjkoXHUwMDI2cHJvZyk7XG4gXHRcdFx0XHRpcCArPSAyO1xuQEAgLTI5OTMsMTEgKzMwNDMsMzkgQEAgc3RhdGljIGludCBnZXRfbnJfdXNlZF9yZWdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSlcbiBcdHJldHVybiBucl91c2VkX3JlZ3M7XG4gfVxuIFxuKy8qXG4rICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheVxuKyAqIGludG8gdGhlIEJQRiBjdHgsIHJheCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLiBBIG51bGxhYmxlIGFyZ1xuKyAqIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGwgNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0XG4rICogc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGUgdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZFxuKyAqIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmEgcG9pbnRlciByZWdpc3RlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udih1OCAqKnBwcm9nLCB1MzIgc3JjX3JlZywgYm9vbCBudWxsYWJsZSwgdTMyIGJhc2VfbG8pXG4re1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXG4rXHRpZiAobnVsbGFibGUpIHtcbitcdFx0aWYgKHNyY19yZWcgIT0gQlBGX1JFR18wKVxuK1x0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLCB0cnVlLCBCUEZfUkVHXzAsIHNyY19yZWcpO1xuK1x0XHQvKiB0ZXN0IHJheCwgcmF4OyBqeiBvdmVyIHRoZSA1LWJ5dGUgc3ViICovXG4rXHRcdEVNSVQzKDB4NDgsIDB4ODUsIDB4QzApO1xuK1x0XHRFTUlUMihYODZfSkUsIDUpO1xuK1x0fSBlbHNlIGlmIChzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xuK1x0XHRlbWl0X21vdl9yZWcoXHUwMDI2cHJvZywgZmFsc2UsIEJQRl9SRUdfMCwgc3JjX3JlZyk7XG4rXHR9XG4rXHQvKiBzdWIgZWF4LCBiYXNlX2xvICovXG4rXHRFTUlUMV9vZmYzMigweDJELCBiYXNlX2xvKTtcbitcbitcdCpwcHJvZyA9IHByb2c7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbi1cdFx0ICAgICAgaW50IHN0YWNrX3NpemUsIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCB1MzIgZmxhZ3MpXG4rXHRcdCAgICAgIGludCBzdGFja19zaXplLCBib29sIGZvcl9jYWxsX29yaWdpbiwgdTMyIGZsYWdzLFxuK1x0XHQgICAgICB1NjQgYXJlbmFfYmFzZSlcbiB7XG4gXHRpbnQgYXJnX3JlZ3MsIGZpcnN0X29mZiA9IDAsIG5yX3JlZ3MgPSAwLCBucl9zdGFja19zbG90cyA9IDA7XG4gXHRib29sIHVzZV9qbXAgPSBicGZfdHJhbXBvbGluZV91c2Vfam1wKGZsYWdzKTtcbitcdGludCBzdGFja19hcmdzX29mZiA9ICh1c2Vfam1wIHx8IChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpKSA/IDE2IDogMjQ7XG4gXHRpbnQgaSwgajtcbiBcbiBcdC8qIFN0b3JlIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byBzdGFjay5cbkBAIC0zMDA2LDYgKzMwODQsOSBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csXG4gXHQgKiBtb3YgUVdPUkQgUFRSIFtyYnAtMHg4XSxyc2lcbiBcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19BUkdTKTsgaSsrKSB7XG4rXHRcdGJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSBcdTAwMjZcdTAwMjYgKG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRyk7XG4rXHRcdGJvb2wgbnVsbGFibGUgPSBtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4rXG4gXHRcdGFyZ19yZWdzID0gKG0tXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDg7XG4gXG4gXHRcdC8qIEFjY29yZGluZyB0byB0aGUgcmVzZWFyY2ggb2YgWW9uZ2hvbmcsIHN0cnVjdCBtZW1iZXJzXG5AQCAtMzAyOSwxNiArMzExMCwxOSBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3MoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnByb2csXG4gXHRcdFx0LyogY29weSBmdW5jdGlvbiBhcmd1bWVudHMgZnJvbSBvcmlnaW4gc3RhY2sgZnJhbWVcbiBcdFx0XHQgKiBpbnRvIGN1cnJlbnQgc3RhY2sgZnJhbWUuXG4gXHRcdFx0ICpcbi1cdFx0XHQgKiBUaGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgYXJndW1lbnRzIG9uLXN0YWNrXG4tXHRcdFx0ICogaXM6XG4tXHRcdFx0ICogICByYnAgKyA4KHB1c2ggcmJwKSArXG4tXHRcdFx0ICogICA4KHJldHVybiBhZGRyIG9mIG9yaWdpbiBjYWxsKSArXG4tXHRcdFx0ICogICA4KHJldHVybiBhZGRyIG9mIHRoZSBjYWxsZXIpXG4tXHRcdFx0ICogd2hpY2ggbWVhbnM6IHJicCArIDI0XG4rXHRcdFx0ICogVGhlIGFyZ3VtZW50cyBvbi1zdGFjayBzdGFydCBhYm92ZSB0aGUgc2F2ZWQgcmJwXG4rXHRcdFx0ICogYW5kIHRoZSByZXR1cm4gYWRkcmVzc2VzOiB0d28gcmV0dXJuIGFkZHJlc3Nlc1xuK1x0XHRcdCAqIChvcmlnaW4gY2FsbCBhbmQgY2FsbGVyKSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzXG4rXHRcdFx0ICogZW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCwgc28gcmJwICsgMjQsIGFuZFxuK1x0XHRcdCAqIGEgc2luZ2xlIG9uZSB3aGVuIGl0IGlzIGVudGVyZWQgd2l0aCBhIGptcCBvclxuK1x0XHRcdCAqIGNhbGxlZCBpbmRpcmVjdGx5LCBzbyByYnAgKyAxNi5cbiBcdFx0XHQgKi9cbiBcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBhcmdfcmVnczsgaisrKSB7XG4gXHRcdFx0XHRlbWl0X2xkeChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR19GUCxcbi1cdFx0XHRcdFx0IG5yX3N0YWNrX3Nsb3RzICogOCArIDE2ICsgKCF1c2Vfam1wKSAqIDgpO1xuK1x0XHRcdFx0XHQgbnJfc3RhY2tfc2xvdHMgKiA4ICsgc3RhY2tfYXJnc19vZmYpO1xuK1x0XHRcdFx0aWYgKGFyZW5hX2FyZylcbitcdFx0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihwcm9nLCBCUEZfUkVHXzAsIG51bGxhYmxlLFxuK1x0XHRcdFx0XHRcdFx0ICAgICh1MzIpYXJlbmFfYmFzZSk7XG4gXHRcdFx0XHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCxcbiBcdFx0XHRcdFx0IC1zdGFja19zaXplKTtcbiBcbkBAIC0zMDU5LDkgKzMxNDMsMTMgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuIFxuIFx0XHRcdC8qIGNvcHkgdGhlIGFyZ3VtZW50cyBmcm9tIHJlZ3MgaW50byBzdGFjayAqL1xuIFx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcbi1cdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCxcbi1cdFx0XHRcdFx0IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzLFxuLVx0XHRcdFx0XHQgLXN0YWNrX3NpemUpO1xuK1x0XHRcdFx0dTMyIHNyYyA9IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzO1xuK1xuK1x0XHRcdFx0aWYgKGFyZW5hX2FyZykge1xuK1x0XHRcdFx0XHRlbWl0X2FyZW5hX2FyZ19jb252KHByb2csIHNyYywgbnVsbGFibGUsICh1MzIpYXJlbmFfYmFzZSk7XG4rXHRcdFx0XHRcdHNyYyA9IEJQRl9SRUdfMDtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgc3JjLCAtc3RhY2tfc2l6ZSk7XG4gXHRcdFx0XHRzdGFja19zaXplIC09IDg7XG4gXHRcdFx0XHRucl9yZWdzKys7XG4gXHRcdFx0fVxuQEAgLTMzNTcsNiArMzQ0NSw3IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXHR2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7XG4gXHRpbnQgY29va2llX29mZiwgY29va2llX2NudDtcbiBcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xuK1x0dTY0IGFyZW5hX2Jhc2U7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFx0dTggKnByb2c7XG4gXHRib29sIHNhdmVfcmV0O1xuQEAgLTMzNjksNiArMzQ1OCw4IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXHRXQVJOX09OX09OQ0UoKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKGZsYWdzIFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XG4gXG4rXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKylcbiBcdFx0bnJfcmVncyArPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XG4gXG5AQCAtMzUwMyw3ICszNTk0LDcgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1pcF9vZmYsIChsb25nKWZ1bmNfYWRkcik7XG4gXHR9XG4gXG4tXHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncyk7XG4rXHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYsIGZhbHNlLCBmbGFncywgYXJlbmFfYmFzZSk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuIFx0XHQvKiBhcmcxOiBtb3YgcmRpLCBpbSAqL1xuQEAgLTM1NDUsNyArMzYzNiw3IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltXG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuIFx0XHRyZXN0b3JlX3JlZ3MobSwgXHUwMDI2cHJvZywgcmVnc19vZmYpO1xuLVx0XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MpO1xuK1x0XHRzYXZlX2FyZ3MobSwgXHUwMDI2cHJvZywgYXJnX3N0YWNrX29mZiwgdHJ1ZSwgZmxhZ3MsIDApO1xuIFxuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFgpIHtcbiBcdFx0XHQvKiBCZWZvcmUgY2FsbGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIGxvYWQgdGhlXG5AQCAtNDA0Niw2ICs0MTM3LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbit7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuIHtcbiBcdGlmICh0ZXh0X3Bva2VfY29weShkc3QsIHNyYywgbGVuKSA9PSBOVUxMKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3M2JhY2ZjNjQ0NGRmLi42OGZmNjY3ODdhZTFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTEyMTAsNiArMTIxMCwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2dfb2ZmbG9hZCB7XG4gLyogVGhlIGFyZ3VtZW50IGlzIHNpZ25lZC4gKi9cbiAjZGVmaW5lIEJURl9GTU9ERUxfU0lHTkVEX0FSR1x0XHRCSVQoMSlcbiBcbisvKiBUaGUgYXJndW1lbnQgaXMgYW4gYXJlbmEgcG9pbnRlci4gKi9cbisjZGVmaW5lIEJURl9GTU9ERUxfQVJFTkFfQVJHXHRcdEJJVCgyKVxuK1xuKy8qIFRoZSBhcmd1bWVudCBpcyBudWxsYWJsZS4gKi9cbisjZGVmaW5lIEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHXHRcdEJJVCgzKVxuK1xuIHN0cnVjdCBidGZfZnVuY19tb2RlbCB7XG4gXHR1OCByZXRfc2l6ZTtcbiBcdHU4IHJldF9mbGFncztcbkBAIC0xMjgzLDYgKzEyODksMTUgQEAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyB7XG4gXHRpbnQgbnJfbm9kZXM7XG4gfTtcbiBcbisvKlxuKyAqIFRoZSBhcmVuYSBiYXNlIGFnYWluc3Qgd2hpY2ggYSBzdHJ1Y3Rfb3BzIHRyYW1wb2xpbmUgY29udmVydHMgdGhlXG4rICogYXJndW1lbnRzIG1hcmtlZCB3aXRoIEJURl9GTU9ERUxfQVJFTkFfQVJHIHdoaWxlIHNhdmluZyB0aGVtIGludG8gdGhlIEJQRlxuKyAqIGN0eCwgY3R4W2FyZ10gPSAodTMyKShrYWRkciAtIGtlcm5fdm1fc3RhcnQpLiBaZXJvIHdoZW4gdGhlIHRyYW1wb2xpbmVcbisgKiBjb252ZXJ0cyBub3RoaW5nLlxuKyAqL1xuK3U2NCBicGZfdHJhbXBfYXJlbmFfYmFzZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4rXHRcdFx0IHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzKTtcbitcbiBzdHJ1Y3QgYnBmX3RyYW1wX3J1bl9jdHg7XG4gXG4gLyogRGlmZmVyZW50IHVzZSBjYXNlcyBmb3IgQlBGIHRyYW1wb2xpbmU6XG5AQCAtMjM1Miw2ICsyMzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYnBmX2ZzZXNzaW9uX2Nvb2tpZV9jbnQoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqbm9kZXMpXG4gXG4gaW50IGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqaW5mbywgdTMyIGNudCk7XG4rYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19DR1JPVVBfQlBGKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX0xTTSlcbiBpbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IGEyYTQwY2FjYTBhMGUuLmE5NTU1ZDE3ZmQ4ZWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTE3Nyw4ICsxMTc3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3VucGFja19rZXkodTY0IGtleSwgdTMyICpvYmpfaWQsIHUzMiAqYnRmX2lkKVxuIFx0XHQqYnRmX2lkID0ga2V5IFx1MDAyNiAweDdGRkZGRkZGO1xuIH1cbiBcbi1pbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xuK2ludCBicGZfcHJlcGFyZV9idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpO1xuIGludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cik7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDMyZDUyOTdjNTU3ZTUuLjM2Y2UzNDAzZmU1OTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTE4Myw2ICsxMTgzLDcgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpO1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKTtcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcbiBib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCk7XG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuaW5kZXggNGU3YTQ4YzAyYmU1Yy4uY2VkN2IxODI0NmE5NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuKysrIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5AQCAtMTQ3LDYgKzE0Nyw4IEBAIHZvaWQgYnBmX3N0cnVjdF9vcHNfaW1hZ2VfZnJlZSh2b2lkICppbWFnZSlcbiBcbiAjZGVmaW5lIE1BWUJFX05VTExfU1VGRklYIFwiX19udWxsYWJsZVwiXG4gI2RlZmluZSBSRUZDT1VOVEVEX1NVRkZJWCBcIl9fcmVmXCJcbisjZGVmaW5lIEFSRU5BX1NVRkZJWCBcIl9fYXJlbmFcIlxuKyNkZWZpbmUgQVJFTkFfTUFZQkVfTlVMTF9TVUZGSVggXCJfX2FyZW5hX19udWxsYWJsZVwiXG4gXG4gLyogUHJlcGFyZSBhcmd1bWVudCBpbmZvIGZvciBldmVyeSBudWxsYWJsZSBhcmd1bWVudCBvZiBhIG1lbWJlciBvZiBhXG4gICogc3RydWN0X29wcyB0eXBlLlxuQEAgLTE1OSw3ICsxNjEsNyBAQCB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX2ltYWdlX2ZyZWUodm9pZCAqaW1hZ2UpXG4gICogdG8gcHJvdmlkZSBhbiBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4LCB3aGljaCBpbiB0dXJuIHByb3ZpZGVzXG4gICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdXNlZCBieSB0aGUgdmVyaWZpZXIgdG8gY2hlY2sgdGhlIGFyZ3VtZW50cyBvZiB0aGVcbiAgKiBCUEYgc3RydWN0X29wcyBwcm9ncmFtIGFzc2lnbmVkIHRvIHRoZSBtZW1iZXIuIEhlcmUsIHdlIG9ubHkgY2FyZSBhYm91dFxuLSAqIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgbWFya2VkIGFzIF9fbnVsbGFibGUuXG4rICogdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBtYXJrZWQgYXMgX19udWxsYWJsZSwgX19yZWYgb3IgX19hcmVuYS5cbiAgKlxuICAqIFRoZSBhcnJheSBvZiBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4IGlzIGV2ZW50dWFsbHkgYXNzaWduZWQgdG9cbiAgKiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm8gb2YgQlBGIHN0cnVjdF9vcHMgcHJvZ3JhbXMgYW5kIHBhc3NlZCB0byB0aGVcbkBAIC0xNzIsMTAgKzE3NCwxMiBAQCBzdGF0aWMgaW50IHByZXBhcmVfYXJnX2luZm8oc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgICBjb25zdCBjaGFyICpzdF9vcHNfbmFtZSxcbiBcdFx0XHQgICAgY29uc3QgY2hhciAqbWVtYmVyX25hbWUsXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuY19wcm90bywgdm9pZCAqc3R1Yl9mdW5jX2FkZHIsXG4rXHRcdFx0ICAgIHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbW9kZWwsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm8pXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpzdHViX2Z1bmNfcHJvdG8sICpwb2ludGVkX3R5cGU7XG4tXHRib29sIGlzX251bGxhYmxlID0gZmFsc2UsIGlzX3JlZmNvdW50ZWQgPSBmYWxzZTtcbitcdGJvb2wgaXNfbnVsbGFibGUgPSBmYWxzZSwgaXNfcmVmY291bnRlZCA9IGZhbHNlLCBpc19hcmVuYSA9IGZhbHNlO1xuK1x0Ym9vbCBpc19hcmVuYV9udWxsYWJsZSA9IGZhbHNlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc3R1Yl9hcmdzLCAqYXJncztcbiBcdHN0cnVjdCBicGZfY3R4X2FyZ19hdXggKmluZm8sICppbmZvX2J1ZjtcbiBcdHUzMiBuYXJncywgYXJnX25vLCBpbmZvX2NudCA9IDA7XG5AQCAtMjI1LDI3ICsyMjksMzUgQEAgc3RhdGljIGludCBwcmVwYXJlX2FyZ19pbmZvKHN0cnVjdCBidGYgKmJ0ZixcbiBcdC8qIFByZXBhcmUgaW5mbyBmb3IgZXZlcnkgbnVsbGFibGUgYXJndW1lbnQgKi9cbiBcdGluZm8gPSBpbmZvX2J1ZjtcbiBcdGZvciAoYXJnX25vID0gMDsgYXJnX25vIFx1MDAzYyBuYXJnczsgYXJnX25vKyspIHtcbi1cdFx0LyogU2tpcCBhcmd1bWVudHMgdGhhdCBpcyBub3Qgc3VmZml4ZWQgd2l0aFxuLVx0XHQgKiBcIl9fbnVsbGFibGUgb3IgX19yZWZcIi5cbitcdFx0LypcbitcdFx0ICogU2tpcCBhcmd1bWVudHMgdGhhdCBhcmUgbm90IHN1ZmZpeGVkIHdpdGggXCJfX2FyZW5hX19udWxsYWJsZVwiLFxuK1x0XHQgKiBcIl9fYXJlbmFcIiwgXCJfX251bGxhYmxlXCIsIG9yIFwiX19yZWZcIi5cbiBcdFx0ICovXG4tXHRcdGlzX251bGxhYmxlID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxuLVx0XHRcdFx0XHRcdCAgICAgTUFZQkVfTlVMTF9TVUZGSVgpO1xuK1x0XHRpc19hcmVuYV9udWxsYWJsZSA9IGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSxcbitcdFx0XHRcdFx0XHRcdCAgIEFSRU5BX01BWUJFX05VTExfU1VGRklYKTtcbitcdFx0aXNfYXJlbmEgPSBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgXHUwMDI2c3R1Yl9hcmdzW2FyZ19ub10sIEFSRU5BX1NVRkZJWCk7XG4rXHRcdGlzX251bGxhYmxlID0gIWlzX2FyZW5hX251bGxhYmxlIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBcdTAwMjZzdHViX2FyZ3NbYXJnX25vXSwgTUFZQkVfTlVMTF9TVUZGSVgpO1xuIFx0XHRpc19yZWZjb3VudGVkID0gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIFx1MDAyNnN0dWJfYXJnc1thcmdfbm9dLFxuIFx0XHRcdFx0XHRcdCAgICAgICBSRUZDT1VOVEVEX1NVRkZJWCk7XG4gXG4tXHRcdGlmIChpc19udWxsYWJsZSlcbitcdFx0aWYgKGlzX2FyZW5hX251bGxhYmxlKVxuK1x0XHRcdHN1ZmZpeCA9IEFSRU5BX01BWUJFX05VTExfU1VGRklYO1xuK1x0XHRlbHNlIGlmIChpc19hcmVuYSlcbitcdFx0XHRzdWZmaXggPSBBUkVOQV9TVUZGSVg7XG4rXHRcdGVsc2UgaWYgKGlzX251bGxhYmxlKVxuIFx0XHRcdHN1ZmZpeCA9IE1BWUJFX05VTExfU1VGRklYO1xuIFx0XHRlbHNlIGlmIChpc19yZWZjb3VudGVkKVxuIFx0XHRcdHN1ZmZpeCA9IFJFRkNPVU5URURfU1VGRklYO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0ICovXG4tXHRcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0Zixcbi1cdFx0XHRcdFx0XHQgICAgYXJnc1thcmdfbm9dLnR5cGUsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmFyZ19idGZfaWQpO1xuLVx0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fFxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3N0cnVjdChwb2ludGVkX3R5cGUpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFNob3VsZCBiZSBhIHBvaW50ZXIgdG8gc3RydWN0LCBvciBhbnkgcG9pbnRlciBmb3IgX19hcmVuYSBvclxuK1x0XHQgKiBfX2FyZW5hX19udWxsYWJsZS5cbitcdFx0ICovXG4rXHRcdHBvaW50ZWRfdHlwZSA9IGJ0Zl90eXBlX3Jlc29sdmVfcHRyKGJ0ZiwgYXJnc1thcmdfbm9dLnR5cGUsIFx1MDAyNmFyZ19idGZfaWQpO1xuK1x0XHRpZiAoIXBvaW50ZWRfdHlwZSB8fCAoIWlzX2FyZW5hIFx1MDAyNlx1MDAyNiAhaXNfYXJlbmFfbnVsbGFibGUgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zdHJ1Y3QocG9pbnRlZF90eXBlKSkpIHtcbiBcdFx0XHRwcl93YXJuKFwic3R1YiBmdW5jdGlvbiAlcyBoYXMgJXMgdGFnZ2luZyB0byBhbiB1bnN1cHBvcnRlZCB0eXBlXFxuXCIsXG4gXHRcdFx0XHRzdHViX2ZuYW1lLCBzdWZmaXgpO1xuIFx0XHRcdGdvdG8gZXJyX291dDtcbkBAIC0yNjgsNyArMjgwLDE4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9hcmdfaW5mbyhzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdGluZm8tXHUwMDNlYnRmX2lkID0gYXJnX2J0Zl9pZDtcbiBcdFx0aW5mby1cdTAwM2VidGYgPSBidGY7XG4gXHRcdGluZm8tXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xuLVx0XHRpZiAoaXNfbnVsbGFibGUpIHtcbitcdFx0aWYgKGlzX2FyZW5hIHx8IGlzX2FyZW5hX251bGxhYmxlKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBCb3RoIHR5cGVzIGdldCBQVFJfVE9fQVJFTkEuIEluIHZlcmlmaWVyIHN0YXRlLFxuK1x0XHRcdCAqIFBUUl9UT19BUkVOQSBlbmNvbXBhc3NlcyBwb3RlbnRpYWwgTlVMTCB2YWx1ZXMsIGJ1dFxuK1x0XHRcdCAqIHdlIGRvIG5vdCBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjaGVjayBpdCwgb3IgbWFpbnRhaW5cbitcdFx0XHQgKiBwcmVjaXNpb24gYXJvdW5kIGl0LCBzaW5jZSBpdCBoYXMgbm8gc2FmZXR5IGltcGxpY2F0aW9uLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fQVJFTkE7XG4rXHRcdFx0bW9kZWwtXHUwMDNlYXJnX2ZsYWdzW2FyZ19ub10gfD0gQlRGX0ZNT0RFTF9BUkVOQV9BUkc7XG4rXHRcdFx0aWYgKGlzX2FyZW5hX251bGxhYmxlKVxuK1x0XHRcdFx0bW9kZWwtXHUwMDNlYXJnX2ZsYWdzW2FyZ19ub10gfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4rXHRcdH0gZWxzZSBpZiAoaXNfbnVsbGFibGUpIHtcbiBcdFx0XHRpbmZvLVx1MDAzZXJlZ190eXBlID0gUFRSX1RSVVNURUQgfCBQVFJfVE9fQlRGX0lEIHwgUFRSX01BWUJFX05VTEw7XG4gXHRcdH0gZWxzZSBpZiAoaXNfcmVmY291bnRlZCkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVFJVU1RFRCB8IFBUUl9UT19CVEZfSUQ7XG5AQCAtNDYwLDYgKzQ4Myw3IEBAIGludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLFxuIFx0XHRzdHViX2Z1bmNfYWRkciA9ICoodm9pZCAqKikoc3Rfb3BzLVx1MDAzZWNmaV9zdHVicyArIG1vZmYpO1xuIFx0XHRlcnIgPSBwcmVwYXJlX2FyZ19pbmZvKGJ0Ziwgc3Rfb3BzLVx1MDAzZW5hbWUsIG1uYW1lLFxuIFx0XHRcdFx0ICAgICAgIGZ1bmNfcHJvdG8sIHN0dWJfZnVuY19hZGRyLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNnN0X29wcy1cdTAwM2VmdW5jX21vZGVsc1tpXSxcbiBcdFx0XHRcdCAgICAgICBhcmdfaW5mbyArIGkpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJyb3V0O1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA0MjQxNDYzM2NmMjYzLi42NjA2MTg3ZWQ0ZjQzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTY5NjMsMTUgKzY5NjMsMTkgQEAgYm9vbCBidGZfY3R4X2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0LyogY2hlY2sgZm9yIFBUUl9UT19SRE9OTFlfQlVGX09SX05VTEwgb3IgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgKi9cbitcdC8qXG4rXHQgKiBDaGVjayBmb3IgUFRSX1RPX1JET05MWV9CVUZfT1JfTlVMTCwgUFRSX1RPX1JEV1JfQlVGX09SX05VTEwgb3JcbitcdCAqIFBUUl9UT19BUkVOQSAoYm90aCBudWxsYWJsZSBhbmQgbm9uLW51bGxhYmxlIGNhc2VzKS5cbitcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvX3NpemU7IGkrKykge1xuIFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICpjdHhfYXJnX2luZm8gPSBcdTAwMjZwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9baV07XG4gXHRcdHUzMiB0eXBlLCBmbGFnO1xuIFxuIFx0XHR0eXBlID0gYmFzZV90eXBlKGN0eF9hcmdfaW5mby1cdTAwM2VyZWdfdHlwZSk7XG4gXHRcdGZsYWcgPSB0eXBlX2ZsYWcoY3R4X2FyZ19pbmZvLVx1MDAzZXJlZ190eXBlKTtcbi1cdFx0aWYgKGN0eF9hcmdfaW5mby1cdTAwM2VvZmZzZXQgPT0gb2ZmIFx1MDAyNlx1MDAyNiB0eXBlID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoZmxhZyBcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XG4rXHRcdGlmIChjdHhfYXJnX2luZm8tXHUwMDNlb2Zmc2V0ID09IG9mZiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICh0eXBlID09IFBUUl9UT19BUkVOQSB8fFxuK1x0XHQgICAgICh0eXBlID09IFBUUl9UT19CVUYgXHUwMDI2XHUwMDI2IChmbGFnIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkpKSkge1xuIFx0XHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBjdHhfYXJnX2luZm8tXHUwMDNlcmVnX3R5cGU7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbkBAIC03NTM5LDYgKzc1NDMsMjIgQEAgc3RhdGljIHU4IF9fZ2V0X3R5cGVfZm1vZGVsX2ZsYWdzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4rc3RhdGljIHU4IF9fZ2V0X2FyZ19mbW9kZWxfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4re1xuK1x0dTggZmxhZ3MgPSBfX2dldF90eXBlX2Ztb2RlbF9mbGFncyh0KTtcbitcbitcdGlmIChidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fYXJlbmFfX251bGxhYmxlXCIpKVxuK1x0XHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRyB8IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1x0ZWxzZSBpZiAoYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX2FyZW5hXCIpKVxuK1x0XHRmbGFncyB8PSBCVEZfRk1PREVMX0FSRU5BX0FSRztcbitcdGVsc2UgaWYgKGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19udWxsYWJsZVwiKSlcbitcdFx0ZmxhZ3MgfD0gQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4rXG4rXHRyZXR1cm4gZmxhZ3M7XG4rfVxuK1xuIGludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYyxcbkBAIC03NjA0LDcgKzc2MjQsNyBAQCBpbnQgYnRmX2Rpc3RpbGxfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHRcdG0tXHUwMDNlYXJnX3NpemVbaV0gPSByZXQ7XG4tXHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfdHlwZV9mbW9kZWxfZmxhZ3ModCk7XG4rXHRcdG0tXHUwMDNlYXJnX2ZsYWdzW2ldID0gX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhidGYsIFx1MDAyNmFyZ3NbaV0sIHQpO1xuIFx0fVxuIFx0bS1cdTAwM2Vucl9hcmdzID0gbmFyZ3M7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jIGIva2VybmVsL2JwZi9jaGVja19idGYuY1xuaW5kZXggOTNiZWJlNmZlMTJlNy4uMGU4YjNjY2M3YTViOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcbisrKyBiL2tlcm5lbC9icGYvY2hlY2tfYnRmLmNcbkBAIC0yOCw5ICsyOCw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWJub3JtYWxfcmV0dXJuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gI2RlZmluZSBNSU5fQlBGX0ZVTkNJTkZPX1NJWkVcdDhcbiAjZGVmaW5lIE1BWF9GVU5DSU5GT19SRUNfU0laRVx0MjUyXG4gXG4tc3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdFx0Y29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tXHRcdFx0XHRicGZwdHJfdCB1YXR0cilcbitzdGF0aWMgaW50IHByZXBhcmVfYnRmX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4rXHRcdFx0ICAgIGJwZnB0cl90IHVhdHRyKVxuIHtcbiBcdHUzMiBrcmVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9mdW5jX2luZm8pO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0eXBlLCAqZnVuY19wcm90bztcbkBAIC00MDcsOSArNDA3LDkgQEAgc3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLVx0XHRcdCAgICAgYnBmcHRyX3QgdWF0dHIpXG4raW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4rXHRcdFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuK1x0XHRcdCBicGZwdHJfdCB1YXR0cilcbiB7XG4gXHRzdHJ1Y3QgYnRmICpidGY7XG4gXHRpbnQgZXJyO1xuQEAgLTQyOSw3ICs0MjksNyBAQCBpbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHR9XG4gXHRlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlYnRmID0gYnRmO1xuIFxuLVx0ZXJyID0gY2hlY2tfYnRmX2Z1bmNfZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG4rXHRlcnIgPSBwcmVwYXJlX2J0Zl9mdW5jKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmEzZTFmYWUzMmVhY2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0zMzA4LDYgKzMzMDgsMTEgQEAgYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK2Jvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gYm9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCBlZDc5OTlhZDZjNjZjLi5lMDdhZjM1ZWQwNDAyIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtNTI5LDYgKzUyOSwzNiBAQCBicGZfdHJhbXBvbGluZV9nZXRfcHJvZ3MoY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgaW50ICp0b3RhbCwgYm9vbCAqaXBfYVxuIFx0cmV0dXJuIHRub2RlcztcbiB9XG4gXG4rLypcbisgKiBUaGUgYXJlbmEgYmFzZSBhZ2FpbnN0IHdoaWNoIHNhdmVfYXJncygpIGNvbnZlcnRzIHRoZSBhcmd1bWVudHMgbWFya2VkXG4rICogd2l0aCBCVEZfRk1PREVMX0FSRU5BX0FSRy4gT25seSB0aGUgc3RydWN0X29wcyBpbmRpcmVjdCB0cmFtcG9saW5lXG4rICogY29udmVydHM6IGl0IGRpc3BhdGNoZXMgdG8gYSBzaW5nbGUgcHJvZyB3aG9zZSBhcmVuYSBpcyBrbm93biBhdFxuKyAqIGdlbmVyYXRpb24gdGltZS4gUmV0dXJuIDAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbnZlcnQuXG4rICovXG4rdTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbitcdFx0XHQgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB1MzIgZmxhZ3MpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIShmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHx8XG4rXHQgICAgdG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5yX25vZGVzICE9IDEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpKyspXG4rXHRcdGlmIChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpXG4rXHRcdFx0YnJlYWs7XG4rXHRpZiAoaSA9PSBtLVx1MDAzZW5yX2FyZ3MpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVmVyaWZpY2F0aW9uIHJlamVjdHMgYW4gYXJlbmEgYXJndW1lbnQgd2l0aG91dCBhbiBhcmVuYS4gKi9cbitcdHByb2cgPSB0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubm9kZXNbMF0tXHUwMDNlbGluay1cdTAwM2Vwcm9nO1xuK1x0aWYgKFdBUk5fT05fT05DRSghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQocHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBicGZfdHJhbXBfaW1hZ2VfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSlcbiB7XG4gXHRicGZfaW1hZ2Vfa3N5bV9kZWwoXHUwMDI2aW0tXHUwMDNla3N5bSk7XG5AQCAtOTIwLDYgKzk1MCwxMyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbiBcdGludCBjbnQgPSAwLCBpO1xuIFxuIFx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG4rXHQvKlxuK1x0ICogQXJlbmEgY3R4IGFyZ3MgYXJlIGNvbnZlcnRlZCBvbmx5IGJ5IHN0cnVjdF9vcHMgaW5kaXJlY3RcbitcdCAqIHRyYW1wb2xpbmVzLiBUaGV5IG11c3QgbmV2ZXIgYmUgYXR0YWNoZWQgdG8gYSBnZW5lcmljIHRyYW1wb2xpbmUuXG4rXHQgKi9cbitcdGlmIChXQVJOX09OX09OQ0UoYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcobm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpKSlcbitcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbitcbiBcdGlmICh0ci1cdTAwM2VleHRlbnNpb25fcHJvZylcbiBcdFx0LyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuXG4gXHRcdCAqIGNhbm5vdCBvdmVyd3JpdGUgZXh0ZW5zaW9uIHByb2cgZWl0aGVyLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMDk1ODhiN2IwOGIwYS4uODNlZGY0MWM3ZmU5YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjg0Miw3ICsyODQyLDcgQEAgaW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuK3N0YXRpYyBpbnQgYWRkX3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2cgPSBlbnYtXHUwMDNlc3VicHJvZ19pbmZvO1xuIFx0aW50IGksIHJldCwgaW5zbl9jbnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4sIGV4X2NiX2luc247XG5AQCAtMjg1NCw4ICsyODU0LDcgQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xuLVx0XHRpZiAoIWJwZl9wc2V1ZG9fZnVuYyhpbnNuKSBcdTAwMjZcdTAwMjYgIWJwZl9wc2V1ZG9fY2FsbChpbnNuKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFicGZfcHNldWRvX2tmdW5jX2NhbGwoaW5zbikpXG4rXHRcdGlmICghYnBmX3BzZXVkb19mdW5jKGluc24pIFx1MDAyNlx1MDAyNiAhYnBmX3BzZXVkb19jYWxsKGluc24pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoIWVudi1cdTAwM2VicGZfY2FwYWJsZSkge1xuQEAgLTI4NjMsMTEgKzI4NjIsNyBAQCBzdGF0aWMgaW50IGFkZF9zdWJwcm9nX2FuZF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXHRcdH1cbiBcbi1cdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSB8fCBicGZfcHNldWRvX2NhbGwoaW5zbikpXG4tXHRcdFx0cmV0ID0gYWRkX3N1YnByb2coZW52LCBpICsgaW5zbi1cdTAwM2VpbW0gKyAxKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldCA9IGJwZl9hZGRfa2Z1bmNfY2FsbChlbnYsIGluc24tXHUwMDNlaW1tLCBpbnNuLVx1MDAzZW9mZik7XG4tXG4rXHRcdHJldCA9IGFkZF9zdWJwcm9nKGVudiwgaSArIGluc24tXHUwMDNlaW1tICsgMSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC0yOTA1LDYgKzI5MDAsMjggQEAgc3RhdGljIGludCBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGFkZF9rZnVuY3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbit7XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4rXHRpbnQgaSwgcmV0LCBpbnNuX2NudCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xuK1x0XHRpZiAoIWJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKCFlbnYtXHUwMDNlYnBmX2NhcGFibGUpIHtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJsb2FkaW5nL2NhbGxpbmcgb3RoZXIgYnBmIG9yIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgZm9yIENBUF9CUEYgYW5kIENBUF9TWVNfQURNSU5cXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FUEVSTTtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBicGZfYWRkX2tmdW5jX2NhbGwoZW52LCBpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdGludCBpLCBzdWJwcm9nX3N0YXJ0LCBzdWJwcm9nX2VuZCwgb2ZmLCBjdXJfc3VicHJvZyA9IDA7XG5AQCAtMTA4OTIsOSArMTA5MDksMTYgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZcbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fcmVmY291bnRlZF9rcHRyXCIpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4re1xuK1x0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19hcmVuYV9fbnVsbGFibGVcIik7XG4rfVxuK1xuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4tXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX251bGxhYmxlXCIpO1xuK1x0cmV0dXJuICFpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGUoYnRmLCBhcmcpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19udWxsYWJsZVwiKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX25vbm93bl9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuQEAgLTEwOTEyLDYgKzEwOTM2LDEyIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW1cbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9faXJxX2ZsYWdcIik7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hcmVuYShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbit7XG4rXHRyZXR1cm4gaXNfa2Z1bmNfYXJnX2FyZW5hX251bGxhYmxlKGJ0ZiwgYXJnKSB8fFxuK1x0ICAgICAgIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19hcmVuYVwiKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbiBcdFx0XHRcdFx0ICBjb25zdCBjaGFyICpuYW1lKVxuQEAgLTExMTMyLDYgKzExMTYyLDcgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuIFx0S0ZfQVJHX1BUUl9UT19JUlFfRkxBRyxcbiBcdEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSyxcbiBcdEtGX0FSR19QVFJfVE9fVEFTS19XT1JLLFxuK1x0S0ZfQVJHX1BUUl9UT19BUkVOQSxcbiB9O1xuIFxuIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbkBAIC0xMTQxNyw3ICsxMTQ0OCw2IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4gXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cbiBcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cdTAwM2VidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS1cdTAwM2VidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiBcbkBAIC0xMTQ2Niw3ICsxMTQ5NiwyOSBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcbiBcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuIFx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XG4tXHRlbHNlIGlmIChhcmcgKyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSkge1xuK1x0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG4rXHRcdFx0dmVyYm9zZShlbnYsIFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxuXCIsXG4rXHRcdFx0XHRtZXRhLVx1MDAzZWZ1bmNfbmFtZSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbitcdFx0fVxuK1x0XHRpZiAoIWVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYSkge1xuK1x0XHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFx0XCIlcyBhcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXG5cIixcbitcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdFx0aWYgKHJlZ19mcm9tX2FyZ25vKGFyZ25vKSBcdTAwM2MgMCkge1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcIiVzIGFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcXG5cIixcbitcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdFx0LypcbitcdFx0ICogQm90aCBzdWZmaXhlcyBhY2NlcHQgYSBjb25zdGFudCB6ZXJvLiBUaGUgZnVuY3Rpb24gbW9kZWwgZGV0ZXJtaW5lc1xuK1x0XHQgKiB3aGV0aGVyIHRoZSBKSVQgcmViYXNlcyBpdCB0byB0aGUgYXJlbmEgYmFzZSBvciBwcmVzZXJ2ZXMgTlVMTC5cbitcdFx0ICovXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19BUkVOQSB8IFBUUl9NQVlCRV9OVUxMO1xuK1x0fSBlbHNlIGlmIChhcmcgKyAxIFx1MDAzYyBuYXJncyBcdTAwMjZcdTAwMjZcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcbiBcdFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcdTAwMjZcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG5AQCAtMTIxNjAsNyArMTIyMTIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xuIFxuIFx0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpIFx1MDAyNlx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuK1x0XHQgICAgIXR5cGVfbWF5X2JlX251bGwoa2ZfYXJnX3R5cGUpKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCIsXG4gXHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuQEAgLTEyMjEzLDYgKzEyMjY1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSzpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lSUV9GTEFHOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSzpcbitcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FSRU5BOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fRFlOUFRSOlxuIFx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7XG5AQCAtMTIyNzksNiArMTIzMzIsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdG1ldGEtXHUwMDNlcmV0X2J0Zl9pZCAgPSByZXQ7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEtGX0FSR19QVFJfVE9fQVJFTkE6XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19BUkVOQSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxcblwiLFxuK1x0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEOlxuIFx0XHRcdGlmIChyZWctXHUwMDNldHlwZSA9PSAoUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQykpIHtcbiBcdFx0XHRcdGlmICghaXNfYnBmX29ial9kcm9wX2tmdW5jKG1ldGEtXHUwMDNlZnVuY19pZCkpIHtcbkBAIC0xODgwOCwxMCArMTg4NjgsMjEgQEAgaW50IGJwZl9wcm9nX2N0eF9hcmdfaW5mb19pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdHJldHVybiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm8gPyAwIDogLUVOT01FTTtcbiB9XG4gXG4rYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjdHhfYXJnX2luZm9fc2l6ZTsgaSsrKVxuK1x0XHRpZiAoYmFzZV90eXBlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWN0eF9hcmdfaW5mb1tpXS5yZWdfdHlwZSkgPT0gUFRSX1RPX0FSRU5BKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqZnVuY19wcm90bztcbiBcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYztcbitcdGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wc19hcmdfaW5mbyAqYXJnX2luZm87XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcztcbiBcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXHUwMDNlcHJvZztcbkBAIC0xODg5MCwxMCArMTg5NjEsMjMgQEAgc3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudDsgaSsrKSB7XG4tXHRcdGlmIChzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvW2ldLnJlZmNvdW50ZWQpIHtcbitcdGFyZ19pbmZvID0gXHUwMDI2c3Rfb3BzX2Rlc2MtXHUwMDNlYXJnX2luZm9bbWVtYmVyX2lkeF07XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmdfaW5mby1cdTAwM2VjbnQ7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2N0eF9hcmdfYXV4ICppbmZvID0gXHUwMDI2YXJnX2luZm8tXHUwMDNlaW5mb1tpXTtcbitcbitcdFx0aWYgKGluZm8tXHUwMDNlcmVmY291bnRlZClcbiBcdFx0XHRoYXNfcmVmY291bnRlZF9hcmcgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoYmFzZV90eXBlKGluZm8tXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xuK1x0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50c1xcblwiKTtcbitcdFx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmEpIHtcbitcdFx0XHRcdHZlcmJvc2UoZW52LFxuK1x0XHRcdFx0XHRcImFyZW5hIGFyZ3VtZW50IG9mICVzIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcXG5cIixcbitcdFx0XHRcdFx0bW5hbWUpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTg5MTQsOCArMTg5OTgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfZnVuY19uYW1lID0gbW5hbWU7XG4gXHRlbnYtXHUwMDNlb3BzID0gc3Rfb3BzLVx1MDAzZXZlcmlmaWVyX29wcztcbiBcbi1cdHJldHVybiBicGZfcHJvZ19jdHhfYXJnX2luZm9faW5pdChwcm9nLCBzdF9vcHNfZGVzYy1cdTAwM2VhcmdfaW5mb1ttZW1iZXJfaWR4XS5pbmZvLFxuLVx0XHRcdFx0XHQgIHN0X29wc19kZXNjLVx1MDAzZWFyZ19pbmZvW21lbWJlcl9pZHhdLmNudCk7XG4rXHRyZXR1cm4gYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQocHJvZywgYXJnX2luZm8tXHUwMDNlaW5mbywgYXJnX2luZm8tXHUwMDNlY250KTtcbiB9XG4gI2RlZmluZSBTRUNVUklUWV9QUkVGSVggXCJzZWN1cml0eV9cIlxuIFxuQEAgLTE5MTc5LDYgKzE5MjYyLDE3IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdGJwZl9sb2cobG9nLCBcIlN1YnByb2cgJXMgZG9lc24ndCBleGlzdFxcblwiLCB0bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0LypcbitcdFx0ICogQSBzdHJ1Y3Rfb3BzIGluZGlyZWN0IHRyYW1wb2xpbmUgY29udmVydHMgYXJlbmEgYXJndW1lbnRzXG4rXHRcdCAqIGJlZm9yZSBpbnZva2luZyBpdHMgcHJvZ3JhbS4gQSB0cmFjaW5nIHByb2dyYW0gYXR0YWNoZWQgdG8gdGhlXG4rXHRcdCAqIG1haW4gcHJvZ3JhbSB3b3VsZCBzZWUgdGhlIGNvbnZlcnRlZCBvZmZzZXQgYXMgYSByZWd1bGFyIEJURlxuK1x0XHQgKiBwb2ludGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKHByb2dfdHJhY2luZyBcdTAwMjZcdTAwMjYgc3VicHJvZyA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcodGd0X3Byb2cpKSB7XG4rXHRcdFx0YnBmX2xvZyhsb2csIFwiQ2Fubm90IHRyYWNlIGEgdGFyZ2V0IHdpdGggYXJlbmEgY29udGV4dCBhcmd1bWVudHNcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHR9XG4gXHRcdGlmIChhdXgtXHUwMDNlZnVuYyBcdTAwMjZcdTAwMjYgYXV4LVx1MDAzZWZ1bmNbc3VicHJvZ10tXHUwMDNlYXV4LVx1MDAzZWV4Y2VwdGlvbl9jYikge1xuIFx0XHRcdGJwZl9sb2cobG9nLFxuIFx0XHRcdFx0XCIlcyBwcm9ncmFtcyBjYW5ub3QgYXR0YWNoIHRvIGV4Y2VwdGlvbiBjYWxsYmFja1xcblwiLFxuQEAgLTIwMjY5LDExICsyMDM2MywxMyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZW52LVx1MDAzZWV4cGxvcmVkX3N0YXRlc1tpXSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlbnYtXHUwMDNlZnJlZV9saXN0KTtcbiBcbi1cdHJldCA9IGJwZl9jaGVja19idGZfaW5mb19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTtcbitcdC8qIFByZXBhcmUgQlRGIGFuZCBmdW5jX2luZm8gbmVlZGVkIHRvIGRpc2NvdmVyIGFsbCBzdWJwcm9ncmFtcy4gKi9cbitcdHJldCA9IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4tXHRyZXQgPSBhZGRfc3VicHJvZ19hbmRfa2Z1bmMoZW52KTtcbitcdC8qIERpc2NvdmVyIGFsbCBzdWJwcm9ncmFtcyBiZWZvcmUgdmFsaWRhdGluZyB0aGVpciBsYXlvdXQgYW5kIEJURi4gKi9cbitcdHJldCA9IGFkZF9zdWJwcm9ncyhlbnYpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG5AQCAtMjAyODEsMTQgKzIwMzc3LDIxIEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4rXHQvKiBWYWxpZGF0ZSBCVEYgYWdhaW5zdCB0aGUgY29tcGxldGUgc3VicHJvZ3JhbSBsYXlvdXQgYW5kIGFwcGx5IENPLVJFLiAqL1xuIFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4gXG4rXHQvKiBWYWxpZGF0ZSBpbnN0cnVjdGlvbnMgYW5kIHJlc29sdmUgdGhlIHByb2dyYW0ncyByZWZlcmVuY2VkIHJlc291cmNlcy4gKi9cbiBcdHJldCA9IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKGVudik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHNraXBfZnVsbF9jaGVjaztcbiBcbitcdC8qIEJ1aWxkIGtmdW5jIHByb3RvdHlwZXMgYWZ0ZXIgcmVzb2x2aW5nIHByb2dyYW0gcmVzb3VyY2VzLiAqL1xuK1x0cmV0ID0gYWRkX2tmdW5jcyhlbnYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBza2lwX2Z1bGxfY2hlY2s7XG4rXG4gXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpIHtcbiBcdFx0cmV0ID0gYnBmX3Byb2dfb2ZmbG9hZF92ZXJpZmllcl9wcmVwKGVudi1cdTAwM2Vwcm9nKTtcbiBcdFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzIzZDcwN2M1NDNmYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC0wLDAgKzEsNzQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmEuc2tlbC5oXCJcbisjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmhcIlxuK1xuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rLypcbisgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZVxuKyAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGFyZW5hX2FyZyh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XG4rXHRzdHJ1Y3Qgc3RydWN0X29wc19hcmVuYSAqc2tlbDtcbitcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IHN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInN0cnVjdF9vcHNfYXJlbmFfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGxpbmsgPSBicGZfbWFwX19hdHRhY2hfc3RydWN0X29wcyhza2VsLVx1MDAzZW1hcHMudGVzdG1vZF9hcmVuYSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJhdHRhY2hfc3RydWN0X29wc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnRyaWdnZXIpLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZ0b3B0cyk7XG4rXHRBU1NFUlRfT0soZXJyLCBcInRlc3RfcnVuXCIpO1xuK1x0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCJ0cmlnZ2VyX3JldHZhbFwiKTtcbitcbitvdXQ6XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdHN0cnVjdF9vcHNfYXJlbmFfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuKy8qXG4rICogQSBwcm9ncmFtIHdpdGggbm8gYXJlbmEgY2Fubm90IGF0dGFjaCB0byBhIG1lbWJlciB3aXRoIGFuIF9fYXJlbmFcbisgKiBhcmd1bWVudC5cbisgKi9cbitzdGF0aWMgdm9pZCBhcmVuYV9hcmdfZmFpbCh2b2lkKVxuK3tcbitcdHN0cnVjdCBzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwgKnNrZWw7XG4rXG4rXHRza2VsID0gc3RydWN0X29wc19hcmVuYV9mYWlsX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXCJzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWxfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHN0cnVjdF9vcHNfYXJlbmFfZmFpbF9fZGVzdHJveShza2VsKTtcbit9XG4rI2VuZGlmXG4rXG4rLypcbisgKiBTZXJpYWxpemVkIGJlY2F1c2UgaXQgYXR0YWNoZXMgdGhlIHNpbmdsZXRvbiBicGZfdGVzdG1vZF9vcHMzLCB3aGljaFxuKyAqIHRlc3Rfc3RydWN0X29wc19wcml2YXRlX3N0YWNrIGFsc28gYXR0YWNoZXM7IHJlZ2lzdGVyaW5nIGl0IHR3aWNlIGZhaWxzXG4rICogd2l0aCAtRUVYSVNULlxuKyAqL1xuK3ZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuXG4rXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuK1x0ICogYXJndW1lbnRzXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuK1x0ICovXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXylcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfYXJnXCIpKVxuK1x0XHRhcmVuYV9hcmcoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfYXJnX2ZhaWxcIikpXG4rXHRcdGFyZW5hX2FyZ19mYWlsKCk7XG4rI2Vsc2VcbitcdHRlc3RfX3NraXAoKTtcbisjZW5kaWZcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IGI3OWJhZmNhNjhmN2EuLjExMGEzM2I2ZTFjMjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtMiw2ICsyLDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcImFyZW5hX2tmdW5jLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJhcmVuYV9rZnVuY19qaXQuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImNhcF9oZWxwZXJzLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfYWxpZ24uc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2FuZC5za2VsLmhcIlxuQEAgLTE2MSw2ICsxNjMsMTUgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3RzX2F1eChjb25zdCBjaGFyICpza2VsX25hbWUsXG4gXG4gI2RlZmluZSBSVU4oc2tlbCkgcnVuX3Rlc3RzX2F1eCgjc2tlbCwgc2tlbCMjX19lbGZfYnl0ZXMsIE5VTEwpXG4gXG4rLypcbisgKiBUaGUgdGVzdCBrZnVuY3MgbGl2ZSBpbiBicGZfdGVzdG1vZC4gUmVzb2x2aW5nIGtmdW5jcyBhZ2FpbnN0IG1vZHVsZVxuKyAqIEJURnMgbmVlZHMgQ0FQX1NZU19BRE1JTiwgc28gcnVuIHdpdGggZnVsbCBjYXBhYmlsaXRpZXMgaW5zdGVhZCBvZlxuKyAqIHRocm91Z2ggdGhlIHZlcmlmaWVyIHRlc3RzJyBjYXBhYmlsaXR5LXJlc3RyaWN0ZWQgcnVubmVyLlxuKyAqL1xuK3ZvaWQgdGVzdF9hcmVuYV9rZnVuYyh2b2lkKSAgICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyhhcmVuYV9rZnVuYyk7IH1cbitcbit2b2lkIHRlc3RfYXJlbmFfa2Z1bmNfaml0KHZvaWQpICAgICAgICAgICAgICAgeyBSVU5fVEVTVFMoYXJlbmFfa2Z1bmNfaml0KTsgfVxuK1xuIHZvaWQgdGVzdF92ZXJpZmllcl9hbGlnbih2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9hbGlnbik7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYW5kKHZvaWQpICAgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfYW5kKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9hcmVuYSh2b2lkKSAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9hcmVuYSk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDZjMzgyY2U4MWFmNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbkBAIC0wLDAgKzEsMjYwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcImJwZl9leHBlcmltZW50YWwuaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcIlxuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdC8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFsLCBwYWdlIDEgaXMgZm9yIGFsbG9jYXRpb25zICovXG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rLypcbisgKiBPY2N1cGllcyBwYWdlIDAgc28gbm8gYWxsb2NhdGlvbiBsYW5kcyBhdCBhcmVuYSBvZmZzZXQgMCwgd2hpY2ggdGhlXG4rICogbnVsbGFibGUgdGVzdHMgYmVsb3cgbXVzdCBiZSBhYmxlIHRvIHRlbGwgYXBhcnQgZnJvbSBOVUxMLlxuKyAqL1xuK3U2NCBfX2FyZW5hIGFyZW5hX3BhZDtcbitcbisvKiB2b2xhdGlsZSB0byBmb3JjZSB0aGUgc2NhbGFyIHJlbG9hZHMgYmVsb3cgKi9cbit2b2xhdGlsZSB1NjQgc3Rhc2g7XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1x0dTY0IHJldDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIFBUUl9UT19BUkVOQSBhcmd1bWVudCAqL1xuK1x0KnZhbCA9IDQxO1xuK1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldCAhPSA0MSB8fCAqdmFsICE9IDQyKVxuK1x0XHRyZXR1cm4gMjtcbitcbitcdC8qIHRoZSBsb3cgMzIgYml0cyBhcyBhIHNjYWxhciAqL1xuK1x0c3Rhc2ggPSAodTMyKSh1NjQpdmFsO1xuK1x0cmV0ID0gYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKilzdGFzaCk7XG4rXHRpZiAocmV0ICE9IDQyIHx8ICp2YWwgIT0gNDMpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0LyogdGhlIGZ1bGwgdXNlciBhZGRyZXNzIGFzIGEgc2NhbGFyICovXG4rXHRzdGFzaCA9ICh1NjQpdmFsO1xuK1x0YnBmX2FkZHJfc3BhY2VfY2FzdChzdGFzaCwgMSwgMCk7XG4rXHRyZXQgPSBicGZfa2Z1bmNfYXJlbmFfYXJnX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcdGlmIChyZXQgIT0gNDMgfHwgKnZhbCAhPSA0NClcbitcdFx0cmV0dXJuIDQ7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQaW4gdGhlIHJlYmFzZSBzZW1hbnRpY3MgdXNpbmcgdGhlIGNhcHR1cmUga2Z1bmNzLCB3aGljaCByZXR1cm4gdGhlIHJhd1xuKyAqIGFyZ3VtZW50IHZhbHVlOiBfX2FyZW5hIHJlYmFzZXMgdW5jb25kaXRpb25hbGx5LCBzbyB6ZXJvIGxvdyAzMiBiaXRzXG4rICogYXJyaXZlIGFzIHRoZSBhcmVuYSBrZXJuZWwgYmFzZSwgd2hpbGUgX19hcmVuYV9fbnVsbGFibGUgdHVybnMgdGhlbSBpbnRvXG4rICogTlVMTC5cbisgKi9cbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK2ludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1x0dTY0IGJhc2UsIG9mZjtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJhc2UgPSBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoTlVMTCk7XG4rXHRpZiAoIWJhc2UpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgY29udHJpYnV0ZSAqL1xuK1x0c3Rhc2ggPSAweGJhZGMwZmZlMDAwMDAwMDA7XG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2NhcF90ZXN0KCh1NjQgKilzdGFzaCkgIT0gYmFzZSlcbitcdFx0cmV0dXJuIDM7XG4rXG4rXHRvZmYgPSAodTMyKSh1NjQpdmFsO1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdCgodTY0ICopdmFsKSAhPSBiYXNlICsgb2ZmKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoTlVMTCkgIT0gMClcbitcdFx0cmV0dXJuIDU7XG4rXG4rXHRzdGFzaCA9IDB4YmFkYzBmZmUwMDAwMDAwMDtcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXN0YXNoKSAhPSAwKVxuK1x0XHRyZXR1cm4gNjtcbitcbitcdGlmIChicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoKHU2NCAqKXZhbCkgIT0gYmFzZSArIG9mZilcbitcdFx0cmV0dXJuIDc7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX251bGxhYmxlKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1x0dTY0IHJldDtcbitcbitcdHZhbCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdCp2YWwgPSA0MTtcbitcdHJldCA9IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdCgodTY0ICopdmFsKTtcbitcdGlmIChyZXQgIT0gNDEgfHwgKnZhbCAhPSA0MilcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KE5VTEwpICE9IDB4ZGVhZGJlZWYpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1xuK1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0dmFsWzBdID0gMTtcbitcdHZhbFsxXSA9IDI7XG4rXHR2YWxbMl0gPSA0O1xuK1x0dmFsWzNdID0gODtcbitcdHZhbFs0XSA9IDE2O1xuK1xuK1x0aWYgKGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KCh1NjQgKilcdTAwMjZ2YWxbMF0sICh1NjQgKilcdTAwMjZ2YWxbMV0sXG4rXHRcdFx0XHQgICAgICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSxcbitcdFx0XHRcdCAgICAgICAodTY0ICopXHUwMDI2dmFsWzRdKSAhPSAzMSlcbitcdFx0cmV0dXJuIDI7XG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSxcbitcdFx0XHRcdCAgICAgICAodTY0ICopXHUwMDI2dmFsWzJdLCAodTY0ICopXHUwMDI2dmFsWzNdLCBOVUxMKSAhPSAxNSlcbitcdFx0cmV0dXJuIDM7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1xuK1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0dmFsWzBdID0gNztcbitcdHZhbFsxXSA9IDU7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgTlVMTCkgIT0gNylcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRpZiAoYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QoKHU2NCAqKVx1MDAyNnZhbFswXSwgKHU2NCAqKVx1MDAyNnZhbFsxXSkgIT0gMTIpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbit7XG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpXG4rXHR1NjQgX19hcmVuYSAqdmFsO1xuK1xuK1x0dmFsID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0c3Rhc2ggPSAodTY0KXZhbCArIFBBR0VfU0laRTtcbitcdGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdCgodTY0ICopc3Rhc2gpO1xuK1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCIpXG4raW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4re1xuK1x0YnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KCh1NjQgKikxKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXCIpXG4raW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbit7XG4rXHR1NjQgYnVmID0gMDtcbitcbitcdC8qIHVzZSB0aGUgYXJlbmEgc28gdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBhcmVuYSBwcmVzZW5jZSBjaGVjayAqL1xuK1x0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0YnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KFx1MDAyNmJ1Zik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpIFx1MDAyNlx1MDAyNiBcXFxuK1x0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKVxuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFwiKVxuK2ludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdCgxLCAyLCAzLCA0LCA1LCAodTY0ICopMSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2Vsc2VcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fZGVzY3JpcHRpb24oXCJhcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3RcIilcbitfX3N1Y2Nlc3NcbitpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2VuZGlmXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM5YjkxODY2MjYxNjJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTAsMCArMSw5OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuK1xuKy8qXG4rICogVmVyaWZ5IHRoZSBKSVQtZW1pdHRlZCByZWJhc2Ugc2VxdWVuY2VzIGZvciBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZVxuKyAqIGtmdW5jIGFyZ3VtZW50cy4gVGhlIGNhcHR1cmUga2Z1bmNzIHRha2UgdGhlIGFyZ3VtZW50IHdpdGhvdXRcbisgKiBkZXJlZmVyZW5jaW5nIGl0LCBzbyB0aGVzZSB0ZXN0cyBwaW4gb25seSB0aGUgZW1pdHRlZCBjb2RlLlxuKyAqL1xuKyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCJcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rLyogdm9sYXRpbGUgdG8gZm9yY2UgdGhlIHNjYWxhciByZWxvYWRzIGJlbG93ICovXG4rdm9sYXRpbGUgdTY0IHN0YXNoO1xuK1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdG1vdmxcdCVlZGksICVlZGlcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdGNhbGxxXHR7ey4qfX1cIilcbitfX3N1Y2Nlc3NcbitpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxuK3tcbitcdHN0YXNoID0gKHU2NClicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoKHU2NCAqKXN0YXNoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlZWRpLCAlZWRpXCIpXG4rX19qaXRlZChcIlx0dGVzdGxcdCVlZGksICVlZGlcIilcbitfX2ppdGVkKFwiXHRqZVx0TDBcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4rX19qaXRlZChcIkwwOlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fc3VjY2Vzc1xuK2ludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcbit7XG4rXHRzdGFzaCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0YnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KCh1NjQgKilzdGFzaCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0bW92bFx0JWVkaSwgJWVkaVwiKVxuK19faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlZXNpLCAlZXNpXCIpXG4rX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJzaVwiKVxuK19faml0ZWQoXCJcdG1vdmxcdCVlZHgsICVlZHhcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmR4XCIpXG4rX19qaXRlZChcIlx0bW92bFx0JWVjeCwgJWVjeFwiKVxuK19faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyY3hcIilcbitfX2ppdGVkKFwiXHRtb3ZsXHQlcjhkLCAlcjhkXCIpXG4rX19qaXRlZChcIlx0dGVzdGxcdCVyOGQsICVyOGRcIilcbitfX2ppdGVkKFwiXHRqZVx0TDBcIilcbitfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcjhcIilcbitfX2ppdGVkKFwiTDA6XHRjYWxscVx0e3suKn19XCIpXG4rX19zdWNjZXNzXG4raW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICp2YWw7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHR2YWxbMF0gPSAxO1xuK1x0dmFsWzFdID0gMjtcbitcdHZhbFsyXSA9IDQ7XG4rXHR2YWxbM10gPSA4O1xuK1x0dmFsWzRdID0gMTY7XG4rXG4rXHRicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdCgodTY0ICopXHUwMDI2dmFsWzBdLCAodTY0ICopXHUwMDI2dmFsWzFdLFxuK1x0XHRcdFx0ICAgKHU2NCAqKVx1MDAyNnZhbFsyXSwgKHU2NCAqKVx1MDAyNnZhbFszXSxcbitcdFx0XHRcdCAgICh1NjQgKilcdTAwMjZ2YWxbNF0pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZiAvKiBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCAqL1xuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJhMDRjNzNkOGQ5Njdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC0wLDAgKzEsMTE1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXCJcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdC8qIHBhZ2UgMCBob3N0cyB0aGUgYXJlbmEgZ2xvYmFscywgcGFnZSAxIGlzIGZvciBhbGxvY2F0aW9ucyAqL1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuKy8qIGFsc28gYXNzb2NpYXRlcyB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGFyZW5hICovXG4rdTY0IF9fYXJlbmEgYXJlbmFfdG91Y2g7XG4rLyogcmF3IHZhbHVlIG9mIHRoZSBsYXN0IF9fYXJlbmEgY3R4IGFyZ3VtZW50LCBjYXB0dXJlZCBieSB0ZXN0X2FyZW5hX2NiICovXG4rdTY0IF9fYXJlbmEgY2JfcHRyX3ZhbDtcbitcbitTRUMoXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFcIilcbitpbnQgdGVzdF9hcmVuYV9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbit7XG4rXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzBdO1xuK1xuK1x0YXJlbmFfdG91Y2grKztcbitcdGNiX3B0cl92YWwgPSBjdHhbMF07XG4rXHQqcHRyICs9IDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wcy90ZXN0X2FyZW5hX251bGxhYmxlXCIpXG4raW50IHRlc3RfYXJlbmFfbnVsbGFibGVfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4re1xuK1x0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFswXTtcbitcbitcdGFyZW5hX3RvdWNoKys7XG4rXHRpZiAoIXB0cilcbitcdFx0cmV0dXJuIDB4YmVlO1xuK1x0KnB0ciArPSAxO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYV9zdGFja1wiKVxuK2ludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbOF07XG4rXG4rXHRhcmVuYV90b3VjaCsrO1xuK1x0LyogcGluIHRoZSBzbG90IGxheW91dDogdGhlIGxlYWRpbmcgYXJncyBmaWxsIGN0eFswXS4uY3R4WzddICovXG4rXHRpZiAoY3R4WzBdICE9IDEgfHwgY3R4WzddICE9IDgpXG4rXHRcdHJldHVybiAweGJhZDtcbitcdCpwdHIgKz0gMTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbitcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuK1x0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4rXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbit9O1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgdHJpZ2dlcih2b2lkICpjdHgpXG4re1xuKyNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKVxuK1x0dTY0IF9fYXJlbmEgKnZhbDtcbitcdGludCByZXQ7XG4rXG4rXHR2YWwgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHQqdmFsID0gNDE7XG4rXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSgodTY0ICopdmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAyO1xuK1x0aWYgKCp2YWwgIT0gNDIpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0LypcbitcdCAqIFRoZSBjYWxsYmFjayBtdXN0IGhhdmUgc2VlbiBleGFjdGx5ICh1MzIpKGthZGRyIC0ga2Vybl92bV9zdGFydCksXG4rXHQgKiB3aGljaCBpcyB0aGUgYXJlbmEgb2Zmc2V0IG9mIHZhbCB3aXRoIHRoZSB1cHBlciAzMiBiaXRzIGNsZWFyLlxuK1x0ICovXG4rXHRpZiAoY2JfcHRyX3ZhbCAhPSAodTMyKSh1NjQpdmFsKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDU7XG4rXHRpZiAoKnZhbCAhPSA0MylcbitcdFx0cmV0dXJuIDY7XG4rXG4rXHQvKiBOVUxMIHN1cnZpdmVzIHRoZSBudWxsYWJsZSBrZnVuYyBhbmQgdGhlIHRyYW1wb2xpbmUgYXMgTlVMTCAqL1xuK1x0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoTlVMTCk7XG4rXHRpZiAocmV0ICE9IDB4YmVlKVxuK1x0XHRyZXR1cm4gNztcbitcbitcdC8qIHRoZSBhcmVuYSBwb2ludGVyIGlzIHN0YWNrLXBhc3NlZCBpbnRvIHRoZSB0cmFtcG9saW5lIGhlcmUgKi9cbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDg7XG4rXHRpZiAoKnZhbCAhPSA0NClcbitcdFx0cmV0dXJuIDk7XG4rXG4rXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWMwZWM3MjdkNjM3NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5jXG5AQCAtMCwwICsxLDIwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuKy8qIE5vIGFyZW5hIGluIHRoZSBwcm9ncmFtOiBhdHRhY2hpbmcgdG8gdGVzdF9hcmVuYSBtdXN0IGJlIHJlamVjdGVkLiAqL1xuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYVwiKVxuK2ludCB0ZXN0X2FyZW5hX25vX2FyZW5hKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4rc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYV9mYWlsID0ge1xuK1x0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfbm9fYXJlbmEsXG4rfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggZWIwZjliNWUxOGQ4NS4uMjk2M2MyOWY5NmJhNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0yMzcsNiArMjM3LDU2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2NvbW1vbl90ZXN0KHZvaWQpXG4ge1xuIH1cbiBcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYSlcbit7XG4rXHR1NjQgb2xkO1xuK1xuK1x0b2xkID0gKnZhbF9fYXJlbmE7XG4rXHQqdmFsX19hcmVuYSA9IG9sZCArIDE7XG4rXHRyZXR1cm4gb2xkO1xuK31cbitcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX251bGxhYmxlX2FyZ190ZXN0KHU2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpXG4re1xuK1x0dTY0IG9sZDtcbitcbitcdGlmICghdmFsX19hcmVuYV9fbnVsbGFibGUpXG4rXHRcdHJldHVybiAweGRlYWRiZWVmO1xuK1xuK1x0b2xkID0gKnZhbF9fYXJlbmFfX251bGxhYmxlO1xuK1x0KnZhbF9fYXJlbmFfX251bGxhYmxlID0gb2xkICsgMTtcbitcdHJldHVybiBvbGQ7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QodTY0ICp2YWxfX2FyZW5hKVxuK3tcbitcdHJldHVybiAodTY0KXZhbF9fYXJlbmE7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QodTY0ICp2YWxfX2FyZW5hX19udWxsYWJsZSlcbit7XG4rXHRyZXR1cm4gKHU2NCl2YWxfX2FyZW5hX19udWxsYWJsZTtcbit9XG4rXG4rX19icGZfa2Z1bmMgdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdzNV90ZXN0KHU2NCAqYV9fYXJlbmEsIHU2NCAqYl9fYXJlbmEsXG4rXHRcdFx0XHRcdCAgIHU2NCAqY19fYXJlbmEsIHU2NCAqZF9fYXJlbmEsXG4rXHRcdFx0XHRcdCAgIHU2NCAqZV9fYXJlbmFfX251bGxhYmxlKVxuK3tcbitcdHJldHVybiAqYV9fYXJlbmEgKyAqYl9fYXJlbmEgKyAqY19fYXJlbmEgKyAqZF9fYXJlbmEgK1xuK1x0ICAgICAgIChlX19hcmVuYV9fbnVsbGFibGUgPyAqZV9fYXJlbmFfX251bGxhYmxlIDogMCk7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHU2NCBicGZfa2Z1bmNfYXJlbmFfc3RhY2tfYXJnX3Rlc3QodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLFxuK1x0XHRcdFx0XHRcdHU2NCAqZl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIGEgKyBiICsgYyArIGQgKyBlICsgKmZfX2FyZW5hO1xuK31cbitcbitfX2JwZl9rZnVuYyB1NjQgYnBmX2tmdW5jX2FyZW5hX21peGVkX3Rlc3QodTY0ICphX19hcmVuYSwgdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpXG4re1xuK1x0cmV0dXJuICphX19hcmVuYSArIChiX19hcmVuYV9fbnVsbGFibGUgPyAqYl9fYXJlbmFfX251bGxhYmxlIDogMCk7XG4rfVxuK1xuIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2R5bnB0cl90ZXN0KHN0cnVjdCBicGZfZHlucHRyICpwdHIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9keW5wdHIgKnB0cl9fbnVsbGFibGUpXG4ge1xuQEAgLTM0Nyw5ICszOTcsMjkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF90ZXN0XzQodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEodTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUodTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLFxuK1x0XHRcdFx0XHQgICAgICB1NjQgZSwgdTY0IGYsIHU2NCBnLCB1NjQgaCxcbitcdFx0XHRcdFx0ICAgICAgdTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xuIFx0LnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMyxcbiBcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXG4rXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4rXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4rXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpXG5AQCAtMzY4LDYgKzQzOCwyMSBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIodm9pZClcbiBcdHN0X29wczMtXHUwMDNldGVzdF8yKCk7XG4gfVxuIFxuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSh1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYShwdHJfX2FyZW5hKTtcbit9XG4rXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKHU2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpXG4re1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9udWxsYWJsZShwdHJfX2FyZW5hX19udWxsYWJsZSk7XG4rfVxuK1xuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcbit9XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtNzU1LDYgKzg0MCwxMyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGVzdG1vZF9zZXFfdmFsdWUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jb21tb25fdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2FyZ190ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbnVsbGFibGVfYXJnX3Rlc3QpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19hcmVuYV9jYXBfdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX2NhcF9udWxsYWJsZV90ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfYXJnczVfdGVzdClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2FyZW5hX3N0YWNrX2FyZ190ZXN0KVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZHlucHRyX3Rlc3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19uZXN0ZWRfYWNxdWlyZV9ub256ZXJvX29mZnNldF90ZXN0LCBLRl9BQ1FVSVJFKVxuQEAgLTc3MCw2ICs4NjIsOSBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9jdHhfcmVsZWFzZSwgS0ZfUkVMRUFTRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggODYzZmQxMGYxNjE5OS4uMzNmMmFmNWI3MDg1NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDYsNiArMTA2LDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbitcdC8qIFVzZWQgdG8gdGVzdCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50cy4gKi9cbitcdGludCAoKnRlc3RfYXJlbmEpKHU2NCAqcHRyKTtcbitcdGludCAoKnRlc3RfYXJlbmFfbnVsbGFibGUpKHU2NCAqcHRyKTtcbitcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXG4rXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuK1x0XHRcdFx0dTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCBjMzZiYjkxMWRlZmE3Li5kYzdjNDBiZDEyOTkzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTk4LDYgKzk4LDE2IEBAIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZWxlYXNlKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwKSBfX2tzeW07XG4gdm9pZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JlZihzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCkgX19rc3ltO1xuIFxuIHZvaWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9tZW1fbGVuX3Bhc3MxKHZvaWQgKm1lbSwgaW50IGxlbikgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9udWxsYWJsZV9hcmdfdGVzdChfX3U2NCAqdmFsX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX3Rlc3QoX191NjQgKnZhbF9fYXJlbmEpIF9fa3N5bTtcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfY2FwX251bGxhYmxlX3Rlc3QoX191NjQgKnZhbF9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4rX191NjQgYnBmX2tmdW5jX2FyZW5hX2FyZ3M1X3Rlc3QoX191NjQgKmFfX2FyZW5hLCBfX3U2NCAqYl9fYXJlbmEsXG4rXHRcdFx0XHQgX191NjQgKmNfX2FyZW5hLCBfX3U2NCAqZF9fYXJlbmEsXG4rXHRcdFx0XHQgX191NjQgKmVfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xuK19fdTY0IGJwZl9rZnVuY19hcmVuYV9zdGFja19hcmdfdGVzdChfX3U2NCBhLCBfX3U2NCBiLCBfX3U2NCBjLCBfX3U2NCBkLCBfX3U2NCBlLFxuK1x0XHRcdFx0ICAgICBfX3U2NCAqZl9fYXJlbmEpIF9fa3N5bTtcbitfX3U2NCBicGZfa2Z1bmNfYXJlbmFfbWl4ZWRfdGVzdChfX3U2NCAqYV9fYXJlbmEsIF9fdTY0ICpiX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiBpbnQgKmJwZl9rZnVuY19jYWxsX3Rlc3RfZ2V0X3Jkd3JfbWVtKHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jICpwLCBjb25zdCBpbnQgcmR3cl9idWZfc2l6ZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9nZXRfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xuIGludCAqYnBmX2tmdW5jX2NhbGxfdGVzdF9hY3FfcmRvbmx5X21lbShzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyAqcCwgY29uc3QgaW50IHJkb25seV9idWZfc2l6ZSkgX19rc3ltO1xuQEAgLTExMSw2ICsxMjEsOSBAQCB1MzIgYnBmX2tmdW5jX2NhbGxfdGVzdF9zdGF0aWNfdW51c2VkX2FyZyh1MzIgYXJnLCB1MzIgdW51c2VkKSBfX2tzeW07XG4gI2VuZGlmXG4gXG4gdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYShfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiBcbiBfX3U2NCBicGZfa2Z1bmNfY2FsbF90ZXN0MShzdHJ1Y3Qgc29jayAqc2ssIF9fdTMyIGEsIF9fdTY0IGIsXG4gXHRcdFx0XHRfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNjo0My4wODAwMzU0NzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzM4OTc3Nzg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQb2ludGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgYF9fYXJlbmFgIGFuZCBgX19hcmVuYV9fbnVsbGFibGVgIGFubm90YXRpb25zIHRvIEJQRiBrZnVuY3MgYW5kIGBzdHJ1Y3Rfb3BzYCwgd2hpY2ggaXMgcHJldHR5IGludGVyZXN0aW5nLiBJdCdzIHRvdWNoaW5nIHRoZSB4ODYgQlBGIEpJVCwgcGx1cyBzb21lIGNvcmUgQlBGIGNvbXBvbmVudHMgbGlrZSB0aGUgdmVyaWZpZXIsIEJURiBoYW5kbGluZywgc3RydWN0IG9wcywgYW5kIGV2ZW4gdGhlIHRyYW1wb2xpbmUgbG9naWMuIEdpdmVuIHRoZSB2ZXJpZmllciBhbmQgSklUIGFyZSBpbnZvbHZlZCwgdGhpcyBhYnNvbHV0ZWx5IHNjcmVhbXMgZm9yIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSBrZXkgc3ltYm9scyBpbXBhY3RlZC4gSSdtIHNlZWluZyBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgYWNyb3NzIGEgcmFuZ2Ugb2YgZnVuY3Rpb25zIOKAkyBzb21lIHN0YXRpYywgc29tZSBnbG9iYWwuIFRoZSBzdGF0aWMgb25lcyBhcmUgbGVzcyBvZiBhIGRpcmVjdCBjb25jZXJuIGluaXRpYWxseSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBub24tc3RhdGljIG9uZXM6IGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGBzYXZlX2FyZ3NgLCBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgYGJwZl90cmFtcF9hcmVuYV9iYXNlYCwgYHByZXBhcmVfYXJnX2luZm9gLCBgYnRmX2N0eF9hY2Nlc3NgLCBgX19nZXRfYXJnX2Ztb2RlbF9mbGFnc2AsIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCwgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYCwgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGBhZGRfc3VicHJvZ3NgLCBgYWRkX2tmdW5jc2AsIGBpc19rZnVuY19hcmdfYXJlbmFfbnVsbGFibGVgLCBgaXNfa2Z1bmNfYXJnX2FyZW5hYCwgYGdldF9rZnVuY19hcmdfdHlwZWAsIGBjaGVja19rZnVuY19hcmdzYCwgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCwgYGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkYCwgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YCwgYGJwZl9jaGVja2BcblxuSSdtIHRoaW5raW5nIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBhbnl0aGluZyB0aGF0J3MgYSBwb3RlbnRpYWwgYm91bmRhcnkgb3IgaW50ZXJhY3Rpb24gcG9pbnQuIEknbSB6ZXJvaW5nIGluIG9uIGEgZmV3IGNhbmRpZGF0ZXM6IGBicGZfdHJhbXBfYXJlbmFfYmFzZWAsIGBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZ2AsIGBicGZfcHJlcGFyZV9idGZfaW5mb2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBMZXQncyB0aHJvdyBpbiBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gLCBgYnRmX2N0eF9hY2Nlc3NgIGJlY2F1c2UgdGhlc2UgYXJlIGludm9sdmVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxzIHRvIGBwcmVwYXJlX2FyZ19pbmZvYCBpbiBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCwgdG9vLlxuXG5XYWl0LCBgYnBmX2NoZWNrYCBpcyB3YXkgdG9vIGJyb2FkLiBMZXQncyBmaWx0ZXIgdGhhdCBvdXQuIEknbGwgbmVlZCB0byBjaGVjayBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCBpbiBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYC4gSSB3aWxsIGFsc28gY2hlY2sgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYGJ0Zl9jdHhfYWNjZXNzYCBpbiBga2VybmVsL2JwZi9idGYuY2AsIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBpbiBga2VybmVsL2JwZi9idGYuY2AsIGFuZCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgXG5cbkknbSBnb2luZyB0byB3b3JrIHdpdGggYGJwZl90cmFtcF9hcmVuYV9iYXNlYCwgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCwgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYCwgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBndWlkZSBteSB0ZXN0aW5nIGFuZCBkZXRlcm1pbmUgd2hhdCB0aGUgcGF0Y2ggYWN0aXZhdGVzLiBga2VybmVsL2JwZi9gIHBvaW50cyB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhlIEpJVCBwYXJ0IGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIHVzZXMgYENPTkZJR19CUEZfSklUYC4gVGhlIGBzdHJ1Y3Rfb3BzYCBzaWRlIGlzIGxpa2VseSB1bmRlciBib3RoIGBDT05GSUdfQlBGX0pJVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjAwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNjo1Ni40Njk4MTY1NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NTkxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI2OjU2LjUyMjc4MDAzNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTk3NDk0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRl9KSVQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQlBGX0pJVGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgcGFydGljdWxhcmx5IHRoZSB4ODYgb25lLCBnaXZlbiB0aGlzIGlzIGxpa2VseSB4ODYgcmVsYXRlZC4gVGhlcmVmb3JlLCBsZXQncyBkcmlsbCBkb3duIGludG8gYGFyY2gveDg2L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9uLCBhbG9uZ3NpZGUgb3RoZXIgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGF0IGZpbGUgY2xvc2VseSB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IHJlbGV2YW50IHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MjY6NTkuODQyNTMzMDkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjUzMzI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNjo1OS44ODg3OTM1NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjExNDY1MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqTG9jYXRpbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgYXJlIGxvY2F0ZWQsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhleSdsbCBiZSBpbiBvbmUgb2YgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIHByZXR0eSB3ZWxsLW9yZ2FuaXplZCwgc28gdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgYXJlIGBrZXJuZWwvYnBmL0tjb25maWdgIChzaW5jZSB0aGlzIGlzIEJQRi1yZWxhdGVkKSBvciBwb3NzaWJseSBgbmV0L0tjb25maWdgIChiZWNhdXNlIEJQRiBpcyBoZWF2aWx5IHVzZWQgaW4gbmV0d29ya2luZyBjb250ZXh0cykuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgZmlsZXMgZGlyZWN0bHkuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgY29udmVudGlvbiwgc28gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IEknbGwgZmluZCB3aGF0IEknbSBsb29raW5nIGZvciB0aGVyZSwgb3IgYXQgbGVhc3QgYmUgcG9pbnRlZCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM4MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjAzLjEwMDI2MjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwMjQ3MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzowMy40MDA1MTQ4OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM0MjY5NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYsIGFuZCBpdCBsb29rcyBsaWtlIHdlIG5lZWQgYm90aCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAgZW5hYmxlZC4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCwgZ2VuZXJhbGx5IGluZGljYXRpbmcgd2UncmUgcGxhbm5pbmcgdG8gbGV2ZXJhZ2UgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhbmQsIG9mIGNvdXJzZSwgdGhlIEpJVCBjb21waWxlciBmb3IgQlBGIGJ5dGVjb2RlLiBNYWtlcyBzZW5zZS4gQnV0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBmbGFncyByZWxhdGVkIHRvIGBicGZfYXJlbmFgLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYW55IHJlbGF0ZWQga2VybmVsIG1vZHVsZXMgdG8gYmUgZnVsbHkgaW5mb3JtZWQgYmVmb3JlIEkgcHJvY2VlZC4gRG9uJ3Qgd2FudCB0byBnZXQgdHJpcHBlZCB1cCBieSBhIGhpZGRlbiBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgxNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjA3LjIzNDc4ODI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNzk2NzQ5NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9BUkVOQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjA5LjA2Mjc2NjA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODQ5Mjc4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCUEYgQ29tcGlsYXRpb24qKlxuXG5IbW0sIHRoZXJlJ3Mgbm8gYENPTkZJR19CUEZfQVJFTkFgIGRlZmluZWQuIFRoYXQncyBhIGJpdCBvZGQ7IEkgY291bGQgaGF2ZSBzd29ybiBJJ2Qgc2VlbiBpdCBzb21ld2hlcmUuIFdhaXQsIGhvbGQgb24uIElzIGl0IGBDT05GSUdfQlBGX0VWRU5UU2AgaW5zdGVhZD8gUGVyaGFwcyBpdCdzIGEgbmV3ZXIsIG1vcmUgc3RyZWFtbGluZWQgb3B0aW9uLCBvciBtYXliZSBpdCdzIHJlbGF0ZWQsIGp1c3QgbmFtZWQgZGlmZmVyZW50bHkuIFJpZ2h0LCBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5UbyBmaWd1cmUgb3V0IGhvdyB0aGUgYGJwZl9zdHJ1Y3Rfb3BzLmNgIGFuZCBgdHJhbXBvbGluZS5jYCBmaWxlcyBhcmUgYmVpbmcgaGFuZGxlZCwgSSBzaG91bGQgZXhhbWluZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIHJldmVhbCBob3cgdGhvc2Ugc3BlY2lmaWMgc291cmNlcyBhcmUgYnVpbHQgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gdGhlbS4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBzZWUgaG93IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGFycmFuZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjEyLjk0NzY5NjU0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNzM4NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cnVjdF9vcHMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9NDM9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3N0cnVjdF9vcHMub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBjcHVtYXNrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MTIuOTk1ODc0NzE5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzA3MTkyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipCUEYgVmVyaWZpY2F0aW9uIGFuZCBKSVQgQ29tcGlsYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGp1c3QgZW5hYmxpbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAgc2hvdWxkIGdpdmUgbWUgZXZlcnl0aGluZyBJIG5lZWQgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBhbmQgaG9wZWZ1bGx5IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYHRyYW1wb2xpbmUub2Agb2JqZWN0IGZpbGUuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGl0cyByb2xlIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBVbmRlcnN0YW5kaW5nIGl0cyBidWlsZCBwcm9jZXNzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gaG93IHRoZSBCUEYgdHJhbXBvbGluZXMgYXJlIGNyZWF0ZWQgYW5kIGludGVncmF0ZWQsIHdoaWNoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzoxNi42MjY1OTczMjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzgyODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjE2LjY3MTk4NTE3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU5MzI5NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBhbmQgVHJhbXBvbGluZXMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX0pJVGAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciBgdHJhbXBvbGluZS5vYCDigJMgdGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gcmVtZW1iZXIuIE5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcy4gQmFzZWQgb24gbXkgcXVpY2sgc2NhbiwgdGhlc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBvbjpcblxuKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWBcbiogICBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgXG4qICAgYGJwZl9wcmVwYXJlX2J0Zl9pbmZvYFxuKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgXG4qICAgYGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG9gXG4qICAgYGJ0Zl9jdHhfYWNjZXNzYFxuKiAgIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgXG4qICAgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YFxuXG5Ob3csIEknbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGl0J3MgZXhwb3J0ZWQgb3IgZ2xvYmFsbHkgYWNjZXNzaWJsZSBiZWNhdXNlIHRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IGVhc3kgaXQgaXMgdG8gaW50ZXJhY3Qgd2l0aCBpdHMgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3ODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MjEuMjMxMzE5NDY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQxNzk0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RydWN0X29wc19kZXNjX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTM0Nz1pbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1NDppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU1LVxcdFxcdFxcdCAgICAgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz05ODg5PWJ0Zl9hZGRfc3RydWN0X29wcyhzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05OTIwLVxcbmtlcm5lbC9icGYvYnRmLmM6OTkyMTpcXHRlcnIgPSBicGZfc3RydWN0X29wc19kZXNjX2luaXQoXFx1MDAyNnRhYi1cXHUwMDNlb3BzW2J0Zi1cXHUwMDNlc3RydWN0X29wc190YWItXFx1MDAzZWNudF0sIGJ0ZiwgbG9nKTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTk5MjItXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MjEuMjgyNzQyOTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3NzQzNTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTY29wZSBcdTAwMjYgTWV0aG9kKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCdzIGNvbmZpcm1lZCB0byBiZSBnbG9iYWwgaW4gbmF0dXJlLiBHb29kLCBpbXBvcnRhbnQgdG8gZXN0YWJsaXNoIHRoYXQgYXQgdGhlIG91dHNldC4gTm93LCB3aXRoIHRoYXQgZXN0YWJsaXNoZWQgSSBuZWVkIHRvIGxvb2sgaW50byBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBnbG9iYWwgaW5mbHVlbmNlIG1hbmlmZXN0cywgYW5kIGhvdyBpdCdzIGJlaW5nIG1hbmFnZWQgb3IgY29uc3RyYWluZWQuIE5lZWQgdG8gZGl2ZSBkZWVwIGludG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDUxNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjI0LjE2MDE4MTQ5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMjUwNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja19hdHRhY2hfdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnRmLmM9Njg1MD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MDMxLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjcwMzI6XFx0XFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNzAzMy1cXHRcXHR0bmFtZSArPSBzaXplb2YoXFxcImJ0Zl90cmFjZV9cXFwiKSAtIDE7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjI0PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1Ni1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzU3OlxcdFxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIHRndF9wcm9nLCBidGZfaWQsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1OC1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGd0X2luZm8pO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTMzLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzQ6XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM1LVxcdFxcdFxcdFxcdCAgICAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zl9pZCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjEzMD1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTQxLSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxNDI6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjE0My0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkxOTI9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTIwNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkyMDY6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjA3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk2MzA9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NjAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjYxOlxcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NjItXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MjQuMzAxNDQxMDExWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODkwNzMxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqR2xvYmFsIFNjb3BlIENoZWNrIGFuZCBUYXJnZXRlZCBGdW5jdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB0aGUgc2NvcGUuLi4geWVhaCwgSSdtIHRoaW5raW5nIHRoaXMgaXMgZGVmaW5pdGVseSBnbG9iYWwuIE5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5BbHJpZ2h0LCBub3cgbGV0J3MgZHJpbGwgZG93biBhbmQgY2hlY2sgdGhlIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoYXQgaW1wbGVtZW50YXRpb24uIEdvdHRhIGNoZWNrIGhvdyB0aGF0J3Mgd29ya2luZyB3aXRoaW4gdGhlIGdsb2JhbCBjb250ZXh0LCBhbmQgZW5zdXJlIGl0cyBoYW5kbGluZyBvZiB3aGF0ZXZlciBpdCBpcyBjb25jZXJuZWQgd2l0aCBhbGlnbnMgd2l0aCB3aGF0IEknbSBleHBlY3RpbmcuIEl0J3MgYSBrZXkgcGllY2UgaW4gdGhpcywgc28gbGV0J3MgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MjguNTkwNTE2NzY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQzNzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zNTQ9aW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNDYxLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo0NjI6XFx0XFx0aWYgKGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8obG9nLCBidGYsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTQ2My1cXHRcXHRcXHRcXHRcXHQgICBmdW5jX3Byb3RvLCBtbmFtZSxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9NzU0Nj1zdGF0aWMgdTggX19nZXRfYXJnX2Ztb2RlbF9mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTc1NjEtXFxua2VybmVsL2JwZi9idGYuYzo3NTYyOmludCBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi9idGYuYy03NTYzLVxcdFxcdFxcdCAgIHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yNzI4PWludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjgxMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjgxMjpcXHRlcnIgPSBidGZfZGlzdGlsbF9mdW5jX3Byb3RvKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywga2Z1bmMuYnRmLCBrZnVuYy5wcm90bywga2Z1bmMubmFtZSwgXFx1MDAyNmZ1bmNfbW9kZWwpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODEzLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyMDY9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzMtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDM0OlxcdFxcdHJldCA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8obG9nLCBidGYsIHQsIHRuYW1lLCBcXHUwMDI2dGd0X2luZm8tXFx1MDAzZWZtb2RlbCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0NzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDc3OlxcdFxcdHJldCA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8obG9nLCBidGYsIHQsIHRuYW1lLCBcXHUwMDI2dGd0X2luZm8tXFx1MDAzZWZtb2RlbCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDc4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzMwPWludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc1OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NjA6XFx0ZXJyID0gYnRmX2Rpc3RpbGxfZnVuY19wcm90byhOVUxMLCBidGYsIHQsIHRuYW1lLCBcXHUwMDI2dGd0X2luZm8tXFx1MDAzZWZtb2RlbCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzYxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzoyOC42NzI5NTgyMDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MDA3Njk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqR2xvYmFsIFNjb3BlIENoZWNrIGFuZCBDb250ZXh0dWFsIEFjY2VzcyoqXG5cblJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFyOiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBnbG9iYWwgc2l0dWF0aW9uIGhlcmUuIFRoYXQncyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbi4gTm93LCBnaXZlbiB0aGF0IGdsb2JhbCBuYXR1cmUsIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIHNwZWNpZmljIGFjY2VzcyBwYXR0ZXJucyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhY3Jvc3MgdGhlIGVudGlyZSBzeXN0ZW0uXG5cblRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGJ0Zl9jdHhfYWNjZXNzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZnVuY3Rpb24gd2l0aCBnbG9iYWwgdmFyaWFibGVzIG9yIGdsb2JhbCBzdGF0ZS4gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQ/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgdG8gdW5wYWNrPyBJIG5lZWQgdG8ga25vdzogd2hhdCdzIHRoZSBhY2Nlc3MgZ3JhbnVsYXJpdHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoaXMgYWNjZXNzIG9jY3VycywgZXNwZWNpYWxseSBpZiB0aGF0IGNvbnRleHQgaXMgZ2xvYmFsLCBvciBpbmZsdWVuY2VkIGJ5IGdsb2JhbCBzdGF0ZT8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIGluIHRoZSBnbG9iYWwgY29udGV4dCwgYXMgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3VyIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQxNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjMzLjMzMzA0MDkwM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5ODUwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX2N0eF9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfbHNtLmM9NDE2PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGxzbV92ZXJpZmllcl9vcHMgPSB7XFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDE3LVxcdC5nZXRfZnVuY19wcm90byA9IGJwZl9sc21fZnVuY19wcm90byxcXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0MTg6XFx0LmlzX3ZhbGlkX2FjY2VzcyA9IGJ0Zl9jdHhfYWNjZXNzLFxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTQxOS19O1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3Jhd190cF9udWxsX2FyZ3MgcmF3X3RwX251bGxfYXJnc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9idGYuYy02ODQ5LVxcbmtlcm5lbC9icGYvYnRmLmM6Njg1MDpib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbmtlcm5lbC9icGYvYnRmLmMtNjg1MS1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MTAzLX1cXG5rZXJuZWwvYnBmL2J0Zi5jOjcxMDQ6RVhQT1JUX1NZTUJPTF9HUEwoYnRmX2N0eF9hY2Nlc3MpO1xcbmtlcm5lbC9icGYvYnRmLmMtNzEwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6MzMuMzg0MDM0MTY3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDg0NTQ4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipHbG9iYWwgU2NvcGUgYW5kIEJURiBQcmVwYXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgaGFzIGEgZ2xvYmFsIGltcGFjdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyBpc3N1ZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgY29yZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyBgYnBmX3ByZXBhcmVfYnRmX2luZm9gLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgdG8gZmluZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGdsb2JhbCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzozNi4zMzI0OTE1OTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTg5NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcmVwYXJlX2J0Zl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzQxPXN0YXRpYyBpbnQgY2hlY2tfY29yZV9yZWxvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQwOS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cXHRcXHRcXHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAyNTg9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNjYtXFx0LyogUHJlcGFyZSBCVEYgYW5kIGZ1bmNfaW5mbyBuZWVkZWQgdG8gZGlzY292ZXIgYWxsIHN1YnByb2dyYW1zLiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM2NzpcXHRyZXQgPSBicGZfcHJlcGFyZV9idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNjgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjM2LjM4NzY4ODg3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE3MTIwNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNjb3BlIFx1MDAyNiBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCdzIHVuZXF1aXZvY2FsbHkgZ2xvYmFsLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBmbGFncyBhbmQgcHJvbXB0cyBhIHRob3JvdWdoIGV4YW1pbmF0aW9uIG9mIGl0cyBpbXBsaWNhdGlvbnMgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBCZWZvcmUgcHJvY2VlZGluZywgSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgLiBUaGlzIGlzIGNydWNpYWwuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgd2UgaGF2ZSBhcmVuYSBjb250ZXh0IGFyZ3VtZW50cy4gVGhpcyBjb3VsZCBoYXZlIGEgZ2xvYmFsIGVmZmVjdCwgYW5kIG1pZ2h0IGJlIGltcG9ydGFudCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBpbml0aWFsIGFzc2VydGlvbi4gVGhlIG91dGNvbWUgaGVyZSB3aWxsIHN0ZWVyIHRoZSBzdWJzZXF1ZW50IGxpbmUgb2YgaW5xdWlyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0NDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzozOS4zMDQ4MTIyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMDYxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTQyPXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTU2LVxcdCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk1NzpcXHRpZiAoV0FSTl9PTl9PTkNFKGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2cpKSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTgtXFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg2Mj1pbnQgYnBmX3Byb2dfY3R4X2FyZ19pbmZvX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODcwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg3MTpib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4NzIte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MjA2PWludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MjcxLVxcdFxcdGlmIChwcm9nX3RyYWNpbmcgXFx1MDAyNlxcdTAwMjYgc3VicHJvZyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MjcyOlxcdFxcdCAgICBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyh0Z3RfcHJvZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkyNzMtXFx0XFx0XFx0YnBmX2xvZyhsb2csIFxcXCJDYW5ub3QgdHJhY2UgYSB0YXJnZXQgd2l0aCBhcmVuYSBjb250ZXh0IGFyZ3VtZW50c1xcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjI3OjM5LjM1MTkyMzgyNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYyOTYwOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQncyBhIGRpcmVjdCBzdHJlYW0gb2YgbXkgdGhvdWdodHM6XG5cbioqQWRkcmVzc2luZyBHbG9iYWwgU2NvcGUgaW4gZUJQRiBDb250ZXh0KipcblxuUmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgc2NvcGUgaGVyZS4gVGhlIHNpdHVhdGlvbi4uLiBZZXMsIGl0J3MgZGVmaW5pdGVseSBnbG9iYWwgaW4gbmF0dXJlLCBub3QgaXNvbGF0ZWQuIEl0J3MgaW1wYWN0aW5nIG1vcmUgdGhhbiBqdXN0IG9uZSBzcGVjaWZpYyBsb2NhbCBhcmVhLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgYnBmX3RyYW1wX2FyZW5hX2Jhc2VgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGF0IHZhcmlhYmxlLiBUaGF0J3MgdGhlIGtleSBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjc6NDIuODE0ODg3MDk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4ODYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBfYXJlbmFfYmFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz01MDg9YnBmX3RyYW1wb2xpbmVfZ2V0X3Byb2dzKGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGludCAqdG90YWwsIGJvb2wgKmlwX2FyZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUzNy0gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1Mzg6dTY0IGJwZl90cmFtcF9hcmVuYV9iYXNlKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MzktXFx0XFx0XFx0IHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcywgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzo0Mi44NjEyODE1ODFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NzM2ODg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqR2xvYmFsIFNjb3BlIGFuZCBKSVQgQXJlbmEgQXJndW1lbnRzKipcblxuQWxyaWdodCwgdGhhdCBvYnNlcnZhdGlvbiBhYm91dCB0aGUgc2l0dWF0aW9uIGF0IGhhbmQuLi4geWVwLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQncyBpbXBhY3RpbmcgdGhlIHN5c3RlbSBnbG9iYWxseS4gTm8gbG9jYWxpemVkIGlzc3VlIGhlcmU7IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbS13aWRlIGVmZmVjdC5cblxuTm93LCBnaXZlbiB0aGF0IHNjb3BlLCBhbmQgd2l0aCBteSBleHBlcmllbmNlIGluIHRoZXNlIGxvdy1sZXZlbCBjb250ZXh0cywgbXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBhIHNwZWNpZmljIGZ1bmN0aW9uLiBXZSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgc3VwcG9ydCBsZXZlbC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgc3VwcG9ydCBsZXZlbCBpcyBnb2luZyB0byBkaWN0YXRlIHRoZSBhcHByb3ByaWF0ZSBjb3Vyc2Ugb2YgYWN0aW9uLCBhbmQgaXQgd291bGQgYmUgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGZvciBhIGZldyBkaWZmZXJlbnQgcG90ZW50aWFsIHNvbHV0aW9ucyB0aGF0IEkgYW0gbXVsbGluZyBvdmVyLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZsYWcgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzNzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzo0Ni4zMDg2NTMyODRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjcwNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NvcmUuYz0zMzA2PWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzMxMC1cXG5rZXJuZWwvYnBmL2NvcmUuYzozMzExOmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMzMTIte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNDIyPWdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0OTktXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FyZW5hKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE1MDA6XFx0XFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTUwMS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg4MT1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5NzAtXFx0XFx0aWYgKGJhc2VfdHlwZShpbmZvLVxcdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0FSRU5BKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTcxOlxcdFxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5NzItXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYSBhcmd1bWVudHNcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjoyNzo0Ni4zNTYzMzAxMjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3Mzg3MjAwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgUG9pbnRlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZ2xvYmFsLCB3aGljaCBtZWFucyBpdCBwb3RlbnRpYWxseSB0b3VjaGVzIGEgbG90IG9mIGRpZmZlcmVudCBhcmVhcy4gTXkgaW5pdGlhbCBwYXNzIGhhcyBpZGVudGlmaWVkIHNldmVyYWwga2V5IHN5bWJvbHMuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdDpcblxuKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWBcbiogICBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgXG4qICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2BcbiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YFxuKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYFxuKiAgIGBidGZfY3R4X2FjY2Vzc2BcbiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgXG5cbldhaXQsIGBicGZfcHJlcGFyZV9idGZfaW5mb2AgaXNuJ3QgYSBuZXcgZmVhdHVyZSwganVzdCBhIHJlbmFtZS4gSSdsbCBkcm9wIHRoYXQuIEFuZCwgbG9va2luZyBhdCB0aGUgb3RoZXJzLCBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2AsIGBidGZfY3R4X2FjY2Vzc2AsIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgIGFuZCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGFyZSBtb2RpZmllZCwgYnV0IHRoZXkgYXJlIHJlbGF0aXZlbHkgZ2VuZXJpYyBmdW5jdGlvbnMsIHNvIEknbGwga2VlcCB0aGVtIGFzIEkgZG9uJ3Qgd2FudCB0byBleGNsdWRlIGFueSBwb3RlbnRpYWwgYXJlYXMuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGNoZWNrIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zLiBIbW0sIGlzIGBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnRgIGFmZmVjdGVkPyBObywgdGhhdCBsb29rcyB1bnRvdWNoZWQgYnkgdGhpcyBwYXRjaC5cblxuUmlnaHQsIGxldCdzIHJlZmluZSB0aGF0IGZvY3VzIGxpc3Qgb25lIG1vcmUgdGltZTpcblxuKiAgIGBicGZfdHJhbXBfYXJlbmFfYmFzZWBcbiogICBgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdgXG4qICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2BcbiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YFxuKiAgIGBidGZfZGlzdGlsbF9mdW5jX3Byb3RvYFxuKiAgIGBidGZfY3R4X2FjY2Vzc2BcbiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBzZWVtIGxpa2Ugb2J2aW91cyBjYW5kaWRhdGVzLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB3aGljaCBpbXBsaWVzIGBDT05GSUdfWDg2YCBpcyBuZWVkZWQuIEhvd2V2ZXIsIHNpbmNlIGBYODZgIGlzIGFuIGFyY2hpdGVjdHVyZSBjb25maWcsIGFuZCBub3QgdXN1YWxseSBzcGVjaWZpZWQgaW4gYEVuYWJsZUNvbmZpZ3NgIEkgd2lsbCBqdXN0IHNwZWNpZnkgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgYEJQRl9KSVRfQUxXQVlTX09OYCBpcyBuZWNlc3NhcnkuIE5vLCBgQlBGX0pJVGAgYWxvbmUgaXMgc3VmZmljaWVudC5cblxuT2theSwgbGV0J3MgY3JhZnQgdGhlIHJlYXNvbmluZyBmb3IgdGhpcy4gVGhpcyBwYXRjaCBlbmFibGVzIHBhc3NpbmcgYXJlbmEgcG9pbnRlcnMgdG8gQlBGIGtmdW5jcyBhbmQgYHN0cnVjdF9vcHNgIGNhbGxiYWNrcy4gSXQgY2hhbmdlcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGhhbmRsZSBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX19udWxsYWJsZWAgYW5ub3RhdGlvbnMsIGFuZCB1cGRhdGVzIHRoZSB4ODYgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGNvcnJlY3RseSByZWJhc2UgdGhlc2UgcG9pbnRlcnMgdG8gdGhlIGtlcm5lbCdzIGFyZW5hIGJhc2UgYWRkcmVzcy4gVGhpcyBhZGRzIG5ldyBjb2RlIHBhdGhzIGluIHRoZSB2ZXJpZmllciwgQlRGIHBhcnNpbmcsIGFuZCBKSVQgY29tcGlsYXRpb24sIGFsbCByZWFjaGFibGUgdGhyb3VnaCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LCB3aGljaCBtYWtlcyBpdCBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzZWQgc3ltYm9scyBhcmU6XG5cbiogICBgYnBmX3RyYW1wX2FyZW5hX2Jhc2VgXG4qICAgYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYFxuKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgXG4qICAgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGBcbiogICBgYnRmX2Rpc3RpbGxfZnVuY19wcm90b2BcbiogICBgYnRmX2N0eF9hY2Nlc3NgXG4qICAgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YFxuXG5hbmQgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZTpcblxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgQlBGX0pJVGBcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aG9zZSBzeW1ib2xzIGFyZSBpbmRlZWQgd2hhdCBJIHRoaW5rIHRoZXkgYXJlLiBgYnBmX3RyYW1wX2FyZW5hX2Jhc2VgIGxvb2tzIGNvcnJlY3Q7IGl0J3MgYSBuZXcgZnVuY3Rpb24gaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gR29vZC4gYGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnYCBpcyBuZXcsIGZvdW5kIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBQZXJmZWN0LiBBbmQgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgaXMgbmV3bHkgYWRkZWQgaW4gYGtlcm5lbC9icGYvY29yZS5jYCBhbmQgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIENoZWNrZWQuIExvb2tzIGxpa2UgdGhlIG90aGVyIDQgYXJlIG1vZGlmaWNhdGlvbnMgdG8gZmlsZXMgc3VjaCBhcyBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYCBhbmQgYGtlcm5lbC9icGYvYnRmLmNgLiBBbGwgZ29vZC5cblxuU2VlbXMgbGlrZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDE5LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mjg6MDAuMDk1MDUyMjk5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4NjY2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wX2FyZW5hX2Jhc2VcIixcbiAgICBcImJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdFwiLFxuICAgIFwiYnRmX2Rpc3RpbGxfZnVuY19wcm90b1wiLFxuICAgIFwiYnRmX2N0eF9hY2Nlc3NcIixcbiAgICBcImJwZl9jaGVja19hdHRhY2hfdGFyZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBwYXNzaW5nIGFyZW5hIHBvaW50ZXJzIHRvIEJQRiBrZnVuY3MgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlY29nbml6ZSBgX19hcmVuYWAgYW5kIGBfX2FyZW5hX19udWxsYWJsZWAgYW5ub3RhdGlvbnMsIGFuZCB1cGRhdGVzIHRoZSB4ODYgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIHByb3Blcmx5IHJlYmFzZSB0aGVzZSBwb2ludGVycyB0byB0aGUga2VybmVsJ3MgYXJlbmEgYmFzZSBhZGRyZXNzLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvZGUgcGF0aHMgaW4gdGhlIHZlcmlmaWVyLCBCVEYgcGFyc2luZywgYW5kIEpJVCBjb21waWxhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBfYXJlbmFfYmFzZVwiLFxuICAgIFwiYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmdcIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJidGZfZGlzdGlsbF9mdW5jX3Byb3RvXCIsXG4gICAgXCJidGZfY3R4X2FjY2Vzc1wiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHBhc3NpbmcgYXJlbmEgcG9pbnRlcnMgdG8gQlBGIGtmdW5jcyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVjb2duaXplIGBfX2FyZW5hYCBhbmQgYF9fYXJlbmFfX251bGxhYmxlYCBhbm5vdGF0aW9ucywgYW5kIHVwZGF0ZXMgdGhlIHg4NiBCUEYgSklUIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gcHJvcGVybHkgcmViYXNlIHRoZXNlIHBvaW50ZXJzIHRvIHRoZSBrZXJuZWwncyBhcmVuYSBiYXNlIGFkZHJlc3MuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocyBpbiB0aGUgdmVyaWZpZXIsIEJURiBwYXJzaW5nLCBhbmQgSklUIGNvbXBpbGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjvbks[1] Phase: Succeeded StartedAt: 2026-08-05 22:28:11 +0000 UTC FinishedAt: 2026-08-05 22:28:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 22:28:11 +0000 UTC FinishedAt: 2026-08-05 22:28:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2] Phase: Succeeded StartedAt: 2026-08-05 22:28:11 +0000 UTC FinishedAt: 2026-08-06 02:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 22:28:11 +0000 UTC FinishedAt: 2026-08-06 02:06:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 22:28:11 +0000 UTC FinishedAt: 2026-08-05 22:28:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 22:28:11 +0000 UTC FinishedAt: 2026-08-05 22:28:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjvbks/series-workflowjvbks-convert-artifact-3996837455/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 22:28:22 +0000 UTC FinishedAt: 2026-08-05 22:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 22:28:22 +0000 UTC FinishedAt: 2026-08-05 22:45:01 +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:*7bc6bdb5-30b5-434a-bad2-93d7a5b4727a,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-workflowjvbks/series-workflowjvbks-convert-artifact-3996837455/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": "9308c98e-0d84-4b15-aa65-8b167ec810a1", "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-workflowjvbks/series-workflowjvbks-build-action-2948445589/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 22:28:22 +0000 UTC FinishedAt: 2026-08-05 22:44:51 +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:*7bc6bdb5-30b5-434a-bad2-93d7a5b4727a,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-workflowjvbks/series-workflowjvbks-convert-artifact-3996837455/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": "9308c98e-0d84-4b15-aa65-8b167ec810a1", "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-workflowjvbks/series-workflowjvbks-build-action-2948445589/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 22:45:01 +0000 UTC FinishedAt: 2026-08-05 22:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 22:45:01 +0000 UTC FinishedAt: 2026-08-05 22:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 22:45:01 +0000 UTC FinishedAt: 2026-08-05 22:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 22:45:01 +0000 UTC FinishedAt: 2026-08-05 22:45:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjvbks/series-workflowjvbks-convert-artifact-1166246302/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 22:45:11 +0000 UTC FinishedAt: 2026-08-05 22:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 22:45:11 +0000 UTC FinishedAt: 2026-08-05 22:46:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9308c98e-0d84-4b15-aa65-8b167ec810a1,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-workflowjvbks/series-workflowjvbks-build-action-2948445589/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-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 22:47:02 +0000 UTC FinishedAt: 2026-08-05 22:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 22:47:02 +0000 UTC FinishedAt: 2026-08-05 22:47:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 22:47:02 +0000 UTC FinishedAt: 2026-08-05 23:03:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 22:47:02 +0000 UTC FinishedAt: 2026-08-05 23:03:22 +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:*7bc6bdb5-30b5-434a-bad2-93d7a5b4727a,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-workflowjvbks/series-workflowjvbks-convert-artifact-1166246302/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": "77408ede-608e-44c0-a504-8f3c95e85372", "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-workflowjvbks/series-workflowjvbks-build-action-1300049778/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 22:47:02 +0000 UTC FinishedAt: 2026-08-05 23:03:10 +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:*7bc6bdb5-30b5-434a-bad2-93d7a5b4727a,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-workflowjvbks/series-workflowjvbks-convert-artifact-1166246302/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": "77408ede-608e-44c0-a504-8f3c95e85372", "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-workflowjvbks/series-workflowjvbks-build-action-1300049778/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 23:03:22 +0000 UTC FinishedAt: 2026-08-05 23:03:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 23:03:22 +0000 UTC FinishedAt: 2026-08-05 23:03:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 23:03:22 +0000 UTC FinishedAt: 2026-08-05 23:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 23:03:22 +0000 UTC FinishedAt: 2026-08-05 23:05:00 +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:*77408ede-608e-44c0-a504-8f3c95e85372,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-workflowjvbks/series-workflowjvbks-build-action-1300049778/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-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 23:05:10 +0000 UTC FinishedAt: 2026-08-06 02:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 23:05:10 +0000 UTC FinishedAt: 2026-08-06 02:06:40 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"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:*9308c98e-0d84-4b15-aa65-8b167ec810a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77408ede-608e-44c0-a504-8f3c95e85372,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-workflowjvbks/series-workflowjvbks-build-action-2948445589/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-workflowjvbks/series-workflowjvbks-build-action-1300049778/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 23:05:10 +0000 UTC FinishedAt: 2026-08-05 23:05:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 23:05:10 +0000 UTC FinishedAt: 2026-08-05 23:05:19 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"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-workflowjvbks/series-workflowjvbks-convert-artifact-1260953763/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 23:05:10 +0000 UTC FinishedAt: 2026-08-05 23:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 23:05:10 +0000 UTC FinishedAt: 2026-08-05 23:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 23:05:10 +0000 UTC FinishedAt: 2026-08-05 23:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 23:05:30 +0000 UTC FinishedAt: 2026-08-06 02:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvbks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_tramp_arena_base","bpf_prog_has_arena_ctx_arg","bpf_jit_supports_arena_args","bpf_struct_ops_desc_init","btf_distill_func_proto","btf_ctx_access","bpf_check_attach_target"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"363b15d8551ef6749fac410377a8422325008dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"daa723b8-e93a-4c2f-a2c1-03525b439477","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 23:05:30 +0000 UTC FinishedAt: 2026-08-06 02:06:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9308c98e-0d84-4b15-aa65-8b167ec810a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77408ede-608e-44c0-a504-8f3c95e85372,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-workflowjvbks/series-workflowjvbks-build-action-2948445589/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-workflowjvbks/series-workflowjvbks-build-action-1300049778/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-workflowjvbks/series-workflowjvbks-convert-artifact-1260953763/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,}