Name: series-workflow7jlsb Phase: Succeeded StartedAt: 2026-06-23 19:31:40 +0000 UTC FinishedAt: 2026-06-23 20:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[0] Phase: Succeeded StartedAt: 2026-06-23 19:31:40 +0000 UTC FinishedAt: 2026-06-23 19:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 19:31:40 +0000 UTC FinishedAt: 2026-06-23 19:44:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "f32a375eccb7b27bccc57dee45befff6e3b3d4b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "FUNCTION_TRACER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "f32a375eccb7b27bccc57dee45befff6e3b3d4b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "FUNCTION_TRACER" ], "series_id": "5263f814-3b1b-4de1-9b93-e1c8d595d117" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_jit_build_fentry_stubs", "bpf_jit_emit_exit_insn", "bpf_jit_build_epilogue", "bpf_jit_build_body", "bpf_jit_build_prologue", "bpf_jit_emit_tail_call", "bpf_trampoline_setup_tail_call_info", "bpf_arch_text_poke" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfZXhpdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfZXBpbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9ib2R5JiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfcHJvbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X3RhaWxfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyYjMzQ7LAogICAgJiMzNDticGZfYXJjaF90ZXh0X3Bva2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVlNmE1NjQzYjliYjc1M2FlYTc1MjFlZjUyZTg0NzlkNGYyMDc3N2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxOTo0MzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaCBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5pbmRleCBmMzJkZTg3MDRkNGQ5Ni4uNGRhOGJkZTkyZTFlZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmhcbkBAIC0xNCw2ICYjNDM7MTQsMTMgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHBjLW9wY29kZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcdTAwM2VcbiBcbiYjNDM7LypcbiYjNDM7ICogV2UgbmVlZCBhdCBsZWFzdCAyIHBhc3NlcyBmb3IgcHJvcGVyIGNvZGUgZ2VuZXJhdGlvbiwgYW5kIG1heSBuZWVkXG4mIzQzOyAqIGFkZGl0aW9uYWwgcGFzc2VzIGlmIGNvZGUgc2l6ZSBjaGFuZ2VzIGJldHdlZW4gcGFzc2VzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBDT0RFR0VOX01JTl9QQVNTRVMgICAgMlxuJiM0MzsjZGVmaW5lIENPREVHRU5fTUFYX1BBU1NFUyAgICAzXG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxuICNkZWZpbmUgRlVOQ1RJT05fREVTQ1JfU0laRVx0MjRcbiAjZWxzZVxuQEAgLTE4OCw2ICYjNDM7MTk1LDEyIEBAIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xuIFxuICNkZWZpbmUgYnBmX3RvX3BwYyhyKVx0KGN0eC1cdTAwM2ViMnBbcl0pXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfUFBDNjRcbiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTFdJKGEsIGkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWZkZWYgQ09ORklHX1BQQzMyXG4gI2RlZmluZSBCUEZfRklYVVBfTEVOXHQzIC8qIFRocmVlIGluc3RydWN0aW9ucyA9XHUwMDNlIDEyIGJ5dGVzICovXG4gI2Vsc2VcbkBAIC0yMTQsMTAgJiM0MzsyMjcsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9mdW5jX2NhbGxfcmVsKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpcbiBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4gXHRcdCAgICAgICB1MzIgKmFkZHJzLCBpbnQgcGFzcywgYm9vbCBleHRyYV9wYXNzKTtcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4mIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4taW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpO1xuJiM0MztpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRsb25nIGV4aXRfYWRkcik7XG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcbiBcdFx0XHRcdFx0XHRcdFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcbiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggNjM1MWExODdjYTYxZTIuLjQ2YmJmYjZiZTYxMzQwIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTQ5LDExICYjNDM7NDksMzcgQEAgYXNtIChcbiBcJiMzNDtcdC5wb3BzZWN0aW9uXHRcdFx0XHQ7XCYjMzQ7XG4gKTtcbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdGludCBvb2xfc3R1Yl9pZHgsIGxvbmdfYnJhbmNoX3N0dWJfaWR4O1xuJiM0MztcdGludCBzdHViX3N6O1xuIFxuIFx0LypcbiYjNDM7XHQgKiBUaGUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpcyBwbGFjZWQgYXQgYm90dG9tIG9mIExvbmcgYnJhbmNoIHN0dWIuXG4mIzQzO1x0ICogSW4gdGhlIGZpbmFsIHBhc3MsIGFsaWduIHRoZSBtaXMtYWxpZ25lZCBkdW1teV90cmFtcF9hZGRyIGZpZWxkXG4mIzQzO1x0ICogaW4gdGhlIGZpbWFnZS4gVGhlIGFsaWdubWVudCBOT1AgbXVzdCBhcHBlYXIgYmVmb3JlIE9PTCBzdHViLFxuJiM0MztcdCAqIHRvIG1ha2Ugb29sX3N0dWJfaWR4IFx1MDAyNiBsb25nX2JyYW5jaF9zdHViX2lkeCBjb25zdGFudCBmcm9tIGVuZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGR1bW15X3RyYW1wX2FkZHIgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZCBmb3IgbG9hZC1yZWdpc3RlclxuJiM0MztcdCAqIGNvbXBhdGliaWxpdHkuIFRoZSBmaW1hZ2UgY2FuIGJlIG5vbiA4LWJ5dGUgYWxpZ25lZCwgc28gZmluYWxcbiYjNDM7XHQgKiBhbGlnbm1lbnQgZGVwZW5kcyBvbiBzdGFydCBvZiBmaW1hZ2UgYW5kIHRoZSBzdHViJiMzOTtzIGluc3RydWN0aW9uXG4mIzQzO1x0ICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoXG4mIzQzO1x0ICogQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpIG9yIDEwIGluc3RydWN0aW9ucyAod2l0aG91dClcbiYjNDM7XHQgKiBiZWZvcmUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZC4gRW1pdCBhIE5PUCBpZiB0aGUgYWRkcmVzcyBvZlxuJiM0MztcdCAqIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJbiBwYXNzPTAgd2hlbiBpbWFnZT09TlVMTCwgY29uc2VydmF0aXZlbHkgYWNjb3VudCBmb3Igc3BhY2VcbiYjNDM7XHQgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHNcbiYjNDM7XHQgKiBlbWl0dGluZyBhbGlnbm1lbnQgTk9QLCB0aGUgaW1hZ2UgYnVmZmVyIGhhdmUgNCBzcGFyZSBieXRlcyBhbmRcbiYjNDM7XHQgKiBqaXRlZF9sZW4gc2lnbmlmaWVzIGNvcnJlY3QgcHJvZ3JhbSBzaXplLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwO1xuJiM0MztcdGlmICghaW1hZ2UgfHwgIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZmltYWdlICYjNDM7IGN0eC1cdTAwM2VpZHgqNCAmIzQzOyBzdHViX3N6LCBTWkwpKVxuJiM0MztcdFx0RU1JVChQUENfUkFXX05PUCgpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiAgICAgIG5vcCAgICAgLy8gb3B0aW9uYWwsIGZvciBhbGlnbm1lbnQgb2YgZHVtbXlfdHJhbXBfYWRkclxuIFx0ICogT3V0LW9mLWxpbmUgc3R1YjpcbiBcdCAqXHRtZmxyXHRyMFxuIFx0ICpcdFtifGJsXVx0dHJhbXBcbkBAIC03MCw0NCAmIzQzOzk2LDQ2IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0LypcbiBcdCAqIExvbmcgYnJhbmNoIHN0dWI6XG4tXHQgKlx0LmxvbmdcdFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcdTAwM2VcbiBcdCAqXHRtZmxyXHRyMTFcbiBcdCAqXHRiY2xcdDIwLDMxLCQmIzQzOzRcbi1cdCAqXHRtZmxyXHRyMTJcbi1cdCAqXHRsZFx0cjEyLCAtOC1TWkwocjEyKVxuJiM0MztcdCAqXHRtZmxyXHRyMTJcdC8vIGxyL3IxMiBzdG9yZXMgcGMgb2YgY3VycmVudCh0aGlzKSBpbnN0LlxuJiM0MztcdCAqXHRsZFx0cjEyLCAyMChyMTIpIC8vIG9mZnNldChkdW1teV90cmFtcF9hZGRyKSBmcm9tIHByZXYgaW5zdC4gaXMgMjBcbiBcdCAqXHRtdGN0clx0cjEyXG4tXHQgKlx0bXRsclx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuJiM0MztcdCAqXHRtdGxyXHRyMTFcdC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuIFx0ICpcdGJjdHJcbiYjNDM7XHQgKlx0LmxvbmdcdFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcdTAwM2UgIC8vIDgtYnl0ZSBhbGlnbmVkXG4gXHQgKi9cbi1cdGlmIChpbWFnZSlcbi1cdFx0KigodW5zaWduZWQgbG9uZyAqKVx1MDAyNmltYWdlW2N0eC1cdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xuLVx0Y3R4LVx1MDAzZWlkeCAmIzQzOz0gU1pMIC8gNDtcbiBcdGxvbmdfYnJhbmNoX3N0dWJfaWR4ID0gY3R4LVx1MDAzZWlkeDtcbiBcdEVNSVQoUFBDX1JBV19NRkxSKF9SMTEpKTtcbiBcdEVNSVQoUFBDX1JBV19CQ0w0KCkpO1xuIFx0RU1JVChQUENfUkFXX01GTFIoX1IxMikpO1xuLVx0RU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIC04LVNaTCkpO1xuJiM0MztcdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAyMCkpO1xuIFx0RU1JVChQUENfUkFXX01UQ1RSKF9SMTIpKTtcbiBcdEVNSVQoUFBDX1JBV19NVExSKF9SMTEpKTtcbiBcdEVNSVQoUFBDX1JBV19CQ1RSKCkpO1xuIFxuJiM0MztcdGlmIChpbWFnZSlcbiYjNDM7XHRcdCooKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZpbWFnZVtjdHgtXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWlkeCAmIzQzOz0gU1pMIC8gNDtcbiYjNDM7XG4gXHRpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHtcbiBcdFx0YnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtXHUwMDNlaWR4IC0gb29sX3N0dWJfaWR4KSAqIDQ7XG4gXHRcdGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiA9IChjdHgtXHUwMDNlaWR4IC0gbG9uZ19icmFuY2hfc3R1Yl9pZHgpICogNDtcbiBcdH1cbiB9XG4gXG4taW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXG4mIzQzO2ludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4mIzQzO1x0XHRcdFx0XHRcdFx0aW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxuIHtcbi1cdGlmICghZXhpdF9hZGRyIHx8IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbiYjNDM7XHRpZiAoZXhpdF9hZGRyIFx1MDAyNlx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4gXHRcdFBQQ19KTVAoZXhpdF9hZGRyKTtcbi1cdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpIHtcbi1cdFx0aWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgLSAoY3R4LVx1MDAzZWlkeCAqIDQpKSkpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgXHUwMDI2XHUwMDI2IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoXG4mIzQzO1x0XHRcdChsb25nKShjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcikgLSAobG9uZykoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuIFx0XHRQUENfSk1QKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyID0gY3R4LVx1MDAzZWlkeCAqIDQ7XG4tXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XG4mIzQzO1x0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yNzQsNiAmIzQzOzMwMiw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHQgKi9cbiBcdGlmIChjZ2N0eC5zZWVuIFx1MDAyNiBTRUVOX1RBSUxDQUxMIHx8ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWNnY3R4LmlkeCAqIDQpKSB7XG4gXHRcdGNnY3R4LmlkeCA9IDA7XG4mIzQzO1x0XHRjZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDtcbiBcdFx0aWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgTlVMTCwgTlVMTCwgXHUwMDI2Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuQEAgLTI4Niw3ICYjNDM7MzE1LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdCAqL1xuIFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShOVUxMLCBcdTAwMjZjZ2N0eCk7XG4gXHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbi1cdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgXHUwMDI2Y2djdHgpO1xuJiM0MztcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgXHUwMDI2Y2djdHgpO1xuIFxuIFx0Zml4dXBfbGVuID0gZnAtXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMgKiBCUEZfRklYVVBfTEVOICogNDtcbiBcdGV4dGFibGVfbGVuID0gZnAtXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSk7XG5AQCAtMzA2LDggJiM0MzszMzUsMTAgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdGNvZGVfYmFzZSA9ICh1MzIgKikoaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXHRmY29kZV9iYXNlID0gKHUzMiAqKShmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4tXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xuLVx0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2MgMzsgcGFzcyYjNDM7JiM0MzspIHtcbiYjNDM7XHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiYjNDM7LCBsb29wIHVudGlsIHByb2dyYW0gc2l6ZSBjb252ZXJnZXMuICovXG4mIzQzO1x0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2M9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuO1xuJiM0MztcbiBcdFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFx1MDAyNiBlcGlsb2d1ZSBmb3IgcmVhbC4gKi9cbiBcdFx0Y2djdHguaWR4ID0gMDtcbiBcdFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XG5AQCAtMzE4LDExICYjNDM7MzQ5LDI2IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHRcdFx0YnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7XG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0XHR9XG4tXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4mIzQzO1x0XHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbiYjNDM7XHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4mIzQzO1xuJiM0MztcdFx0cHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7XG4gXG4gXHRcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbiBcdFx0XHRwcl9pbmZvKFwmIzM0O1Bhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcblwmIzM0OywgcGFzcyxcbi1cdFx0XHRcdHByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pO1xuJiM0MztcdFx0XHRcdHByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pO1xuJiM0MztcbiYjNDM7XHRcdC8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovXG4mIzQzO1x0XHRpZiAocGFzcyBcdTAwM2U9IENPREVHRU5fTUlOX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiA9PSBwcmV2X3Byb2dsZW4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O0JQRiBKSVQ6IFByb2dyYW0gZGlkIG5vdCBjb252ZXJnZSBhZnRlciAlZCBwYXNzZXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRDT0RFR0VOX01BWF9QQVNTRVMpO1xuJiM0MztcdFx0XHRicGZfYXJjaF90ZXh0X2NvcHkoXHUwMDI2Zmhkci1cdTAwM2VzaXplLCBcdTAwMjZoZHItXHUwMDNlc2l6ZSwgc2l6ZW9mKGhkci1cdTAwM2VzaXplKSk7XG4mIzQzO1x0XHRcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xuJiM0MztcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG5AQCAtMzU3LDcgJiM0Mzs0MDMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRcdFx0KHZvaWQgKilmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4gb3V0X2FkZHJzOlxuLVx0XHRpZiAoIWltYWdlIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuJiM0MztcdFx0aWYgKCFmcC1cdTAwM2VqaXRlZCBcdTAwMjZcdTAwMjYgcHJpdl9zdGFja19wdHIpIHtcbiBcdFx0XHRmcC1cdTAwM2VhdXgtXHUwMDNlcHJpdl9zdGFja19wdHIgPSBOVUxMO1xuIFx0XHRcdGZyZWVfcGVyY3B1KHByaXZfc3RhY2tfcHRyKTtcbiBcdFx0fVxuQEAgLTczNCw3ICYjNDM7NzgwLDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm8odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGVcbiBcdFx0ICogU2V0dGluZyB0aGUgdGFpbF9jYWxsX2luZm8gaW4gdHJhbXBvbGluZSYjMzk7cyBmcmFtZVxuIFx0XHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cbiBcdFx0ICovXG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdFx0RU1JVChQUENfUkFXX0NNUExMSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXHRcdEVNSVQoUFBDX1JBV19BRERJKF9SMywgX1I0LCAtQlBGX1BQQ19UQUlMQ0FMTCkpO1xuIFxuQEAgLTEyNjAsNiAmIzQzOzEzMDYsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKVxuICAqIGJwZl9mdW5jOlxuICAqXHRbbm9wfGJdXHRvb2xfc3R1YlxuICAqIDIuIE91dC1vZi1saW5lIHN0dWI6XG4mIzQzOyAqXHRub3BcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XG4gICogb29sX3N0dWI6XG4gICpcdG1mbHJcdHIwXG4gICpcdFtifGJsXVx0XHUwMDNjYnBmX3Byb2dcdTAwM2UvXHUwMDNjbG9uZ19icmFuY2hfc3R1Ylx1MDAzZVxuQEAgLTEyNjcsMTQgJiM0MzsxMzE0LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXG4gICpcdGJcdGJwZl9mdW5jICYjNDM7IDRcbiAgKiAzLiBMb25nIGJyYW5jaCBzdHViOlxuICAqIGxvbmdfYnJhbmNoX3N0dWI6XG4tICpcdC5sb25nXHRcdTAwM2NicmFuY2hfYWRkclx1MDAzZS9cdTAwM2NkdW1teV90cmFtcFx1MDAzZVxuICAqXHRtZmxyXHRyMTFcbiAgKlx0YmNsXHQyMCwzMSwkJiM0Mzs0XG4gICpcdG1mbHJcdHIxMlxuLSAqXHRsZFx0cjEyLCAtMTYocjEyKVxuJiM0MzsgKlx0bGRcdHIxMiwgMjAocjEyKVxuICAqXHRtdGN0clx0cjEyXG4gICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiAgKlx0YmN0clxuJiM0MzsgKlx0LmxvbmdcdFx1MDAzY2JyYW5jaF9hZGRyXHUwMDNlL1x1MDAzY2R1bW15X3RyYW1wXHUwMDNlXG4gICpcbiAgKiBkdW1teV90cmFtcCBpcyB1c2VkIHRvIHJlZHVjZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzLlxuICAqXG5AQCAtMTM3NiwxMCAmIzQzOzE0MjMsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsXG4gXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XG4gXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXG4gXHQgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGR1bW15X3RyYW1wX2FkZHIgbW92ZWQgdG8gYm90dG9tIG9mIGxvbmcgYnJhbmNoIHN0dWIuXG4gXHQgKi9cbiBcdGlmICgobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSB8fFxuIFx0ICAgIChvbGRfYWRkciBcdTAwMjZcdTAwMjYgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2Uob2xkX2FkZHIgLSBpcCkpKVxuLVx0XHRyZXQgPSBwYXRjaF91bG9uZygodm9pZCAqKShicGZfZnVuY19lbmQgLSBicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgLSBTWkwpLFxuJiM0MztcdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xuIFx0XHRcdFx0ICAobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/XG4gXHRcdFx0XHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IGJmZGM1MDc0MGRhOGU3Li5mNWI5NDQxY2Y0NmFhNyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXG5AQCAtMjI5LDcgJiM0MzsyMjksNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxuIFxuIH1cbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRFTUlUKFBQQ19SQVdfTVIoX1IzLCBicGZfdG9fcHBjKEJQRl9SRUdfMCkpKTtcbiBcbkBAIC0yMzcsNyAmIzQzOzIzNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXG4gXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xuIFxuLVx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XG4mIzQzO1x0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiB9XG4gXG4gLyogUmVsYXRpdmUgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gZmluYWwgaW1hZ2UgbG9jYXRpb24gKi9cbkBAIC0xMTQ5LDcgJiM0MzsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSYjMzk7bGwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGVwaWxvZ3VlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICE9IGZsZW4gLSAxKSB7XG4tXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIF9SMCwgZXhpdF9hZGRyKTtcbiYjNDM7XHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRjdHgsIF9SMCwgZXhpdF9hZGRyKTtcbiBcdFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZGIzNjRkOTA4M2U3MjUuLjA4NjA4NGFiYjE4NGE0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXHRcdCAqL1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIDApKTtcbiBcdFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCAtKEJQRl9QUENfVEFJTENBTEwpKSk7XG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdFx0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXHRcdEVNSVQoUFBDX1JBV19BRERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgYnBmX3RvX3BwYyhUTVBfUkVHXzIpLFxuIFx0XHRcdFx0XHRcdFx0XHQtKEJQRl9QUENfVEFJTENBTEwpKSk7XG5AQCAtMzk4LDcgJiM0MzszOTgsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxuIFx0fVxuIH1cbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuIFxuQEAgLTQwNyw3ICYjNDM7NDA3LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcbiBcdEVNSVQoUFBDX1JBV19CTFIoKSk7XG4gXG4tXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgY3R4KTtcbiYjNDM7XHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpO1xuIH1cbiBcbiAvKlxuQEAgLTY1MSw3ICYjNDM7NjUxLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdFBQQ19CQ0NfU0hPUlQoQ09ORF9HRSwgb3V0KTtcbiBcbiBcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTtcbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0xFLCA4KTtcbiBcbiBcdC8qIGRlcmVmZXJlbmNlIFRNUF9SRUdfMSAqL1xuQEAgLTY2MSw3ICYjNDM7NjYxLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIGlmICh0YWlsX2NhbGxfaW5mbyA9PSBNQVhfVEFJTF9DQUxMX0NOVClcbiBcdCAqICAgZ290byBvdXQ7XG4gXHQgKi9cbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0VRLCBvdXQpO1xuIFxuIFx0LypcbkBAIC02OTYsNyAmIzQzOzY5Niw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvXG4gXHQgKiB0YWlsX2NhbGxfaW5mby5cbiBcdCAqL1xuIFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpO1xuLVx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMiksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4mIzQzO1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMiksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xuIFxuIFx0LyogRmlyc3QgZ2V0IGFkZHJlc3Mgb2YgdGFpbF9jYWxsX2luZm8gKi9cbkBAIC0xNzI2LDcgJiM0MzsxNzI2LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSYjMzk7bGwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGVwaWxvZ3VlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICE9IGZsZW4gLSAxKSB7XG4tXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIHRtcDFfcmVnLCBleGl0X2FkZHIpO1xuJiM0MztcdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwgY3R4LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IDM1NThmZTEwZTI4Y2Y5Li4xMTQyOGNhZDViMmQyYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXG5AQCAtMTc4LDEwICYjNDM7MTc4LDEyIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbyA9IHt9O1xuIFx0X191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4tXHRfX3UzMiBqaXRlZF9mdW5jcywgbGVuLCBwYztcbiYjNDM7XHRfX3UzMiBqaXRlZF9mdW5jcywgbGVuLCBwYywgZGlzYXNtX2xlbjtcbiYjNDM7XHRfX3UzMiB0cnVuY19sZW4gPSAwO1xuIFx0X191MzIgKmZ1bmNfbGVucyA9IE5VTEw7XG4gXHRGSUxFICp0ZXh0X291dCA9IE5VTEw7XG4gXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XG4mIzQzO1x0Y2hhciAqdHJpcGxlID0gTlVMTDtcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0aWYgKCFsbHZtX2luaXRpYWxpemVkKSB7XG5AQCAtMjI1LDkgJiM0MzsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiBcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUXG4mIzQzO1x0ICogb3V0cHV0IG9uIDY0LWJpdCBhbmQgbGFzdCA0IGJ5dGVzIG9uIDMyLWJpdCBwb3dlcnBjLFxuJiM0MztcdCAqIHdoaWNoIGNhbiYjMzk7dCBkaXNhc3NlbWJsZSB0byBhIHZhbGlkIGluc3RydWN0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHRyaXBsZSA9IExMVk1HZXREZWZhdWx0VGFyZ2V0VHJpcGxlKCk7XG4mIzQzO1x0aWYgKHRyaXBsZSkge1xuJiM0MztcdFx0aWYgKHN0cnN0cih0cmlwbGUsIFwmIzM0O3Bvd2VycGM2NFwmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgXCYjMzQ7cHBjNjRcJiMzNDspKVxuJiM0MztcdFx0XHR0cnVuY19sZW4gPSA4O1xuJiM0MztcdFx0ZWxzZSBpZiAoc3Ryc3RyKHRyaXBsZSwgXCYjMzQ7cG93ZXJwY1wmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgXCYjMzQ7cHBjXCYjMzQ7KSlcbiYjNDM7XHRcdFx0dHJ1bmNfbGVuID0gNDtcbiYjNDM7XHRcdExMVk1EaXNwb3NlTWVzc2FnZSh0cmlwbGUpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRmb3IgKHBjID0gMCwgaSA9IDA7IGkgXHUwMDNjIGppdGVkX2Z1bmNzOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCYjMzQ7ZnVuYyAjJWQ6XFxuXCYjMzQ7LCBpKTtcbi1cdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZnVuY19sZW5zW2ldKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBEaXNhYmxlZCBKSVQgaGF2ZSB6ZXJvIGZ1bmNfbGVucywgaGVuY2UgdW5kZXJmbG93XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRpc2FzbV9sZW4gPSBmdW5jX2xlbnNbaV0gXHUwMDNlIHRydW5jX2xlbiA/XG4mIzQzO1x0XHRcdFx0XHRmdW5jX2xlbnNbaV0gLSB0cnVuY19sZW4gOiAwO1xuJiM0MztcdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZGlzYXNtX2xlbik7XG4mIzQzO1xuIFx0XHRmcHJpbnRmKHRleHRfb3V0LCBcJiMzNDtcXG5cJiMzNDspO1xuIFx0XHRwYyAmIzQzOz0gZnVuY19sZW5zW2ldO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IDllZWI1YjBiNjNkNjk3Li5jZGMyYTNkZTMwNTQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuQEAgLTE1OCw2ICYjNDM7MTU4LDcgQEBcbiAjZGVmaW5lIF9fYXJjaF9hcm02NFx0XHRfX2FyY2goXCYjMzQ7QVJNNjRcJiMzNDspXG4gI2RlZmluZSBfX2FyY2hfcmlzY3Y2NFx0XHRfX2FyY2goXCYjMzQ7UklTQ1Y2NFwmIzM0OylcbiAjZGVmaW5lIF9fYXJjaF9zMzkweFx0XHRfX2FyY2goXCYjMzQ7czM5MHhcJiMzNDspXG4mIzQzOyNkZWZpbmUgX19hcmNoX3Bvd2VycGM2NFx0X19hcmNoKFwmIzM0O1BPV0VSUEM2NFwmIzM0OylcbiAjZGVmaW5lIF9fY2Fwc191bnByaXYoY2FwcylcdF9fdGVzdF90YWcoXCYjMzQ7dGVzdF9jYXBzX3VucHJpdj1cJiMzNDsgRVhQQU5EX1FVT1RFKGNhcHMpKVxuICNkZWZpbmUgX19sb2FkX2lmX0pJVGVkKClcdF9fdGVzdF90YWcoXCYjMzQ7bG9hZF9tb2RlPWppdGVkXCYjMzQ7KVxuICNkZWZpbmUgX19sb2FkX2lmX25vX0pJVGVkKClcdF9fdGVzdF90YWcoXCYjMzQ7bG9hZF9tb2RlPW5vX2ppdGVkXCYjMzQ7KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuaW5kZXggNDhmYTM0ZDI5NTlmNDYuLjA5ZDdlOTJjODQ5MTAwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbkBAIC05MSw2ICYjNDM7OTEsNzUgQEAgX19qaXRlZChcJiMzNDtcdHBvcHFcdCVyYXhcJiMzNDspXG4gX19qaXRlZChcJiMzNDtcdGptcFx0e3suKn19XCYjMzQ7KVx0XHQvKiBqdW1wIHRvIHRhaWwgY2FsbCB0Z3QgICAqL1xuIF9faml0ZWQoXCYjMzQ7TDA6XHRsZWF2ZVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0e3socmV0cXxqbXBcdDB4KX19XCYjMzQ7KVx0XHQvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovXG4mIzQzO19fYXJjaF9wb3dlcnBjNjRcbiYjNDM7LyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRub3BcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsaSA5LCAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkIDksIC04KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bWZsciAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkIDAsIDE2KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkdSAxLCB7ey4qfX0oMSlcJiMzNDspXG4mIzQzOy8qIGxvYWQgYWRkcmVzcyBhbmQgY2FsbCBzdWIoKSB2aWEgY291bnQgcmVnaXN0ZXIgKi9cbiYjNDM7X19qaXRlZChcJiMzNDtcdGxpcyAxMiwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c2xkaSAxMiwgMTIsIDMyXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0b3JpcyAxMiwgMTIsIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaSAxMiwgMTIsIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG10Y3RyIDEyXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YmN0cmxcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtclx0OCwgM1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxpIDgsIDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRpIDEsIDEsIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxkIDAsIDE2KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXRsciAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXJcdDMsIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRibHJcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2Z1bmMgIzFcJiMzNDspXG4mIzQzOy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRub3BcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzOy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xuJiM0MztfX2ppdGVkKFwmIzM0O1x0bGQgMTAsIDAoMSlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAtOCgxMClcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRjbXBsZGlcdDksIDMzXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YnRcdHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkaSA5LCAxMCwgLThcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzdGQgOSwgLTgoMSlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsaXMge3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzbGRpIHt7Lip9fSwge3suKn19LCAzMlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaSB7ey4qfX0sIHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bGkge3suKn19LCAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bHd6IDksIHt7Lip9fSh7ey4qfX0pXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c2x3aSB7ey4qfX0sIHt7Lip9fSwgMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGx3XHR7ey4qfX0sIDlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiZlx0MCwge3suKn19XCYjMzQ7KVxuJiM0MzsvKiBicGZfdGFpbF9jYWxsIGltcGxlbWVudGF0aW9uICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAtOCgxKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0OSwgMzNcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiZlx0e3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAwKDkpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y21wbGRpXHQ5LCAzM1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGJ0XHR7ey4qfX0sIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZGkgOSwgOSwgMVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG11bGxpIDEwLCB7ey4qfX0sIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGQgMTAsIDEwLCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCAxMCwge3suKn19KDEwKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0MTAsIDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRidFx0e3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCAxMCwge3suKn19KDEwKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZGkgMTAsIDEwLCB7ey4qfX1cJiMzNDspICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtdGN0ciAxMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxkIDEwLCAtOCgxKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0MTAsIDMzXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YnRcdHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkaSAxMCwgMSwgLThcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzdGQgOSwgMCgxMClcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiY3RyXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXJcdDMsIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRibHJcJiMzNDspXG4mIzQzO1xuIFNFQyhcJiMzNDt0Y1wmIzM0OylcbiBfX25ha2VkIGludCBtYWluKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbmluZGV4IGFiZGI5ZTZlMzcxMzYyLi5kNTU4OTM1NWVkOWUwYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuQEAgLTM3Nyw2ICYjNDM7Mzc3LDcgQEAgZW51bSBhcmNoIHtcbiBcdEFSQ0hfQVJNNjRcdD0gMHg0LFxuIFx0QVJDSF9SSVNDVjY0XHQ9IDB4OCxcbiBcdEFSQ0hfUzM5MFhcdD0gMHgxMCxcbiYjNDM7XHRBUkNIX1BPV0VSUEM2NFx0PSAweDIwLFxuIH07XG4gXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG5AQCAtMzg5LDYgJiM0MzszOTAsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbiBcdHJldHVybiBBUkNIX1JJU0NWNjQ7XG4gI2VsaWYgZGVmaW5lZChfX3MzOTB4X18pXG4gXHRyZXR1cm4gQVJDSF9TMzkwWDtcbiYjNDM7I2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKVxuJiM0MztcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcbiAjZW5kaWZcbiBcdHJldHVybiBBUkNIX1VOS05PV047XG4gfVxuQEAgLTU4MCw2ICYjNDM7NTgzLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdFx0XHRhcmNoID0gQVJDSF9SSVNDVjY0O1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCYjMzQ7czM5MHhcJiMzNDspID09IDApIHtcbiBcdFx0XHRcdGFyY2ggPSBBUkNIX1MzOTBYO1xuJiM0MztcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O1BPV0VSUEM2NFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0XHRcdGFyY2ggPSBBUkNIX1BPV0VSUEM2NDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0UFJJTlRfRkFJTChcJiMzNDtiYWQgYXJjaCBzcGVjOiAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIHZhbCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfZXhpdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfZXBpbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9ib2R5JiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfcHJvbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X3RhaWxfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyYjMzQ7LAogICAgJiMzNDticGZfYXJjaF90ZXh0X3Bva2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWU2YTU2NDNiOWJiNzUzYWVhNzUyMWVmNTJlODQ3OWQ0ZjIwNzc3YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDE5OjQzOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAppbmRleCBmMzJkZTg3MDRkNGQ5Ni4uNGRhOGJkZTkyZTFlZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oCkBAIC0xNCw2ICYjNDM7MTQsMTMgQEAKICNpbmNsdWRlICZsdDthc20vcHBjLW9wY29kZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1aWxkX2J1Zy5oJmd0OwogCiYjNDM7LyoKJiM0MzsgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWQKJiM0MzsgKiBhZGRpdGlvbmFsIHBhc3NlcyBpZiBjb2RlIHNpemUgY2hhbmdlcyBiZXR3ZWVuIHBhc3Nlcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyCiYjNDM7I2RlZmluZSBDT0RFR0VOX01BWF9QQVNTRVMgICAgMwomIzQzOwogI2lmZGVmIENPTkZJR19QUEM2NF9FTEZfQUJJX1YxCiAjZGVmaW5lIEZVTkNUSU9OX0RFU0NSX1NJWkUJMjQKICNlbHNlCkBAIC0xODgsNiAmIzQzOzE5NSwxMiBAQCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0IHsKIAogI2RlZmluZSBicGZfdG9fcHBjKHIpCShjdHgtJmd0O2IycFtyXSkKIAomIzQzOyNpZmRlZiBDT05GSUdfUFBDNjQKJiM0MzsjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTERJKGEsIGkpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTFdJKGEsIGkpCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX1BQQzMyCiAjZGVmaW5lIEJQRl9GSVhVUF9MRU4JMyAvKiBUaHJlZSBpbnN0cnVjdGlvbnMgPSZndDsgMTIgYnl0ZXMgKi8KICNlbHNlCkBAIC0yMTQsMTAgJiM0MzsyMjcsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9mdW5jX2NhbGxfcmVsKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICoKIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwKIAkJICAgICAgIHUzMiAqYWRkcnMsIGludCBwYXNzLCBib29sIGV4dHJhX3Bhc3MpOwogdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTsKLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTsKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTsKIHZvaWQgYnBmX2ppdF9yZWFsbG9jX3JlZ3Moc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTsKLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTsKJiM0MztpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywKJiM0MzsJCQkJCQkJCQkJbG9uZyBleGl0X2FkZHIpOwogdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCwKIAkJCQkJCQkJaW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTsKIHZvaWQgc3RvcmVfZnVuY19tZXRhKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTY0IGZ1bmNfbWV0YSwgaW50IGZ1bmNfbWV0YV9vZmYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggNjM1MWExODdjYTYxZTIuLjQ2YmJmYjZiZTYxMzQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTQ5LDExICYjNDM7NDksMzcgQEAgYXNtICgKICYjMzQ7CS5wb3BzZWN0aW9uCQkJCTsmIzM0OwogKTsKIAotdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogewogCWludCBvb2xfc3R1Yl9pZHgsIGxvbmdfYnJhbmNoX3N0dWJfaWR4OwomIzQzOwlpbnQgc3R1Yl9zejsKIAogCS8qCiYjNDM7CSAqIFRoZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkIGlzIHBsYWNlZCBhdCBib3R0b20gb2YgTG9uZyBicmFuY2ggc3R1Yi4KJiM0MzsJICogSW4gdGhlIGZpbmFsIHBhc3MsIGFsaWduIHRoZSBtaXMtYWxpZ25lZCBkdW1teV90cmFtcF9hZGRyIGZpZWxkCiYjNDM7CSAqIGluIHRoZSBmaW1hZ2UuIFRoZSBhbGlnbm1lbnQgTk9QIG11c3QgYXBwZWFyIGJlZm9yZSBPT0wgc3R1YiwKJiM0MzsJICogdG8gbWFrZSBvb2xfc3R1Yl9pZHggJmFtcDsgbG9uZ19icmFuY2hfc3R1Yl9pZHggY29uc3RhbnQgZnJvbSBlbmQuCiYjNDM7CSAqCiYjNDM7CSAqIGR1bW15X3RyYW1wX2FkZHIgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZCBmb3IgbG9hZC1yZWdpc3RlcgomIzQzOwkgKiBjb21wYXRpYmlsaXR5LiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsCiYjNDM7CSAqIGFsaWdubWVudCBkZXBlbmRzIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWImIzM5O3MgaW5zdHJ1Y3Rpb24KJiM0MzsJICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoCiYjNDM7CSAqIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSBvciAxMCBpbnN0cnVjdGlvbnMgKHdpdGhvdXQpCiYjNDM7CSAqIGJlZm9yZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkLiBFbWl0IGEgTk9QIGlmIHRoZSBhZGRyZXNzIG9mCiYjNDM7CSAqIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuCiYjNDM7CSAqCiYjNDM7CSAqIEluIHBhc3M9MCB3aGVuIGltYWdlPT1OVUxMLCBjb25zZXJ2YXRpdmVseSBhY2NvdW50IGZvciBzcGFjZQomIzQzOwkgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHMKJiM0MzsJICogZW1pdHRpbmcgYWxpZ25tZW50IE5PUCwgdGhlIGltYWdlIGJ1ZmZlciBoYXZlIDQgc3BhcmUgYnl0ZXMgYW5kCiYjNDM7CSAqIGppdGVkX2xlbiBzaWduaWZpZXMgY29ycmVjdCBwcm9ncmFtIHNpemUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwOwomIzQzOwlpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSAmIzQzOyBjdHgtJmd0O2lkeCo0ICYjNDM7IHN0dWJfc3osIFNaTCkpCiYjNDM7CQlFTUlUKFBQQ19SQVdfTk9QKCkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiAgICAgIG5vcCAgICAgLy8gb3B0aW9uYWwsIGZvciBhbGlnbm1lbnQgb2YgZHVtbXlfdHJhbXBfYWRkcgogCSAqIE91dC1vZi1saW5lIHN0dWI6CiAJICoJbWZscglyMAogCSAqCVtifGJsXQl0cmFtcApAQCAtNzAsNDQgJiM0Mzs5Niw0NiBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIAogCS8qCiAJICogTG9uZyBicmFuY2ggc3R1YjoKLQkgKgkubG9uZwkmbHQ7ZHVtbXlfdHJhbXBfYWRkciZndDsKIAkgKgltZmxyCXIxMQogCSAqCWJjbAkyMCwzMSwkJiM0Mzs0Ci0JICoJbWZscglyMTIKLQkgKglsZAlyMTIsIC04LVNaTChyMTIpCiYjNDM7CSAqCW1mbHIJcjEyCS8vIGxyL3IxMiBzdG9yZXMgcGMgb2YgY3VycmVudCh0aGlzKSBpbnN0LgomIzQzOwkgKglsZAlyMTIsIDIwKHIxMikgLy8gb2Zmc2V0KGR1bW15X3RyYW1wX2FkZHIpIGZyb20gcHJldiBpbnN0LiBpcyAyMAogCSAqCW10Y3RyCXIxMgotCSAqCW10bHIJcjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSQomIzQzOwkgKgltdGxyCXIxMQkvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQkkKIAkgKgliY3RyCiYjNDM7CSAqCS5sb25nCSZsdDtkdW1teV90cmFtcF9hZGRyJmd0OyAgLy8gOC1ieXRlIGFsaWduZWQKIAkgKi8KLQlpZiAoaW1hZ2UpCi0JCSooKHVuc2lnbmVkIGxvbmcgKikmYW1wO2ltYWdlW2N0eC0mZ3Q7aWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDsKLQljdHgtJmd0O2lkeCAmIzQzOz0gU1pMIC8gNDsKIAlsb25nX2JyYW5jaF9zdHViX2lkeCA9IGN0eC0mZ3Q7aWR4OwogCUVNSVQoUFBDX1JBV19NRkxSKF9SMTEpKTsKIAlFTUlUKFBQQ19SQVdfQkNMNCgpKTsKIAlFTUlUKFBQQ19SQVdfTUZMUihfUjEyKSk7Ci0JRU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIC04LVNaTCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgMjApKTsKIAlFTUlUKFBQQ19SQVdfTVRDVFIoX1IxMikpOwogCUVNSVQoUFBDX1JBV19NVExSKF9SMTEpKTsKIAlFTUlUKFBQQ19SQVdfQkNUUigpKTsKIAomIzQzOwlpZiAoaW1hZ2UpCiYjNDM7CQkqKCh1bnNpZ25lZCBsb25nICopJmFtcDtpbWFnZVtjdHgtJmd0O2lkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7aWR4ICYjNDM7PSBTWkwgLyA0OwomIzQzOwogCWlmICghYnBmX2ppdF9vb2xfc3R1YikgewogCQlicGZfaml0X29vbF9zdHViID0gKGN0eC0mZ3Q7aWR4IC0gb29sX3N0dWJfaWR4KSAqIDQ7CiAJCWJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiA9IChjdHgtJmd0O2lkeCAtIGxvbmdfYnJhbmNoX3N0dWJfaWR4KSAqIDQ7CiAJfQogfQogCi1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcikKJiM0MztpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LAomIzQzOwkJCQkJCQlpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpCiB7Ci0JaWYgKCFleGl0X2FkZHIgfHwgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAoY3R4LSZndDtpZHggKiA0KSkpIHsKJiM0MzsJaWYgKGV4aXRfYWRkciAmYW1wOyZhbXA7IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGxvbmcpKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiAJCVBQQ19KTVAoZXhpdF9hZGRyKTsKLQl9IGVsc2UgaWYgKGN0eC0mZ3Q7YWx0X2V4aXRfYWRkcikgewotCQlpZiAoV0FSTl9PTighaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljdHgtJmd0O2FsdF9leGl0X2FkZHIgLSAoY3R4LSZndDtpZHggKiA0KSkpKQotCQkJcmV0dXJuIC0xOwomIzQzOwl9IGVsc2UgaWYgKGN0eC0mZ3Q7YWx0X2V4aXRfYWRkciAmYW1wOyZhbXA7IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoCiYjNDM7CQkJKGxvbmcpKGN0eC0mZ3Q7YWx0X2V4aXRfYWRkcikgLSAobG9uZykoY3R4LSZndDtpZHggKiA0KSkpIHsKIAkJUFBDX0pNUChjdHgtJmd0O2FsdF9leGl0X2FkZHIpOwogCX0gZWxzZSB7CiAJCWN0eC0mZ3Q7YWx0X2V4aXRfYWRkciA9IGN0eC0mZ3Q7aWR4ICogNDsKLQkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgY3R4KTsKJiM0MzsJCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGZpbWFnZSwgY3R4KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI3NCw2ICYjNDM7MzAyLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHIKIAkgKi8KIAlpZiAoY2djdHguc2VlbiAmYW1wOyBTRUVOX1RBSUxDQUxMIHx8ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWNnY3R4LmlkeCAqIDQpKSB7CiAJCWNnY3R4LmlkeCA9IDA7CiYjNDM7CQljZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDsKIAkJaWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgTlVMTCwgTlVMTCwgJmFtcDtjZ2N0eCwgYWRkcnMsIDAsIGZhbHNlKSkKIAkJCWdvdG8gb3V0X2VycjsKIAl9CkBAIC0yODYsNyAmIzQzOzMxNSw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJICovCiAJYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShOVUxMLCAmYW1wO2NnY3R4KTsKIAlhZGRyc1tmcC0mZ3Q7bGVuXSA9IGNnY3R4LmlkeCAqIDQ7Ci0JYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCAmYW1wO2NnY3R4KTsKJiM0MzsJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCBOVUxMLCAmYW1wO2NnY3R4KTsKIAogCWZpeHVwX2xlbiA9IGZwLSZndDthdXgtJmd0O251bV9leGVudHJpZXMgKiBCUEZfRklYVVBfTEVOICogNDsKIAlleHRhYmxlX2xlbiA9IGZwLSZndDthdXgtJmd0O251bV9leGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSk7CkBAIC0zMDYsOCAmIzQzOzMzNSwxMCBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCWNvZGVfYmFzZSA9ICh1MzIgKikoaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAJZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICYjNDM7IEZVTkNUSU9OX0RFU0NSX1NJWkUpOwogCi0JLyogQ29kZSBnZW5lcmF0aW9uIHBhc3NlcyAxLTIgKi8KLQlmb3IgKHBhc3MgPSAxOyBwYXNzICZsdDsgMzsgcGFzcyYjNDM7JiM0MzspIHsKJiM0MzsJLyogQ29kZSBnZW5lcmF0aW9uIHBhc3NlcyAxLTImIzQzOywgbG9vcCB1bnRpbCBwcm9ncmFtIHNpemUgY29udmVyZ2VzLiAqLwomIzQzOwlmb3IgKHBhc3MgPSAxOyBwYXNzICZsdDs9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcyYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuOwomIzQzOwogCQkvKiBOb3cgYnVpbGQgdGhlIHByb2xvZ3VlLCBib2R5IGNvZGUgJmFtcDsgZXBpbG9ndWUgZm9yIHJlYWwuICovCiAJCWNnY3R4LmlkeCA9IDA7CiAJCWNnY3R4LmFsdF9leGl0X2FkZHIgPSAwOwpAQCAtMzE4LDExICYjNDM7MzQ5LDI2IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJCQlicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTsKIAkJCWdvdG8gb3V0X2VycjsKIAkJfQotCQlicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGNvZGVfYmFzZSwgJmFtcDtjZ2N0eCk7CiYjNDM7CQlhZGRyc1tmcC0mZ3Q7bGVuXSA9IGNnY3R4LmlkeCAqIDQ7CiYjNDM7CQlicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGNvZGVfYmFzZSwgZmNvZGVfYmFzZSwgJmFtcDtjZ2N0eCk7CiYjNDM7CiYjNDM7CQlwcm9nbGVuID0gY2djdHguaWR4ICogNDsKIAogCQlpZiAoYnBmX2ppdF9lbmFibGUgJmd0OyAxKQogCQkJcHJfaW5mbygmIzM0O1Bhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxuJiMzNDssIHBhc3MsCi0JCQkJcHJvZ2xlbiAtIChjZ2N0eC5pZHggKiA0KSwgY2djdHguc2Vlbik7CiYjNDM7CQkJCXByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pOwomIzQzOwomIzQzOwkJLyogQ2hlY2sgaWYgcHJvZ3JhbSBzaXplIGhhcyBjb252ZXJnZWQsIGJ1dCBlbnN1cmUgbWluaW11bSBwYXNzZXMgKi8KJiM0MzsJCWlmIChwYXNzICZndDs9IENPREVHRU5fTUlOX1BBU1NFUyAmYW1wOyZhbXA7IHByb2dsZW4gPT0gcHJldl9wcm9nbGVuKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKHBhc3MgPT0gQ09ERUdFTl9NQVhfUEFTU0VTICZhbXA7JmFtcDsgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtCUEYgSklUOiBQcm9ncmFtIGRpZCBub3QgY29udmVyZ2UgYWZ0ZXIgJWQgcGFzc2VzXG4mIzM0OywKJiM0MzsJCQkJCQkJCUNPREVHRU5fTUFYX1BBU1NFUyk7CiYjNDM7CQkJYnBmX2FyY2hfdGV4dF9jb3B5KCZhbXA7Zmhkci0mZ3Q7c2l6ZSwgJmFtcDtoZHItJmd0O3NpemUsIHNpemVvZihoZHItJmd0O3NpemUpKTsKJiM0MzsJCQlicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTsKJiM0MzsJCQlnb3RvIG91dF9lcnI7CiYjNDM7CQl9CiAJfQogCiAJaWYgKGJwZl9qaXRfZW5hYmxlICZndDsgMSkKQEAgLTM1Nyw3ICYjNDM7NDAzLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHIKIAkJCQkodm9pZCAqKWZpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTsKIAogb3V0X2FkZHJzOgotCQlpZiAoIWltYWdlICZhbXA7JmFtcDsgcHJpdl9zdGFja19wdHIpIHsKJiM0MzsJCWlmICghZnAtJmd0O2ppdGVkICZhbXA7JmFtcDsgcHJpdl9zdGFja19wdHIpIHsKIAkJCWZwLSZndDthdXgtJmd0O3ByaXZfc3RhY2tfcHRyID0gTlVMTDsKIAkJCWZyZWVfcGVyY3B1KHByaXZfc3RhY2tfcHRyKTsKIAkJfQpAQCAtNzM0LDcgJiM0Mzs3ODAsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZQogCQkgKiBTZXR0aW5nIHRoZSB0YWlsX2NhbGxfaW5mbyBpbiB0cmFtcG9saW5lJiMzOTtzIGZyYW1lCiAJCSAqIGRlcGVuZGluZyBvbiBpZiBwcmV2aW91cyBmcmFtZSBoYWQgdmFsdWUgb3IgcmVmZXJlbmNlLgogCQkgKi8KLQkJRU1JVChQUENfUkFXX0NNUExXSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CQlFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAkJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAkJRU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7CiAKQEAgLTEyNjAsNiAmIzQzOzEzMDYsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKQogICogYnBmX2Z1bmM6CiAgKglbbm9wfGJdCW9vbF9zdHViCiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOgomIzQzOyAqCW5vcAkvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudAogICogb29sX3N0dWI6CiAgKgltZmxyCXIwCiAgKglbYnxibF0JJmx0O2JwZl9wcm9nJmd0Oy8mbHQ7bG9uZ19icmFuY2hfc3R1YiZndDsKQEAgLTEyNjcsMTQgJiM0MzsxMzE0LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpCiAgKgliCWJwZl9mdW5jICYjNDM7IDQKICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6CiAgKiBsb25nX2JyYW5jaF9zdHViOgotICoJLmxvbmcJJmx0O2JyYW5jaF9hZGRyJmd0Oy8mbHQ7ZHVtbXlfdHJhbXAmZ3Q7CiAgKgltZmxyCXIxMQogICoJYmNsCTIwLDMxLCQmIzQzOzQKICAqCW1mbHIJcjEyCi0gKglsZAlyMTIsIC0xNihyMTIpCiYjNDM7ICoJbGQJcjEyLCAyMChyMTIpCiAgKgltdGN0cglyMTIKICAqCW10bHIJcjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSQogICoJYmN0cgomIzQzOyAqCS5sb25nCSZsdDticmFuY2hfYWRkciZndDsvJmx0O2R1bW15X3RyYW1wJmd0OwogICoKICAqIGR1bW15X3RyYW1wIGlzIHVzZWQgdG8gcmVkdWNlIHN5bmNocm9uaXphdGlvbiByZXF1aXJlbWVudHMuCiAgKgpAQCAtMTM3NiwxMCAmIzQzOzE0MjMsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsCiAJICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOgogCSAqIElmIG5ld19hZGRyIGlzIG91dCBvZiByYW5nZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgbG9uZyBicmFuY2ggc3R1Yiwgc28gcGF0Y2ggbmV3X2FkZHIKIAkgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS4KJiM0MzsJICoKJiM0MzsJICogZHVtbXlfdHJhbXBfYWRkciBtb3ZlZCB0byBib3R0b20gb2YgbG9uZyBicmFuY2ggc3R1Yi4KIAkgKi8KIAlpZiAoKG5ld19hZGRyICZhbXA7JmFtcDsgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpIHx8CiAJICAgIChvbGRfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSkKLQkJcmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSwKJiM0MzsJCXJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi8KIAkJCQkgIChuZXdfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/CiAJCQkJICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jCmluZGV4IGJmZGM1MDc0MGRhOGU3Li5mNWI5NDQxY2Y0NmFhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYwpAQCAtMjI5LDcgJiM0MzsyMjksNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eAogCiB9CiAKLXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiB7CiAJRU1JVChQUENfUkFXX01SKF9SMywgYnBmX3RvX3BwYyhCUEZfUkVHXzApKSk7CiAKQEAgLTIzNyw3ICYjNDM7MjM3LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIAogCUVNSVQoUFBDX1JBV19CTFIoKSk7CiAKLQlicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgY3R4KTsKJiM0MzsJYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTsKIH0KIAogLyogUmVsYXRpdmUgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gZmluYWwgaW1hZ2UgbG9jYXRpb24gKi8KQEAgLTExNDksNyAmIzQzOzExNDksOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZQogCQkJICogd2UmIzM5O2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS4KIAkJCSAqLwogCQkJaWYgKGkgIT0gZmxlbiAtIDEpIHsKLQkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIF9SMCwgZXhpdF9hZGRyKTsKJiM0MzsJCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLAomIzQzOwkJCQkJCQkJY3R4LCBfUjAsIGV4aXRfYWRkcik7CiAJCQkJaWYgKHJldCkKIAkJCQkJcmV0dXJuIHJldDsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYwppbmRleCBkYjM2NGQ5MDgzZTcyNS4uMDg2MDg0YWJiMTg0YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMKQEAgLTI3Niw3ICYjNDM7Mjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIAkJICovCiAJCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpOwogCQlFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTsKLQkJRU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CQlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAkJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAkJRU1JVChQUENfUkFXX0FEREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksCiAJCQkJCQkJCS0oQlBGX1BQQ19UQUlMQ0FMTCkpKTsKQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgKIAl9CiB9CiAKLXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiB7CiAJYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZShpbWFnZSwgY3R4KTsKIApAQCAtNDA3LDcgJiM0Mzs0MDcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogCiAJRU1JVChQUENfUkFXX0JMUigpKTsKIAotCWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpOwomIzQzOwlicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpOwogfQogCiAvKgpAQCAtNjUxLDcgJiM0Mzs2NTEsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgbwogCVBQQ19CQ0NfU0hPUlQoQ09ORF9HRSwgb3V0KTsKIAogCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTsKLQlFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKJiM0MzsJRU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiAJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0xFLCA4KTsKIAogCS8qIGRlcmVmZXJlbmNlIFRNUF9SRUdfMSAqLwpAQCAtNjYxLDcgJiM0Mzs2NjEsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgbwogCSAqIGlmICh0YWlsX2NhbGxfaW5mbyA9PSBNQVhfVEFJTF9DQUxMX0NOVCkKIAkgKiAgIGdvdG8gb3V0OwogCSAqLwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7CiAKIAkvKgpAQCAtNjk2LDcgJiM0Mzs2OTYsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgbwogCSAqIHRhaWxfY2FsbF9pbmZvLgogCSAqLwogCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTsKLQlFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKJiM0MzsJRU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMiksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiAJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAogCS8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovCkBAIC0xNzI2LDcgJiM0MzsxNzI2LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGUKIAkJCSAqIHdlJiMzOTtsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuCiAJCQkgKi8KIAkJCWlmIChpICE9IGZsZW4gLSAxKSB7Ci0JCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCB0bXAxX3JlZywgZXhpdF9hZGRyKTsKJiM0MzsJCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLCBjdHgsCiYjNDM7CQkJCQkJCQl0bXAxX3JlZywgZXhpdF9hZGRyKTsKIAkJCQlpZiAocmV0KQogCQkJCQlyZXR1cm4gcmV0OwogCQkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jCmluZGV4IDM1NThmZTEwZTI4Y2Y5Li4xMTQyOGNhZDViMmQyYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYwpAQCAtMTc4LDEwICYjNDM7MTc4LDEyIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opCiB7CiAJc3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbyA9IHt9OwogCV9fdTMyIGluZm9fbGVuID0gc2l6ZW9mKGluZm8pOwotCV9fdTMyIGppdGVkX2Z1bmNzLCBsZW4sIHBjOwomIzQzOwlfX3UzMiBqaXRlZF9mdW5jcywgbGVuLCBwYywgZGlzYXNtX2xlbjsKJiM0MzsJX191MzIgdHJ1bmNfbGVuID0gMDsKIAlfX3UzMiAqZnVuY19sZW5zID0gTlVMTDsKIAlGSUxFICp0ZXh0X291dCA9IE5VTEw7CiAJdWludDhfdCAqaW1hZ2UgPSBOVUxMOwomIzQzOwljaGFyICp0cmlwbGUgPSBOVUxMOwogCWludCBpLCBlcnIgPSAwOwogCiAJaWYgKCFsbHZtX2luaXRpYWxpemVkKSB7CkBAIC0yMjUsOSAmIzQzOzIyNywzMCBAQCBpbnQgZ2V0X2ppdGVkX3Byb2dyYW1fdGV4dChpbnQgZmQsIGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0X3N6KQogCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDticGZfcHJvZ19nZXRfaW5mb19ieV9mZCAjMiYjMzQ7KSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogbGFzdCA4IGJ5dGVzIGNvbnRhaW5zIGR1bW15X3RyYW1wb2xpbmUgYWRkcmVzcyBpbiBKSVQKJiM0MzsJICogb3V0cHV0IG9uIDY0LWJpdCBhbmQgbGFzdCA0IGJ5dGVzIG9uIDMyLWJpdCBwb3dlcnBjLAomIzQzOwkgKiB3aGljaCBjYW4mIzM5O3QgZGlzYXNzZW1ibGUgdG8gYSB2YWxpZCBpbnN0cnVjdGlvbi4KJiM0MzsJICovCiYjNDM7CXRyaXBsZSA9IExMVk1HZXREZWZhdWx0VGFyZ2V0VHJpcGxlKCk7CiYjNDM7CWlmICh0cmlwbGUpIHsKJiM0MzsJCWlmIChzdHJzdHIodHJpcGxlLCAmIzM0O3Bvd2VycGM2NCYjMzQ7KSB8fCBzdHJzdHIodHJpcGxlLCAmIzM0O3BwYzY0JiMzNDspKQomIzQzOwkJCXRydW5jX2xlbiA9IDg7CiYjNDM7CQllbHNlIGlmIChzdHJzdHIodHJpcGxlLCAmIzM0O3Bvd2VycGMmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgJiMzNDtwcGMmIzM0OykpCiYjNDM7CQkJdHJ1bmNfbGVuID0gNDsKJiM0MzsJCUxMVk1EaXNwb3NlTWVzc2FnZSh0cmlwbGUpOwomIzQzOwl9CiYjNDM7CiAJZm9yIChwYyA9IDAsIGkgPSAwOyBpICZsdDsgaml0ZWRfZnVuY3M7ICYjNDM7JiM0MztpKSB7CiYjNDM7CiAJCWZwcmludGYodGV4dF9vdXQsICYjMzQ7ZnVuYyAjJWQ6XG4mIzM0OywgaSk7Ci0JCWRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgJiM0MzsgcGMsIGZ1bmNfbGVuc1tpXSk7CiYjNDM7CQkvKgomIzQzOwkJICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvdwomIzQzOwkJICovCiYjNDM7CQlkaXNhc21fbGVuID0gZnVuY19sZW5zW2ldICZndDsgdHJ1bmNfbGVuID8KJiM0MzsJCQkJCWZ1bmNfbGVuc1tpXSAtIHRydW5jX2xlbiA6IDA7CiYjNDM7CQlkaXNhc21fb25lX2Z1bmModGV4dF9vdXQsIGltYWdlICYjNDM7IHBjLCBkaXNhc21fbGVuKTsKJiM0MzsKIAkJZnByaW50Zih0ZXh0X291dCwgJiMzNDtcbiYjMzQ7KTsKIAkJcGMgJiM0Mzs9IGZ1bmNfbGVuc1tpXTsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCmluZGV4IDllZWI1YjBiNjNkNjk3Li5jZGMyYTNkZTMwNTQwNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKQEAgLTE1OCw2ICYjNDM7MTU4LDcgQEAKICNkZWZpbmUgX19hcmNoX2FybTY0CQlfX2FyY2goJiMzNDtBUk02NCYjMzQ7KQogI2RlZmluZSBfX2FyY2hfcmlzY3Y2NAkJX19hcmNoKCYjMzQ7UklTQ1Y2NCYjMzQ7KQogI2RlZmluZSBfX2FyY2hfczM5MHgJCV9fYXJjaCgmIzM0O3MzOTB4JiMzNDspCiYjNDM7I2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0CV9fYXJjaCgmIzM0O1BPV0VSUEM2NCYjMzQ7KQogI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpCV9fdGVzdF90YWcoJiMzNDt0ZXN0X2NhcHNfdW5wcml2PSYjMzQ7IEVYUEFORF9RVU9URShjYXBzKSkKICNkZWZpbmUgX19sb2FkX2lmX0pJVGVkKCkJX190ZXN0X3RhZygmIzM0O2xvYWRfbW9kZT1qaXRlZCYjMzQ7KQogI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKQlfX3Rlc3RfdGFnKCYjMzQ7bG9hZF9tb2RlPW5vX2ppdGVkJiMzNDspCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMKaW5kZXggNDhmYTM0ZDI5NTlmNDYuLjA5ZDdlOTJjODQ5MTAwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jCkBAIC05MSw2ICYjNDM7OTEsNzUgQEAgX19qaXRlZCgmIzM0Owlwb3BxCSVyYXgmIzM0OykKIF9faml0ZWQoJiMzNDsJam1wCXt7Lip9fSYjMzQ7KQkJLyoganVtcCB0byB0YWlsIGNhbGwgdGd0ICAgKi8KIF9faml0ZWQoJiMzNDtMMDoJbGVhdmUmIzM0OykKIF9faml0ZWQoJiMzNDsJe3socmV0cXxqbXAJMHgpfX0mIzM0OykJCS8qIHJldHVybiBvciBqdW1wIHRvIHJldGh1bmsgKi8KJiM0MztfX2FyY2hfcG93ZXJwYzY0CiYjNDM7LyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovCiYjNDM7X19qaXRlZCgmIzM0Owlub3AmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxpIDksIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXN0ZCA5LCAtOCgxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbWZsciAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgMCwgMTYoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXN0ZHUgMSwge3suKn19KDEpJiMzNDspCiYjNDM7LyogbG9hZCBhZGRyZXNzIGFuZCBjYWxsIHN1YigpIHZpYSBjb3VudCByZWdpc3RlciAqLwomIzQzO19faml0ZWQoJiMzNDsJbGlzIDEyLCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXNsZGkgMTIsIDEyLCAzMiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJb3JpcyAxMiwgMTIsIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJb3JpIDEyLCAxMiwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciAxMiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmN0cmwmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1yCTgsIDMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpIDgsIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZGkgMSwgMSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCAwLCAxNigxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXRsciAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltcgkzLCA4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlibHImIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2Z1bmMgIzEmIzM0OykKJiM0MzsvKiBzdWJwcm9ncmFtIGVudHJ5IGZvciBzdWIoKSAqLwomIzQzO19faml0ZWQoJiMzNDsJbm9wJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7LyogdGFpbCBjYWxsIHByb2xvZ3VlIGZvciBzdWJwcm9ncmFtICovCiYjNDM7X19qaXRlZCgmIzM0OwlsZCAxMCwgMCgxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgOSwgLTgoMTApJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJ0CXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDksIDEwLCAtOCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc3RkIDksIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsaXMge3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXNsZGkge3suKn19LCB7ey4qfX0sIDMyJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlvcmlzIHt7Lip9fSwge3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW9yaSB7ey4qfX0sIHt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsaSB7ey4qfX0sIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWx3eiA5LCB7ey4qfX0oe3suKn19KSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc2x3aSB7ey4qfX0sIHt7Lip9fSwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY21wbHcJe3suKn19LCA5JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwliZgkwLCB7ey4qfX0mIzM0OykKJiM0MzsvKiBicGZfdGFpbF9jYWxsIGltcGxlbWVudGF0aW9uICovCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAtOCgxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY21wbGRpCTksIDMzJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwliZgl7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgOSwgMCg5KSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY21wbGRpCTksIDMzJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlidAl7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSA5LCA5LCAxJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdWxsaSAxMCwge3suKn19LCA4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQgMTAsIDEwLCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCB7ey4qfX0oMTApJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJMTAsIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJ0CXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCAxMCwge3suKn19KDEwKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxMCwgMTAsIHt7Lip9fSYjMzQ7KSAgICAvKiBvZmZzZXQgZGVwZW5kcyBvbiBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqLwomIzQzO19faml0ZWQoJiMzNDsJbXRjdHIgMTAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCAtOCgxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY21wbGRpCTEwLCAzMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZGkgMTAsIDEsIC04JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgMCgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJjdHImIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1yCTMsIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJsciYjMzQ7KQomIzQzOwogU0VDKCYjMzQ7dGMmIzM0OykKIF9fbmFrZWQgaW50IG1haW4odm9pZCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKaW5kZXggYWJkYjllNmUzNzEzNjIuLmQ1NTg5MzU1ZWQ5ZTBjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwpAQCAtMzc3LDYgJiM0MzszNzcsNyBAQCBlbnVtIGFyY2ggewogCUFSQ0hfQVJNNjQJPSAweDQsCiAJQVJDSF9SSVNDVjY0CT0gMHg4LAogCUFSQ0hfUzM5MFgJPSAweDEwLAomIzQzOwlBUkNIX1BPV0VSUEM2NAk9IDB4MjAsCiB9OwogCiBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZCkKQEAgLTM4OSw2ICYjNDM7MzkwLDggQEAgc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpCiAJcmV0dXJuIEFSQ0hfUklTQ1Y2NDsKICNlbGlmIGRlZmluZWQoX19zMzkweF9fKQogCXJldHVybiBBUkNIX1MzOTBYOwomIzQzOyNlbGlmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKJiM0MzsJcmV0dXJuIEFSQ0hfUE9XRVJQQzY0OwogI2VuZGlmCiAJcmV0dXJuIEFSQ0hfVU5LTk9XTjsKIH0KQEAgLTU4MCw2ICYjNDM7NTgzLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsCiAJCQkJYXJjaCA9IEFSQ0hfUklTQ1Y2NDsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtzMzkweCYjMzQ7KSA9PSAwKSB7CiAJCQkJYXJjaCA9IEFSQ0hfUzM5MFg7CiYjNDM7CQkJfSBlbHNlIGlmIChzdHJjbXAodmFsLCAmIzM0O1BPV0VSUEM2NCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQkJCWFyY2ggPSBBUkNIX1BPV0VSUEM2NDsKIAkJCX0gZWxzZSB7CiAJCQkJUFJJTlRfRkFJTCgmIzM0O2JhZCBhcmNoIHNwZWM6ICYjMzk7JXMmIzM5O1xuJiMzNDssIHZhbCk7CiAJCQkJZXJyID0gLUVJTlZBTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3dlclBDIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIEJQRiBKSVQgY29tcGlsZXIgc3BlY2lmaWNhbGx5IGZvciBQb3dlclBDLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29kZSBnZW5lcmF0aW9uIHBhc3NlcyAoYWRqdXN0aW5nIGBDT0RFR0VOX01JTl9QQVNTRVNgIGFuZCBgQ09ERUdFTl9NQVhfUEFTU0VTYCkuIEJleW9uZCB0aGF0LCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgYSBzZXJpZXMgb2YgY29yZSBmdW5jdGlvbnM6IGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2AsIGBicGZfaml0X2VtaXRfZXhpdF9pbnNuYCwgYW5kIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYCwgYWxvbmcgd2l0aCBzb21lIGluc3RydWN0aW9uIHJlcGxhY2VtZW50cy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyB0aGVzZSBsb3ctbGV2ZWwgY29kZSBnZW5lcmF0aW9uIGFzcGVjdHMgc3VnZ2VzdHMgaXQgY291bGQgYmUgaW1wYWN0ZnVsLCBhbmQgbmVlZHMgY2FyZWZ1bCBleGFtaW5hdGlvbi4gQWxzbywgdGhleSYjMzk7dmUgYWRkZWQgUG93ZXJQQzY0IHN1cHBvcnQgdG8gYSBjb3VwbGUgb2Ygc2VsZi10ZXN0IGZpbGVzLCB3aGljaCBpcyBnb29kLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiB0aGUgY29tbW9uIGVudmlyb25tZW50cz8gU2luY2UgaXQmIzM5O3MgUG93ZXJQQywgYW5kIEkga25vdyBzeXprYWxsZXIgaGFzIHN1cHBvcnQgZm9yIFBvd2VyUEMgKHNwZWNpZmljYWxseSBwcGM2NGxlKSwgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggdGVzdGluZywgZXNwZWNpYWxseSBnaXZlbiBzeXprYWxsZXImIzM5O3MgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgc2VlIHRoYXQgbXkgZmlyc3QgaW1wcmVzc2lvbiBpcyBjb3JyZWN0LCB0aGUgcGF0Y2ggaXMgaW5kZWVkIGZ1enphYmxlLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb2RlLiBMZXQgbWUgZXh0cmFjdCB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY2AsIGBhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNgLCBhbmQgYGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgaGF2ZToKLSBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgCi0gYGJwZl9qaXRfZW1pdF9leGl0X2luc25gCi0gYGJwZl9pbnRfaml0X2NvbXBpbGVgCi0gYGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvYAotIGBicGZfYXJjaF90ZXh0X3Bva2VgCi0gYGJwZl9qaXRfYnVpbGRfZXBpbG9ndWVgCi0gYGJwZl9qaXRfZW1pdF90YWlsX2NhbGxgCi0gYGJwZl9qaXRfYnVpbGRfYm9keWAKLSBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAKClRoaXMgaXMgYWxsIGNvcmUgQlBGIEpJVCBjb21waWxlciBzdHVmZiBmb3IgUG93ZXJQQywgc28gdGhlIGltcGFjdCBpcyBpbiB0aGUgY29yZS4gVGhlIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGlzIHNpbXBsZSwgYEJQRl9KSVRgIGFuZCBlaXRoZXIgYFBQQzY0YCBvciBgUFBDMzJgLCBidXQgSSB0aGluayBqdXN0IHNheWluZyBgQlBGX0pJVGAgYW5kIGBQUEM2NGAgY292ZXJzIGl0IGZvciBmdXp6aW5nIHB1cnBvc2VzLiBIb3dldmVyLCBJIHNob3VsZCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VkIGJ5IGxvb2tpbmcgYXQgdGhlIGAjaWZkZWZgcy4gTGV0IG1lIGxvb2sgYXQgYGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zLCBhbmQgSSBzZWUgYENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FYCBiZWluZyB1c2VkIGluIGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2AsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz0zNT1hc20gKFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMzktXCYjMzQ7ZHVtbXlfdHJhbXA6XHRcdFx0XHRcdDtcJiMzNDtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NDA6I2lmZGVmIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTQxLVwmIzM0O1x0YmxyXHRcdFx0XHRcdDtcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTUyPXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTY2LVx0ICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjY3Olx0ICogQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpIG9yIDEwIGluc3RydWN0aW9ucyAod2l0aG91dClcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNjgtXHQgKiBiZWZvcmUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZC4gRW1pdCBhIE5PUCBpZiB0aGUgYWRkcmVzcyBvZlxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzYtXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjc3Olx0c3R1Yl9zeiA9IElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpID8gNDQgOiA0MDtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzgtXHRpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSAmIzQzOyBjdHgtXHUwMDNlaWR4KjQgJiM0Mzsgc3R1Yl9zeiwgU1pMKSlcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTg1LVx0ICpcdFtifGJsXVx0dHJhbXBcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6ODY6XHQgKlx0bXRsclx0cjAgLy8gb25seSB3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTg3LVx0ICpcdGJcdGJwZl9mdW5jICYjNDM7IDRcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTkxLVx0RU1JVChQUENfUkFXX05PUCgpKTtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6OTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTkzLVx0XHRFTUlUKFBQQ19SQVdfTVRMUihfUjApKTtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTg1Mz1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTk3Mi1cdC8qIE9wdGlvbmFsIHNhdmUgYXJlYSBmb3IgYWN0dWFsIExSIGluIGNhc2Ugb2Ygb29sIGZ0cmFjZSAqL1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo5NzM6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpIHtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtOTc0LVx0XHRhbHRfbHJfb2ZmID0gYnBmX2ZyYW1lX3NpemU7XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDE3LVx0RU1JVChQUENfUkFXX01GTFIoX1IzKSk7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEwMTg6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTktXHRcdEVNSVQoUFBDX1JBV19TVEwoX1IzLCBfUjEsIGFsdF9scl9vZmYpKTtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjQtXHQgKiBEZXJpdmUgSVAgYWRkcmVzcyBvZiB0aGUgdHJhY2VkIGZ1bmN0aW9uLlxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMDI1Olx0ICogSW4gY2FzZSBvZiBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSBvciBCUEYgcHJvZ3JhbSwgTFIgcG9pbnRzIHRvIHRoZSBpbnN0cnVjdGlvblxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDI2LVx0ICogYWZ0ZXIgdGhlICYjMzk7YmwmIzM5OyBpbnN0cnVjdGlvbiBpbiB0aGUgT09MIHN0dWIuIFJlZmVyIHRvIGZ0cmFjZV9pbml0X29vbF9zdHViKCkgYW5kXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDM2LVx0ICovXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzc6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgfHwgZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lQX0FSRykge1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDM4LVx0XHRFTUlUKFBQQ19SQVdfTFdaKF9SNCwgX1IzLCA0KSk7XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDQ2LVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMDQ3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpKSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDgtXHRcdC8qIEZha2Ugb3VyIExSIGZvciBCUEZfVFJBTVBfRl9DQUxMX09SSUcgY2FzZSAqL1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTIwNC1cdH0gZWxzZSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEyMDU6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSkge1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMjA2LVx0XHRcdEVNSVQoUFBDX1JBV19MTChfUjAsIF9SMSwgYWx0X2xyX29mZikpO1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9MTI5OD1zdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTMxMi0gKlx0W2J8YmxdXHRcdTAwM2NicGZfcHJvZ1x1MDAzZS9cdTAwM2Nsb25nX2JyYW5jaF9zdHViXHUwMDNlXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEzMTM6ICpcdG10bHJcdHIwIC8vIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FIG9ubHlcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTMxNC0gKlx0Ylx0YnBmX2Z1bmMgJiM0MzsgNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEpJVCBQYXRjaCBmb3IgUG93ZXJQQyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQlBGIEpJVCBpbXBsZW1lbnRhdGlvbiBmb3IgUG93ZXJQQy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBgZmVudHJ5YCBzdHVicywgdGhlIGVwaWxvZ3VlLCBhbmQgdGhlIGV4aXQgaW5zdHJ1Y3Rpb25zLiBJbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoZXNlIGFyZSBiZWluZyBtb2RpZmllZCwgZXNwZWNpYWxseSB3aXRoaW4gdGhhdCBKSVQgY29udGV4dC4gSXQmIzM5O3MgYWxzbyBtYWtpbmcgYWRqdXN0bWVudHMgdG8gdGhlIG51bWJlciBvZiBwYXNzZXMgdGhlIGNvZGUgZ2VuZXJhdGlvbiBnb2VzIHRocm91Z2gsIHdoaWNoIGxpa2VseSBpbXBhY3RzIHBlcmZvcm1hbmNlIG9yIGNvZGUgcXVhbGl0eS4KClRoZSBrZXkgY29uZmlncyBhdCBwbGF5IGhlcmUgYXJlIGNsZWFybHkgYEJQRl9KSVRgIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGBQUEM2NGAgb3IgYFBQQzMyYC4gT2J2aW91cy4gQnV0IHRoZXJlJiMzOTtzIGFsc28gYENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FYCBtZW50aW9uZWQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoaXMgY29uZmlnIGFjdHVhbGx5ICpleGlzdHMqIGFuZCBpcyB2YWxpZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgUG93ZXJQQyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXRzIHJlbGV2YW5jZSBoZXJlIHN1Z2dlc3RzIGEgcmVsYXRpb25zaGlwIHdpdGggZnVuY3Rpb24gdHJhY2luZyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBKSVQmIzM5O2QgQlBGIGNvZGUsIHdoaWNoIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIGNoZWNrIHRoYXQgY29uZmlnIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9LY29uZmlnPTU2OD1jb25maWcgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01NzQtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1NzU6Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU3Ni1cdGRlZl9ib29sIFBQQzY0IFx1MDAyNlx1MDAyNiBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU3OC1cbmFyY2gvcG93ZXJwYy9LY29uZmlnOjU3OTpjb25maWcgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORV9OVU1fUkVTRVJWRVxuYXJjaC9wb3dlcnBjL0tjb25maWctNTgwLVx0aW50IFwmIzM0O051bWJlciBvZiBmdHJhY2Ugb3V0LW9mLWxpbmUgc3R1YnMgdG8gcmVzZXJ2ZSB3aXRoaW4gLnRleHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRXZhbHVhdGluZyB0aGUgYFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCkFscmlnaHQsIHNvIGBQUENfRlRSQUNFX09VVF9PRl9MSU5FYCBpcyBhIGBkZWZfYm9vbGAsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBvcHRpb24geW91IGNhbiAqc2VsZWN0Ki4gSXRzIHZhbHVlIGlzICpkZWZpbmVkKiBieSBzb21ldGhpbmcgZWxzZTogc3BlY2lmaWNhbGx5LCB0aGUgY29uanVuY3Rpb24gb2YgYFBQQzY0YCAqYW5kKiBgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllgLiBTbywgaXQmIzM5O3MgYSBzb3J0IG9mICYjMzk7aGVscGVyJiMzOTsgb3IgZGVyaXZlZCBvcHRpb24uIFlvdSBjYW4mIzM5O3QgdG9nZ2xlIHRoaXMgb25lIG9uIG9yIG9mZiBkaXJlY3RseSBpbiB5b3VyIGNvbmZpZy4KClRoZSBtb3JlIGludGVyZXN0aW5nIGJpdCBoZXJlIGlzIGBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgY29udHJvbCBsaWVzLiBJZiB0aGF0IGZsYWcgaXMgc2V0LCBhbmQgd2UmIzM5O3JlIG9uIGEgUFBDNjQgYXJjaGl0ZWN0dXJlLCAqdGhlbiogYFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZC4gSXQmIzM5O3MgYSBkZXBlbmRlbmN5LiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb250cm9scyB0aGUgYEFSQ0hfVVNJTkdfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZYCBvcHRpb24gc28gd2UgY2FuIGtub3cgaWYgZnRyYWNlIHN1cHBvcnQgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9LY29uZmlnPTU2Mz1jb25maWcgTVBST0ZJTEVfS0VSTkVMXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctNTY3LVxuYXJjaC9wb3dlcnBjL0tjb25maWc6NTY4OmNvbmZpZyBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxuYXJjaC9wb3dlcnBjL0tjb25maWctNTY5LVx0ZGVwZW5kcyBvbiBGVU5DVElPTl9UUkFDRVIgXHUwMDI2XHUwMDI2IChQUEMzMiB8fCBQUEM2NF9FTEZfQUJJX1YyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIGNvZGUgbW9kaWZpY2F0aW9uLiBGaXJzdCwgYEZVTkNUSU9OX1RSQUNFUmAgc2VlbXMgbGlrZSBhIGdpdmVuLCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGF0LiBOb3csIEkgc2VlIGBCUEZfSklUYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCwgd2hpY2ggbWFrZXMgc2Vuc2Ugc2luY2UgaXQmIzM5O3MgdGhlIEJQRiBKSVQgY29tcGlsZXIuIE5hdHVyYWxseSwgYEJQRl9KSVRgIHJlcXVpcmVzIGBCUEZfU1lTQ0FMTGAgYXMgd2VsbC4gU28sIHRoZSBiYXNlIHJlcXVpcmVtZW50cyBhcmUgYEJQRl9KSVRgIGFuZCBgRlVOQ1RJT05fVFJBQ0VSYC4KClRoZSBwcm9tcHQgaXMgc3BlY2lmaWM6IEkgc2hvdWxkIGF2b2lkIGxpc3RpbmcgdG9vIGdlbmVyaWMgY29uZmlncy4gT2theSwgYEJQRl9KSVRgICppcyogc3BlY2lmaWMgdG8gdGhlIEpJVCBhc3BlY3QsIGV2ZW4gaWYgQlBGIGlzIG1vcmUgZ2VuZXJhbC4gYFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVgIGlzIHNwZWNpZmljIGJ1dCBub3QgZGlyZWN0bHkgc2VsZWN0YWJsZS4gTm93LCBsZXQgbWUgY2hlY2sgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCB0byBuYXJyb3cgdGhpcyBkb3duLiBJIHNlZSBjYWxscyB0byBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWAuIEFsc28sIGBicGZfaml0X2VtaXRfZXhpdF9pbnNuYCBpcyBjYWxsZWQgZnJvbSBgYnBmX2ppdF9idWlsZF9ib2R5YC4KCkxldCYjMzk7cyBncmFiIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYDogYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYCwgYGJwZl9qaXRfYnVpbGRfYm9keWAsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCwgYGJwZl9qaXRfZW1pdF90YWlsX2NhbGxgLCBgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm9gLCBhbmQgYGJwZl9hcmNoX3RleHRfcG9rZWAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBzeW1ib2xzIGFyZSBub3QgaW4gdGhlIGhvdCBwYXRoLiBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdXNlZCBkdXJpbmcgQlBGIHByb2dyYW0gbG9hZCBhbmQgY29tcGlsYXRpb24uIEdvb2QsIG5vdCBob3QgcGF0aC4gVGhlIGBicGZfaml0XypgIGZ1bmN0aW9ucyBhcmUgYWxsIHBhcnQgb2YgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzOyB0aGF0IG1ha2VzIHNlbnNlLiBgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm9gIGlzIGZvciB0cmFtcG9saW5lIHNldHVwLiBgYnBmX2FyY2hfdGV4dF9wb2tlYCBpcyB1c2VkIGZvciBwYXRjaGluZyBCUEYgcHJvZ3JhbXMuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4KCk5vdywgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZ3M/IExvb2tzIGxpa2UgYENPTkZJR19QUEM2NGAgYW5kIGBDT05GSUdfUFBDMzJgIGFyZSB1c2VkLCBhbG9uZyB3aXRoIGBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAuIE9rYXksIHdhaXQuIFRoZXNlIGFyZSBhcmNoaXRlY3R1cmVzLCBub3Qgc29tZXRoaW5nIEkgY2FuIGVuYWJsZSBvbiB4ODYgZGlyZWN0bHkuIFRoZSBjb25maWdzIEkgcHJvdmlkZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBrZXJuZWwgY29uZmlnLgoKU28sIGluIHN1bW1hcnksIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb2RlLCBJIGNhbiBjb25maWRlbnRseSBsaXN0IGBCUEZfSklUYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAuIExldCBtZSBkb3VibGUtY2hlY2sgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gIGlzIGluZGVlZCBpbiB0aGUgZXhwZWN0ZWQgZmlsZSBhbmQgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2VtaXRfZXhpdF9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg9MjMyPXZvaWQgYnBmX2ppdF9yZWFsbG9jX3JlZ3Moc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oOjIzMzppbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZyxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTIzNC1cdFx0XHRcdFx0XHRcdFx0XHRcdGxvbmcgZXhpdF9hZGRyKTtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTUyPXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyNy1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTI4OmludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyOS1cdFx0XHRcdFx0XHRcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmM9MzIyPWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTE1MS1cdFx0XHRpZiAoaSAhPSBmbGVuIC0gMSkge1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jOjExNTI6XHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTE1My1cdFx0XHRcdFx0XHRcdFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jPTk1Nj1pbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTE3MjgtXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxNzI5Olx0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLCBjdHgsXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTczMC1cdFx0XHRcdFx0XHRcdFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTgyCgkJCQkJCQlvdXRwdXQ6IDIzOQoJCQkJCQkJdGhvdWdodHM6IDQyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvd2VyUEMgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQmIzM5O3MgZGlnZ2luZyBpbnRvIHRoZSBCUEYgSklUIGNvbXBpbGVyIHNwZWNpZmljYWxseSBmb3IgUG93ZXJQQy4gSXQmIzM5O3Mgbm90IGp1c3QgYSBzdXBlcmZpY2lhbCB0d2VhazsgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3RpbmcgaG93IHRoZSBjb2RlIGlzIGdlbmVyYXRlZC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYWRkcmVzc2luZyBhbGlnbm1lbnQgaXNzdWVzIGFuZCBtb2RpZnlpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgdGhlbXNlbHZlcyDigJMgdGhlIHZlcnkgY29yZSBvZiBob3cgQlBGIHByb2dyYW1zIHRyYW5zbGF0ZSBpbnRvIFBvd2VyUEMgbWFjaGluZSBjb2RlLiBJIGNhbiBzZWUgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIHJlYWNoYWJsZSBhbmQgdXNlZCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkIG9uIFBvd2VyUEMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIEdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgYnVncyBvciBldmVuIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSBpcyBzaWduaWZpY2FudC4gV2UgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBjaGFuZ2VzIGNvcnJlY3RseSBoYW5kbGUgdmFyaW91cyBCUEYgcHJvZ3JhbSBzdHJ1Y3R1cmVzIGFuZCBpbnB1dHMgYW5kIHByZXZlbnQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgY3Jhc2hlcy4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgbXkgZWZmb3J0cyBvbi4gV2UgaGF2ZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgd2hpY2ggaXMgdGhlIGNlbnRyYWwgY29tcGlsZSBmdW5jdGlvbi4gVGhlbiB0aGVyZSBpcyBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgLCBgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbmAsIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYCwgYGJwZl9qaXRfYnVpbGRfYm9keWAsIGFuZCBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBpbnZvbHZlZCBpbiBjb25zdHJ1Y3RpbmcgYW5kIGZpbmFsaXppbmcgdGhlIEpJVCYjMzk7ZCBjb2RlLiBGaW5hbGx5LCB0aGVyZSYjMzk7cyBgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbGAsIGBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mb2AsIGFuZCBgYnBmX2FyY2hfdGV4dF9wb2tlYC4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIHRvIHRhcmdldCB0aGVzZSBmdW5jdGlvbnMgZHVyaW5nIGZ1enppbmcuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IGZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIHdpdGggYEJQRl9KSVRgIGFuZCBgRlVOQ1RJT05fVFJBQ0VSYCBlbmFibGVkIHdpbGwgYmUgY3J1Y2lhbCB0byBlbnN1cmUgdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBjb3JyZWN0bmVzcyBvZiBCUEYgb24gUG93ZXJQQy4gQWxyaWdodCwgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHNldCB0aGUgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X2V4aXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX2VwaWxvZ3VlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfYm9keSYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX3Byb2xvZ3VlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfZW1pdF90YWlsX2NhbGwmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm8mIzM0OywKICAgICYjMzQ7YnBmX2FyY2hfdGV4dF9wb2tlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBQb3dlclBDLCBzcGVjaWZpY2FsbHkgYWRqdXN0aW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcGFzc2VzLCBmZW50cnkgc3R1YnMgYWxpZ25tZW50LCBhbmQgZXBpbG9ndWUvZXhpdCBpbnN0cnVjdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGNvbXBpbGVkIGFuZCBleGVjdXRlZCBvbiBQb3dlclBDIGFyY2hpdGVjdHVyZXMuIEZ1enppbmcgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24gUG93ZXJQQyB3aWxsIGhlbHAgZW5zdXJlIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSBhbmQgcHJldmVudCBwb3RlbnRpYWwgY3Jhc2hlcyBvciB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfZXhpdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfZXBpbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9ib2R5JiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfcHJvbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X3RhaWxfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyYjMzQ7LAogICAgJiMzNDticGZfYXJjaF90ZXh0X3Bva2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjIyLjE2Njc5NDA3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjYxNjQyMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzXCIsXG4gICAgXCJicGZfaml0X2VtaXRfZXhpdF9pbnNuXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2VwaWxvZ3VlXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2JvZHlcIixcbiAgICBcImJwZl9qaXRfYnVpbGRfcHJvbG9ndWVcIixcbiAgICBcImJwZl9qaXRfZW1pdF90YWlsX2NhbGxcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvXCIsXG4gICAgXCJicGZfYXJjaF90ZXh0X3Bva2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgUG93ZXJQQywgc3BlY2lmaWNhbGx5IGFkanVzdGluZyB0aGUgY29kZSBnZW5lcmF0aW9uIHBhc3NlcywgZmVudHJ5IHN0dWJzIGFsaWdubWVudCwgYW5kIGVwaWxvZ3VlL2V4aXQgaW5zdHJ1Y3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgQlBGIHByb2dyYW1zIGFyZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQgb24gUG93ZXJQQyBhcmNoaXRlY3R1cmVzLiBGdXp6aW5nIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIFBvd2VyUEMgd2lsbCBoZWxwIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgYW5kIHByZXZlbnQgcG90ZW50aWFsIGNyYXNoZXMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0MzoyMi4xNjY3OTkwNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjEyMDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVlNmE1NjQzYjliYjc1M2FlYTc1MjFlZjUyZTg0NzlkNGYyMDc3N2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTk6NDM6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxcbmluZGV4IGYzMmRlODcwNGQ0ZDk2Li40ZGE4YmRlOTJlMWVmZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXFxuQEAgLTE0LDYgKzE0LDEzIEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHBjLW9wY29kZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcXHUwMDNlXFxuIFxcbisvKlxcbisgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWRcXG4rICogYWRkaXRpb25hbCBwYXNzZXMgaWYgY29kZSBzaXplIGNoYW5nZXMgYmV0d2VlbiBwYXNzZXMuXFxuKyAqL1xcbisjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyXFxuKyNkZWZpbmUgQ09ERUdFTl9NQVhfUEFTU0VTICAgIDNcXG4rXFxuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxcbiAjZGVmaW5lIEZVTkNUSU9OX0RFU0NSX1NJWkVcXHQyNFxcbiAjZWxzZVxcbkBAIC0xODgsNiArMTk1LDEyIEBAIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xcbiBcXG4gI2RlZmluZSBicGZfdG9fcHBjKHIpXFx0KGN0eC1cXHUwMDNlYjJwW3JdKVxcbiBcXG4rI2lmZGVmIENPTkZJR19QUEM2NFxcbisjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTERJKGEsIGkpXFxuKyNlbHNlXFxuKyNkZWZpbmUgUFBDX1JBV19DTVBMTEkoYSwgaSkgICAgUFBDX1JBV19DTVBMV0koYSwgaSlcXG4rI2VuZGlmXFxuK1xcbiAjaWZkZWYgQ09ORklHX1BQQzMyXFxuICNkZWZpbmUgQlBGX0ZJWFVQX0xFTlxcdDMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID1cXHUwMDNlIDEyIGJ5dGVzICovXFxuICNlbHNlXFxuQEAgLTIxNCwxMCArMjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXFxuIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0ICAgICAgIHUzMiAqYWRkcnMsIGludCBwYXNzLCBib29sIGV4dHJhX3Bhc3MpO1xcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XFxuLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcXG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTtcXG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGxvbmcgZXhpdF9hZGRyKTtcXG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcXG4gdm9pZCBzdG9yZV9mdW5jX21ldGEodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZik7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggNjM1MWExODdjYTYxZTIuLjQ2YmJmYjZiZTYxMzQwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTQ5LDExICs0OSwzNyBAQCBhc20gKFxcbiBcXFwiXFx0LnBvcHNlY3Rpb25cXHRcXHRcXHRcXHQ7XFxcIlxcbiApO1xcbiBcXG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuK3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRpbnQgb29sX3N0dWJfaWR4LCBsb25nX2JyYW5jaF9zdHViX2lkeDtcXG4rXFx0aW50IHN0dWJfc3o7XFxuIFxcbiBcXHQvKlxcbitcXHQgKiBUaGUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpcyBwbGFjZWQgYXQgYm90dG9tIG9mIExvbmcgYnJhbmNoIHN0dWIuXFxuK1xcdCAqIEluIHRoZSBmaW5hbCBwYXNzLCBhbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZFxcbitcXHQgKiBpbiB0aGUgZmltYWdlLiBUaGUgYWxpZ25tZW50IE5PUCBtdXN0IGFwcGVhciBiZWZvcmUgT09MIHN0dWIsXFxuK1xcdCAqIHRvIG1ha2Ugb29sX3N0dWJfaWR4IFxcdTAwMjYgbG9uZ19icmFuY2hfc3R1Yl9pZHggY29uc3RhbnQgZnJvbSBlbmQuXFxuK1xcdCAqXFxuK1xcdCAqIGR1bW15X3RyYW1wX2FkZHIgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZCBmb3IgbG9hZC1yZWdpc3RlclxcbitcXHQgKiBjb21wYXRpYmlsaXR5LiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsXFxuK1xcdCAqIGFsaWdubWVudCBkZXBlbmRzIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWIncyBpbnN0cnVjdGlvblxcbitcXHQgKiBjb3VudC4gVGhlIHN0dWJzIGJsb2NrIGhhcyAxMSBpbnN0cnVjdGlvbnMgKHdpdGhcXG4rXFx0ICogQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpIG9yIDEwIGluc3RydWN0aW9ucyAod2l0aG91dClcXG4rXFx0ICogYmVmb3JlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQuIEVtaXQgYSBOT1AgaWYgdGhlIGFkZHJlc3Mgb2ZcXG4rXFx0ICogZHVtbXlfdHJhbXBfYWRkciBpcyBub24gYWxpZ25lZC5cXG4rXFx0ICpcXG4rXFx0ICogSW4gcGFzcz0wIHdoZW4gaW1hZ2U9PU5VTEwsIGNvbnNlcnZhdGl2ZWx5IGFjY291bnQgZm9yIHNwYWNlXFxuK1xcdCAqIHJlcXVpcmVkIHRvIGFjY29tbW9kYXRlIGFsaWdubWVudCBOT1AuIEluIGNhc2UgZmluYWwgcGFzcyBza2lwc1xcbitcXHQgKiBlbWl0dGluZyBhbGlnbm1lbnQgTk9QLCB0aGUgaW1hZ2UgYnVmZmVyIGhhdmUgNCBzcGFyZSBieXRlcyBhbmRcXG4rXFx0ICogaml0ZWRfbGVuIHNpZ25pZmllcyBjb3JyZWN0IHByb2dyYW0gc2l6ZS5cXG4rXFx0ICovXFxuK1xcbitcXHRzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwO1xcbitcXHRpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSArIGN0eC1cXHUwMDNlaWR4KjQgKyBzdHViX3N6LCBTWkwpKVxcbitcXHRcXHRFTUlUKFBQQ19SQVdfTk9QKCkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogICAgICBub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHJcXG4gXFx0ICogT3V0LW9mLWxpbmUgc3R1YjpcXG4gXFx0ICpcXHRtZmxyXFx0cjBcXG4gXFx0ICpcXHRbYnxibF1cXHR0cmFtcFxcbkBAIC03MCw0NCArOTYsNDYgQEAgdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBMb25nIGJyYW5jaCBzdHViOlxcbi1cXHQgKlxcdC5sb25nXFx0XFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcXHUwMDNlXFxuIFxcdCAqXFx0bWZsclxcdHIxMVxcbiBcXHQgKlxcdGJjbFxcdDIwLDMxLCQrNFxcbi1cXHQgKlxcdG1mbHJcXHRyMTJcXG4tXFx0ICpcXHRsZFxcdHIxMiwgLTgtU1pMKHIxMilcXG4rXFx0ICpcXHRtZmxyXFx0cjEyXFx0Ly8gbHIvcjEyIHN0b3JlcyBwYyBvZiBjdXJyZW50KHRoaXMpIGluc3QuXFxuK1xcdCAqXFx0bGRcXHRyMTIsIDIwKHIxMikgLy8gb2Zmc2V0KGR1bW15X3RyYW1wX2FkZHIpIGZyb20gcHJldiBpbnN0LiBpcyAyMFxcbiBcXHQgKlxcdG10Y3RyXFx0cjEyXFxuLVxcdCAqXFx0bXRsclxcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcXG4rXFx0ICpcXHRtdGxyXFx0cjExXFx0Ly8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJXFxuIFxcdCAqXFx0YmN0clxcbitcXHQgKlxcdC5sb25nXFx0XFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcXHUwMDNlICAvLyA4LWJ5dGUgYWxpZ25lZFxcbiBcXHQgKi9cXG4tXFx0aWYgKGltYWdlKVxcbi1cXHRcXHQqKCh1bnNpZ25lZCBsb25nICopXFx1MDAyNmltYWdlW2N0eC1cXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcXG4tXFx0Y3R4LVxcdTAwM2VpZHggKz0gU1pMIC8gNDtcXG4gXFx0bG9uZ19icmFuY2hfc3R1Yl9pZHggPSBjdHgtXFx1MDAzZWlkeDtcXG4gXFx0RU1JVChQUENfUkFXX01GTFIoX1IxMSkpO1xcbiBcXHRFTUlUKFBQQ19SQVdfQkNMNCgpKTtcXG4gXFx0RU1JVChQUENfUkFXX01GTFIoX1IxMikpO1xcbi1cXHRFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgLTgtU1pMKSk7XFxuK1xcdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAyMCkpO1xcbiBcXHRFTUlUKFBQQ19SQVdfTVRDVFIoX1IxMikpO1xcbiBcXHRFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7XFxuIFxcdEVNSVQoUFBDX1JBV19CQ1RSKCkpO1xcbiBcXG4rXFx0aWYgKGltYWdlKVxcbitcXHRcXHQqKCh1bnNpZ25lZCBsb25nICopXFx1MDAyNmltYWdlW2N0eC1cXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlaWR4ICs9IFNaTCAvIDQ7XFxuK1xcbiBcXHRpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHtcXG4gXFx0XFx0YnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtXFx1MDAzZWlkeCAtIG9vbF9zdHViX2lkeCkgKiA0O1xcbiBcXHRcXHRicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LVxcdTAwM2VpZHggLSBsb25nX2JyYW5jaF9zdHViX2lkeCkgKiA0O1xcbiBcXHR9XFxuIH1cXG4gXFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxcbitpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXFxuIHtcXG4tXFx0aWYgKCFleGl0X2FkZHIgfHwgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAoY3R4LVxcdTAwM2VpZHggKiA0KSkpIHtcXG4rXFx0aWYgKGV4aXRfYWRkciBcXHUwMDI2XFx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtXFx1MDAzZWlkeCAqIDQpKSkge1xcbiBcXHRcXHRQUENfSk1QKGV4aXRfYWRkcik7XFxuLVxcdH0gZWxzZSBpZiAoY3R4LVxcdTAwM2VhbHRfZXhpdF9hZGRyKSB7XFxuLVxcdFxcdGlmIChXQVJOX09OKCFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkciAtIChjdHgtXFx1MDAzZWlkeCAqIDQpKSkpXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZWFsdF9leGl0X2FkZHIgXFx1MDAyNlxcdTAwMjYgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShcXG4rXFx0XFx0XFx0KGxvbmcpKGN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkcikgLSAobG9uZykoY3R4LVxcdTAwM2VpZHggKiA0KSkpIHtcXG4gXFx0XFx0UFBDX0pNUChjdHgtXFx1MDAzZWFsdF9leGl0X2FkZHIpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRjdHgtXFx1MDAzZWFsdF9leGl0X2FkZHIgPSBjdHgtXFx1MDAzZWlkeCAqIDQ7XFxuLVxcdFxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XFxuK1xcdFxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI3NCw2ICszMDIsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxcbiBcXHQgKi9cXG4gXFx0aWYgKGNnY3R4LnNlZW4gXFx1MDAyNiBTRUVOX1RBSUxDQUxMIHx8ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWNnY3R4LmlkeCAqIDQpKSB7XFxuIFxcdFxcdGNnY3R4LmlkeCA9IDA7XFxuK1xcdFxcdGNnY3R4LmFsdF9leGl0X2FkZHIgPSAwO1xcbiBcXHRcXHRpZiAoYnBmX2ppdF9idWlsZF9ib2R5KGZwLCBOVUxMLCBOVUxMLCBcXHUwMDI2Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbkBAIC0yODYsNyArMzE1LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcXG4gXFx0ICovXFxuIFxcdGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgXFx1MDAyNmNnY3R4KTtcXG4gXFx0YWRkcnNbZnAtXFx1MDAzZWxlbl0gPSBjZ2N0eC5pZHggKiA0O1xcbi1cXHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIFxcdTAwMjZjZ2N0eCk7XFxuK1xcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgXFx1MDAyNmNnY3R4KTtcXG4gXFxuIFxcdGZpeHVwX2xlbiA9IGZwLVxcdTAwM2VhdXgtXFx1MDAzZW51bV9leGVudHJpZXMgKiBCUEZfRklYVVBfTEVOICogNDtcXG4gXFx0ZXh0YWJsZV9sZW4gPSBmcC1cXHUwMDNlYXV4LVxcdTAwM2VudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpO1xcbkBAIC0zMDYsOCArMzM1LDEwIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXFxuIFxcdGNvZGVfYmFzZSA9ICh1MzIgKikoaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcXG4gXFx0ZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XFxuIFxcbi1cXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xcbi1cXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFxcdTAwM2MgMzsgcGFzcysrKSB7XFxuK1xcdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yKywgbG9vcCB1bnRpbCBwcm9ncmFtIHNpemUgY29udmVyZ2VzLiAqL1xcbitcXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFxcdTAwM2M9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcysrKSB7XFxuK1xcdFxcdHUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuO1xcbitcXG4gXFx0XFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFxcdTAwMjYgZXBpbG9ndWUgZm9yIHJlYWwuICovXFxuIFxcdFxcdGNnY3R4LmlkeCA9IDA7XFxuIFxcdFxcdGNnY3R4LmFsdF9leGl0X2FkZHIgPSAwO1xcbkBAIC0zMTgsMTEgKzM0OSwyNiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxcbiBcXHRcXHRcXHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcXG4gXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBcXHUwMDI2Y2djdHgpO1xcbitcXHRcXHRhZGRyc1tmcC1cXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XFxuK1xcdFxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcXHUwMDI2Y2djdHgpO1xcbitcXG4rXFx0XFx0cHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7XFxuIFxcbiBcXHRcXHRpZiAoYnBmX2ppdF9lbmFibGUgXFx1MDAzZSAxKVxcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCJQYXNzICVkOiBzaHJpbmsgPSAlZCwgc2VlbiA9IDB4JXhcXFxcblxcXCIsIHBhc3MsXFxuLVxcdFxcdFxcdFxcdHByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pO1xcbitcXHRcXHRcXHRcXHRwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTtcXG4rXFxuK1xcdFxcdC8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovXFxuK1xcdFxcdGlmIChwYXNzIFxcdTAwM2U9IENPREVHRU5fTUlOX1BBU1NFUyBcXHUwMDI2XFx1MDAyNiBwcm9nbGVuID09IHByZXZfcHJvZ2xlbilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAocGFzcyA9PSBDT0RFR0VOX01BWF9QQVNTRVMgXFx1MDAyNlxcdTAwMjYgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJCUEYgSklUOiBQcm9ncmFtIGRpZCBub3QgY29udmVyZ2UgYWZ0ZXIgJWQgcGFzc2VzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRDT0RFR0VOX01BWF9QQVNTRVMpO1xcbitcXHRcXHRcXHRicGZfYXJjaF90ZXh0X2NvcHkoXFx1MDAyNmZoZHItXFx1MDAzZXNpemUsIFxcdTAwMjZoZHItXFx1MDAzZXNpemUsIHNpemVvZihoZHItXFx1MDAzZXNpemUpKTtcXG4rXFx0XFx0XFx0YnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoYnBmX2ppdF9lbmFibGUgXFx1MDAzZSAxKVxcbkBAIC0zNTcsNyArNDAzLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcXG4gXFx0XFx0XFx0XFx0KHZvaWQgKilmaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcXG4gXFxuIG91dF9hZGRyczpcXG4tXFx0XFx0aWYgKCFpbWFnZSBcXHUwMDI2XFx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xcbitcXHRcXHRpZiAoIWZwLVxcdTAwM2VqaXRlZCBcXHUwMDI2XFx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xcbiBcXHRcXHRcXHRmcC1cXHUwMDNlYXV4LVxcdTAwM2Vwcml2X3N0YWNrX3B0ciA9IE5VTEw7XFxuIFxcdFxcdFxcdGZyZWVfcGVyY3B1KHByaXZfc3RhY2tfcHRyKTtcXG4gXFx0XFx0fVxcbkBAIC03MzQsNyArNzgwLDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm8odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGVcXG4gXFx0XFx0ICogU2V0dGluZyB0aGUgdGFpbF9jYWxsX2luZm8gaW4gdHJhbXBvbGluZSdzIGZyYW1lXFxuIFxcdFxcdCAqIGRlcGVuZGluZyBvbiBpZiBwcmV2aW91cyBmcmFtZSBoYWQgdmFsdWUgb3IgcmVmZXJlbmNlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0RU1JVChQUENfUkFXX0NNUExXSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdFxcdEVNSVQoUFBDX1JBV19DTVBMTEkoX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRcXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfQURESShfUjMsIF9SNCwgLUJQRl9QUENfVEFJTENBTEwpKTtcXG4gXFxuQEAgLTEyNjAsNiArMTMwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXFxuICAqIGJwZl9mdW5jOlxcbiAgKlxcdFtub3B8Yl1cXHRvb2xfc3R1YlxcbiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOlxcbisgKlxcdG5vcFxcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XFxuICAqIG9vbF9zdHViOlxcbiAgKlxcdG1mbHJcXHRyMFxcbiAgKlxcdFtifGJsXVxcdFxcdTAwM2NicGZfcHJvZ1xcdTAwM2UvXFx1MDAzY2xvbmdfYnJhbmNoX3N0dWJcXHUwMDNlXFxuQEAgLTEyNjcsMTQgKzEzMTQsMTQgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcXG4gICpcXHRiXFx0YnBmX2Z1bmMgKyA0XFxuICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6XFxuICAqIGxvbmdfYnJhbmNoX3N0dWI6XFxuLSAqXFx0LmxvbmdcXHRcXHUwMDNjYnJhbmNoX2FkZHJcXHUwMDNlL1xcdTAwM2NkdW1teV90cmFtcFxcdTAwM2VcXG4gICpcXHRtZmxyXFx0cjExXFxuICAqXFx0YmNsXFx0MjAsMzEsJCs0XFxuICAqXFx0bWZsclxcdHIxMlxcbi0gKlxcdGxkXFx0cjEyLCAtMTYocjEyKVxcbisgKlxcdGxkXFx0cjEyLCAyMChyMTIpXFxuICAqXFx0bXRjdHJcXHRyMTJcXG4gICpcXHRtdGxyXFx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxcbiAgKlxcdGJjdHJcXG4rICpcXHQubG9uZ1xcdFxcdTAwM2NicmFuY2hfYWRkclxcdTAwM2UvXFx1MDAzY2R1bW15X3RyYW1wXFx1MDAzZVxcbiAgKlxcbiAgKiBkdW1teV90cmFtcCBpcyB1c2VkIHRvIHJlZHVjZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzLlxcbiAgKlxcbkBAIC0xMzc2LDEwICsxNDIzLDEyIEBAIGludCBicGZfYXJjaF90ZXh0X3Bva2Uodm9pZCAqaXAsIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG9sZF90LFxcbiBcXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XFxuIFxcdCAqIElmIG5ld19hZGRyIGlzIG91dCBvZiByYW5nZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgbG9uZyBicmFuY2ggc3R1Yiwgc28gcGF0Y2ggbmV3X2FkZHJcXG4gXFx0ICogaGVyZS4gT3RoZXJ3aXNlLCByZXZlcnQgdG8gZHVtbXlfdHJhbXAsIGJ1dCBvbmx5IGlmIHdlIGhhZCBwYXRjaGVkIG9sZF9hZGRyIGhlcmUuXFxuK1xcdCAqXFxuK1xcdCAqIGR1bW15X3RyYW1wX2FkZHIgbW92ZWQgdG8gYm90dG9tIG9mIGxvbmcgYnJhbmNoIHN0dWIuXFxuIFxcdCAqL1xcbiBcXHRpZiAoKG5ld19hZGRyIFxcdTAwMjZcXHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSB8fFxcbiBcXHQgICAgKG9sZF9hZGRyIFxcdTAwMjZcXHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSlcXG4tXFx0XFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSxcXG4rXFx0XFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xcbiBcXHRcXHRcXHRcXHQgIChuZXdfYWRkciBcXHUwMDI2XFx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgP1xcbiBcXHRcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xcbiBcXHRpZiAocmV0KVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG5pbmRleCBiZmRjNTA3NDBkYThlNy4uZjViOTQ0MWNmNDZhYTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXFxuQEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxcbiBcXG4gfVxcbiBcXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIHtcXG4gXFx0RU1JVChQUENfUkFXX01SKF9SMywgYnBmX3RvX3BwYyhCUEZfUkVHXzApKSk7XFxuIFxcbkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4gXFxuIFxcdEVNSVQoUFBDX1JBV19CTFIoKSk7XFxuIFxcbi1cXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgY3R4KTtcXG4rXFx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcXG4gfVxcbiBcXG4gLyogUmVsYXRpdmUgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gZmluYWwgaW1hZ2UgbG9jYXRpb24gKi9cXG5AQCAtMTE0OSw3ICsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcXG4gXFx0XFx0XFx0ICogd2UnbGwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGVwaWxvZ3VlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7XFxuK1xcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XFxuIFxcdFxcdFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggZGIzNjRkOTA4M2U3MjUuLjA4NjA4NGFiYjE4NGE0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4gXFx0XFx0ICovXFxuIFxcdFxcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcXG4tXFx0XFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdFxcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRcXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0LShCUEZfUFBDX1RBSUxDQUxMKSkpO1xcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcXG4gXFx0fVxcbiB9XFxuIFxcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xcbiBcXG5AQCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIFxcbiBcXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xcbiBcXG4tXFx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XFxuK1xcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTY1MSw3ICs2NTEsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xcbiBcXHRQUENfQkNDX1NIT1JUKENPTkRfR0UsIG91dCk7XFxuIFxcbiBcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0xFLCA4KTtcXG4gXFxuIFxcdC8qIGRlcmVmZXJlbmNlIFRNUF9SRUdfMSAqL1xcbkBAIC02NjEsNyArNjYxLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cXG4gXFx0ICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKVxcbiBcXHQgKiAgIGdvdG8gb3V0O1xcbiBcXHQgKi9cXG4tXFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7XFxuIFxcbiBcXHQvKlxcbkBAIC02OTYsNyArNjk2LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cXG4gXFx0ICogdGFpbF9jYWxsX2luZm8uXFxuIFxcdCAqL1xcbiBcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcXG4gXFxuIFxcdC8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovXFxuQEAgLTE3MjYsNyArMTcyNiw4IEBAIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlXFxuIFxcdFxcdFxcdCAqIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChpICE9IGZsZW4gLSAxKSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XFxuK1xcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwgY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR0bXAxX3JlZywgZXhpdF9hZGRyKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcXG5pbmRleCAzNTU4ZmUxMGUyOGNmOS4uMTE0MjhjYWQ1YjJkMmIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXFxuQEAgLTE3OCwxMCArMTc4LDEyIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbyA9IHt9O1xcbiBcXHRfX3UzMiBpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcXG4tXFx0X191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7XFxuK1xcdF9fdTMyIGppdGVkX2Z1bmNzLCBsZW4sIHBjLCBkaXNhc21fbGVuO1xcbitcXHRfX3UzMiB0cnVuY19sZW4gPSAwO1xcbiBcXHRfX3UzMiAqZnVuY19sZW5zID0gTlVMTDtcXG4gXFx0RklMRSAqdGV4dF9vdXQgPSBOVUxMO1xcbiBcXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XFxuK1xcdGNoYXIgKnRyaXBsZSA9IE5VTEw7XFxuIFxcdGludCBpLCBlcnIgPSAwO1xcbiBcXG4gXFx0aWYgKCFsbHZtX2luaXRpYWxpemVkKSB7XFxuQEAgLTIyNSw5ICsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcXG4gXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBsYXN0IDggYnl0ZXMgY29udGFpbnMgZHVtbXlfdHJhbXBvbGluZSBhZGRyZXNzIGluIEpJVFxcbitcXHQgKiBvdXRwdXQgb24gNjQtYml0IGFuZCBsYXN0IDQgYnl0ZXMgb24gMzItYml0IHBvd2VycGMsXFxuK1xcdCAqIHdoaWNoIGNhbid0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uXFxuK1xcdCAqL1xcbitcXHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xcbitcXHRpZiAodHJpcGxlKSB7XFxuK1xcdFxcdGlmIChzdHJzdHIodHJpcGxlLCBcXFwicG93ZXJwYzY0XFxcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXFxcInBwYzY0XFxcIikpXFxuK1xcdFxcdFxcdHRydW5jX2xlbiA9IDg7XFxuK1xcdFxcdGVsc2UgaWYgKHN0cnN0cih0cmlwbGUsIFxcXCJwb3dlcnBjXFxcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXFxcInBwY1xcXCIpKVxcbitcXHRcXHRcXHR0cnVuY19sZW4gPSA0O1xcbitcXHRcXHRMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChwYyA9IDAsIGkgPSAwOyBpIFxcdTAwM2Mgaml0ZWRfZnVuY3M7ICsraSkge1xcbitcXG4gXFx0XFx0ZnByaW50Zih0ZXh0X291dCwgXFxcImZ1bmMgIyVkOlxcXFxuXFxcIiwgaSk7XFxuLVxcdFxcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZnVuY19sZW5zW2ldKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSBcXHUwMDNlIHRydW5jX2xlbiA/XFxuK1xcdFxcdFxcdFxcdFxcdGZ1bmNfbGVuc1tpXSAtIHRydW5jX2xlbiA6IDA7XFxuK1xcdFxcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZGlzYXNtX2xlbik7XFxuK1xcbiBcXHRcXHRmcHJpbnRmKHRleHRfb3V0LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0XFx0cGMgKz0gZnVuY19sZW5zW2ldO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG5pbmRleCA5ZWViNWIwYjYzZDY5Ny4uY2RjMmEzZGUzMDU0MDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxcbkBAIC0xNTgsNiArMTU4LDcgQEBcXG4gI2RlZmluZSBfX2FyY2hfYXJtNjRcXHRcXHRfX2FyY2goXFxcIkFSTTY0XFxcIilcXG4gI2RlZmluZSBfX2FyY2hfcmlzY3Y2NFxcdFxcdF9fYXJjaChcXFwiUklTQ1Y2NFxcXCIpXFxuICNkZWZpbmUgX19hcmNoX3MzOTB4XFx0XFx0X19hcmNoKFxcXCJzMzkweFxcXCIpXFxuKyNkZWZpbmUgX19hcmNoX3Bvd2VycGM2NFxcdF9fYXJjaChcXFwiUE9XRVJQQzY0XFxcIilcXG4gI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpXFx0X190ZXN0X3RhZyhcXFwidGVzdF9jYXBzX3VucHJpdj1cXFwiIEVYUEFORF9RVU9URShjYXBzKSlcXG4gI2RlZmluZSBfX2xvYWRfaWZfSklUZWQoKVxcdF9fdGVzdF90YWcoXFxcImxvYWRfbW9kZT1qaXRlZFxcXCIpXFxuICNkZWZpbmUgX19sb2FkX2lmX25vX0pJVGVkKClcXHRfX3Rlc3RfdGFnKFxcXCJsb2FkX21vZGU9bm9faml0ZWRcXFwiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcXG5pbmRleCA0OGZhMzRkMjk1OWY0Ni4uMDlkN2U5MmM4NDkxMDAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXFxuQEAgLTkxLDYgKzkxLDc1IEBAIF9faml0ZWQoXFxcIlxcdHBvcHFcXHQlcmF4XFxcIilcXG4gX19qaXRlZChcXFwiXFx0am1wXFx0e3suKn19XFxcIilcXHRcXHQvKiBqdW1wIHRvIHRhaWwgY2FsbCB0Z3QgICAqL1xcbiBfX2ppdGVkKFxcXCJMMDpcXHRsZWF2ZVxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdHt7KHJldHF8am1wXFx0MHgpfX1cXFwiKVxcdFxcdC8qIHJldHVybiBvciBqdW1wIHRvIHJldGh1bmsgKi9cXG4rX19hcmNoX3Bvd2VycGM2NFxcbisvKiBwcm9ncmFtIGVudHJ5IGZvciBtYWluKCksIHJlZ3VsYXIgZnVuY3Rpb24gcHJvbG9ndWUgKi9cXG4rX19qaXRlZChcXFwiXFx0bm9wXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIikgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxkIDIsIDE2KDEzKSBhYnNlbnQgd2l0aCBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xcbitfX2ppdGVkKFxcXCJcXHRsaSA5LCAwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkIDksIC04KDEpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bWZsciAwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkIDAsIDE2KDEpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkdSAxLCB7ey4qfX0oMSlcXFwiKVxcbisvKiBsb2FkIGFkZHJlc3MgYW5kIGNhbGwgc3ViKCkgdmlhIGNvdW50IHJlZ2lzdGVyICovXFxuK19faml0ZWQoXFxcIlxcdGxpcyAxMiwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c2xkaSAxMiwgMTIsIDMyXFxcIilcXG4rX19qaXRlZChcXFwiXFx0b3JpcyAxMiwgMTIsIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG9yaSAxMiwgMTIsIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG10Y3RyIDEyXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YmN0cmxcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtclxcdDgsIDNcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsaSA4LCAwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkaSAxLCAxLCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsZCAwLCAxNigxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG10bHIgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1yXFx0MywgOFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJsclxcXCIpXFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcImZ1bmMgIzFcXFwiKVxcbisvKiBzdWJwcm9ncmFtIGVudHJ5IGZvciBzdWIoKSAqL1xcbitfX2ppdGVkKFxcXCJcXHRub3BcXFwiKVxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXFxuKy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xcbitfX2ppdGVkKFxcXCJcXHRsZCAxMCwgMCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDksIC04KDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDksIDMzXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YnRcXHR7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZGkgOSwgMTAsIC04XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkIDksIC04KDEpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bGlzIHt7Lip9fSwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c2xkaSB7ey4qfX0sIHt7Lip9fSwgMzJcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRvcmlzIHt7Lip9fSwge3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRvcmkge3suKn19LCB7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxpIHt7Lip9fSwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGx3eiA5LCB7ey4qfX0oe3suKn19KVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHNsd2kge3suKn19LCB7ey4qfX0sIDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsd1xcdHt7Lip9fSwgOVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJmXFx0MCwge3suKn19XFxcIilcXG4rLyogYnBmX3RhaWxfY2FsbCBpbXBsZW1lbnRhdGlvbiAqL1xcbitfX2ppdGVkKFxcXCJcXHRsZCA5LCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDksIDMzXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YmZcXHR7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDksIDAoOSlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsZGlcXHQ5LCAzM1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRpIDksIDksIDFcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtdWxsaSAxMCwge3suKn19LCA4XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkIDEwLCAxMCwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0bGQgMTAsIHt7Lip9fSgxMClcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsZGlcXHQxMCwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsZCAxMCwge3suKn19KDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZGkgMTAsIDEwLCB7ey4qfX1cXFwiKSAgICAvKiBvZmZzZXQgZGVwZW5kcyBvbiBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xcbitfX2ppdGVkKFxcXCJcXHRtdGN0ciAxMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDEwLCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDEwLCAzM1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRpIDEwLCAxLCAtOFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZCA5LCAwKDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJjdHJcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtclxcdDMsIDhcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRibHJcXFwiKVxcbitcXG4gU0VDKFxcXCJ0Y1xcXCIpXFxuIF9fbmFrZWQgaW50IG1haW4odm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuaW5kZXggYWJkYjllNmUzNzEzNjIuLmQ1NTg5MzU1ZWQ5ZTBjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5AQCAtMzc3LDYgKzM3Nyw3IEBAIGVudW0gYXJjaCB7XFxuIFxcdEFSQ0hfQVJNNjRcXHQ9IDB4NCxcXG4gXFx0QVJDSF9SSVNDVjY0XFx0PSAweDgsXFxuIFxcdEFSQ0hfUzM5MFhcXHQ9IDB4MTAsXFxuK1xcdEFSQ0hfUE9XRVJQQzY0XFx0PSAweDIwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXFxuQEAgLTM4OSw2ICszOTAsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcXG4gXFx0cmV0dXJuIEFSQ0hfUklTQ1Y2NDtcXG4gI2VsaWYgZGVmaW5lZChfX3MzOTB4X18pXFxuIFxcdHJldHVybiBBUkNIX1MzOTBYO1xcbisjZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pXFxuK1xcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcXG4gI2VuZGlmXFxuIFxcdHJldHVybiBBUkNIX1VOS05PV047XFxuIH1cXG5AQCAtNTgwLDYgKzU4Myw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxcbiBcXHRcXHRcXHRcXHRhcmNoID0gQVJDSF9SSVNDVjY0O1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFxcXCJzMzkweFxcXCIpID09IDApIHtcXG4gXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfUzM5MFg7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXFxcIlBPV0VSUEM2NFxcXCIpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfUE9XRVJQQzY0O1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRQUklOVF9GQUlMKFxcXCJiYWQgYXJjaCBzcGVjOiAnJXMnXFxcXG5cXFwiLCB2YWwpO1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0MzoyMy4xNDk5MjkyMzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjc4NDk0MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzXCIsXG4gICAgXCJicGZfaml0X2VtaXRfZXhpdF9pbnNuXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2VwaWxvZ3VlXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2JvZHlcIixcbiAgICBcImJwZl9qaXRfYnVpbGRfcHJvbG9ndWVcIixcbiAgICBcImJwZl9qaXRfZW1pdF90YWlsX2NhbGxcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvXCIsXG4gICAgXCJicGZfYXJjaF90ZXh0X3Bva2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgUG93ZXJQQywgc3BlY2lmaWNhbGx5IGFkanVzdGluZyB0aGUgY29kZSBnZW5lcmF0aW9uIHBhc3NlcywgZmVudHJ5IHN0dWJzIGFsaWdubWVudCwgYW5kIGVwaWxvZ3VlL2V4aXQgaW5zdHJ1Y3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgQlBGIHByb2dyYW1zIGFyZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQgb24gUG93ZXJQQyBhcmNoaXRlY3R1cmVzLiBGdXp6aW5nIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIFBvd2VyUEMgd2lsbCBoZWxwIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgYW5kIHByZXZlbnQgcG90ZW50aWFsIGNyYXNoZXMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVlNmE1NjQzYjliYjc1M2FlYTc1MjFlZjUyZTg0NzlkNGYyMDc3N2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxOTo0MzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmhcbmluZGV4IGYzMmRlODcwNGQ0ZDk2Li40ZGE4YmRlOTJlMWVmZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxuQEAgLTE0LDYgKzE0LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BwYy1vcGNvZGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1aWxkX2J1Zy5oXHUwMDNlXG4gXG4rLypcbisgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWRcbisgKiBhZGRpdGlvbmFsIHBhc3NlcyBpZiBjb2RlIHNpemUgY2hhbmdlcyBiZXR3ZWVuIHBhc3Nlcy5cbisgKi9cbisjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyXG4rI2RlZmluZSBDT0RFR0VOX01BWF9QQVNTRVMgICAgM1xuK1xuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxuICNkZWZpbmUgRlVOQ1RJT05fREVTQ1JfU0laRVx0MjRcbiAjZWxzZVxuQEAgLTE4OCw2ICsxOTUsMTIgQEAgc3RydWN0IGNvZGVnZW5fY29udGV4dCB7XG4gXG4gI2RlZmluZSBicGZfdG9fcHBjKHIpXHQoY3R4LVx1MDAzZWIycFtyXSlcbiBcbisjaWZkZWYgQ09ORklHX1BQQzY0XG4rI2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKVxuKyNlbHNlXG4rI2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKVxuKyNlbmRpZlxuK1xuICNpZmRlZiBDT05GSUdfUFBDMzJcbiAjZGVmaW5lIEJQRl9GSVhVUF9MRU5cdDMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID1cdTAwM2UgMTIgYnl0ZXMgKi9cbiAjZWxzZVxuQEAgLTIxNCwxMCArMjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXG4gaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuIFx0XHQgICAgICAgdTMyICphZGRycywgaW50IHBhc3MsIGJvb2wgZXh0cmFfcGFzcyk7XG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuK3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuIHZvaWQgYnBmX2ppdF9yZWFsbG9jX3JlZ3Moc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcik7XG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRsb25nIGV4aXRfYWRkcik7XG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcbiBcdFx0XHRcdFx0XHRcdFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcbiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggNjM1MWExODdjYTYxZTIuLjQ2YmJmYjZiZTYxMzQwIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTQ5LDExICs0OSwzNyBAQCBhc20gKFxuIFwiXHQucG9wc2VjdGlvblx0XHRcdFx0O1wiXG4gKTtcbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0aW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7XG4rXHRpbnQgc3R1Yl9zejtcbiBcbiBcdC8qXG4rXHQgKiBUaGUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpcyBwbGFjZWQgYXQgYm90dG9tIG9mIExvbmcgYnJhbmNoIHN0dWIuXG4rXHQgKiBJbiB0aGUgZmluYWwgcGFzcywgYWxpZ24gdGhlIG1pcy1hbGlnbmVkIGR1bW15X3RyYW1wX2FkZHIgZmllbGRcbitcdCAqIGluIHRoZSBmaW1hZ2UuIFRoZSBhbGlnbm1lbnQgTk9QIG11c3QgYXBwZWFyIGJlZm9yZSBPT0wgc3R1YixcbitcdCAqIHRvIG1ha2Ugb29sX3N0dWJfaWR4IFx1MDAyNiBsb25nX2JyYW5jaF9zdHViX2lkeCBjb25zdGFudCBmcm9tIGVuZC5cbitcdCAqXG4rXHQgKiBkdW1teV90cmFtcF9hZGRyIG11c3QgYmUgOC1ieXRlIGFsaWduZWQgZm9yIGxvYWQtcmVnaXN0ZXJcbitcdCAqIGNvbXBhdGliaWxpdHkuIFRoZSBmaW1hZ2UgY2FuIGJlIG5vbiA4LWJ5dGUgYWxpZ25lZCwgc28gZmluYWxcbitcdCAqIGFsaWdubWVudCBkZXBlbmRzIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWIncyBpbnN0cnVjdGlvblxuK1x0ICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoXG4rXHQgKiBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgb3IgMTAgaW5zdHJ1Y3Rpb25zICh3aXRob3V0KVxuK1x0ICogYmVmb3JlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQuIEVtaXQgYSBOT1AgaWYgdGhlIGFkZHJlc3Mgb2ZcbitcdCAqIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuXG4rXHQgKlxuK1x0ICogSW4gcGFzcz0wIHdoZW4gaW1hZ2U9PU5VTEwsIGNvbnNlcnZhdGl2ZWx5IGFjY291bnQgZm9yIHNwYWNlXG4rXHQgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHNcbitcdCAqIGVtaXR0aW5nIGFsaWdubWVudCBOT1AsIHRoZSBpbWFnZSBidWZmZXIgaGF2ZSA0IHNwYXJlIGJ5dGVzIGFuZFxuK1x0ICogaml0ZWRfbGVuIHNpZ25pZmllcyBjb3JyZWN0IHByb2dyYW0gc2l6ZS5cbitcdCAqL1xuK1xuK1x0c3R1Yl9zeiA9IElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpID8gNDQgOiA0MDtcbitcdGlmICghaW1hZ2UgfHwgIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZmltYWdlICsgY3R4LVx1MDAzZWlkeCo0ICsgc3R1Yl9zeiwgU1pMKSlcbitcdFx0RU1JVChQUENfUkFXX05PUCgpKTtcbitcbitcdC8qXG4rXHQgKiAgICAgIG5vcCAgICAgLy8gb3B0aW9uYWwsIGZvciBhbGlnbm1lbnQgb2YgZHVtbXlfdHJhbXBfYWRkclxuIFx0ICogT3V0LW9mLWxpbmUgc3R1YjpcbiBcdCAqXHRtZmxyXHRyMFxuIFx0ICpcdFtifGJsXVx0dHJhbXBcbkBAIC03MCw0NCArOTYsNDYgQEAgdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXG4gXHQvKlxuIFx0ICogTG9uZyBicmFuY2ggc3R1Yjpcbi1cdCAqXHQubG9uZ1x0XHUwMDNjZHVtbXlfdHJhbXBfYWRkclx1MDAzZVxuIFx0ICpcdG1mbHJcdHIxMVxuIFx0ICpcdGJjbFx0MjAsMzEsJCs0XG4tXHQgKlx0bWZsclx0cjEyXG4tXHQgKlx0bGRcdHIxMiwgLTgtU1pMKHIxMilcbitcdCAqXHRtZmxyXHRyMTJcdC8vIGxyL3IxMiBzdG9yZXMgcGMgb2YgY3VycmVudCh0aGlzKSBpbnN0LlxuK1x0ICpcdGxkXHRyMTIsIDIwKHIxMikgLy8gb2Zmc2V0KGR1bW15X3RyYW1wX2FkZHIpIGZyb20gcHJldiBpbnN0LiBpcyAyMFxuIFx0ICpcdG10Y3RyXHRyMTJcbi1cdCAqXHRtdGxyXHRyMTEgLy8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJXG4rXHQgKlx0bXRsclx0cjExXHQvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiBcdCAqXHRiY3RyXG4rXHQgKlx0LmxvbmdcdFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcdTAwM2UgIC8vIDgtYnl0ZSBhbGlnbmVkXG4gXHQgKi9cbi1cdGlmIChpbWFnZSlcbi1cdFx0KigodW5zaWduZWQgbG9uZyAqKVx1MDAyNmltYWdlW2N0eC1cdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xuLVx0Y3R4LVx1MDAzZWlkeCArPSBTWkwgLyA0O1xuIFx0bG9uZ19icmFuY2hfc3R1Yl9pZHggPSBjdHgtXHUwMDNlaWR4O1xuIFx0RU1JVChQUENfUkFXX01GTFIoX1IxMSkpO1xuIFx0RU1JVChQUENfUkFXX0JDTDQoKSk7XG4gXHRFTUlUKFBQQ19SQVdfTUZMUihfUjEyKSk7XG4tXHRFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgLTgtU1pMKSk7XG4rXHRFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgMjApKTtcbiBcdEVNSVQoUFBDX1JBV19NVENUUihfUjEyKSk7XG4gXHRFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7XG4gXHRFTUlUKFBQQ19SQVdfQkNUUigpKTtcbiBcbitcdGlmIChpbWFnZSlcbitcdFx0KigodW5zaWduZWQgbG9uZyAqKVx1MDAyNmltYWdlW2N0eC1cdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xuK1xuK1x0Y3R4LVx1MDAzZWlkeCArPSBTWkwgLyA0O1xuK1xuIFx0aWYgKCFicGZfaml0X29vbF9zdHViKSB7XG4gXHRcdGJwZl9qaXRfb29sX3N0dWIgPSAoY3R4LVx1MDAzZWlkeCAtIG9vbF9zdHViX2lkeCkgKiA0O1xuIFx0XHRicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LVx1MDAzZWlkeCAtIGxvbmdfYnJhbmNoX3N0dWJfaWR4KSAqIDQ7XG4gXHR9XG4gfVxuIFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxuK2ludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4rXHRcdFx0XHRcdFx0XHRpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXG4ge1xuLVx0aWYgKCFleGl0X2FkZHIgfHwgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuK1x0aWYgKGV4aXRfYWRkciBcdTAwMjZcdTAwMjYgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAobG9uZykoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuIFx0XHRQUENfSk1QKGV4aXRfYWRkcik7XG4tXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKSB7XG4tXHRcdGlmIChXQVJOX09OKCFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyIC0gKGN0eC1cdTAwM2VpZHggKiA0KSkpKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgXHUwMDI2XHUwMDI2IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoXG4rXHRcdFx0KGxvbmcpKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKSAtIChsb25nKShjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4gXHRcdFBQQ19KTVAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpO1xuIFx0fSBlbHNlIHtcbiBcdFx0Y3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgPSBjdHgtXHUwMDNlaWR4ICogNDtcbi1cdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgY3R4KTtcbitcdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgZmltYWdlLCBjdHgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc0LDYgKzMwMiw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHQgKi9cbiBcdGlmIChjZ2N0eC5zZWVuIFx1MDAyNiBTRUVOX1RBSUxDQUxMIHx8ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWNnY3R4LmlkeCAqIDQpKSB7XG4gXHRcdGNnY3R4LmlkeCA9IDA7XG4rXHRcdGNnY3R4LmFsdF9leGl0X2FkZHIgPSAwO1xuIFx0XHRpZiAoYnBmX2ppdF9idWlsZF9ib2R5KGZwLCBOVUxMLCBOVUxMLCBcdTAwMjZjZ2N0eCwgYWRkcnMsIDAsIGZhbHNlKSlcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG5AQCAtMjg2LDcgKzMxNSw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHQgKi9cbiBcdGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgXHUwMDI2Y2djdHgpO1xuIFx0YWRkcnNbZnAtXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XG4tXHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIFx1MDAyNmNnY3R4KTtcbitcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgXHUwMDI2Y2djdHgpO1xuIFxuIFx0Zml4dXBfbGVuID0gZnAtXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMgKiBCUEZfRklYVVBfTEVOICogNDtcbiBcdGV4dGFibGVfbGVuID0gZnAtXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSk7XG5AQCAtMzA2LDggKzMzNSwxMCBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0Y29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSArIEZVTkNUSU9OX0RFU0NSX1NJWkUpO1xuIFx0ZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4tXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xuLVx0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2MgMzsgcGFzcysrKSB7XG4rXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMissIGxvb3AgdW50aWwgcHJvZ3JhbSBzaXplIGNvbnZlcmdlcy4gKi9cbitcdGZvciAocGFzcyA9IDE7IHBhc3MgXHUwMDNjPSBDT0RFR0VOX01BWF9QQVNTRVM7IHBhc3MrKykge1xuK1x0XHR1MzIgcHJldl9wcm9nbGVuID0gcHJvZ2xlbjtcbitcbiBcdFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFx1MDAyNiBlcGlsb2d1ZSBmb3IgcmVhbC4gKi9cbiBcdFx0Y2djdHguaWR4ID0gMDtcbiBcdFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XG5AQCAtMzE4LDExICszNDksMjYgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdFx0XHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbi1cdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbitcdFx0YWRkcnNbZnAtXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XG4rXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4rXG4rXHRcdHByb2dsZW4gPSBjZ2N0eC5pZHggKiA0O1xuIFxuIFx0XHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG4gXHRcdFx0cHJfaW5mbyhcIlBhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcblwiLCBwYXNzLFxuLVx0XHRcdFx0cHJvZ2xlbiAtIChjZ2N0eC5pZHggKiA0KSwgY2djdHguc2Vlbik7XG4rXHRcdFx0XHRwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTtcbitcbitcdFx0LyogQ2hlY2sgaWYgcHJvZ3JhbSBzaXplIGhhcyBjb252ZXJnZWQsIGJ1dCBlbnN1cmUgbWluaW11bSBwYXNzZXMgKi9cbitcdFx0aWYgKHBhc3MgXHUwMDNlPSBDT0RFR0VOX01JTl9QQVNTRVMgXHUwMDI2XHUwMDI2IHByb2dsZW4gPT0gcHJldl9wcm9nbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAocGFzcyA9PSBDT0RFR0VOX01BWF9QQVNTRVMgXHUwMDI2XHUwMDI2IHByb2dsZW4gIT0gcHJldl9wcm9nbGVuKSB7XG4rXHRcdFx0cHJfZXJyKFwiQlBGIEpJVDogUHJvZ3JhbSBkaWQgbm90IGNvbnZlcmdlIGFmdGVyICVkIHBhc3Nlc1xcblwiLFxuK1x0XHRcdFx0XHRcdFx0XHRDT0RFR0VOX01BWF9QQVNTRVMpO1xuK1x0XHRcdGJwZl9hcmNoX3RleHRfY29weShcdTAwMjZmaGRyLVx1MDAzZXNpemUsIFx1MDAyNmhkci1cdTAwM2VzaXplLCBzaXplb2YoaGRyLVx1MDAzZXNpemUpKTtcbitcdFx0XHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcbitcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbkBAIC0zNTcsNyArNDAzLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdFx0XHRcdCh2b2lkICopZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4gb3V0X2FkZHJzOlxuLVx0XHRpZiAoIWltYWdlIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuK1x0XHRpZiAoIWZwLVx1MDAzZWppdGVkIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuIFx0XHRcdGZwLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3B0ciA9IE5VTEw7XG4gXHRcdFx0ZnJlZV9wZXJjcHUocHJpdl9zdGFja19wdHIpO1xuIFx0XHR9XG5AQCAtNzM0LDcgKzc4MCw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRlXG4gXHRcdCAqIFNldHRpbmcgdGhlIHRhaWxfY2FsbF9pbmZvIGluIHRyYW1wb2xpbmUncyBmcmFtZVxuIFx0XHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cbiBcdFx0ICovXG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0XHRFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7XG4gXG5AQCAtMTI2MCw2ICsxMzA2LDcgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcbiAgKiBicGZfZnVuYzpcbiAgKlx0W25vcHxiXVx0b29sX3N0dWJcbiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOlxuKyAqXHRub3BcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XG4gICogb29sX3N0dWI6XG4gICpcdG1mbHJcdHIwXG4gICpcdFtifGJsXVx0XHUwMDNjYnBmX3Byb2dcdTAwM2UvXHUwMDNjbG9uZ19icmFuY2hfc3R1Ylx1MDAzZVxuQEAgLTEyNjcsMTQgKzEzMTQsMTQgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcbiAgKlx0Ylx0YnBmX2Z1bmMgKyA0XG4gICogMy4gTG9uZyBicmFuY2ggc3R1YjpcbiAgKiBsb25nX2JyYW5jaF9zdHViOlxuLSAqXHQubG9uZ1x0XHUwMDNjYnJhbmNoX2FkZHJcdTAwM2UvXHUwMDNjZHVtbXlfdHJhbXBcdTAwM2VcbiAgKlx0bWZsclx0cjExXG4gICpcdGJjbFx0MjAsMzEsJCs0XG4gICpcdG1mbHJcdHIxMlxuLSAqXHRsZFx0cjEyLCAtMTYocjEyKVxuKyAqXHRsZFx0cjEyLCAyMChyMTIpXG4gICpcdG10Y3RyXHRyMTJcbiAgKlx0bXRsclx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuICAqXHRiY3RyXG4rICpcdC5sb25nXHRcdTAwM2NicmFuY2hfYWRkclx1MDAzZS9cdTAwM2NkdW1teV90cmFtcFx1MDAzZVxuICAqXG4gICogZHVtbXlfdHJhbXAgaXMgdXNlZCB0byByZWR1Y2Ugc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cy5cbiAgKlxuQEAgLTEzNzYsMTAgKzE0MjMsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsXG4gXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XG4gXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXG4gXHQgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS5cbitcdCAqXG4rXHQgKiBkdW1teV90cmFtcF9hZGRyIG1vdmVkIHRvIGJvdHRvbSBvZiBsb25nIGJyYW5jaCBzdHViLlxuIFx0ICovXG4gXHRpZiAoKG5ld19hZGRyIFx1MDAyNlx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgfHxcbiBcdCAgICAob2xkX2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSlcbi1cdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSxcbitcdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xuIFx0XHRcdFx0ICAobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/XG4gXHRcdFx0XHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IGJmZGM1MDc0MGRhOGU3Li5mNWI5NDQxY2Y0NmFhNyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXG5AQCAtMjI5LDcgKzIyOSw3IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4XG4gXG4gfVxuIFxuLXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0RU1JVChQUENfUkFXX01SKF9SMywgYnBmX3RvX3BwYyhCUEZfUkVHXzApKSk7XG4gXG5AQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXG4gXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xuIFxuLVx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XG4rXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpO1xuIH1cbiBcbiAvKiBSZWxhdGl2ZSBvZmZzZXQgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiBmaW5hbCBpbWFnZSBsb2NhdGlvbiAqL1xuQEAgLTExNDksNyArMTE0OSw4IEBAIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlXG4gXHRcdFx0ICogd2UnbGwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGVwaWxvZ3VlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICE9IGZsZW4gLSAxKSB7XG4tXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIF9SMCwgZXhpdF9hZGRyKTtcbitcdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSxcbitcdFx0XHRcdFx0XHRcdFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGRiMzY0ZDkwODNlNzI1Li4wODYwODRhYmIxODRhNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXHRcdCAqL1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIDApKTtcbiBcdFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCAtKEJQRl9QUENfVEFJTENBTEwpKSk7XG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0XHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksXG4gXHRcdFx0XHRcdFx0XHRcdC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcbiBcdH1cbiB9XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuIFxuQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuK1x0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiB9XG4gXG4gLypcbkBAIC02NTEsNyArNjUxLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdFBQQ19CQ0NfU0hPUlQoQ09ORF9HRSwgb3V0KTtcbiBcbiBcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTtcbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpO1xuIFxuIFx0LyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovXG5AQCAtNjYxLDcgKzY2MSw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvXG4gXHQgKiBpZiAodGFpbF9jYWxsX2luZm8gPT0gTUFYX1RBSUxfQ0FMTF9DTlQpXG4gXHQgKiAgIGdvdG8gb3V0O1xuIFx0ICovXG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0VRLCBvdXQpO1xuIFxuIFx0LypcbkBAIC02OTYsNyArNjk2LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIHRhaWxfY2FsbF9pbmZvLlxuIFx0ICovXG4gXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcbiBcdC8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovXG5AQCAtMTcyNiw3ICsxNzI2LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbi1cdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XG4rXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsIGN0eCxcbitcdFx0XHRcdFx0XHRcdFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IDM1NThmZTEwZTI4Y2Y5Li4xMTQyOGNhZDViMmQyYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXG5AQCAtMTc4LDEwICsxNzgsMTIgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvID0ge307XG4gXHRfX3UzMiBpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbi1cdF9fdTMyIGppdGVkX2Z1bmNzLCBsZW4sIHBjO1xuK1x0X191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGMsIGRpc2FzbV9sZW47XG4rXHRfX3UzMiB0cnVuY19sZW4gPSAwO1xuIFx0X191MzIgKmZ1bmNfbGVucyA9IE5VTEw7XG4gXHRGSUxFICp0ZXh0X291dCA9IE5VTEw7XG4gXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XG4rXHRjaGFyICp0cmlwbGUgPSBOVUxMO1xuIFx0aW50IGksIGVyciA9IDA7XG4gXG4gXHRpZiAoIWxsdm1faW5pdGlhbGl6ZWQpIHtcbkBAIC0yMjUsOSArMjI3LDMwIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcIikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUXG4rXHQgKiBvdXRwdXQgb24gNjQtYml0IGFuZCBsYXN0IDQgYnl0ZXMgb24gMzItYml0IHBvd2VycGMsXG4rXHQgKiB3aGljaCBjYW4ndCBkaXNhc3NlbWJsZSB0byBhIHZhbGlkIGluc3RydWN0aW9uLlxuK1x0ICovXG4rXHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xuK1x0aWYgKHRyaXBsZSkge1xuK1x0XHRpZiAoc3Ryc3RyKHRyaXBsZSwgXCJwb3dlcnBjNjRcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXCJwcGM2NFwiKSlcbitcdFx0XHR0cnVuY19sZW4gPSA4O1xuK1x0XHRlbHNlIGlmIChzdHJzdHIodHJpcGxlLCBcInBvd2VycGNcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXCJwcGNcIikpXG4rXHRcdFx0dHJ1bmNfbGVuID0gNDtcbitcdFx0TExWTURpc3Bvc2VNZXNzYWdlKHRyaXBsZSk7XG4rXHR9XG4rXG4gXHRmb3IgKHBjID0gMCwgaSA9IDA7IGkgXHUwMDNjIGppdGVkX2Z1bmNzOyArK2kpIHtcbitcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCJmdW5jICMlZDpcXG5cIiwgaSk7XG4tXHRcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZnVuY19sZW5zW2ldKTtcbitcdFx0LypcbitcdFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xuK1x0XHQgKi9cbitcdFx0ZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSBcdTAwM2UgdHJ1bmNfbGVuID9cbitcdFx0XHRcdFx0ZnVuY19sZW5zW2ldIC0gdHJ1bmNfbGVuIDogMDtcbitcdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSArIHBjLCBkaXNhc21fbGVuKTtcbitcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCJcXG5cIik7XG4gXHRcdHBjICs9IGZ1bmNfbGVuc1tpXTtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCA5ZWViNWIwYjYzZDY5Ny4uY2RjMmEzZGUzMDU0MDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0xNTgsNiArMTU4LDcgQEBcbiAjZGVmaW5lIF9fYXJjaF9hcm02NFx0XHRfX2FyY2goXCJBUk02NFwiKVxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcdFx0X19hcmNoKFwiUklTQ1Y2NFwiKVxuICNkZWZpbmUgX19hcmNoX3MzOTB4XHRcdF9fYXJjaChcInMzOTB4XCIpXG4rI2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0XHRfX2FyY2goXCJQT1dFUlBDNjRcIilcbiAjZGVmaW5lIF9fY2Fwc191bnByaXYoY2FwcylcdF9fdGVzdF90YWcoXCJ0ZXN0X2NhcHNfdW5wcml2PVwiIEVYUEFORF9RVU9URShjYXBzKSlcbiAjZGVmaW5lIF9fbG9hZF9pZl9KSVRlZCgpXHRfX3Rlc3RfdGFnKFwibG9hZF9tb2RlPWppdGVkXCIpXG4gI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKVx0X190ZXN0X3RhZyhcImxvYWRfbW9kZT1ub19qaXRlZFwiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuaW5kZXggNDhmYTM0ZDI5NTlmNDYuLjA5ZDdlOTJjODQ5MTAwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbkBAIC05MSw2ICs5MSw3NSBAQCBfX2ppdGVkKFwiXHRwb3BxXHQlcmF4XCIpXG4gX19qaXRlZChcIlx0am1wXHR7ey4qfX1cIilcdFx0LyoganVtcCB0byB0YWlsIGNhbGwgdGd0ICAgKi9cbiBfX2ppdGVkKFwiTDA6XHRsZWF2ZVwiKVxuIF9faml0ZWQoXCJcdHt7KHJldHF8am1wXHQweCl9fVwiKVx0XHQvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovXG4rX19hcmNoX3Bvd2VycGM2NFxuKy8qIHByb2dyYW0gZW50cnkgZm9yIG1haW4oKSwgcmVndWxhciBmdW5jdGlvbiBwcm9sb2d1ZSAqL1xuK19faml0ZWQoXCJcdG5vcFwiKVxuK19faml0ZWQoXCIuLi5cIikgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxkIDIsIDE2KDEzKSBhYnNlbnQgd2l0aCBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xuK19faml0ZWQoXCJcdGxpIDksIDBcIilcbitfX2ppdGVkKFwiXHRzdGQgOSwgLTgoMSlcIilcbitfX2ppdGVkKFwiXHRtZmxyIDBcIilcbitfX2ppdGVkKFwiXHRzdGQgMCwgMTYoMSlcIilcbitfX2ppdGVkKFwiXHRzdGR1IDEsIHt7Lip9fSgxKVwiKVxuKy8qIGxvYWQgYWRkcmVzcyBhbmQgY2FsbCBzdWIoKSB2aWEgY291bnQgcmVnaXN0ZXIgKi9cbitfX2ppdGVkKFwiXHRsaXMgMTIsIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdHNsZGkgMTIsIDEyLCAzMlwiKVxuK19faml0ZWQoXCJcdG9yaXMgMTIsIDEyLCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRvcmkgMTIsIDEyLCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRtdGN0ciAxMlwiKVxuK19faml0ZWQoXCJcdGJjdHJsXCIpXG4rX19qaXRlZChcIlx0bXJcdDgsIDNcIilcbitfX2ppdGVkKFwiXHRsaSA4LCAwXCIpXG4rX19qaXRlZChcIlx0YWRkaSAxLCAxLCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsZCAwLCAxNigxKVwiKVxuK19faml0ZWQoXCJcdG10bHIgMFwiKVxuK19faml0ZWQoXCJcdG1yXHQzLCA4XCIpXG4rX19qaXRlZChcIlx0YmxyXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJmdW5jICMxXCIpXG4rLyogc3VicHJvZ3JhbSBlbnRyeSBmb3Igc3ViKCkgKi9cbitfX2ppdGVkKFwiXHRub3BcIilcbitfX2ppdGVkKFwiLi4uXCIpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi9cbisvKiB0YWlsIGNhbGwgcHJvbG9ndWUgZm9yIHN1YnByb2dyYW0gKi9cbitfX2ppdGVkKFwiXHRsZCAxMCwgMCgxKVwiKVxuK19faml0ZWQoXCJcdGxkIDksIC04KDEwKVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0OSwgMzNcIilcbitfX2ppdGVkKFwiXHRidFx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRhZGRpIDksIDEwLCAtOFwiKVxuK19faml0ZWQoXCJcdHN0ZCA5LCAtOCgxKVwiKVxuK19faml0ZWQoXCJcdGxpcyB7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdHNsZGkge3suKn19LCB7ey4qfX0sIDMyXCIpXG4rX19qaXRlZChcIlx0b3JpcyB7ey4qfX0sIHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0b3JpIHt7Lip9fSwge3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsaSB7ey4qfX0sIDBcIilcbitfX2ppdGVkKFwiXHRsd3ogOSwge3suKn19KHt7Lip9fSlcIilcbitfX2ppdGVkKFwiXHRzbHdpIHt7Lip9fSwge3suKn19LCAwXCIpXG4rX19qaXRlZChcIlx0Y21wbHdcdHt7Lip9fSwgOVwiKVxuK19faml0ZWQoXCJcdGJmXHQwLCB7ey4qfX1cIilcbisvKiBicGZfdGFpbF9jYWxsIGltcGxlbWVudGF0aW9uICovXG4rX19qaXRlZChcIlx0bGQgOSwgLTgoMSlcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDksIDMzXCIpXG4rX19qaXRlZChcIlx0YmZcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGQgOSwgMCg5KVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0OSwgMzNcIilcbitfX2ppdGVkKFwiXHRidFx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRhZGRpIDksIDksIDFcIilcbitfX2ppdGVkKFwiXHRtdWxsaSAxMCwge3suKn19LCA4XCIpXG4rX19qaXRlZChcIlx0YWRkIDEwLCAxMCwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGQgMTAsIHt7Lip9fSgxMClcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDEwLCAwXCIpXG4rX19qaXRlZChcIlx0YnRcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGQgMTAsIHt7Lip9fSgxMClcIilcbitfX2ppdGVkKFwiXHRhZGRpIDEwLCAxMCwge3suKn19XCIpICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4rX19qaXRlZChcIlx0bXRjdHIgMTBcIilcbitfX2ppdGVkKFwiXHRsZCAxMCwgLTgoMSlcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDEwLCAzM1wiKVxuK19faml0ZWQoXCJcdGJ0XHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGFkZGkgMTAsIDEsIC04XCIpXG4rX19qaXRlZChcIlx0c3RkIDksIDAoMTApXCIpXG4rX19qaXRlZChcIlx0YmN0clwiKVxuK19faml0ZWQoXCJcdG1yXHQzLCA4XCIpXG4rX19qaXRlZChcIlx0YmxyXCIpXG4rXG4gU0VDKFwidGNcIilcbiBfX25ha2VkIGludCBtYWluKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbmluZGV4IGFiZGI5ZTZlMzcxMzYyLi5kNTU4OTM1NWVkOWUwYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuQEAgLTM3Nyw2ICszNzcsNyBAQCBlbnVtIGFyY2gge1xuIFx0QVJDSF9BUk02NFx0PSAweDQsXG4gXHRBUkNIX1JJU0NWNjRcdD0gMHg4LFxuIFx0QVJDSF9TMzkwWFx0PSAweDEwLFxuK1x0QVJDSF9QT1dFUlBDNjRcdD0gMHgyMCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKVxuQEAgLTM4OSw2ICszOTAsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbiBcdHJldHVybiBBUkNIX1JJU0NWNjQ7XG4gI2VsaWYgZGVmaW5lZChfX3MzOTB4X18pXG4gXHRyZXR1cm4gQVJDSF9TMzkwWDtcbisjZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pXG4rXHRyZXR1cm4gQVJDSF9QT1dFUlBDNjQ7XG4gI2VuZGlmXG4gXHRyZXR1cm4gQVJDSF9VTktOT1dOO1xuIH1cbkBAIC01ODAsNiArNTgzLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdFx0XHRhcmNoID0gQVJDSF9SSVNDVjY0O1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJzMzkweFwiKSA9PSAwKSB7XG4gXHRcdFx0XHRhcmNoID0gQVJDSF9TMzkwWDtcbitcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwiUE9XRVJQQzY0XCIpID09IDApIHtcbitcdFx0XHRcdGFyY2ggPSBBUkNIX1BPV0VSUEM2NDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0UFJJTlRfRkFJTChcImJhZCBhcmNoIHNwZWM6ICclcydcXG5cIiwgdmFsKTtcbiBcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0MzoyMy4xNDk5MzEwMjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgyNzc3ODI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvd2VyUEMgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIEJQRiBKSVQgY29tcGlsZXIgc3BlY2lmaWNhbGx5IGZvciBQb3dlclBDLiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb2RlIGdlbmVyYXRpb24gcGFzc2VzIChhZGp1c3RpbmcgYENPREVHRU5fTUlOX1BBU1NFU2AgYW5kIGBDT0RFR0VOX01BWF9QQVNTRVNgKS4gQmV5b25kIHRoYXQsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIG1vZGlmeWluZyBhIHNlcmllcyBvZiBjb3JlIGZ1bmN0aW9uczogYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBhbmQgYGJwZl9qaXRfYnVpbGRfZXBpbG9ndWVgLCBhbG9uZyB3aXRoIHNvbWUgaW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnRzLiBUaGUgZmFjdCB0aGF0IGl0J3MgdG91Y2hpbmcgdGhlc2UgbG93LWxldmVsIGNvZGUgZ2VuZXJhdGlvbiBhc3BlY3RzIHN1Z2dlc3RzIGl0IGNvdWxkIGJlIGltcGFjdGZ1bCwgYW5kIG5lZWRzIGNhcmVmdWwgZXhhbWluYXRpb24uIEFsc28sIHRoZXkndmUgYWRkZWQgUG93ZXJQQzY0IHN1cHBvcnQgdG8gYSBjb3VwbGUgb2Ygc2VsZi10ZXN0IGZpbGVzLCB3aGljaCBpcyBnb29kLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGluIHRoZSBjb21tb24gZW52aXJvbm1lbnRzPyBTaW5jZSBpdCdzIFBvd2VyUEMsIGFuZCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzdXBwb3J0IGZvciBQb3dlclBDIChzcGVjaWZpY2FsbHkgcHBjNjRsZSksIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIHRlc3RpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gc3l6a2FsbGVyJ3MgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgc2VlIHRoYXQgbXkgZmlyc3QgaW1wcmVzc2lvbiBpcyBjb3JyZWN0LCB0aGUgcGF0Y2ggaXMgaW5kZWVkIGZ1enphYmxlLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNvZGUuIExldCBtZSBleHRyYWN0IHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkIGluIGBhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jYCwgYGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY2AsIGFuZCBgYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBoYXZlOlxuLSBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgXG4tIGBicGZfaml0X2VtaXRfZXhpdF9pbnNuYFxuLSBgYnBmX2ludF9qaXRfY29tcGlsZWBcbi0gYGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvYFxuLSBgYnBmX2FyY2hfdGV4dF9wb2tlYFxuLSBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWBcbi0gYGJwZl9qaXRfZW1pdF90YWlsX2NhbGxgXG4tIGBicGZfaml0X2J1aWxkX2JvZHlgXG4tIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYFxuXG5UaGlzIGlzIGFsbCBjb3JlIEJQRiBKSVQgY29tcGlsZXIgc3R1ZmYgZm9yIFBvd2VyUEMsIHNvIHRoZSBpbXBhY3QgaXMgaW4gdGhlIGNvcmUuIFRoZSBjb25maWd1cmF0aW9uIG5lZWRlZCBpcyBzaW1wbGUsIGBCUEZfSklUYCBhbmQgZWl0aGVyIGBQUEM2NGAgb3IgYFBQQzMyYCwgYnV0IEkgdGhpbmsganVzdCBzYXlpbmcgYEJQRl9KSVRgIGFuZCBgUFBDNjRgIGNvdmVycyBpdCBmb3IgZnV6emluZyBwdXJwb3Nlcy4gSG93ZXZlciwgSSBzaG91bGQgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgdXNlZCBieSBsb29raW5nIGF0IHRoZSBgI2lmZGVmYHMuIExldCBtZSBsb29rIGF0IGBhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucywgYW5kIEkgc2VlIGBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgYmVpbmcgdXNlZCBpbiBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkwOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjM0Ljk3NzcxMTM3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTkzMDExNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz0zNT1hc20gKFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0zOS1cXFwiZHVtbXlfdHJhbXA6XFx0XFx0XFx0XFx0XFx0O1xcXCJcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjQwOiNpZmRlZiBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNDEtXFxcIlxcdGJsclxcdFxcdFxcdFxcdFxcdDtcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTUyPXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNjYtXFx0ICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo2NzpcXHQgKiBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgb3IgMTAgaW5zdHJ1Y3Rpb25zICh3aXRob3V0KVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNjgtXFx0ICogYmVmb3JlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQuIEVtaXQgYSBOT1AgaWYgdGhlIGFkZHJlc3Mgb2ZcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzYtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo3NzpcXHRzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwO1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzgtXFx0aWYgKCFpbWFnZSB8fCAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylmaW1hZ2UgKyBjdHgtXFx1MDAzZWlkeCo0ICsgc3R1Yl9zeiwgU1pMKSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtODUtXFx0ICpcXHRbYnxibF1cXHR0cmFtcFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6ODY6XFx0ICpcXHRtdGxyXFx0cjAgLy8gb25seSB3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy04Ny1cXHQgKlxcdGJcXHRicGZfZnVuYyArIDRcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtOTEtXFx0RU1JVChQUENfUkFXX05PUCgpKTtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjkyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSlcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTkzLVxcdFxcdEVNSVQoUFBDX1JBV19NVExSKF9SMCkpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz04NTM9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTk3Mi1cXHQvKiBPcHRpb25hbCBzYXZlIGFyZWEgZm9yIGFjdHVhbCBMUiBpbiBjYXNlIG9mIG9vbCBmdHJhY2UgKi9cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjk3MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTk3NC1cXHRcXHRhbHRfbHJfb2ZmID0gYnBmX2ZyYW1lX3NpemU7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTctXFx0RU1JVChQUENfUkFXX01GTFIoX1IzKSk7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMDE4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSlcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTktXFx0XFx0RU1JVChQUENfUkFXX1NUTChfUjMsIF9SMSwgYWx0X2xyX29mZikpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDI0LVxcdCAqIERlcml2ZSBJUCBhZGRyZXNzIG9mIHRoZSB0cmFjZWQgZnVuY3Rpb24uXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMDI1OlxcdCAqIEluIGNhc2Ugb2YgQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUgb3IgQlBGIHByb2dyYW0sIExSIHBvaW50cyB0byB0aGUgaW5zdHJ1Y3Rpb25cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjYtXFx0ICogYWZ0ZXIgdGhlICdibCcgaW5zdHJ1Y3Rpb24gaW4gdGhlIE9PTCBzdHViLiBSZWZlciB0byBmdHJhY2VfaW5pdF9vb2xfc3R1YigpIGFuZFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDM2LVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTAzNzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgfHwgZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JUF9BUkcpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzgtXFx0XFx0RU1JVChQUENfUkFXX0xXWihfUjQsIF9SMywgNCkpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDQ2LVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTA0NzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDgtXFx0XFx0LyogRmFrZSBvdXIgTFIgZm9yIEJQRl9UUkFNUF9GX0NBTExfT1JJRyBjYXNlICovXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyMDQtXFx0fSBlbHNlIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEyMDU6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpKSB7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMjA2LVxcdFxcdFxcdEVNSVQoUFBDX1JBV19MTChfUjAsIF9SMSwgYWx0X2xyX29mZikpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz0xMjk4PXN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEzMTItICpcXHRbYnxibF1cXHRcXHUwMDNjYnBmX3Byb2dcXHUwMDNlL1xcdTAwM2Nsb25nX2JyYW5jaF9zdHViXFx1MDAzZVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTMxMzogKlxcdG10bHJcXHRyMCAvLyBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSBvbmx5XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMzE0LSAqXFx0YlxcdGJwZl9mdW5jICsgNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0MzozNS40NzcwMTg3OTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDk4NTk4Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBQYXRjaCBmb3IgUG93ZXJQQyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBCUEYgSklUIGltcGxlbWVudGF0aW9uIGZvciBQb3dlclBDLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdGhlIGBmZW50cnlgIHN0dWJzLCB0aGUgZXBpbG9ndWUsIGFuZCB0aGUgZXhpdCBpbnN0cnVjdGlvbnMuIEludGVyZXN0aW5nLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyB0aGVzZSBhcmUgYmVpbmcgbW9kaWZpZWQsIGVzcGVjaWFsbHkgd2l0aGluIHRoYXQgSklUIGNvbnRleHQuIEl0J3MgYWxzbyBtYWtpbmcgYWRqdXN0bWVudHMgdG8gdGhlIG51bWJlciBvZiBwYXNzZXMgdGhlIGNvZGUgZ2VuZXJhdGlvbiBnb2VzIHRocm91Z2gsIHdoaWNoIGxpa2VseSBpbXBhY3RzIHBlcmZvcm1hbmNlIG9yIGNvZGUgcXVhbGl0eS5cblxuVGhlIGtleSBjb25maWdzIGF0IHBsYXkgaGVyZSBhcmUgY2xlYXJseSBgQlBGX0pJVGAgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYFBQQzY0YCBvciBgUFBDMzJgLiBPYnZpb3VzLiBCdXQgdGhlcmUncyBhbHNvIGBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgbWVudGlvbmVkLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGlzIGNvbmZpZyBhY3R1YWxseSAqZXhpc3RzKiBhbmQgaXMgdmFsaWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFBvd2VyUEMga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0cyByZWxldmFuY2UgaGVyZSBzdWdnZXN0cyBhIHJlbGF0aW9uc2hpcCB3aXRoIGZ1bmN0aW9uIHRyYWNpbmcgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgSklUJ2QgQlBGIGNvZGUsIHdoaWNoIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIGNoZWNrIHRoYXQgY29uZmlnIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjQyLjU3NTYxOTM1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyNjM4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvS2NvbmZpZz01Njg9Y29uZmlnIEFSQ0hfVVNJTkdfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01NzQtXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6NTc1OmNvbmZpZyBQUENfRlRSQUNFX09VVF9PRl9MSU5FXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTc2LVxcdGRlZl9ib29sIFBQQzY0IFxcdTAwMjZcXHUwMDI2IEFSQ0hfVVNJTkdfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01NzgtXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6NTc5OmNvbmZpZyBQUENfRlRSQUNFX09VVF9PRl9MSU5FX05VTV9SRVNFUlZFXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTgwLVxcdGludCBcXFwiTnVtYmVyIG9mIGZ0cmFjZSBvdXQtb2YtbGluZSBzdHVicyB0byByZXNlcnZlIHdpdGhpbiAudGV4dFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6NDM6NDIuNzQ5ODg5ODY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0ODU4NjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipFdmFsdWF0aW5nIHRoZSBgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgaXMgYSBgZGVmX2Jvb2xgLCB3aGljaCBtZWFucyBpdCdzIG5vdCBhIGRpcmVjdCBvcHRpb24geW91IGNhbiAqc2VsZWN0Ki4gSXRzIHZhbHVlIGlzICpkZWZpbmVkKiBieSBzb21ldGhpbmcgZWxzZTogc3BlY2lmaWNhbGx5LCB0aGUgY29uanVuY3Rpb24gb2YgYFBQQzY0YCAqYW5kKiBgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllgLiBTbywgaXQncyBhIHNvcnQgb2YgJ2hlbHBlcicgb3IgZGVyaXZlZCBvcHRpb24uIFlvdSBjYW4ndCB0b2dnbGUgdGhpcyBvbmUgb24gb3Igb2ZmIGRpcmVjdGx5IGluIHlvdXIgY29uZmlnLlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBiaXQgaGVyZSBpcyBgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgY29udHJvbCBsaWVzLiBJZiB0aGF0IGZsYWcgaXMgc2V0LCBhbmQgd2UncmUgb24gYSBQUEM2NCBhcmNoaXRlY3R1cmUsICp0aGVuKiBgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgaXMgYXV0b21hdGljYWxseSBlbmFibGVkLiBJdCdzIGEgZGVwZW5kZW5jeS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIGBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWWAgb3B0aW9uIHNvIHdlIGNhbiBrbm93IGlmIGZ0cmFjZSBzdXBwb3J0IGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6NDM6NDYuODk4NDc4ODI4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDk4MDI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvS2NvbmZpZz01NjM9Y29uZmlnIE1QUk9GSUxFX0tFUk5FTFxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTY3LVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjU2ODpjb25maWcgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01NjktXFx0ZGVwZW5kcyBvbiBGVU5DVElPTl9UUkFDRVIgXFx1MDAyNlxcdTAwMjYgKFBQQzMyIHx8IFBQQzY0X0VMRl9BQklfVjIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjQ3LjAwOTQ5NzkwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzg0NDEwOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgY29kZSBtb2RpZmljYXRpb24uIEZpcnN0LCBgRlVOQ1RJT05fVFJBQ0VSYCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGxldCdzIHN0YXJ0IHdpdGggdGhhdC4gTm93LCBJIHNlZSBgQlBGX0pJVGAgaXMgZGVmaW5pdGVseSBuZWVkZWQsIHdoaWNoIG1ha2VzIHNlbnNlIHNpbmNlIGl0J3MgdGhlIEJQRiBKSVQgY29tcGlsZXIuIE5hdHVyYWxseSwgYEJQRl9KSVRgIHJlcXVpcmVzIGBCUEZfU1lTQ0FMTGAgYXMgd2VsbC4gU28sIHRoZSBiYXNlIHJlcXVpcmVtZW50cyBhcmUgYEJQRl9KSVRgIGFuZCBgRlVOQ1RJT05fVFJBQ0VSYC5cblxuVGhlIHByb21wdCBpcyBzcGVjaWZpYzogSSBzaG91bGQgYXZvaWQgbGlzdGluZyB0b28gZ2VuZXJpYyBjb25maWdzLiBPa2F5LCBgQlBGX0pJVGAgKmlzKiBzcGVjaWZpYyB0byB0aGUgSklUIGFzcGVjdCwgZXZlbiBpZiBCUEYgaXMgbW9yZSBnZW5lcmFsLiBgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgaXMgc3BlY2lmaWMgYnV0IG5vdCBkaXJlY3RseSBzZWxlY3RhYmxlLiBOb3csIGxldCBtZSBjaGVjayB0aGUgZnVuY3Rpb25zIGludm9sdmVkIHRvIG5hcnJvdyB0aGlzIGRvd24uIEkgc2VlIGNhbGxzIHRvIGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2AsIHdoaWNoIGluIHR1cm4sIGlzIGNhbGxlZCBmcm9tIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYC4gQWxzbywgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gIGlzIGNhbGxlZCBmcm9tIGBicGZfaml0X2J1aWxkX2JvZHlgLlxuXG5MZXQncyBncmFiIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYDogYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYCwgYGJwZl9qaXRfYnVpbGRfYm9keWAsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCwgYGJwZl9qaXRfZW1pdF90YWlsX2NhbGxgLCBgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm9gLCBhbmQgYGJwZl9hcmNoX3RleHRfcG9rZWAuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIHN5bWJvbHMgYXJlIG5vdCBpbiB0aGUgaG90IHBhdGguIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB1c2VkIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkIGFuZCBjb21waWxhdGlvbi4gR29vZCwgbm90IGhvdCBwYXRoLiBUaGUgYGJwZl9qaXRfKmAgZnVuY3Rpb25zIGFyZSBhbGwgcGFydCBvZiB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3M7IHRoYXQgbWFrZXMgc2Vuc2UuIGBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mb2AgaXMgZm9yIHRyYW1wb2xpbmUgc2V0dXAuIGBicGZfYXJjaF90ZXh0X3Bva2VgIGlzIHVzZWQgZm9yIHBhdGNoaW5nIEJQRiBwcm9ncmFtcy4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LlxuXG5Ob3csIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWdzPyBMb29rcyBsaWtlIGBDT05GSUdfUFBDNjRgIGFuZCBgQ09ORklHX1BQQzMyYCBhcmUgdXNlZCwgYWxvbmcgd2l0aCBgQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkVgLiBPa2F5LCB3YWl0LiBUaGVzZSBhcmUgYXJjaGl0ZWN0dXJlcywgbm90IHNvbWV0aGluZyBJIGNhbiBlbmFibGUgb24geDg2IGRpcmVjdGx5LiBUaGUgY29uZmlncyBJIHByb3ZpZGUgd2lsbCBiZSBhZGRlZCB0byB0aGUga2VybmVsIGNvbmZpZy5cblxuU28sIGluIHN1bW1hcnksIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb2RlLCBJIGNhbiBjb25maWRlbnRseSBsaXN0IGBCUEZfSklUYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAuIExldCBtZSBkb3VibGUtY2hlY2sgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gIGlzIGluZGVlZCBpbiB0aGUgZXhwZWN0ZWQgZmlsZSBhbmQgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0Mzo1Ny43OTM5MTE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUxMzA5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9lbWl0X2V4aXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaD0yMzI9dm9pZCBicGZfaml0X3JlYWxsb2NfcmVncyhzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oOjIzMzppbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZyxcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaC0yMzQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bG9uZyBleGl0X2FkZHIpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz01Mj12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyNy1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEyODppbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTI5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYz0zMjI9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jLTExNTEtXFx0XFx0XFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTE1MjpcXHRcXHRcXHRcXHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jLTExNTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTU2PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzI4LVxcdFxcdFxcdGlmIChpICE9IGZsZW4gLSAxKSB7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjE3Mjk6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLCBjdHgsXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTE3MzAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjU4LjI4OTA1MDEyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzc4MDQ3MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG93ZXJQQyBCUEYgSklUIENvbXBpbGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzIGRpZ2dpbmcgaW50byB0aGUgQlBGIEpJVCBjb21waWxlciBzcGVjaWZpY2FsbHkgZm9yIFBvd2VyUEMuIEl0J3Mgbm90IGp1c3QgYSBzdXBlcmZpY2lhbCB0d2VhazsgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3RpbmcgaG93IHRoZSBjb2RlIGlzIGdlbmVyYXRlZC4gV2UncmUgdGFsa2luZyBhYm91dCBhZGRyZXNzaW5nIGFsaWdubWVudCBpc3N1ZXMgYW5kIG1vZGlmeWluZyB0aGUgY29kZSBnZW5lcmF0aW9uIHBhc3NlcyB0aGVtc2VsdmVzIOKAkyB0aGUgdmVyeSBjb3JlIG9mIGhvdyBCUEYgcHJvZ3JhbXMgdHJhbnNsYXRlIGludG8gUG93ZXJQQyBtYWNoaW5lIGNvZGUuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIHRoYXQncyByZWFjaGFibGUgYW5kIHVzZWQgd2hlbiBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBvbiBQb3dlclBDLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIEdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgYnVncyBvciBldmVuIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSBpcyBzaWduaWZpY2FudC4gV2UgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBjaGFuZ2VzIGNvcnJlY3RseSBoYW5kbGUgdmFyaW91cyBCUEYgcHJvZ3JhbSBzdHJ1Y3R1cmVzIGFuZCBpbnB1dHMgYW5kIHByZXZlbnQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgY3Jhc2hlcy5cblxuSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGVmZm9ydHMgb24uIFdlIGhhdmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHdoaWNoIGlzIHRoZSBjZW50cmFsIGNvbXBpbGUgZnVuY3Rpb24uIFRoZW4gdGhlcmUgaXMgYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWAsIGBicGZfaml0X2J1aWxkX2JvZHlgLCBhbmQgYGJwZl9qaXRfYnVpbGRfcHJvbG9ndWVgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBidWlsZGluZyBibG9ja3MgaW52b2x2ZWQgaW4gY29uc3RydWN0aW5nIGFuZCBmaW5hbGl6aW5nIHRoZSBKSVQnZCBjb2RlLiBGaW5hbGx5LCB0aGVyZSdzIGBicGZfaml0X2VtaXRfdGFpbF9jYWxsYCwgYGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvYCwgYW5kIGBicGZfYXJjaF90ZXh0X3Bva2VgLiBJdCdzIGdvaW5nIHRvIGJlIGVzc2VudGlhbCB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zIGR1cmluZyBmdXp6aW5nLlxuXG5JJ20gY29uZmlkZW50IHRoYXQgZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgd2l0aCBgQlBGX0pJVGAgYW5kIGBGVU5DVElPTl9UUkFDRVJgIGVuYWJsZWQgd2lsbCBiZSBjcnVjaWFsIHRvIGVuc3VyZSB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIGNvcnJlY3RuZXNzIG9mIEJQRiBvbiBQb3dlclBDLiBBbHJpZ2h0LCBJJ2xsIGdvIGFoZWFkIGFuZCBzZXQgdGhlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4MiwiT3V0cHV0VG9rZW5zIjoyMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6NDQ6MDYuNjY3MDk5OTM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzE3Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic1wiLFxuICAgIFwiYnBmX2ppdF9lbWl0X2V4aXRfaW5zblwiLFxuICAgIFwiYnBmX2ppdF9idWlsZF9lcGlsb2d1ZVwiLFxuICAgIFwiYnBmX2ppdF9idWlsZF9ib2R5XCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X2VtaXRfdGFpbF9jYWxsXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mb1wiLFxuICAgIFwiYnBmX2FyY2hfdGV4dF9wb2tlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic1wiLFxuICAgIFwiYnBmX2ppdF9lbWl0X2V4aXRfaW5zblwiLFxuICAgIFwiYnBmX2ppdF9idWlsZF9lcGlsb2d1ZVwiLFxuICAgIFwiYnBmX2ppdF9idWlsZF9ib2R5XCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X2VtaXRfdGFpbF9jYWxsXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mb1wiLFxuICAgIFwiYnBmX2FyY2hfdGV4dF9wb2tlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7jlsb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 19:31:40 +0000 UTC FinishedAt: 2026-06-23 19:44:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "f32a375eccb7b27bccc57dee45befff6e3b3d4b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "FUNCTION_TRACER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "f32a375eccb7b27bccc57dee45befff6e3b3d4b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "FUNCTION_TRACER" ], "series_id": "5263f814-3b1b-4de1-9b93-e1c8d595d117" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_jit_build_fentry_stubs", "bpf_jit_emit_exit_insn", "bpf_jit_build_epilogue", "bpf_jit_build_body", "bpf_jit_build_prologue", "bpf_jit_emit_tail_call", "bpf_trampoline_setup_tail_call_info", "bpf_arch_text_poke" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfZXhpdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfZXBpbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9ib2R5JiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfcHJvbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X3RhaWxfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyYjMzQ7LAogICAgJiMzNDticGZfYXJjaF90ZXh0X3Bva2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVlNmE1NjQzYjliYjc1M2FlYTc1MjFlZjUyZTg0NzlkNGYyMDc3N2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxOTo0MzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaCBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG5pbmRleCBmMzJkZTg3MDRkNGQ5Ni4uNGRhOGJkZTkyZTFlZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmhcbkBAIC0xNCw2ICYjNDM7MTQsMTMgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHBjLW9wY29kZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcdTAwM2VcbiBcbiYjNDM7LypcbiYjNDM7ICogV2UgbmVlZCBhdCBsZWFzdCAyIHBhc3NlcyBmb3IgcHJvcGVyIGNvZGUgZ2VuZXJhdGlvbiwgYW5kIG1heSBuZWVkXG4mIzQzOyAqIGFkZGl0aW9uYWwgcGFzc2VzIGlmIGNvZGUgc2l6ZSBjaGFuZ2VzIGJldHdlZW4gcGFzc2VzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBDT0RFR0VOX01JTl9QQVNTRVMgICAgMlxuJiM0MzsjZGVmaW5lIENPREVHRU5fTUFYX1BBU1NFUyAgICAzXG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxuICNkZWZpbmUgRlVOQ1RJT05fREVTQ1JfU0laRVx0MjRcbiAjZWxzZVxuQEAgLTE4OCw2ICYjNDM7MTk1LDEyIEBAIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xuIFxuICNkZWZpbmUgYnBmX3RvX3BwYyhyKVx0KGN0eC1cdTAwM2ViMnBbcl0pXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfUFBDNjRcbiYjNDM7I2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTFdJKGEsIGkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWZkZWYgQ09ORklHX1BQQzMyXG4gI2RlZmluZSBCUEZfRklYVVBfTEVOXHQzIC8qIFRocmVlIGluc3RydWN0aW9ucyA9XHUwMDNlIDEyIGJ5dGVzICovXG4gI2Vsc2VcbkBAIC0yMTQsMTAgJiM0MzsyMjcsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9mdW5jX2NhbGxfcmVsKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpcbiBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4gXHRcdCAgICAgICB1MzIgKmFkZHJzLCBpbnQgcGFzcywgYm9vbCBleHRyYV9wYXNzKTtcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4mIzQzO3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4taW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpO1xuJiM0MztpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRsb25nIGV4aXRfYWRkcik7XG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcbiBcdFx0XHRcdFx0XHRcdFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcbiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggNjM1MWExODdjYTYxZTIuLjQ2YmJmYjZiZTYxMzQwIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTQ5LDExICYjNDM7NDksMzcgQEAgYXNtIChcbiBcJiMzNDtcdC5wb3BzZWN0aW9uXHRcdFx0XHQ7XCYjMzQ7XG4gKTtcbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIHtcbiBcdGludCBvb2xfc3R1Yl9pZHgsIGxvbmdfYnJhbmNoX3N0dWJfaWR4O1xuJiM0MztcdGludCBzdHViX3N6O1xuIFxuIFx0LypcbiYjNDM7XHQgKiBUaGUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpcyBwbGFjZWQgYXQgYm90dG9tIG9mIExvbmcgYnJhbmNoIHN0dWIuXG4mIzQzO1x0ICogSW4gdGhlIGZpbmFsIHBhc3MsIGFsaWduIHRoZSBtaXMtYWxpZ25lZCBkdW1teV90cmFtcF9hZGRyIGZpZWxkXG4mIzQzO1x0ICogaW4gdGhlIGZpbWFnZS4gVGhlIGFsaWdubWVudCBOT1AgbXVzdCBhcHBlYXIgYmVmb3JlIE9PTCBzdHViLFxuJiM0MztcdCAqIHRvIG1ha2Ugb29sX3N0dWJfaWR4IFx1MDAyNiBsb25nX2JyYW5jaF9zdHViX2lkeCBjb25zdGFudCBmcm9tIGVuZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGR1bW15X3RyYW1wX2FkZHIgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZCBmb3IgbG9hZC1yZWdpc3RlclxuJiM0MztcdCAqIGNvbXBhdGliaWxpdHkuIFRoZSBmaW1hZ2UgY2FuIGJlIG5vbiA4LWJ5dGUgYWxpZ25lZCwgc28gZmluYWxcbiYjNDM7XHQgKiBhbGlnbm1lbnQgZGVwZW5kcyBvbiBzdGFydCBvZiBmaW1hZ2UgYW5kIHRoZSBzdHViJiMzOTtzIGluc3RydWN0aW9uXG4mIzQzO1x0ICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoXG4mIzQzO1x0ICogQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpIG9yIDEwIGluc3RydWN0aW9ucyAod2l0aG91dClcbiYjNDM7XHQgKiBiZWZvcmUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZC4gRW1pdCBhIE5PUCBpZiB0aGUgYWRkcmVzcyBvZlxuJiM0MztcdCAqIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJbiBwYXNzPTAgd2hlbiBpbWFnZT09TlVMTCwgY29uc2VydmF0aXZlbHkgYWNjb3VudCBmb3Igc3BhY2VcbiYjNDM7XHQgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHNcbiYjNDM7XHQgKiBlbWl0dGluZyBhbGlnbm1lbnQgTk9QLCB0aGUgaW1hZ2UgYnVmZmVyIGhhdmUgNCBzcGFyZSBieXRlcyBhbmRcbiYjNDM7XHQgKiBqaXRlZF9sZW4gc2lnbmlmaWVzIGNvcnJlY3QgcHJvZ3JhbSBzaXplLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwO1xuJiM0MztcdGlmICghaW1hZ2UgfHwgIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZmltYWdlICYjNDM7IGN0eC1cdTAwM2VpZHgqNCAmIzQzOyBzdHViX3N6LCBTWkwpKVxuJiM0MztcdFx0RU1JVChQUENfUkFXX05PUCgpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiAgICAgIG5vcCAgICAgLy8gb3B0aW9uYWwsIGZvciBhbGlnbm1lbnQgb2YgZHVtbXlfdHJhbXBfYWRkclxuIFx0ICogT3V0LW9mLWxpbmUgc3R1YjpcbiBcdCAqXHRtZmxyXHRyMFxuIFx0ICpcdFtifGJsXVx0dHJhbXBcbkBAIC03MCw0NCAmIzQzOzk2LDQ2IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0LypcbiBcdCAqIExvbmcgYnJhbmNoIHN0dWI6XG4tXHQgKlx0LmxvbmdcdFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcdTAwM2VcbiBcdCAqXHRtZmxyXHRyMTFcbiBcdCAqXHRiY2xcdDIwLDMxLCQmIzQzOzRcbi1cdCAqXHRtZmxyXHRyMTJcbi1cdCAqXHRsZFx0cjEyLCAtOC1TWkwocjEyKVxuJiM0MztcdCAqXHRtZmxyXHRyMTJcdC8vIGxyL3IxMiBzdG9yZXMgcGMgb2YgY3VycmVudCh0aGlzKSBpbnN0LlxuJiM0MztcdCAqXHRsZFx0cjEyLCAyMChyMTIpIC8vIG9mZnNldChkdW1teV90cmFtcF9hZGRyKSBmcm9tIHByZXYgaW5zdC4gaXMgMjBcbiBcdCAqXHRtdGN0clx0cjEyXG4tXHQgKlx0bXRsclx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuJiM0MztcdCAqXHRtdGxyXHRyMTFcdC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuIFx0ICpcdGJjdHJcbiYjNDM7XHQgKlx0LmxvbmdcdFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcdTAwM2UgIC8vIDgtYnl0ZSBhbGlnbmVkXG4gXHQgKi9cbi1cdGlmIChpbWFnZSlcbi1cdFx0KigodW5zaWduZWQgbG9uZyAqKVx1MDAyNmltYWdlW2N0eC1cdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xuLVx0Y3R4LVx1MDAzZWlkeCAmIzQzOz0gU1pMIC8gNDtcbiBcdGxvbmdfYnJhbmNoX3N0dWJfaWR4ID0gY3R4LVx1MDAzZWlkeDtcbiBcdEVNSVQoUFBDX1JBV19NRkxSKF9SMTEpKTtcbiBcdEVNSVQoUFBDX1JBV19CQ0w0KCkpO1xuIFx0RU1JVChQUENfUkFXX01GTFIoX1IxMikpO1xuLVx0RU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIC04LVNaTCkpO1xuJiM0MztcdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAyMCkpO1xuIFx0RU1JVChQUENfUkFXX01UQ1RSKF9SMTIpKTtcbiBcdEVNSVQoUFBDX1JBV19NVExSKF9SMTEpKTtcbiBcdEVNSVQoUFBDX1JBV19CQ1RSKCkpO1xuIFxuJiM0MztcdGlmIChpbWFnZSlcbiYjNDM7XHRcdCooKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZpbWFnZVtjdHgtXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWlkeCAmIzQzOz0gU1pMIC8gNDtcbiYjNDM7XG4gXHRpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHtcbiBcdFx0YnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtXHUwMDNlaWR4IC0gb29sX3N0dWJfaWR4KSAqIDQ7XG4gXHRcdGJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiA9IChjdHgtXHUwMDNlaWR4IC0gbG9uZ19icmFuY2hfc3R1Yl9pZHgpICogNDtcbiBcdH1cbiB9XG4gXG4taW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXG4mIzQzO2ludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4mIzQzO1x0XHRcdFx0XHRcdFx0aW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxuIHtcbi1cdGlmICghZXhpdF9hZGRyIHx8IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGN0eC1cdTAwM2VpZHggKiA0KSkpIHtcbiYjNDM7XHRpZiAoZXhpdF9hZGRyIFx1MDAyNlx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4gXHRcdFBQQ19KTVAoZXhpdF9hZGRyKTtcbi1cdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpIHtcbi1cdFx0aWYgKFdBUk5fT04oIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoKGxvbmcpY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgLSAoY3R4LVx1MDAzZWlkeCAqIDQpKSkpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgXHUwMDI2XHUwMDI2IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoXG4mIzQzO1x0XHRcdChsb25nKShjdHgtXHUwMDNlYWx0X2V4aXRfYWRkcikgLSAobG9uZykoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuIFx0XHRQUENfSk1QKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyID0gY3R4LVx1MDAzZWlkeCAqIDQ7XG4tXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XG4mIzQzO1x0XHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGltYWdlLCBmaW1hZ2UsIGN0eCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yNzQsNiAmIzQzOzMwMiw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHQgKi9cbiBcdGlmIChjZ2N0eC5zZWVuIFx1MDAyNiBTRUVOX1RBSUxDQUxMIHx8ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWNnY3R4LmlkeCAqIDQpKSB7XG4gXHRcdGNnY3R4LmlkeCA9IDA7XG4mIzQzO1x0XHRjZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDtcbiBcdFx0aWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgTlVMTCwgTlVMTCwgXHUwMDI2Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpXG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuQEAgLTI4Niw3ICYjNDM7MzE1LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdCAqL1xuIFx0YnBmX2ppdF9idWlsZF9wcm9sb2d1ZShOVUxMLCBcdTAwMjZjZ2N0eCk7XG4gXHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbi1cdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgXHUwMDI2Y2djdHgpO1xuJiM0MztcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgXHUwMDI2Y2djdHgpO1xuIFxuIFx0Zml4dXBfbGVuID0gZnAtXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMgKiBCUEZfRklYVVBfTEVOICogNDtcbiBcdGV4dGFibGVfbGVuID0gZnAtXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSk7XG5AQCAtMzA2LDggJiM0MzszMzUsMTAgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdGNvZGVfYmFzZSA9ICh1MzIgKikoaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXHRmY29kZV9iYXNlID0gKHUzMiAqKShmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4tXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xuLVx0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2MgMzsgcGFzcyYjNDM7JiM0MzspIHtcbiYjNDM7XHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiYjNDM7LCBsb29wIHVudGlsIHByb2dyYW0gc2l6ZSBjb252ZXJnZXMuICovXG4mIzQzO1x0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2M9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuO1xuJiM0MztcbiBcdFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFx1MDAyNiBlcGlsb2d1ZSBmb3IgcmVhbC4gKi9cbiBcdFx0Y2djdHguaWR4ID0gMDtcbiBcdFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XG5AQCAtMzE4LDExICYjNDM7MzQ5LDI2IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHRcdFx0YnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7XG4gXHRcdFx0Z290byBvdXRfZXJyO1xuIFx0XHR9XG4tXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4mIzQzO1x0XHRhZGRyc1tmcC1cdTAwM2VsZW5dID0gY2djdHguaWR4ICogNDtcbiYjNDM7XHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4mIzQzO1xuJiM0MztcdFx0cHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7XG4gXG4gXHRcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbiBcdFx0XHRwcl9pbmZvKFwmIzM0O1Bhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcblwmIzM0OywgcGFzcyxcbi1cdFx0XHRcdHByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pO1xuJiM0MztcdFx0XHRcdHByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pO1xuJiM0MztcbiYjNDM7XHRcdC8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovXG4mIzQzO1x0XHRpZiAocGFzcyBcdTAwM2U9IENPREVHRU5fTUlOX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiA9PSBwcmV2X3Byb2dsZW4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwYXNzID09IENPREVHRU5fTUFYX1BBU1NFUyBcdTAwMjZcdTAwMjYgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O0JQRiBKSVQ6IFByb2dyYW0gZGlkIG5vdCBjb252ZXJnZSBhZnRlciAlZCBwYXNzZXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRDT0RFR0VOX01BWF9QQVNTRVMpO1xuJiM0MztcdFx0XHRicGZfYXJjaF90ZXh0X2NvcHkoXHUwMDI2Zmhkci1cdTAwM2VzaXplLCBcdTAwMjZoZHItXHUwMDNlc2l6ZSwgc2l6ZW9mKGhkci1cdTAwM2VzaXplKSk7XG4mIzQzO1x0XHRcdGJwZl9qaXRfYmluYXJ5X3BhY2tfZnJlZShmaGRyLCBoZHIpO1xuJiM0MztcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG5AQCAtMzU3LDcgJiM0Mzs0MDMsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRcdFx0KHZvaWQgKilmaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4gb3V0X2FkZHJzOlxuLVx0XHRpZiAoIWltYWdlIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuJiM0MztcdFx0aWYgKCFmcC1cdTAwM2VqaXRlZCBcdTAwMjZcdTAwMjYgcHJpdl9zdGFja19wdHIpIHtcbiBcdFx0XHRmcC1cdTAwM2VhdXgtXHUwMDNlcHJpdl9zdGFja19wdHIgPSBOVUxMO1xuIFx0XHRcdGZyZWVfcGVyY3B1KHByaXZfc3RhY2tfcHRyKTtcbiBcdFx0fVxuQEAgLTczNCw3ICYjNDM7NzgwLDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm8odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGVcbiBcdFx0ICogU2V0dGluZyB0aGUgdGFpbF9jYWxsX2luZm8gaW4gdHJhbXBvbGluZSYjMzk7cyBmcmFtZVxuIFx0XHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cbiBcdFx0ICovXG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdFx0RU1JVChQUENfUkFXX0NNUExMSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXHRcdEVNSVQoUFBDX1JBV19BRERJKF9SMywgX1I0LCAtQlBGX1BQQ19UQUlMQ0FMTCkpO1xuIFxuQEAgLTEyNjAsNiAmIzQzOzEzMDYsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKVxuICAqIGJwZl9mdW5jOlxuICAqXHRbbm9wfGJdXHRvb2xfc3R1YlxuICAqIDIuIE91dC1vZi1saW5lIHN0dWI6XG4mIzQzOyAqXHRub3BcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XG4gICogb29sX3N0dWI6XG4gICpcdG1mbHJcdHIwXG4gICpcdFtifGJsXVx0XHUwMDNjYnBmX3Byb2dcdTAwM2UvXHUwMDNjbG9uZ19icmFuY2hfc3R1Ylx1MDAzZVxuQEAgLTEyNjcsMTQgJiM0MzsxMzE0LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXG4gICpcdGJcdGJwZl9mdW5jICYjNDM7IDRcbiAgKiAzLiBMb25nIGJyYW5jaCBzdHViOlxuICAqIGxvbmdfYnJhbmNoX3N0dWI6XG4tICpcdC5sb25nXHRcdTAwM2NicmFuY2hfYWRkclx1MDAzZS9cdTAwM2NkdW1teV90cmFtcFx1MDAzZVxuICAqXHRtZmxyXHRyMTFcbiAgKlx0YmNsXHQyMCwzMSwkJiM0Mzs0XG4gICpcdG1mbHJcdHIxMlxuLSAqXHRsZFx0cjEyLCAtMTYocjEyKVxuJiM0MzsgKlx0bGRcdHIxMiwgMjAocjEyKVxuICAqXHRtdGN0clx0cjEyXG4gICpcdG10bHJcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiAgKlx0YmN0clxuJiM0MzsgKlx0LmxvbmdcdFx1MDAzY2JyYW5jaF9hZGRyXHUwMDNlL1x1MDAzY2R1bW15X3RyYW1wXHUwMDNlXG4gICpcbiAgKiBkdW1teV90cmFtcCBpcyB1c2VkIHRvIHJlZHVjZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzLlxuICAqXG5AQCAtMTM3NiwxMCAmIzQzOzE0MjMsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsXG4gXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XG4gXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXG4gXHQgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGR1bW15X3RyYW1wX2FkZHIgbW92ZWQgdG8gYm90dG9tIG9mIGxvbmcgYnJhbmNoIHN0dWIuXG4gXHQgKi9cbiBcdGlmICgobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSB8fFxuIFx0ICAgIChvbGRfYWRkciBcdTAwMjZcdTAwMjYgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2Uob2xkX2FkZHIgLSBpcCkpKVxuLVx0XHRyZXQgPSBwYXRjaF91bG9uZygodm9pZCAqKShicGZfZnVuY19lbmQgLSBicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgLSBTWkwpLFxuJiM0MztcdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xuIFx0XHRcdFx0ICAobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/XG4gXHRcdFx0XHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IGJmZGM1MDc0MGRhOGU3Li5mNWI5NDQxY2Y0NmFhNyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXG5AQCAtMjI5LDcgJiM0MzsyMjksNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxuIFxuIH1cbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRFTUlUKFBQQ19SQVdfTVIoX1IzLCBicGZfdG9fcHBjKEJQRl9SRUdfMCkpKTtcbiBcbkBAIC0yMzcsNyAmIzQzOzIzNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXG4gXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xuIFxuLVx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XG4mIzQzO1x0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiB9XG4gXG4gLyogUmVsYXRpdmUgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gZmluYWwgaW1hZ2UgbG9jYXRpb24gKi9cbkBAIC0xMTQ5LDcgJiM0MzsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSYjMzk7bGwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGVwaWxvZ3VlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICE9IGZsZW4gLSAxKSB7XG4tXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIF9SMCwgZXhpdF9hZGRyKTtcbiYjNDM7XHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRjdHgsIF9SMCwgZXhpdF9hZGRyKTtcbiBcdFx0XHRcdGlmIChyZXQpXG4gXHRcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggZGIzNjRkOTA4M2U3MjUuLjA4NjA4NGFiYjE4NGE0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXHRcdCAqL1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIDApKTtcbiBcdFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCAtKEJQRl9QUENfVEFJTENBTEwpKSk7XG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdFx0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRcdFBQQ19CQ0NfQ09OU1RfU0hPUlQoQ09ORF9HVCwgOCk7XG4gXHRcdEVNSVQoUFBDX1JBV19BRERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgYnBmX3RvX3BwYyhUTVBfUkVHXzIpLFxuIFx0XHRcdFx0XHRcdFx0XHQtKEJQRl9QUENfVEFJTENBTEwpKSk7XG5AQCAtMzk4LDcgJiM0MzszOTgsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxuIFx0fVxuIH1cbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuIFxuQEAgLTQwNyw3ICYjNDM7NDA3LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiBcbiBcdEVNSVQoUFBDX1JBV19CTFIoKSk7XG4gXG4tXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgY3R4KTtcbiYjNDM7XHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpO1xuIH1cbiBcbiAvKlxuQEAgLTY1MSw3ICYjNDM7NjUxLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdFBQQ19CQ0NfU0hPUlQoQ09ORF9HRSwgb3V0KTtcbiBcbiBcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTtcbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0xFLCA4KTtcbiBcbiBcdC8qIGRlcmVmZXJlbmNlIFRNUF9SRUdfMSAqL1xuQEAgLTY2MSw3ICYjNDM7NjYxLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIGlmICh0YWlsX2NhbGxfaW5mbyA9PSBNQVhfVEFJTF9DQUxMX0NOVClcbiBcdCAqICAgZ290byBvdXQ7XG4gXHQgKi9cbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuJiM0MztcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0VRLCBvdXQpO1xuIFxuIFx0LypcbkBAIC02OTYsNyAmIzQzOzY5Niw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvXG4gXHQgKiB0YWlsX2NhbGxfaW5mby5cbiBcdCAqL1xuIFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18yKSwgX1IxLCBicGZfaml0X3N0YWNrX3RhaWxjYWxsaW5mb19vZmZzZXQoY3R4KSkpO1xuLVx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMiksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4mIzQzO1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMiksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xuIFxuIFx0LyogRmlyc3QgZ2V0IGFkZHJlc3Mgb2YgdGFpbF9jYWxsX2luZm8gKi9cbkBAIC0xNzI2LDcgJiM0MzsxNzI2LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSYjMzk7bGwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGVwaWxvZ3VlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICE9IGZsZW4gLSAxKSB7XG4tXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIHRtcDFfcmVnLCBleGl0X2FkZHIpO1xuJiM0MztcdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwgY3R4LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IDM1NThmZTEwZTI4Y2Y5Li4xMTQyOGNhZDViMmQyYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXG5AQCAtMTc4LDEwICYjNDM7MTc4LDEyIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbyA9IHt9O1xuIFx0X191MzIgaW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4tXHRfX3UzMiBqaXRlZF9mdW5jcywgbGVuLCBwYztcbiYjNDM7XHRfX3UzMiBqaXRlZF9mdW5jcywgbGVuLCBwYywgZGlzYXNtX2xlbjtcbiYjNDM7XHRfX3UzMiB0cnVuY19sZW4gPSAwO1xuIFx0X191MzIgKmZ1bmNfbGVucyA9IE5VTEw7XG4gXHRGSUxFICp0ZXh0X291dCA9IE5VTEw7XG4gXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XG4mIzQzO1x0Y2hhciAqdHJpcGxlID0gTlVMTDtcbiBcdGludCBpLCBlcnIgPSAwO1xuIFxuIFx0aWYgKCFsbHZtX2luaXRpYWxpemVkKSB7XG5AQCAtMjI1LDkgJiM0MzsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiBcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUXG4mIzQzO1x0ICogb3V0cHV0IG9uIDY0LWJpdCBhbmQgbGFzdCA0IGJ5dGVzIG9uIDMyLWJpdCBwb3dlcnBjLFxuJiM0MztcdCAqIHdoaWNoIGNhbiYjMzk7dCBkaXNhc3NlbWJsZSB0byBhIHZhbGlkIGluc3RydWN0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHRyaXBsZSA9IExMVk1HZXREZWZhdWx0VGFyZ2V0VHJpcGxlKCk7XG4mIzQzO1x0aWYgKHRyaXBsZSkge1xuJiM0MztcdFx0aWYgKHN0cnN0cih0cmlwbGUsIFwmIzM0O3Bvd2VycGM2NFwmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgXCYjMzQ7cHBjNjRcJiMzNDspKVxuJiM0MztcdFx0XHR0cnVuY19sZW4gPSA4O1xuJiM0MztcdFx0ZWxzZSBpZiAoc3Ryc3RyKHRyaXBsZSwgXCYjMzQ7cG93ZXJwY1wmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgXCYjMzQ7cHBjXCYjMzQ7KSlcbiYjNDM7XHRcdFx0dHJ1bmNfbGVuID0gNDtcbiYjNDM7XHRcdExMVk1EaXNwb3NlTWVzc2FnZSh0cmlwbGUpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRmb3IgKHBjID0gMCwgaSA9IDA7IGkgXHUwMDNjIGppdGVkX2Z1bmNzOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCYjMzQ7ZnVuYyAjJWQ6XFxuXCYjMzQ7LCBpKTtcbi1cdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZnVuY19sZW5zW2ldKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBEaXNhYmxlZCBKSVQgaGF2ZSB6ZXJvIGZ1bmNfbGVucywgaGVuY2UgdW5kZXJmbG93XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRpc2FzbV9sZW4gPSBmdW5jX2xlbnNbaV0gXHUwMDNlIHRydW5jX2xlbiA/XG4mIzQzO1x0XHRcdFx0XHRmdW5jX2xlbnNbaV0gLSB0cnVuY19sZW4gOiAwO1xuJiM0MztcdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSAmIzQzOyBwYywgZGlzYXNtX2xlbik7XG4mIzQzO1xuIFx0XHRmcHJpbnRmKHRleHRfb3V0LCBcJiMzNDtcXG5cJiMzNDspO1xuIFx0XHRwYyAmIzQzOz0gZnVuY19sZW5zW2ldO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IDllZWI1YjBiNjNkNjk3Li5jZGMyYTNkZTMwNTQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuQEAgLTE1OCw2ICYjNDM7MTU4LDcgQEBcbiAjZGVmaW5lIF9fYXJjaF9hcm02NFx0XHRfX2FyY2goXCYjMzQ7QVJNNjRcJiMzNDspXG4gI2RlZmluZSBfX2FyY2hfcmlzY3Y2NFx0XHRfX2FyY2goXCYjMzQ7UklTQ1Y2NFwmIzM0OylcbiAjZGVmaW5lIF9fYXJjaF9zMzkweFx0XHRfX2FyY2goXCYjMzQ7czM5MHhcJiMzNDspXG4mIzQzOyNkZWZpbmUgX19hcmNoX3Bvd2VycGM2NFx0X19hcmNoKFwmIzM0O1BPV0VSUEM2NFwmIzM0OylcbiAjZGVmaW5lIF9fY2Fwc191bnByaXYoY2FwcylcdF9fdGVzdF90YWcoXCYjMzQ7dGVzdF9jYXBzX3VucHJpdj1cJiMzNDsgRVhQQU5EX1FVT1RFKGNhcHMpKVxuICNkZWZpbmUgX19sb2FkX2lmX0pJVGVkKClcdF9fdGVzdF90YWcoXCYjMzQ7bG9hZF9tb2RlPWppdGVkXCYjMzQ7KVxuICNkZWZpbmUgX19sb2FkX2lmX25vX0pJVGVkKClcdF9fdGVzdF90YWcoXCYjMzQ7bG9hZF9tb2RlPW5vX2ppdGVkXCYjMzQ7KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuaW5kZXggNDhmYTM0ZDI5NTlmNDYuLjA5ZDdlOTJjODQ5MTAwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbkBAIC05MSw2ICYjNDM7OTEsNzUgQEAgX19qaXRlZChcJiMzNDtcdHBvcHFcdCVyYXhcJiMzNDspXG4gX19qaXRlZChcJiMzNDtcdGptcFx0e3suKn19XCYjMzQ7KVx0XHQvKiBqdW1wIHRvIHRhaWwgY2FsbCB0Z3QgICAqL1xuIF9faml0ZWQoXCYjMzQ7TDA6XHRsZWF2ZVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0e3socmV0cXxqbXBcdDB4KX19XCYjMzQ7KVx0XHQvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovXG4mIzQzO19fYXJjaF9wb3dlcnBjNjRcbiYjNDM7LyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRub3BcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsaSA5LCAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkIDksIC04KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bWZsciAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkIDAsIDE2KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c3RkdSAxLCB7ey4qfX0oMSlcJiMzNDspXG4mIzQzOy8qIGxvYWQgYWRkcmVzcyBhbmQgY2FsbCBzdWIoKSB2aWEgY291bnQgcmVnaXN0ZXIgKi9cbiYjNDM7X19qaXRlZChcJiMzNDtcdGxpcyAxMiwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c2xkaSAxMiwgMTIsIDMyXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0b3JpcyAxMiwgMTIsIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaSAxMiwgMTIsIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG10Y3RyIDEyXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YmN0cmxcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtclx0OCwgM1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxpIDgsIDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRpIDEsIDEsIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxkIDAsIDE2KDEpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXRsciAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXJcdDMsIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRibHJcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O2Z1bmMgIzFcJiMzNDspXG4mIzQzOy8qIHN1YnByb2dyYW0gZW50cnkgZm9yIHN1YigpICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRub3BcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzOy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xuJiM0MztfX2ppdGVkKFwmIzM0O1x0bGQgMTAsIDAoMSlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAtOCgxMClcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRjbXBsZGlcdDksIDMzXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YnRcdHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkaSA5LCAxMCwgLThcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzdGQgOSwgLTgoMSlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsaXMge3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzbGRpIHt7Lip9fSwge3suKn19LCAzMlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaXMge3suKn19LCB7ey4qfX0sIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG9yaSB7ey4qfX0sIHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bGkge3suKn19LCAwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bHd6IDksIHt7Lip9fSh7ey4qfX0pXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0c2x3aSB7ey4qfX0sIHt7Lip9fSwgMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGx3XHR7ey4qfX0sIDlcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiZlx0MCwge3suKn19XCYjMzQ7KVxuJiM0MzsvKiBicGZfdGFpbF9jYWxsIGltcGxlbWVudGF0aW9uICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAtOCgxKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0OSwgMzNcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiZlx0e3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCA5LCAwKDkpXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y21wbGRpXHQ5LCAzM1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGJ0XHR7ey4qfX0sIHt7Lip9fVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZGkgOSwgOSwgMVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG11bGxpIDEwLCB7ey4qfX0sIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGQgMTAsIDEwLCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCAxMCwge3suKn19KDEwKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0MTAsIDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRidFx0e3suKn19LCB7ey4qfX1cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRsZCAxMCwge3suKn19KDEwKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZGkgMTAsIDEwLCB7ey4qfX1cJiMzNDspICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtdGN0ciAxMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGxkIDEwLCAtOCgxKVwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNtcGxkaVx0MTAsIDMzXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YnRcdHt7Lip9fSwge3suKn19XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkaSAxMCwgMSwgLThcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRzdGQgOSwgMCgxMClcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRiY3RyXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bXJcdDMsIDhcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRibHJcJiMzNDspXG4mIzQzO1xuIFNFQyhcJiMzNDt0Y1wmIzM0OylcbiBfX25ha2VkIGludCBtYWluKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbmluZGV4IGFiZGI5ZTZlMzcxMzYyLi5kNTU4OTM1NWVkOWUwYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuQEAgLTM3Nyw2ICYjNDM7Mzc3LDcgQEAgZW51bSBhcmNoIHtcbiBcdEFSQ0hfQVJNNjRcdD0gMHg0LFxuIFx0QVJDSF9SSVNDVjY0XHQ9IDB4OCxcbiBcdEFSQ0hfUzM5MFhcdD0gMHgxMCxcbiYjNDM7XHRBUkNIX1BPV0VSUEM2NFx0PSAweDIwLFxuIH07XG4gXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG5AQCAtMzg5LDYgJiM0MzszOTAsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbiBcdHJldHVybiBBUkNIX1JJU0NWNjQ7XG4gI2VsaWYgZGVmaW5lZChfX3MzOTB4X18pXG4gXHRyZXR1cm4gQVJDSF9TMzkwWDtcbiYjNDM7I2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKVxuJiM0MztcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcbiAjZW5kaWZcbiBcdHJldHVybiBBUkNIX1VOS05PV047XG4gfVxuQEAgLTU4MCw2ICYjNDM7NTgzLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdFx0XHRhcmNoID0gQVJDSF9SSVNDVjY0O1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCYjMzQ7czM5MHhcJiMzNDspID09IDApIHtcbiBcdFx0XHRcdGFyY2ggPSBBUkNIX1MzOTBYO1xuJiM0MztcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O1BPV0VSUEM2NFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0XHRcdGFyY2ggPSBBUkNIX1BPV0VSUEM2NDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0UFJJTlRfRkFJTChcJiMzNDtiYWQgYXJjaCBzcGVjOiAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIHZhbCk7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfZXhpdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfZXBpbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9ib2R5JiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfcHJvbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X3RhaWxfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyYjMzQ7LAogICAgJiMzNDticGZfYXJjaF90ZXh0X3Bva2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWU2YTU2NDNiOWJiNzUzYWVhNzUyMWVmNTJlODQ3OWQ0ZjIwNzc3YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDE5OjQzOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaAppbmRleCBmMzJkZTg3MDRkNGQ5Ni4uNGRhOGJkZTkyZTFlZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oCkBAIC0xNCw2ICYjNDM7MTQsMTMgQEAKICNpbmNsdWRlICZsdDthc20vcHBjLW9wY29kZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1aWxkX2J1Zy5oJmd0OwogCiYjNDM7LyoKJiM0MzsgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWQKJiM0MzsgKiBhZGRpdGlvbmFsIHBhc3NlcyBpZiBjb2RlIHNpemUgY2hhbmdlcyBiZXR3ZWVuIHBhc3Nlcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyCiYjNDM7I2RlZmluZSBDT0RFR0VOX01BWF9QQVNTRVMgICAgMwomIzQzOwogI2lmZGVmIENPTkZJR19QUEM2NF9FTEZfQUJJX1YxCiAjZGVmaW5lIEZVTkNUSU9OX0RFU0NSX1NJWkUJMjQKICNlbHNlCkBAIC0xODgsNiAmIzQzOzE5NSwxMiBAQCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0IHsKIAogI2RlZmluZSBicGZfdG9fcHBjKHIpCShjdHgtJmd0O2IycFtyXSkKIAomIzQzOyNpZmRlZiBDT05GSUdfUFBDNjQKJiM0MzsjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTERJKGEsIGkpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTFdJKGEsIGkpCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZkZWYgQ09ORklHX1BQQzMyCiAjZGVmaW5lIEJQRl9GSVhVUF9MRU4JMyAvKiBUaHJlZSBpbnN0cnVjdGlvbnMgPSZndDsgMTIgYnl0ZXMgKi8KICNlbHNlCkBAIC0yMTQsMTAgJiM0MzsyMjcsMTEgQEAgaW50IGJwZl9qaXRfZW1pdF9mdW5jX2NhbGxfcmVsKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICoKIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwKIAkJICAgICAgIHUzMiAqYWRkcnMsIGludCBwYXNzLCBib29sIGV4dHJhX3Bhc3MpOwogdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7Ci12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTsKLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTsKJiM0Mzt2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7CiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTsKIHZvaWQgYnBmX2ppdF9yZWFsbG9jX3JlZ3Moc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTsKLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTsKJiM0MztpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZywKJiM0MzsJCQkJCQkJCQkJbG9uZyBleGl0X2FkZHIpOwogdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCwKIAkJCQkJCQkJaW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTsKIHZvaWQgc3RvcmVfZnVuY19tZXRhKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTY0IGZ1bmNfbWV0YSwgaW50IGZ1bmNfbWV0YV9vZmYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggNjM1MWExODdjYTYxZTIuLjQ2YmJmYjZiZTYxMzQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTQ5LDExICYjNDM7NDksMzcgQEAgYXNtICgKICYjMzQ7CS5wb3BzZWN0aW9uCQkJCTsmIzM0OwogKTsKIAotdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogewogCWludCBvb2xfc3R1Yl9pZHgsIGxvbmdfYnJhbmNoX3N0dWJfaWR4OwomIzQzOwlpbnQgc3R1Yl9zejsKIAogCS8qCiYjNDM7CSAqIFRoZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkIGlzIHBsYWNlZCBhdCBib3R0b20gb2YgTG9uZyBicmFuY2ggc3R1Yi4KJiM0MzsJICogSW4gdGhlIGZpbmFsIHBhc3MsIGFsaWduIHRoZSBtaXMtYWxpZ25lZCBkdW1teV90cmFtcF9hZGRyIGZpZWxkCiYjNDM7CSAqIGluIHRoZSBmaW1hZ2UuIFRoZSBhbGlnbm1lbnQgTk9QIG11c3QgYXBwZWFyIGJlZm9yZSBPT0wgc3R1YiwKJiM0MzsJICogdG8gbWFrZSBvb2xfc3R1Yl9pZHggJmFtcDsgbG9uZ19icmFuY2hfc3R1Yl9pZHggY29uc3RhbnQgZnJvbSBlbmQuCiYjNDM7CSAqCiYjNDM7CSAqIGR1bW15X3RyYW1wX2FkZHIgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZCBmb3IgbG9hZC1yZWdpc3RlcgomIzQzOwkgKiBjb21wYXRpYmlsaXR5LiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsCiYjNDM7CSAqIGFsaWdubWVudCBkZXBlbmRzIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWImIzM5O3MgaW5zdHJ1Y3Rpb24KJiM0MzsJICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoCiYjNDM7CSAqIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSBvciAxMCBpbnN0cnVjdGlvbnMgKHdpdGhvdXQpCiYjNDM7CSAqIGJlZm9yZSBkdW1teV90cmFtcF9hZGRyIGZpZWxkLiBFbWl0IGEgTk9QIGlmIHRoZSBhZGRyZXNzIG9mCiYjNDM7CSAqIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuCiYjNDM7CSAqCiYjNDM7CSAqIEluIHBhc3M9MCB3aGVuIGltYWdlPT1OVUxMLCBjb25zZXJ2YXRpdmVseSBhY2NvdW50IGZvciBzcGFjZQomIzQzOwkgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHMKJiM0MzsJICogZW1pdHRpbmcgYWxpZ25tZW50IE5PUCwgdGhlIGltYWdlIGJ1ZmZlciBoYXZlIDQgc3BhcmUgYnl0ZXMgYW5kCiYjNDM7CSAqIGppdGVkX2xlbiBzaWduaWZpZXMgY29ycmVjdCBwcm9ncmFtIHNpemUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwOwomIzQzOwlpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSAmIzQzOyBjdHgtJmd0O2lkeCo0ICYjNDM7IHN0dWJfc3osIFNaTCkpCiYjNDM7CQlFTUlUKFBQQ19SQVdfTk9QKCkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiAgICAgIG5vcCAgICAgLy8gb3B0aW9uYWwsIGZvciBhbGlnbm1lbnQgb2YgZHVtbXlfdHJhbXBfYWRkcgogCSAqIE91dC1vZi1saW5lIHN0dWI6CiAJICoJbWZscglyMAogCSAqCVtifGJsXQl0cmFtcApAQCAtNzAsNDQgJiM0Mzs5Niw0NiBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIAogCS8qCiAJICogTG9uZyBicmFuY2ggc3R1YjoKLQkgKgkubG9uZwkmbHQ7ZHVtbXlfdHJhbXBfYWRkciZndDsKIAkgKgltZmxyCXIxMQogCSAqCWJjbAkyMCwzMSwkJiM0Mzs0Ci0JICoJbWZscglyMTIKLQkgKglsZAlyMTIsIC04LVNaTChyMTIpCiYjNDM7CSAqCW1mbHIJcjEyCS8vIGxyL3IxMiBzdG9yZXMgcGMgb2YgY3VycmVudCh0aGlzKSBpbnN0LgomIzQzOwkgKglsZAlyMTIsIDIwKHIxMikgLy8gb2Zmc2V0KGR1bW15X3RyYW1wX2FkZHIpIGZyb20gcHJldiBpbnN0LiBpcyAyMAogCSAqCW10Y3RyCXIxMgotCSAqCW10bHIJcjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSQomIzQzOwkgKgltdGxyCXIxMQkvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQkkKIAkgKgliY3RyCiYjNDM7CSAqCS5sb25nCSZsdDtkdW1teV90cmFtcF9hZGRyJmd0OyAgLy8gOC1ieXRlIGFsaWduZWQKIAkgKi8KLQlpZiAoaW1hZ2UpCi0JCSooKHVuc2lnbmVkIGxvbmcgKikmYW1wO2ltYWdlW2N0eC0mZ3Q7aWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDsKLQljdHgtJmd0O2lkeCAmIzQzOz0gU1pMIC8gNDsKIAlsb25nX2JyYW5jaF9zdHViX2lkeCA9IGN0eC0mZ3Q7aWR4OwogCUVNSVQoUFBDX1JBV19NRkxSKF9SMTEpKTsKIAlFTUlUKFBQQ19SQVdfQkNMNCgpKTsKIAlFTUlUKFBQQ19SQVdfTUZMUihfUjEyKSk7Ci0JRU1JVChQUENfUkFXX0xMKF9SMTIsIF9SMTIsIC04LVNaTCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgMjApKTsKIAlFTUlUKFBQQ19SQVdfTVRDVFIoX1IxMikpOwogCUVNSVQoUFBDX1JBV19NVExSKF9SMTEpKTsKIAlFTUlUKFBQQ19SQVdfQkNUUigpKTsKIAomIzQzOwlpZiAoaW1hZ2UpCiYjNDM7CQkqKCh1bnNpZ25lZCBsb25nICopJmFtcDtpbWFnZVtjdHgtJmd0O2lkeF0pID0gKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXA7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7aWR4ICYjNDM7PSBTWkwgLyA0OwomIzQzOwogCWlmICghYnBmX2ppdF9vb2xfc3R1YikgewogCQlicGZfaml0X29vbF9zdHViID0gKGN0eC0mZ3Q7aWR4IC0gb29sX3N0dWJfaWR4KSAqIDQ7CiAJCWJwZl9qaXRfbG9uZ19icmFuY2hfc3R1YiA9IChjdHgtJmd0O2lkeCAtIGxvbmdfYnJhbmNoX3N0dWJfaWR4KSAqIDQ7CiAJfQogfQogCi1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcikKJiM0MztpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LAomIzQzOwkJCQkJCQlpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpCiB7Ci0JaWYgKCFleGl0X2FkZHIgfHwgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAoY3R4LSZndDtpZHggKiA0KSkpIHsKJiM0MzsJaWYgKGV4aXRfYWRkciAmYW1wOyZhbXA7IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoZXhpdF9hZGRyIC0gKGxvbmcpKGN0eC0mZ3Q7aWR4ICogNCkpKSB7CiAJCVBQQ19KTVAoZXhpdF9hZGRyKTsKLQl9IGVsc2UgaWYgKGN0eC0mZ3Q7YWx0X2V4aXRfYWRkcikgewotCQlpZiAoV0FSTl9PTighaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZSgobG9uZyljdHgtJmd0O2FsdF9leGl0X2FkZHIgLSAoY3R4LSZndDtpZHggKiA0KSkpKQotCQkJcmV0dXJuIC0xOwomIzQzOwl9IGVsc2UgaWYgKGN0eC0mZ3Q7YWx0X2V4aXRfYWRkciAmYW1wOyZhbXA7IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoCiYjNDM7CQkJKGxvbmcpKGN0eC0mZ3Q7YWx0X2V4aXRfYWRkcikgLSAobG9uZykoY3R4LSZndDtpZHggKiA0KSkpIHsKIAkJUFBDX0pNUChjdHgtJmd0O2FsdF9leGl0X2FkZHIpOwogCX0gZWxzZSB7CiAJCWN0eC0mZ3Q7YWx0X2V4aXRfYWRkciA9IGN0eC0mZ3Q7aWR4ICogNDsKLQkJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgY3R4KTsKJiM0MzsJCWJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGZpbWFnZSwgY3R4KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI3NCw2ICYjNDM7MzAyLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHIKIAkgKi8KIAlpZiAoY2djdHguc2VlbiAmYW1wOyBTRUVOX1RBSUxDQUxMIHx8ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWNnY3R4LmlkeCAqIDQpKSB7CiAJCWNnY3R4LmlkeCA9IDA7CiYjNDM7CQljZ2N0eC5hbHRfZXhpdF9hZGRyID0gMDsKIAkJaWYgKGJwZl9qaXRfYnVpbGRfYm9keShmcCwgTlVMTCwgTlVMTCwgJmFtcDtjZ2N0eCwgYWRkcnMsIDAsIGZhbHNlKSkKIAkJCWdvdG8gb3V0X2VycjsKIAl9CkBAIC0yODYsNyAmIzQzOzMxNSw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJICovCiAJYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShOVUxMLCAmYW1wO2NnY3R4KTsKIAlhZGRyc1tmcC0mZ3Q7bGVuXSA9IGNnY3R4LmlkeCAqIDQ7Ci0JYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCAmYW1wO2NnY3R4KTsKJiM0MzsJYnBmX2ppdF9idWlsZF9lcGlsb2d1ZShOVUxMLCBOVUxMLCAmYW1wO2NnY3R4KTsKIAogCWZpeHVwX2xlbiA9IGZwLSZndDthdXgtJmd0O251bV9leGVudHJpZXMgKiBCUEZfRklYVVBfTEVOICogNDsKIAlleHRhYmxlX2xlbiA9IGZwLSZndDthdXgtJmd0O251bV9leGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSk7CkBAIC0zMDYsOCAmIzQzOzMzNSwxMCBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcgogCWNvZGVfYmFzZSA9ICh1MzIgKikoaW1hZ2UgJiM0MzsgRlVOQ1RJT05fREVTQ1JfU0laRSk7CiAJZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICYjNDM7IEZVTkNUSU9OX0RFU0NSX1NJWkUpOwogCi0JLyogQ29kZSBnZW5lcmF0aW9uIHBhc3NlcyAxLTIgKi8KLQlmb3IgKHBhc3MgPSAxOyBwYXNzICZsdDsgMzsgcGFzcyYjNDM7JiM0MzspIHsKJiM0MzsJLyogQ29kZSBnZW5lcmF0aW9uIHBhc3NlcyAxLTImIzQzOywgbG9vcCB1bnRpbCBwcm9ncmFtIHNpemUgY29udmVyZ2VzLiAqLwomIzQzOwlmb3IgKHBhc3MgPSAxOyBwYXNzICZsdDs9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcyYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuOwomIzQzOwogCQkvKiBOb3cgYnVpbGQgdGhlIHByb2xvZ3VlLCBib2R5IGNvZGUgJmFtcDsgZXBpbG9ndWUgZm9yIHJlYWwuICovCiAJCWNnY3R4LmlkeCA9IDA7CiAJCWNnY3R4LmFsdF9leGl0X2FkZHIgPSAwOwpAQCAtMzE4LDExICYjNDM7MzQ5LDI2IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJCQlicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTsKIAkJCWdvdG8gb3V0X2VycjsKIAkJfQotCQlicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGNvZGVfYmFzZSwgJmFtcDtjZ2N0eCk7CiYjNDM7CQlhZGRyc1tmcC0mZ3Q7bGVuXSA9IGNnY3R4LmlkeCAqIDQ7CiYjNDM7CQlicGZfaml0X2J1aWxkX2VwaWxvZ3VlKGNvZGVfYmFzZSwgZmNvZGVfYmFzZSwgJmFtcDtjZ2N0eCk7CiYjNDM7CiYjNDM7CQlwcm9nbGVuID0gY2djdHguaWR4ICogNDsKIAogCQlpZiAoYnBmX2ppdF9lbmFibGUgJmd0OyAxKQogCQkJcHJfaW5mbygmIzM0O1Bhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxuJiMzNDssIHBhc3MsCi0JCQkJcHJvZ2xlbiAtIChjZ2N0eC5pZHggKiA0KSwgY2djdHguc2Vlbik7CiYjNDM7CQkJCXByZXZfcHJvZ2xlbiAtIHByb2dsZW4sIGNnY3R4LnNlZW4pOwomIzQzOwomIzQzOwkJLyogQ2hlY2sgaWYgcHJvZ3JhbSBzaXplIGhhcyBjb252ZXJnZWQsIGJ1dCBlbnN1cmUgbWluaW11bSBwYXNzZXMgKi8KJiM0MzsJCWlmIChwYXNzICZndDs9IENPREVHRU5fTUlOX1BBU1NFUyAmYW1wOyZhbXA7IHByb2dsZW4gPT0gcHJldl9wcm9nbGVuKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKHBhc3MgPT0gQ09ERUdFTl9NQVhfUEFTU0VTICZhbXA7JmFtcDsgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtCUEYgSklUOiBQcm9ncmFtIGRpZCBub3QgY29udmVyZ2UgYWZ0ZXIgJWQgcGFzc2VzXG4mIzM0OywKJiM0MzsJCQkJCQkJCUNPREVHRU5fTUFYX1BBU1NFUyk7CiYjNDM7CQkJYnBmX2FyY2hfdGV4dF9jb3B5KCZhbXA7Zmhkci0mZ3Q7c2l6ZSwgJmFtcDtoZHItJmd0O3NpemUsIHNpemVvZihoZHItJmd0O3NpemUpKTsKJiM0MzsJCQlicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTsKJiM0MzsJCQlnb3RvIG91dF9lcnI7CiYjNDM7CQl9CiAJfQogCiAJaWYgKGJwZl9qaXRfZW5hYmxlICZndDsgMSkKQEAgLTM1Nyw3ICYjNDM7NDAzLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHIKIAkJCQkodm9pZCAqKWZpbWFnZSAmIzQzOyBGVU5DVElPTl9ERVNDUl9TSVpFKTsKIAogb3V0X2FkZHJzOgotCQlpZiAoIWltYWdlICZhbXA7JmFtcDsgcHJpdl9zdGFja19wdHIpIHsKJiM0MzsJCWlmICghZnAtJmd0O2ppdGVkICZhbXA7JmFtcDsgcHJpdl9zdGFja19wdHIpIHsKIAkJCWZwLSZndDthdXgtJmd0O3ByaXZfc3RhY2tfcHRyID0gTlVMTDsKIAkJCWZyZWVfcGVyY3B1KHByaXZfc3RhY2tfcHRyKTsKIAkJfQpAQCAtNzM0LDcgJiM0Mzs3ODAsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZQogCQkgKiBTZXR0aW5nIHRoZSB0YWlsX2NhbGxfaW5mbyBpbiB0cmFtcG9saW5lJiMzOTtzIGZyYW1lCiAJCSAqIGRlcGVuZGluZyBvbiBpZiBwcmV2aW91cyBmcmFtZSBoYWQgdmFsdWUgb3IgcmVmZXJlbmNlLgogCQkgKi8KLQkJRU1JVChQUENfUkFXX0NNUExXSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CQlFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAkJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAkJRU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7CiAKQEAgLTEyNjAsNiAmIzQzOzEzMDYsNyBAQCBzdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKQogICogYnBmX2Z1bmM6CiAgKglbbm9wfGJdCW9vbF9zdHViCiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOgomIzQzOyAqCW5vcAkvLyBvcHRpb25hbCBub3AgZm9yIGFsaWdubWVudAogICogb29sX3N0dWI6CiAgKgltZmxyCXIwCiAgKglbYnxibF0JJmx0O2JwZl9wcm9nJmd0Oy8mbHQ7bG9uZ19icmFuY2hfc3R1YiZndDsKQEAgLTEyNjcsMTQgJiM0MzsxMzE0LDE0IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpCiAgKgliCWJwZl9mdW5jICYjNDM7IDQKICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6CiAgKiBsb25nX2JyYW5jaF9zdHViOgotICoJLmxvbmcJJmx0O2JyYW5jaF9hZGRyJmd0Oy8mbHQ7ZHVtbXlfdHJhbXAmZ3Q7CiAgKgltZmxyCXIxMQogICoJYmNsCTIwLDMxLCQmIzQzOzQKICAqCW1mbHIJcjEyCi0gKglsZAlyMTIsIC0xNihyMTIpCiYjNDM7ICoJbGQJcjEyLCAyMChyMTIpCiAgKgltdGN0cglyMTIKICAqCW10bHIJcjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSQogICoJYmN0cgomIzQzOyAqCS5sb25nCSZsdDticmFuY2hfYWRkciZndDsvJmx0O2R1bW15X3RyYW1wJmd0OwogICoKICAqIGR1bW15X3RyYW1wIGlzIHVzZWQgdG8gcmVkdWNlIHN5bmNocm9uaXphdGlvbiByZXF1aXJlbWVudHMuCiAgKgpAQCAtMTM3NiwxMCAmIzQzOzE0MjMsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsCiAJICogMS4gVXBkYXRlIHRoZSBhZGRyZXNzIGluIHRoZSBsb25nIGJyYW5jaCBzdHViOgogCSAqIElmIG5ld19hZGRyIGlzIG91dCBvZiByYW5nZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgbG9uZyBicmFuY2ggc3R1Yiwgc28gcGF0Y2ggbmV3X2FkZHIKIAkgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS4KJiM0MzsJICoKJiM0MzsJICogZHVtbXlfdHJhbXBfYWRkciBtb3ZlZCB0byBib3R0b20gb2YgbG9uZyBicmFuY2ggc3R1Yi4KIAkgKi8KIAlpZiAoKG5ld19hZGRyICZhbXA7JmFtcDsgIWlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UobmV3X2FkZHIgLSBpcCkpIHx8CiAJICAgIChvbGRfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSkKLQkJcmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSwKJiM0MzsJCXJldCA9IHBhdGNoX3Vsb25nKCh2b2lkICopKGJwZl9mdW5jX2VuZCAtIFNaTCksIC8qIFNaTDogZHVtbXlfdHJhbXBfYWRkciBvZmZzZXQgKi8KIAkJCQkgIChuZXdfYWRkciAmYW1wOyZhbXA7ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/CiAJCQkJICAodW5zaWduZWQgbG9uZyluZXdfYWRkciA6ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jCmluZGV4IGJmZGM1MDc0MGRhOGU3Li5mNWI5NDQxY2Y0NmFhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYwpAQCAtMjI5LDcgJiM0MzsyMjksNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eAogCiB9CiAKLXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiB7CiAJRU1JVChQUENfUkFXX01SKF9SMywgYnBmX3RvX3BwYyhCUEZfUkVHXzApKSk7CiAKQEAgLTIzNyw3ICYjNDM7MjM3LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIAogCUVNSVQoUFBDX1JBV19CTFIoKSk7CiAKLQlicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgY3R4KTsKJiM0MzsJYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTsKIH0KIAogLyogUmVsYXRpdmUgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gZmluYWwgaW1hZ2UgbG9jYXRpb24gKi8KQEAgLTExNDksNyAmIzQzOzExNDksOCBAQCBpbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZQogCQkJICogd2UmIzM5O2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS4KIAkJCSAqLwogCQkJaWYgKGkgIT0gZmxlbiAtIDEpIHsKLQkJCQlyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIF9SMCwgZXhpdF9hZGRyKTsKJiM0MzsJCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLAomIzQzOwkJCQkJCQkJY3R4LCBfUjAsIGV4aXRfYWRkcik7CiAJCQkJaWYgKHJldCkKIAkJCQkJcmV0dXJuIHJldDsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYwppbmRleCBkYjM2NGQ5MDgzZTcyNS4uMDg2MDg0YWJiMTg0YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMKQEAgLTI3Niw3ICYjNDM7Mjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCkKIAkJICovCiAJCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpOwogCQlFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTsKLQkJRU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiYjNDM7CQlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAkJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAkJRU1JVChQUENfUkFXX0FEREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksCiAJCQkJCQkJCS0oQlBGX1BQQ19UQUlMQ0FMTCkpKTsKQEAgLTM5OCw3ICYjNDM7Mzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgKIAl9CiB9CiAKLXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiYjNDM7dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpCiB7CiAJYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZShpbWFnZSwgY3R4KTsKIApAQCAtNDA3LDcgJiM0Mzs0MDcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KQogCiAJRU1JVChQUENfUkFXX0JMUigpKTsKIAotCWJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpOwomIzQzOwlicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpOwogfQogCiAvKgpAQCAtNjUxLDcgJiM0Mzs2NTEsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgbwogCVBQQ19CQ0NfU0hPUlQoQ09ORF9HRSwgb3V0KTsKIAogCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTsKLQlFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKJiM0MzsJRU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiAJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0xFLCA4KTsKIAogCS8qIGRlcmVmZXJlbmNlIFRNUF9SRUdfMSAqLwpAQCAtNjYxLDcgJiM0Mzs2NjEsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgbwogCSAqIGlmICh0YWlsX2NhbGxfaW5mbyA9PSBNQVhfVEFJTF9DQUxMX0NOVCkKIAkgKiAgIGdvdG8gb3V0OwogCSAqLwotCUVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpOwomIzQzOwlFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKIAlQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7CiAKIAkvKgpAQCAtNjk2LDcgJiM0Mzs2OTYsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgbwogCSAqIHRhaWxfY2FsbF9pbmZvLgogCSAqLwogCUVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTsKLQlFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTsKJiM0MzsJRU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMiksIE1BWF9UQUlMX0NBTExfQ05UKSk7CiAJUFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTsKIAogCS8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovCkBAIC0xNzI2LDcgJiM0MzsxNzI2LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGUKIAkJCSAqIHdlJiMzOTtsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuCiAJCQkgKi8KIAkJCWlmIChpICE9IGZsZW4gLSAxKSB7Ci0JCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCB0bXAxX3JlZywgZXhpdF9hZGRyKTsKJiM0MzsJCQkJcmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLCBjdHgsCiYjNDM7CQkJCQkJCQl0bXAxX3JlZywgZXhpdF9hZGRyKTsKIAkJCQlpZiAocmV0KQogCQkJCQlyZXR1cm4gcmV0OwogCQkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jCmluZGV4IDM1NThmZTEwZTI4Y2Y5Li4xMTQyOGNhZDViMmQyYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuYwpAQCAtMTc4LDEwICYjNDM7MTc4LDEyIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opCiB7CiAJc3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbyA9IHt9OwogCV9fdTMyIGluZm9fbGVuID0gc2l6ZW9mKGluZm8pOwotCV9fdTMyIGppdGVkX2Z1bmNzLCBsZW4sIHBjOwomIzQzOwlfX3UzMiBqaXRlZF9mdW5jcywgbGVuLCBwYywgZGlzYXNtX2xlbjsKJiM0MzsJX191MzIgdHJ1bmNfbGVuID0gMDsKIAlfX3UzMiAqZnVuY19sZW5zID0gTlVMTDsKIAlGSUxFICp0ZXh0X291dCA9IE5VTEw7CiAJdWludDhfdCAqaW1hZ2UgPSBOVUxMOwomIzQzOwljaGFyICp0cmlwbGUgPSBOVUxMOwogCWludCBpLCBlcnIgPSAwOwogCiAJaWYgKCFsbHZtX2luaXRpYWxpemVkKSB7CkBAIC0yMjUsOSAmIzQzOzIyNywzMCBAQCBpbnQgZ2V0X2ppdGVkX3Byb2dyYW1fdGV4dChpbnQgZmQsIGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0X3N6KQogCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDticGZfcHJvZ19nZXRfaW5mb19ieV9mZCAjMiYjMzQ7KSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogbGFzdCA4IGJ5dGVzIGNvbnRhaW5zIGR1bW15X3RyYW1wb2xpbmUgYWRkcmVzcyBpbiBKSVQKJiM0MzsJICogb3V0cHV0IG9uIDY0LWJpdCBhbmQgbGFzdCA0IGJ5dGVzIG9uIDMyLWJpdCBwb3dlcnBjLAomIzQzOwkgKiB3aGljaCBjYW4mIzM5O3QgZGlzYXNzZW1ibGUgdG8gYSB2YWxpZCBpbnN0cnVjdGlvbi4KJiM0MzsJICovCiYjNDM7CXRyaXBsZSA9IExMVk1HZXREZWZhdWx0VGFyZ2V0VHJpcGxlKCk7CiYjNDM7CWlmICh0cmlwbGUpIHsKJiM0MzsJCWlmIChzdHJzdHIodHJpcGxlLCAmIzM0O3Bvd2VycGM2NCYjMzQ7KSB8fCBzdHJzdHIodHJpcGxlLCAmIzM0O3BwYzY0JiMzNDspKQomIzQzOwkJCXRydW5jX2xlbiA9IDg7CiYjNDM7CQllbHNlIGlmIChzdHJzdHIodHJpcGxlLCAmIzM0O3Bvd2VycGMmIzM0OykgfHwgc3Ryc3RyKHRyaXBsZSwgJiMzNDtwcGMmIzM0OykpCiYjNDM7CQkJdHJ1bmNfbGVuID0gNDsKJiM0MzsJCUxMVk1EaXNwb3NlTWVzc2FnZSh0cmlwbGUpOwomIzQzOwl9CiYjNDM7CiAJZm9yIChwYyA9IDAsIGkgPSAwOyBpICZsdDsgaml0ZWRfZnVuY3M7ICYjNDM7JiM0MztpKSB7CiYjNDM7CiAJCWZwcmludGYodGV4dF9vdXQsICYjMzQ7ZnVuYyAjJWQ6XG4mIzM0OywgaSk7Ci0JCWRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgJiM0MzsgcGMsIGZ1bmNfbGVuc1tpXSk7CiYjNDM7CQkvKgomIzQzOwkJICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvdwomIzQzOwkJICovCiYjNDM7CQlkaXNhc21fbGVuID0gZnVuY19sZW5zW2ldICZndDsgdHJ1bmNfbGVuID8KJiM0MzsJCQkJCWZ1bmNfbGVuc1tpXSAtIHRydW5jX2xlbiA6IDA7CiYjNDM7CQlkaXNhc21fb25lX2Z1bmModGV4dF9vdXQsIGltYWdlICYjNDM7IHBjLCBkaXNhc21fbGVuKTsKJiM0MzsKIAkJZnByaW50Zih0ZXh0X291dCwgJiMzNDtcbiYjMzQ7KTsKIAkJcGMgJiM0Mzs9IGZ1bmNfbGVuc1tpXTsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCmluZGV4IDllZWI1YjBiNjNkNjk3Li5jZGMyYTNkZTMwNTQwNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKQEAgLTE1OCw2ICYjNDM7MTU4LDcgQEAKICNkZWZpbmUgX19hcmNoX2FybTY0CQlfX2FyY2goJiMzNDtBUk02NCYjMzQ7KQogI2RlZmluZSBfX2FyY2hfcmlzY3Y2NAkJX19hcmNoKCYjMzQ7UklTQ1Y2NCYjMzQ7KQogI2RlZmluZSBfX2FyY2hfczM5MHgJCV9fYXJjaCgmIzM0O3MzOTB4JiMzNDspCiYjNDM7I2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0CV9fYXJjaCgmIzM0O1BPV0VSUEM2NCYjMzQ7KQogI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpCV9fdGVzdF90YWcoJiMzNDt0ZXN0X2NhcHNfdW5wcml2PSYjMzQ7IEVYUEFORF9RVU9URShjYXBzKSkKICNkZWZpbmUgX19sb2FkX2lmX0pJVGVkKCkJX190ZXN0X3RhZygmIzM0O2xvYWRfbW9kZT1qaXRlZCYjMzQ7KQogI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKQlfX3Rlc3RfdGFnKCYjMzQ7bG9hZF9tb2RlPW5vX2ppdGVkJiMzNDspCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMKaW5kZXggNDhmYTM0ZDI5NTlmNDYuLjA5ZDdlOTJjODQ5MTAwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jCkBAIC05MSw2ICYjNDM7OTEsNzUgQEAgX19qaXRlZCgmIzM0Owlwb3BxCSVyYXgmIzM0OykKIF9faml0ZWQoJiMzNDsJam1wCXt7Lip9fSYjMzQ7KQkJLyoganVtcCB0byB0YWlsIGNhbGwgdGd0ICAgKi8KIF9faml0ZWQoJiMzNDtMMDoJbGVhdmUmIzM0OykKIF9faml0ZWQoJiMzNDsJe3socmV0cXxqbXAJMHgpfX0mIzM0OykJCS8qIHJldHVybiBvciBqdW1wIHRvIHJldGh1bmsgKi8KJiM0MztfX2FyY2hfcG93ZXJwYzY0CiYjNDM7LyogcHJvZ3JhbSBlbnRyeSBmb3IgbWFpbigpLCByZWd1bGFyIGZ1bmN0aW9uIHByb2xvZ3VlICovCiYjNDM7X19qaXRlZCgmIzM0Owlub3AmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi8KJiM0MztfX2ppdGVkKCYjMzQ7CWxpIDksIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXN0ZCA5LCAtOCgxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbWZsciAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgMCwgMTYoMSkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXN0ZHUgMSwge3suKn19KDEpJiMzNDspCiYjNDM7LyogbG9hZCBhZGRyZXNzIGFuZCBjYWxsIHN1YigpIHZpYSBjb3VudCByZWdpc3RlciAqLwomIzQzO19faml0ZWQoJiMzNDsJbGlzIDEyLCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXNsZGkgMTIsIDEyLCAzMiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJb3JpcyAxMiwgMTIsIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJb3JpIDEyLCAxMiwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdGN0ciAxMiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYmN0cmwmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1yCTgsIDMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxpIDgsIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZGkgMSwgMSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCAwLCAxNigxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbXRsciAwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltcgkzLCA4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlibHImIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O2Z1bmMgIzEmIzM0OykKJiM0MzsvKiBzdWJwcm9ncmFtIGVudHJ5IGZvciBzdWIoKSAqLwomIzQzO19faml0ZWQoJiMzNDsJbm9wJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovCiYjNDM7LyogdGFpbCBjYWxsIHByb2xvZ3VlIGZvciBzdWJwcm9ncmFtICovCiYjNDM7X19qaXRlZCgmIzM0OwlsZCAxMCwgMCgxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgOSwgLTgoMTApJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJOSwgMzMmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJ0CXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGRpIDksIDEwLCAtOCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc3RkIDksIC04KDEpJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsaXMge3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXNsZGkge3suKn19LCB7ey4qfX0sIDMyJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlvcmlzIHt7Lip9fSwge3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW9yaSB7ey4qfX0sIHt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsaSB7ey4qfX0sIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWx3eiA5LCB7ey4qfX0oe3suKn19KSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJc2x3aSB7ey4qfX0sIHt7Lip9fSwgMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY21wbHcJe3suKn19LCA5JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwliZgkwLCB7ey4qfX0mIzM0OykKJiM0MzsvKiBicGZfdGFpbF9jYWxsIGltcGxlbWVudGF0aW9uICovCiYjNDM7X19qaXRlZCgmIzM0OwlsZCA5LCAtOCgxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY21wbGRpCTksIDMzJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwliZgl7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbGQgOSwgMCg5KSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY21wbGRpCTksIDMzJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlidAl7ey4qfX0sIHt7Lip9fSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSA5LCA5LCAxJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwltdWxsaSAxMCwge3suKn19LCA4JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQgMTAsIDEwLCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCB7ey4qfX0oMTApJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljbXBsZGkJMTAsIDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJ0CXt7Lip9fSwge3suKn19JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlsZCAxMCwge3suKn19KDEwKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkaSAxMCwgMTAsIHt7Lip9fSYjMzQ7KSAgICAvKiBvZmZzZXQgZGVwZW5kcyBvbiBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqLwomIzQzO19faml0ZWQoJiMzNDsJbXRjdHIgMTAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWxkIDEwLCAtOCgxKSYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY21wbGRpCTEwLCAzMyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYnQJe3suKn19LCB7ey4qfX0mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZGkgMTAsIDEsIC04JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlzdGQgOSwgMCgxMCkmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJjdHImIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1yCTMsIDgmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWJsciYjMzQ7KQomIzQzOwogU0VDKCYjMzQ7dGMmIzM0OykKIF9fbmFrZWQgaW50IG1haW4odm9pZCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKaW5kZXggYWJkYjllNmUzNzEzNjIuLmQ1NTg5MzU1ZWQ5ZTBjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYwpAQCAtMzc3LDYgJiM0MzszNzcsNyBAQCBlbnVtIGFyY2ggewogCUFSQ0hfQVJNNjQJPSAweDQsCiAJQVJDSF9SSVNDVjY0CT0gMHg4LAogCUFSQ0hfUzM5MFgJPSAweDEwLAomIzQzOwlBUkNIX1BPV0VSUEM2NAk9IDB4MjAsCiB9OwogCiBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZCkKQEAgLTM4OSw2ICYjNDM7MzkwLDggQEAgc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpCiAJcmV0dXJuIEFSQ0hfUklTQ1Y2NDsKICNlbGlmIGRlZmluZWQoX19zMzkweF9fKQogCXJldHVybiBBUkNIX1MzOTBYOwomIzQzOyNlbGlmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKJiM0MzsJcmV0dXJuIEFSQ0hfUE9XRVJQQzY0OwogI2VuZGlmCiAJcmV0dXJuIEFSQ0hfVU5LTk9XTjsKIH0KQEAgLTU4MCw2ICYjNDM7NTgzLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsCiAJCQkJYXJjaCA9IEFSQ0hfUklTQ1Y2NDsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtzMzkweCYjMzQ7KSA9PSAwKSB7CiAJCQkJYXJjaCA9IEFSQ0hfUzM5MFg7CiYjNDM7CQkJfSBlbHNlIGlmIChzdHJjbXAodmFsLCAmIzM0O1BPV0VSUEM2NCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQkJCWFyY2ggPSBBUkNIX1BPV0VSUEM2NDsKIAkJCX0gZWxzZSB7CiAJCQkJUFJJTlRfRkFJTCgmIzM0O2JhZCBhcmNoIHNwZWM6ICYjMzk7JXMmIzM5O1xuJiMzNDssIHZhbCk7CiAJCQkJZXJyID0gLUVJTlZBTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3dlclBDIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIEJQRiBKSVQgY29tcGlsZXIgc3BlY2lmaWNhbGx5IGZvciBQb3dlclBDLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29kZSBnZW5lcmF0aW9uIHBhc3NlcyAoYWRqdXN0aW5nIGBDT0RFR0VOX01JTl9QQVNTRVNgIGFuZCBgQ09ERUdFTl9NQVhfUEFTU0VTYCkuIEJleW9uZCB0aGF0LCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgYSBzZXJpZXMgb2YgY29yZSBmdW5jdGlvbnM6IGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2AsIGBicGZfaml0X2VtaXRfZXhpdF9pbnNuYCwgYW5kIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYCwgYWxvbmcgd2l0aCBzb21lIGluc3RydWN0aW9uIHJlcGxhY2VtZW50cy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyB0aGVzZSBsb3ctbGV2ZWwgY29kZSBnZW5lcmF0aW9uIGFzcGVjdHMgc3VnZ2VzdHMgaXQgY291bGQgYmUgaW1wYWN0ZnVsLCBhbmQgbmVlZHMgY2FyZWZ1bCBleGFtaW5hdGlvbi4gQWxzbywgdGhleSYjMzk7dmUgYWRkZWQgUG93ZXJQQzY0IHN1cHBvcnQgdG8gYSBjb3VwbGUgb2Ygc2VsZi10ZXN0IGZpbGVzLCB3aGljaCBpcyBnb29kLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiB0aGUgY29tbW9uIGVudmlyb25tZW50cz8gU2luY2UgaXQmIzM5O3MgUG93ZXJQQywgYW5kIEkga25vdyBzeXprYWxsZXIgaGFzIHN1cHBvcnQgZm9yIFBvd2VyUEMgKHNwZWNpZmljYWxseSBwcGM2NGxlKSwgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggdGVzdGluZywgZXNwZWNpYWxseSBnaXZlbiBzeXprYWxsZXImIzM5O3MgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgc2VlIHRoYXQgbXkgZmlyc3QgaW1wcmVzc2lvbiBpcyBjb3JyZWN0LCB0aGUgcGF0Y2ggaXMgaW5kZWVkIGZ1enphYmxlLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb2RlLiBMZXQgbWUgZXh0cmFjdCB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY2AsIGBhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNgLCBhbmQgYGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY2AuIEkgaGF2ZToKLSBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgCi0gYGJwZl9qaXRfZW1pdF9leGl0X2luc25gCi0gYGJwZl9pbnRfaml0X2NvbXBpbGVgCi0gYGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvYAotIGBicGZfYXJjaF90ZXh0X3Bva2VgCi0gYGJwZl9qaXRfYnVpbGRfZXBpbG9ndWVgCi0gYGJwZl9qaXRfZW1pdF90YWlsX2NhbGxgCi0gYGJwZl9qaXRfYnVpbGRfYm9keWAKLSBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAKClRoaXMgaXMgYWxsIGNvcmUgQlBGIEpJVCBjb21waWxlciBzdHVmZiBmb3IgUG93ZXJQQywgc28gdGhlIGltcGFjdCBpcyBpbiB0aGUgY29yZS4gVGhlIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGlzIHNpbXBsZSwgYEJQRl9KSVRgIGFuZCBlaXRoZXIgYFBQQzY0YCBvciBgUFBDMzJgLCBidXQgSSB0aGluayBqdXN0IHNheWluZyBgQlBGX0pJVGAgYW5kIGBQUEM2NGAgY292ZXJzIGl0IGZvciBmdXp6aW5nIHB1cnBvc2VzLiBIb3dldmVyLCBJIHNob3VsZCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VkIGJ5IGxvb2tpbmcgYXQgdGhlIGAjaWZkZWZgcy4gTGV0IG1lIGxvb2sgYXQgYGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zLCBhbmQgSSBzZWUgYENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FYCBiZWluZyB1c2VkIGluIGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2AsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz0zNT1hc20gKFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMzktXCYjMzQ7ZHVtbXlfdHJhbXA6XHRcdFx0XHRcdDtcJiMzNDtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NDA6I2lmZGVmIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTQxLVwmIzM0O1x0YmxyXHRcdFx0XHRcdDtcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTUyPXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTY2LVx0ICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjY3Olx0ICogQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpIG9yIDEwIGluc3RydWN0aW9ucyAod2l0aG91dClcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNjgtXHQgKiBiZWZvcmUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZC4gRW1pdCBhIE5PUCBpZiB0aGUgYWRkcmVzcyBvZlxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzYtXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjc3Olx0c3R1Yl9zeiA9IElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpID8gNDQgOiA0MDtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzgtXHRpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSAmIzQzOyBjdHgtXHUwMDNlaWR4KjQgJiM0Mzsgc3R1Yl9zeiwgU1pMKSlcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTg1LVx0ICpcdFtifGJsXVx0dHJhbXBcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6ODY6XHQgKlx0bXRsclx0cjAgLy8gb25seSB3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTg3LVx0ICpcdGJcdGJwZl9mdW5jICYjNDM7IDRcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTkxLVx0RU1JVChQUENfUkFXX05PUCgpKTtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6OTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTkzLVx0XHRFTUlUKFBQQ19SQVdfTVRMUihfUjApKTtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTg1Mz1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTk3Mi1cdC8qIE9wdGlvbmFsIHNhdmUgYXJlYSBmb3IgYWN0dWFsIExSIGluIGNhc2Ugb2Ygb29sIGZ0cmFjZSAqL1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo5NzM6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpIHtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtOTc0LVx0XHRhbHRfbHJfb2ZmID0gYnBmX2ZyYW1lX3NpemU7XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDE3LVx0RU1JVChQUENfUkFXX01GTFIoX1IzKSk7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEwMTg6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTktXHRcdEVNSVQoUFBDX1JBV19TVEwoX1IzLCBfUjEsIGFsdF9scl9vZmYpKTtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjQtXHQgKiBEZXJpdmUgSVAgYWRkcmVzcyBvZiB0aGUgdHJhY2VkIGZ1bmN0aW9uLlxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMDI1Olx0ICogSW4gY2FzZSBvZiBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSBvciBCUEYgcHJvZ3JhbSwgTFIgcG9pbnRzIHRvIHRoZSBpbnN0cnVjdGlvblxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDI2LVx0ICogYWZ0ZXIgdGhlICYjMzk7YmwmIzM5OyBpbnN0cnVjdGlvbiBpbiB0aGUgT09MIHN0dWIuIFJlZmVyIHRvIGZ0cmFjZV9pbml0X29vbF9zdHViKCkgYW5kXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDM2LVx0ICovXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzc6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgfHwgZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lQX0FSRykge1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDM4LVx0XHRFTUlUKFBQQ19SQVdfTFdaKF9SNCwgX1IzLCA0KSk7XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDQ2LVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMDQ3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpKSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDgtXHRcdC8qIEZha2Ugb3VyIExSIGZvciBCUEZfVFJBTVBfRl9DQUxMX09SSUcgY2FzZSAqL1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTIwNC1cdH0gZWxzZSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEyMDU6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSkge1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMjA2LVx0XHRcdEVNSVQoUFBDX1JBV19MTChfUjAsIF9SMSwgYWx0X2xyX29mZikpO1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9MTI5OD1zdGF0aWMgdm9pZCBkb19pc3luYyh2b2lkICppbmZvIF9fbWF5YmVfdW51c2VkKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTMxMi0gKlx0W2J8YmxdXHRcdTAwM2NicGZfcHJvZ1x1MDAzZS9cdTAwM2Nsb25nX2JyYW5jaF9zdHViXHUwMDNlXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEzMTM6ICpcdG10bHJcdHIwIC8vIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FIG9ubHlcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTMxNC0gKlx0Ylx0YnBmX2Z1bmMgJiM0MzsgNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEpJVCBQYXRjaCBmb3IgUG93ZXJQQyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQlBGIEpJVCBpbXBsZW1lbnRhdGlvbiBmb3IgUG93ZXJQQy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBgZmVudHJ5YCBzdHVicywgdGhlIGVwaWxvZ3VlLCBhbmQgdGhlIGV4aXQgaW5zdHJ1Y3Rpb25zLiBJbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoZXNlIGFyZSBiZWluZyBtb2RpZmllZCwgZXNwZWNpYWxseSB3aXRoaW4gdGhhdCBKSVQgY29udGV4dC4gSXQmIzM5O3MgYWxzbyBtYWtpbmcgYWRqdXN0bWVudHMgdG8gdGhlIG51bWJlciBvZiBwYXNzZXMgdGhlIGNvZGUgZ2VuZXJhdGlvbiBnb2VzIHRocm91Z2gsIHdoaWNoIGxpa2VseSBpbXBhY3RzIHBlcmZvcm1hbmNlIG9yIGNvZGUgcXVhbGl0eS4KClRoZSBrZXkgY29uZmlncyBhdCBwbGF5IGhlcmUgYXJlIGNsZWFybHkgYEJQRl9KSVRgIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGBQUEM2NGAgb3IgYFBQQzMyYC4gT2J2aW91cy4gQnV0IHRoZXJlJiMzOTtzIGFsc28gYENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FYCBtZW50aW9uZWQuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoaXMgY29uZmlnIGFjdHVhbGx5ICpleGlzdHMqIGFuZCBpcyB2YWxpZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgUG93ZXJQQyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXRzIHJlbGV2YW5jZSBoZXJlIHN1Z2dlc3RzIGEgcmVsYXRpb25zaGlwIHdpdGggZnVuY3Rpb24gdHJhY2luZyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBKSVQmIzM5O2QgQlBGIGNvZGUsIHdoaWNoIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIGNoZWNrIHRoYXQgY29uZmlnIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9LY29uZmlnPTU2OD1jb25maWcgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01NzQtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1NzU6Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU3Ni1cdGRlZl9ib29sIFBQQzY0IFx1MDAyNlx1MDAyNiBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU3OC1cbmFyY2gvcG93ZXJwYy9LY29uZmlnOjU3OTpjb25maWcgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORV9OVU1fUkVTRVJWRVxuYXJjaC9wb3dlcnBjL0tjb25maWctNTgwLVx0aW50IFwmIzM0O051bWJlciBvZiBmdHJhY2Ugb3V0LW9mLWxpbmUgc3R1YnMgdG8gcmVzZXJ2ZSB3aXRoaW4gLnRleHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRXZhbHVhdGluZyB0aGUgYFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCkFscmlnaHQsIHNvIGBQUENfRlRSQUNFX09VVF9PRl9MSU5FYCBpcyBhIGBkZWZfYm9vbGAsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBvcHRpb24geW91IGNhbiAqc2VsZWN0Ki4gSXRzIHZhbHVlIGlzICpkZWZpbmVkKiBieSBzb21ldGhpbmcgZWxzZTogc3BlY2lmaWNhbGx5LCB0aGUgY29uanVuY3Rpb24gb2YgYFBQQzY0YCAqYW5kKiBgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllgLiBTbywgaXQmIzM5O3MgYSBzb3J0IG9mICYjMzk7aGVscGVyJiMzOTsgb3IgZGVyaXZlZCBvcHRpb24uIFlvdSBjYW4mIzM5O3QgdG9nZ2xlIHRoaXMgb25lIG9uIG9yIG9mZiBkaXJlY3RseSBpbiB5b3VyIGNvbmZpZy4KClRoZSBtb3JlIGludGVyZXN0aW5nIGJpdCBoZXJlIGlzIGBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgY29udHJvbCBsaWVzLiBJZiB0aGF0IGZsYWcgaXMgc2V0LCBhbmQgd2UmIzM5O3JlIG9uIGEgUFBDNjQgYXJjaGl0ZWN0dXJlLCAqdGhlbiogYFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZC4gSXQmIzM5O3MgYSBkZXBlbmRlbmN5LiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb250cm9scyB0aGUgYEFSQ0hfVVNJTkdfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZYCBvcHRpb24gc28gd2UgY2FuIGtub3cgaWYgZnRyYWNlIHN1cHBvcnQgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9LY29uZmlnPTU2Mz1jb25maWcgTVBST0ZJTEVfS0VSTkVMXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctNTY3LVxuYXJjaC9wb3dlcnBjL0tjb25maWc6NTY4OmNvbmZpZyBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxuYXJjaC9wb3dlcnBjL0tjb25maWctNTY5LVx0ZGVwZW5kcyBvbiBGVU5DVElPTl9UUkFDRVIgXHUwMDI2XHUwMDI2IChQUEMzMiB8fCBQUEM2NF9FTEZfQUJJX1YyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIGNvZGUgbW9kaWZpY2F0aW9uLiBGaXJzdCwgYEZVTkNUSU9OX1RSQUNFUmAgc2VlbXMgbGlrZSBhIGdpdmVuLCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGF0LiBOb3csIEkgc2VlIGBCUEZfSklUYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCwgd2hpY2ggbWFrZXMgc2Vuc2Ugc2luY2UgaXQmIzM5O3MgdGhlIEJQRiBKSVQgY29tcGlsZXIuIE5hdHVyYWxseSwgYEJQRl9KSVRgIHJlcXVpcmVzIGBCUEZfU1lTQ0FMTGAgYXMgd2VsbC4gU28sIHRoZSBiYXNlIHJlcXVpcmVtZW50cyBhcmUgYEJQRl9KSVRgIGFuZCBgRlVOQ1RJT05fVFJBQ0VSYC4KClRoZSBwcm9tcHQgaXMgc3BlY2lmaWM6IEkgc2hvdWxkIGF2b2lkIGxpc3RpbmcgdG9vIGdlbmVyaWMgY29uZmlncy4gT2theSwgYEJQRl9KSVRgICppcyogc3BlY2lmaWMgdG8gdGhlIEpJVCBhc3BlY3QsIGV2ZW4gaWYgQlBGIGlzIG1vcmUgZ2VuZXJhbC4gYFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVgIGlzIHNwZWNpZmljIGJ1dCBub3QgZGlyZWN0bHkgc2VsZWN0YWJsZS4gTm93LCBsZXQgbWUgY2hlY2sgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCB0byBuYXJyb3cgdGhpcyBkb3duLiBJIHNlZSBjYWxscyB0byBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWAuIEFsc28sIGBicGZfaml0X2VtaXRfZXhpdF9pbnNuYCBpcyBjYWxsZWQgZnJvbSBgYnBmX2ppdF9idWlsZF9ib2R5YC4KCkxldCYjMzk7cyBncmFiIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYDogYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYCwgYGJwZl9qaXRfYnVpbGRfYm9keWAsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCwgYGJwZl9qaXRfZW1pdF90YWlsX2NhbGxgLCBgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm9gLCBhbmQgYGJwZl9hcmNoX3RleHRfcG9rZWAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBzeW1ib2xzIGFyZSBub3QgaW4gdGhlIGhvdCBwYXRoLiBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdXNlZCBkdXJpbmcgQlBGIHByb2dyYW0gbG9hZCBhbmQgY29tcGlsYXRpb24uIEdvb2QsIG5vdCBob3QgcGF0aC4gVGhlIGBicGZfaml0XypgIGZ1bmN0aW9ucyBhcmUgYWxsIHBhcnQgb2YgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzOyB0aGF0IG1ha2VzIHNlbnNlLiBgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm9gIGlzIGZvciB0cmFtcG9saW5lIHNldHVwLiBgYnBmX2FyY2hfdGV4dF9wb2tlYCBpcyB1c2VkIGZvciBwYXRjaGluZyBCUEYgcHJvZ3JhbXMuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4KCk5vdywgYW55IG90aGVyIHNwZWNpZmljIGNvbmZpZ3M/IExvb2tzIGxpa2UgYENPTkZJR19QUEM2NGAgYW5kIGBDT05GSUdfUFBDMzJgIGFyZSB1c2VkLCBhbG9uZyB3aXRoIGBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAuIE9rYXksIHdhaXQuIFRoZXNlIGFyZSBhcmNoaXRlY3R1cmVzLCBub3Qgc29tZXRoaW5nIEkgY2FuIGVuYWJsZSBvbiB4ODYgZGlyZWN0bHkuIFRoZSBjb25maWdzIEkgcHJvdmlkZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBrZXJuZWwgY29uZmlnLgoKU28sIGluIHN1bW1hcnksIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb2RlLCBJIGNhbiBjb25maWRlbnRseSBsaXN0IGBCUEZfSklUYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAuIExldCBtZSBkb3VibGUtY2hlY2sgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gIGlzIGluZGVlZCBpbiB0aGUgZXhwZWN0ZWQgZmlsZSBhbmQgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2VtaXRfZXhpdF9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL25ldC9icGZfaml0Lmg9MjMyPXZvaWQgYnBmX2ppdF9yZWFsbG9jX3JlZ3Moc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oOjIzMzppbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZyxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oLTIzNC1cdFx0XHRcdFx0XHRcdFx0XHRcdGxvbmcgZXhpdF9hZGRyKTtcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTUyPXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyNy1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTI4OmludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyOS1cdFx0XHRcdFx0XHRcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmM9MzIyPWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTE1MS1cdFx0XHRpZiAoaSAhPSBmbGVuIC0gMSkge1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jOjExNTI6XHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTE1My1cdFx0XHRcdFx0XHRcdFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jPTk1Nj1pbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTE3MjgtXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxNzI5Olx0XHRcdFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLCBjdHgsXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTczMC1cdFx0XHRcdFx0XHRcdFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTgyCgkJCQkJCQlvdXRwdXQ6IDIzOQoJCQkJCQkJdGhvdWdodHM6IDQyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvd2VyUEMgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQmIzM5O3MgZGlnZ2luZyBpbnRvIHRoZSBCUEYgSklUIGNvbXBpbGVyIHNwZWNpZmljYWxseSBmb3IgUG93ZXJQQy4gSXQmIzM5O3Mgbm90IGp1c3QgYSBzdXBlcmZpY2lhbCB0d2VhazsgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3RpbmcgaG93IHRoZSBjb2RlIGlzIGdlbmVyYXRlZC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYWRkcmVzc2luZyBhbGlnbm1lbnQgaXNzdWVzIGFuZCBtb2RpZnlpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgdGhlbXNlbHZlcyDigJMgdGhlIHZlcnkgY29yZSBvZiBob3cgQlBGIHByb2dyYW1zIHRyYW5zbGF0ZSBpbnRvIFBvd2VyUEMgbWFjaGluZSBjb2RlLiBJIGNhbiBzZWUgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIHJlYWNoYWJsZSBhbmQgdXNlZCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkIG9uIFBvd2VyUEMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIEdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgYnVncyBvciBldmVuIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSBpcyBzaWduaWZpY2FudC4gV2UgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBjaGFuZ2VzIGNvcnJlY3RseSBoYW5kbGUgdmFyaW91cyBCUEYgcHJvZ3JhbSBzdHJ1Y3R1cmVzIGFuZCBpbnB1dHMgYW5kIHByZXZlbnQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgY3Jhc2hlcy4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgbXkgZWZmb3J0cyBvbi4gV2UgaGF2ZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgd2hpY2ggaXMgdGhlIGNlbnRyYWwgY29tcGlsZSBmdW5jdGlvbi4gVGhlbiB0aGVyZSBpcyBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgLCBgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbmAsIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYCwgYGJwZl9qaXRfYnVpbGRfYm9keWAsIGFuZCBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBpbnZvbHZlZCBpbiBjb25zdHJ1Y3RpbmcgYW5kIGZpbmFsaXppbmcgdGhlIEpJVCYjMzk7ZCBjb2RlLiBGaW5hbGx5LCB0aGVyZSYjMzk7cyBgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbGAsIGBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mb2AsIGFuZCBgYnBmX2FyY2hfdGV4dF9wb2tlYC4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIHRvIHRhcmdldCB0aGVzZSBmdW5jdGlvbnMgZHVyaW5nIGZ1enppbmcuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IGZ1enppbmcgdGhlc2UgZnVuY3Rpb25zIHdpdGggYEJQRl9KSVRgIGFuZCBgRlVOQ1RJT05fVFJBQ0VSYCBlbmFibGVkIHdpbGwgYmUgY3J1Y2lhbCB0byBlbnN1cmUgdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBjb3JyZWN0bmVzcyBvZiBCUEYgb24gUG93ZXJQQy4gQWxyaWdodCwgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHNldCB0aGUgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X2V4aXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX2VwaWxvZ3VlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfYm9keSYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX3Byb2xvZ3VlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfZW1pdF90YWlsX2NhbGwmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm8mIzM0OywKICAgICYjMzQ7YnBmX2FyY2hfdGV4dF9wb2tlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciBQb3dlclBDLCBzcGVjaWZpY2FsbHkgYWRqdXN0aW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcGFzc2VzLCBmZW50cnkgc3R1YnMgYWxpZ25tZW50LCBhbmQgZXBpbG9ndWUvZXhpdCBpbnN0cnVjdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGNvbXBpbGVkIGFuZCBleGVjdXRlZCBvbiBQb3dlclBDIGFyY2hpdGVjdHVyZXMuIEZ1enppbmcgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24gUG93ZXJQQyB3aWxsIGhlbHAgZW5zdXJlIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSBhbmQgcHJldmVudCBwb3RlbnRpYWwgY3Jhc2hlcyBvciB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfZXhpdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfZXBpbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9ib2R5JiMzNDssCiAgICAmIzM0O2JwZl9qaXRfYnVpbGRfcHJvbG9ndWUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X3RhaWxfY2FsbCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mbyYjMzQ7LAogICAgJiMzNDticGZfYXJjaF90ZXh0X3Bva2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjIyLjE2Njc5NDA3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjYxNjQyMTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzXCIsXG4gICAgXCJicGZfaml0X2VtaXRfZXhpdF9pbnNuXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2VwaWxvZ3VlXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2JvZHlcIixcbiAgICBcImJwZl9qaXRfYnVpbGRfcHJvbG9ndWVcIixcbiAgICBcImJwZl9qaXRfZW1pdF90YWlsX2NhbGxcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvXCIsXG4gICAgXCJicGZfYXJjaF90ZXh0X3Bva2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgUG93ZXJQQywgc3BlY2lmaWNhbGx5IGFkanVzdGluZyB0aGUgY29kZSBnZW5lcmF0aW9uIHBhc3NlcywgZmVudHJ5IHN0dWJzIGFsaWdubWVudCwgYW5kIGVwaWxvZ3VlL2V4aXQgaW5zdHJ1Y3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgQlBGIHByb2dyYW1zIGFyZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQgb24gUG93ZXJQQyBhcmNoaXRlY3R1cmVzLiBGdXp6aW5nIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIFBvd2VyUEMgd2lsbCBoZWxwIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgYW5kIHByZXZlbnQgcG90ZW50aWFsIGNyYXNoZXMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0MzoyMi4xNjY3OTkwNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjEyMDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVlNmE1NjQzYjliYjc1M2FlYTc1MjFlZjUyZTg0NzlkNGYyMDc3N2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTk6NDM6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmggYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxcbmluZGV4IGYzMmRlODcwNGQ0ZDk2Li40ZGE4YmRlOTJlMWVmZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXFxuQEAgLTE0LDYgKzE0LDEzIEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHBjLW9wY29kZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcXHUwMDNlXFxuIFxcbisvKlxcbisgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWRcXG4rICogYWRkaXRpb25hbCBwYXNzZXMgaWYgY29kZSBzaXplIGNoYW5nZXMgYmV0d2VlbiBwYXNzZXMuXFxuKyAqL1xcbisjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyXFxuKyNkZWZpbmUgQ09ERUdFTl9NQVhfUEFTU0VTICAgIDNcXG4rXFxuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxcbiAjZGVmaW5lIEZVTkNUSU9OX0RFU0NSX1NJWkVcXHQyNFxcbiAjZWxzZVxcbkBAIC0xODgsNiArMTk1LDEyIEBAIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQge1xcbiBcXG4gI2RlZmluZSBicGZfdG9fcHBjKHIpXFx0KGN0eC1cXHUwMDNlYjJwW3JdKVxcbiBcXG4rI2lmZGVmIENPTkZJR19QUEM2NFxcbisjZGVmaW5lIFBQQ19SQVdfQ01QTExJKGEsIGkpICAgIFBQQ19SQVdfQ01QTERJKGEsIGkpXFxuKyNlbHNlXFxuKyNkZWZpbmUgUFBDX1JBV19DTVBMTEkoYSwgaSkgICAgUFBDX1JBV19DTVBMV0koYSwgaSlcXG4rI2VuZGlmXFxuK1xcbiAjaWZkZWYgQ09ORklHX1BQQzMyXFxuICNkZWZpbmUgQlBGX0ZJWFVQX0xFTlxcdDMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID1cXHUwMDNlIDEyIGJ5dGVzICovXFxuICNlbHNlXFxuQEAgLTIxNCwxMCArMjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXFxuIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0ICAgICAgIHUzMiAqYWRkcnMsIGludCBwYXNzLCBib29sIGV4dHJhX3Bhc3MpO1xcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XFxuLXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcXG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbiB2b2lkIGJwZl9qaXRfcmVhbGxvY19yZWdzKHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKTtcXG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGxvbmcgZXhpdF9hZGRyKTtcXG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcXG4gdm9pZCBzdG9yZV9mdW5jX21ldGEodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZik7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggNjM1MWExODdjYTYxZTIuLjQ2YmJmYjZiZTYxMzQwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTQ5LDExICs0OSwzNyBAQCBhc20gKFxcbiBcXFwiXFx0LnBvcHNlY3Rpb25cXHRcXHRcXHRcXHQ7XFxcIlxcbiApO1xcbiBcXG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuK3ZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRpbnQgb29sX3N0dWJfaWR4LCBsb25nX2JyYW5jaF9zdHViX2lkeDtcXG4rXFx0aW50IHN0dWJfc3o7XFxuIFxcbiBcXHQvKlxcbitcXHQgKiBUaGUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpcyBwbGFjZWQgYXQgYm90dG9tIG9mIExvbmcgYnJhbmNoIHN0dWIuXFxuK1xcdCAqIEluIHRoZSBmaW5hbCBwYXNzLCBhbGlnbiB0aGUgbWlzLWFsaWduZWQgZHVtbXlfdHJhbXBfYWRkciBmaWVsZFxcbitcXHQgKiBpbiB0aGUgZmltYWdlLiBUaGUgYWxpZ25tZW50IE5PUCBtdXN0IGFwcGVhciBiZWZvcmUgT09MIHN0dWIsXFxuK1xcdCAqIHRvIG1ha2Ugb29sX3N0dWJfaWR4IFxcdTAwMjYgbG9uZ19icmFuY2hfc3R1Yl9pZHggY29uc3RhbnQgZnJvbSBlbmQuXFxuK1xcdCAqXFxuK1xcdCAqIGR1bW15X3RyYW1wX2FkZHIgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZCBmb3IgbG9hZC1yZWdpc3RlclxcbitcXHQgKiBjb21wYXRpYmlsaXR5LiBUaGUgZmltYWdlIGNhbiBiZSBub24gOC1ieXRlIGFsaWduZWQsIHNvIGZpbmFsXFxuK1xcdCAqIGFsaWdubWVudCBkZXBlbmRzIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWIncyBpbnN0cnVjdGlvblxcbitcXHQgKiBjb3VudC4gVGhlIHN0dWJzIGJsb2NrIGhhcyAxMSBpbnN0cnVjdGlvbnMgKHdpdGhcXG4rXFx0ICogQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpIG9yIDEwIGluc3RydWN0aW9ucyAod2l0aG91dClcXG4rXFx0ICogYmVmb3JlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQuIEVtaXQgYSBOT1AgaWYgdGhlIGFkZHJlc3Mgb2ZcXG4rXFx0ICogZHVtbXlfdHJhbXBfYWRkciBpcyBub24gYWxpZ25lZC5cXG4rXFx0ICpcXG4rXFx0ICogSW4gcGFzcz0wIHdoZW4gaW1hZ2U9PU5VTEwsIGNvbnNlcnZhdGl2ZWx5IGFjY291bnQgZm9yIHNwYWNlXFxuK1xcdCAqIHJlcXVpcmVkIHRvIGFjY29tbW9kYXRlIGFsaWdubWVudCBOT1AuIEluIGNhc2UgZmluYWwgcGFzcyBza2lwc1xcbitcXHQgKiBlbWl0dGluZyBhbGlnbm1lbnQgTk9QLCB0aGUgaW1hZ2UgYnVmZmVyIGhhdmUgNCBzcGFyZSBieXRlcyBhbmRcXG4rXFx0ICogaml0ZWRfbGVuIHNpZ25pZmllcyBjb3JyZWN0IHByb2dyYW0gc2l6ZS5cXG4rXFx0ICovXFxuK1xcbitcXHRzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwO1xcbitcXHRpZiAoIWltYWdlIHx8ICFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWZpbWFnZSArIGN0eC1cXHUwMDNlaWR4KjQgKyBzdHViX3N6LCBTWkwpKVxcbitcXHRcXHRFTUlUKFBQQ19SQVdfTk9QKCkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogICAgICBub3AgICAgIC8vIG9wdGlvbmFsLCBmb3IgYWxpZ25tZW50IG9mIGR1bW15X3RyYW1wX2FkZHJcXG4gXFx0ICogT3V0LW9mLWxpbmUgc3R1YjpcXG4gXFx0ICpcXHRtZmxyXFx0cjBcXG4gXFx0ICpcXHRbYnxibF1cXHR0cmFtcFxcbkBAIC03MCw0NCArOTYsNDYgQEAgdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBMb25nIGJyYW5jaCBzdHViOlxcbi1cXHQgKlxcdC5sb25nXFx0XFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcXHUwMDNlXFxuIFxcdCAqXFx0bWZsclxcdHIxMVxcbiBcXHQgKlxcdGJjbFxcdDIwLDMxLCQrNFxcbi1cXHQgKlxcdG1mbHJcXHRyMTJcXG4tXFx0ICpcXHRsZFxcdHIxMiwgLTgtU1pMKHIxMilcXG4rXFx0ICpcXHRtZmxyXFx0cjEyXFx0Ly8gbHIvcjEyIHN0b3JlcyBwYyBvZiBjdXJyZW50KHRoaXMpIGluc3QuXFxuK1xcdCAqXFx0bGRcXHRyMTIsIDIwKHIxMikgLy8gb2Zmc2V0KGR1bW15X3RyYW1wX2FkZHIpIGZyb20gcHJldiBpbnN0LiBpcyAyMFxcbiBcXHQgKlxcdG10Y3RyXFx0cjEyXFxuLVxcdCAqXFx0bXRsclxcdHIxMSAvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcXG4rXFx0ICpcXHRtdGxyXFx0cjExXFx0Ly8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJXFxuIFxcdCAqXFx0YmN0clxcbitcXHQgKlxcdC5sb25nXFx0XFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcXHUwMDNlICAvLyA4LWJ5dGUgYWxpZ25lZFxcbiBcXHQgKi9cXG4tXFx0aWYgKGltYWdlKVxcbi1cXHRcXHQqKCh1bnNpZ25lZCBsb25nICopXFx1MDAyNmltYWdlW2N0eC1cXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcXG4tXFx0Y3R4LVxcdTAwM2VpZHggKz0gU1pMIC8gNDtcXG4gXFx0bG9uZ19icmFuY2hfc3R1Yl9pZHggPSBjdHgtXFx1MDAzZWlkeDtcXG4gXFx0RU1JVChQUENfUkFXX01GTFIoX1IxMSkpO1xcbiBcXHRFTUlUKFBQQ19SQVdfQkNMNCgpKTtcXG4gXFx0RU1JVChQUENfUkFXX01GTFIoX1IxMikpO1xcbi1cXHRFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgLTgtU1pMKSk7XFxuK1xcdEVNSVQoUFBDX1JBV19MTChfUjEyLCBfUjEyLCAyMCkpO1xcbiBcXHRFTUlUKFBQQ19SQVdfTVRDVFIoX1IxMikpO1xcbiBcXHRFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7XFxuIFxcdEVNSVQoUFBDX1JBV19CQ1RSKCkpO1xcbiBcXG4rXFx0aWYgKGltYWdlKVxcbitcXHRcXHQqKCh1bnNpZ25lZCBsb25nICopXFx1MDAyNmltYWdlW2N0eC1cXHUwMDNlaWR4XSkgPSAodW5zaWduZWQgbG9uZylkdW1teV90cmFtcDtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlaWR4ICs9IFNaTCAvIDQ7XFxuK1xcbiBcXHRpZiAoIWJwZl9qaXRfb29sX3N0dWIpIHtcXG4gXFx0XFx0YnBmX2ppdF9vb2xfc3R1YiA9IChjdHgtXFx1MDAzZWlkeCAtIG9vbF9zdHViX2lkeCkgKiA0O1xcbiBcXHRcXHRicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LVxcdTAwM2VpZHggLSBsb25nX2JyYW5jaF9zdHViX2lkeCkgKiA0O1xcbiBcXHR9XFxuIH1cXG4gXFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxcbitpbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXFxuIHtcXG4tXFx0aWYgKCFleGl0X2FkZHIgfHwgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAoY3R4LVxcdTAwM2VpZHggKiA0KSkpIHtcXG4rXFx0aWYgKGV4aXRfYWRkciBcXHUwMDI2XFx1MDAyNiBpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKGV4aXRfYWRkciAtIChsb25nKShjdHgtXFx1MDAzZWlkeCAqIDQpKSkge1xcbiBcXHRcXHRQUENfSk1QKGV4aXRfYWRkcik7XFxuLVxcdH0gZWxzZSBpZiAoY3R4LVxcdTAwM2VhbHRfZXhpdF9hZGRyKSB7XFxuLVxcdFxcdGlmIChXQVJOX09OKCFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkciAtIChjdHgtXFx1MDAzZWlkeCAqIDQpKSkpXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZWFsdF9leGl0X2FkZHIgXFx1MDAyNlxcdTAwMjYgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShcXG4rXFx0XFx0XFx0KGxvbmcpKGN0eC1cXHUwMDNlYWx0X2V4aXRfYWRkcikgLSAobG9uZykoY3R4LVxcdTAwM2VpZHggKiA0KSkpIHtcXG4gXFx0XFx0UFBDX0pNUChjdHgtXFx1MDAzZWFsdF9leGl0X2FkZHIpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRjdHgtXFx1MDAzZWFsdF9leGl0X2FkZHIgPSBjdHgtXFx1MDAzZWlkeCAqIDQ7XFxuLVxcdFxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGN0eCk7XFxuK1xcdFxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI3NCw2ICszMDIsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxcbiBcXHQgKi9cXG4gXFx0aWYgKGNnY3R4LnNlZW4gXFx1MDAyNiBTRUVOX1RBSUxDQUxMIHx8ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWNnY3R4LmlkeCAqIDQpKSB7XFxuIFxcdFxcdGNnY3R4LmlkeCA9IDA7XFxuK1xcdFxcdGNnY3R4LmFsdF9leGl0X2FkZHIgPSAwO1xcbiBcXHRcXHRpZiAoYnBmX2ppdF9idWlsZF9ib2R5KGZwLCBOVUxMLCBOVUxMLCBcXHUwMDI2Y2djdHgsIGFkZHJzLCAwLCBmYWxzZSkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbkBAIC0yODYsNyArMzE1LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcXG4gXFx0ICovXFxuIFxcdGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgXFx1MDAyNmNnY3R4KTtcXG4gXFx0YWRkcnNbZnAtXFx1MDAzZWxlbl0gPSBjZ2N0eC5pZHggKiA0O1xcbi1cXHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIFxcdTAwMjZjZ2N0eCk7XFxuK1xcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgXFx1MDAyNmNnY3R4KTtcXG4gXFxuIFxcdGZpeHVwX2xlbiA9IGZwLVxcdTAwM2VhdXgtXFx1MDAzZW51bV9leGVudHJpZXMgKiBCUEZfRklYVVBfTEVOICogNDtcXG4gXFx0ZXh0YWJsZV9sZW4gPSBmcC1cXHUwMDNlYXV4LVxcdTAwM2VudW1fZXhlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpO1xcbkBAIC0zMDYsOCArMzM1LDEwIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXFxuIFxcdGNvZGVfYmFzZSA9ICh1MzIgKikoaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcXG4gXFx0ZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XFxuIFxcbi1cXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xcbi1cXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFxcdTAwM2MgMzsgcGFzcysrKSB7XFxuK1xcdC8qIENvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgMS0yKywgbG9vcCB1bnRpbCBwcm9ncmFtIHNpemUgY29udmVyZ2VzLiAqL1xcbitcXHRmb3IgKHBhc3MgPSAxOyBwYXNzIFxcdTAwM2M9IENPREVHRU5fTUFYX1BBU1NFUzsgcGFzcysrKSB7XFxuK1xcdFxcdHUzMiBwcmV2X3Byb2dsZW4gPSBwcm9nbGVuO1xcbitcXG4gXFx0XFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFxcdTAwMjYgZXBpbG9ndWUgZm9yIHJlYWwuICovXFxuIFxcdFxcdGNnY3R4LmlkeCA9IDA7XFxuIFxcdFxcdGNnY3R4LmFsdF9leGl0X2FkZHIgPSAwO1xcbkBAIC0zMTgsMTEgKzM0OSwyNiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxcbiBcXHRcXHRcXHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcXG4gXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBcXHUwMDI2Y2djdHgpO1xcbitcXHRcXHRhZGRyc1tmcC1cXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XFxuK1xcdFxcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcXHUwMDI2Y2djdHgpO1xcbitcXG4rXFx0XFx0cHJvZ2xlbiA9IGNnY3R4LmlkeCAqIDQ7XFxuIFxcbiBcXHRcXHRpZiAoYnBmX2ppdF9lbmFibGUgXFx1MDAzZSAxKVxcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCJQYXNzICVkOiBzaHJpbmsgPSAlZCwgc2VlbiA9IDB4JXhcXFxcblxcXCIsIHBhc3MsXFxuLVxcdFxcdFxcdFxcdHByb2dsZW4gLSAoY2djdHguaWR4ICogNCksIGNnY3R4LnNlZW4pO1xcbitcXHRcXHRcXHRcXHRwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTtcXG4rXFxuK1xcdFxcdC8qIENoZWNrIGlmIHByb2dyYW0gc2l6ZSBoYXMgY29udmVyZ2VkLCBidXQgZW5zdXJlIG1pbmltdW0gcGFzc2VzICovXFxuK1xcdFxcdGlmIChwYXNzIFxcdTAwM2U9IENPREVHRU5fTUlOX1BBU1NFUyBcXHUwMDI2XFx1MDAyNiBwcm9nbGVuID09IHByZXZfcHJvZ2xlbilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAocGFzcyA9PSBDT0RFR0VOX01BWF9QQVNTRVMgXFx1MDAyNlxcdTAwMjYgcHJvZ2xlbiAhPSBwcmV2X3Byb2dsZW4pIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJCUEYgSklUOiBQcm9ncmFtIGRpZCBub3QgY29udmVyZ2UgYWZ0ZXIgJWQgcGFzc2VzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRDT0RFR0VOX01BWF9QQVNTRVMpO1xcbitcXHRcXHRcXHRicGZfYXJjaF90ZXh0X2NvcHkoXFx1MDAyNmZoZHItXFx1MDAzZXNpemUsIFxcdTAwMjZoZHItXFx1MDAzZXNpemUsIHNpemVvZihoZHItXFx1MDAzZXNpemUpKTtcXG4rXFx0XFx0XFx0YnBmX2ppdF9iaW5hcnlfcGFja19mcmVlKGZoZHIsIGhkcik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoYnBmX2ppdF9lbmFibGUgXFx1MDAzZSAxKVxcbkBAIC0zNTcsNyArNDAzLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcXG4gXFx0XFx0XFx0XFx0KHZvaWQgKilmaW1hZ2UgKyBGVU5DVElPTl9ERVNDUl9TSVpFKTtcXG4gXFxuIG91dF9hZGRyczpcXG4tXFx0XFx0aWYgKCFpbWFnZSBcXHUwMDI2XFx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xcbitcXHRcXHRpZiAoIWZwLVxcdTAwM2VqaXRlZCBcXHUwMDI2XFx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xcbiBcXHRcXHRcXHRmcC1cXHUwMDNlYXV4LVxcdTAwM2Vwcml2X3N0YWNrX3B0ciA9IE5VTEw7XFxuIFxcdFxcdFxcdGZyZWVfcGVyY3B1KHByaXZfc3RhY2tfcHRyKTtcXG4gXFx0XFx0fVxcbkBAIC03MzQsNyArNzgwLDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm8odTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGVcXG4gXFx0XFx0ICogU2V0dGluZyB0aGUgdGFpbF9jYWxsX2luZm8gaW4gdHJhbXBvbGluZSdzIGZyYW1lXFxuIFxcdFxcdCAqIGRlcGVuZGluZyBvbiBpZiBwcmV2aW91cyBmcmFtZSBoYWQgdmFsdWUgb3IgcmVmZXJlbmNlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0RU1JVChQUENfUkFXX0NNUExXSShfUjMsIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdFxcdEVNSVQoUFBDX1JBV19DTVBMTEkoX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRcXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfQURESShfUjMsIF9SNCwgLUJQRl9QUENfVEFJTENBTEwpKTtcXG4gXFxuQEAgLTEyNjAsNiArMTMwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXFxuICAqIGJwZl9mdW5jOlxcbiAgKlxcdFtub3B8Yl1cXHRvb2xfc3R1YlxcbiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOlxcbisgKlxcdG5vcFxcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XFxuICAqIG9vbF9zdHViOlxcbiAgKlxcdG1mbHJcXHRyMFxcbiAgKlxcdFtifGJsXVxcdFxcdTAwM2NicGZfcHJvZ1xcdTAwM2UvXFx1MDAzY2xvbmdfYnJhbmNoX3N0dWJcXHUwMDNlXFxuQEAgLTEyNjcsMTQgKzEzMTQsMTQgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcXG4gICpcXHRiXFx0YnBmX2Z1bmMgKyA0XFxuICAqIDMuIExvbmcgYnJhbmNoIHN0dWI6XFxuICAqIGxvbmdfYnJhbmNoX3N0dWI6XFxuLSAqXFx0LmxvbmdcXHRcXHUwMDNjYnJhbmNoX2FkZHJcXHUwMDNlL1xcdTAwM2NkdW1teV90cmFtcFxcdTAwM2VcXG4gICpcXHRtZmxyXFx0cjExXFxuICAqXFx0YmNsXFx0MjAsMzEsJCs0XFxuICAqXFx0bWZsclxcdHIxMlxcbi0gKlxcdGxkXFx0cjEyLCAtMTYocjEyKVxcbisgKlxcdGxkXFx0cjEyLCAyMChyMTIpXFxuICAqXFx0bXRjdHJcXHRyMTJcXG4gICpcXHRtdGxyXFx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxcbiAgKlxcdGJjdHJcXG4rICpcXHQubG9uZ1xcdFxcdTAwM2NicmFuY2hfYWRkclxcdTAwM2UvXFx1MDAzY2R1bW15X3RyYW1wXFx1MDAzZVxcbiAgKlxcbiAgKiBkdW1teV90cmFtcCBpcyB1c2VkIHRvIHJlZHVjZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzLlxcbiAgKlxcbkBAIC0xMzc2LDEwICsxNDIzLDEyIEBAIGludCBicGZfYXJjaF90ZXh0X3Bva2Uodm9pZCAqaXAsIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG9sZF90LFxcbiBcXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XFxuIFxcdCAqIElmIG5ld19hZGRyIGlzIG91dCBvZiByYW5nZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgbG9uZyBicmFuY2ggc3R1Yiwgc28gcGF0Y2ggbmV3X2FkZHJcXG4gXFx0ICogaGVyZS4gT3RoZXJ3aXNlLCByZXZlcnQgdG8gZHVtbXlfdHJhbXAsIGJ1dCBvbmx5IGlmIHdlIGhhZCBwYXRjaGVkIG9sZF9hZGRyIGhlcmUuXFxuK1xcdCAqXFxuK1xcdCAqIGR1bW15X3RyYW1wX2FkZHIgbW92ZWQgdG8gYm90dG9tIG9mIGxvbmcgYnJhbmNoIHN0dWIuXFxuIFxcdCAqL1xcbiBcXHRpZiAoKG5ld19hZGRyIFxcdTAwMjZcXHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSB8fFxcbiBcXHQgICAgKG9sZF9hZGRyIFxcdTAwMjZcXHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSlcXG4tXFx0XFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSxcXG4rXFx0XFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xcbiBcXHRcXHRcXHRcXHQgIChuZXdfYWRkciBcXHUwMDI2XFx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgP1xcbiBcXHRcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xcbiBcXHRpZiAocmV0KVxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG5pbmRleCBiZmRjNTA3NDBkYThlNy4uZjViOTQ0MWNmNDZhYTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXFxuQEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eFxcbiBcXG4gfVxcbiBcXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIHtcXG4gXFx0RU1JVChQUENfUkFXX01SKF9SMywgYnBmX3RvX3BwYyhCUEZfUkVHXzApKSk7XFxuIFxcbkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4gXFxuIFxcdEVNSVQoUFBDX1JBV19CTFIoKSk7XFxuIFxcbi1cXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgY3R4KTtcXG4rXFx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcXG4gfVxcbiBcXG4gLyogUmVsYXRpdmUgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gZmluYWwgaW1hZ2UgbG9jYXRpb24gKi9cXG5AQCAtMTE0OSw3ICsxMTQ5LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcXG4gXFx0XFx0XFx0ICogd2UnbGwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGVwaWxvZ3VlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgY3R4LCBfUjAsIGV4aXRfYWRkcik7XFxuK1xcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XFxuIFxcdFxcdFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggZGIzNjRkOTA4M2U3MjUuLjA4NjA4NGFiYjE4NGE0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4gXFx0XFx0ICovXFxuIFxcdFxcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMiksIF9SMSwgMCkpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksIC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcXG4tXFx0XFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdFxcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRcXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfR1QsIDgpO1xcbiBcXHRcXHRFTUlUKFBQQ19SQVdfQURESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIGJwZl90b19wcGMoVE1QX1JFR18yKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0LShCUEZfUFBDX1RBSUxDQUxMKSkpO1xcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcXG4gXFx0fVxcbiB9XFxuIFxcbi12b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4ge1xcbiBcXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xcbiBcXG5AQCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuIFxcbiBcXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xcbiBcXG4tXFx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XFxuK1xcdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBmaW1hZ2UsIGN0eCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTY1MSw3ICs2NTEsNyBAQCBzdGF0aWMgaW50IGJwZl9qaXRfZW1pdF90YWlsX2NhbGwodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCB1MzIgb1xcbiBcXHRQUENfQkNDX1NIT1JUKENPTkRfR0UsIG91dCk7XFxuIFxcbiBcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0xFLCA4KTtcXG4gXFxuIFxcdC8qIGRlcmVmZXJlbmNlIFRNUF9SRUdfMSAqL1xcbkBAIC02NjEsNyArNjYxLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cXG4gXFx0ICogaWYgKHRhaWxfY2FsbF9pbmZvID09IE1BWF9UQUlMX0NBTExfQ05UKVxcbiBcXHQgKiAgIGdvdG8gb3V0O1xcbiBcXHQgKi9cXG4tXFx0RU1JVChQUENfUkFXX0NNUExXSShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XFxuK1xcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbiBcXHRQUENfQkNDX1NIT1JUKENPTkRfRVEsIG91dCk7XFxuIFxcbiBcXHQvKlxcbkBAIC02OTYsNyArNjk2LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cXG4gXFx0ICogdGFpbF9jYWxsX2luZm8uXFxuIFxcdCAqL1xcbiBcXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XFxuLVxcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xcbitcXHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcXG4gXFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcXG4gXFxuIFxcdC8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovXFxuQEAgLTE3MjYsNyArMTcyNiw4IEBAIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlXFxuIFxcdFxcdFxcdCAqIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBlcGlsb2d1ZS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChpICE9IGZsZW4gLSAxKSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XFxuK1xcdFxcdFxcdFxcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSwgY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR0bXAxX3JlZywgZXhpdF9hZGRyKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcXG5pbmRleCAzNTU4ZmUxMGUyOGNmOS4uMTE0MjhjYWQ1YjJkMmIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXFxuQEAgLTE3OCwxMCArMTc4LDEyIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbyA9IHt9O1xcbiBcXHRfX3UzMiBpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcXG4tXFx0X191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGM7XFxuK1xcdF9fdTMyIGppdGVkX2Z1bmNzLCBsZW4sIHBjLCBkaXNhc21fbGVuO1xcbitcXHRfX3UzMiB0cnVuY19sZW4gPSAwO1xcbiBcXHRfX3UzMiAqZnVuY19sZW5zID0gTlVMTDtcXG4gXFx0RklMRSAqdGV4dF9vdXQgPSBOVUxMO1xcbiBcXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XFxuK1xcdGNoYXIgKnRyaXBsZSA9IE5VTEw7XFxuIFxcdGludCBpLCBlcnIgPSAwO1xcbiBcXG4gXFx0aWYgKCFsbHZtX2luaXRpYWxpemVkKSB7XFxuQEAgLTIyNSw5ICsyMjcsMzAgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcXG4gXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBsYXN0IDggYnl0ZXMgY29udGFpbnMgZHVtbXlfdHJhbXBvbGluZSBhZGRyZXNzIGluIEpJVFxcbitcXHQgKiBvdXRwdXQgb24gNjQtYml0IGFuZCBsYXN0IDQgYnl0ZXMgb24gMzItYml0IHBvd2VycGMsXFxuK1xcdCAqIHdoaWNoIGNhbid0IGRpc2Fzc2VtYmxlIHRvIGEgdmFsaWQgaW5zdHJ1Y3Rpb24uXFxuK1xcdCAqL1xcbitcXHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xcbitcXHRpZiAodHJpcGxlKSB7XFxuK1xcdFxcdGlmIChzdHJzdHIodHJpcGxlLCBcXFwicG93ZXJwYzY0XFxcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXFxcInBwYzY0XFxcIikpXFxuK1xcdFxcdFxcdHRydW5jX2xlbiA9IDg7XFxuK1xcdFxcdGVsc2UgaWYgKHN0cnN0cih0cmlwbGUsIFxcXCJwb3dlcnBjXFxcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXFxcInBwY1xcXCIpKVxcbitcXHRcXHRcXHR0cnVuY19sZW4gPSA0O1xcbitcXHRcXHRMTFZNRGlzcG9zZU1lc3NhZ2UodHJpcGxlKTtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChwYyA9IDAsIGkgPSAwOyBpIFxcdTAwM2Mgaml0ZWRfZnVuY3M7ICsraSkge1xcbitcXG4gXFx0XFx0ZnByaW50Zih0ZXh0X291dCwgXFxcImZ1bmMgIyVkOlxcXFxuXFxcIiwgaSk7XFxuLVxcdFxcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZnVuY19sZW5zW2ldKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSBcXHUwMDNlIHRydW5jX2xlbiA/XFxuK1xcdFxcdFxcdFxcdFxcdGZ1bmNfbGVuc1tpXSAtIHRydW5jX2xlbiA6IDA7XFxuK1xcdFxcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZGlzYXNtX2xlbik7XFxuK1xcbiBcXHRcXHRmcHJpbnRmKHRleHRfb3V0LCBcXFwiXFxcXG5cXFwiKTtcXG4gXFx0XFx0cGMgKz0gZnVuY19sZW5zW2ldO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG5pbmRleCA5ZWViNWIwYjYzZDY5Ny4uY2RjMmEzZGUzMDU0MDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxcbkBAIC0xNTgsNiArMTU4LDcgQEBcXG4gI2RlZmluZSBfX2FyY2hfYXJtNjRcXHRcXHRfX2FyY2goXFxcIkFSTTY0XFxcIilcXG4gI2RlZmluZSBfX2FyY2hfcmlzY3Y2NFxcdFxcdF9fYXJjaChcXFwiUklTQ1Y2NFxcXCIpXFxuICNkZWZpbmUgX19hcmNoX3MzOTB4XFx0XFx0X19hcmNoKFxcXCJzMzkweFxcXCIpXFxuKyNkZWZpbmUgX19hcmNoX3Bvd2VycGM2NFxcdF9fYXJjaChcXFwiUE9XRVJQQzY0XFxcIilcXG4gI2RlZmluZSBfX2NhcHNfdW5wcml2KGNhcHMpXFx0X190ZXN0X3RhZyhcXFwidGVzdF9jYXBzX3VucHJpdj1cXFwiIEVYUEFORF9RVU9URShjYXBzKSlcXG4gI2RlZmluZSBfX2xvYWRfaWZfSklUZWQoKVxcdF9fdGVzdF90YWcoXFxcImxvYWRfbW9kZT1qaXRlZFxcXCIpXFxuICNkZWZpbmUgX19sb2FkX2lmX25vX0pJVGVkKClcXHRfX3Rlc3RfdGFnKFxcXCJsb2FkX21vZGU9bm9faml0ZWRcXFwiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcXG5pbmRleCA0OGZhMzRkMjk1OWY0Ni4uMDlkN2U5MmM4NDkxMDAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXFxuQEAgLTkxLDYgKzkxLDc1IEBAIF9faml0ZWQoXFxcIlxcdHBvcHFcXHQlcmF4XFxcIilcXG4gX19qaXRlZChcXFwiXFx0am1wXFx0e3suKn19XFxcIilcXHRcXHQvKiBqdW1wIHRvIHRhaWwgY2FsbCB0Z3QgICAqL1xcbiBfX2ppdGVkKFxcXCJMMDpcXHRsZWF2ZVxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdHt7KHJldHF8am1wXFx0MHgpfX1cXFwiKVxcdFxcdC8qIHJldHVybiBvciBqdW1wIHRvIHJldGh1bmsgKi9cXG4rX19hcmNoX3Bvd2VycGM2NFxcbisvKiBwcm9ncmFtIGVudHJ5IGZvciBtYWluKCksIHJlZ3VsYXIgZnVuY3Rpb24gcHJvbG9ndWUgKi9cXG4rX19qaXRlZChcXFwiXFx0bm9wXFxcIilcXG4rX19qaXRlZChcXFwiLi4uXFxcIikgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxkIDIsIDE2KDEzKSBhYnNlbnQgd2l0aCBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xcbitfX2ppdGVkKFxcXCJcXHRsaSA5LCAwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkIDksIC04KDEpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bWZsciAwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkIDAsIDE2KDEpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkdSAxLCB7ey4qfX0oMSlcXFwiKVxcbisvKiBsb2FkIGFkZHJlc3MgYW5kIGNhbGwgc3ViKCkgdmlhIGNvdW50IHJlZ2lzdGVyICovXFxuK19faml0ZWQoXFxcIlxcdGxpcyAxMiwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c2xkaSAxMiwgMTIsIDMyXFxcIilcXG4rX19qaXRlZChcXFwiXFx0b3JpcyAxMiwgMTIsIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG9yaSAxMiwgMTIsIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG10Y3RyIDEyXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YmN0cmxcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtclxcdDgsIDNcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsaSA4LCAwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkaSAxLCAxLCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsZCAwLCAxNigxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG10bHIgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1yXFx0MywgOFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJsclxcXCIpXFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcImZ1bmMgIzFcXFwiKVxcbisvKiBzdWJwcm9ncmFtIGVudHJ5IGZvciBzdWIoKSAqL1xcbitfX2ppdGVkKFxcXCJcXHRub3BcXFwiKVxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGQgMiwgMTYoMTMpIGFic2VudCB3aXRoIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXFxuKy8qIHRhaWwgY2FsbCBwcm9sb2d1ZSBmb3Igc3VicHJvZ3JhbSAqL1xcbitfX2ppdGVkKFxcXCJcXHRsZCAxMCwgMCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDksIC04KDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDksIDMzXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YnRcXHR7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZGkgOSwgMTAsIC04XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c3RkIDksIC04KDEpXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bGlzIHt7Lip9fSwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0c2xkaSB7ey4qfX0sIHt7Lip9fSwgMzJcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRvcmlzIHt7Lip9fSwge3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRvcmkge3suKn19LCB7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxpIHt7Lip9fSwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGx3eiA5LCB7ey4qfX0oe3suKn19KVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHNsd2kge3suKn19LCB7ey4qfX0sIDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsd1xcdHt7Lip9fSwgOVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJmXFx0MCwge3suKn19XFxcIilcXG4rLyogYnBmX3RhaWxfY2FsbCBpbXBsZW1lbnRhdGlvbiAqL1xcbitfX2ppdGVkKFxcXCJcXHRsZCA5LCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDksIDMzXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YmZcXHR7ey4qfX0sIHt7Lip9fVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDksIDAoOSlcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsZGlcXHQ5LCAzM1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRpIDksIDksIDFcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtdWxsaSAxMCwge3suKn19LCA4XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkIDEwLCAxMCwge3suKn19XFxcIilcXG4rX19qaXRlZChcXFwiXFx0bGQgMTAsIHt7Lip9fSgxMClcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjbXBsZGlcXHQxMCwgMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRsZCAxMCwge3suKn19KDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZGkgMTAsIDEwLCB7ey4qfX1cXFwiKSAgICAvKiBvZmZzZXQgZGVwZW5kcyBvbiBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xcbitfX2ppdGVkKFxcXCJcXHRtdGN0ciAxMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGxkIDEwLCAtOCgxKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNtcGxkaVxcdDEwLCAzM1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJ0XFx0e3suKn19LCB7ey4qfX1cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRpIDEwLCAxLCAtOFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdHN0ZCA5LCAwKDEwKVxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGJjdHJcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtclxcdDMsIDhcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRibHJcXFwiKVxcbitcXG4gU0VDKFxcXCJ0Y1xcXCIpXFxuIF9fbmFrZWQgaW50IG1haW4odm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuaW5kZXggYWJkYjllNmUzNzEzNjIuLmQ1NTg5MzU1ZWQ5ZTBjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5AQCAtMzc3LDYgKzM3Nyw3IEBAIGVudW0gYXJjaCB7XFxuIFxcdEFSQ0hfQVJNNjRcXHQ9IDB4NCxcXG4gXFx0QVJDSF9SSVNDVjY0XFx0PSAweDgsXFxuIFxcdEFSQ0hfUzM5MFhcXHQ9IDB4MTAsXFxuK1xcdEFSQ0hfUE9XRVJQQzY0XFx0PSAweDIwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXFxuQEAgLTM4OSw2ICszOTAsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcXG4gXFx0cmV0dXJuIEFSQ0hfUklTQ1Y2NDtcXG4gI2VsaWYgZGVmaW5lZChfX3MzOTB4X18pXFxuIFxcdHJldHVybiBBUkNIX1MzOTBYO1xcbisjZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pXFxuK1xcdHJldHVybiBBUkNIX1BPV0VSUEM2NDtcXG4gI2VuZGlmXFxuIFxcdHJldHVybiBBUkNIX1VOS05PV047XFxuIH1cXG5AQCAtNTgwLDYgKzU4Myw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxcbiBcXHRcXHRcXHRcXHRhcmNoID0gQVJDSF9SSVNDVjY0O1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFxcXCJzMzkweFxcXCIpID09IDApIHtcXG4gXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfUzM5MFg7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXFxcIlBPV0VSUEM2NFxcXCIpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfUE9XRVJQQzY0O1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHRQUklOVF9GQUlMKFxcXCJiYWQgYXJjaCBzcGVjOiAnJXMnXFxcXG5cXFwiLCB2YWwpO1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0MzoyMy4xNDk5MjkyMzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjc4NDk0MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzXCIsXG4gICAgXCJicGZfaml0X2VtaXRfZXhpdF9pbnNuXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2VwaWxvZ3VlXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2JvZHlcIixcbiAgICBcImJwZl9qaXRfYnVpbGRfcHJvbG9ndWVcIixcbiAgICBcImJwZl9qaXRfZW1pdF90YWlsX2NhbGxcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvXCIsXG4gICAgXCJicGZfYXJjaF90ZXh0X3Bva2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgUG93ZXJQQywgc3BlY2lmaWNhbGx5IGFkanVzdGluZyB0aGUgY29kZSBnZW5lcmF0aW9uIHBhc3NlcywgZmVudHJ5IHN0dWJzIGFsaWdubWVudCwgYW5kIGVwaWxvZ3VlL2V4aXQgaW5zdHJ1Y3Rpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgQlBGIHByb2dyYW1zIGFyZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQgb24gUG93ZXJQQyBhcmNoaXRlY3R1cmVzLiBGdXp6aW5nIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIFBvd2VyUEMgd2lsbCBoZWxwIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgYW5kIHByZXZlbnQgcG90ZW50aWFsIGNyYXNoZXMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVlNmE1NjQzYjliYjc1M2FlYTc1MjFlZjUyZTg0NzlkNGYyMDc3N2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxOTo0MzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0LmhcbmluZGV4IGYzMmRlODcwNGQ0ZDk2Li40ZGE4YmRlOTJlMWVmZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oXG4rKysgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaFxuQEAgLTE0LDYgKzE0LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BwYy1vcGNvZGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1aWxkX2J1Zy5oXHUwMDNlXG4gXG4rLypcbisgKiBXZSBuZWVkIGF0IGxlYXN0IDIgcGFzc2VzIGZvciBwcm9wZXIgY29kZSBnZW5lcmF0aW9uLCBhbmQgbWF5IG5lZWRcbisgKiBhZGRpdGlvbmFsIHBhc3NlcyBpZiBjb2RlIHNpemUgY2hhbmdlcyBiZXR3ZWVuIHBhc3Nlcy5cbisgKi9cbisjZGVmaW5lIENPREVHRU5fTUlOX1BBU1NFUyAgICAyXG4rI2RlZmluZSBDT0RFR0VOX01BWF9QQVNTRVMgICAgM1xuK1xuICNpZmRlZiBDT05GSUdfUFBDNjRfRUxGX0FCSV9WMVxuICNkZWZpbmUgRlVOQ1RJT05fREVTQ1JfU0laRVx0MjRcbiAjZWxzZVxuQEAgLTE4OCw2ICsxOTUsMTIgQEAgc3RydWN0IGNvZGVnZW5fY29udGV4dCB7XG4gXG4gI2RlZmluZSBicGZfdG9fcHBjKHIpXHQoY3R4LVx1MDAzZWIycFtyXSlcbiBcbisjaWZkZWYgQ09ORklHX1BQQzY0XG4rI2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExESShhLCBpKVxuKyNlbHNlXG4rI2RlZmluZSBQUENfUkFXX0NNUExMSShhLCBpKSAgICBQUENfUkFXX0NNUExXSShhLCBpKVxuKyNlbmRpZlxuK1xuICNpZmRlZiBDT05GSUdfUFBDMzJcbiAjZGVmaW5lIEJQRl9GSVhVUF9MRU5cdDMgLyogVGhyZWUgaW5zdHJ1Y3Rpb25zID1cdTAwM2UgMTIgYnl0ZXMgKi9cbiAjZWxzZVxuQEAgLTIxNCwxMCArMjI3LDExIEBAIGludCBicGZfaml0X2VtaXRfZnVuY19jYWxsX3JlbCh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqXG4gaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuIFx0XHQgICAgICAgdTMyICphZGRycywgaW50IHBhc3MsIGJvb2wgZXh0cmFfcGFzcyk7XG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCk7XG4tdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuK3ZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xuIHZvaWQgYnBmX2ppdF9yZWFsbG9jX3JlZ3Moc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KTtcbi1pbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcik7XG4raW50IGJwZl9qaXRfZW1pdF9leGl0X2luc24odTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRsb25nIGV4aXRfYWRkcik7XG4gdm9pZCBwcmVwYXJlX2Zvcl9mc2Vzc2lvbl9mZW50cnkodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgY29va2llX2NudCxcbiBcdFx0XHRcdFx0XHRcdFx0aW50IGNvb2tpZV9vZmYsIGludCByZXR2YWxfb2ZmKTtcbiB2b2lkIHN0b3JlX2Z1bmNfbWV0YSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggNjM1MWExODdjYTYxZTIuLjQ2YmJmYjZiZTYxMzQwIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTQ5LDExICs0OSwzNyBAQCBhc20gKFxuIFwiXHQucG9wc2VjdGlvblx0XHRcdFx0O1wiXG4gKTtcbiBcbi12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0aW50IG9vbF9zdHViX2lkeCwgbG9uZ19icmFuY2hfc3R1Yl9pZHg7XG4rXHRpbnQgc3R1Yl9zejtcbiBcbiBcdC8qXG4rXHQgKiBUaGUgZHVtbXlfdHJhbXBfYWRkciBmaWVsZCBpcyBwbGFjZWQgYXQgYm90dG9tIG9mIExvbmcgYnJhbmNoIHN0dWIuXG4rXHQgKiBJbiB0aGUgZmluYWwgcGFzcywgYWxpZ24gdGhlIG1pcy1hbGlnbmVkIGR1bW15X3RyYW1wX2FkZHIgZmllbGRcbitcdCAqIGluIHRoZSBmaW1hZ2UuIFRoZSBhbGlnbm1lbnQgTk9QIG11c3QgYXBwZWFyIGJlZm9yZSBPT0wgc3R1YixcbitcdCAqIHRvIG1ha2Ugb29sX3N0dWJfaWR4IFx1MDAyNiBsb25nX2JyYW5jaF9zdHViX2lkeCBjb25zdGFudCBmcm9tIGVuZC5cbitcdCAqXG4rXHQgKiBkdW1teV90cmFtcF9hZGRyIG11c3QgYmUgOC1ieXRlIGFsaWduZWQgZm9yIGxvYWQtcmVnaXN0ZXJcbitcdCAqIGNvbXBhdGliaWxpdHkuIFRoZSBmaW1hZ2UgY2FuIGJlIG5vbiA4LWJ5dGUgYWxpZ25lZCwgc28gZmluYWxcbitcdCAqIGFsaWdubWVudCBkZXBlbmRzIG9uIHN0YXJ0IG9mIGZpbWFnZSBhbmQgdGhlIHN0dWIncyBpbnN0cnVjdGlvblxuK1x0ICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoXG4rXHQgKiBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgb3IgMTAgaW5zdHJ1Y3Rpb25zICh3aXRob3V0KVxuK1x0ICogYmVmb3JlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQuIEVtaXQgYSBOT1AgaWYgdGhlIGFkZHJlc3Mgb2ZcbitcdCAqIGR1bW15X3RyYW1wX2FkZHIgaXMgbm9uIGFsaWduZWQuXG4rXHQgKlxuK1x0ICogSW4gcGFzcz0wIHdoZW4gaW1hZ2U9PU5VTEwsIGNvbnNlcnZhdGl2ZWx5IGFjY291bnQgZm9yIHNwYWNlXG4rXHQgKiByZXF1aXJlZCB0byBhY2NvbW1vZGF0ZSBhbGlnbm1lbnQgTk9QLiBJbiBjYXNlIGZpbmFsIHBhc3Mgc2tpcHNcbitcdCAqIGVtaXR0aW5nIGFsaWdubWVudCBOT1AsIHRoZSBpbWFnZSBidWZmZXIgaGF2ZSA0IHNwYXJlIGJ5dGVzIGFuZFxuK1x0ICogaml0ZWRfbGVuIHNpZ25pZmllcyBjb3JyZWN0IHByb2dyYW0gc2l6ZS5cbitcdCAqL1xuK1xuK1x0c3R1Yl9zeiA9IElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpID8gNDQgOiA0MDtcbitcdGlmICghaW1hZ2UgfHwgIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZmltYWdlICsgY3R4LVx1MDAzZWlkeCo0ICsgc3R1Yl9zeiwgU1pMKSlcbitcdFx0RU1JVChQUENfUkFXX05PUCgpKTtcbitcbitcdC8qXG4rXHQgKiAgICAgIG5vcCAgICAgLy8gb3B0aW9uYWwsIGZvciBhbGlnbm1lbnQgb2YgZHVtbXlfdHJhbXBfYWRkclxuIFx0ICogT3V0LW9mLWxpbmUgc3R1YjpcbiBcdCAqXHRtZmxyXHRyMFxuIFx0ICpcdFtifGJsXVx0dHJhbXBcbkBAIC03MCw0NCArOTYsNDYgQEAgdm9pZCBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXG4gXHQvKlxuIFx0ICogTG9uZyBicmFuY2ggc3R1Yjpcbi1cdCAqXHQubG9uZ1x0XHUwMDNjZHVtbXlfdHJhbXBfYWRkclx1MDAzZVxuIFx0ICpcdG1mbHJcdHIxMVxuIFx0ICpcdGJjbFx0MjAsMzEsJCs0XG4tXHQgKlx0bWZsclx0cjEyXG4tXHQgKlx0bGRcdHIxMiwgLTgtU1pMKHIxMilcbitcdCAqXHRtZmxyXHRyMTJcdC8vIGxyL3IxMiBzdG9yZXMgcGMgb2YgY3VycmVudCh0aGlzKSBpbnN0LlxuK1x0ICpcdGxkXHRyMTIsIDIwKHIxMikgLy8gb2Zmc2V0KGR1bW15X3RyYW1wX2FkZHIpIGZyb20gcHJldiBpbnN0LiBpcyAyMFxuIFx0ICpcdG10Y3RyXHRyMTJcbi1cdCAqXHRtdGxyXHRyMTEgLy8gbmVlZGVkIHRvIHJldGFpbiBmdHJhY2UgQUJJXG4rXHQgKlx0bXRsclx0cjExXHQvLyBuZWVkZWQgdG8gcmV0YWluIGZ0cmFjZSBBQklcbiBcdCAqXHRiY3RyXG4rXHQgKlx0LmxvbmdcdFx1MDAzY2R1bW15X3RyYW1wX2FkZHJcdTAwM2UgIC8vIDgtYnl0ZSBhbGlnbmVkXG4gXHQgKi9cbi1cdGlmIChpbWFnZSlcbi1cdFx0KigodW5zaWduZWQgbG9uZyAqKVx1MDAyNmltYWdlW2N0eC1cdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xuLVx0Y3R4LVx1MDAzZWlkeCArPSBTWkwgLyA0O1xuIFx0bG9uZ19icmFuY2hfc3R1Yl9pZHggPSBjdHgtXHUwMDNlaWR4O1xuIFx0RU1JVChQUENfUkFXX01GTFIoX1IxMSkpO1xuIFx0RU1JVChQUENfUkFXX0JDTDQoKSk7XG4gXHRFTUlUKFBQQ19SQVdfTUZMUihfUjEyKSk7XG4tXHRFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgLTgtU1pMKSk7XG4rXHRFTUlUKFBQQ19SQVdfTEwoX1IxMiwgX1IxMiwgMjApKTtcbiBcdEVNSVQoUFBDX1JBV19NVENUUihfUjEyKSk7XG4gXHRFTUlUKFBQQ19SQVdfTVRMUihfUjExKSk7XG4gXHRFTUlUKFBQQ19SQVdfQkNUUigpKTtcbiBcbitcdGlmIChpbWFnZSlcbitcdFx0KigodW5zaWduZWQgbG9uZyAqKVx1MDAyNmltYWdlW2N0eC1cdTAwM2VpZHhdKSA9ICh1bnNpZ25lZCBsb25nKWR1bW15X3RyYW1wO1xuK1xuK1x0Y3R4LVx1MDAzZWlkeCArPSBTWkwgLyA0O1xuK1xuIFx0aWYgKCFicGZfaml0X29vbF9zdHViKSB7XG4gXHRcdGJwZl9qaXRfb29sX3N0dWIgPSAoY3R4LVx1MDAzZWlkeCAtIG9vbF9zdHViX2lkeCkgKiA0O1xuIFx0XHRicGZfaml0X2xvbmdfYnJhbmNoX3N0dWIgPSAoY3R4LVx1MDAzZWlkeCAtIGxvbmdfYnJhbmNoX3N0dWJfaWR4KSAqIDQ7XG4gXHR9XG4gfVxuIFxuLWludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgaW50IHRtcF9yZWcsIGxvbmcgZXhpdF9hZGRyKVxuK2ludCBicGZfaml0X2VtaXRfZXhpdF9pbnNuKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4rXHRcdFx0XHRcdFx0XHRpbnQgdG1wX3JlZywgbG9uZyBleGl0X2FkZHIpXG4ge1xuLVx0aWYgKCFleGl0X2FkZHIgfHwgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuK1x0aWYgKGV4aXRfYWRkciBcdTAwMjZcdTAwMjYgaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShleGl0X2FkZHIgLSAobG9uZykoY3R4LVx1MDAzZWlkeCAqIDQpKSkge1xuIFx0XHRQUENfSk1QKGV4aXRfYWRkcik7XG4tXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKSB7XG4tXHRcdGlmIChXQVJOX09OKCFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyIC0gKGN0eC1cdTAwM2VpZHggKiA0KSkpKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgXHUwMDI2XHUwMDI2IGlzX29mZnNldF9pbl9icmFuY2hfcmFuZ2UoXG4rXHRcdFx0KGxvbmcpKGN0eC1cdTAwM2VhbHRfZXhpdF9hZGRyKSAtIChsb25nKShjdHgtXHUwMDNlaWR4ICogNCkpKSB7XG4gXHRcdFBQQ19KTVAoY3R4LVx1MDAzZWFsdF9leGl0X2FkZHIpO1xuIFx0fSBlbHNlIHtcbiBcdFx0Y3R4LVx1MDAzZWFsdF9leGl0X2FkZHIgPSBjdHgtXHUwMDNlaWR4ICogNDtcbi1cdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgY3R4KTtcbitcdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShpbWFnZSwgZmltYWdlLCBjdHgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc0LDYgKzMwMiw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHQgKi9cbiBcdGlmIChjZ2N0eC5zZWVuIFx1MDAyNiBTRUVOX1RBSUxDQUxMIHx8ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKChsb25nKWNnY3R4LmlkeCAqIDQpKSB7XG4gXHRcdGNnY3R4LmlkeCA9IDA7XG4rXHRcdGNnY3R4LmFsdF9leGl0X2FkZHIgPSAwO1xuIFx0XHRpZiAoYnBmX2ppdF9idWlsZF9ib2R5KGZwLCBOVUxMLCBOVUxMLCBcdTAwMjZjZ2N0eCwgYWRkcnMsIDAsIGZhbHNlKSlcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG5AQCAtMjg2LDcgKzMxNSw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHQgKi9cbiBcdGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoTlVMTCwgXHUwMDI2Y2djdHgpO1xuIFx0YWRkcnNbZnAtXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XG4tXHRicGZfaml0X2J1aWxkX2VwaWxvZ3VlKE5VTEwsIFx1MDAyNmNnY3R4KTtcbitcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoTlVMTCwgTlVMTCwgXHUwMDI2Y2djdHgpO1xuIFxuIFx0Zml4dXBfbGVuID0gZnAtXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMgKiBCUEZfRklYVVBfTEVOICogNDtcbiBcdGV4dGFibGVfbGVuID0gZnAtXHUwMDNlYXV4LVx1MDAzZW51bV9leGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSk7XG5AQCAtMzA2LDggKzMzNSwxMCBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0Y29kZV9iYXNlID0gKHUzMiAqKShpbWFnZSArIEZVTkNUSU9OX0RFU0NSX1NJWkUpO1xuIFx0ZmNvZGVfYmFzZSA9ICh1MzIgKikoZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4tXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMiAqL1xuLVx0Zm9yIChwYXNzID0gMTsgcGFzcyBcdTAwM2MgMzsgcGFzcysrKSB7XG4rXHQvKiBDb2RlIGdlbmVyYXRpb24gcGFzc2VzIDEtMissIGxvb3AgdW50aWwgcHJvZ3JhbSBzaXplIGNvbnZlcmdlcy4gKi9cbitcdGZvciAocGFzcyA9IDE7IHBhc3MgXHUwMDNjPSBDT0RFR0VOX01BWF9QQVNTRVM7IHBhc3MrKykge1xuK1x0XHR1MzIgcHJldl9wcm9nbGVuID0gcHJvZ2xlbjtcbitcbiBcdFx0LyogTm93IGJ1aWxkIHRoZSBwcm9sb2d1ZSwgYm9keSBjb2RlIFx1MDAyNiBlcGlsb2d1ZSBmb3IgcmVhbC4gKi9cbiBcdFx0Y2djdHguaWR4ID0gMDtcbiBcdFx0Y2djdHguYWx0X2V4aXRfYWRkciA9IDA7XG5AQCAtMzE4LDExICszNDksMjYgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdFx0XHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4gXHRcdH1cbi1cdFx0YnBmX2ppdF9idWlsZF9lcGlsb2d1ZShjb2RlX2Jhc2UsIFx1MDAyNmNnY3R4KTtcbitcdFx0YWRkcnNbZnAtXHUwMDNlbGVuXSA9IGNnY3R4LmlkeCAqIDQ7XG4rXHRcdGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoY29kZV9iYXNlLCBmY29kZV9iYXNlLCBcdTAwMjZjZ2N0eCk7XG4rXG4rXHRcdHByb2dsZW4gPSBjZ2N0eC5pZHggKiA0O1xuIFxuIFx0XHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG4gXHRcdFx0cHJfaW5mbyhcIlBhc3MgJWQ6IHNocmluayA9ICVkLCBzZWVuID0gMHgleFxcblwiLCBwYXNzLFxuLVx0XHRcdFx0cHJvZ2xlbiAtIChjZ2N0eC5pZHggKiA0KSwgY2djdHguc2Vlbik7XG4rXHRcdFx0XHRwcmV2X3Byb2dsZW4gLSBwcm9nbGVuLCBjZ2N0eC5zZWVuKTtcbitcbitcdFx0LyogQ2hlY2sgaWYgcHJvZ3JhbSBzaXplIGhhcyBjb252ZXJnZWQsIGJ1dCBlbnN1cmUgbWluaW11bSBwYXNzZXMgKi9cbitcdFx0aWYgKHBhc3MgXHUwMDNlPSBDT0RFR0VOX01JTl9QQVNTRVMgXHUwMDI2XHUwMDI2IHByb2dsZW4gPT0gcHJldl9wcm9nbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAocGFzcyA9PSBDT0RFR0VOX01BWF9QQVNTRVMgXHUwMDI2XHUwMDI2IHByb2dsZW4gIT0gcHJldl9wcm9nbGVuKSB7XG4rXHRcdFx0cHJfZXJyKFwiQlBGIEpJVDogUHJvZ3JhbSBkaWQgbm90IGNvbnZlcmdlIGFmdGVyICVkIHBhc3Nlc1xcblwiLFxuK1x0XHRcdFx0XHRcdFx0XHRDT0RFR0VOX01BWF9QQVNTRVMpO1xuK1x0XHRcdGJwZl9hcmNoX3RleHRfY29weShcdTAwMjZmaGRyLVx1MDAzZXNpemUsIFx1MDAyNmhkci1cdTAwM2VzaXplLCBzaXplb2YoaGRyLVx1MDAzZXNpemUpKTtcbitcdFx0XHRicGZfaml0X2JpbmFyeV9wYWNrX2ZyZWUoZmhkciwgaGRyKTtcbitcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbkBAIC0zNTcsNyArNDAzLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcbiBcdFx0XHRcdCh2b2lkICopZmltYWdlICsgRlVOQ1RJT05fREVTQ1JfU0laRSk7XG4gXG4gb3V0X2FkZHJzOlxuLVx0XHRpZiAoIWltYWdlIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuK1x0XHRpZiAoIWZwLVx1MDAzZWppdGVkIFx1MDAyNlx1MDAyNiBwcml2X3N0YWNrX3B0cikge1xuIFx0XHRcdGZwLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3B0ciA9IE5VTEw7XG4gXHRcdFx0ZnJlZV9wZXJjcHUocHJpdl9zdGFja19wdHIpO1xuIFx0XHR9XG5AQCAtNzM0LDcgKzc4MCw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRlXG4gXHRcdCAqIFNldHRpbmcgdGhlIHRhaWxfY2FsbF9pbmZvIGluIHRyYW1wb2xpbmUncyBmcmFtZVxuIFx0XHQgKiBkZXBlbmRpbmcgb24gaWYgcHJldmlvdXMgZnJhbWUgaGFkIHZhbHVlIG9yIHJlZmVyZW5jZS5cbiBcdFx0ICovXG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koX1IzLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0XHRFTUlUKFBQQ19SQVdfQ01QTExJKF9SMywgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoX1IzLCBfUjQsIC1CUEZfUFBDX1RBSUxDQUxMKSk7XG4gXG5AQCAtMTI2MCw2ICsxMzA2LDcgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcbiAgKiBicGZfZnVuYzpcbiAgKlx0W25vcHxiXVx0b29sX3N0dWJcbiAgKiAyLiBPdXQtb2YtbGluZSBzdHViOlxuKyAqXHRub3BcdC8vIG9wdGlvbmFsIG5vcCBmb3IgYWxpZ25tZW50XG4gICogb29sX3N0dWI6XG4gICpcdG1mbHJcdHIwXG4gICpcdFtifGJsXVx0XHUwMDNjYnBmX3Byb2dcdTAwM2UvXHUwMDNjbG9uZ19icmFuY2hfc3R1Ylx1MDAzZVxuQEAgLTEyNjcsMTQgKzEzMTQsMTQgQEAgc3RhdGljIHZvaWQgZG9faXN5bmModm9pZCAqaW5mbyBfX21heWJlX3VudXNlZClcbiAgKlx0Ylx0YnBmX2Z1bmMgKyA0XG4gICogMy4gTG9uZyBicmFuY2ggc3R1YjpcbiAgKiBsb25nX2JyYW5jaF9zdHViOlxuLSAqXHQubG9uZ1x0XHUwMDNjYnJhbmNoX2FkZHJcdTAwM2UvXHUwMDNjZHVtbXlfdHJhbXBcdTAwM2VcbiAgKlx0bWZsclx0cjExXG4gICpcdGJjbFx0MjAsMzEsJCs0XG4gICpcdG1mbHJcdHIxMlxuLSAqXHRsZFx0cjEyLCAtMTYocjEyKVxuKyAqXHRsZFx0cjEyLCAyMChyMTIpXG4gICpcdG10Y3RyXHRyMTJcbiAgKlx0bXRsclx0cjExIC8vIG5lZWRlZCB0byByZXRhaW4gZnRyYWNlIEFCSVxuICAqXHRiY3RyXG4rICpcdC5sb25nXHRcdTAwM2NicmFuY2hfYWRkclx1MDAzZS9cdTAwM2NkdW1teV90cmFtcFx1MDAzZVxuICAqXG4gICogZHVtbXlfdHJhbXAgaXMgdXNlZCB0byByZWR1Y2Ugc3luY2hyb25pemF0aW9uIHJlcXVpcmVtZW50cy5cbiAgKlxuQEAgLTEzNzYsMTAgKzE0MjMsMTIgQEAgaW50IGJwZl9hcmNoX3RleHRfcG9rZSh2b2lkICppcCwgZW51bSBicGZfdGV4dF9wb2tlX3R5cGUgb2xkX3QsXG4gXHQgKiAxLiBVcGRhdGUgdGhlIGFkZHJlc3MgaW4gdGhlIGxvbmcgYnJhbmNoIHN0dWI6XG4gXHQgKiBJZiBuZXdfYWRkciBpcyBvdXQgb2YgcmFuZ2UsIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhlIGxvbmcgYnJhbmNoIHN0dWIsIHNvIHBhdGNoIG5ld19hZGRyXG4gXHQgKiBoZXJlLiBPdGhlcndpc2UsIHJldmVydCB0byBkdW1teV90cmFtcCwgYnV0IG9ubHkgaWYgd2UgaGFkIHBhdGNoZWQgb2xkX2FkZHIgaGVyZS5cbitcdCAqXG4rXHQgKiBkdW1teV90cmFtcF9hZGRyIG1vdmVkIHRvIGJvdHRvbSBvZiBsb25nIGJyYW5jaCBzdHViLlxuIFx0ICovXG4gXHRpZiAoKG5ld19hZGRyIFx1MDAyNlx1MDAyNiAhaXNfb2Zmc2V0X2luX2JyYW5jaF9yYW5nZShuZXdfYWRkciAtIGlwKSkgfHxcbiBcdCAgICAob2xkX2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG9sZF9hZGRyIC0gaXApKSlcbi1cdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gYnBmX2ppdF9sb25nX2JyYW5jaF9zdHViIC0gU1pMKSxcbitcdFx0cmV0ID0gcGF0Y2hfdWxvbmcoKHZvaWQgKikoYnBmX2Z1bmNfZW5kIC0gU1pMKSwgLyogU1pMOiBkdW1teV90cmFtcF9hZGRyIG9mZnNldCAqL1xuIFx0XHRcdFx0ICAobmV3X2FkZHIgXHUwMDI2XHUwMDI2ICFpc19vZmZzZXRfaW5fYnJhbmNoX3JhbmdlKG5ld19hZGRyIC0gaXApKSA/XG4gXHRcdFx0XHQgICh1bnNpZ25lZCBsb25nKW5ld19hZGRyIDogKHVuc2lnbmVkIGxvbmcpZHVtbXlfdHJhbXApO1xuIFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IGJmZGM1MDc0MGRhOGU3Li5mNWI5NDQxY2Y0NmFhNyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jXG5AQCAtMjI5LDcgKzIyOSw3IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfZW1pdF9jb21tb25fZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4XG4gXG4gfVxuIFxuLXZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4rdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4ge1xuIFx0RU1JVChQUENfUkFXX01SKF9SMywgYnBmX3RvX3BwYyhCUEZfUkVHXzApKSk7XG4gXG5AQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXG4gXHRFTUlUKFBQQ19SQVdfQkxSKCkpO1xuIFxuLVx0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGN0eCk7XG4rXHRicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVicyhpbWFnZSwgZmltYWdlLCBjdHgpO1xuIH1cbiBcbiAvKiBSZWxhdGl2ZSBvZmZzZXQgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiBmaW5hbCBpbWFnZSBsb2NhdGlvbiAqL1xuQEAgLTExNDksNyArMTE0OSw4IEBAIGludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlXG4gXHRcdFx0ICogd2UnbGwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGVwaWxvZ3VlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChpICE9IGZsZW4gLSAxKSB7XG4tXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBjdHgsIF9SMCwgZXhpdF9hZGRyKTtcbitcdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGZpbWFnZSxcbitcdFx0XHRcdFx0XHRcdFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGRiMzY0ZDkwODNlNzI1Li4wODYwODRhYmIxODRhNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuY1xuKysrIGIvYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXG4gXHRcdCAqL1xuIFx0XHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIDApKTtcbiBcdFx0RU1JVChQUENfUkFXX0xEKGJwZl90b19wcGMoVE1QX1JFR18xKSwgYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCAtKEJQRl9QUENfVEFJTENBTEwpKSk7XG4tXHRcdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0XHRFTUlUKFBQQ19SQVdfQ01QTERJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbiBcdFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcdFx0RU1JVChQUENfUkFXX0FEREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBicGZfdG9fcHBjKFRNUF9SRUdfMiksXG4gXHRcdFx0XHRcdFx0XHRcdC0oQlBGX1BQQ19UQUlMQ0FMTCkpKTtcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9lbWl0X2NvbW1vbl9lcGlsb2d1ZSh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHhcbiBcdH1cbiB9XG4gXG4tdm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbit2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcbiB7XG4gXHRicGZfaml0X2VtaXRfY29tbW9uX2VwaWxvZ3VlKGltYWdlLCBjdHgpO1xuIFxuQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4KVxuIFxuIFx0RU1JVChQUENfUkFXX0JMUigpKTtcbiBcbi1cdGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKGltYWdlLCBjdHgpO1xuK1x0YnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnMoaW1hZ2UsIGZpbWFnZSwgY3R4KTtcbiB9XG4gXG4gLypcbkBAIC02NTEsNyArNjUxLDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdFBQQ19CQ0NfU0hPUlQoQ09ORF9HRSwgb3V0KTtcbiBcbiBcdEVNSVQoUFBDX1JBV19MRChicGZfdG9fcHBjKFRNUF9SRUdfMSksIF9SMSwgYnBmX2ppdF9zdGFja190YWlsY2FsbGluZm9fb2Zmc2V0KGN0eCkpKTtcbi1cdEVNSVQoUFBDX1JBV19DTVBMV0koYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuK1x0RU1JVChQUENfUkFXX0NNUExESShicGZfdG9fcHBjKFRNUF9SRUdfMSksIE1BWF9UQUlMX0NBTExfQ05UKSk7XG4gXHRQUENfQkNDX0NPTlNUX1NIT1JUKENPTkRfTEUsIDgpO1xuIFxuIFx0LyogZGVyZWZlcmVuY2UgVE1QX1JFR18xICovXG5AQCAtNjYxLDcgKzY2MSw3IEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9lbWl0X3RhaWxfY2FsbCh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsIHUzMiBvXG4gXHQgKiBpZiAodGFpbF9jYWxsX2luZm8gPT0gTUFYX1RBSUxfQ0FMTF9DTlQpXG4gXHQgKiAgIGdvdG8gb3V0O1xuIFx0ICovXG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18xKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzEpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19TSE9SVChDT05EX0VRLCBvdXQpO1xuIFxuIFx0LypcbkBAIC02OTYsNyArNjk2LDcgQEAgc3RhdGljIGludCBicGZfaml0X2VtaXRfdGFpbF9jYWxsKHUzMiAqaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCwgdTMyIG9cbiBcdCAqIHRhaWxfY2FsbF9pbmZvLlxuIFx0ICovXG4gXHRFTUlUKFBQQ19SQVdfTEQoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBfUjEsIGJwZl9qaXRfc3RhY2tfdGFpbGNhbGxpbmZvX29mZnNldChjdHgpKSk7XG4tXHRFTUlUKFBQQ19SQVdfQ01QTFdJKGJwZl90b19wcGMoVE1QX1JFR18yKSwgTUFYX1RBSUxfQ0FMTF9DTlQpKTtcbitcdEVNSVQoUFBDX1JBV19DTVBMREkoYnBmX3RvX3BwYyhUTVBfUkVHXzIpLCBNQVhfVEFJTF9DQUxMX0NOVCkpO1xuIFx0UFBDX0JDQ19DT05TVF9TSE9SVChDT05EX0dULCA4KTtcbiBcbiBcdC8qIEZpcnN0IGdldCBhZGRyZXNzIG9mIHRhaWxfY2FsbF9pbmZvICovXG5AQCAtMTcyNiw3ICsxNzI2LDggQEAgaW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVcbiBcdFx0XHQgKiB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZXBpbG9ndWUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcbi1cdFx0XHRcdHJldCA9IGJwZl9qaXRfZW1pdF9leGl0X2luc24oaW1hZ2UsIGN0eCwgdG1wMV9yZWcsIGV4aXRfYWRkcik7XG4rXHRcdFx0XHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsIGN0eCxcbitcdFx0XHRcdFx0XHRcdFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XG4gXHRcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvaml0X2Rpc2FzbV9oZWxwZXJzLmNcbmluZGV4IDM1NThmZTEwZTI4Y2Y5Li4xMTQyOGNhZDViMmQyYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9qaXRfZGlzYXNtX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2ppdF9kaXNhc21faGVscGVycy5jXG5AQCAtMTc4LDEwICsxNzgsMTIgQEAgaW50IGdldF9qaXRlZF9wcm9ncmFtX3RleHQoaW50IGZkLCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9zeilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvID0ge307XG4gXHRfX3UzMiBpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbi1cdF9fdTMyIGppdGVkX2Z1bmNzLCBsZW4sIHBjO1xuK1x0X191MzIgaml0ZWRfZnVuY3MsIGxlbiwgcGMsIGRpc2FzbV9sZW47XG4rXHRfX3UzMiB0cnVuY19sZW4gPSAwO1xuIFx0X191MzIgKmZ1bmNfbGVucyA9IE5VTEw7XG4gXHRGSUxFICp0ZXh0X291dCA9IE5VTEw7XG4gXHR1aW50OF90ICppbWFnZSA9IE5VTEw7XG4rXHRjaGFyICp0cmlwbGUgPSBOVUxMO1xuIFx0aW50IGksIGVyciA9IDA7XG4gXG4gXHRpZiAoIWxsdm1faW5pdGlhbGl6ZWQpIHtcbkBAIC0yMjUsOSArMjI3LDMwIEBAIGludCBnZXRfaml0ZWRfcHJvZ3JhbV90ZXh0KGludCBmZCwgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfc3opXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQgIzJcIikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIGxhc3QgOCBieXRlcyBjb250YWlucyBkdW1teV90cmFtcG9saW5lIGFkZHJlc3MgaW4gSklUXG4rXHQgKiBvdXRwdXQgb24gNjQtYml0IGFuZCBsYXN0IDQgYnl0ZXMgb24gMzItYml0IHBvd2VycGMsXG4rXHQgKiB3aGljaCBjYW4ndCBkaXNhc3NlbWJsZSB0byBhIHZhbGlkIGluc3RydWN0aW9uLlxuK1x0ICovXG4rXHR0cmlwbGUgPSBMTFZNR2V0RGVmYXVsdFRhcmdldFRyaXBsZSgpO1xuK1x0aWYgKHRyaXBsZSkge1xuK1x0XHRpZiAoc3Ryc3RyKHRyaXBsZSwgXCJwb3dlcnBjNjRcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXCJwcGM2NFwiKSlcbitcdFx0XHR0cnVuY19sZW4gPSA4O1xuK1x0XHRlbHNlIGlmIChzdHJzdHIodHJpcGxlLCBcInBvd2VycGNcIikgfHwgc3Ryc3RyKHRyaXBsZSwgXCJwcGNcIikpXG4rXHRcdFx0dHJ1bmNfbGVuID0gNDtcbitcdFx0TExWTURpc3Bvc2VNZXNzYWdlKHRyaXBsZSk7XG4rXHR9XG4rXG4gXHRmb3IgKHBjID0gMCwgaSA9IDA7IGkgXHUwMDNjIGppdGVkX2Z1bmNzOyArK2kpIHtcbitcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCJmdW5jICMlZDpcXG5cIiwgaSk7XG4tXHRcdGRpc2FzbV9vbmVfZnVuYyh0ZXh0X291dCwgaW1hZ2UgKyBwYywgZnVuY19sZW5zW2ldKTtcbitcdFx0LypcbitcdFx0ICogRGlzYWJsZWQgSklUIGhhdmUgemVybyBmdW5jX2xlbnMsIGhlbmNlIHVuZGVyZmxvd1xuK1x0XHQgKi9cbitcdFx0ZGlzYXNtX2xlbiA9IGZ1bmNfbGVuc1tpXSBcdTAwM2UgdHJ1bmNfbGVuID9cbitcdFx0XHRcdFx0ZnVuY19sZW5zW2ldIC0gdHJ1bmNfbGVuIDogMDtcbitcdFx0ZGlzYXNtX29uZV9mdW5jKHRleHRfb3V0LCBpbWFnZSArIHBjLCBkaXNhc21fbGVuKTtcbitcbiBcdFx0ZnByaW50Zih0ZXh0X291dCwgXCJcXG5cIik7XG4gXHRcdHBjICs9IGZ1bmNfbGVuc1tpXTtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCA5ZWViNWIwYjYzZDY5Ny4uY2RjMmEzZGUzMDU0MDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0xNTgsNiArMTU4LDcgQEBcbiAjZGVmaW5lIF9fYXJjaF9hcm02NFx0XHRfX2FyY2goXCJBUk02NFwiKVxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcdFx0X19hcmNoKFwiUklTQ1Y2NFwiKVxuICNkZWZpbmUgX19hcmNoX3MzOTB4XHRcdF9fYXJjaChcInMzOTB4XCIpXG4rI2RlZmluZSBfX2FyY2hfcG93ZXJwYzY0XHRfX2FyY2goXCJQT1dFUlBDNjRcIilcbiAjZGVmaW5lIF9fY2Fwc191bnByaXYoY2FwcylcdF9fdGVzdF90YWcoXCJ0ZXN0X2NhcHNfdW5wcml2PVwiIEVYUEFORF9RVU9URShjYXBzKSlcbiAjZGVmaW5lIF9fbG9hZF9pZl9KSVRlZCgpXHRfX3Rlc3RfdGFnKFwibG9hZF9tb2RlPWppdGVkXCIpXG4gI2RlZmluZSBfX2xvYWRfaWZfbm9fSklUZWQoKVx0X190ZXN0X3RhZyhcImxvYWRfbW9kZT1ub19qaXRlZFwiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl90YWlsY2FsbF9qaXQuY1xuaW5kZXggNDhmYTM0ZDI5NTlmNDYuLjA5ZDdlOTJjODQ5MTAwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3RhaWxjYWxsX2ppdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdGFpbGNhbGxfaml0LmNcbkBAIC05MSw2ICs5MSw3NSBAQCBfX2ppdGVkKFwiXHRwb3BxXHQlcmF4XCIpXG4gX19qaXRlZChcIlx0am1wXHR7ey4qfX1cIilcdFx0LyoganVtcCB0byB0YWlsIGNhbGwgdGd0ICAgKi9cbiBfX2ppdGVkKFwiTDA6XHRsZWF2ZVwiKVxuIF9faml0ZWQoXCJcdHt7KHJldHF8am1wXHQweCl9fVwiKVx0XHQvKiByZXR1cm4gb3IganVtcCB0byByZXRodW5rICovXG4rX19hcmNoX3Bvd2VycGM2NFxuKy8qIHByb2dyYW0gZW50cnkgZm9yIG1haW4oKSwgcmVndWxhciBmdW5jdGlvbiBwcm9sb2d1ZSAqL1xuK19faml0ZWQoXCJcdG5vcFwiKVxuK19faml0ZWQoXCIuLi5cIikgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxkIDIsIDE2KDEzKSBhYnNlbnQgd2l0aCBDT05GSUdfUFBDX0tFUk5FTF9QQ1JFTCAqL1xuK19faml0ZWQoXCJcdGxpIDksIDBcIilcbitfX2ppdGVkKFwiXHRzdGQgOSwgLTgoMSlcIilcbitfX2ppdGVkKFwiXHRtZmxyIDBcIilcbitfX2ppdGVkKFwiXHRzdGQgMCwgMTYoMSlcIilcbitfX2ppdGVkKFwiXHRzdGR1IDEsIHt7Lip9fSgxKVwiKVxuKy8qIGxvYWQgYWRkcmVzcyBhbmQgY2FsbCBzdWIoKSB2aWEgY291bnQgcmVnaXN0ZXIgKi9cbitfX2ppdGVkKFwiXHRsaXMgMTIsIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdHNsZGkgMTIsIDEyLCAzMlwiKVxuK19faml0ZWQoXCJcdG9yaXMgMTIsIDEyLCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRvcmkgMTIsIDEyLCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRtdGN0ciAxMlwiKVxuK19faml0ZWQoXCJcdGJjdHJsXCIpXG4rX19qaXRlZChcIlx0bXJcdDgsIDNcIilcbitfX2ppdGVkKFwiXHRsaSA4LCAwXCIpXG4rX19qaXRlZChcIlx0YWRkaSAxLCAxLCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsZCAwLCAxNigxKVwiKVxuK19faml0ZWQoXCJcdG10bHIgMFwiKVxuK19faml0ZWQoXCJcdG1yXHQzLCA4XCIpXG4rX19qaXRlZChcIlx0YmxyXCIpXG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJmdW5jICMxXCIpXG4rLyogc3VicHJvZ3JhbSBlbnRyeSBmb3Igc3ViKCkgKi9cbitfX2ppdGVkKFwiXHRub3BcIilcbitfX2ppdGVkKFwiLi4uXCIpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZCAyLCAxNigxMykgYWJzZW50IHdpdGggQ09ORklHX1BQQ19LRVJORUxfUENSRUwgKi9cbisvKiB0YWlsIGNhbGwgcHJvbG9ndWUgZm9yIHN1YnByb2dyYW0gKi9cbitfX2ppdGVkKFwiXHRsZCAxMCwgMCgxKVwiKVxuK19faml0ZWQoXCJcdGxkIDksIC04KDEwKVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0OSwgMzNcIilcbitfX2ppdGVkKFwiXHRidFx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRhZGRpIDksIDEwLCAtOFwiKVxuK19faml0ZWQoXCJcdHN0ZCA5LCAtOCgxKVwiKVxuK19faml0ZWQoXCJcdGxpcyB7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdHNsZGkge3suKn19LCB7ey4qfX0sIDMyXCIpXG4rX19qaXRlZChcIlx0b3JpcyB7ey4qfX0sIHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0b3JpIHt7Lip9fSwge3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRsaSB7ey4qfX0sIDBcIilcbitfX2ppdGVkKFwiXHRsd3ogOSwge3suKn19KHt7Lip9fSlcIilcbitfX2ppdGVkKFwiXHRzbHdpIHt7Lip9fSwge3suKn19LCAwXCIpXG4rX19qaXRlZChcIlx0Y21wbHdcdHt7Lip9fSwgOVwiKVxuK19faml0ZWQoXCJcdGJmXHQwLCB7ey4qfX1cIilcbisvKiBicGZfdGFpbF9jYWxsIGltcGxlbWVudGF0aW9uICovXG4rX19qaXRlZChcIlx0bGQgOSwgLTgoMSlcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDksIDMzXCIpXG4rX19qaXRlZChcIlx0YmZcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGQgOSwgMCg5KVwiKVxuK19faml0ZWQoXCJcdGNtcGxkaVx0OSwgMzNcIilcbitfX2ppdGVkKFwiXHRidFx0e3suKn19LCB7ey4qfX1cIilcbitfX2ppdGVkKFwiXHRhZGRpIDksIDksIDFcIilcbitfX2ppdGVkKFwiXHRtdWxsaSAxMCwge3suKn19LCA4XCIpXG4rX19qaXRlZChcIlx0YWRkIDEwLCAxMCwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGQgMTAsIHt7Lip9fSgxMClcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDEwLCAwXCIpXG4rX19qaXRlZChcIlx0YnRcdHt7Lip9fSwge3suKn19XCIpXG4rX19qaXRlZChcIlx0bGQgMTAsIHt7Lip9fSgxMClcIilcbitfX2ppdGVkKFwiXHRhZGRpIDEwLCAxMCwge3suKn19XCIpICAgIC8qIG9mZnNldCBkZXBlbmRzIG9uIENPTkZJR19QUENfS0VSTkVMX1BDUkVMICovXG4rX19qaXRlZChcIlx0bXRjdHIgMTBcIilcbitfX2ppdGVkKFwiXHRsZCAxMCwgLTgoMSlcIilcbitfX2ppdGVkKFwiXHRjbXBsZGlcdDEwLCAzM1wiKVxuK19faml0ZWQoXCJcdGJ0XHR7ey4qfX0sIHt7Lip9fVwiKVxuK19faml0ZWQoXCJcdGFkZGkgMTAsIDEsIC04XCIpXG4rX19qaXRlZChcIlx0c3RkIDksIDAoMTApXCIpXG4rX19qaXRlZChcIlx0YmN0clwiKVxuK19faml0ZWQoXCJcdG1yXHQzLCA4XCIpXG4rX19qaXRlZChcIlx0YmxyXCIpXG4rXG4gU0VDKFwidGNcIilcbiBfX25ha2VkIGludCBtYWluKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbmluZGV4IGFiZGI5ZTZlMzcxMzYyLi5kNTU4OTM1NWVkOWUwYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuQEAgLTM3Nyw2ICszNzcsNyBAQCBlbnVtIGFyY2gge1xuIFx0QVJDSF9BUk02NFx0PSAweDQsXG4gXHRBUkNIX1JJU0NWNjRcdD0gMHg4LFxuIFx0QVJDSF9TMzkwWFx0PSAweDEwLFxuK1x0QVJDSF9QT1dFUlBDNjRcdD0gMHgyMCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKVxuQEAgLTM4OSw2ICszOTAsOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbiBcdHJldHVybiBBUkNIX1JJU0NWNjQ7XG4gI2VsaWYgZGVmaW5lZChfX3MzOTB4X18pXG4gXHRyZXR1cm4gQVJDSF9TMzkwWDtcbisjZWxpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pXG4rXHRyZXR1cm4gQVJDSF9QT1dFUlBDNjQ7XG4gI2VuZGlmXG4gXHRyZXR1cm4gQVJDSF9VTktOT1dOO1xuIH1cbkBAIC01ODAsNiArNTgzLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdFx0XHRhcmNoID0gQVJDSF9SSVNDVjY0O1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJzMzkweFwiKSA9PSAwKSB7XG4gXHRcdFx0XHRhcmNoID0gQVJDSF9TMzkwWDtcbitcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwiUE9XRVJQQzY0XCIpID09IDApIHtcbitcdFx0XHRcdGFyY2ggPSBBUkNIX1BPV0VSUEM2NDtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0UFJJTlRfRkFJTChcImJhZCBhcmNoIHNwZWM6ICclcydcXG5cIiwgdmFsKTtcbiBcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0MzoyMy4xNDk5MzEwMjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgyNzc3ODI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvd2VyUEMgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIEJQRiBKSVQgY29tcGlsZXIgc3BlY2lmaWNhbGx5IGZvciBQb3dlclBDLiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb2RlIGdlbmVyYXRpb24gcGFzc2VzIChhZGp1c3RpbmcgYENPREVHRU5fTUlOX1BBU1NFU2AgYW5kIGBDT0RFR0VOX01BWF9QQVNTRVNgKS4gQmV5b25kIHRoYXQsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIG1vZGlmeWluZyBhIHNlcmllcyBvZiBjb3JlIGZ1bmN0aW9uczogYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBhbmQgYGJwZl9qaXRfYnVpbGRfZXBpbG9ndWVgLCBhbG9uZyB3aXRoIHNvbWUgaW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnRzLiBUaGUgZmFjdCB0aGF0IGl0J3MgdG91Y2hpbmcgdGhlc2UgbG93LWxldmVsIGNvZGUgZ2VuZXJhdGlvbiBhc3BlY3RzIHN1Z2dlc3RzIGl0IGNvdWxkIGJlIGltcGFjdGZ1bCwgYW5kIG5lZWRzIGNhcmVmdWwgZXhhbWluYXRpb24uIEFsc28sIHRoZXkndmUgYWRkZWQgUG93ZXJQQzY0IHN1cHBvcnQgdG8gYSBjb3VwbGUgb2Ygc2VsZi10ZXN0IGZpbGVzLCB3aGljaCBpcyBnb29kLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGluIHRoZSBjb21tb24gZW52aXJvbm1lbnRzPyBTaW5jZSBpdCdzIFBvd2VyUEMsIGFuZCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzdXBwb3J0IGZvciBQb3dlclBDIChzcGVjaWZpY2FsbHkgcHBjNjRsZSksIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIHRlc3RpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gc3l6a2FsbGVyJ3MgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgc2VlIHRoYXQgbXkgZmlyc3QgaW1wcmVzc2lvbiBpcyBjb3JyZWN0LCB0aGUgcGF0Y2ggaXMgaW5kZWVkIGZ1enphYmxlLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNvZGUuIExldCBtZSBleHRyYWN0IHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkIGluIGBhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jYCwgYGFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuY2AsIGFuZCBgYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBoYXZlOlxuLSBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgXG4tIGBicGZfaml0X2VtaXRfZXhpdF9pbnNuYFxuLSBgYnBmX2ludF9qaXRfY29tcGlsZWBcbi0gYGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvYFxuLSBgYnBmX2FyY2hfdGV4dF9wb2tlYFxuLSBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWBcbi0gYGJwZl9qaXRfZW1pdF90YWlsX2NhbGxgXG4tIGBicGZfaml0X2J1aWxkX2JvZHlgXG4tIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYFxuXG5UaGlzIGlzIGFsbCBjb3JlIEJQRiBKSVQgY29tcGlsZXIgc3R1ZmYgZm9yIFBvd2VyUEMsIHNvIHRoZSBpbXBhY3QgaXMgaW4gdGhlIGNvcmUuIFRoZSBjb25maWd1cmF0aW9uIG5lZWRlZCBpcyBzaW1wbGUsIGBCUEZfSklUYCBhbmQgZWl0aGVyIGBQUEM2NGAgb3IgYFBQQzMyYCwgYnV0IEkgdGhpbmsganVzdCBzYXlpbmcgYEJQRl9KSVRgIGFuZCBgUFBDNjRgIGNvdmVycyBpdCBmb3IgZnV6emluZyBwdXJwb3Nlcy4gSG93ZXZlciwgSSBzaG91bGQgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgdXNlZCBieSBsb29raW5nIGF0IHRoZSBgI2lmZGVmYHMuIExldCBtZSBsb29rIGF0IGBhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucywgYW5kIEkgc2VlIGBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgYmVpbmcgdXNlZCBpbiBgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnNgLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkwOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjM0Ljk3NzcxMTM3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTkzMDExNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz0zNT1hc20gKFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0zOS1cXFwiZHVtbXlfdHJhbXA6XFx0XFx0XFx0XFx0XFx0O1xcXCJcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjQwOiNpZmRlZiBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNDEtXFxcIlxcdGJsclxcdFxcdFxcdFxcdFxcdDtcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTUyPXZvaWQgYnBmX2ppdF9idWlsZF9mZW50cnlfc3R1YnModTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNjYtXFx0ICogY291bnQuIFRoZSBzdHVicyBibG9jayBoYXMgMTEgaW5zdHJ1Y3Rpb25zICh3aXRoXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo2NzpcXHQgKiBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgb3IgMTAgaW5zdHJ1Y3Rpb25zICh3aXRob3V0KVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNjgtXFx0ICogYmVmb3JlIGR1bW15X3RyYW1wX2FkZHIgZmllbGQuIEVtaXQgYSBOT1AgaWYgdGhlIGFkZHJlc3Mgb2ZcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzYtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo3NzpcXHRzdHViX3N6ID0gSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgPyA0NCA6IDQwO1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzgtXFx0aWYgKCFpbWFnZSB8fCAhSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylmaW1hZ2UgKyBjdHgtXFx1MDAzZWlkeCo0ICsgc3R1Yl9zeiwgU1pMKSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtODUtXFx0ICpcXHRbYnxibF1cXHR0cmFtcFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6ODY6XFx0ICpcXHRtdGxyXFx0cjAgLy8gb25seSB3aXRoIENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy04Ny1cXHQgKlxcdGJcXHRicGZfZnVuYyArIDRcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtOTEtXFx0RU1JVChQUENfUkFXX05PUCgpKTtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjkyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSlcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTkzLVxcdFxcdEVNSVQoUFBDX1JBV19NVExSKF9SMCkpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz04NTM9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTk3Mi1cXHQvKiBPcHRpb25hbCBzYXZlIGFyZWEgZm9yIGFjdHVhbCBMUiBpbiBjYXNlIG9mIG9vbCBmdHJhY2UgKi9cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjk3MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTk3NC1cXHRcXHRhbHRfbHJfb2ZmID0gYnBmX2ZyYW1lX3NpemU7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTctXFx0RU1JVChQUENfUkFXX01GTFIoX1IzKSk7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMDE4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUENfRlRSQUNFX09VVF9PRl9MSU5FKSlcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTktXFx0XFx0RU1JVChQUENfUkFXX1NUTChfUjMsIF9SMSwgYWx0X2xyX29mZikpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDI0LVxcdCAqIERlcml2ZSBJUCBhZGRyZXNzIG9mIHRoZSB0cmFjZWQgZnVuY3Rpb24uXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMDI1OlxcdCAqIEluIGNhc2Ugb2YgQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUgb3IgQlBGIHByb2dyYW0sIExSIHBvaW50cyB0byB0aGUgaW5zdHJ1Y3Rpb25cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjYtXFx0ICogYWZ0ZXIgdGhlICdibCcgaW5zdHJ1Y3Rpb24gaW4gdGhlIE9PTCBzdHViLiBSZWZlciB0byBmdHJhY2VfaW5pdF9vb2xfc3R1YigpIGFuZFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDM2LVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTAzNzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkgfHwgZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JUF9BUkcpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzgtXFx0XFx0RU1JVChQUENfUkFXX0xXWihfUjQsIF9SMywgNCkpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMDQ2LVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTA0NzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSkpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDgtXFx0XFx0LyogRmFrZSBvdXIgTFIgZm9yIEJQRl9UUkFNUF9GX0NBTExfT1JJRyBjYXNlICovXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyMDQtXFx0fSBlbHNlIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEyMDU6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkUpKSB7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMjA2LVxcdFxcdFxcdEVNSVQoUFBDX1JBV19MTChfUjAsIF9SMSwgYWx0X2xyX29mZikpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz0xMjk4PXN0YXRpYyB2b2lkIGRvX2lzeW5jKHZvaWQgKmluZm8gX19tYXliZV91bnVzZWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEzMTItICpcXHRbYnxibF1cXHRcXHUwMDNjYnBmX3Byb2dcXHUwMDNlL1xcdTAwM2Nsb25nX2JyYW5jaF9zdHViXFx1MDAzZVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTMxMzogKlxcdG10bHJcXHRyMCAvLyBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORSBvbmx5XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMzE0LSAqXFx0YlxcdGJwZl9mdW5jICsgNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0MzozNS40NzcwMTg3OTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDk4NTk4Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBQYXRjaCBmb3IgUG93ZXJQQyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBCUEYgSklUIGltcGxlbWVudGF0aW9uIGZvciBQb3dlclBDLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gdGhlIGBmZW50cnlgIHN0dWJzLCB0aGUgZXBpbG9ndWUsIGFuZCB0aGUgZXhpdCBpbnN0cnVjdGlvbnMuIEludGVyZXN0aW5nLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyB0aGVzZSBhcmUgYmVpbmcgbW9kaWZpZWQsIGVzcGVjaWFsbHkgd2l0aGluIHRoYXQgSklUIGNvbnRleHQuIEl0J3MgYWxzbyBtYWtpbmcgYWRqdXN0bWVudHMgdG8gdGhlIG51bWJlciBvZiBwYXNzZXMgdGhlIGNvZGUgZ2VuZXJhdGlvbiBnb2VzIHRocm91Z2gsIHdoaWNoIGxpa2VseSBpbXBhY3RzIHBlcmZvcm1hbmNlIG9yIGNvZGUgcXVhbGl0eS5cblxuVGhlIGtleSBjb25maWdzIGF0IHBsYXkgaGVyZSBhcmUgY2xlYXJseSBgQlBGX0pJVGAgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYFBQQzY0YCBvciBgUFBDMzJgLiBPYnZpb3VzLiBCdXQgdGhlcmUncyBhbHNvIGBDT05GSUdfUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgbWVudGlvbmVkLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGlzIGNvbmZpZyBhY3R1YWxseSAqZXhpc3RzKiBhbmQgaXMgdmFsaWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFBvd2VyUEMga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0cyByZWxldmFuY2UgaGVyZSBzdWdnZXN0cyBhIHJlbGF0aW9uc2hpcCB3aXRoIGZ1bmN0aW9uIHRyYWNpbmcgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgSklUJ2QgQlBGIGNvZGUsIHdoaWNoIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIGNoZWNrIHRoYXQgY29uZmlnIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjQyLjU3NTYxOTM1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyNjM4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvS2NvbmZpZz01Njg9Y29uZmlnIEFSQ0hfVVNJTkdfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01NzQtXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6NTc1OmNvbmZpZyBQUENfRlRSQUNFX09VVF9PRl9MSU5FXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTc2LVxcdGRlZl9ib29sIFBQQzY0IFxcdTAwMjZcXHUwMDI2IEFSQ0hfVVNJTkdfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01NzgtXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6NTc5OmNvbmZpZyBQUENfRlRSQUNFX09VVF9PRl9MSU5FX05VTV9SRVNFUlZFXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTgwLVxcdGludCBcXFwiTnVtYmVyIG9mIGZ0cmFjZSBvdXQtb2YtbGluZSBzdHVicyB0byByZXNlcnZlIHdpdGhpbiAudGV4dFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6NDM6NDIuNzQ5ODg5ODY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0ODU4NjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipFdmFsdWF0aW5nIHRoZSBgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgaXMgYSBgZGVmX2Jvb2xgLCB3aGljaCBtZWFucyBpdCdzIG5vdCBhIGRpcmVjdCBvcHRpb24geW91IGNhbiAqc2VsZWN0Ki4gSXRzIHZhbHVlIGlzICpkZWZpbmVkKiBieSBzb21ldGhpbmcgZWxzZTogc3BlY2lmaWNhbGx5LCB0aGUgY29uanVuY3Rpb24gb2YgYFBQQzY0YCAqYW5kKiBgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllgLiBTbywgaXQncyBhIHNvcnQgb2YgJ2hlbHBlcicgb3IgZGVyaXZlZCBvcHRpb24uIFlvdSBjYW4ndCB0b2dnbGUgdGhpcyBvbmUgb24gb3Igb2ZmIGRpcmVjdGx5IGluIHlvdXIgY29uZmlnLlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBiaXQgaGVyZSBpcyBgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgY29udHJvbCBsaWVzLiBJZiB0aGF0IGZsYWcgaXMgc2V0LCBhbmQgd2UncmUgb24gYSBQUEM2NCBhcmNoaXRlY3R1cmUsICp0aGVuKiBgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgaXMgYXV0b21hdGljYWxseSBlbmFibGVkLiBJdCdzIGEgZGVwZW5kZW5jeS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIGBBUkNIX1VTSU5HX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWWAgb3B0aW9uIHNvIHdlIGNhbiBrbm93IGlmIGZ0cmFjZSBzdXBwb3J0IGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6NDM6NDYuODk4NDc4ODI4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDk4MDI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvS2NvbmZpZz01NjM9Y29uZmlnIE1QUk9GSUxFX0tFUk5FTFxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTY3LVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjU2ODpjb25maWcgQVJDSF9VU0lOR19QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01NjktXFx0ZGVwZW5kcyBvbiBGVU5DVElPTl9UUkFDRVIgXFx1MDAyNlxcdTAwMjYgKFBQQzMyIHx8IFBQQzY0X0VMRl9BQklfVjIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjQ3LjAwOTQ5NzkwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzg0NDEwOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgY29kZSBtb2RpZmljYXRpb24uIEZpcnN0LCBgRlVOQ1RJT05fVFJBQ0VSYCBzZWVtcyBsaWtlIGEgZ2l2ZW4sIGxldCdzIHN0YXJ0IHdpdGggdGhhdC4gTm93LCBJIHNlZSBgQlBGX0pJVGAgaXMgZGVmaW5pdGVseSBuZWVkZWQsIHdoaWNoIG1ha2VzIHNlbnNlIHNpbmNlIGl0J3MgdGhlIEJQRiBKSVQgY29tcGlsZXIuIE5hdHVyYWxseSwgYEJQRl9KSVRgIHJlcXVpcmVzIGBCUEZfU1lTQ0FMTGAgYXMgd2VsbC4gU28sIHRoZSBiYXNlIHJlcXVpcmVtZW50cyBhcmUgYEJQRl9KSVRgIGFuZCBgRlVOQ1RJT05fVFJBQ0VSYC5cblxuVGhlIHByb21wdCBpcyBzcGVjaWZpYzogSSBzaG91bGQgYXZvaWQgbGlzdGluZyB0b28gZ2VuZXJpYyBjb25maWdzLiBPa2F5LCBgQlBGX0pJVGAgKmlzKiBzcGVjaWZpYyB0byB0aGUgSklUIGFzcGVjdCwgZXZlbiBpZiBCUEYgaXMgbW9yZSBnZW5lcmFsLiBgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORWAgaXMgc3BlY2lmaWMgYnV0IG5vdCBkaXJlY3RseSBzZWxlY3RhYmxlLiBOb3csIGxldCBtZSBjaGVjayB0aGUgZnVuY3Rpb25zIGludm9sdmVkIHRvIG5hcnJvdyB0aGlzIGRvd24uIEkgc2VlIGNhbGxzIHRvIGBicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic2AsIHdoaWNoIGluIHR1cm4sIGlzIGNhbGxlZCBmcm9tIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYC4gQWxzbywgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gIGlzIGNhbGxlZCBmcm9tIGBicGZfaml0X2J1aWxkX2JvZHlgLlxuXG5MZXQncyBncmFiIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYDogYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBicGZfaml0X2J1aWxkX2VwaWxvZ3VlYCwgYGJwZl9qaXRfYnVpbGRfYm9keWAsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCwgYGJwZl9qaXRfZW1pdF90YWlsX2NhbGxgLCBgYnBmX3RyYW1wb2xpbmVfc2V0dXBfdGFpbF9jYWxsX2luZm9gLCBhbmQgYGJwZl9hcmNoX3RleHRfcG9rZWAuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIHN5bWJvbHMgYXJlIG5vdCBpbiB0aGUgaG90IHBhdGguIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB1c2VkIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkIGFuZCBjb21waWxhdGlvbi4gR29vZCwgbm90IGhvdCBwYXRoLiBUaGUgYGJwZl9qaXRfKmAgZnVuY3Rpb25zIGFyZSBhbGwgcGFydCBvZiB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3M7IHRoYXQgbWFrZXMgc2Vuc2UuIGBicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mb2AgaXMgZm9yIHRyYW1wb2xpbmUgc2V0dXAuIGBicGZfYXJjaF90ZXh0X3Bva2VgIGlzIHVzZWQgZm9yIHBhdGNoaW5nIEJQRiBwcm9ncmFtcy4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LlxuXG5Ob3csIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWdzPyBMb29rcyBsaWtlIGBDT05GSUdfUFBDNjRgIGFuZCBgQ09ORklHX1BQQzMyYCBhcmUgdXNlZCwgYWxvbmcgd2l0aCBgQ09ORklHX1BQQ19GVFJBQ0VfT1VUX09GX0xJTkVgLiBPa2F5LCB3YWl0LiBUaGVzZSBhcmUgYXJjaGl0ZWN0dXJlcywgbm90IHNvbWV0aGluZyBJIGNhbiBlbmFibGUgb24geDg2IGRpcmVjdGx5LiBUaGUgY29uZmlncyBJIHByb3ZpZGUgd2lsbCBiZSBhZGRlZCB0byB0aGUga2VybmVsIGNvbmZpZy5cblxuU28sIGluIHN1bW1hcnksIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb2RlLCBJIGNhbiBjb25maWRlbnRseSBsaXN0IGBCUEZfSklUYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAuIExldCBtZSBkb3VibGUtY2hlY2sgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gIGlzIGluZGVlZCBpbiB0aGUgZXhwZWN0ZWQgZmlsZSBhbmQgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOTo0Mzo1Ny43OTM5MTE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUxMzA5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9lbWl0X2V4aXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaD0yMzI9dm9pZCBicGZfaml0X3JlYWxsb2NfcmVncyhzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpO1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdC5oOjIzMzppbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LCBpbnQgdG1wX3JlZyxcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXQuaC0yMzQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bG9uZyBleGl0X2FkZHIpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz01Mj12b2lkIGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzKHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyNy1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEyODppbnQgYnBmX2ppdF9lbWl0X2V4aXRfaW5zbih1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTI5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCB0bXBfcmVnLCBsb25nIGV4aXRfYWRkcilcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wMzIuYz0zMjI9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jLTExNTEtXFx0XFx0XFx0aWYgKGkgIT0gZmxlbiAtIDEpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTE1MjpcXHRcXHRcXHRcXHRyZXQgPSBicGZfaml0X2VtaXRfZXhpdF9pbnNuKGltYWdlLCBmaW1hZ2UsXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAzMi5jLTExNTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4LCBfUjAsIGV4aXRfYWRkcik7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTU2PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xNzI4LVxcdFxcdFxcdGlmIChpICE9IGZsZW4gLSAxKSB7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjE3Mjk6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX2ppdF9lbWl0X2V4aXRfaW5zbihpbWFnZSwgZmltYWdlLCBjdHgsXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTE3MzAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dG1wMV9yZWcsIGV4aXRfYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjQzOjU4LjI4OTA1MDEyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzc4MDQ3MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG93ZXJQQyBCUEYgSklUIENvbXBpbGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzIGRpZ2dpbmcgaW50byB0aGUgQlBGIEpJVCBjb21waWxlciBzcGVjaWZpY2FsbHkgZm9yIFBvd2VyUEMuIEl0J3Mgbm90IGp1c3QgYSBzdXBlcmZpY2lhbCB0d2VhazsgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3RpbmcgaG93IHRoZSBjb2RlIGlzIGdlbmVyYXRlZC4gV2UncmUgdGFsa2luZyBhYm91dCBhZGRyZXNzaW5nIGFsaWdubWVudCBpc3N1ZXMgYW5kIG1vZGlmeWluZyB0aGUgY29kZSBnZW5lcmF0aW9uIHBhc3NlcyB0aGVtc2VsdmVzIOKAkyB0aGUgdmVyeSBjb3JlIG9mIGhvdyBCUEYgcHJvZ3JhbXMgdHJhbnNsYXRlIGludG8gUG93ZXJQQyBtYWNoaW5lIGNvZGUuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIHRoYXQncyByZWFjaGFibGUgYW5kIHVzZWQgd2hlbiBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBvbiBQb3dlclBDLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIEdpdmVuIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGUgcG90ZW50aWFsIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgYnVncyBvciBldmVuIHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSBpcyBzaWduaWZpY2FudC4gV2UgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBjaGFuZ2VzIGNvcnJlY3RseSBoYW5kbGUgdmFyaW91cyBCUEYgcHJvZ3JhbSBzdHJ1Y3R1cmVzIGFuZCBpbnB1dHMgYW5kIHByZXZlbnQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgY3Jhc2hlcy5cblxuSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGVmZm9ydHMgb24uIFdlIGhhdmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHdoaWNoIGlzIHRoZSBjZW50cmFsIGNvbXBpbGUgZnVuY3Rpb24uIFRoZW4gdGhlcmUgaXMgYGJwZl9qaXRfYnVpbGRfZmVudHJ5X3N0dWJzYCwgYGJwZl9qaXRfZW1pdF9leGl0X2luc25gLCBgYnBmX2ppdF9idWlsZF9lcGlsb2d1ZWAsIGBicGZfaml0X2J1aWxkX2JvZHlgLCBhbmQgYGJwZl9qaXRfYnVpbGRfcHJvbG9ndWVgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBidWlsZGluZyBibG9ja3MgaW52b2x2ZWQgaW4gY29uc3RydWN0aW5nIGFuZCBmaW5hbGl6aW5nIHRoZSBKSVQnZCBjb2RlLiBGaW5hbGx5LCB0aGVyZSdzIGBicGZfaml0X2VtaXRfdGFpbF9jYWxsYCwgYGJwZl90cmFtcG9saW5lX3NldHVwX3RhaWxfY2FsbF9pbmZvYCwgYW5kIGBicGZfYXJjaF90ZXh0X3Bva2VgLiBJdCdzIGdvaW5nIHRvIGJlIGVzc2VudGlhbCB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zIGR1cmluZyBmdXp6aW5nLlxuXG5JJ20gY29uZmlkZW50IHRoYXQgZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgd2l0aCBgQlBGX0pJVGAgYW5kIGBGVU5DVElPTl9UUkFDRVJgIGVuYWJsZWQgd2lsbCBiZSBjcnVjaWFsIHRvIGVuc3VyZSB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIGNvcnJlY3RuZXNzIG9mIEJQRiBvbiBQb3dlclBDLiBBbHJpZ2h0LCBJJ2xsIGdvIGFoZWFkIGFuZCBzZXQgdGhlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4MiwiT3V0cHV0VG9rZW5zIjoyMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6NDQ6MDYuNjY3MDk5OTM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzE3Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic1wiLFxuICAgIFwiYnBmX2ppdF9lbWl0X2V4aXRfaW5zblwiLFxuICAgIFwiYnBmX2ppdF9idWlsZF9lcGlsb2d1ZVwiLFxuICAgIFwiYnBmX2ppdF9idWlsZF9ib2R5XCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X2VtaXRfdGFpbF9jYWxsXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mb1wiLFxuICAgIFwiYnBmX2FyY2hfdGV4dF9wb2tlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX2ZlbnRyeV9zdHVic1wiLFxuICAgIFwiYnBmX2ppdF9lbWl0X2V4aXRfaW5zblwiLFxuICAgIFwiYnBmX2ppdF9idWlsZF9lcGlsb2d1ZVwiLFxuICAgIFwiYnBmX2ppdF9idWlsZF9ib2R5XCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X2VtaXRfdGFpbF9jYWxsXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9zZXR1cF90YWlsX2NhbGxfaW5mb1wiLFxuICAgIFwiYnBmX2FyY2hfdGV4dF9wb2tlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIFBvd2VyUEMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMsIGZlbnRyeSBzdHVicyBhbGlnbm1lbnQsIGFuZCBlcGlsb2d1ZS9leGl0IGluc3RydWN0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIG9uIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4gRnV6emluZyB0aGUgQlBGIEpJVCBjb21waWxlciBvbiBQb3dlclBDIHdpbGwgaGVscCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFuZCBwcmV2ZW50IHBvdGVudGlhbCBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7jlsb[1] Phase: Succeeded StartedAt: 2026-06-23 19:44:17 +0000 UTC FinishedAt: 2026-06-23 19:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 19:44:17 +0000 UTC FinishedAt: 2026-06-23 19:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2] Phase: Succeeded StartedAt: 2026-06-23 19:44:17 +0000 UTC FinishedAt: 2026-06-23 20:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-23 19:44:17 +0000 UTC FinishedAt: 2026-06-23 20:40:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-23 19:44:17 +0000 UTC FinishedAt: 2026-06-23 19:44:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-23 19:44:17 +0000 UTC FinishedAt: 2026-06-23 19:44:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow7jlsb/series-workflow7jlsb-convert-artifact-3616215235/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-23 19:44:27 +0000 UTC FinishedAt: 2026-06-23 20:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-23 19:44:27 +0000 UTC FinishedAt: 2026-06-23 20:12:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6b873dfd-e488-4dff-8bb5-04b68a7b018c,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-workflow7jlsb/series-workflow7jlsb-convert-artifact-3616215235/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": "4efd5ee0-7a81-4fc5-8a50-401b98115e46", "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-workflow7jlsb/series-workflow7jlsb-build-action-81693489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-23 19:44:27 +0000 UTC FinishedAt: 2026-06-23 20:11:25 +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:*6b873dfd-e488-4dff-8bb5-04b68a7b018c,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-workflow7jlsb/series-workflow7jlsb-convert-artifact-3616215235/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": "4efd5ee0-7a81-4fc5-8a50-401b98115e46", "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-workflow7jlsb/series-workflow7jlsb-build-action-81693489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 20:12:18 +0000 UTC FinishedAt: 2026-06-23 20:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-23 20:12:18 +0000 UTC FinishedAt: 2026-06-23 20:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 20:12:18 +0000 UTC FinishedAt: 2026-06-23 20:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 20:12:18 +0000 UTC FinishedAt: 2026-06-23 20:12:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow7jlsb/series-workflow7jlsb-convert-artifact-2697678458/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 20:12:28 +0000 UTC FinishedAt: 2026-06-23 20:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 20:12:28 +0000 UTC FinishedAt: 2026-06-23 20:14:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4efd5ee0-7a81-4fc5-8a50-401b98115e46,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-workflow7jlsb/series-workflow7jlsb-build-action-81693489/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-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 20:14:21 +0000 UTC FinishedAt: 2026-06-23 20:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 20:14:21 +0000 UTC FinishedAt: 2026-06-23 20:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 20:14:21 +0000 UTC FinishedAt: 2026-06-23 20:36:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 20:14:21 +0000 UTC FinishedAt: 2026-06-23 20:36:03 +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:*6b873dfd-e488-4dff-8bb5-04b68a7b018c,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-workflow7jlsb/series-workflow7jlsb-convert-artifact-2697678458/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": "ff633e99-248f-4831-89c5-8b623431af55", "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-workflow7jlsb/series-workflow7jlsb-build-action-1663430110/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 20:14:21 +0000 UTC FinishedAt: 2026-06-23 20:35:53 +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:*6b873dfd-e488-4dff-8bb5-04b68a7b018c,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-workflow7jlsb/series-workflow7jlsb-convert-artifact-2697678458/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": "ff633e99-248f-4831-89c5-8b623431af55", "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-workflow7jlsb/series-workflow7jlsb-build-action-1663430110/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 20:36:03 +0000 UTC FinishedAt: 2026-06-23 20:36:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 20:36:03 +0000 UTC FinishedAt: 2026-06-23 20:36:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 20:36:03 +0000 UTC FinishedAt: 2026-06-23 20:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 20:36:03 +0000 UTC FinishedAt: 2026-06-23 20:37:43 +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:*ff633e99-248f-4831-89c5-8b623431af55,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-workflow7jlsb/series-workflow7jlsb-build-action-1663430110/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-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-23 20:37:53 +0000 UTC FinishedAt: 2026-06-23 20:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 20:37:53 +0000 UTC FinishedAt: 2026-06-23 20:40:36 +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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"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:*4efd5ee0-7a81-4fc5-8a50-401b98115e46,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ff633e99-248f-4831-89c5-8b623431af55,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-workflow7jlsb/series-workflow7jlsb-build-action-81693489/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-workflow7jlsb/series-workflow7jlsb-build-action-1663430110/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 20:37:53 +0000 UTC FinishedAt: 2026-06-23 20:38:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 20:37:53 +0000 UTC FinishedAt: 2026-06-23 20:37:57 +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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"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-workflow7jlsb/series-workflow7jlsb-convert-artifact-1398497199/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-23 20:37:53 +0000 UTC FinishedAt: 2026-06-23 20:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 20:37:53 +0000 UTC FinishedAt: 2026-06-23 20:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 20:37:53 +0000 UTC FinishedAt: 2026-06-23 20:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 20:38:03 +0000 UTC FinishedAt: 2026-06-23 20:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7jlsb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_int_jit_compile","bpf_jit_build_fentry_stubs","bpf_jit_emit_exit_insn","bpf_jit_build_epilogue","bpf_jit_build_body","bpf_jit_build_prologue","bpf_jit_emit_tail_call","bpf_trampoline_setup_tail_call_info","bpf_arch_text_poke"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f32a375eccb7b27bccc57dee45befff6e3b3d4b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","FUNCTION_TRACER"],"series_id":"5263f814-3b1b-4de1-9b93-e1c8d595d117","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 20:38:03 +0000 UTC FinishedAt: 2026-06-23 20:40:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4efd5ee0-7a81-4fc5-8a50-401b98115e46,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ff633e99-248f-4831-89c5-8b623431af55,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-workflow7jlsb/series-workflow7jlsb-build-action-81693489/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-workflow7jlsb/series-workflow7jlsb-build-action-1663430110/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-workflow7jlsb/series-workflow7jlsb-convert-artifact-1398497199/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,}