Name: series-workflowcwttg Phase: Succeeded StartedAt: 2026-08-13 13:03:29 +0000 UTC FinishedAt: 2026-08-13 13:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[0] Phase: Succeeded StartedAt: 2026-08-13 13:03:29 +0000 UTC FinishedAt: 2026-08-13 13:06:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 13:03:29 +0000 UTC FinishedAt: 2026-08-13 13:06:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "7500c01e-5bd0-481a-a9da-1f86e3f29ff7" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIDMyLWJpdCB4ODYgKGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2ApIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIG9yIHplcm8tZXh0ZW5kIHJldHVybiB2YWx1ZXMgZnJvbSBrZnVuY3MuIFdoaWxlIHRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgdW5pbml0aWFsaXplZCBvciBsZWZ0b3ZlciByZWdpc3RlciBzdGF0ZSBjb3VsZCBiZSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcywgS01TQU4gaXMgb25seSBzdXBwb3J0ZWQgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgKGUuZy4sIGBYODZfNjRgKS4gVGhlIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIHN0cmljdGx5IGZvciAzMi1iaXQgeDg2IChgQ09ORklHX1g4Nl8zMmApIGFuZCB3aWxsIG5vdCBiZSBjb21waWxlZCBvciBleGVjdXRlZCBpbiBhIEtNU0FOIGJ1aWxkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmY3ZDc3ODI2NDJjNmI2ZWVhNDczYzEzNDYxYmE3ZTcyYjgxZDY3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjA0OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IDg1MmJhZjJlNGRiNGQuLjAxN2NjOWU3ZTRlMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbkBAIC0xNjIwLDEzICYjNDM7MTYyMCwyNSBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsXG4gXHRcdC8qIGFkZCBlc3AsXCYjMzQ7Ynl0ZXNfaW5fc3RhY2tcJiMzNDsgKi9cbiBcdFx0ZW5kX2FkZHIgLT0gMztcbiBcbi1cdC8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlZHggKi9cbi1cdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSBcdTAwM2Ugc2l6ZW9mKHUzMikpXG4tXHRcdGVuZF9hZGRyIC09IDM7XG4tXG4tXHQvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWF4ICovXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUpXG4mIzQzO1x0c3dpdGNoIChmbS1cdTAwM2VyZXRfc2l6ZSkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU4KTpcbiYjNDM7XHRjYXNlIHNpemVvZih1MTYpOlxuJiM0MztcdFx0LyogbW92W3N8el14IGVheCxbYV14ICovXG4gXHRcdGVuZF9hZGRyIC09IDM7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIHNpemVvZih1MzIpOlxuJiM0MztcdFx0LyogY2RxIG9yIHhvciBlZHgsZWR4ICovXG4mIzQzO1x0XHRlbmRfYWRkciAtPSBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDEgOiAyO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBzaXplb2YodTY0KTpcbiYjNDM7XHRcdC8qIFN0b3JlIEVEWDpFQVggaW4gUjAuICovXG4mIzQzO1x0XHRlbmRfYWRkciAtPSA2O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdGptcF9vZmZzZXQgPSAodTggKilfX2JwZl9jYWxsX2Jhc2UgJiM0MzsgaW5zbi1cdTAwM2VpbW0gLSBlbmRfYWRkcjtcbiBcdGlmICghaXNfc2ltbTMyKGptcF9vZmZzZXQpKSB7XG5AQCAtMTYzNywxNSAmIzQzOzE2NDksMzggQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLFxuIFxuIFx0RU1JVDFfb2ZmMzIoMHhFOCwgam1wX29mZnNldCk7XG4gXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUpXG4mIzQzO1x0c3dpdGNoIChmbS1cdTAwM2VyZXRfc2l6ZSkge1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU4KTpcbiYjNDM7XHRcdC8qIG1vdltzfHpdeCBlYXgsYWwgKi9cbiYjNDM7XHRcdEVNSVQzKDB4MEYsIGZtLVx1MDAzZXJldF9mbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMHhCRSA6IDB4QjYsXG4mIzQzO1x0XHQgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHUxNik6XG4mIzQzO1x0XHQvKiBtb3Zbc3x6XXggZWF4LGF4ICovXG4mIzQzO1x0XHRFTUlUMygweDBGLCBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDB4QkYgOiAweEI3LFxuJiM0MztcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZm0tXHUwMDNlcmV0X3NpemUgXHUwMDI2XHUwMDI2IGZtLVx1MDAzZXJldF9zaXplIFx1MDAzYz0gc2l6ZW9mKHUzMikpIHtcbiYjNDM7XHRcdGlmIChmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRylcbiYjNDM7XHRcdFx0LyogY2RxICovXG4mIzQzO1x0XHRcdEVNSVQxKDB4OTkpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHQvKiB4b3IgZWR4LGVkeCAqL1xuJiM0MztcdFx0XHRFTUlUMigweDMxLCBhZGRfMnJlZygweEMwLCBJQTMyX0VEWCwgSUEzMl9FRFgpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSkge1xuIFx0XHQvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWF4ICovXG4gXHRcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VBWCksXG4gXHRcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzBdKSk7XG4tXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUgXHUwMDNlIHNpemVvZih1MzIpKVxuIFx0XHQvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWR4ICovXG4gXHRcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VEWCksXG4gXHRcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzFdKSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGJ5dGVzX2luX3N0YWNrKVxuIFx0XHQvKiBhZGQgZXNwLFwmIzM0O2J5dGVzX2luX3N0YWNrXCYjMzQ7ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IDgxMTNmZWE3YmE4NmMuLjQ2MzhlMGE0NWRiNmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtMTI3LDYgJiM0MzsxMjcsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX3NldF9yZXR2YWwuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfbHNtLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2tmdW5jX3JldHVybi5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpcnEuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY3R4X3B0cl9wYXJhbS5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl96ZXh0LnNrZWwuaFwmIzM0O1xuQEAgLTI4OSw2ICYjNDM7MjkwLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2xzbSh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2xzbSk7IH1cbiB2b2lkIHRlc3RfaXJxKHZvaWQpXHRcdFx0ICAgICAgeyBSVU4oaXJxKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcdFx0ICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cbiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX2tmdW5jX3JldHVybih2b2lkKSAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9rZnVuY19yZXR1cm4pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfemV4dCh2b2lkKSAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFModmVyaWZpZXJfemV4dCk7IH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCA1ZWFjZjFiNDMyNTIxLi4xNDk4ZGEwNDU5N2FmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5AQCAtMTU1LDYgJiM0MzsxNTUsNyBAQFxuICNkZWZpbmUgX19idGZfZnVuY19wYXRoKHBhdGgpXHRfX3Rlc3RfdGFnKFwmIzM0O3Rlc3RfYnRmX2Z1bmNfcGF0aD1cJiMzNDsgcGF0aClcbiAjZGVmaW5lIF9fYXJjaChhcmNoKVx0XHRfX3Rlc3RfdGFnKFwmIzM0O3Rlc3RfYXJjaD1cJiMzNDsgYXJjaClcbiAjZGVmaW5lIF9fYXJjaF94ODZfNjRcdFx0X19hcmNoKFwmIzM0O1g4Nl82NFwmIzM0OylcbiYjNDM7I2RlZmluZSBfX2FyY2hfeDg2XzMyXHRcdF9fYXJjaChcJiMzNDtYODZfMzJcJiMzNDspXG4gI2RlZmluZSBfX2FyY2hfYXJtNjRcdFx0X19hcmNoKFwmIzM0O0FSTTY0XCYjMzQ7KVxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcdFx0X19hcmNoKFwmIzM0O1JJU0NWNjRcJiMzNDspXG4gI2RlZmluZSBfX2FyY2hfczM5MHhcdFx0X19hcmNoKFwmIzM0O3MzOTB4XCYjMzQ7KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUyYTk0ZGFmMDM5MjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uY1xuQEAgLTAsMCAmIzQzOzEsODQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2V4dGVybiBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKSBfX2tzeW07XG4mIzQzO2V4dGVybiBib29sIGJwZl9keW5wdHJfaXNfbnVsbChjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqcCkgX19rc3ltO1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbiYjNDM7fSBrZnVuY19yZXR1cm5fbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYVtdID0gXCYjMzQ7YVwmIzM0OztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgc3RyaW5nX2JbXSA9IFwmIzM0O2JcJiMzNDs7XG4mIzQzO1xuJiM0Mzt2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIHB0ciA9IHt9O1xuJiM0MztcbiYjNDM7XHRicGZfc3RyY21wKHN0cmluZ19hLCBzdHJpbmdfYik7XG4mIzQzO1x0YnBmX2R5bnB0cl9pc19udWxsKFx1MDAyNnB0cik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7X19hcmNoX3g4Nl8zMlxuJiM0MztfX25ha2VkIHZvaWQga2Z1bmNfYm9vbF9yZXR1cm5femVyb19leHRlbmRlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHUzMiAqKShyMTAgLSA0KSA9IHIwO1x0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiAmIzQzOz0gLTQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW2tmdW5jX3JldHVybl9tYXBdIGxsO1x0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4mIzQzO1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gODtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIzID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI0ID0gcjEwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHI0ICYjNDM7PSAtMjQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9keW5wdHJfZnJvbV9tZW1dO1x0XHRcdFxcXG4mIzQzO1x0aWYgcjAgIT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDB4MTAwMDAwMDAwIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSAmIzQzOz0gLTI0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgYnBmX2R5bnB0cl9pc19udWxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCBcdTAwM2VcdTAwM2U9IDMyO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdHIwID0gMjtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9hZGRyKGtmdW5jX3JldHVybl9tYXApLFxuJiM0MztcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4mIzQzO1x0ICBfX2ltbShicGZfZHlucHRyX2Zyb21fbWVtKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpXG4mIzQzO19fYXJjaF94ODZfMzJcbiYjNDM7X19uYWtlZCB2b2lkIGtmdW5jX2ludF9yZXR1cm5fc2lnbl9leHRlbmRlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9ICVbc3RyaW5nX2FdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMiA9ICVbc3RyaW5nX2JdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRjYWxsIGJwZl9zdHJjbXA7XHRcdFx0XHRcXFxuJiM0MztcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2FkZHIoc3RyaW5nX2EpLFxuJiM0MztcdCAgX19pbW1fYWRkcihzdHJpbmdfYilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbmluZGV4IDA3ODA3NzU3YjUxOGQuLjhhOWY0YTMxYTFiYjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbkBAIC0zNzQsMTYgJiM0MzszNzQsMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKipjb2xsZWN0X2RlY2xfdGFncyhzdHJ1Y3QgYnRmICpidGYsIGludCBpZCwgaW50ICpjbnQpXG4gZW51bSBhcmNoIHtcbiBcdEFSQ0hfVU5LTk9XTlx0PSAweDEsXG4gXHRBUkNIX1g4Nl82NFx0PSAweDIsXG4tXHRBUkNIX0FSTTY0XHQ9IDB4NCxcbi1cdEFSQ0hfUklTQ1Y2NFx0PSAweDgsXG4tXHRBUkNIX1MzOTBYXHQ9IDB4MTAsXG4tXHRBUkNIX0xPT05HQVJDSFx0PSAweDIwLFxuJiM0MztcdEFSQ0hfWDg2XzMyXHQ9IDB4NCxcbiYjNDM7XHRBUkNIX0FSTTY0XHQ9IDB4OCxcbiYjNDM7XHRBUkNIX1JJU0NWNjRcdD0gMHgxMCxcbiYjNDM7XHRBUkNIX1MzOTBYXHQ9IDB4MjAsXG4mIzQzO1x0QVJDSF9MT09OR0FSQ0hcdD0gMHg0MCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKVxuIHtcbiAjaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuIFx0cmV0dXJuIEFSQ0hfWDg2XzY0O1xuJiM0MzsjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKVxuJiM0MztcdHJldHVybiBBUkNIX1g4Nl8zMjtcbiAjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIFx0cmV0dXJuIEFSQ0hfQVJNNjQ7XG4gI2VsaWYgZGVmaW5lZChfX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0XG5AQCAtNTc3LDYgJiM0Mzs1ODAsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlcixcbiBcdFx0fSBlbHNlIGlmICgodmFsID0gc3RyX2hhc19wZngocywgXCYjMzQ7dGVzdF9hcmNoPVwmIzM0OykpKSB7XG4gXHRcdFx0aWYgKHN0cmNtcCh2YWwsIFwmIzM0O1g4Nl82NFwmIzM0OykgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfWDg2XzY0O1xuJiM0MztcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O1g4Nl8zMlwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0XHRcdGFyY2ggPSBBUkNIX1g4Nl8zMjtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O0FSTTY0XCYjMzQ7KSA9PSAwKSB7XG4gXHRcdFx0XHRhcmNoID0gQVJDSF9BUk02NDtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O1JJU0NWNjRcJiMzNDspID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmY3ZDc3ODI2NDJjNmI2ZWVhNDczYzEzNDYxYmE3ZTcyYjgxZDY3YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEzOjA0OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYwppbmRleCA4NTJiYWYyZTRkYjRkLi4wMTdjYzllN2U0ZTJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYwpAQCAtMTYyMCwxMyAmIzQzOzE2MjAsMjUgQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLAogCQkvKiBhZGQgZXNwLCYjMzQ7Ynl0ZXNfaW5fc3RhY2smIzM0OyAqLwogCQllbmRfYWRkciAtPSAzOwogCi0JLyogbW92IGR3b3JkIHB0ciBbZWJwJiM0MztvZmZdLGVkeCAqLwotCWlmIChmbS0mZ3Q7cmV0X3NpemUgJmd0OyBzaXplb2YodTMyKSkKLQkJZW5kX2FkZHIgLT0gMzsKLQotCS8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlYXggKi8KLQlpZiAoZm0tJmd0O3JldF9zaXplKQomIzQzOwlzd2l0Y2ggKGZtLSZndDtyZXRfc2l6ZSkgewomIzQzOwljYXNlIDA6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBzaXplb2YodTgpOgomIzQzOwljYXNlIHNpemVvZih1MTYpOgomIzQzOwkJLyogbW92W3N8el14IGVheCxbYV14ICovCiAJCWVuZF9hZGRyIC09IDM7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBzaXplb2YodTMyKToKJiM0MzsJCS8qIGNkcSBvciB4b3IgZWR4LGVkeCAqLwomIzQzOwkJZW5kX2FkZHIgLT0gZm0tJmd0O3JldF9mbGFncyAmYW1wOyBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAxIDogMjsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIHNpemVvZih1NjQpOgomIzQzOwkJLyogU3RvcmUgRURYOkVBWCBpbiBSMC4gKi8KJiM0MzsJCWVuZF9hZGRyIC09IDY7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlqbXBfb2Zmc2V0ID0gKHU4ICopX19icGZfY2FsbF9iYXNlICYjNDM7IGluc24tJmd0O2ltbSAtIGVuZF9hZGRyOwogCWlmICghaXNfc2ltbTMyKGptcF9vZmZzZXQpKSB7CkBAIC0xNjM3LDE1ICYjNDM7MTY0OSwzOCBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsCiAKIAlFTUlUMV9vZmYzMigweEU4LCBqbXBfb2Zmc2V0KTsKIAotCWlmIChmbS0mZ3Q7cmV0X3NpemUpCiYjNDM7CXN3aXRjaCAoZm0tJmd0O3JldF9zaXplKSB7CiYjNDM7CWNhc2Ugc2l6ZW9mKHU4KToKJiM0MzsJCS8qIG1vdltzfHpdeCBlYXgsYWwgKi8KJiM0MzsJCUVNSVQzKDB4MEYsIGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMHhCRSA6IDB4QjYsCiYjNDM7CQkgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIHNpemVvZih1MTYpOgomIzQzOwkJLyogbW92W3N8el14IGVheCxheCAqLwomIzQzOwkJRU1JVDMoMHgwRiwgZm0tJmd0O3JldF9mbGFncyAmYW1wOyBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAweEJGIDogMHhCNywKJiM0MzsJCSAgICAgIGFkZF8ycmVnKDB4QzAsIElBMzJfRUFYLCBJQTMyX0VBWCkpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZm0tJmd0O3JldF9zaXplICZhbXA7JmFtcDsgZm0tJmd0O3JldF9zaXplICZsdDs9IHNpemVvZih1MzIpKSB7CiYjNDM7CQlpZiAoZm0tJmd0O3JldF9mbGFncyAmYW1wOyBCVEZfRk1PREVMX1NJR05FRF9BUkcpCiYjNDM7CQkJLyogY2RxICovCiYjNDM7CQkJRU1JVDEoMHg5OSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJLyogeG9yIGVkeCxlZHggKi8KJiM0MzsJCQlFTUlUMigweDMxLCBhZGRfMnJlZygweEMwLCBJQTMyX0VEWCwgSUEzMl9FRFgpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZm0tJmd0O3JldF9zaXplKSB7CiAJCS8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlYXggKi8KIAkJRU1JVDMoMHg4OSwgYWRkXzJyZWcoMHg0MCwgSUEzMl9FQlAsIElBMzJfRUFYKSwKIAkJICAgICAgU1RBQ0tfVkFSKGJwZjJpYTMyW0JQRl9SRUdfMF1bMF0pKTsKLQotCWlmIChmbS0mZ3Q7cmV0X3NpemUgJmd0OyBzaXplb2YodTMyKSkKIAkJLyogbW92IGR3b3JkIHB0ciBbZWJwJiM0MztvZmZdLGVkeCAqLwogCQlFTUlUMygweDg5LCBhZGRfMnJlZygweDQwLCBJQTMyX0VCUCwgSUEzMl9FRFgpLAogCQkgICAgICBTVEFDS19WQVIoYnBmMmlhMzJbQlBGX1JFR18wXVsxXSkpOwomIzQzOwl9CiAKIAlpZiAoYnl0ZXNfaW5fc3RhY2spCiAJCS8qIGFkZCBlc3AsJiMzNDtieXRlc19pbl9zdGFjayYjMzQ7ICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA4MTEzZmVhN2JhODZjLi40NjM4ZTBhNDVkYjZlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTEyNyw2ICYjNDM7MTI3LDcgQEAKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfc2V0X3JldHZhbC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9sc20uc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfaml0X2lubGluZS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfa2Z1bmNfcmV0dXJuLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2lycS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3pleHQuc2tlbC5oJiMzNDsKQEAgLTI4OSw2ICYjNDM7MjkwLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2xzbSh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2xzbSk7IH0KIHZvaWQgdGVzdF9pcnEodm9pZCkJCQkgICAgICB7IFJVTihpcnEpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbXR1KHZvaWQpCQkgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfaml0X2lubGluZSh2b2lkKSAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2ppdF9pbmxpbmUpOyB9CiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX2tmdW5jX3JldHVybih2b2lkKSAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9rZnVuY19yZXR1cm4pOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKaW5kZXggNWVhY2YxYjQzMjUyMS4uMTQ5OGRhMDQ1OTdhZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKQEAgLTE1NSw2ICYjNDM7MTU1LDcgQEAKICNkZWZpbmUgX19idGZfZnVuY19wYXRoKHBhdGgpCV9fdGVzdF90YWcoJiMzNDt0ZXN0X2J0Zl9mdW5jX3BhdGg9JiMzNDsgcGF0aCkKICNkZWZpbmUgX19hcmNoKGFyY2gpCQlfX3Rlc3RfdGFnKCYjMzQ7dGVzdF9hcmNoPSYjMzQ7IGFyY2gpCiAjZGVmaW5lIF9fYXJjaF94ODZfNjQJCV9fYXJjaCgmIzM0O1g4Nl82NCYjMzQ7KQomIzQzOyNkZWZpbmUgX19hcmNoX3g4Nl8zMgkJX19hcmNoKCYjMzQ7WDg2XzMyJiMzNDspCiAjZGVmaW5lIF9fYXJjaF9hcm02NAkJX19hcmNoKCYjMzQ7QVJNNjQmIzM0OykKICNkZWZpbmUgX19hcmNoX3Jpc2N2NjQJCV9fYXJjaCgmIzM0O1JJU0NWNjQmIzM0OykKICNkZWZpbmUgX19hcmNoX3MzOTB4CQlfX2FyY2goJiMzNDtzMzkweCYjMzQ7KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjUyYTk0ZGFmMDM5MjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMKQEAgLTAsMCAmIzQzOzEsODQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVMKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2V4dGVybiBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7fSBrZnVuY19yZXR1cm5fbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIHN0cmluZ19hW10gPSAmIzM0O2EmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYltdID0gJiMzNDtiJiMzNDs7CiYjNDM7CiYjNDM7dm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHIgPSB7fTsKJiM0MzsKJiM0MzsJYnBmX3N0cmNtcChzdHJpbmdfYSwgc3RyaW5nX2IpOwomIzQzOwlicGZfZHlucHRyX2lzX251bGwoJmFtcDtwdHIpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1NMRUVQQUJMRSkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX2FyY2hfeDg2XzMyCiYjNDM7X19uYWtlZCB2b2lkIGtmdW5jX2Jvb2xfcmV0dXJuX3plcm9fZXh0ZW5kZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJKih1MzIgKikocjEwIC0gNCkgPSByMDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC00OwkJCQkJXAomIzQzOwlyMSA9ICVba2Z1bmNfcmV0dXJuX21hcF0gbGw7CQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlpZiByMCA9PSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJcjEgPSByMDsJCQkJCVwKJiM0MzsJcjIgPSA4OwkJCQkJCVwKJiM0MzsJcjMgPSAwOwkJCQkJCVwKJiM0MzsJcjQgPSByMTA7CQkJCQlcCiYjNDM7CXI0ICYjNDM7PSAtMjQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZHlucHRyX2Zyb21fbWVtXTsJCQlcCiYjNDM7CWlmIHIwICE9IDAgZ290byAxZjsJCQkJXAomIzQzOwlyMCA9IDB4MTAwMDAwMDAwIGxsOwkJCQlcCiYjNDM7CXIxID0gcjEwOwkJCQkJXAomIzQzOwlyMSAmIzQzOz0gLTI0OwkJCQkJXAomIzQzOwljYWxsIGJwZl9keW5wdHJfaXNfbnVsbDsJCQkJXAomIzQzOwlyMCAmZ3Q7Jmd0Oz0gMzI7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOzE6CXIwID0gMjsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKGtmdW5jX3JldHVybl9tYXApLAomIzQzOwkgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tKGJwZl9keW5wdHJfZnJvbV9tZW0pCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgtMSkKJiM0MztfX2FyY2hfeDg2XzMyCiYjNDM7X19uYWtlZCB2b2lkIGtmdW5jX2ludF9yZXR1cm5fc2lnbl9leHRlbmRlZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJXAomIzQzOwlyMSA9ICVbc3RyaW5nX2FdIGxsOwkJCQlcCiYjNDM7CXIyID0gJVtzdHJpbmdfYl0gbGw7CQkJCVwKJiM0MzsJY2FsbCBicGZfc3RyY21wOwkJCQlcCiYjNDM7CXIwICZndDsmZ3Q7PSAzMjsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIoc3RyaW5nX2EpLAomIzQzOwkgIF9faW1tX2FkZHIoc3RyaW5nX2IpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKaW5kZXggMDc4MDc3NTdiNTE4ZC4uOGE5ZjRhMzFhMWJiMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKQEAgLTM3NCwxNiAmIzQzOzM3NCwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqKmNvbGxlY3RfZGVjbF90YWdzKHN0cnVjdCBidGYgKmJ0ZiwgaW50IGlkLCBpbnQgKmNudCkKIGVudW0gYXJjaCB7CiAJQVJDSF9VTktOT1dOCT0gMHgxLAogCUFSQ0hfWDg2XzY0CT0gMHgyLAotCUFSQ0hfQVJNNjQJPSAweDQsCi0JQVJDSF9SSVNDVjY0CT0gMHg4LAotCUFSQ0hfUzM5MFgJPSAweDEwLAotCUFSQ0hfTE9PTkdBUkNICT0gMHgyMCwKJiM0MzsJQVJDSF9YODZfMzIJPSAweDQsCiYjNDM7CUFSQ0hfQVJNNjQJPSAweDgsCiYjNDM7CUFSQ0hfUklTQ1Y2NAk9IDB4MTAsCiYjNDM7CUFSQ0hfUzM5MFgJPSAweDIwLAomIzQzOwlBUkNIX0xPT05HQVJDSAk9IDB4NDAsCiB9OwogCiBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZCkKIHsKICNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiAJcmV0dXJuIEFSQ0hfWDg2XzY0OwomIzQzOyNlbGlmIGRlZmluZWQoX19pMzg2X18pCiYjNDM7CXJldHVybiBBUkNIX1g4Nl8zMjsKICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCiAJcmV0dXJuIEFSQ0hfQVJNNjQ7CiAjZWxpZiBkZWZpbmVkKF9fcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0CkBAIC01NzcsNiAmIzQzOzU4MCw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLAogCQl9IGVsc2UgaWYgKCh2YWwgPSBzdHJfaGFzX3BmeChzLCAmIzM0O3Rlc3RfYXJjaD0mIzM0OykpKSB7CiAJCQlpZiAoc3RyY21wKHZhbCwgJiMzNDtYODZfNjQmIzM0OykgPT0gMCkgewogCQkJCWFyY2ggPSBBUkNIX1g4Nl82NDsKJiM0MzsJCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICYjMzQ7WDg2XzMyJiMzNDspID09IDApIHsKJiM0MzsJCQkJYXJjaCA9IEFSQ0hfWDg2XzMyOwogCQkJfSBlbHNlIGlmIChzdHJjbXAodmFsLCAmIzM0O0FSTTY0JiMzNDspID09IDApIHsKIAkJCQlhcmNoID0gQVJDSF9BUk02NDsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtSSVNDVjY0JiMzNDspID09IDApIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB4ODYgMzItYml0IEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCBhbmQgYWRkcyBzb21lIHRlc3RzLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHNlZW0gZm9jdXNlZCBvbiBgZW1pdF9rZnVuY19jYWxsYCBpbiB0aGUgMzItYml0IHg4NiBCUEYgSklUIGNvbXBpbGVyLiBJdCYjMzk7cyBoYW5kbGluZyBob3cgdGhlIEpJVCBjb21waWxlciBkZWFscyB3aXRoIHRoZSByZXR1cm4gc2l6ZXMgb2Yga2Z1bmNzLCB0aGluZ3MgbGlrZSB6ZXJvLCBvbmUsIHR3bywgZm91ciwgb3IgZWlnaHQgYnl0ZXMsIGFuZCB0aGUgc2lnbiBvciB6ZXJvIGV4dGVuc2lvbiBvZiB0aG9zZSByZXR1cm5lZCB2YWx1ZXMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGFjdHVhbGx5IHJlYWNoYWJsZT8gSXMgdGhpcyBzb21ldGhpbmcgd29ydGggZGVkaWNhdGluZyBmdXp6aW5nIHJlc291cmNlcyB0bz8mIzM0OyBJIGtub3cgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCBvbmx5IGdldHMgY29tcGlsZWQgaWYgYENPTkZJR19YODZfMzJgIGFuZCBgQ09ORklHX0JQRl9KSVRgIGFyZSBib3RoIGVuYWJsZWQuIE5vdywgdXN1YWxseSBzeXprYWxsZXIgaXMgdGFyZ2V0aW5nIHg4Nl82NCwgYnV0IEkga25vdyBpdCAqY2FuKiBmdXp6IHg4Nl8zMiBhbmQgMzItYml0IGNvbXBhdCBtb2RlLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgMzItYml0IGNvZGUgcGF0aCBhY3R1YWxseSB1c2VkIGluIGEgMzItYml0IHg4NiBrZXJuZWw/CgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2x1ZXMgYWJvdXQgd2hlbiBhbmQgaG93IHRoaXMgZmlsZSBnZXRzIHB1bGxlZCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHNlZSBpZiBJIHNob3VsZCBjYXJlIGFib3V0IGRlZGljYXRpbmcgZnV6emluZyByZXNvdXJjZXMgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9jb21wMzJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvTWFrZWZpbGU9Nj1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGU6NzogICAgICAgIG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wMzIub1xuYXJjaC94ODYvbmV0L01ha2VmaWxlLTgtZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMzgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcmdldCBBcmNoaXRlY3R1cmUgYW5kIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIGZvciBgQ09ORklHX1g4Nl8zMmAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHN5emthbGxlciBhY3R1YWxseSAqZnV6emVzKiB4ODZfMzIuIEEgcXVpY2sgY2hlY2suLi4geWVwLCB0aGVyZSBhcmUgc3l6LWJvdCBpbnN0YW5jZXMgZGVkaWNhdGVkIHRvIGkzODYuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuCgpOb3csIHRoZSBzcGVjaWZpYyBwYXRjaCBJJiMzOTttIGV4YW1pbmluZyB0b3VjaGVzIGBlbWl0X2tmdW5jX2NhbGxgIGluIGBicGZfaml0X2NvbXAzMi5jYC4gTmF0dXJhbGx5LCBteSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHdoYXQgdGhhdCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW1pdF9rZnVuY19jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTQyMj1zdGF0aWMgdTggZ2V0X2NvbmRfam1wX29wY29kZShjb25zdCB1OCBvcCwgYm9vbCBpc19jbXBfbG8pXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU0Mi0gKlxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTU0MzogKiBlbWl0X2tmdW5jX2NhbGwoKSBmaW5kcyBvdXQgdGhlIGJ0Zl9mdW5jX21vZGVsIGJ5IGNhbGxpbmdcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTE1NDQtICogYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKCkuICBBIGJ0Zl9mdW5jX21vZGVsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU2MS0gKiBjdXJyZW50IChCUEZfSk1QIHwgQlBGX0NBTEwpIGJwZi1pbnNuLiAgSXQgaXMgcGFzc2VkIGFzIFwmIzM0O2VuZF9hZGRyXCYjMzQ7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNTYyOiAqIHRvIHRoZSBlbWl0X2tmdW5jX2NhbGwoKS4gIFRodXMsIGl0IGNhbiBsZWFybiB0aGUgXCYjMzQ7aW1tZWRpYXRlLWZvbGxvdy1jYWxsXCYjMzQ7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTYzLSAqIGFkZHJlc3MgYnkgZmlndXJpbmcgb3V0IGhvdyBtYW55IGppdC1pbnNuIGlzIGdlbmVyYXRlZCBiZXR3ZWVuXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU2OC0gKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjE1Njk6c3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU3MC1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTY5ND1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjEzMS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjIxMzI6XHRcdFx0XHRlcnIgPSBlbWl0X2tmdW5jX2NhbGwoYnBmX3Byb2csXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yMTMzLVx0XHRcdFx0XHRcdCAgICAgIGltYWdlICYjNDM7IGFkZHJzW2ldLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBLZnVuYyBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIGlzIHRyaWdnZXJlZCBieSBgZG9faml0YCwgc3BlY2lmaWNhbGx5IGZvciBCUEYga2Z1bmMgY2FsbHMuIEkga25vdyB0aGlzIGNvZGUsIHRoaXMgaXMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBsb2dpYywgdGhlIEJQRiBKSVQgZm9yIHg4Nl8zMiBpbiB0aGlzIGNhc2UuIFRoZSBjaGFuZ2VzIHRoZXkmIzM5O3ZlIG1hZGUgYWN0dWFsbHkgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LCBkZWFsaW5nIHdpdGggaG93IHdlIGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIHdoaWNoIGFyZSBub3cgb2YgdmFyaWVkIHNpemVzIGFuZCBzaWducywgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gU28sIGFic29sdXRlbHksIHdlIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4gVGhpcyBpcyBhIGdvb2QgdGFyZ2V0LgoKTm93LCBhYm91dCBgZW1pdF9rZnVuY19jYWxsYC4gSXQmIzM5O3Mgc3RhdGljLCBzbyBpdCAqY291bGQqIGJlIGlubGluZWQuIEJ1dCB3YWl0IGEgbW9tZW50Li4uIHRoYXQmIzM5O3Mgd2hhdCB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQsIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IHdvdWxkIG1ha2UgaXQgbGVzcyB1c2VmdWwuIFNvLCB3aGVyZSYjMzk7cyB0aGUgSklUIGVudHJ5IHBvaW50PyBBaCwgaGVyZSB3ZSBnbywgbG9va2luZyBhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIHdoaWNoIHNvdW5kcyByaWdodC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBUaGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBhY3Rpb24gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jPTI1NTE9Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTU1LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MjU1NjpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjU1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgSklUIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgSklUIGNvZGUuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBmdW5jdGlvbi4gQnV0IHdhaXQsIGl0JiMzOTtzIHByZXR0eSBnZW5lcmljLiBJdCYjMzk7cyB0aGUgKmdlbmVyaWMqIEpJVCBlbnRyeSBwb2ludCwgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIgZm9yIGEgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBjaGFuZ2VzLgoKYGRvX2ppdGAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIGRlYWQgZW5kIHJpZ2h0IG9mZiB0aGUgYmF0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgdXNpbmcgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFzIG15IG1haW4gcG9pbnQgb2YgaW50ZXJlc3QuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBsYWNlLgoKV2FpdCwgaXQgaXMgcHJldHR5IGdlbmVyaWMsIHNvIEkgbmVlZCBhIG1vcmUgZGlyZWN0IGxlYWQuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGVtaXRfa2Z1bmNfY2FsbGAuIFRoYXQmIzM5O3Mgc3RhdGljIGFzIHdlbGwsIGJ1dCBpdCYjMzk7cyBsYXJnZSBhbmQgc28gbWF5YmUgaXQgaXNuJiMzOTt0IGlubGluZWQ/IEl0JiMzOTtzIHdvcnRoIGEgbG9vayB0byBzZWUgaWYgSSBjYW4gZmluZCBhbiBleHRlcm5hbCByZWZlcmVuY2UgdGhhdCB3b3VsZCBiZSB3b3J0aCBpdC4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgdGhhdCBtaWdodCBiZSBhIGJldHRlciBmb2N1cy4KCk5vcGUsIHNlZW1zIGxpa2UgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgZXZlbiBpZiBpdCYjMzk7cyB0aGUgbW9yZSBnZW5lcmljIG9uZS4KCk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byBrbm93IHRoZSByZWxldmFudCBidWlsZCBmbGFncy4gRGVmaW5pdGVseSBgQ09ORklHX0JQRl9KSVRgIGZvciBzdXJlLiBBbmQsIHdoaWxlIEkmIzM5O20gYXQgaXQsIGBDT05GSUdfWDg2XzMyYC4gQnV0IHdhaXQsIHRoYXQmIzM5O3MgYW4gKmFyY2hpdGVjdHVyZSogY29uZmlnLiBTeXprYWxsZXIgaGFuZGxlcyBhcmNoZXMgc2VwYXJhdGVseSBzbyBpdCYjMzk7cyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHRvICpsaXN0KiBpdC4gQnV0IGl0IG1pZ2h0IGJlIGhlbHBmdWwgZm9yIGNvbnRleHQsIHNvIEkmIzM5O2xsIGluY2x1ZGUgaXQuIEFsdGhvdWdoLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9Mz1jb25maWcgNjRCSVRcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTktXG5hcmNoL3g4Ni9LY29uZmlnOjEwOmNvbmZpZyBYODZfMzJcbmFyY2gveDg2L0tjb25maWctMTEtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZz03NDk9Y29uZmlnIFg4Nl9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbmFyY2gveDg2L0tjb25maWctNzU3LVxuYXJjaC94ODYvS2NvbmZpZzo3NTg6Y29uZmlnIFg4Nl8zMl9JUklTXG5hcmNoL3g4Ni9LY29uZmlnLTc1OS1cdHRyaXN0YXRlIFwmIzM0O0V1cm9icmFpbGxlL0lyaXMgcG93ZXJvZmYgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MDgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gbG9naWMsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYFg4Nl8zMmAgb3B0aW9uIGlzIGVzc2VudGlhbGx5IGRlZmluZWQgYXMgYGRlZl9ib29sIHlgIGlmIGA2NEJJVGAgaXNuJiMzOTt0IGVuYWJsZWQuIFRoYXQgbWFrZXMgaXQgcmVkdW5kYW50IHRvIGV4cGxpY2l0bHkgbGlzdCBgWDg2XzMyYCBzZXBhcmF0ZWx5OyB0aGUgZGVwZW5kZW5jeSBoYW5kbGVzIGl0LgoKVGhlIGludGVyZXN0aW5nIG9uZXMgYXJlIHJlbGF0ZWQgdG8gQlBGLCBvYnZpb3VzbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9KSVRgIGlzIGluY2x1ZGVkLCB0aGF0JiMzOTtzIGNydWNpYWwuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiBrZnVuY3MsIGBCUEZfU1lTQ0FMTGAgd2lsbCBiZSBhIGRlcGVuZGVuY3ksIHRoYXQgc2VlbXMgbG9naWNhbC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRseSBsaW5rZWQgY29uZmlndXJhdGlvbnMuIE5vIHVzZSBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLgoKUmlnaHQsIHRoZSB0ZXN0cyBhcmUgdXNpbmcgYGJwZl9zdHJjbXBgIGFuZCBgYnBmX2R5bnB0cl9pc19udWxsYCBrZnVuY3MuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB3aGVyZSBgYnBmX3N0cmNtcGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB0byBtYWtlIGNlcnRhaW4gdGhpcyBjb25maWd1cmF0aW9uIGlzIHN1ZmZpY2llbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyY21wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTM3MzA9c3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2MC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3NjE6ICogYnBmX3N0cmNtcCAtIENvbXBhcmUgdHdvIHN0cmluZ3Ncbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NjItICogQHMxX19pZ246IE9uZSBzdHJpbmdcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzcyLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc3MzpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3NC17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk0OD1CVEZfSURfRkxBR1MoZnVuYywgX19icGZfdHJhcClcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk1MC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VjbXApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTA9Y2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy0zMS0vKiBQYXNzaW5nIE5VTEwgdG8gc3RyaW5nIGtmdW5jcyAodHJlYXRlZCBhcyBhIHVzZXJzcGFjZSBwdHIpICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjMyOlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNtcF9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAoTlVMTCwgXCYjMzQ7aGVsbG9cJiMzNDspOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjMzOlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cmNtcF9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAoXCYjMzQ7aGVsbG9cJiMzNDssIE5VTEwpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTM0LVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNhc2VjbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZWNtcChOVUxMLCBcJiMzNDtIRUxMT1wmIzM0Oyk7IH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jPTU1PVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBOVUxMLCAxKTsgfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMtNTctLyogUGFzc2luZyB1c2Vyc3BhY2UgcHRyIHRvIHN0cmluZyBrZnVuY3MgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NTg6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAodXNlcl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo1OTpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChcJiMzNDtoZWxsb1wmIzM0OywgdXNlcl9wdHIpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTYwLVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNhc2VjbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNhc2VjbXAodXNlcl9wdHIsIFwmIzM0O0hFTExPXCYjMzQ7KTsgfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9ODE9U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCB1c2VyX3B0ciwgMSk7IH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTg1LS8qIFBhc3NpbmcgaW52YWxpZCBrZXJuZWwgcHRyIHRvIHN0cmluZyBrZnVuY3Mgc2hvdWxkIGFsd2F5cyByZXR1cm4gLUVGQVVMVCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo4NjpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RyY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKGludmFsaWRfa2Vybl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo4NzpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RyY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKFwmIzM0O2hlbGxvXCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyKTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy04OC1TRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RyY2FzZWNtcF9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNhc2VjbXAoaW52YWxpZF9rZXJuX3B0ciwgXCYjMzQ7SEVMTE9cJiMzNDspOyB9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYz03PWNoYXIgbG9uZ19zdHJbWEFUVFJfU0laRV9NQVggJiM0MzsgMV07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jLTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jOjk6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIGludCB0ZXN0X3N0cmNtcF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAobG9uZ19zdHIsIGxvbmdfc3RyKTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYy0xMC1TRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RyY2FzZWNtcF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlY21wKGxvbmdfc3RyLCBsb25nX3N0cik7IH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM9OD1jaGFyIHN0cltdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jLTEyLS8qIEZ1bmN0aW9uYWwgdGVzdHMgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzoxMzpfX3Rlc3QoMCkgaW50IHRlc3Rfc3RyY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChzdHIsIFwmIzM0O2hlbGxvIHdvcmxkXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjE0Ol9fdGVzdCgxKSBpbnQgdGVzdF9zdHJjbXBfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChzdHIsIFwmIzM0O2hlbGxvXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jLTE1LV9fdGVzdCgwKSBpbnQgdGVzdF9zdHJjYXNlY21wX2VxMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlY21wKHN0ciwgXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDspOyB9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmM6ODpleHRlcm4gaW50IGJwZl9zdHJjbXAoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbikgX19rc3ltO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTktZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jPTIxPXZvaWQgX19rZnVuY19idGZfcm9vdCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYy0yNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYzoyNTpcdGJwZl9zdHJjbXAoc3RyaW5nX2EsIHN0cmluZ19iKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYy0yNi1cdGJwZl9keW5wdHJfaXNfbnVsbChcdTAwMjZwdHIpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYz02OT1fX25ha2VkIHZvaWQga2Z1bmNfaW50X3JldHVybl9zaWduX2V4dGVuZGVkKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTc0LVx0cjIgPSAlW3N0cmluZ19iXSBsbDtcdFx0XHRcdFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmM6NzU6XHRjYWxsIGJwZl9zdHJjbXA7XHRcdFx0XHRcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTc2LVx0cjAgXHUwMDNlXHUwMDNlPSAzMjtcdFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjUKCQkJCQkJCW91dHB1dDogNzUKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgMzItYml0IHg4NiBCUEYgSklUIGNvbXBpbGF0aW9uIGhhcHBlbnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgY29tcGlsYXRpb24gcHJvY2VzcyBpcyBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEJ1dCB3YWl0IGEgc2Vjb25kLCB0aGF0IGZ1bmN0aW9uICppcyogZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgZmlsZSwgYGJwZl9qaXRfY29tcDMyLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYW55IG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBmaWxlIGFyZSBub24tc3RhdGljIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYz0yMzk3PWVtaXRfY29uZF9qbXA6XHRcdGptcF9jb25kID0gZ2V0X2NvbmRfam1wX29wY29kZShCUEZfT1AoY29kZSksIGZhbHNlKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTUwLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MjU1MTpib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjU1Mi17XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MjU1Nj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI2MjktXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoyNjMwOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNjMxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIENvbXBpbGVyIEVudHJ5IFBvaW50KioKCk9rYXksIHNvIGBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBmdW5jdGlvbiBoZXJlLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBiZWdpbiBhIGRlZXAgZGl2ZS4gWWVwLCBpdCYjMzk7cyB0aGUgSklUIGNvbXBpbGVyJiMzOTtzIGVudHJ5IHBvaW50LCB3aGljaCBtYWtlcyBzZW5zZS4gSSB3b3VsZG4mIzM5O3QgZXhwZWN0IGl0IHRvIGJlIGEgaG90LXBhdGggZnVuY3Rpb247IGl0JiMzOTtzIHdoYXQgZ2V0cyBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZGluZywgc28gdGhhdCBjaGVja3Mgb3V0LiBJdCBsb29rcyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sLgoKTm93LCBsZXQmIzM5O3MgYW50aWNpcGF0ZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9idmlvdXNseSwgYEJQRl9TWVNDQUxMYCB3aWxsIGJlIGVzc2VudGlhbCwgYW5kIGBCUEZfSklUYCBnb2VzIHdpdGhvdXQgc2F5aW5nLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBzcGVjaWZpYyB0ZXN0IG9yIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2VzcyBtb3JlIGJyb2FkbHkgd2lsbCByZWx5IHVwb24/IFRoZSB0ZXN0IGNvZGUgbWVudGlvbnMgYGJwZl9zdHJjbXBgLCB3aGljaCBsaXZlcyBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgaWYgdGhhdCBwYXJ0aWN1bGFyIGhlbHBlciBmdW5jdGlvbiBoYXMgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmNtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTM3MzA9c3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2MC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3NjE6ICogYnBmX3N0cmNtcCAtIENvbXBhcmUgdHdvIHN0cmluZ3Ncbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NjItICogQHMxX19pZ246IE9uZSBzdHJpbmdcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzcyLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc3MzpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3NC17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk0OD1CVEZfSURfRkxBR1MoZnVuYywgX19icGZfdHJhcClcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk1MC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VjbXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NQoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBDb21waWxlciBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIGluIHF1ZXN0aW9uIHJlc2lkZXMgd2l0aGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AsIGJ1dCBvbmx5IHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCwgYWxvbmcgd2l0aCBgQlBGX0pJVGAsIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIEpJVCBjb21waWxhdGlvbiBlbnRyeSBwb2ludCDigJMgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIGBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGxgIGFuZCBgYnBmX2ppdF9uZWVkc196ZXh0YCBhcmUgcmVsYXRlZCwgYnV0IHRoZSBmb3JtZXIgaXMgdHJpdmlhbCAoanVzdCByZXR1cm5zIHRydWUpIGFuZCB0aGUgbGF0dGVyIGp1c3QgcmV0dXJucyB0cnVlLiBUaGVyZWZvcmUsIGZvY3VzaW5nIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBtYWtlcyB0aGUgbW9zdCBzZW5zZS4KCkkganVzdCBxdWlja2x5IGNoZWNrZWQgYGVtaXRfa2Z1bmNfY2FsbGAgYW5kIGNvbmZpcm1lZCBpdCYjMzk7cyBzdGF0aWMsIHNvIHdlJiMzOTtyZSBnb29kIHRvIGdvIHdpdGggYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKVGhlIGRpZmYgYWxzbyB0b3VjaGVzIGEgYnVuY2ggb2YgdGVzdHM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNgLiBBbGwgdGVzdHMsIHNvIG5vIGtlcm5lbCBjb2RlIGFjdHVhbGx5ICptb2RpZmllZCogb3RoZXIgdGhhbiB0aGlzIG9uZSBmaWxlLgoKQWgsIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2Ag4oCTIHRoaXMgaXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlci4gVGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCBoYW5kbGluZyBrZnVuYyBjYWxscyBhbmQgdGhlaXIgcmV0dXJuIHZhbHVlcyBjb3JyZWN0bHksIGluY2x1ZGluZyBkaWZmZXJlbnQgc2l6ZXMgYW5kIHNpZ25zLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcmVkIGZsYWcuIFRoZSBCUEYgSklUIGNvbXBpbGVyIGlzIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayB3aXRoIHRoZSBmdXp6ZXIuCgpJbiBzaG9ydCwgaGVyZSYjMzk7cyBteSBxdWljayBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFllcwoqICAgKipGb2N1c1N5bWJvbHMqKjogYFsmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0O11gCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFsmIzM0O0JQRl9TWVNDQUxMJiMzNDssICYjMzQ7QlBGX0pJVCYjMzQ7XWAKKiAgICoqUmVhc29uaW5nKio6ICYjMzQ7VGhlIHBhdGNoIGludm9sdmVzIHRoZSAzMi1iaXQgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIG9mIHZhcmlvdXMgc2l6ZXMgYW5kIHNpZ25zLiBJdCBkaXJlY3RseSBhZmZlY3RzIHRoZSBCUEYgSklUIGNvbXBpbGVyLCB3aGljaCBpcyBjcnVjaWFsIGtlcm5lbCBsb2dpYywgYW5kIHRoZXJlZm9yZSBwcmVzZW50cyBhIGdvb2Qgb3Bwb3J0dW5pdHkgZm9yIGZ1enppbmcuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSAzMi1iaXQgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIG9mIGRpZmZlcmVudCBzaXplcyBhbmQgc2lnbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgSklUKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciAzMi1iaXQgeDg2IChgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgKSB0byBwcm9wZXJseSBzaWduLWV4dGVuZCBvciB6ZXJvLWV4dGVuZCByZXR1cm4gdmFsdWVzIGZyb20ga2Z1bmNzLiBXaGlsZSB0aGlzIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgb3IgbGVmdG92ZXIgcmVnaXN0ZXIgc3RhdGUgY291bGQgYmUgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIEtNU0FOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIChlLmcuLCBgWDg2XzY0YCkuIFRoZSBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBzdHJpY3RseSBmb3IgMzItYml0IHg4NiAoYENPTkZJR19YODZfMzJgKSBhbmQgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgaW4gYSBLTVNBTiBidWlsZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmN2Q3NzgyNjQyYzZiNmVlYTQ3M2MxMzQ2MWJhN2U3MmI4MWQ2N2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzowNDo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMKaW5kZXggODUyYmFmMmU0ZGI0ZC4uMDE3Y2M5ZTdlNGUyYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMKQEAgLTE2MjAsMTMgJiM0MzsxNjIwLDI1IEBAIHN0YXRpYyBpbnQgZW1pdF9rZnVuY19jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIHU4ICplbmRfYWRkciwKIAkJLyogYWRkIGVzcCwmIzM0O2J5dGVzX2luX3N0YWNrJiMzNDsgKi8KIAkJZW5kX2FkZHIgLT0gMzsKIAotCS8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlZHggKi8KLQlpZiAoZm0tJmd0O3JldF9zaXplICZndDsgc2l6ZW9mKHUzMikpCi0JCWVuZF9hZGRyIC09IDM7Ci0KLQkvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWF4ICovCi0JaWYgKGZtLSZndDtyZXRfc2l6ZSkKJiM0MzsJc3dpdGNoIChmbS0mZ3Q7cmV0X3NpemUpIHsKJiM0MzsJY2FzZSAwOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2Ugc2l6ZW9mKHU4KToKJiM0MzsJY2FzZSBzaXplb2YodTE2KToKJiM0MzsJCS8qIG1vdltzfHpdeCBlYXgsW2FdeCAqLwogCQllbmRfYWRkciAtPSAzOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2Ugc2l6ZW9mKHUzMik6CiYjNDM7CQkvKiBjZHEgb3IgeG9yIGVkeCxlZHggKi8KJiM0MzsJCWVuZF9hZGRyIC09IGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMSA6IDI7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBzaXplb2YodTY0KToKJiM0MzsJCS8qIFN0b3JlIEVEWDpFQVggaW4gUjAuICovCiYjNDM7CQllbmRfYWRkciAtPSA2OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiAJam1wX29mZnNldCA9ICh1OCAqKV9fYnBmX2NhbGxfYmFzZSAmIzQzOyBpbnNuLSZndDtpbW0gLSBlbmRfYWRkcjsKIAlpZiAoIWlzX3NpbW0zMihqbXBfb2Zmc2V0KSkgewpAQCAtMTYzNywxNSAmIzQzOzE2NDksMzggQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLAogCiAJRU1JVDFfb2ZmMzIoMHhFOCwgam1wX29mZnNldCk7CiAKLQlpZiAoZm0tJmd0O3JldF9zaXplKQomIzQzOwlzd2l0Y2ggKGZtLSZndDtyZXRfc2l6ZSkgewomIzQzOwljYXNlIHNpemVvZih1OCk6CiYjNDM7CQkvKiBtb3Zbc3x6XXggZWF4LGFsICovCiYjNDM7CQlFTUlUMygweDBGLCBmbS0mZ3Q7cmV0X2ZsYWdzICZhbXA7IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDB4QkUgOiAweEI2LAomIzQzOwkJICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBzaXplb2YodTE2KToKJiM0MzsJCS8qIG1vdltzfHpdeCBlYXgsYXggKi8KJiM0MzsJCUVNSVQzKDB4MEYsIGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMHhCRiA6IDB4QjcsCiYjNDM7CQkgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZtLSZndDtyZXRfc2l6ZSAmYW1wOyZhbXA7IGZtLSZndDtyZXRfc2l6ZSAmbHQ7PSBzaXplb2YodTMyKSkgewomIzQzOwkJaWYgKGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHKQomIzQzOwkJCS8qIGNkcSAqLwomIzQzOwkJCUVNSVQxKDB4OTkpOwomIzQzOwkJZWxzZQomIzQzOwkJCS8qIHhvciBlZHgsZWR4ICovCiYjNDM7CQkJRU1JVDIoMHgzMSwgYWRkXzJyZWcoMHhDMCwgSUEzMl9FRFgsIElBMzJfRURYKSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZtLSZndDtyZXRfc2l6ZSkgewogCQkvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWF4ICovCiAJCUVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VBWCksCiAJCSAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzBdKSk7Ci0KLQlpZiAoZm0tJmd0O3JldF9zaXplICZndDsgc2l6ZW9mKHUzMikpCiAJCS8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlZHggKi8KIAkJRU1JVDMoMHg4OSwgYWRkXzJyZWcoMHg0MCwgSUEzMl9FQlAsIElBMzJfRURYKSwKIAkJICAgICAgU1RBQ0tfVkFSKGJwZjJpYTMyW0JQRl9SRUdfMF1bMV0pKTsKJiM0MzsJfQogCiAJaWYgKGJ5dGVzX2luX3N0YWNrKQogCQkvKiBhZGQgZXNwLCYjMzQ7Ynl0ZXNfaW5fc3RhY2smIzM0OyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKaW5kZXggODExM2ZlYTdiYTg2Yy4uNDYzOGUwYTQ1ZGI2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3NldF9yZXR2YWwuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfbHNtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2tmdW5jX3JldHVybi5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpcnEuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY3R4X3B0cl9wYXJhbS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl96ZXh0LnNrZWwuaCYjMzQ7CkBAIC0yODksNiAmIzQzOzI5MCw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9sc20odm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9sc20pOyB9CiB2b2lkIHRlc3RfaXJxKHZvaWQpCQkJICAgICAgeyBSVU4oaXJxKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKQkJICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9rZnVuY19yZXR1cm4odm9pZCkgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfa2Z1bmNfcmV0dXJuKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCmluZGV4IDVlYWNmMWI0MzI1MjEuLjE0OThkYTA0NTk3YWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCkBAIC0xNTUsNiAmIzQzOzE1NSw3IEBACiAjZGVmaW5lIF9fYnRmX2Z1bmNfcGF0aChwYXRoKQlfX3Rlc3RfdGFnKCYjMzQ7dGVzdF9idGZfZnVuY19wYXRoPSYjMzQ7IHBhdGgpCiAjZGVmaW5lIF9fYXJjaChhcmNoKQkJX190ZXN0X3RhZygmIzM0O3Rlc3RfYXJjaD0mIzM0OyBhcmNoKQogI2RlZmluZSBfX2FyY2hfeDg2XzY0CQlfX2FyY2goJiMzNDtYODZfNjQmIzM0OykKJiM0MzsjZGVmaW5lIF9fYXJjaF94ODZfMzIJCV9fYXJjaCgmIzM0O1g4Nl8zMiYjMzQ7KQogI2RlZmluZSBfX2FyY2hfYXJtNjQJCV9fYXJjaCgmIzM0O0FSTTY0JiMzNDspCiAjZGVmaW5lIF9fYXJjaF9yaXNjdjY0CQlfX2FyY2goJiMzNDtSSVNDVjY0JiMzNDspCiAjZGVmaW5lIF9fYXJjaF9zMzkweAkJX19hcmNoKCYjMzQ7czM5MHgmIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41MmE5NGRhZjAzOTIyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jCkBAIC0wLDAgJiM0MzsxLDg0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztleHRlcm4gaW50IGJwZl9zdHJjbXAoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbikgX19rc3ltOwomIzQzO2V4dGVybiBib29sIGJwZl9keW5wdHJfaXNfbnVsbChjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqcCkgX19rc3ltOwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30ga2Z1bmNfcmV0dXJuX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYVtdID0gJiMzNDthJiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgc3RyaW5nX2JbXSA9ICYjMzQ7YiYjMzQ7OwomIzQzOwomIzQzO3ZvaWQgX19rZnVuY19idGZfcm9vdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyID0ge307CiYjNDM7CiYjNDM7CWJwZl9zdHJjbXAoc3RyaW5nX2EsIHN0cmluZ19iKTsKJiM0MzsJYnBmX2R5bnB0cl9pc19udWxsKCZhbXA7cHRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9TTEVFUEFCTEUpCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19hcmNoX3g4Nl8zMgomIzQzO19fbmFrZWQgdm9pZCBrZnVuY19ib29sX3JldHVybl96ZXJvX2V4dGVuZGVkKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7CSoodTMyICopKHIxMCAtIDQpID0gcjA7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtNDsJCQkJCVwKJiM0MzsJcjEgPSAlW2tmdW5jX3JldHVybl9tYXBdIGxsOwkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXIxID0gcjA7CQkJCQlcCiYjNDM7CXIyID0gODsJCQkJCQlcCiYjNDM7CXIzID0gMDsJCQkJCQlcCiYjNDM7CXI0ID0gcjEwOwkJCQkJXAomIzQzOwlyNCAmIzQzOz0gLTI0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2R5bnB0cl9mcm9tX21lbV07CQkJXAomIzQzOwlpZiByMCAhPSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJcjAgPSAweDEwMDAwMDAwMCBsbDsJCQkJXAomIzQzOwlyMSA9IHIxMDsJCQkJCVwKJiM0MzsJcjEgJiM0Mzs9IC0yNDsJCQkJCVwKJiM0MzsJY2FsbCBicGZfZHlucHRyX2lzX251bGw7CQkJCVwKJiM0MzsJcjAgJmd0OyZndDs9IDMyOwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsxOglyMCA9IDI7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW1fYWRkcihrZnVuY19yZXR1cm5fbWFwKSwKJiM0MzsJICBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJICBfX2ltbShicGZfZHlucHRyX2Zyb21fbWVtKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1NMRUVQQUJMRSkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpCiYjNDM7X19hcmNoX3g4Nl8zMgomIzQzO19fbmFrZWQgdm9pZCBrZnVuY19pbnRfcmV0dXJuX3NpZ25fZXh0ZW5kZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJcjEgPSAlW3N0cmluZ19hXSBsbDsJCQkJXAomIzQzOwlyMiA9ICVbc3RyaW5nX2JdIGxsOwkJCQlcCiYjNDM7CWNhbGwgYnBmX3N0cmNtcDsJCQkJXAomIzQzOwlyMCAmZ3Q7Jmd0Oz0gMzI7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHN0cmluZ19hKSwKJiM0MzsJICBfX2ltbV9hZGRyKHN0cmluZ19iKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jCmluZGV4IDA3ODA3NzU3YjUxOGQuLjhhOWY0YTMxYTFiYjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jCkBAIC0zNzQsMTYgJiM0MzszNzQsMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKipjb2xsZWN0X2RlY2xfdGFncyhzdHJ1Y3QgYnRmICpidGYsIGludCBpZCwgaW50ICpjbnQpCiBlbnVtIGFyY2ggewogCUFSQ0hfVU5LTk9XTgk9IDB4MSwKIAlBUkNIX1g4Nl82NAk9IDB4MiwKLQlBUkNIX0FSTTY0CT0gMHg0LAotCUFSQ0hfUklTQ1Y2NAk9IDB4OCwKLQlBUkNIX1MzOTBYCT0gMHgxMCwKLQlBUkNIX0xPT05HQVJDSAk9IDB4MjAsCiYjNDM7CUFSQ0hfWDg2XzMyCT0gMHg0LAomIzQzOwlBUkNIX0FSTTY0CT0gMHg4LAomIzQzOwlBUkNIX1JJU0NWNjQJPSAweDEwLAomIzQzOwlBUkNIX1MzOTBYCT0gMHgyMCwKJiM0MzsJQVJDSF9MT09OR0FSQ0gJPSAweDQwLAogfTsKIAogc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChfX3g4Nl82NF9fKQogCXJldHVybiBBUkNIX1g4Nl82NDsKJiM0MzsjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQomIzQzOwlyZXR1cm4gQVJDSF9YODZfMzI7CiAjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQogCXJldHVybiBBUkNIX0FSTTY0OwogI2VsaWYgZGVmaW5lZChfX3Jpc2N2KSAmYW1wOyZhbXA7IF9fcmlzY3ZfeGxlbiA9PSA2NApAQCAtNTc3LDYgJiM0Mzs1ODAsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlciwKIAkJfSBlbHNlIGlmICgodmFsID0gc3RyX2hhc19wZngocywgJiMzNDt0ZXN0X2FyY2g9JiMzNDspKSkgewogCQkJaWYgKHN0cmNtcCh2YWwsICYjMzQ7WDg2XzY0JiMzNDspID09IDApIHsKIAkJCQlhcmNoID0gQVJDSF9YODZfNjQ7CiYjNDM7CQkJfSBlbHNlIGlmIChzdHJjbXAodmFsLCAmIzM0O1g4Nl8zMiYjMzQ7KSA9PSAwKSB7CiYjNDM7CQkJCWFyY2ggPSBBUkNIX1g4Nl8zMjsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtBUk02NCYjMzQ7KSA9PSAwKSB7CiAJCQkJYXJjaCA9IEFSQ0hfQVJNNjQ7CiAJCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICYjMzQ7UklTQ1Y2NCYjMzQ7KSA9PSAwKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzIxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2ggZm9yIDMyLWJpdCB4ODYqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBlbWl0X2tmdW5jX2NhbGxgLiBJdCYjMzk7cyBhZGRyZXNzaW5nIGhvdyB0aGUgQlBGIEpJVCBjb21waWxlciBoYW5kbGVzIHJldHVybiB2YWx1ZXMgZnJvbSBrZXJuZWwgZnVuY3Rpb24gY2FsbHMgKGtmdW5jcykuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBlbnN1cmluZyBjb3JyZWN0IHByb3BhZ2F0aW9uIG9mIHJldHVybiB2YWx1ZXMgb2YgdmFyeWluZyBzaXplcyDigJMgdTgsIHUxNiwgdTMyLCBhbmQgdTY0IOKAkyBhbmQgaGFuZGxpbmcgdGhlaXIgc2lnbmVkbmVzcyBjb3JyZWN0bHkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIHRvIGVpdGhlciB6ZXJvLWV4dGVuZCBvciBzaWduLWV4dGVuZCB0aGUga2Z1bmMmIzM5O3MgcmV0dXJuIHZhbHVlIGJhc2VkIG9uIGl0cyBzaXplIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHNpZ25lZC4gVGhlIGFkZGVkIHRlc3RzIGluIGB2ZXJpZmllcl9rZnVuY19yZXR1cm4uY2AgYXJlIGEgd2VsY29tZSBhZGRpdGlvbiB0byB2YWxpZGF0ZSB0aGlzIGJlaGF2aW9yLgoKTG9va2luZyBhdCB0aGUgY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoZSBvbGQgY29kZSBzaW1wbHkgbW92ZWQgdGhlIHJldHVybiB2YWx1ZSwgYXNzdW1pbmcgdGhhdCB0aGUgY2FsbGluZyBjb252ZW50aW9uIHdvdWxkIGhhbmRsZSB0aGUgdXBwZXIgYml0cyBvZiB0aGUgNjQtYml0IHJldHVybiByZWdpc3RlciBSMCAod2hpY2ggY29ycmVzcG9uZHMgdG8gRURYOkVBWCBvbiB4ODYtMzIpLiBOb3csIGl0IGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgc2l6ZSBhbmQgc2lnbmVkbmVzcywgdXNpbmcgYXBwcm9wcmlhdGUgaW5zdHJ1Y3Rpb25zIGxpa2UgYG1vdnp4YCAoemVyby1leHRlbmQpLCBgbW92c3hgIChzaWduLWV4dGVuZCksIGBjZHFgIChzaWduLWV4dGVuZCBFQVggdG8gRURYOkVBWCksIGFuZCBgeG9yIGVkeCxlZHhgICh6ZXJvIEVEWCkuIFRoaXMgaXMgY3J1Y2lhbC4gV2l0aG91dCB0aGlzLCB5b3UgY291bGQgZW5kIHVwIHdpdGggZ2FyYmFnZSBkYXRhIGluIHRoZSB1cHBlciBiaXRzIG9mIFIwLgoKVGhpcyB0cmlnZ2VycyBhIHRob3VnaHQg4oCTIGNvdWxkIHRoaXMgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkPyBCZWNhdXNlIHRoZSB1cHBlciBiaXRzIHdlcmUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkLiBUaGUgQlBGIGFyY2hpdGVjdHVyZSB1c2VzIFIwIGFzIGEgNjQtYml0IHJldHVybiByZWdpc3RlciwgYnV0IGtmdW5jcyBtaWdodCByZXR1cm4gc21hbGxlciB2YWx1ZXMsIGxpa2UgMzItYml0IHZhbHVlcy4gVGhhdCB3b3VsZCBtZWFuIHRoZSB1cHBlciAzMiBiaXRzIG9mIFIwIHdvdWxkIGNvbnRhaW4gZ2FyYmFnZS4gSWYgdGhlIEJQRiBwcm9ncmFtIHRoZW4gdXNlZCB0aGVzZSBiaXRzLCBpdCBjb3VsZCByZWFkIHRoYXQgZ2FyYmFnZSBkYXRhLiBJZiB0aGUga2Z1bmMgaXMga2VybmVsIGNvZGUsIHdvdWxkIHRoaXMgbWVhbiBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIGtlcm5lbD8gSXMgdGhpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrPwoKQWhhISBUaGlzIGlzIGEgcmVnaXN0ZXIgbGVhaywgbm90IGEgbWVtb3J5IGxlYWsgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBUaGUgQlBGIHByb2dyYW0gKmNhbiogcmVhZCBFRFggKG9yIHRoZSB1cHBlciBiaXRzIG9mIEVBWCksIGFuZCBFRFggbWlnaHQgY29udGFpbiBzb21lIGxlZnRvdmVyIGtlcm5lbCBkYXRhIG9yIGEgcG9pbnRlci4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGlzIGhhbmRsZWQgYnkgdG9vbHMgbGlrZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpPwoKV2FpdCwgS01TQU4hIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0Li4uIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcuLi4gVGhpcyBjb2RlIGlzIGZvciB4ODYtMzIuIEtNU0FOLCBsYXN0IEkgY2hlY2tlZCwgZG9lcyBub3Qgc3VwcG9ydCAzMi1iaXQgeDg2ISBJdCBmb2N1c2VzIG9uIHg4Ni02NCBhbmQgcG90ZW50aWFsbHkgczM5MHggYW5kIGFybTY0LCBzbyB0ZXN0aW5nIHdpdGggS01TQU4gd291bGQgYmUgdXNlbGVzcyBvbiB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGBicGZfaml0X2NvbXAzMi5jYCB3aGljaCBpcyBidWlsdCBleGNsdXNpdmVseSBmb3IgMzItYml0IHg4Ni4gU28gS01TQU4gd291bGQgKm5vdCogYmUgdXNlZCB0byB0ZXN0IHRoaXMgcGF0aCwgZXZlbiBpZiB0aGUgdXNlciB3ZXJlIHRvIHVzZSBpdC4gVGhhdCYjMzk7cyBnb29kIHRvIGNsYXJpZnkuIExldCBtZSBjb25maXJtLCBJIGJlbGlldmUgSSByZWFkIHRoYXQgS01TQU4gb25seSBzdXBwb3J0cyB4ODYtNjQuICpDaGVja3MgbGliL0tjb25maWcua21zYW4qLiBZZXMsIEtNU0FOIHJlcXVpcmVzIHg4Ni02NC4gQ2FzZSBjbG9zZWQuIFRoZSBwYXRjaCBpcyBuZWNlc3NhcnksIGFuZCBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgdG8gdmFsaWRhdGluZyB0aGlzIDMyLWJpdCB4ODYgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtNU0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcua21zYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcua21zYW49NT1jb25maWcgSEFWRV9LTVNBTl9DT01QSUxFUlxuLS1cbmxpYi9LY29uZmlnLmttc2FuLTctXG5saWIvS2NvbmZpZy5rbXNhbjo4OmNvbmZpZyBLTVNBTlxubGliL0tjb25maWcua21zYW4tOS1cdGJvb2wgXCYjMzQ7S01TQU46IGRldGVjdG9yIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHVzZVwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmttc2FuPTI2PWlmIEtNU0FOXG5saWIvS2NvbmZpZy5rbXNhbi0yNy1cbmxpYi9LY29uZmlnLmttc2FuOjI4OmNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcbmxpYi9LY29uZmlnLmttc2FuLTI5LVx0Ym9vbCBcJiMzNDtDaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uc1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmttc2FuLTQxLVxubGliL0tjb25maWcua21zYW46NDI6Y29uZmlnIEtNU0FOX0tVTklUX1RFU1RcbmxpYi9LY29uZmlnLmttc2FuLTQzLVx0dHJpc3RhdGUgXCYjMzQ7S01TQU4gaW50ZWdyYXRpb24gdGVzdCBzdWl0ZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipLTVNBTiBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBLTVNBTiBpcyBwcm9wZXJseSBjb25maWd1cmVkIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBhbGwgdGhpbmdzIHg4Ni1zcGVjaWZpYy4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgS01TQU4gb3B0aW9ucyBkZWZpbmVkIGFuZCBob3BlZnVsbHkgZW5hYmxlZCAob3IgYXQgbGVhc3QgcmVhZGlseSBhdmFpbGFibGUpIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS4gVGhpcyBjaGVjayBpcyBjcnVjaWFsOyBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQgY29uZmlybWluZyB0aGlzIGZvdW5kYXRpb24gaXMgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0FSQ0hfS01TQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTk4LVx0c2VsZWN0IEhBVkVfQVJDSF9LRkVOQ0VcbmFyY2gveDg2L0tjb25maWc6MTk5Olx0c2VsZWN0IEhBVkVfQVJDSF9LTVNBTlx0XHRcdGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZy0yMDAtXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEluYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgd2UmIzM5O3ZlIGdvdCBhIGBzZWxlY3QgSEFWRV9BUkNIX0tNU0FOIGlmIFg4Nl82NGAgY29uZGl0aW9uLiBSaWdodCBhd2F5LCB0aGF0JiMzOTtzIGEgcmVkIGZsYWcuIEtNU0FOIGlzIGRlZmluaXRlbHkgKm5vdCogc3VwcG9ydGVkIG9uIDMyLWJpdCB4ODYuIFRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBvbmx5IGV2ZXIgY29tcGlsZWQgZm9yIDMyLWJpdCB4ODYgYXJjaGl0ZWN0dXJlcy4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQuCgpTaW5jZSBgYnBmX2ppdF9jb21wMzIuY2Agb25seSBleGlzdHMgaW4gMzItYml0IGJ1aWxkcyBhbmQgS01TQU4gaXMgZXhjbHVzaXZlIHRvIDY0LWJpdCwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yICp0aGlzKiBwYXRjaCBkb2VzbiYjMzk7dCBtYWtlIGFueSBzZW5zZS4gVGhlIG1vZGlmaWVkIGNvZGUgc2ltcGx5IHdvbiYjMzk7dCBiZSBwYXJ0IG9mIGEgS01TQU4tZW5hYmxlZCBidWlsZC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLCBpbiBjYXNlIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmaWxlcyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiAqU2lnaCogT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIGJ1bmNoIG9mIHNlbGZ0ZXN0IGZpbGVzOiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jYC4gQWxsIHNlbGZ0ZXN0cy4gTm8gcmVhbCBrZXJuZWwgY29kZSBtb2RpZmljYXRpb24gYXBhcnQgZnJvbSB0aGUgYGJwZl9qaXRfY29tcDMyLmNgIGZpbGUgSSBtZW50aW9uZWQgZWFybGllci4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCwgd2hpY2ggYWRkcmVzc2VzIHNpZ24vemVyby1leHRlbnNpb24gaXNzdWVzIGluIHRoZSAzMi1iaXQgQlBGIEpJVCBjb21waWxlciwgd2lsbCBub3QgYmUgcmVsZXZhbnQgaW4gYSBLTVNBTiBjb250ZXh0LiBUaGUgbmF0dXJlIG9mIHRoZSAzMi1iaXQgQlBGIEpJVCBjb2RlIG1lYW5zIGl0IHNpbXBseSBkb2VzbiYjMzk7dCBpbnRlcmFjdCB3aXRoIEtNU0FOIGJ1aWxkcy4gQSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGFwcGxpY2FibGUgaGVyZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBJIHNob3VsZCBwcm9iYWJseSBxdWlja2x5IHZlcmlmeSB0aGF0IGBicGZfaml0X2NvbXAzMi5jYCBpcyBpbmRlZWQgMzItYml0IG9ubHkgYXMgYSBzYW5pdHkgY2hlY2suIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXAzMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvTWFrZWZpbGU9Nj1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGU6NzogICAgICAgIG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wMzIub1xuYXJjaC94ODYvbmV0L01ha2VmaWxlLTgtZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDkxCgkJCQkJCQlvdXRwdXQ6IDE3NgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBDb250ZXh0KioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIHJpZ2h0IHRoZXJlLiBUaGUgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQgaXMgKmRlZmluaXRlbHkqIG9ubHkgY29tcGlsZWQgdW5kZXIgdGhlIGBDT05GSUdfWDg2XzMyYCBmbGFnLiBUaGF0JiMzOTtzIHRoZSBrZXkgcmVzdHJpY3Rpb24uIE5vIG5lZWQgdG8gbG9vayBhbnkgZnVydGhlciBhdCB0aGUgZ2VuZXJhbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIG9yIHRoZSBsYXJnZXIgcHJvamVjdCBzdHJ1Y3R1cmUsIGl0IGlzIG9ubHkgcmVsYXRlZCB0byB0aGUgMzIgYml0IGFyY2hpdGVjdHVyZS4gTm93IHRoYXQgSSBoYXZlIGlzb2xhdGVkIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgaXQgaXMgdGltZSB0byBzZXQgdGhlIG91dGNvbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciAzMi1iaXQgeDg2IChgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgKSB0byBwcm9wZXJseSBzaWduLWV4dGVuZCBvciB6ZXJvLWV4dGVuZCByZXR1cm4gdmFsdWVzIGZyb20ga2Z1bmNzLiBXaGlsZSB0aGlzIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgb3IgbGVmdG92ZXIgcmVnaXN0ZXIgc3RhdGUgY291bGQgYmUgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIEtNU0FOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIChlLmcuLCBgWDg2XzY0YCkuIFRoZSBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBzdHJpY3RseSBmb3IgMzItYml0IHg4NiAoYENPTkZJR19YODZfMzJgKSBhbmQgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgaW4gYSBLTVNBTiBidWlsZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgMzItYml0IHg4NiAoYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCkgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgb3IgemVyby1leHRlbmQgcmV0dXJuIHZhbHVlcyBmcm9tIGtmdW5jcy4gV2hpbGUgdGhpcyBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB1bmluaXRpYWxpemVkIG9yIGxlZnRvdmVyIHJlZ2lzdGVyIHN0YXRlIGNvdWxkIGJlIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBLTVNBTiBpcyBvbmx5IHN1cHBvcnRlZCBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyAoZS5nLiwgYFg4Nl82NGApLiBUaGUgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgc3RyaWN0bHkgZm9yIDMyLWJpdCB4ODYgKGBDT05GSUdfWDg2XzMyYCkgYW5kIHdpbGwgbm90IGJlIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIGluIGEgS01TQU4gYnVpbGQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNDo1Ny44Mjg2NzI4MDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjU5NDcyOTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciAzMi1iaXQgeDg2IChgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgKSB0byBwcm9wZXJseSBzaWduLWV4dGVuZCBvciB6ZXJvLWV4dGVuZCByZXR1cm4gdmFsdWVzIGZyb20ga2Z1bmNzLiBXaGlsZSB0aGlzIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgb3IgbGVmdG92ZXIgcmVnaXN0ZXIgc3RhdGUgY291bGQgYmUgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIEtNU0FOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIChlLmcuLCBgWDg2XzY0YCkuIFRoZSBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBzdHJpY3RseSBmb3IgMzItYml0IHg4NiAoYENPTkZJR19YODZfMzJgKSBhbmQgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgaW4gYSBLTVNBTiBidWlsZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNDo1Ny44Mjg2NzkwNTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDYzNTUzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZjdkNzc4MjY0MmM2YjZlZWE0NzNjMTM0NjFiYTdlNzJiODFkNjdhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjA0OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG5pbmRleCA4NTJiYWYyZTRkYjRkLi4wMTdjYzllN2U0ZTJiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG5AQCAtMTYyMCwxMyArMTYyMCwyNSBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsXFxuIFxcdFxcdC8qIGFkZCBlc3AsXFxcImJ5dGVzX2luX3N0YWNrXFxcIiAqL1xcbiBcXHRcXHRlbmRfYWRkciAtPSAzO1xcbiBcXG4tXFx0LyogbW92IGR3b3JkIHB0ciBbZWJwK29mZl0sZWR4ICovXFxuLVxcdGlmIChmbS1cXHUwMDNlcmV0X3NpemUgXFx1MDAzZSBzaXplb2YodTMyKSlcXG4tXFx0XFx0ZW5kX2FkZHIgLT0gMztcXG4tXFxuLVxcdC8qIG1vdiBkd29yZCBwdHIgW2VicCtvZmZdLGVheCAqL1xcbi1cXHRpZiAoZm0tXFx1MDAzZXJldF9zaXplKVxcbitcXHRzd2l0Y2ggKGZtLVxcdTAwM2VyZXRfc2l6ZSkge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIHNpemVvZih1OCk6XFxuK1xcdGNhc2Ugc2l6ZW9mKHUxNik6XFxuK1xcdFxcdC8qIG1vdltzfHpdeCBlYXgsW2FdeCAqL1xcbiBcXHRcXHRlbmRfYWRkciAtPSAzO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBzaXplb2YodTMyKTpcXG4rXFx0XFx0LyogY2RxIG9yIHhvciBlZHgsZWR4ICovXFxuK1xcdFxcdGVuZF9hZGRyIC09IGZtLVxcdTAwM2VyZXRfZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAxIDogMjtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2Ugc2l6ZW9mKHU2NCk6XFxuK1xcdFxcdC8qIFN0b3JlIEVEWDpFQVggaW4gUjAuICovXFxuK1xcdFxcdGVuZF9hZGRyIC09IDY7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0am1wX29mZnNldCA9ICh1OCAqKV9fYnBmX2NhbGxfYmFzZSArIGluc24tXFx1MDAzZWltbSAtIGVuZF9hZGRyO1xcbiBcXHRpZiAoIWlzX3NpbW0zMihqbXBfb2Zmc2V0KSkge1xcbkBAIC0xNjM3LDE1ICsxNjQ5LDM4IEBAIHN0YXRpYyBpbnQgZW1pdF9rZnVuY19jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIHU4ICplbmRfYWRkcixcXG4gXFxuIFxcdEVNSVQxX29mZjMyKDB4RTgsIGptcF9vZmZzZXQpO1xcbiBcXG4tXFx0aWYgKGZtLVxcdTAwM2VyZXRfc2l6ZSlcXG4rXFx0c3dpdGNoIChmbS1cXHUwMDNlcmV0X3NpemUpIHtcXG4rXFx0Y2FzZSBzaXplb2YodTgpOlxcbitcXHRcXHQvKiBtb3Zbc3x6XXggZWF4LGFsICovXFxuK1xcdFxcdEVNSVQzKDB4MEYsIGZtLVxcdTAwM2VyZXRfZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAweEJFIDogMHhCNixcXG4rXFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIHNpemVvZih1MTYpOlxcbitcXHRcXHQvKiBtb3Zbc3x6XXggZWF4LGF4ICovXFxuK1xcdFxcdEVNSVQzKDB4MEYsIGZtLVxcdTAwM2VyZXRfZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAweEJGIDogMHhCNyxcXG4rXFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZtLVxcdTAwM2VyZXRfc2l6ZSBcXHUwMDI2XFx1MDAyNiBmbS1cXHUwMDNlcmV0X3NpemUgXFx1MDAzYz0gc2l6ZW9mKHUzMikpIHtcXG4rXFx0XFx0aWYgKGZtLVxcdTAwM2VyZXRfZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcpXFxuK1xcdFxcdFxcdC8qIGNkcSAqL1xcbitcXHRcXHRcXHRFTUlUMSgweDk5KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHQvKiB4b3IgZWR4LGVkeCAqL1xcbitcXHRcXHRcXHRFTUlUMigweDMxLCBhZGRfMnJlZygweEMwLCBJQTMyX0VEWCwgSUEzMl9FRFgpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZtLVxcdTAwM2VyZXRfc2l6ZSkge1xcbiBcXHRcXHQvKiBtb3YgZHdvcmQgcHRyIFtlYnArb2ZmXSxlYXggKi9cXG4gXFx0XFx0RU1JVDMoMHg4OSwgYWRkXzJyZWcoMHg0MCwgSUEzMl9FQlAsIElBMzJfRUFYKSxcXG4gXFx0XFx0ICAgICAgU1RBQ0tfVkFSKGJwZjJpYTMyW0JQRl9SRUdfMF1bMF0pKTtcXG4tXFxuLVxcdGlmIChmbS1cXHUwMDNlcmV0X3NpemUgXFx1MDAzZSBzaXplb2YodTMyKSlcXG4gXFx0XFx0LyogbW92IGR3b3JkIHB0ciBbZWJwK29mZl0sZWR4ICovXFxuIFxcdFxcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VEWCksXFxuIFxcdFxcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzFdKSk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChieXRlc19pbl9zdGFjaylcXG4gXFx0XFx0LyogYWRkIGVzcCxcXFwiYnl0ZXNfaW5fc3RhY2tcXFwiICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuaW5kZXggODExM2ZlYTdiYTg2Yy4uNDYzOGUwYTQ1ZGI2ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbkBAIC0xMjcsNiArMTI3LDcgQEBcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX3NldF9yZXR2YWwuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfbHNtLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidmVyaWZpZXJfa2Z1bmNfcmV0dXJuLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlycS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX3pleHQuc2tlbC5oXFxcIlxcbkBAIC0yODksNiArMjkwLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2xzbSh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2xzbSk7IH1cXG4gdm9pZCB0ZXN0X2lycSh2b2lkKVxcdFxcdFxcdCAgICAgIHsgUlVOKGlycSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKVxcdFxcdCAgICAgIHsgUlVOKHZlcmlmaWVyX210dSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfVxcbit2b2lkIHRlc3RfdmVyaWZpZXJfa2Z1bmNfcmV0dXJuKHZvaWQpICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2tmdW5jX3JldHVybik7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuaW5kZXggNWVhY2YxYjQzMjUyMS4uMTQ5OGRhMDQ1OTdhZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuQEAgLTE1NSw2ICsxNTUsNyBAQFxcbiAjZGVmaW5lIF9fYnRmX2Z1bmNfcGF0aChwYXRoKVxcdF9fdGVzdF90YWcoXFxcInRlc3RfYnRmX2Z1bmNfcGF0aD1cXFwiIHBhdGgpXFxuICNkZWZpbmUgX19hcmNoKGFyY2gpXFx0XFx0X190ZXN0X3RhZyhcXFwidGVzdF9hcmNoPVxcXCIgYXJjaClcXG4gI2RlZmluZSBfX2FyY2hfeDg2XzY0XFx0XFx0X19hcmNoKFxcXCJYODZfNjRcXFwiKVxcbisjZGVmaW5lIF9fYXJjaF94ODZfMzJcXHRcXHRfX2FyY2goXFxcIlg4Nl8zMlxcXCIpXFxuICNkZWZpbmUgX19hcmNoX2FybTY0XFx0XFx0X19hcmNoKFxcXCJBUk02NFxcXCIpXFxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcXHRcXHRfX2FyY2goXFxcIlJJU0NWNjRcXFwiKVxcbiAjZGVmaW5lIF9fYXJjaF9zMzkweFxcdFxcdF9fYXJjaChcXFwiczM5MHhcXFwiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUyYTk0ZGFmMDM5MjJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jXFxuQEAgLTAsMCArMSw4NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbitcXG4rZXh0ZXJuIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pIF9fa3N5bTtcXG4rZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rXFx0X190eXBlKGtleSwgX191MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG4rfSBrZnVuY19yZXR1cm5fbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyIHN0cmluZ19hW10gPSBcXFwiYVxcXCI7XFxuK3N0YXRpYyBjb25zdCBjaGFyIHN0cmluZ19iW10gPSBcXFwiYlxcXCI7XFxuK1xcbit2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHIgPSB7fTtcXG4rXFxuK1xcdGJwZl9zdHJjbXAoc3RyaW5nX2EsIHN0cmluZ19iKTtcXG4rXFx0YnBmX2R5bnB0cl9pc19udWxsKFxcdTAwMjZwdHIpO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKVxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4rX19hcmNoX3g4Nl8zMlxcbitfX25ha2VkIHZvaWQga2Z1bmNfYm9vbF9yZXR1cm5femVyb19leHRlbmRlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Kih1MzIgKikocjEwIC0gNCkgPSByMDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9ICVba2Z1bmNfcmV0dXJuX21hcF0gbGw7XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSA4O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjMgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjQgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNCArPSAtMjQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2R5bnB0cl9mcm9tX21lbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCAhPSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDB4MTAwMDAwMDAwIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSArPSAtMjQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsIGJwZl9keW5wdHJfaXNfbnVsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIFxcdTAwM2VcXHUwMDNlPSAzMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMjtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tX2FkZHIoa2Z1bmNfcmV0dXJuX21hcCksXFxuK1xcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXFxuK1xcdCAgX19pbW0oYnBmX2R5bnB0cl9mcm9tX21lbSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19mbGFnKEJQRl9GX1NMRUVQQUJMRSlcXG4rX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxcbitfX2FyY2hfeDg2XzMyXFxuK19fbmFrZWQgdm9pZCBrZnVuY19pbnRfcmV0dXJuX3NpZ25fZXh0ZW5kZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gJVtzdHJpbmdfYV0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9ICVbc3RyaW5nX2JdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBicGZfc3RyY21wO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgXFx1MDAzZVxcdTAwM2U9IDMyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW1fYWRkcihzdHJpbmdfYSksXFxuK1xcdCAgX19pbW1fYWRkcihzdHJpbmdfYilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5pbmRleCAwNzgwNzc1N2I1MThkLi44YTlmNGEzMWExYmIxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5AQCAtMzc0LDE2ICszNzQsMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKipjb2xsZWN0X2RlY2xfdGFncyhzdHJ1Y3QgYnRmICpidGYsIGludCBpZCwgaW50ICpjbnQpXFxuIGVudW0gYXJjaCB7XFxuIFxcdEFSQ0hfVU5LTk9XTlxcdD0gMHgxLFxcbiBcXHRBUkNIX1g4Nl82NFxcdD0gMHgyLFxcbi1cXHRBUkNIX0FSTTY0XFx0PSAweDQsXFxuLVxcdEFSQ0hfUklTQ1Y2NFxcdD0gMHg4LFxcbi1cXHRBUkNIX1MzOTBYXFx0PSAweDEwLFxcbi1cXHRBUkNIX0xPT05HQVJDSFxcdD0gMHgyMCxcXG4rXFx0QVJDSF9YODZfMzJcXHQ9IDB4NCxcXG4rXFx0QVJDSF9BUk02NFxcdD0gMHg4LFxcbitcXHRBUkNIX1JJU0NWNjRcXHQ9IDB4MTAsXFxuK1xcdEFSQ0hfUzM5MFhcXHQ9IDB4MjAsXFxuK1xcdEFSQ0hfTE9PTkdBUkNIXFx0PSAweDQwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXFxuIHtcXG4gI2lmIGRlZmluZWQoX194ODZfNjRfXylcXG4gXFx0cmV0dXJuIEFSQ0hfWDg2XzY0O1xcbisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKVxcbitcXHRyZXR1cm4gQVJDSF9YODZfMzI7XFxuICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pXFxuIFxcdHJldHVybiBBUkNIX0FSTTY0O1xcbiAjZWxpZiBkZWZpbmVkKF9fcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NFxcbkBAIC01NzcsNiArNTgwLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXFxuIFxcdFxcdH0gZWxzZSBpZiAoKHZhbCA9IHN0cl9oYXNfcGZ4KHMsIFxcXCJ0ZXN0X2FyY2g9XFxcIikpKSB7XFxuIFxcdFxcdFxcdGlmIChzdHJjbXAodmFsLCBcXFwiWDg2XzY0XFxcIikgPT0gMCkge1xcbiBcXHRcXHRcXHRcXHRhcmNoID0gQVJDSF9YODZfNjQ7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXFxcIlg4Nl8zMlxcXCIpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfWDg2XzMyO1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFxcXCJBUk02NFxcXCIpID09IDApIHtcXG4gXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfQVJNNjQ7XFxuIFxcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXFxcIlJJU0NWNjRcXFwiKSA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA0OjU5LjEzNTgxODYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjMzNzg1NjMwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZjdkNzc4MjY0MmM2YjZlZWE0NzNjMTM0NjFiYTdlNzJiODFkNjdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MDQ6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jXG5pbmRleCA4NTJiYWYyZTRkYjRkLi4wMTdjYzllN2U0ZTJiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jXG5AQCAtMTYyMCwxMyArMTYyMCwyNSBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsXG4gXHRcdC8qIGFkZCBlc3AsXCJieXRlc19pbl9zdGFja1wiICovXG4gXHRcdGVuZF9hZGRyIC09IDM7XG4gXG4tXHQvKiBtb3YgZHdvcmQgcHRyIFtlYnArb2ZmXSxlZHggKi9cbi1cdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSBcdTAwM2Ugc2l6ZW9mKHUzMikpXG4tXHRcdGVuZF9hZGRyIC09IDM7XG4tXG4tXHQvKiBtb3YgZHdvcmQgcHRyIFtlYnArb2ZmXSxlYXggKi9cbi1cdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSlcbitcdHN3aXRjaCAoZm0tXHUwMDNlcmV0X3NpemUpIHtcbitcdGNhc2UgMDpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIHNpemVvZih1OCk6XG4rXHRjYXNlIHNpemVvZih1MTYpOlxuK1x0XHQvKiBtb3Zbc3x6XXggZWF4LFthXXggKi9cbiBcdFx0ZW5kX2FkZHIgLT0gMztcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIHNpemVvZih1MzIpOlxuK1x0XHQvKiBjZHEgb3IgeG9yIGVkeCxlZHggKi9cbitcdFx0ZW5kX2FkZHIgLT0gZm0tXHUwMDNlcmV0X2ZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAxIDogMjtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIHNpemVvZih1NjQpOlxuK1x0XHQvKiBTdG9yZSBFRFg6RUFYIGluIFIwLiAqL1xuK1x0XHRlbmRfYWRkciAtPSA2O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuIFx0am1wX29mZnNldCA9ICh1OCAqKV9fYnBmX2NhbGxfYmFzZSArIGluc24tXHUwMDNlaW1tIC0gZW5kX2FkZHI7XG4gXHRpZiAoIWlzX3NpbW0zMihqbXBfb2Zmc2V0KSkge1xuQEAgLTE2MzcsMTUgKzE2NDksMzggQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLFxuIFxuIFx0RU1JVDFfb2ZmMzIoMHhFOCwgam1wX29mZnNldCk7XG4gXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUpXG4rXHRzd2l0Y2ggKGZtLVx1MDAzZXJldF9zaXplKSB7XG4rXHRjYXNlIHNpemVvZih1OCk6XG4rXHRcdC8qIG1vdltzfHpdeCBlYXgsYWwgKi9cbitcdFx0RU1JVDMoMHgwRiwgZm0tXHUwMDNlcmV0X2ZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAweEJFIDogMHhCNixcbitcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBzaXplb2YodTE2KTpcbitcdFx0LyogbW92W3N8el14IGVheCxheCAqL1xuK1x0XHRFTUlUMygweDBGLCBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDB4QkYgOiAweEI3LFxuK1x0XHQgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSBcdTAwMjZcdTAwMjYgZm0tXHUwMDNlcmV0X3NpemUgXHUwMDNjPSBzaXplb2YodTMyKSkge1xuK1x0XHRpZiAoZm0tXHUwMDNlcmV0X2ZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcpXG4rXHRcdFx0LyogY2RxICovXG4rXHRcdFx0RU1JVDEoMHg5OSk7XG4rXHRcdGVsc2VcbitcdFx0XHQvKiB4b3IgZWR4LGVkeCAqL1xuK1x0XHRcdEVNSVQyKDB4MzEsIGFkZF8ycmVnKDB4QzAsIElBMzJfRURYLCBJQTMyX0VEWCkpO1xuK1x0fVxuK1xuK1x0aWYgKGZtLVx1MDAzZXJldF9zaXplKSB7XG4gXHRcdC8qIG1vdiBkd29yZCBwdHIgW2VicCtvZmZdLGVheCAqL1xuIFx0XHRFTUlUMygweDg5LCBhZGRfMnJlZygweDQwLCBJQTMyX0VCUCwgSUEzMl9FQVgpLFxuIFx0XHQgICAgICBTVEFDS19WQVIoYnBmMmlhMzJbQlBGX1JFR18wXVswXSkpO1xuLVxuLVx0aWYgKGZtLVx1MDAzZXJldF9zaXplIFx1MDAzZSBzaXplb2YodTMyKSlcbiBcdFx0LyogbW92IGR3b3JkIHB0ciBbZWJwK29mZl0sZWR4ICovXG4gXHRcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VEWCksXG4gXHRcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzFdKSk7XG4rXHR9XG4gXG4gXHRpZiAoYnl0ZXNfaW5fc3RhY2spXG4gXHRcdC8qIGFkZCBlc3AsXCJieXRlc19pbl9zdGFja1wiICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IDgxMTNmZWE3YmE4NmMuLjQ2MzhlMGE0NWRiNmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtMTI3LDYgKzEyNyw3IEBAXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9zZXRfcmV0dmFsLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9sc20uc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oXCJcbisjaW5jbHVkZSBcInZlcmlmaWVyX2tmdW5jX3JldHVybi5za2VsLmhcIlxuICNpbmNsdWRlIFwiaXJxLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl96ZXh0LnNrZWwuaFwiXG5AQCAtMjg5LDYgKzI5MCw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9sc20odm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9sc20pOyB9XG4gdm9pZCB0ZXN0X2lycSh2b2lkKVx0XHRcdCAgICAgIHsgUlVOKGlycSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbXR1KHZvaWQpXHRcdCAgICAgIHsgUlVOKHZlcmlmaWVyX210dSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfaml0X2lubGluZSh2b2lkKSAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2ppdF9pbmxpbmUpOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2tmdW5jX3JldHVybih2b2lkKSAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9rZnVuY19yZXR1cm4pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfemV4dCh2b2lkKSAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFModmVyaWZpZXJfemV4dCk7IH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCA1ZWFjZjFiNDMyNTIxLi4xNDk4ZGEwNDU5N2FmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5AQCAtMTU1LDYgKzE1NSw3IEBAXG4gI2RlZmluZSBfX2J0Zl9mdW5jX3BhdGgocGF0aClcdF9fdGVzdF90YWcoXCJ0ZXN0X2J0Zl9mdW5jX3BhdGg9XCIgcGF0aClcbiAjZGVmaW5lIF9fYXJjaChhcmNoKVx0XHRfX3Rlc3RfdGFnKFwidGVzdF9hcmNoPVwiIGFyY2gpXG4gI2RlZmluZSBfX2FyY2hfeDg2XzY0XHRcdF9fYXJjaChcIlg4Nl82NFwiKVxuKyNkZWZpbmUgX19hcmNoX3g4Nl8zMlx0XHRfX2FyY2goXCJYODZfMzJcIilcbiAjZGVmaW5lIF9fYXJjaF9hcm02NFx0XHRfX2FyY2goXCJBUk02NFwiKVxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcdFx0X19hcmNoKFwiUklTQ1Y2NFwiKVxuICNkZWZpbmUgX19hcmNoX3MzOTB4XHRcdF9fYXJjaChcInMzOTB4XCIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTJhOTRkYWYwMzkyMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jXG5AQCAtMCwwICsxLDg0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2V4dGVybiBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKSBfX2tzeW07XG4rZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuK30ga2Z1bmNfcmV0dXJuX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYVtdID0gXCJhXCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgc3RyaW5nX2JbXSA9IFwiYlwiO1xuK1xuK3ZvaWQgX19rZnVuY19idGZfcm9vdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0ciA9IHt9O1xuK1xuK1x0YnBmX3N0cmNtcChzdHJpbmdfYSwgc3RyaW5nX2IpO1xuK1x0YnBmX2R5bnB0cl9pc19udWxsKFx1MDAyNnB0cik7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fYXJjaF94ODZfMzJcbitfX25ha2VkIHZvaWQga2Z1bmNfYm9vbF9yZXR1cm5femVyb19leHRlbmRlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Kih1MzIgKikocjEwIC0gNCkgPSByMDtcdFx0XHRcdFxcXG4rXHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIyICs9IC00O1x0XHRcdFx0XHRcXFxuK1x0cjEgPSAlW2tmdW5jX3JldHVybl9tYXBdIGxsO1x0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMSA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjIgPSA4O1x0XHRcdFx0XHRcdFxcXG4rXHRyMyA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHI0ID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjQgKz0gLTI0O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9keW5wdHJfZnJvbV9tZW1dO1x0XHRcdFxcXG4rXHRpZiByMCAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcXFxuK1x0cjAgPSAweDEwMDAwMDAwMCBsbDtcdFx0XHRcdFxcXG4rXHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIxICs9IC0yNDtcdFx0XHRcdFx0XFxcbitcdGNhbGwgYnBmX2R5bnB0cl9pc19udWxsO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rMTpcdHIwID0gMjtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIoa2Z1bmNfcmV0dXJuX21hcCksXG4rXHQgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxuK1x0ICBfX2ltbShicGZfZHlucHRyX2Zyb21fbWVtKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fZmxhZyhCUEZfRl9TTEVFUEFCTEUpXG4rX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuK19fYXJjaF94ODZfMzJcbitfX25ha2VkIHZvaWQga2Z1bmNfaW50X3JldHVybl9zaWduX2V4dGVuZGVkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRyMSA9ICVbc3RyaW5nX2FdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gJVtzdHJpbmdfYl0gbGw7XHRcdFx0XHRcXFxuK1x0Y2FsbCBicGZfc3RyY21wO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihzdHJpbmdfYSksXG4rXHQgIF9faW1tX2FkZHIoc3RyaW5nX2IpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuaW5kZXggMDc4MDc3NTdiNTE4ZC4uOGE5ZjRhMzFhMWJiMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuQEAgLTM3NCwxNiArMzc0LDE5IEBAIHN0YXRpYyBjb25zdCBjaGFyICoqY29sbGVjdF9kZWNsX3RhZ3Moc3RydWN0IGJ0ZiAqYnRmLCBpbnQgaWQsIGludCAqY250KVxuIGVudW0gYXJjaCB7XG4gXHRBUkNIX1VOS05PV05cdD0gMHgxLFxuIFx0QVJDSF9YODZfNjRcdD0gMHgyLFxuLVx0QVJDSF9BUk02NFx0PSAweDQsXG4tXHRBUkNIX1JJU0NWNjRcdD0gMHg4LFxuLVx0QVJDSF9TMzkwWFx0PSAweDEwLFxuLVx0QVJDSF9MT09OR0FSQ0hcdD0gMHgyMCxcbitcdEFSQ0hfWDg2XzMyXHQ9IDB4NCxcbitcdEFSQ0hfQVJNNjRcdD0gMHg4LFxuK1x0QVJDSF9SSVNDVjY0XHQ9IDB4MTAsXG4rXHRBUkNIX1MzOTBYXHQ9IDB4MjAsXG4rXHRBUkNIX0xPT05HQVJDSFx0PSAweDQwLFxuIH07XG4gXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG4ge1xuICNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4gXHRyZXR1cm4gQVJDSF9YODZfNjQ7XG4rI2VsaWYgZGVmaW5lZChfX2kzODZfXylcbitcdHJldHVybiBBUkNIX1g4Nl8zMjtcbiAjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIFx0cmV0dXJuIEFSQ0hfQVJNNjQ7XG4gI2VsaWYgZGVmaW5lZChfX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0XG5AQCAtNTc3LDYgKzU4MCw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxuIFx0XHR9IGVsc2UgaWYgKCh2YWwgPSBzdHJfaGFzX3BmeChzLCBcInRlc3RfYXJjaD1cIikpKSB7XG4gXHRcdFx0aWYgKHN0cmNtcCh2YWwsIFwiWDg2XzY0XCIpID09IDApIHtcbiBcdFx0XHRcdGFyY2ggPSBBUkNIX1g4Nl82NDtcbitcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwiWDg2XzMyXCIpID09IDApIHtcbitcdFx0XHRcdGFyY2ggPSBBUkNIX1g4Nl8zMjtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwiQVJNNjRcIikgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfQVJNNjQ7XG4gXHRcdFx0fSBlbHNlIGlmIChzdHJjbXAodmFsLCBcIlJJU0NWNjRcIikgPT0gMCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDQ6NTkuMTM1ODE5ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkwMzg3NDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSB4ODYgMzItYml0IEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2AgYW5kIGFkZHMgc29tZSB0ZXN0cy4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBzZWVtIGZvY3VzZWQgb24gYGVtaXRfa2Z1bmNfY2FsbGAgaW4gdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlci4gSXQncyBoYW5kbGluZyBob3cgdGhlIEpJVCBjb21waWxlciBkZWFscyB3aXRoIHRoZSByZXR1cm4gc2l6ZXMgb2Yga2Z1bmNzLCB0aGluZ3MgbGlrZSB6ZXJvLCBvbmUsIHR3bywgZm91ciwgb3IgZWlnaHQgYnl0ZXMsIGFuZCB0aGUgc2lnbiBvciB6ZXJvIGV4dGVuc2lvbiBvZiB0aG9zZSByZXR1cm5lZCB2YWx1ZXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgYWN0dWFsbHkgcmVhY2hhYmxlPyBJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBkZWRpY2F0aW5nIGZ1enppbmcgcmVzb3VyY2VzIHRvP1wiIEkga25vdyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgIG9ubHkgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX1g4Nl8zMmAgYW5kIGBDT05GSUdfQlBGX0pJVGAgYXJlIGJvdGggZW5hYmxlZC4gTm93LCB1c3VhbGx5IHN5emthbGxlciBpcyB0YXJnZXRpbmcgeDg2XzY0LCBidXQgSSBrbm93IGl0ICpjYW4qIGZ1enogeDg2XzMyIGFuZCAzMi1iaXQgY29tcGF0IG1vZGUuIFNvIHRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyAzMi1iaXQgY29kZSBwYXRoIGFjdHVhbGx5IHVzZWQgaW4gYSAzMi1iaXQgeDg2IGtlcm5lbD9cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2x1ZXMgYWJvdXQgd2hlbiBhbmQgaG93IHRoaXMgZmlsZSBnZXRzIHB1bGxlZCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHNlZSBpZiBJIHNob3VsZCBjYXJlIGFib3V0IGRlZGljYXRpbmcgZnV6emluZyByZXNvdXJjZXMgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNToxNC4wMzk2OTgwODhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMTEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wMzJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGU9Nj1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjc6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wMzIub1xcbmFyY2gveDg2L25ldC9NYWtlZmlsZS04LWVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MTQuMDg2ODE0NTA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMTgxNDE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBBcmNoaXRlY3R1cmUgYW5kIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQgaXMgZGVmaW5pdGVseSBjb21waWxlZCBmb3IgYENPTkZJR19YODZfMzJgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHN5emthbGxlciBhY3R1YWxseSAqZnV6emVzKiB4ODZfMzIuIEEgcXVpY2sgY2hlY2suLi4geWVwLCB0aGVyZSBhcmUgc3l6LWJvdCBpbnN0YW5jZXMgZGVkaWNhdGVkIHRvIGkzODYuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuXG5cbk5vdywgdGhlIHNwZWNpZmljIHBhdGNoIEknbSBleGFtaW5pbmcgdG91Y2hlcyBgZW1pdF9rZnVuY19jYWxsYCBpbiBgYnBmX2ppdF9jb21wMzIuY2AuIE5hdHVyYWxseSwgbXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB3aGF0IHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQncyBkZWx2ZSBpbnRvIHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAzOCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA1OjE4LjA5ODYzMDk2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ1ODM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbWl0X2tmdW5jX2NhbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTQyMj1zdGF0aWMgdTggZ2V0X2NvbmRfam1wX29wY29kZShjb25zdCB1OCBvcCwgYm9vbCBpc19jbXBfbG8pXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTQyLSAqXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTU0MzogKiBlbWl0X2tmdW5jX2NhbGwoKSBmaW5kcyBvdXQgdGhlIGJ0Zl9mdW5jX21vZGVsIGJ5IGNhbGxpbmdcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTQ0LSAqIGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbCgpLiAgQSBidGZfZnVuY19tb2RlbFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU2MS0gKiBjdXJyZW50IChCUEZfSk1QIHwgQlBGX0NBTEwpIGJwZi1pbnNuLiAgSXQgaXMgcGFzc2VkIGFzIFxcXCJlbmRfYWRkclxcXCJcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNTYyOiAqIHRvIHRoZSBlbWl0X2tmdW5jX2NhbGwoKS4gIFRodXMsIGl0IGNhbiBsZWFybiB0aGUgXFxcImltbWVkaWF0ZS1mb2xsb3ctY2FsbFxcXCJcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTYzLSAqIGFkZHJlc3MgYnkgZmlndXJpbmcgb3V0IGhvdyBtYW55IGppdC1pbnNuIGlzIGdlbmVyYXRlZCBiZXR3ZWVuXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTY4LSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjE1Njk6c3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTE1NzAtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTY5ND1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yMTMxLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjIxMzI6XFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9rZnVuY19jYWxsKGJwZl9wcm9nLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTIxMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW1hZ2UgKyBhZGRyc1tpXSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MTguMTQ0MDkyNTg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMzODQyODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIEtmdW5jIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhpcyBpcyB0cmlnZ2VyZWQgYnkgYGRvX2ppdGAsIHNwZWNpZmljYWxseSBmb3IgQlBGIGtmdW5jIGNhbGxzLiBJIGtub3cgdGhpcyBjb2RlLCB0aGlzIGlzIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgbG9naWMsIHRoZSBCUEYgSklUIGZvciB4ODZfMzIgaW4gdGhpcyBjYXNlLiBUaGUgY2hhbmdlcyB0aGV5J3ZlIG1hZGUgYWN0dWFsbHkgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LCBkZWFsaW5nIHdpdGggaG93IHdlIGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIHdoaWNoIGFyZSBub3cgb2YgdmFyaWVkIHNpemVzIGFuZCBzaWducywgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gU28sIGFic29sdXRlbHksIHdlIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4gVGhpcyBpcyBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIGFib3V0IGBlbWl0X2tmdW5jX2NhbGxgLiBJdCdzIHN0YXRpYywgc28gaXQgKmNvdWxkKiBiZSBpbmxpbmVkLiBCdXQgd2FpdCBhIG1vbWVudC4uLiB0aGF0J3Mgd2hhdCB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQsIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IHdvdWxkIG1ha2UgaXQgbGVzcyB1c2VmdWwuIFNvLCB3aGVyZSdzIHRoZSBKSVQgZW50cnkgcG9pbnQ/IEFoLCBoZXJlIHdlIGdvLCBsb29raW5nIGF0IGBicGZfaW50X2ppdF9jb21waWxlYCwgd2hpY2ggc291bmRzIHJpZ2h0LiBMZXQncyBkaWcgaW50byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gVGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBhY3Rpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MjUuNDgyNTI0MTkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODQwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MjU1MT1ib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjU1NS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoyNTU2OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjU1Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA1OjI1LjUyNzM2NzgzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjk0MDc1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEpJVCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBKSVQgY29kZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQsIHRoZSBtYWluIGZ1bmN0aW9uLiBCdXQgd2FpdCwgaXQncyBwcmV0dHkgZ2VuZXJpYy4gSXQncyB0aGUgKmdlbmVyaWMqIEpJVCBlbnRyeSBwb2ludCwgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIgZm9yIGEgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBjaGFuZ2VzLlxuXG5gZG9faml0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IG9mIGEgZGVhZCBlbmQgcmlnaHQgb2ZmIHRoZSBiYXQuIExldCdzIHN0YXJ0IGJ5IHVzaW5nIGBicGZfaW50X2ppdF9jb21waWxlYCBhcyBteSBtYWluIHBvaW50IG9mIGludGVyZXN0LiBJdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBsYWNlLlxuXG5XYWl0LCBpdCBpcyBwcmV0dHkgZ2VuZXJpYywgc28gSSBuZWVkIGEgbW9yZSBkaXJlY3QgbGVhZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZW1pdF9rZnVuY19jYWxsYC4gVGhhdCdzIHN0YXRpYyBhcyB3ZWxsLCBidXQgaXQncyBsYXJnZSBhbmQgc28gbWF5YmUgaXQgaXNuJ3QgaW5saW5lZD8gSXQncyB3b3J0aCBhIGxvb2sgdG8gc2VlIGlmIEkgY2FuIGZpbmQgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlIHRoYXQgd291bGQgYmUgd29ydGggaXQuXG5cbkFscmlnaHQsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSB0aGF0IG1pZ2h0IGJlIGEgYmV0dGVyIGZvY3VzLlxuXG5Ob3BlLCBzZWVtcyBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGV2ZW4gaWYgaXQncyB0aGUgbW9yZSBnZW5lcmljIG9uZS5cblxuTm93LCBmb3IgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGV2YW50IGJ1aWxkIGZsYWdzLiBEZWZpbml0ZWx5IGBDT05GSUdfQlBGX0pJVGAgZm9yIHN1cmUuIEFuZCwgd2hpbGUgSSdtIGF0IGl0LCBgQ09ORklHX1g4Nl8zMmAuIEJ1dCB3YWl0LCB0aGF0J3MgYW4gKmFyY2hpdGVjdHVyZSogY29uZmlnLiBTeXprYWxsZXIgaGFuZGxlcyBhcmNoZXMgc2VwYXJhdGVseSBzbyBpdCdzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gKmxpc3QqIGl0LiBCdXQgaXQgbWlnaHQgYmUgaGVscGZ1bCBmb3IgY29udGV4dCwgc28gSSdsbCBpbmNsdWRlIGl0LiBBbHRob3VnaCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlIGNoZWNrIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA1OjMxLjg5Njc3OTQzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTkyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl8zMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9Mz1jb25maWcgNjRCSVRcXG4tLVxcbmFyY2gveDg2L0tjb25maWctOS1cXG5hcmNoL3g4Ni9LY29uZmlnOjEwOmNvbmZpZyBYODZfMzJcXG5hcmNoL3g4Ni9LY29uZmlnLTExLVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NzQ5PWNvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctNzU3LVxcbmFyY2gveDg2L0tjb25maWc6NzU4OmNvbmZpZyBYODZfMzJfSVJJU1xcbmFyY2gveDg2L0tjb25maWctNzU5LVxcdHRyaXN0YXRlIFxcXCJFdXJvYnJhaWxsZS9JcmlzIHBvd2Vyb2ZmIG1vZHVsZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MzEuOTQyNDgzOTk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjkyNDczOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGxvZ2ljLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGBYODZfMzJgIG9wdGlvbiBpcyBlc3NlbnRpYWxseSBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCBpZiBgNjRCSVRgIGlzbid0IGVuYWJsZWQuIFRoYXQgbWFrZXMgaXQgcmVkdW5kYW50IHRvIGV4cGxpY2l0bHkgbGlzdCBgWDg2XzMyYCBzZXBhcmF0ZWx5OyB0aGUgZGVwZW5kZW5jeSBoYW5kbGVzIGl0LlxuXG5UaGUgaW50ZXJlc3Rpbmcgb25lcyBhcmUgcmVsYXRlZCB0byBCUEYsIG9idmlvdXNseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX0pJVGAgaXMgaW5jbHVkZWQsIHRoYXQncyBjcnVjaWFsLiBBbmQgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEJQRiBrZnVuY3MsIGBCUEZfU1lTQ0FMTGAgd2lsbCBiZSBhIGRlcGVuZGVuY3ksIHRoYXQgc2VlbXMgbG9naWNhbC5cblxuTGV0J3MgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRseSBsaW5rZWQgY29uZmlndXJhdGlvbnMuIE5vIHVzZSBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLlxuXG5SaWdodCwgdGhlIHRlc3RzIGFyZSB1c2luZyBgYnBmX3N0cmNtcGAgYW5kIGBicGZfZHlucHRyX2lzX251bGxgIGtmdW5jcy4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgYGJwZl9zdHJjbXBgIGlzIGFjdHVhbGx5IGRlZmluZWQgdG8gbWFrZSBjZXJ0YWluIHRoaXMgY29uZmlndXJhdGlvbiBpcyBzdWZmaWNpZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNTozNi40MTE3MzM3OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMDkzNjQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RyY21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0zNzMwPXN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2MC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzYxOiAqIGJwZl9zdHJjbXAgLSBDb21wYXJlIHR3byBzdHJpbmdzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2Mi0gKiBAczFfX2lnbjogT25lIHN0cmluZ1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3Mi0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzczOl9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3NC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTQ4PUJURl9JRF9GTEFHUyhmdW5jLCBfX2JwZl90cmFwKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NTAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlY21wKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTA9Y2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTMxLS8qIFBhc3NpbmcgTlVMTCB0byBzdHJpbmcga2Z1bmNzICh0cmVhdGVkIGFzIGEgdXNlcnNwYWNlIHB0cikgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjMyOlNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChOVUxMLCBcXFwiaGVsbG9cXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6MzM6U0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJjbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKFxcXCJoZWxsb1xcXCIsIE5VTEwpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy0zNC1TRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNhc2VjbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZWNtcChOVUxMLCBcXFwiSEVMTE9cXFwiKTsgfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYz01NT1TRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFxcXCJoZWxsb1xcXCIsIE5VTEwsIDEpOyB9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTU3LS8qIFBhc3NpbmcgdXNlcnNwYWNlIHB0ciB0byBzdHJpbmcga2Z1bmNzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo1ODpTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKHVzZXJfcHRyLCBcXFwiaGVsbG9cXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NTk6U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChcXFwiaGVsbG9cXFwiLCB1c2VyX3B0cik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTYwLVNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY2FzZWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZWNtcCh1c2VyX3B0ciwgXFxcIkhFTExPXFxcIik7IH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9ODE9U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXFxcImhlbGxvXFxcIiwgdXNlcl9wdHIsIDEpOyB9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTg1LS8qIFBhc3NpbmcgaW52YWxpZCBrZXJuZWwgcHRyIHRvIHN0cmluZyBrZnVuY3Mgc2hvdWxkIGFsd2F5cyByZXR1cm4gLUVGQVVMVCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6ODY6U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RyY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKGludmFsaWRfa2Vybl9wdHIsIFxcXCJoZWxsb1xcXCIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo4NzpTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJjbXBfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAoXFxcImhlbGxvXFxcIiwgaW52YWxpZF9rZXJuX3B0cik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTg4LVNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cmNhc2VjbXBfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlY21wKGludmFsaWRfa2Vybl9wdHIsIFxcXCJIRUxMT1xcXCIpOyB9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jPTc9Y2hhciBsb25nX3N0cltYQVRUUl9TSVpFX01BWCArIDFdO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmMtOC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jOjk6U0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RyY21wX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChsb25nX3N0ciwgbG9uZ19zdHIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYy0xMC1TRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJjYXNlY21wX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNhc2VjbXAobG9uZ19zdHIsIGxvbmdfc3RyKTsgfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jPTg9Y2hhciBzdHJbXSA9IFxcXCJoZWxsbyB3b3JsZFxcXCI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMtMTItLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzoxMzpfX3Rlc3QoMCkgaW50IHRlc3Rfc3RyY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChzdHIsIFxcXCJoZWxsbyB3b3JsZFxcXCIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjE0Ol9fdGVzdCgxKSBpbnQgdGVzdF9zdHJjbXBfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChzdHIsIFxcXCJoZWxsb1xcXCIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jLTE1LV9fdGVzdCgwKSBpbnQgdGVzdF9zdHJjYXNlY21wX2VxMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlY21wKHN0ciwgXFxcImhlbGxvIHdvcmxkXFxcIik7IH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYy03LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYzo4OmV4dGVybiBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTktZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmM9MjE9dm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMtMjQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jOjI1OlxcdGJwZl9zdHJjbXAoc3RyaW5nX2EsIHN0cmluZ19iKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMtMjYtXFx0YnBmX2R5bnB0cl9pc19udWxsKFxcdTAwMjZwdHIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jPTY5PV9fbmFrZWQgdm9pZCBrZnVuY19pbnRfcmV0dXJuX3NpZ25fZXh0ZW5kZWQodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYy03NC1cXHRyMiA9ICVbc3RyaW5nX2JdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmM6NzU6XFx0Y2FsbCBicGZfc3RyY21wO1xcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMtNzYtXFx0cjAgXFx1MDAzZVxcdTAwM2U9IDMyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MzguMTQyNjc0ODYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzMzMzQ1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxhdGlvbiBoYXBwZW5zLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGNvbXBpbGF0aW9uIHByb2Nlc3MgaXMgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBCdXQgd2FpdCBhIHNlY29uZCwgdGhhdCBmdW5jdGlvbiAqaXMqIGRlZmluZWQgd2l0aGluIHRoZSBzYW1lIGZpbGUsIGBicGZfaml0X2NvbXAzMi5jYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNSwiT3V0cHV0VG9rZW5zIjo3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNTo0Mi4zMTYwMTIwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NDI2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jPTIzOTc9ZW1pdF9jb25kX2ptcDpcXHRcXHRqbXBfY29uZCA9IGdldF9jb25kX2ptcF9vcGNvZGUoQlBGX09QKGNvZGUpLCBmYWxzZSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTUwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjI1NTE6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTUyLXtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jPTI1NTY9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI2MjktXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MjYzMDpib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI2MzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNTo0Mi4zNjU2NjA1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTg5ODgyOTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZnVuY3Rpb24gaGVyZS4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBMZXQncyBtYWtlIHN1cmUgaXQncyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gYSBkZWVwIGRpdmUuIFllcCwgaXQncyB0aGUgSklUIGNvbXBpbGVyJ3MgZW50cnkgcG9pbnQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHdvdWxkbid0IGV4cGVjdCBpdCB0byBiZSBhIGhvdC1wYXRoIGZ1bmN0aW9uOyBpdCdzIHdoYXQgZ2V0cyBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZGluZywgc28gdGhhdCBjaGVja3Mgb3V0LiBJdCBsb29rcyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sLlxuXG5Ob3csIGxldCdzIGFudGljaXBhdGUgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBPYnZpb3VzbHksIGBCUEZfU1lTQ0FMTGAgd2lsbCBiZSBlc3NlbnRpYWwsIGFuZCBgQlBGX0pJVGAgZ29lcyB3aXRob3V0IHNheWluZy4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IHRoaXMgc3BlY2lmaWMgdGVzdCBvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgbW9yZSBicm9hZGx5IHdpbGwgcmVseSB1cG9uPyBUaGUgdGVzdCBjb2RlIG1lbnRpb25zIGBicGZfc3RyY21wYCwgd2hpY2ggbGl2ZXMgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IGlmIHRoYXQgcGFydGljdWxhciBoZWxwZXIgZnVuY3Rpb24gaGFzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA1OjU0LjI2NDQ5MjQ4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1MTY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmNtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0zNzMwPXN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2MC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzYxOiAqIGJwZl9zdHJjbXAgLSBDb21wYXJlIHR3byBzdHJpbmdzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2Mi0gKiBAczFfX2lnbjogT25lIHN0cmluZ1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3Mi0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzczOl9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3NC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTQ4PUJURl9JRF9GTEFHUyhmdW5jLCBfX2JwZl90cmFwKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NTAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlY21wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6NTQuMzE0MDE1NDI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjUzMDQ3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBDb21waWxlciBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29kZSBpbiBxdWVzdGlvbiByZXNpZGVzIHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLCBidXQgb25seSB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQsIGFsb25nIHdpdGggYEJQRl9KSVRgLCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBrZWVwIGluIG1pbmQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBKSVQgY29tcGlsYXRpb24gZW50cnkgcG9pbnQg4oCTIGBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsYCBhbmQgYGJwZl9qaXRfbmVlZHNfemV4dGAgYXJlIHJlbGF0ZWQsIGJ1dCB0aGUgZm9ybWVyIGlzIHRyaXZpYWwgKGp1c3QgcmV0dXJucyB0cnVlKSBhbmQgdGhlIGxhdHRlciBqdXN0IHJldHVybnMgdHJ1ZS4gVGhlcmVmb3JlLCBmb2N1c2luZyBvbiBgYnBmX2ludF9qaXRfY29tcGlsZWAgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuXG5cbkkganVzdCBxdWlja2x5IGNoZWNrZWQgYGVtaXRfa2Z1bmNfY2FsbGAgYW5kIGNvbmZpcm1lZCBpdCdzIHN0YXRpYywgc28gd2UncmUgZ29vZCB0byBnbyB3aXRoIGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuVGhlIGRpZmYgYWxzbyB0b3VjaGVzIGEgYnVuY2ggb2YgdGVzdHM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNgLiBBbGwgdGVzdHMsIHNvIG5vIGtlcm5lbCBjb2RlIGFjdHVhbGx5ICptb2RpZmllZCogb3RoZXIgdGhhbiB0aGlzIG9uZSBmaWxlLlxuXG5BaCwgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCDigJMgdGhpcyBpcyB0aGUgMzItYml0IHg4NiBCUEYgSklUIGNvbXBpbGVyLiBUaGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFib3V0IGhhbmRsaW5nIGtmdW5jIGNhbGxzIGFuZCB0aGVpciByZXR1cm4gdmFsdWVzIGNvcnJlY3RseSwgaW5jbHVkaW5nIGRpZmZlcmVudCBzaXplcyBhbmQgc2lnbnMuIFRoYXQncyBhIGRlZmluaXRlIHJlZCBmbGFnLiBUaGUgQlBGIEpJVCBjb21waWxlciBpcyBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0J3MgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayB3aXRoIHRoZSBmdXp6ZXIuXG5cbkluIHNob3J0LCBoZXJlJ3MgbXkgcXVpY2sgc3VtbWFyeTpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IFllc1xuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJicGZfaW50X2ppdF9jb21waWxlXCJdYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiQlBGX1NZU0NBTExcIiwgXCJCUEZfSklUXCJdYFxuKiAgICoqUmVhc29uaW5nKio6IFwiVGhlIHBhdGNoIGludm9sdmVzIHRoZSAzMi1iaXQgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIG9mIHZhcmlvdXMgc2l6ZXMgYW5kIHNpZ25zLiBJdCBkaXJlY3RseSBhZmZlY3RzIHRoZSBCUEYgSklUIGNvbXBpbGVyLCB3aGljaCBpcyBjcnVjaWFsIGtlcm5lbCBsb2dpYywgYW5kIHRoZXJlZm9yZSBwcmVzZW50cyBhIGdvb2Qgb3Bwb3J0dW5pdHkgZm9yIGZ1enppbmcuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNDUsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjAyLjQzOTMyMzA5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDU1MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgMzItYml0IHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIGNvcnJlY3RseSBoYW5kbGUga2Z1bmMgcmV0dXJuIHZhbHVlcyBvZiBkaWZmZXJlbnQgc2l6ZXMgYW5kIHNpZ25zLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIEpJVCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNjowMi41MTQzODU1NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTA5MDA0Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDY6MDIuNTE1MDA5MDg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMxOTA4Mzc1Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgMzItYml0IHg4NiAoYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCkgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgb3IgemVyby1leHRlbmQgcmV0dXJuIHZhbHVlcyBmcm9tIGtmdW5jcy4gV2hpbGUgdGhpcyBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB1bmluaXRpYWxpemVkIG9yIGxlZnRvdmVyIHJlZ2lzdGVyIHN0YXRlIGNvdWxkIGJlIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBLTVNBTiBpcyBvbmx5IHN1cHBvcnRlZCBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyAoZS5nLiwgYFg4Nl82NGApLiBUaGUgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgc3RyaWN0bHkgZm9yIDMyLWJpdCB4ODYgKGBDT05GSUdfWDg2XzMyYCkgYW5kIHdpbGwgbm90IGJlIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIGluIGEgS01TQU4gYnVpbGQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmN2Q3NzgyNjQyYzZiNmVlYTQ3M2MxMzQ2MWJhN2U3MmI4MWQ2N2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzowNDo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IDg1MmJhZjJlNGRiNGQuLjAxN2NjOWU3ZTRlMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbkBAIC0xNjIwLDEzICsxNjIwLDI1IEBAIHN0YXRpYyBpbnQgZW1pdF9rZnVuY19jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIHU4ICplbmRfYWRkcixcbiBcdFx0LyogYWRkIGVzcCxcImJ5dGVzX2luX3N0YWNrXCIgKi9cbiBcdFx0ZW5kX2FkZHIgLT0gMztcbiBcbi1cdC8qIG1vdiBkd29yZCBwdHIgW2VicCtvZmZdLGVkeCAqL1xuLVx0aWYgKGZtLVx1MDAzZXJldF9zaXplIFx1MDAzZSBzaXplb2YodTMyKSlcbi1cdFx0ZW5kX2FkZHIgLT0gMztcbi1cbi1cdC8qIG1vdiBkd29yZCBwdHIgW2VicCtvZmZdLGVheCAqL1xuLVx0aWYgKGZtLVx1MDAzZXJldF9zaXplKVxuK1x0c3dpdGNoIChmbS1cdTAwM2VyZXRfc2l6ZSkge1xuK1x0Y2FzZSAwOlxuK1x0XHRicmVhaztcbitcdGNhc2Ugc2l6ZW9mKHU4KTpcbitcdGNhc2Ugc2l6ZW9mKHUxNik6XG4rXHRcdC8qIG1vdltzfHpdeCBlYXgsW2FdeCAqL1xuIFx0XHRlbmRfYWRkciAtPSAzO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2Ugc2l6ZW9mKHUzMik6XG4rXHRcdC8qIGNkcSBvciB4b3IgZWR4LGVkeCAqL1xuK1x0XHRlbmRfYWRkciAtPSBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDEgOiAyO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4rXHRcdC8qIFN0b3JlIEVEWDpFQVggaW4gUjAuICovXG4rXHRcdGVuZF9hZGRyIC09IDY7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRqbXBfb2Zmc2V0ID0gKHU4ICopX19icGZfY2FsbF9iYXNlICsgaW5zbi1cdTAwM2VpbW0gLSBlbmRfYWRkcjtcbiBcdGlmICghaXNfc2ltbTMyKGptcF9vZmZzZXQpKSB7XG5AQCAtMTYzNywxNSArMTY0OSwzOCBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsXG4gXG4gXHRFTUlUMV9vZmYzMigweEU4LCBqbXBfb2Zmc2V0KTtcbiBcbi1cdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSlcbitcdHN3aXRjaCAoZm0tXHUwMDNlcmV0X3NpemUpIHtcbitcdGNhc2Ugc2l6ZW9mKHU4KTpcbitcdFx0LyogbW92W3N8el14IGVheCxhbCAqL1xuK1x0XHRFTUlUMygweDBGLCBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDB4QkUgOiAweEI2LFxuK1x0XHQgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIHNpemVvZih1MTYpOlxuK1x0XHQvKiBtb3Zbc3x6XXggZWF4LGF4ICovXG4rXHRcdEVNSVQzKDB4MEYsIGZtLVx1MDAzZXJldF9mbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMHhCRiA6IDB4QjcsXG4rXHRcdCAgICAgIGFkZF8ycmVnKDB4QzAsIElBMzJfRUFYLCBJQTMyX0VBWCkpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0aWYgKGZtLVx1MDAzZXJldF9zaXplIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSBcdTAwM2M9IHNpemVvZih1MzIpKSB7XG4rXHRcdGlmIChmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRylcbitcdFx0XHQvKiBjZHEgKi9cbitcdFx0XHRFTUlUMSgweDk5KTtcbitcdFx0ZWxzZVxuK1x0XHRcdC8qIHhvciBlZHgsZWR4ICovXG4rXHRcdFx0RU1JVDIoMHgzMSwgYWRkXzJyZWcoMHhDMCwgSUEzMl9FRFgsIElBMzJfRURYKSk7XG4rXHR9XG4rXG4rXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUpIHtcbiBcdFx0LyogbW92IGR3b3JkIHB0ciBbZWJwK29mZl0sZWF4ICovXG4gXHRcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VBWCksXG4gXHRcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzBdKSk7XG4tXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUgXHUwMDNlIHNpemVvZih1MzIpKVxuIFx0XHQvKiBtb3YgZHdvcmQgcHRyIFtlYnArb2ZmXSxlZHggKi9cbiBcdFx0RU1JVDMoMHg4OSwgYWRkXzJyZWcoMHg0MCwgSUEzMl9FQlAsIElBMzJfRURYKSxcbiBcdFx0ICAgICAgU1RBQ0tfVkFSKGJwZjJpYTMyW0JQRl9SRUdfMF1bMV0pKTtcbitcdH1cbiBcbiBcdGlmIChieXRlc19pbl9zdGFjaylcbiBcdFx0LyogYWRkIGVzcCxcImJ5dGVzX2luX3N0YWNrXCIgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggODExM2ZlYTdiYTg2Yy4uNDYzOGUwYTQ1ZGI2ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC0xMjcsNiArMTI3LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX3NldF9yZXR2YWwuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2xzbS5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfaml0X2lubGluZS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfa2Z1bmNfcmV0dXJuLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJpcnEuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2N0eF9wdHJfcGFyYW0uc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX3pleHQuc2tlbC5oXCJcbkBAIC0yODksNiArMjkwLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2xzbSh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2xzbSk7IH1cbiB2b2lkIHRlc3RfaXJxKHZvaWQpXHRcdFx0ICAgICAgeyBSVU4oaXJxKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcdFx0ICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cbit2b2lkIHRlc3RfdmVyaWZpZXJfa2Z1bmNfcmV0dXJuKHZvaWQpICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2tmdW5jX3JldHVybik7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IDVlYWNmMWI0MzI1MjEuLjE0OThkYTA0NTk3YWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0xNTUsNiArMTU1LDcgQEBcbiAjZGVmaW5lIF9fYnRmX2Z1bmNfcGF0aChwYXRoKVx0X190ZXN0X3RhZyhcInRlc3RfYnRmX2Z1bmNfcGF0aD1cIiBwYXRoKVxuICNkZWZpbmUgX19hcmNoKGFyY2gpXHRcdF9fdGVzdF90YWcoXCJ0ZXN0X2FyY2g9XCIgYXJjaClcbiAjZGVmaW5lIF9fYXJjaF94ODZfNjRcdFx0X19hcmNoKFwiWDg2XzY0XCIpXG4rI2RlZmluZSBfX2FyY2hfeDg2XzMyXHRcdF9fYXJjaChcIlg4Nl8zMlwiKVxuICNkZWZpbmUgX19hcmNoX2FybTY0XHRcdF9fYXJjaChcIkFSTTY0XCIpXG4gI2RlZmluZSBfX2FyY2hfcmlzY3Y2NFx0XHRfX2FyY2goXCJSSVNDVjY0XCIpXG4gI2RlZmluZSBfX2FyY2hfczM5MHhcdFx0X19hcmNoKFwiczM5MHhcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MmE5NGRhZjAzOTIyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmNcbkBAIC0wLDAgKzEsODQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rZXh0ZXJuIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pIF9fa3N5bTtcbitleHRlcm4gYm9vbCBicGZfZHlucHRyX2lzX251bGwoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnApIF9fa3N5bTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgX191MzIpO1xuK1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4rfSBrZnVuY19yZXR1cm5fbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBjb25zdCBjaGFyIHN0cmluZ19hW10gPSBcImFcIjtcbitzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYltdID0gXCJiXCI7XG4rXG4rdm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyID0ge307XG4rXG4rXHRicGZfc3RyY21wKHN0cmluZ19hLCBzdHJpbmdfYik7XG4rXHRicGZfZHlucHRyX2lzX251bGwoXHUwMDI2cHRyKTtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fZmxhZyhCUEZfRl9TTEVFUEFCTEUpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19hcmNoX3g4Nl8zMlxuK19fbmFrZWQgdm9pZCBrZnVuY19ib29sX3JldHVybl96ZXJvX2V4dGVuZGVkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHUzMiAqKShyMTAgLSA0KSA9IHIwO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTQ7XHRcdFx0XHRcdFxcXG4rXHRyMSA9ICVba2Z1bmNfcmV0dXJuX21hcF0gbGw7XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHIxID0gcjA7XHRcdFx0XHRcdFxcXG4rXHRyMiA9IDg7XHRcdFx0XHRcdFx0XFxcbitcdHIzID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjQgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyNCArPSAtMjQ7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2R5bnB0cl9mcm9tX21lbV07XHRcdFx0XFxcbitcdGlmIHIwICE9IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9IDB4MTAwMDAwMDAwIGxsO1x0XHRcdFx0XFxcbitcdHIxID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjEgKz0gLTI0O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCBicGZfZHlucHRyX2lzX251bGw7XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNlXHUwMDNlPSAzMjtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbisxOlx0cjAgPSAyO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihrZnVuY19yZXR1cm5fbWFwKSxcbitcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tKGJwZl9keW5wdHJfZnJvbV9tZW0pXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19mbGFnKEJQRl9GX1NMRUVQQUJMRSlcbitfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpXG4rX19hcmNoX3g4Nl8zMlxuK19fbmFrZWQgdm9pZCBrZnVuY19pbnRfcmV0dXJuX3NpZ25fZXh0ZW5kZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHIxID0gJVtzdHJpbmdfYV0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSAlW3N0cmluZ19iXSBsbDtcdFx0XHRcdFxcXG4rXHRjYWxsIGJwZl9zdHJjbXA7XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNlXHUwMDNlPSAzMjtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9hZGRyKHN0cmluZ19hKSxcbitcdCAgX19pbW1fYWRkcihzdHJpbmdfYilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5pbmRleCAwNzgwNzc1N2I1MThkLi44YTlmNGEzMWExYmIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5AQCAtMzc0LDE2ICszNzQsMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKipjb2xsZWN0X2RlY2xfdGFncyhzdHJ1Y3QgYnRmICpidGYsIGludCBpZCwgaW50ICpjbnQpXG4gZW51bSBhcmNoIHtcbiBcdEFSQ0hfVU5LTk9XTlx0PSAweDEsXG4gXHRBUkNIX1g4Nl82NFx0PSAweDIsXG4tXHRBUkNIX0FSTTY0XHQ9IDB4NCxcbi1cdEFSQ0hfUklTQ1Y2NFx0PSAweDgsXG4tXHRBUkNIX1MzOTBYXHQ9IDB4MTAsXG4tXHRBUkNIX0xPT05HQVJDSFx0PSAweDIwLFxuK1x0QVJDSF9YODZfMzJcdD0gMHg0LFxuK1x0QVJDSF9BUk02NFx0PSAweDgsXG4rXHRBUkNIX1JJU0NWNjRcdD0gMHgxMCxcbitcdEFSQ0hfUzM5MFhcdD0gMHgyMCxcbitcdEFSQ0hfTE9PTkdBUkNIXHQ9IDB4NDAsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbiB7XG4gI2lmIGRlZmluZWQoX194ODZfNjRfXylcbiBcdHJldHVybiBBUkNIX1g4Nl82NDtcbisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKVxuK1x0cmV0dXJuIEFSQ0hfWDg2XzMyO1xuICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHRyZXR1cm4gQVJDSF9BUk02NDtcbiAjZWxpZiBkZWZpbmVkKF9fcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjRcbkBAIC01NzcsNiArNTgwLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdH0gZWxzZSBpZiAoKHZhbCA9IHN0cl9oYXNfcGZ4KHMsIFwidGVzdF9hcmNoPVwiKSkpIHtcbiBcdFx0XHRpZiAoc3RyY21wKHZhbCwgXCJYODZfNjRcIikgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfWDg2XzY0O1xuK1x0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJYODZfMzJcIikgPT0gMCkge1xuK1x0XHRcdFx0YXJjaCA9IEFSQ0hfWDg2XzMyO1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJBUk02NFwiKSA9PSAwKSB7XG4gXHRcdFx0XHRhcmNoID0gQVJDSF9BUk02NDtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwiUklTQ1Y2NFwiKSA9PSAwKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNjowMi41MTUwMTAwNjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY1MDE1NDk2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoIGZvciAzMi1iaXQgeDg2KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBlbWl0X2tmdW5jX2NhbGxgLiBJdCdzIGFkZHJlc3NpbmcgaG93IHRoZSBCUEYgSklUIGNvbXBpbGVyIGhhbmRsZXMgcmV0dXJuIHZhbHVlcyBmcm9tIGtlcm5lbCBmdW5jdGlvbiBjYWxscyAoa2Z1bmNzKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGVuc3VyaW5nIGNvcnJlY3QgcHJvcGFnYXRpb24gb2YgcmV0dXJuIHZhbHVlcyBvZiB2YXJ5aW5nIHNpemVzIOKAkyB1OCwgdTE2LCB1MzIsIGFuZCB1NjQg4oCTIGFuZCBoYW5kbGluZyB0aGVpciBzaWduZWRuZXNzIGNvcnJlY3RseS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgdG8gZWl0aGVyIHplcm8tZXh0ZW5kIG9yIHNpZ24tZXh0ZW5kIHRoZSBrZnVuYydzIHJldHVybiB2YWx1ZSBiYXNlZCBvbiBpdHMgc2l6ZSBhbmQgd2hldGhlciBpdCdzIHNpZ25lZC4gVGhlIGFkZGVkIHRlc3RzIGluIGB2ZXJpZmllcl9rZnVuY19yZXR1cm4uY2AgYXJlIGEgd2VsY29tZSBhZGRpdGlvbiB0byB2YWxpZGF0ZSB0aGlzIGJlaGF2aW9yLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGl0J3MgcHJldHR5IGNsZWFyOiB0aGUgb2xkIGNvZGUgc2ltcGx5IG1vdmVkIHRoZSByZXR1cm4gdmFsdWUsIGFzc3VtaW5nIHRoYXQgdGhlIGNhbGxpbmcgY29udmVudGlvbiB3b3VsZCBoYW5kbGUgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCByZXR1cm4gcmVnaXN0ZXIgUjAgKHdoaWNoIGNvcnJlc3BvbmRzIHRvIEVEWDpFQVggb24geDg2LTMyKS4gTm93LCBpdCBleHBsaWNpdGx5IGhhbmRsZXMgdGhlIHNpemUgYW5kIHNpZ25lZG5lc3MsIHVzaW5nIGFwcHJvcHJpYXRlIGluc3RydWN0aW9ucyBsaWtlIGBtb3Z6eGAgKHplcm8tZXh0ZW5kKSwgYG1vdnN4YCAoc2lnbi1leHRlbmQpLCBgY2RxYCAoc2lnbi1leHRlbmQgRUFYIHRvIEVEWDpFQVgpLCBhbmQgYHhvciBlZHgsZWR4YCAoemVybyBFRFgpLiBUaGlzIGlzIGNydWNpYWwuIFdpdGhvdXQgdGhpcywgeW91IGNvdWxkIGVuZCB1cCB3aXRoIGdhcmJhZ2UgZGF0YSBpbiB0aGUgdXBwZXIgYml0cyBvZiBSMC5cblxuVGhpcyB0cmlnZ2VycyBhIHRob3VnaHQg4oCTIGNvdWxkIHRoaXMgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkPyBCZWNhdXNlIHRoZSB1cHBlciBiaXRzIHdlcmUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkLiBUaGUgQlBGIGFyY2hpdGVjdHVyZSB1c2VzIFIwIGFzIGEgNjQtYml0IHJldHVybiByZWdpc3RlciwgYnV0IGtmdW5jcyBtaWdodCByZXR1cm4gc21hbGxlciB2YWx1ZXMsIGxpa2UgMzItYml0IHZhbHVlcy4gVGhhdCB3b3VsZCBtZWFuIHRoZSB1cHBlciAzMiBiaXRzIG9mIFIwIHdvdWxkIGNvbnRhaW4gZ2FyYmFnZS4gSWYgdGhlIEJQRiBwcm9ncmFtIHRoZW4gdXNlZCB0aGVzZSBiaXRzLCBpdCBjb3VsZCByZWFkIHRoYXQgZ2FyYmFnZSBkYXRhLiBJZiB0aGUga2Z1bmMgaXMga2VybmVsIGNvZGUsIHdvdWxkIHRoaXMgbWVhbiBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIGtlcm5lbD8gSXMgdGhpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrP1xuXG5BaGEhIFRoaXMgaXMgYSByZWdpc3RlciBsZWFrLCBub3QgYSBtZW1vcnkgbGVhayBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIFRoZSBCUEYgcHJvZ3JhbSAqY2FuKiByZWFkIEVEWCAob3IgdGhlIHVwcGVyIGJpdHMgb2YgRUFYKSwgYW5kIEVEWCBtaWdodCBjb250YWluIHNvbWUgbGVmdG92ZXIga2VybmVsIGRhdGEgb3IgYSBwb2ludGVyLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGlzIHRoaXMgaGFuZGxlZCBieSB0b29scyBsaWtlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcik/XG5cbldhaXQsIEtNU0FOISBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dC4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLi4uIFRoaXMgY29kZSBpcyBmb3IgeDg2LTMyLiBLTVNBTiwgbGFzdCBJIGNoZWNrZWQsIGRvZXMgbm90IHN1cHBvcnQgMzItYml0IHg4NiEgSXQgZm9jdXNlcyBvbiB4ODYtNjQgYW5kIHBvdGVudGlhbGx5IHMzOTB4IGFuZCBhcm02NCwgc28gdGVzdGluZyB3aXRoIEtNU0FOIHdvdWxkIGJlIHVzZWxlc3Mgb24gdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgYnBmX2ppdF9jb21wMzIuY2Agd2hpY2ggaXMgYnVpbHQgZXhjbHVzaXZlbHkgZm9yIDMyLWJpdCB4ODYuIFNvIEtNU0FOIHdvdWxkICpub3QqIGJlIHVzZWQgdG8gdGVzdCB0aGlzIHBhdGgsIGV2ZW4gaWYgdGhlIHVzZXIgd2VyZSB0byB1c2UgaXQuIFRoYXQncyBnb29kIHRvIGNsYXJpZnkuIExldCBtZSBjb25maXJtLCBJIGJlbGlldmUgSSByZWFkIHRoYXQgS01TQU4gb25seSBzdXBwb3J0cyB4ODYtNjQuICpDaGVja3MgbGliL0tjb25maWcua21zYW4qLiBZZXMsIEtNU0FOIHJlcXVpcmVzIHg4Ni02NC4gQ2FzZSBjbG9zZWQuIFRoZSBwYXRjaCBpcyBuZWNlc3NhcnksIGFuZCBLTVNBTiBpc24ndCByZWxldmFudCB0byB2YWxpZGF0aW5nIHRoaXMgMzItYml0IHg4NiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzIxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjE5LjAxNjU2MzE1NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTA2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtNU0FOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9LY29uZmlnLmttc2FuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmttc2FuPTU9Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTctXFxubGliL0tjb25maWcua21zYW46ODpjb25maWcgS01TQU5cXG5saWIvS2NvbmZpZy5rbXNhbi05LVxcdGJvb2wgXFxcIktNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbj0yNj1pZiBLTVNBTlxcbmxpYi9LY29uZmlnLmttc2FuLTI3LVxcbmxpYi9LY29uZmlnLmttc2FuOjI4OmNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcXG5saWIvS2NvbmZpZy5rbXNhbi0yOS1cXHRib29sIFxcXCJDaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uc1xcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTQxLVxcbmxpYi9LY29uZmlnLmttc2FuOjQyOmNvbmZpZyBLTVNBTl9LVU5JVF9URVNUXFxubGliL0tjb25maWcua21zYW4tNDMtXFx0dHJpc3RhdGUgXFxcIktNU0FOIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDY6MTkuMDYzMTc5MzU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDYwNzIyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKktNU0FOIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgS01TQU4gaXMgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCwgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBodWIgZm9yIGFsbCB0aGluZ3MgeDg2LXNwZWNpZmljLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBLTVNBTiBvcHRpb25zIGRlZmluZWQgYW5kIGhvcGVmdWxseSBlbmFibGVkIChvciBhdCBsZWFzdCByZWFkaWx5IGF2YWlsYWJsZSkgdGhlcmUuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS4gVGhpcyBjaGVjayBpcyBjcnVjaWFsOyBJIGNhbid0IHByb2NlZWQgd2l0aG91dCBjb25maXJtaW5nIHRoaXMgZm91bmRhdGlvbiBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjIyLjMwOTI1NDIzMloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwODExNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEhBVkVfQVJDSF9LTVNBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xOTgtXFx0c2VsZWN0IEhBVkVfQVJDSF9LRkVOQ0VcXG5hcmNoL3g4Ni9LY29uZmlnOjE5OTpcXHRzZWxlY3QgSEFWRV9BUkNIX0tNU0FOXFx0XFx0XFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0yMDAtXFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjIyLjM1NTM0MTg2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjM0MzQzNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgSW5hcHBsaWNhYmlsaXR5IGZvciB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgd2UndmUgZ290IGEgYHNlbGVjdCBIQVZFX0FSQ0hfS01TQU4gaWYgWDg2XzY0YCBjb25kaXRpb24uIFJpZ2h0IGF3YXksIHRoYXQncyBhIHJlZCBmbGFnLiBLTVNBTiBpcyBkZWZpbml0ZWx5ICpub3QqIHN1cHBvcnRlZCBvbiAzMi1iaXQgeDg2LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgb25seSBldmVyIGNvbXBpbGVkIGZvciAzMi1iaXQgeDg2IGFyY2hpdGVjdHVyZXMuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LlxuXG5TaW5jZSBgYnBmX2ppdF9jb21wMzIuY2Agb25seSBleGlzdHMgaW4gMzItYml0IGJ1aWxkcyBhbmQgS01TQU4gaXMgZXhjbHVzaXZlIHRvIDY0LWJpdCwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yICp0aGlzKiBwYXRjaCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLiBUaGUgbW9kaWZpZWQgY29kZSBzaW1wbHkgd29uJ3QgYmUgcGFydCBvZiBhIEtNU0FOLWVuYWJsZWQgYnVpbGQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLCBpbiBjYXNlIEknbSBtaXNzaW5nIHNvbWV0aGluZywgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZpbGVzIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuICpTaWdoKiBPa2F5LCBzbyB3ZSd2ZSBnb3QgYSBidW5jaCBvZiBzZWxmdGVzdCBmaWxlczogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY2AuIEFsbCBzZWxmdGVzdHMuIE5vIHJlYWwga2VybmVsIGNvZGUgbW9kaWZpY2F0aW9uIGFwYXJ0IGZyb20gdGhlIGBicGZfaml0X2NvbXAzMi5jYCBmaWxlIEkgbWVudGlvbmVkIGVhcmxpZXIuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCwgd2hpY2ggYWRkcmVzc2VzIHNpZ24vemVyby1leHRlbnNpb24gaXNzdWVzIGluIHRoZSAzMi1iaXQgQlBGIEpJVCBjb21waWxlciwgd2lsbCBub3QgYmUgcmVsZXZhbnQgaW4gYSBLTVNBTiBjb250ZXh0LiBUaGUgbmF0dXJlIG9mIHRoZSAzMi1iaXQgQlBGIEpJVCBjb2RlIG1lYW5zIGl0IHNpbXBseSBkb2Vzbid0IGludGVyYWN0IHdpdGggS01TQU4gYnVpbGRzLiBBIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGJwZl9qaXRfY29tcDMyLmNgIGlzIGluZGVlZCAzMi1iaXQgb25seSBhcyBhIHNhbml0eSBjaGVjay4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDY6MzAuNTg5Njg3ODc4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY0MTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2NvbXAzMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L01ha2VmaWxlPTY9aWZlcSAoJChDT05GSUdfWDg2XzMyKSx5KVxcbmFyY2gveDg2L25ldC9NYWtlZmlsZTo3OiAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDMyLm9cXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtOC1lbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjMwLjYzNjMzNDI4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg3MDIwOTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29tcGlsYXRpb24gQ29udGV4dCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIHJpZ2h0IHRoZXJlLiBUaGUgY29kZSBJJ20gbG9va2luZyBhdCBpcyAqZGVmaW5pdGVseSogb25seSBjb21waWxlZCB1bmRlciB0aGUgYENPTkZJR19YODZfMzJgIGZsYWcuIFRoYXQncyB0aGUga2V5IHJlc3RyaWN0aW9uLiBObyBuZWVkIHRvIGxvb2sgYW55IGZ1cnRoZXIgYXQgdGhlIGdlbmVyYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBvciB0aGUgbGFyZ2VyIHByb2plY3Qgc3RydWN0dXJlLCBpdCBpcyBvbmx5IHJlbGF0ZWQgdG8gdGhlIDMyIGJpdCBhcmNoaXRlY3R1cmUuIE5vdyB0aGF0IEkgaGF2ZSBpc29sYXRlZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGl0IGlzIHRpbWUgdG8gc2V0IHRoZSBvdXRjb21lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDkxLCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjM0LjQyMzM1ODgyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIDMyLWJpdCB4ODYgKGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2ApIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIG9yIHplcm8tZXh0ZW5kIHJldHVybiB2YWx1ZXMgZnJvbSBrZnVuY3MuIFdoaWxlIHRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgdW5pbml0aWFsaXplZCBvciBsZWZ0b3ZlciByZWdpc3RlciBzdGF0ZSBjb3VsZCBiZSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcywgS01TQU4gaXMgb25seSBzdXBwb3J0ZWQgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgKGUuZy4sIGBYODZfNjRgKS4gVGhlIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIHN0cmljdGx5IGZvciAzMi1iaXQgeDg2IChgQ09ORklHX1g4Nl8zMmApIGFuZCB3aWxsIG5vdCBiZSBjb21waWxlZCBvciBleGVjdXRlZCBpbiBhIEtNU0FOIGJ1aWxkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgMzItYml0IHg4NiAoYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCkgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgb3IgemVyby1leHRlbmQgcmV0dXJuIHZhbHVlcyBmcm9tIGtmdW5jcy4gV2hpbGUgdGhpcyBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB1bmluaXRpYWxpemVkIG9yIGxlZnRvdmVyIHJlZ2lzdGVyIHN0YXRlIGNvdWxkIGJlIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBLTVNBTiBpcyBvbmx5IHN1cHBvcnRlZCBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyAoZS5nLiwgYFg4Nl82NGApLiBUaGUgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgc3RyaWN0bHkgZm9yIDMyLWJpdCB4ODYgKGBDT05GSUdfWDg2XzMyYCkgYW5kIHdpbGwgbm90IGJlIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIGluIGEgS01TQU4gYnVpbGQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcwttg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 13:03:29 +0000 UTC FinishedAt: 2026-08-13 13:06:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "7500c01e-5bd0-481a-a9da-1f86e3f29ff7" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIDMyLWJpdCB4ODYgKGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2ApIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIG9yIHplcm8tZXh0ZW5kIHJldHVybiB2YWx1ZXMgZnJvbSBrZnVuY3MuIFdoaWxlIHRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgdW5pbml0aWFsaXplZCBvciBsZWZ0b3ZlciByZWdpc3RlciBzdGF0ZSBjb3VsZCBiZSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcywgS01TQU4gaXMgb25seSBzdXBwb3J0ZWQgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgKGUuZy4sIGBYODZfNjRgKS4gVGhlIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIHN0cmljdGx5IGZvciAzMi1iaXQgeDg2IChgQ09ORklHX1g4Nl8zMmApIGFuZCB3aWxsIG5vdCBiZSBjb21waWxlZCBvciBleGVjdXRlZCBpbiBhIEtNU0FOIGJ1aWxkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmY3ZDc3ODI2NDJjNmI2ZWVhNDczYzEzNDYxYmE3ZTcyYjgxZDY3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjA0OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IDg1MmJhZjJlNGRiNGQuLjAxN2NjOWU3ZTRlMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbkBAIC0xNjIwLDEzICYjNDM7MTYyMCwyNSBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsXG4gXHRcdC8qIGFkZCBlc3AsXCYjMzQ7Ynl0ZXNfaW5fc3RhY2tcJiMzNDsgKi9cbiBcdFx0ZW5kX2FkZHIgLT0gMztcbiBcbi1cdC8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlZHggKi9cbi1cdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSBcdTAwM2Ugc2l6ZW9mKHUzMikpXG4tXHRcdGVuZF9hZGRyIC09IDM7XG4tXG4tXHQvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWF4ICovXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUpXG4mIzQzO1x0c3dpdGNoIChmbS1cdTAwM2VyZXRfc2l6ZSkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU4KTpcbiYjNDM7XHRjYXNlIHNpemVvZih1MTYpOlxuJiM0MztcdFx0LyogbW92W3N8el14IGVheCxbYV14ICovXG4gXHRcdGVuZF9hZGRyIC09IDM7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIHNpemVvZih1MzIpOlxuJiM0MztcdFx0LyogY2RxIG9yIHhvciBlZHgsZWR4ICovXG4mIzQzO1x0XHRlbmRfYWRkciAtPSBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDEgOiAyO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBzaXplb2YodTY0KTpcbiYjNDM7XHRcdC8qIFN0b3JlIEVEWDpFQVggaW4gUjAuICovXG4mIzQzO1x0XHRlbmRfYWRkciAtPSA2O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdGptcF9vZmZzZXQgPSAodTggKilfX2JwZl9jYWxsX2Jhc2UgJiM0MzsgaW5zbi1cdTAwM2VpbW0gLSBlbmRfYWRkcjtcbiBcdGlmICghaXNfc2ltbTMyKGptcF9vZmZzZXQpKSB7XG5AQCAtMTYzNywxNSAmIzQzOzE2NDksMzggQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLFxuIFxuIFx0RU1JVDFfb2ZmMzIoMHhFOCwgam1wX29mZnNldCk7XG4gXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUpXG4mIzQzO1x0c3dpdGNoIChmbS1cdTAwM2VyZXRfc2l6ZSkge1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU4KTpcbiYjNDM7XHRcdC8qIG1vdltzfHpdeCBlYXgsYWwgKi9cbiYjNDM7XHRcdEVNSVQzKDB4MEYsIGZtLVx1MDAzZXJldF9mbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMHhCRSA6IDB4QjYsXG4mIzQzO1x0XHQgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHUxNik6XG4mIzQzO1x0XHQvKiBtb3Zbc3x6XXggZWF4LGF4ICovXG4mIzQzO1x0XHRFTUlUMygweDBGLCBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDB4QkYgOiAweEI3LFxuJiM0MztcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZm0tXHUwMDNlcmV0X3NpemUgXHUwMDI2XHUwMDI2IGZtLVx1MDAzZXJldF9zaXplIFx1MDAzYz0gc2l6ZW9mKHUzMikpIHtcbiYjNDM7XHRcdGlmIChmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRylcbiYjNDM7XHRcdFx0LyogY2RxICovXG4mIzQzO1x0XHRcdEVNSVQxKDB4OTkpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHQvKiB4b3IgZWR4LGVkeCAqL1xuJiM0MztcdFx0XHRFTUlUMigweDMxLCBhZGRfMnJlZygweEMwLCBJQTMyX0VEWCwgSUEzMl9FRFgpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSkge1xuIFx0XHQvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWF4ICovXG4gXHRcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VBWCksXG4gXHRcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzBdKSk7XG4tXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUgXHUwMDNlIHNpemVvZih1MzIpKVxuIFx0XHQvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWR4ICovXG4gXHRcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VEWCksXG4gXHRcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzFdKSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGJ5dGVzX2luX3N0YWNrKVxuIFx0XHQvKiBhZGQgZXNwLFwmIzM0O2J5dGVzX2luX3N0YWNrXCYjMzQ7ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IDgxMTNmZWE3YmE4NmMuLjQ2MzhlMGE0NWRiNmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtMTI3LDYgJiM0MzsxMjcsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX3NldF9yZXR2YWwuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfbHNtLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2tmdW5jX3JldHVybi5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpcnEuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfY3R4X3B0cl9wYXJhbS5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl96ZXh0LnNrZWwuaFwmIzM0O1xuQEAgLTI4OSw2ICYjNDM7MjkwLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2xzbSh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2xzbSk7IH1cbiB2b2lkIHRlc3RfaXJxKHZvaWQpXHRcdFx0ICAgICAgeyBSVU4oaXJxKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcdFx0ICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cbiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX2tmdW5jX3JldHVybih2b2lkKSAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9rZnVuY19yZXR1cm4pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfemV4dCh2b2lkKSAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFModmVyaWZpZXJfemV4dCk7IH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCA1ZWFjZjFiNDMyNTIxLi4xNDk4ZGEwNDU5N2FmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5AQCAtMTU1LDYgJiM0MzsxNTUsNyBAQFxuICNkZWZpbmUgX19idGZfZnVuY19wYXRoKHBhdGgpXHRfX3Rlc3RfdGFnKFwmIzM0O3Rlc3RfYnRmX2Z1bmNfcGF0aD1cJiMzNDsgcGF0aClcbiAjZGVmaW5lIF9fYXJjaChhcmNoKVx0XHRfX3Rlc3RfdGFnKFwmIzM0O3Rlc3RfYXJjaD1cJiMzNDsgYXJjaClcbiAjZGVmaW5lIF9fYXJjaF94ODZfNjRcdFx0X19hcmNoKFwmIzM0O1g4Nl82NFwmIzM0OylcbiYjNDM7I2RlZmluZSBfX2FyY2hfeDg2XzMyXHRcdF9fYXJjaChcJiMzNDtYODZfMzJcJiMzNDspXG4gI2RlZmluZSBfX2FyY2hfYXJtNjRcdFx0X19hcmNoKFwmIzM0O0FSTTY0XCYjMzQ7KVxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcdFx0X19hcmNoKFwmIzM0O1JJU0NWNjRcJiMzNDspXG4gI2RlZmluZSBfX2FyY2hfczM5MHhcdFx0X19hcmNoKFwmIzM0O3MzOTB4XCYjMzQ7KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUyYTk0ZGFmMDM5MjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uY1xuQEAgLTAsMCAmIzQzOzEsODQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2V4dGVybiBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKSBfX2tzeW07XG4mIzQzO2V4dGVybiBib29sIGJwZl9keW5wdHJfaXNfbnVsbChjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqcCkgX19rc3ltO1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbiYjNDM7fSBrZnVuY19yZXR1cm5fbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYVtdID0gXCYjMzQ7YVwmIzM0OztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgc3RyaW5nX2JbXSA9IFwmIzM0O2JcJiMzNDs7XG4mIzQzO1xuJiM0Mzt2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIHB0ciA9IHt9O1xuJiM0MztcbiYjNDM7XHRicGZfc3RyY21wKHN0cmluZ19hLCBzdHJpbmdfYik7XG4mIzQzO1x0YnBmX2R5bnB0cl9pc19udWxsKFx1MDAyNnB0cik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7X19hcmNoX3g4Nl8zMlxuJiM0MztfX25ha2VkIHZvaWQga2Z1bmNfYm9vbF9yZXR1cm5femVyb19leHRlbmRlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHUzMiAqKShyMTAgLSA0KSA9IHIwO1x0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiAmIzQzOz0gLTQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW2tmdW5jX3JldHVybl9tYXBdIGxsO1x0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4mIzQzO1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gODtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHIzID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHI0ID0gcjEwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHI0ICYjNDM7PSAtMjQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9keW5wdHJfZnJvbV9tZW1dO1x0XHRcdFxcXG4mIzQzO1x0aWYgcjAgIT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDB4MTAwMDAwMDAwIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSAmIzQzOz0gLTI0O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgYnBmX2R5bnB0cl9pc19udWxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCBcdTAwM2VcdTAwM2U9IDMyO1x0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdHIwID0gMjtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9hZGRyKGtmdW5jX3JldHVybl9tYXApLFxuJiM0MztcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4mIzQzO1x0ICBfX2ltbShicGZfZHlucHRyX2Zyb21fbWVtKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpXG4mIzQzO19fYXJjaF94ODZfMzJcbiYjNDM7X19uYWtlZCB2b2lkIGtmdW5jX2ludF9yZXR1cm5fc2lnbl9leHRlbmRlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9ICVbc3RyaW5nX2FdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMiA9ICVbc3RyaW5nX2JdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRjYWxsIGJwZl9zdHJjbXA7XHRcdFx0XHRcXFxuJiM0MztcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2FkZHIoc3RyaW5nX2EpLFxuJiM0MztcdCAgX19pbW1fYWRkcihzdHJpbmdfYilcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbmluZGV4IDA3ODA3NzU3YjUxOGQuLjhhOWY0YTMxYTFiYjEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbkBAIC0zNzQsMTYgJiM0MzszNzQsMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKipjb2xsZWN0X2RlY2xfdGFncyhzdHJ1Y3QgYnRmICpidGYsIGludCBpZCwgaW50ICpjbnQpXG4gZW51bSBhcmNoIHtcbiBcdEFSQ0hfVU5LTk9XTlx0PSAweDEsXG4gXHRBUkNIX1g4Nl82NFx0PSAweDIsXG4tXHRBUkNIX0FSTTY0XHQ9IDB4NCxcbi1cdEFSQ0hfUklTQ1Y2NFx0PSAweDgsXG4tXHRBUkNIX1MzOTBYXHQ9IDB4MTAsXG4tXHRBUkNIX0xPT05HQVJDSFx0PSAweDIwLFxuJiM0MztcdEFSQ0hfWDg2XzMyXHQ9IDB4NCxcbiYjNDM7XHRBUkNIX0FSTTY0XHQ9IDB4OCxcbiYjNDM7XHRBUkNIX1JJU0NWNjRcdD0gMHgxMCxcbiYjNDM7XHRBUkNIX1MzOTBYXHQ9IDB4MjAsXG4mIzQzO1x0QVJDSF9MT09OR0FSQ0hcdD0gMHg0MCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfYXJjaCh2b2lkKVxuIHtcbiAjaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuIFx0cmV0dXJuIEFSQ0hfWDg2XzY0O1xuJiM0MzsjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKVxuJiM0MztcdHJldHVybiBBUkNIX1g4Nl8zMjtcbiAjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIFx0cmV0dXJuIEFSQ0hfQVJNNjQ7XG4gI2VsaWYgZGVmaW5lZChfX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0XG5AQCAtNTc3LDYgJiM0Mzs1ODAsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlcixcbiBcdFx0fSBlbHNlIGlmICgodmFsID0gc3RyX2hhc19wZngocywgXCYjMzQ7dGVzdF9hcmNoPVwmIzM0OykpKSB7XG4gXHRcdFx0aWYgKHN0cmNtcCh2YWwsIFwmIzM0O1g4Nl82NFwmIzM0OykgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfWDg2XzY0O1xuJiM0MztcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O1g4Nl8zMlwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0XHRcdGFyY2ggPSBBUkNIX1g4Nl8zMjtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O0FSTTY0XCYjMzQ7KSA9PSAwKSB7XG4gXHRcdFx0XHRhcmNoID0gQVJDSF9BUk02NDtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwmIzM0O1JJU0NWNjRcJiMzNDspID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmY3ZDc3ODI2NDJjNmI2ZWVhNDczYzEzNDYxYmE3ZTcyYjgxZDY3YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEzOjA0OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYwppbmRleCA4NTJiYWYyZTRkYjRkLi4wMTdjYzllN2U0ZTJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYwpAQCAtMTYyMCwxMyAmIzQzOzE2MjAsMjUgQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLAogCQkvKiBhZGQgZXNwLCYjMzQ7Ynl0ZXNfaW5fc3RhY2smIzM0OyAqLwogCQllbmRfYWRkciAtPSAzOwogCi0JLyogbW92IGR3b3JkIHB0ciBbZWJwJiM0MztvZmZdLGVkeCAqLwotCWlmIChmbS0mZ3Q7cmV0X3NpemUgJmd0OyBzaXplb2YodTMyKSkKLQkJZW5kX2FkZHIgLT0gMzsKLQotCS8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlYXggKi8KLQlpZiAoZm0tJmd0O3JldF9zaXplKQomIzQzOwlzd2l0Y2ggKGZtLSZndDtyZXRfc2l6ZSkgewomIzQzOwljYXNlIDA6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBzaXplb2YodTgpOgomIzQzOwljYXNlIHNpemVvZih1MTYpOgomIzQzOwkJLyogbW92W3N8el14IGVheCxbYV14ICovCiAJCWVuZF9hZGRyIC09IDM7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBzaXplb2YodTMyKToKJiM0MzsJCS8qIGNkcSBvciB4b3IgZWR4LGVkeCAqLwomIzQzOwkJZW5kX2FkZHIgLT0gZm0tJmd0O3JldF9mbGFncyAmYW1wOyBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAxIDogMjsKJiM0MzsJCWZhbGx0aHJvdWdoOwomIzQzOwljYXNlIHNpemVvZih1NjQpOgomIzQzOwkJLyogU3RvcmUgRURYOkVBWCBpbiBSMC4gKi8KJiM0MzsJCWVuZF9hZGRyIC09IDY7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlqbXBfb2Zmc2V0ID0gKHU4ICopX19icGZfY2FsbF9iYXNlICYjNDM7IGluc24tJmd0O2ltbSAtIGVuZF9hZGRyOwogCWlmICghaXNfc2ltbTMyKGptcF9vZmZzZXQpKSB7CkBAIC0xNjM3LDE1ICYjNDM7MTY0OSwzOCBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsCiAKIAlFTUlUMV9vZmYzMigweEU4LCBqbXBfb2Zmc2V0KTsKIAotCWlmIChmbS0mZ3Q7cmV0X3NpemUpCiYjNDM7CXN3aXRjaCAoZm0tJmd0O3JldF9zaXplKSB7CiYjNDM7CWNhc2Ugc2l6ZW9mKHU4KToKJiM0MzsJCS8qIG1vdltzfHpdeCBlYXgsYWwgKi8KJiM0MzsJCUVNSVQzKDB4MEYsIGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMHhCRSA6IDB4QjYsCiYjNDM7CQkgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIHNpemVvZih1MTYpOgomIzQzOwkJLyogbW92W3N8el14IGVheCxheCAqLwomIzQzOwkJRU1JVDMoMHgwRiwgZm0tJmd0O3JldF9mbGFncyAmYW1wOyBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAweEJGIDogMHhCNywKJiM0MzsJCSAgICAgIGFkZF8ycmVnKDB4QzAsIElBMzJfRUFYLCBJQTMyX0VBWCkpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZm0tJmd0O3JldF9zaXplICZhbXA7JmFtcDsgZm0tJmd0O3JldF9zaXplICZsdDs9IHNpemVvZih1MzIpKSB7CiYjNDM7CQlpZiAoZm0tJmd0O3JldF9mbGFncyAmYW1wOyBCVEZfRk1PREVMX1NJR05FRF9BUkcpCiYjNDM7CQkJLyogY2RxICovCiYjNDM7CQkJRU1JVDEoMHg5OSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJLyogeG9yIGVkeCxlZHggKi8KJiM0MzsJCQlFTUlUMigweDMxLCBhZGRfMnJlZygweEMwLCBJQTMyX0VEWCwgSUEzMl9FRFgpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZm0tJmd0O3JldF9zaXplKSB7CiAJCS8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlYXggKi8KIAkJRU1JVDMoMHg4OSwgYWRkXzJyZWcoMHg0MCwgSUEzMl9FQlAsIElBMzJfRUFYKSwKIAkJICAgICAgU1RBQ0tfVkFSKGJwZjJpYTMyW0JQRl9SRUdfMF1bMF0pKTsKLQotCWlmIChmbS0mZ3Q7cmV0X3NpemUgJmd0OyBzaXplb2YodTMyKSkKIAkJLyogbW92IGR3b3JkIHB0ciBbZWJwJiM0MztvZmZdLGVkeCAqLwogCQlFTUlUMygweDg5LCBhZGRfMnJlZygweDQwLCBJQTMyX0VCUCwgSUEzMl9FRFgpLAogCQkgICAgICBTVEFDS19WQVIoYnBmMmlhMzJbQlBGX1JFR18wXVsxXSkpOwomIzQzOwl9CiAKIAlpZiAoYnl0ZXNfaW5fc3RhY2spCiAJCS8qIGFkZCBlc3AsJiMzNDtieXRlc19pbl9zdGFjayYjMzQ7ICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA4MTEzZmVhN2JhODZjLi40NjM4ZTBhNDVkYjZlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTEyNyw2ICYjNDM7MTI3LDcgQEAKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfc2V0X3JldHZhbC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9sc20uc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfaml0X2lubGluZS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfa2Z1bmNfcmV0dXJuLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2lycS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3pleHQuc2tlbC5oJiMzNDsKQEAgLTI4OSw2ICYjNDM7MjkwLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2xzbSh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2xzbSk7IH0KIHZvaWQgdGVzdF9pcnEodm9pZCkJCQkgICAgICB7IFJVTihpcnEpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbXR1KHZvaWQpCQkgICAgICB7IFJVTih2ZXJpZmllcl9tdHUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfaml0X2lubGluZSh2b2lkKSAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2ppdF9pbmxpbmUpOyB9CiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX2tmdW5jX3JldHVybih2b2lkKSAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9rZnVuY19yZXR1cm4pOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKaW5kZXggNWVhY2YxYjQzMjUyMS4uMTQ5OGRhMDQ1OTdhZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmgKQEAgLTE1NSw2ICYjNDM7MTU1LDcgQEAKICNkZWZpbmUgX19idGZfZnVuY19wYXRoKHBhdGgpCV9fdGVzdF90YWcoJiMzNDt0ZXN0X2J0Zl9mdW5jX3BhdGg9JiMzNDsgcGF0aCkKICNkZWZpbmUgX19hcmNoKGFyY2gpCQlfX3Rlc3RfdGFnKCYjMzQ7dGVzdF9hcmNoPSYjMzQ7IGFyY2gpCiAjZGVmaW5lIF9fYXJjaF94ODZfNjQJCV9fYXJjaCgmIzM0O1g4Nl82NCYjMzQ7KQomIzQzOyNkZWZpbmUgX19hcmNoX3g4Nl8zMgkJX19hcmNoKCYjMzQ7WDg2XzMyJiMzNDspCiAjZGVmaW5lIF9fYXJjaF9hcm02NAkJX19hcmNoKCYjMzQ7QVJNNjQmIzM0OykKICNkZWZpbmUgX19hcmNoX3Jpc2N2NjQJCV9fYXJjaCgmIzM0O1JJU0NWNjQmIzM0OykKICNkZWZpbmUgX19hcmNoX3MzOTB4CQlfX2FyY2goJiMzNDtzMzkweCYjMzQ7KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjUyYTk0ZGFmMDM5MjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMKQEAgLTAsMCAmIzQzOzEsODQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVMKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2V4dGVybiBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7fSBrZnVuY19yZXR1cm5fbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIHN0cmluZ19hW10gPSAmIzM0O2EmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYltdID0gJiMzNDtiJiMzNDs7CiYjNDM7CiYjNDM7dm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHIgPSB7fTsKJiM0MzsKJiM0MzsJYnBmX3N0cmNtcChzdHJpbmdfYSwgc3RyaW5nX2IpOwomIzQzOwlicGZfZHlucHRyX2lzX251bGwoJmFtcDtwdHIpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1NMRUVQQUJMRSkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX2FyY2hfeDg2XzMyCiYjNDM7X19uYWtlZCB2b2lkIGtmdW5jX2Jvb2xfcmV0dXJuX3plcm9fZXh0ZW5kZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJKih1MzIgKikocjEwIC0gNCkgPSByMDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC00OwkJCQkJXAomIzQzOwlyMSA9ICVba2Z1bmNfcmV0dXJuX21hcF0gbGw7CQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlpZiByMCA9PSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJcjEgPSByMDsJCQkJCVwKJiM0MzsJcjIgPSA4OwkJCQkJCVwKJiM0MzsJcjMgPSAwOwkJCQkJCVwKJiM0MzsJcjQgPSByMTA7CQkJCQlcCiYjNDM7CXI0ICYjNDM7PSAtMjQ7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfZHlucHRyX2Zyb21fbWVtXTsJCQlcCiYjNDM7CWlmIHIwICE9IDAgZ290byAxZjsJCQkJXAomIzQzOwlyMCA9IDB4MTAwMDAwMDAwIGxsOwkJCQlcCiYjNDM7CXIxID0gcjEwOwkJCQkJXAomIzQzOwlyMSAmIzQzOz0gLTI0OwkJCQkJXAomIzQzOwljYWxsIGJwZl9keW5wdHJfaXNfbnVsbDsJCQkJXAomIzQzOwlyMCAmZ3Q7Jmd0Oz0gMzI7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOzE6CXIwID0gMjsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKGtmdW5jX3JldHVybl9tYXApLAomIzQzOwkgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tKGJwZl9keW5wdHJfZnJvbV9tZW0pCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgtMSkKJiM0MztfX2FyY2hfeDg2XzMyCiYjNDM7X19uYWtlZCB2b2lkIGtmdW5jX2ludF9yZXR1cm5fc2lnbl9leHRlbmRlZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyMCA9IDA7CQkJCQkJXAomIzQzOwlyMSA9ICVbc3RyaW5nX2FdIGxsOwkJCQlcCiYjNDM7CXIyID0gJVtzdHJpbmdfYl0gbGw7CQkJCVwKJiM0MzsJY2FsbCBicGZfc3RyY21wOwkJCQlcCiYjNDM7CXIwICZndDsmZ3Q7PSAzMjsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIoc3RyaW5nX2EpLAomIzQzOwkgIF9faW1tX2FkZHIoc3RyaW5nX2IpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKaW5kZXggMDc4MDc3NTdiNTE4ZC4uOGE5ZjRhMzFhMWJiMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMKQEAgLTM3NCwxNiAmIzQzOzM3NCwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqKmNvbGxlY3RfZGVjbF90YWdzKHN0cnVjdCBidGYgKmJ0ZiwgaW50IGlkLCBpbnQgKmNudCkKIGVudW0gYXJjaCB7CiAJQVJDSF9VTktOT1dOCT0gMHgxLAogCUFSQ0hfWDg2XzY0CT0gMHgyLAotCUFSQ0hfQVJNNjQJPSAweDQsCi0JQVJDSF9SSVNDVjY0CT0gMHg4LAotCUFSQ0hfUzM5MFgJPSAweDEwLAotCUFSQ0hfTE9PTkdBUkNICT0gMHgyMCwKJiM0MzsJQVJDSF9YODZfMzIJPSAweDQsCiYjNDM7CUFSQ0hfQVJNNjQJPSAweDgsCiYjNDM7CUFSQ0hfUklTQ1Y2NAk9IDB4MTAsCiYjNDM7CUFSQ0hfUzM5MFgJPSAweDIwLAomIzQzOwlBUkNIX0xPT05HQVJDSAk9IDB4NDAsCiB9OwogCiBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZCkKIHsKICNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiAJcmV0dXJuIEFSQ0hfWDg2XzY0OwomIzQzOyNlbGlmIGRlZmluZWQoX19pMzg2X18pCiYjNDM7CXJldHVybiBBUkNIX1g4Nl8zMjsKICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCiAJcmV0dXJuIEFSQ0hfQVJNNjQ7CiAjZWxpZiBkZWZpbmVkKF9fcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0CkBAIC01NzcsNiAmIzQzOzU4MCw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLAogCQl9IGVsc2UgaWYgKCh2YWwgPSBzdHJfaGFzX3BmeChzLCAmIzM0O3Rlc3RfYXJjaD0mIzM0OykpKSB7CiAJCQlpZiAoc3RyY21wKHZhbCwgJiMzNDtYODZfNjQmIzM0OykgPT0gMCkgewogCQkJCWFyY2ggPSBBUkNIX1g4Nl82NDsKJiM0MzsJCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICYjMzQ7WDg2XzMyJiMzNDspID09IDApIHsKJiM0MzsJCQkJYXJjaCA9IEFSQ0hfWDg2XzMyOwogCQkJfSBlbHNlIGlmIChzdHJjbXAodmFsLCAmIzM0O0FSTTY0JiMzNDspID09IDApIHsKIAkJCQlhcmNoID0gQVJDSF9BUk02NDsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtSSVNDVjY0JiMzNDspID09IDApIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB4ODYgMzItYml0IEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCBhbmQgYWRkcyBzb21lIHRlc3RzLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHNlZW0gZm9jdXNlZCBvbiBgZW1pdF9rZnVuY19jYWxsYCBpbiB0aGUgMzItYml0IHg4NiBCUEYgSklUIGNvbXBpbGVyLiBJdCYjMzk7cyBoYW5kbGluZyBob3cgdGhlIEpJVCBjb21waWxlciBkZWFscyB3aXRoIHRoZSByZXR1cm4gc2l6ZXMgb2Yga2Z1bmNzLCB0aGluZ3MgbGlrZSB6ZXJvLCBvbmUsIHR3bywgZm91ciwgb3IgZWlnaHQgYnl0ZXMsIGFuZCB0aGUgc2lnbiBvciB6ZXJvIGV4dGVuc2lvbiBvZiB0aG9zZSByZXR1cm5lZCB2YWx1ZXMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGFjdHVhbGx5IHJlYWNoYWJsZT8gSXMgdGhpcyBzb21ldGhpbmcgd29ydGggZGVkaWNhdGluZyBmdXp6aW5nIHJlc291cmNlcyB0bz8mIzM0OyBJIGtub3cgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCBvbmx5IGdldHMgY29tcGlsZWQgaWYgYENPTkZJR19YODZfMzJgIGFuZCBgQ09ORklHX0JQRl9KSVRgIGFyZSBib3RoIGVuYWJsZWQuIE5vdywgdXN1YWxseSBzeXprYWxsZXIgaXMgdGFyZ2V0aW5nIHg4Nl82NCwgYnV0IEkga25vdyBpdCAqY2FuKiBmdXp6IHg4Nl8zMiBhbmQgMzItYml0IGNvbXBhdCBtb2RlLiBTbyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgMzItYml0IGNvZGUgcGF0aCBhY3R1YWxseSB1c2VkIGluIGEgMzItYml0IHg4NiBrZXJuZWw/CgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2x1ZXMgYWJvdXQgd2hlbiBhbmQgaG93IHRoaXMgZmlsZSBnZXRzIHB1bGxlZCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHNlZSBpZiBJIHNob3VsZCBjYXJlIGFib3V0IGRlZGljYXRpbmcgZnV6emluZyByZXNvdXJjZXMgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9jb21wMzJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvTWFrZWZpbGU9Nj1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGU6NzogICAgICAgIG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wMzIub1xuYXJjaC94ODYvbmV0L01ha2VmaWxlLTgtZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMzgKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcmdldCBBcmNoaXRlY3R1cmUgYW5kIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIGZvciBgQ09ORklHX1g4Nl8zMmAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHN5emthbGxlciBhY3R1YWxseSAqZnV6emVzKiB4ODZfMzIuIEEgcXVpY2sgY2hlY2suLi4geWVwLCB0aGVyZSBhcmUgc3l6LWJvdCBpbnN0YW5jZXMgZGVkaWNhdGVkIHRvIGkzODYuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuCgpOb3csIHRoZSBzcGVjaWZpYyBwYXRjaCBJJiMzOTttIGV4YW1pbmluZyB0b3VjaGVzIGBlbWl0X2tmdW5jX2NhbGxgIGluIGBicGZfaml0X2NvbXAzMi5jYC4gTmF0dXJhbGx5LCBteSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHdoYXQgdGhhdCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW1pdF9rZnVuY19jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTQyMj1zdGF0aWMgdTggZ2V0X2NvbmRfam1wX29wY29kZShjb25zdCB1OCBvcCwgYm9vbCBpc19jbXBfbG8pXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU0Mi0gKlxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTU0MzogKiBlbWl0X2tmdW5jX2NhbGwoKSBmaW5kcyBvdXQgdGhlIGJ0Zl9mdW5jX21vZGVsIGJ5IGNhbGxpbmdcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTE1NDQtICogYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKCkuICBBIGJ0Zl9mdW5jX21vZGVsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU2MS0gKiBjdXJyZW50IChCUEZfSk1QIHwgQlBGX0NBTEwpIGJwZi1pbnNuLiAgSXQgaXMgcGFzc2VkIGFzIFwmIzM0O2VuZF9hZGRyXCYjMzQ7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNTYyOiAqIHRvIHRoZSBlbWl0X2tmdW5jX2NhbGwoKS4gIFRodXMsIGl0IGNhbiBsZWFybiB0aGUgXCYjMzQ7aW1tZWRpYXRlLWZvbGxvdy1jYWxsXCYjMzQ7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTYzLSAqIGFkZHJlc3MgYnkgZmlndXJpbmcgb3V0IGhvdyBtYW55IGppdC1pbnNuIGlzIGdlbmVyYXRlZCBiZXR3ZWVuXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU2OC0gKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjE1Njk6c3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU3MC1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICoqcHByb2cpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTY5ND1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjEzMS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjIxMzI6XHRcdFx0XHRlcnIgPSBlbWl0X2tmdW5jX2NhbGwoYnBmX3Byb2csXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yMTMzLVx0XHRcdFx0XHRcdCAgICAgIGltYWdlICYjNDM7IGFkZHJzW2ldLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBLZnVuYyBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIGlzIHRyaWdnZXJlZCBieSBgZG9faml0YCwgc3BlY2lmaWNhbGx5IGZvciBCUEYga2Z1bmMgY2FsbHMuIEkga25vdyB0aGlzIGNvZGUsIHRoaXMgaXMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBsb2dpYywgdGhlIEJQRiBKSVQgZm9yIHg4Nl8zMiBpbiB0aGlzIGNhc2UuIFRoZSBjaGFuZ2VzIHRoZXkmIzM5O3ZlIG1hZGUgYWN0dWFsbHkgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LCBkZWFsaW5nIHdpdGggaG93IHdlIGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIHdoaWNoIGFyZSBub3cgb2YgdmFyaWVkIHNpemVzIGFuZCBzaWducywgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gU28sIGFic29sdXRlbHksIHdlIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4gVGhpcyBpcyBhIGdvb2QgdGFyZ2V0LgoKTm93LCBhYm91dCBgZW1pdF9rZnVuY19jYWxsYC4gSXQmIzM5O3Mgc3RhdGljLCBzbyBpdCAqY291bGQqIGJlIGlubGluZWQuIEJ1dCB3YWl0IGEgbW9tZW50Li4uIHRoYXQmIzM5O3Mgd2hhdCB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQsIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IHdvdWxkIG1ha2UgaXQgbGVzcyB1c2VmdWwuIFNvLCB3aGVyZSYjMzk7cyB0aGUgSklUIGVudHJ5IHBvaW50PyBBaCwgaGVyZSB3ZSBnbywgbG9va2luZyBhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIHdoaWNoIHNvdW5kcyByaWdodC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBUaGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBhY3Rpb24gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jPTI1NTE9Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTU1LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MjU1NjpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjU1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgSklUIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgSklUIGNvZGUuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBmdW5jdGlvbi4gQnV0IHdhaXQsIGl0JiMzOTtzIHByZXR0eSBnZW5lcmljLiBJdCYjMzk7cyB0aGUgKmdlbmVyaWMqIEpJVCBlbnRyeSBwb2ludCwgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIgZm9yIGEgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBjaGFuZ2VzLgoKYGRvX2ppdGAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIGRlYWQgZW5kIHJpZ2h0IG9mZiB0aGUgYmF0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgdXNpbmcgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFzIG15IG1haW4gcG9pbnQgb2YgaW50ZXJlc3QuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBsYWNlLgoKV2FpdCwgaXQgaXMgcHJldHR5IGdlbmVyaWMsIHNvIEkgbmVlZCBhIG1vcmUgZGlyZWN0IGxlYWQuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGVtaXRfa2Z1bmNfY2FsbGAuIFRoYXQmIzM5O3Mgc3RhdGljIGFzIHdlbGwsIGJ1dCBpdCYjMzk7cyBsYXJnZSBhbmQgc28gbWF5YmUgaXQgaXNuJiMzOTt0IGlubGluZWQ/IEl0JiMzOTtzIHdvcnRoIGEgbG9vayB0byBzZWUgaWYgSSBjYW4gZmluZCBhbiBleHRlcm5hbCByZWZlcmVuY2UgdGhhdCB3b3VsZCBiZSB3b3J0aCBpdC4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgdGhhdCBtaWdodCBiZSBhIGJldHRlciBmb2N1cy4KCk5vcGUsIHNlZW1zIGxpa2UgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgZXZlbiBpZiBpdCYjMzk7cyB0aGUgbW9yZSBnZW5lcmljIG9uZS4KCk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byBrbm93IHRoZSByZWxldmFudCBidWlsZCBmbGFncy4gRGVmaW5pdGVseSBgQ09ORklHX0JQRl9KSVRgIGZvciBzdXJlLiBBbmQsIHdoaWxlIEkmIzM5O20gYXQgaXQsIGBDT05GSUdfWDg2XzMyYC4gQnV0IHdhaXQsIHRoYXQmIzM5O3MgYW4gKmFyY2hpdGVjdHVyZSogY29uZmlnLiBTeXprYWxsZXIgaGFuZGxlcyBhcmNoZXMgc2VwYXJhdGVseSBzbyBpdCYjMzk7cyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHRvICpsaXN0KiBpdC4gQnV0IGl0IG1pZ2h0IGJlIGhlbHBmdWwgZm9yIGNvbnRleHQsIHNvIEkmIzM5O2xsIGluY2x1ZGUgaXQuIEFsdGhvdWdoLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9Mz1jb25maWcgNjRCSVRcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTktXG5hcmNoL3g4Ni9LY29uZmlnOjEwOmNvbmZpZyBYODZfMzJcbmFyY2gveDg2L0tjb25maWctMTEtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZz03NDk9Y29uZmlnIFg4Nl9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbmFyY2gveDg2L0tjb25maWctNzU3LVxuYXJjaC94ODYvS2NvbmZpZzo3NTg6Y29uZmlnIFg4Nl8zMl9JUklTXG5hcmNoL3g4Ni9LY29uZmlnLTc1OS1cdHRyaXN0YXRlIFwmIzM0O0V1cm9icmFpbGxlL0lyaXMgcG93ZXJvZmYgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MDgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gbG9naWMsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYFg4Nl8zMmAgb3B0aW9uIGlzIGVzc2VudGlhbGx5IGRlZmluZWQgYXMgYGRlZl9ib29sIHlgIGlmIGA2NEJJVGAgaXNuJiMzOTt0IGVuYWJsZWQuIFRoYXQgbWFrZXMgaXQgcmVkdW5kYW50IHRvIGV4cGxpY2l0bHkgbGlzdCBgWDg2XzMyYCBzZXBhcmF0ZWx5OyB0aGUgZGVwZW5kZW5jeSBoYW5kbGVzIGl0LgoKVGhlIGludGVyZXN0aW5nIG9uZXMgYXJlIHJlbGF0ZWQgdG8gQlBGLCBvYnZpb3VzbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9KSVRgIGlzIGluY2x1ZGVkLCB0aGF0JiMzOTtzIGNydWNpYWwuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiBrZnVuY3MsIGBCUEZfU1lTQ0FMTGAgd2lsbCBiZSBhIGRlcGVuZGVuY3ksIHRoYXQgc2VlbXMgbG9naWNhbC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHN1YnRseSBsaW5rZWQgY29uZmlndXJhdGlvbnMuIE5vIHVzZSBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLgoKUmlnaHQsIHRoZSB0ZXN0cyBhcmUgdXNpbmcgYGJwZl9zdHJjbXBgIGFuZCBgYnBmX2R5bnB0cl9pc19udWxsYCBrZnVuY3MuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB3aGVyZSBgYnBmX3N0cmNtcGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB0byBtYWtlIGNlcnRhaW4gdGhpcyBjb25maWd1cmF0aW9uIGlzIHN1ZmZpY2llbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RyY21wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTM3MzA9c3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2MC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3NjE6ICogYnBmX3N0cmNtcCAtIENvbXBhcmUgdHdvIHN0cmluZ3Ncbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NjItICogQHMxX19pZ246IE9uZSBzdHJpbmdcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzcyLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc3MzpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3NC17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk0OD1CVEZfSURfRkxBR1MoZnVuYywgX19icGZfdHJhcClcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk1MC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VjbXApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTA9Y2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy0zMS0vKiBQYXNzaW5nIE5VTEwgdG8gc3RyaW5nIGtmdW5jcyAodHJlYXRlZCBhcyBhIHVzZXJzcGFjZSBwdHIpICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjMyOlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNtcF9udWxsMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAoTlVMTCwgXCYjMzQ7aGVsbG9cJiMzNDspOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjMzOlNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cmNtcF9udWxsMih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAoXCYjMzQ7aGVsbG9cJiMzNDssIE5VTEwpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTM0LVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNhc2VjbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZWNtcChOVUxMLCBcJiMzNDtIRUxMT1wmIzM0Oyk7IH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jPTU1PVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCBOVUxMLCAxKTsgfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmMtNTctLyogUGFzc2luZyB1c2Vyc3BhY2UgcHRyIHRvIHN0cmluZyBrZnVuY3MgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NTg6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX3VzZXJfcHRyMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAodXNlcl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo1OTpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChcJiMzNDtoZWxsb1wmIzM0OywgdXNlcl9wdHIpOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTYwLVNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNhc2VjbXBfdXNlcl9wdHIxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNhc2VjbXAodXNlcl9wdHIsIFwmIzM0O0hFTExPXCYjMzQ7KTsgfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9ODE9U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RybmNhc2VzdHJfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFwmIzM0O2hlbGxvXCYjMzQ7LCB1c2VyX3B0ciwgMSk7IH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTg1LS8qIFBhc3NpbmcgaW52YWxpZCBrZXJuZWwgcHRyIHRvIHN0cmluZyBrZnVuY3Mgc2hvdWxkIGFsd2F5cyByZXR1cm4gLUVGQVVMVCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo4NjpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RyY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKGludmFsaWRfa2Vybl9wdHIsIFwmIzM0O2hlbGxvXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo4NzpTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RyY21wX3BhZ2VmYXVsdDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKFwmIzM0O2hlbGxvXCYjMzQ7LCBpbnZhbGlkX2tlcm5fcHRyKTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy04OC1TRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RyY2FzZWNtcF9wYWdlZmF1bHQxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNhc2VjbXAoaW52YWxpZF9rZXJuX3B0ciwgXCYjMzQ7SEVMTE9cJiMzNDspOyB9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYz03PWNoYXIgbG9uZ19zdHJbWEFUVFJfU0laRV9NQVggJiM0MzsgMV07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jLTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jOjk6U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspIGludCB0ZXN0X3N0cmNtcF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAobG9uZ19zdHIsIGxvbmdfc3RyKTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYy0xMC1TRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHRlc3Rfc3RyY2FzZWNtcF90b29fbG9uZyh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlY21wKGxvbmdfc3RyLCBsb25nX3N0cik7IH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmM9OD1jaGFyIHN0cltdID0gXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jLTEyLS8qIEZ1bmN0aW9uYWwgdGVzdHMgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzoxMzpfX3Rlc3QoMCkgaW50IHRlc3Rfc3RyY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChzdHIsIFwmIzM0O2hlbGxvIHdvcmxkXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjE0Ol9fdGVzdCgxKSBpbnQgdGVzdF9zdHJjbXBfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChzdHIsIFwmIzM0O2hlbGxvXCYjMzQ7KTsgfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jLTE1LV9fdGVzdCgwKSBpbnQgdGVzdF9zdHJjYXNlY21wX2VxMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlY21wKHN0ciwgXCYjMzQ7aGVsbG8gd29ybGRcJiMzNDspOyB9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmM6ODpleHRlcm4gaW50IGJwZl9zdHJjbXAoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbikgX19rc3ltO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTktZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jPTIxPXZvaWQgX19rZnVuY19idGZfcm9vdCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYy0yNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYzoyNTpcdGJwZl9zdHJjbXAoc3RyaW5nX2EsIHN0cmluZ19iKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYy0yNi1cdGJwZl9keW5wdHJfaXNfbnVsbChcdTAwMjZwdHIpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYz02OT1fX25ha2VkIHZvaWQga2Z1bmNfaW50X3JldHVybl9zaWduX2V4dGVuZGVkKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTc0LVx0cjIgPSAlW3N0cmluZ19iXSBsbDtcdFx0XHRcdFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmM6NzU6XHRjYWxsIGJwZl9zdHJjbXA7XHRcdFx0XHRcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTc2LVx0cjAgXHUwMDNlXHUwMDNlPSAzMjtcdFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjUKCQkJCQkJCW91dHB1dDogNzUKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgMzItYml0IHg4NiBCUEYgSklUIGNvbXBpbGF0aW9uIGhhcHBlbnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgY29tcGlsYXRpb24gcHJvY2VzcyBpcyBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEJ1dCB3YWl0IGEgc2Vjb25kLCB0aGF0IGZ1bmN0aW9uICppcyogZGVmaW5lZCB3aXRoaW4gdGhlIHNhbWUgZmlsZSwgYGJwZl9qaXRfY29tcDMyLmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYW55IG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBmaWxlIGFyZSBub24tc3RhdGljIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYz0yMzk3PWVtaXRfY29uZF9qbXA6XHRcdGptcF9jb25kID0gZ2V0X2NvbmRfam1wX29wY29kZShCUEZfT1AoY29kZSksIGZhbHNlKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTUwLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MjU1MTpib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjU1Mi17XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MjU1Nj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI2MjktXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoyNjMwOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNjMxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIENvbXBpbGVyIEVudHJ5IFBvaW50KioKCk9rYXksIHNvIGBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBmdW5jdGlvbiBoZXJlLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBiZWdpbiBhIGRlZXAgZGl2ZS4gWWVwLCBpdCYjMzk7cyB0aGUgSklUIGNvbXBpbGVyJiMzOTtzIGVudHJ5IHBvaW50LCB3aGljaCBtYWtlcyBzZW5zZS4gSSB3b3VsZG4mIzM5O3QgZXhwZWN0IGl0IHRvIGJlIGEgaG90LXBhdGggZnVuY3Rpb247IGl0JiMzOTtzIHdoYXQgZ2V0cyBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZGluZywgc28gdGhhdCBjaGVja3Mgb3V0LiBJdCBsb29rcyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sLgoKTm93LCBsZXQmIzM5O3MgYW50aWNpcGF0ZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9idmlvdXNseSwgYEJQRl9TWVNDQUxMYCB3aWxsIGJlIGVzc2VudGlhbCwgYW5kIGBCUEZfSklUYCBnb2VzIHdpdGhvdXQgc2F5aW5nLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBzcGVjaWZpYyB0ZXN0IG9yIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2VzcyBtb3JlIGJyb2FkbHkgd2lsbCByZWx5IHVwb24/IFRoZSB0ZXN0IGNvZGUgbWVudGlvbnMgYGJwZl9zdHJjbXBgLCB3aGljaCBsaXZlcyBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgaWYgdGhhdCBwYXJ0aWN1bGFyIGhlbHBlciBmdW5jdGlvbiBoYXMgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3N0cmNtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTM3MzA9c3RhdGljIGludCBfX2JwZl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGJvb2wgaWdub3JlX2Nhc2UsIHNpemVfdCBsZW4pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2MC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjM3NjE6ICogYnBmX3N0cmNtcCAtIENvbXBhcmUgdHdvIHN0cmluZ3Ncbmtlcm5lbC9icGYvaGVscGVycy5jLTM3NjItICogQHMxX19pZ246IE9uZSBzdHJpbmdcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0zNzcyLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6Mzc3MzpfX2JwZl9rZnVuYyBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3NC17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk0OD1CVEZfSURfRkxBR1MoZnVuYywgX19icGZfdHJhcClcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk1MC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmNhc2VjbXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NQoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBDb21waWxlciBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIGluIHF1ZXN0aW9uIHJlc2lkZXMgd2l0aGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AsIGJ1dCBvbmx5IHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCwgYWxvbmcgd2l0aCBgQlBGX0pJVGAsIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIEpJVCBjb21waWxhdGlvbiBlbnRyeSBwb2ludCDigJMgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIGBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGxgIGFuZCBgYnBmX2ppdF9uZWVkc196ZXh0YCBhcmUgcmVsYXRlZCwgYnV0IHRoZSBmb3JtZXIgaXMgdHJpdmlhbCAoanVzdCByZXR1cm5zIHRydWUpIGFuZCB0aGUgbGF0dGVyIGp1c3QgcmV0dXJucyB0cnVlLiBUaGVyZWZvcmUsIGZvY3VzaW5nIG9uIGBicGZfaW50X2ppdF9jb21waWxlYCBtYWtlcyB0aGUgbW9zdCBzZW5zZS4KCkkganVzdCBxdWlja2x5IGNoZWNrZWQgYGVtaXRfa2Z1bmNfY2FsbGAgYW5kIGNvbmZpcm1lZCBpdCYjMzk7cyBzdGF0aWMsIHNvIHdlJiMzOTtyZSBnb29kIHRvIGdvIHdpdGggYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKVGhlIGRpZmYgYWxzbyB0b3VjaGVzIGEgYnVuY2ggb2YgdGVzdHM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNgLiBBbGwgdGVzdHMsIHNvIG5vIGtlcm5lbCBjb2RlIGFjdHVhbGx5ICptb2RpZmllZCogb3RoZXIgdGhhbiB0aGlzIG9uZSBmaWxlLgoKQWgsIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2Ag4oCTIHRoaXMgaXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlci4gVGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCBoYW5kbGluZyBrZnVuYyBjYWxscyBhbmQgdGhlaXIgcmV0dXJuIHZhbHVlcyBjb3JyZWN0bHksIGluY2x1ZGluZyBkaWZmZXJlbnQgc2l6ZXMgYW5kIHNpZ25zLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcmVkIGZsYWcuIFRoZSBCUEYgSklUIGNvbXBpbGVyIGlzIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayB3aXRoIHRoZSBmdXp6ZXIuCgpJbiBzaG9ydCwgaGVyZSYjMzk7cyBteSBxdWljayBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFllcwoqICAgKipGb2N1c1N5bWJvbHMqKjogYFsmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0O11gCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFsmIzM0O0JQRl9TWVNDQUxMJiMzNDssICYjMzQ7QlBGX0pJVCYjMzQ7XWAKKiAgICoqUmVhc29uaW5nKio6ICYjMzQ7VGhlIHBhdGNoIGludm9sdmVzIHRoZSAzMi1iaXQgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIG9mIHZhcmlvdXMgc2l6ZXMgYW5kIHNpZ25zLiBJdCBkaXJlY3RseSBhZmZlY3RzIHRoZSBCUEYgSklUIGNvbXBpbGVyLCB3aGljaCBpcyBjcnVjaWFsIGtlcm5lbCBsb2dpYywgYW5kIHRoZXJlZm9yZSBwcmVzZW50cyBhIGdvb2Qgb3Bwb3J0dW5pdHkgZm9yIGZ1enppbmcuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSAzMi1iaXQgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIG9mIGRpZmZlcmVudCBzaXplcyBhbmQgc2lnbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgSklUKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciAzMi1iaXQgeDg2IChgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgKSB0byBwcm9wZXJseSBzaWduLWV4dGVuZCBvciB6ZXJvLWV4dGVuZCByZXR1cm4gdmFsdWVzIGZyb20ga2Z1bmNzLiBXaGlsZSB0aGlzIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgb3IgbGVmdG92ZXIgcmVnaXN0ZXIgc3RhdGUgY291bGQgYmUgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIEtNU0FOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIChlLmcuLCBgWDg2XzY0YCkuIFRoZSBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBzdHJpY3RseSBmb3IgMzItYml0IHg4NiAoYENPTkZJR19YODZfMzJgKSBhbmQgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgaW4gYSBLTVNBTiBidWlsZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmN2Q3NzgyNjQyYzZiNmVlYTQ3M2MxMzQ2MWJhN2U3MmI4MWQ2N2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzowNDo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMKaW5kZXggODUyYmFmMmU0ZGI0ZC4uMDE3Y2M5ZTdlNGUyYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMKQEAgLTE2MjAsMTMgJiM0MzsxNjIwLDI1IEBAIHN0YXRpYyBpbnQgZW1pdF9rZnVuY19jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIHU4ICplbmRfYWRkciwKIAkJLyogYWRkIGVzcCwmIzM0O2J5dGVzX2luX3N0YWNrJiMzNDsgKi8KIAkJZW5kX2FkZHIgLT0gMzsKIAotCS8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlZHggKi8KLQlpZiAoZm0tJmd0O3JldF9zaXplICZndDsgc2l6ZW9mKHUzMikpCi0JCWVuZF9hZGRyIC09IDM7Ci0KLQkvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWF4ICovCi0JaWYgKGZtLSZndDtyZXRfc2l6ZSkKJiM0MzsJc3dpdGNoIChmbS0mZ3Q7cmV0X3NpemUpIHsKJiM0MzsJY2FzZSAwOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2Ugc2l6ZW9mKHU4KToKJiM0MzsJY2FzZSBzaXplb2YodTE2KToKJiM0MzsJCS8qIG1vdltzfHpdeCBlYXgsW2FdeCAqLwogCQllbmRfYWRkciAtPSAzOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2Ugc2l6ZW9mKHUzMik6CiYjNDM7CQkvKiBjZHEgb3IgeG9yIGVkeCxlZHggKi8KJiM0MzsJCWVuZF9hZGRyIC09IGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMSA6IDI7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBzaXplb2YodTY0KToKJiM0MzsJCS8qIFN0b3JlIEVEWDpFQVggaW4gUjAuICovCiYjNDM7CQllbmRfYWRkciAtPSA2OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiAJam1wX29mZnNldCA9ICh1OCAqKV9fYnBmX2NhbGxfYmFzZSAmIzQzOyBpbnNuLSZndDtpbW0gLSBlbmRfYWRkcjsKIAlpZiAoIWlzX3NpbW0zMihqbXBfb2Zmc2V0KSkgewpAQCAtMTYzNywxNSAmIzQzOzE2NDksMzggQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLAogCiAJRU1JVDFfb2ZmMzIoMHhFOCwgam1wX29mZnNldCk7CiAKLQlpZiAoZm0tJmd0O3JldF9zaXplKQomIzQzOwlzd2l0Y2ggKGZtLSZndDtyZXRfc2l6ZSkgewomIzQzOwljYXNlIHNpemVvZih1OCk6CiYjNDM7CQkvKiBtb3Zbc3x6XXggZWF4LGFsICovCiYjNDM7CQlFTUlUMygweDBGLCBmbS0mZ3Q7cmV0X2ZsYWdzICZhbXA7IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDB4QkUgOiAweEI2LAomIzQzOwkJICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBzaXplb2YodTE2KToKJiM0MzsJCS8qIG1vdltzfHpdeCBlYXgsYXggKi8KJiM0MzsJCUVNSVQzKDB4MEYsIGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMHhCRiA6IDB4QjcsCiYjNDM7CQkgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZtLSZndDtyZXRfc2l6ZSAmYW1wOyZhbXA7IGZtLSZndDtyZXRfc2l6ZSAmbHQ7PSBzaXplb2YodTMyKSkgewomIzQzOwkJaWYgKGZtLSZndDtyZXRfZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9TSUdORURfQVJHKQomIzQzOwkJCS8qIGNkcSAqLwomIzQzOwkJCUVNSVQxKDB4OTkpOwomIzQzOwkJZWxzZQomIzQzOwkJCS8qIHhvciBlZHgsZWR4ICovCiYjNDM7CQkJRU1JVDIoMHgzMSwgYWRkXzJyZWcoMHhDMCwgSUEzMl9FRFgsIElBMzJfRURYKSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZtLSZndDtyZXRfc2l6ZSkgewogCQkvKiBtb3YgZHdvcmQgcHRyIFtlYnAmIzQzO29mZl0sZWF4ICovCiAJCUVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VBWCksCiAJCSAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzBdKSk7Ci0KLQlpZiAoZm0tJmd0O3JldF9zaXplICZndDsgc2l6ZW9mKHUzMikpCiAJCS8qIG1vdiBkd29yZCBwdHIgW2VicCYjNDM7b2ZmXSxlZHggKi8KIAkJRU1JVDMoMHg4OSwgYWRkXzJyZWcoMHg0MCwgSUEzMl9FQlAsIElBMzJfRURYKSwKIAkJICAgICAgU1RBQ0tfVkFSKGJwZjJpYTMyW0JQRl9SRUdfMF1bMV0pKTsKJiM0MzsJfQogCiAJaWYgKGJ5dGVzX2luX3N0YWNrKQogCQkvKiBhZGQgZXNwLCYjMzQ7Ynl0ZXNfaW5fc3RhY2smIzM0OyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKaW5kZXggODExM2ZlYTdiYTg2Yy4uNDYzOGUwYTQ1ZGI2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3NldF9yZXR2YWwuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfbHNtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2tmdW5jX3JldHVybi5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpcnEuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfY3R4X3B0cl9wYXJhbS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl96ZXh0LnNrZWwuaCYjMzQ7CkBAIC0yODksNiAmIzQzOzI5MCw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9sc20odm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9sc20pOyB9CiB2b2lkIHRlc3RfaXJxKHZvaWQpCQkJICAgICAgeyBSVU4oaXJxKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKQkJICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9rZnVuY19yZXR1cm4odm9pZCkgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfa2Z1bmNfcmV0dXJuKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCmluZGV4IDVlYWNmMWI0MzI1MjEuLjE0OThkYTA0NTk3YWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCkBAIC0xNTUsNiAmIzQzOzE1NSw3IEBACiAjZGVmaW5lIF9fYnRmX2Z1bmNfcGF0aChwYXRoKQlfX3Rlc3RfdGFnKCYjMzQ7dGVzdF9idGZfZnVuY19wYXRoPSYjMzQ7IHBhdGgpCiAjZGVmaW5lIF9fYXJjaChhcmNoKQkJX190ZXN0X3RhZygmIzM0O3Rlc3RfYXJjaD0mIzM0OyBhcmNoKQogI2RlZmluZSBfX2FyY2hfeDg2XzY0CQlfX2FyY2goJiMzNDtYODZfNjQmIzM0OykKJiM0MzsjZGVmaW5lIF9fYXJjaF94ODZfMzIJCV9fYXJjaCgmIzM0O1g4Nl8zMiYjMzQ7KQogI2RlZmluZSBfX2FyY2hfYXJtNjQJCV9fYXJjaCgmIzM0O0FSTTY0JiMzNDspCiAjZGVmaW5lIF9fYXJjaF9yaXNjdjY0CQlfX2FyY2goJiMzNDtSSVNDVjY0JiMzNDspCiAjZGVmaW5lIF9fYXJjaF9zMzkweAkJX19hcmNoKCYjMzQ7czM5MHgmIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41MmE5NGRhZjAzOTIyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jCkBAIC0wLDAgJiM0MzsxLDg0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztleHRlcm4gaW50IGJwZl9zdHJjbXAoY29uc3QgY2hhciAqczFfX2lnbiwgY29uc3QgY2hhciAqczJfX2lnbikgX19rc3ltOwomIzQzO2V4dGVybiBib29sIGJwZl9keW5wdHJfaXNfbnVsbChjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqcCkgX19rc3ltOwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30ga2Z1bmNfcmV0dXJuX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYVtdID0gJiMzNDthJiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgc3RyaW5nX2JbXSA9ICYjMzQ7YiYjMzQ7OwomIzQzOwomIzQzO3ZvaWQgX19rZnVuY19idGZfcm9vdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyID0ge307CiYjNDM7CiYjNDM7CWJwZl9zdHJjbXAoc3RyaW5nX2EsIHN0cmluZ19iKTsKJiM0MzsJYnBmX2R5bnB0cl9pc19udWxsKCZhbXA7cHRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fZmxhZyhCUEZfRl9TTEVFUEFCTEUpCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19hcmNoX3g4Nl8zMgomIzQzO19fbmFrZWQgdm9pZCBrZnVuY19ib29sX3JldHVybl96ZXJvX2V4dGVuZGVkKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXIwID0gMDsJCQkJCQlcCiYjNDM7CSoodTMyICopKHIxMCAtIDQpID0gcjA7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtNDsJCQkJCVwKJiM0MzsJcjEgPSAlW2tmdW5jX3JldHVybl9tYXBdIGxsOwkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXIxID0gcjA7CQkJCQlcCiYjNDM7CXIyID0gODsJCQkJCQlcCiYjNDM7CXIzID0gMDsJCQkJCQlcCiYjNDM7CXI0ID0gcjEwOwkJCQkJXAomIzQzOwlyNCAmIzQzOz0gLTI0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2R5bnB0cl9mcm9tX21lbV07CQkJXAomIzQzOwlpZiByMCAhPSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJcjAgPSAweDEwMDAwMDAwMCBsbDsJCQkJXAomIzQzOwlyMSA9IHIxMDsJCQkJCVwKJiM0MzsJcjEgJiM0Mzs9IC0yNDsJCQkJCVwKJiM0MzsJY2FsbCBicGZfZHlucHRyX2lzX251bGw7CQkJCVwKJiM0MzsJcjAgJmd0OyZndDs9IDMyOwkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsxOglyMCA9IDI7CQkJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW1fYWRkcihrZnVuY19yZXR1cm5fbWFwKSwKJiM0MzsJICBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJICBfX2ltbShicGZfZHlucHRyX2Zyb21fbWVtKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19mbGFnKEJQRl9GX1NMRUVQQUJMRSkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpCiYjNDM7X19hcmNoX3g4Nl8zMgomIzQzO19fbmFrZWQgdm9pZCBrZnVuY19pbnRfcmV0dXJuX3NpZ25fZXh0ZW5kZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjAgPSAwOwkJCQkJCVwKJiM0MzsJcjEgPSAlW3N0cmluZ19hXSBsbDsJCQkJXAomIzQzOwlyMiA9ICVbc3RyaW5nX2JdIGxsOwkJCQlcCiYjNDM7CWNhbGwgYnBmX3N0cmNtcDsJCQkJXAomIzQzOwlyMCAmZ3Q7Jmd0Oz0gMzI7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHN0cmluZ19hKSwKJiM0MzsJICBfX2ltbV9hZGRyKHN0cmluZ19iKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jCmluZGV4IDA3ODA3NzU3YjUxOGQuLjhhOWY0YTMxYTFiYjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jCkBAIC0zNzQsMTYgJiM0MzszNzQsMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKipjb2xsZWN0X2RlY2xfdGFncyhzdHJ1Y3QgYnRmICpidGYsIGludCBpZCwgaW50ICpjbnQpCiBlbnVtIGFyY2ggewogCUFSQ0hfVU5LTk9XTgk9IDB4MSwKIAlBUkNIX1g4Nl82NAk9IDB4MiwKLQlBUkNIX0FSTTY0CT0gMHg0LAotCUFSQ0hfUklTQ1Y2NAk9IDB4OCwKLQlBUkNIX1MzOTBYCT0gMHgxMCwKLQlBUkNIX0xPT05HQVJDSAk9IDB4MjAsCiYjNDM7CUFSQ0hfWDg2XzMyCT0gMHg0LAomIzQzOwlBUkNIX0FSTTY0CT0gMHg4LAomIzQzOwlBUkNIX1JJU0NWNjQJPSAweDEwLAomIzQzOwlBUkNIX1MzOTBYCT0gMHgyMCwKJiM0MzsJQVJDSF9MT09OR0FSQ0gJPSAweDQwLAogfTsKIAogc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChfX3g4Nl82NF9fKQogCXJldHVybiBBUkNIX1g4Nl82NDsKJiM0MzsjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQomIzQzOwlyZXR1cm4gQVJDSF9YODZfMzI7CiAjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQogCXJldHVybiBBUkNIX0FSTTY0OwogI2VsaWYgZGVmaW5lZChfX3Jpc2N2KSAmYW1wOyZhbXA7IF9fcmlzY3ZfeGxlbiA9PSA2NApAQCAtNTc3LDYgJiM0Mzs1ODAsOCBAQCBzdGF0aWMgaW50IHBhcnNlX3Rlc3Rfc3BlYyhzdHJ1Y3QgdGVzdF9sb2FkZXIgKnRlc3RlciwKIAkJfSBlbHNlIGlmICgodmFsID0gc3RyX2hhc19wZngocywgJiMzNDt0ZXN0X2FyY2g9JiMzNDspKSkgewogCQkJaWYgKHN0cmNtcCh2YWwsICYjMzQ7WDg2XzY0JiMzNDspID09IDApIHsKIAkJCQlhcmNoID0gQVJDSF9YODZfNjQ7CiYjNDM7CQkJfSBlbHNlIGlmIChzdHJjbXAodmFsLCAmIzM0O1g4Nl8zMiYjMzQ7KSA9PSAwKSB7CiYjNDM7CQkJCWFyY2ggPSBBUkNIX1g4Nl8zMjsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKHZhbCwgJiMzNDtBUk02NCYjMzQ7KSA9PSAwKSB7CiAJCQkJYXJjaCA9IEFSQ0hfQVJNNjQ7CiAJCQl9IGVsc2UgaWYgKHN0cmNtcCh2YWwsICYjMzQ7UklTQ1Y2NCYjMzQ7KSA9PSAwKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzIxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2ggZm9yIDMyLWJpdCB4ODYqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBlbWl0X2tmdW5jX2NhbGxgLiBJdCYjMzk7cyBhZGRyZXNzaW5nIGhvdyB0aGUgQlBGIEpJVCBjb21waWxlciBoYW5kbGVzIHJldHVybiB2YWx1ZXMgZnJvbSBrZXJuZWwgZnVuY3Rpb24gY2FsbHMgKGtmdW5jcykuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBlbnN1cmluZyBjb3JyZWN0IHByb3BhZ2F0aW9uIG9mIHJldHVybiB2YWx1ZXMgb2YgdmFyeWluZyBzaXplcyDigJMgdTgsIHUxNiwgdTMyLCBhbmQgdTY0IOKAkyBhbmQgaGFuZGxpbmcgdGhlaXIgc2lnbmVkbmVzcyBjb3JyZWN0bHkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvZ2ljIHRvIGVpdGhlciB6ZXJvLWV4dGVuZCBvciBzaWduLWV4dGVuZCB0aGUga2Z1bmMmIzM5O3MgcmV0dXJuIHZhbHVlIGJhc2VkIG9uIGl0cyBzaXplIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHNpZ25lZC4gVGhlIGFkZGVkIHRlc3RzIGluIGB2ZXJpZmllcl9rZnVuY19yZXR1cm4uY2AgYXJlIGEgd2VsY29tZSBhZGRpdGlvbiB0byB2YWxpZGF0ZSB0aGlzIGJlaGF2aW9yLgoKTG9va2luZyBhdCB0aGUgY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoZSBvbGQgY29kZSBzaW1wbHkgbW92ZWQgdGhlIHJldHVybiB2YWx1ZSwgYXNzdW1pbmcgdGhhdCB0aGUgY2FsbGluZyBjb252ZW50aW9uIHdvdWxkIGhhbmRsZSB0aGUgdXBwZXIgYml0cyBvZiB0aGUgNjQtYml0IHJldHVybiByZWdpc3RlciBSMCAod2hpY2ggY29ycmVzcG9uZHMgdG8gRURYOkVBWCBvbiB4ODYtMzIpLiBOb3csIGl0IGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgc2l6ZSBhbmQgc2lnbmVkbmVzcywgdXNpbmcgYXBwcm9wcmlhdGUgaW5zdHJ1Y3Rpb25zIGxpa2UgYG1vdnp4YCAoemVyby1leHRlbmQpLCBgbW92c3hgIChzaWduLWV4dGVuZCksIGBjZHFgIChzaWduLWV4dGVuZCBFQVggdG8gRURYOkVBWCksIGFuZCBgeG9yIGVkeCxlZHhgICh6ZXJvIEVEWCkuIFRoaXMgaXMgY3J1Y2lhbC4gV2l0aG91dCB0aGlzLCB5b3UgY291bGQgZW5kIHVwIHdpdGggZ2FyYmFnZSBkYXRhIGluIHRoZSB1cHBlciBiaXRzIG9mIFIwLgoKVGhpcyB0cmlnZ2VycyBhIHRob3VnaHQg4oCTIGNvdWxkIHRoaXMgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkPyBCZWNhdXNlIHRoZSB1cHBlciBiaXRzIHdlcmUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkLiBUaGUgQlBGIGFyY2hpdGVjdHVyZSB1c2VzIFIwIGFzIGEgNjQtYml0IHJldHVybiByZWdpc3RlciwgYnV0IGtmdW5jcyBtaWdodCByZXR1cm4gc21hbGxlciB2YWx1ZXMsIGxpa2UgMzItYml0IHZhbHVlcy4gVGhhdCB3b3VsZCBtZWFuIHRoZSB1cHBlciAzMiBiaXRzIG9mIFIwIHdvdWxkIGNvbnRhaW4gZ2FyYmFnZS4gSWYgdGhlIEJQRiBwcm9ncmFtIHRoZW4gdXNlZCB0aGVzZSBiaXRzLCBpdCBjb3VsZCByZWFkIHRoYXQgZ2FyYmFnZSBkYXRhLiBJZiB0aGUga2Z1bmMgaXMga2VybmVsIGNvZGUsIHdvdWxkIHRoaXMgbWVhbiBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIGtlcm5lbD8gSXMgdGhpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrPwoKQWhhISBUaGlzIGlzIGEgcmVnaXN0ZXIgbGVhaywgbm90IGEgbWVtb3J5IGxlYWsgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBUaGUgQlBGIHByb2dyYW0gKmNhbiogcmVhZCBFRFggKG9yIHRoZSB1cHBlciBiaXRzIG9mIEVBWCksIGFuZCBFRFggbWlnaHQgY29udGFpbiBzb21lIGxlZnRvdmVyIGtlcm5lbCBkYXRhIG9yIGEgcG9pbnRlci4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGlzIGhhbmRsZWQgYnkgdG9vbHMgbGlrZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpPwoKV2FpdCwgS01TQU4hIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0Li4uIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcuLi4gVGhpcyBjb2RlIGlzIGZvciB4ODYtMzIuIEtNU0FOLCBsYXN0IEkgY2hlY2tlZCwgZG9lcyBub3Qgc3VwcG9ydCAzMi1iaXQgeDg2ISBJdCBmb2N1c2VzIG9uIHg4Ni02NCBhbmQgcG90ZW50aWFsbHkgczM5MHggYW5kIGFybTY0LCBzbyB0ZXN0aW5nIHdpdGggS01TQU4gd291bGQgYmUgdXNlbGVzcyBvbiB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGBicGZfaml0X2NvbXAzMi5jYCB3aGljaCBpcyBidWlsdCBleGNsdXNpdmVseSBmb3IgMzItYml0IHg4Ni4gU28gS01TQU4gd291bGQgKm5vdCogYmUgdXNlZCB0byB0ZXN0IHRoaXMgcGF0aCwgZXZlbiBpZiB0aGUgdXNlciB3ZXJlIHRvIHVzZSBpdC4gVGhhdCYjMzk7cyBnb29kIHRvIGNsYXJpZnkuIExldCBtZSBjb25maXJtLCBJIGJlbGlldmUgSSByZWFkIHRoYXQgS01TQU4gb25seSBzdXBwb3J0cyB4ODYtNjQuICpDaGVja3MgbGliL0tjb25maWcua21zYW4qLiBZZXMsIEtNU0FOIHJlcXVpcmVzIHg4Ni02NC4gQ2FzZSBjbG9zZWQuIFRoZSBwYXRjaCBpcyBuZWNlc3NhcnksIGFuZCBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgdG8gdmFsaWRhdGluZyB0aGlzIDMyLWJpdCB4ODYgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtNU0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcua21zYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcua21zYW49NT1jb25maWcgSEFWRV9LTVNBTl9DT01QSUxFUlxuLS1cbmxpYi9LY29uZmlnLmttc2FuLTctXG5saWIvS2NvbmZpZy5rbXNhbjo4OmNvbmZpZyBLTVNBTlxubGliL0tjb25maWcua21zYW4tOS1cdGJvb2wgXCYjMzQ7S01TQU46IGRldGVjdG9yIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHVzZVwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmttc2FuPTI2PWlmIEtNU0FOXG5saWIvS2NvbmZpZy5rbXNhbi0yNy1cbmxpYi9LY29uZmlnLmttc2FuOjI4OmNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcbmxpYi9LY29uZmlnLmttc2FuLTI5LVx0Ym9vbCBcJiMzNDtDaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uc1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmttc2FuLTQxLVxubGliL0tjb25maWcua21zYW46NDI6Y29uZmlnIEtNU0FOX0tVTklUX1RFU1RcbmxpYi9LY29uZmlnLmttc2FuLTQzLVx0dHJpc3RhdGUgXCYjMzQ7S01TQU4gaW50ZWdyYXRpb24gdGVzdCBzdWl0ZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipLTVNBTiBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBLTVNBTiBpcyBwcm9wZXJseSBjb25maWd1cmVkIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBhbGwgdGhpbmdzIHg4Ni1zcGVjaWZpYy4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgS01TQU4gb3B0aW9ucyBkZWZpbmVkIGFuZCBob3BlZnVsbHkgZW5hYmxlZCAob3IgYXQgbGVhc3QgcmVhZGlseSBhdmFpbGFibGUpIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS4gVGhpcyBjaGVjayBpcyBjcnVjaWFsOyBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQgY29uZmlybWluZyB0aGlzIGZvdW5kYXRpb24gaXMgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0FSQ0hfS01TQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTk4LVx0c2VsZWN0IEhBVkVfQVJDSF9LRkVOQ0VcbmFyY2gveDg2L0tjb25maWc6MTk5Olx0c2VsZWN0IEhBVkVfQVJDSF9LTVNBTlx0XHRcdGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZy0yMDAtXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEluYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgd2UmIzM5O3ZlIGdvdCBhIGBzZWxlY3QgSEFWRV9BUkNIX0tNU0FOIGlmIFg4Nl82NGAgY29uZGl0aW9uLiBSaWdodCBhd2F5LCB0aGF0JiMzOTtzIGEgcmVkIGZsYWcuIEtNU0FOIGlzIGRlZmluaXRlbHkgKm5vdCogc3VwcG9ydGVkIG9uIDMyLWJpdCB4ODYuIFRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyBvbmx5IGV2ZXIgY29tcGlsZWQgZm9yIDMyLWJpdCB4ODYgYXJjaGl0ZWN0dXJlcy4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQuCgpTaW5jZSBgYnBmX2ppdF9jb21wMzIuY2Agb25seSBleGlzdHMgaW4gMzItYml0IGJ1aWxkcyBhbmQgS01TQU4gaXMgZXhjbHVzaXZlIHRvIDY0LWJpdCwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yICp0aGlzKiBwYXRjaCBkb2VzbiYjMzk7dCBtYWtlIGFueSBzZW5zZS4gVGhlIG1vZGlmaWVkIGNvZGUgc2ltcGx5IHdvbiYjMzk7dCBiZSBwYXJ0IG9mIGEgS01TQU4tZW5hYmxlZCBidWlsZC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLCBpbiBjYXNlIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmaWxlcyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiAqU2lnaCogT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIGJ1bmNoIG9mIHNlbGZ0ZXN0IGZpbGVzOiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jYC4gQWxsIHNlbGZ0ZXN0cy4gTm8gcmVhbCBrZXJuZWwgY29kZSBtb2RpZmljYXRpb24gYXBhcnQgZnJvbSB0aGUgYGJwZl9qaXRfY29tcDMyLmNgIGZpbGUgSSBtZW50aW9uZWQgZWFybGllci4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCwgd2hpY2ggYWRkcmVzc2VzIHNpZ24vemVyby1leHRlbnNpb24gaXNzdWVzIGluIHRoZSAzMi1iaXQgQlBGIEpJVCBjb21waWxlciwgd2lsbCBub3QgYmUgcmVsZXZhbnQgaW4gYSBLTVNBTiBjb250ZXh0LiBUaGUgbmF0dXJlIG9mIHRoZSAzMi1iaXQgQlBGIEpJVCBjb2RlIG1lYW5zIGl0IHNpbXBseSBkb2VzbiYjMzk7dCBpbnRlcmFjdCB3aXRoIEtNU0FOIGJ1aWxkcy4gQSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGFwcGxpY2FibGUgaGVyZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBJIHNob3VsZCBwcm9iYWJseSBxdWlja2x5IHZlcmlmeSB0aGF0IGBicGZfaml0X2NvbXAzMi5jYCBpcyBpbmRlZWQgMzItYml0IG9ubHkgYXMgYSBzYW5pdHkgY2hlY2suIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXAzMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvTWFrZWZpbGU9Nj1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGU6NzogICAgICAgIG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wMzIub1xuYXJjaC94ODYvbmV0L01ha2VmaWxlLTgtZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDkxCgkJCQkJCQlvdXRwdXQ6IDE3NgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBDb250ZXh0KioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIHJpZ2h0IHRoZXJlLiBUaGUgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQgaXMgKmRlZmluaXRlbHkqIG9ubHkgY29tcGlsZWQgdW5kZXIgdGhlIGBDT05GSUdfWDg2XzMyYCBmbGFnLiBUaGF0JiMzOTtzIHRoZSBrZXkgcmVzdHJpY3Rpb24uIE5vIG5lZWQgdG8gbG9vayBhbnkgZnVydGhlciBhdCB0aGUgZ2VuZXJhbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIG9yIHRoZSBsYXJnZXIgcHJvamVjdCBzdHJ1Y3R1cmUsIGl0IGlzIG9ubHkgcmVsYXRlZCB0byB0aGUgMzIgYml0IGFyY2hpdGVjdHVyZS4gTm93IHRoYXQgSSBoYXZlIGlzb2xhdGVkIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgaXQgaXMgdGltZSB0byBzZXQgdGhlIG91dGNvbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciAzMi1iaXQgeDg2IChgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgKSB0byBwcm9wZXJseSBzaWduLWV4dGVuZCBvciB6ZXJvLWV4dGVuZCByZXR1cm4gdmFsdWVzIGZyb20ga2Z1bmNzLiBXaGlsZSB0aGlzIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgb3IgbGVmdG92ZXIgcmVnaXN0ZXIgc3RhdGUgY291bGQgYmUgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIEtNU0FOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIChlLmcuLCBgWDg2XzY0YCkuIFRoZSBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBzdHJpY3RseSBmb3IgMzItYml0IHg4NiAoYENPTkZJR19YODZfMzJgKSBhbmQgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgaW4gYSBLTVNBTiBidWlsZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgMzItYml0IHg4NiAoYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCkgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgb3IgemVyby1leHRlbmQgcmV0dXJuIHZhbHVlcyBmcm9tIGtmdW5jcy4gV2hpbGUgdGhpcyBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB1bmluaXRpYWxpemVkIG9yIGxlZnRvdmVyIHJlZ2lzdGVyIHN0YXRlIGNvdWxkIGJlIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBLTVNBTiBpcyBvbmx5IHN1cHBvcnRlZCBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyAoZS5nLiwgYFg4Nl82NGApLiBUaGUgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgc3RyaWN0bHkgZm9yIDMyLWJpdCB4ODYgKGBDT05GSUdfWDg2XzMyYCkgYW5kIHdpbGwgbm90IGJlIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIGluIGEgS01TQU4gYnVpbGQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNDo1Ny44Mjg2NzI4MDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjU5NDcyOTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciAzMi1iaXQgeDg2IChgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgKSB0byBwcm9wZXJseSBzaWduLWV4dGVuZCBvciB6ZXJvLWV4dGVuZCByZXR1cm4gdmFsdWVzIGZyb20ga2Z1bmNzLiBXaGlsZSB0aGlzIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgb3IgbGVmdG92ZXIgcmVnaXN0ZXIgc3RhdGUgY291bGQgYmUgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMsIEtNU0FOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIChlLmcuLCBgWDg2XzY0YCkuIFRoZSBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBzdHJpY3RseSBmb3IgMzItYml0IHg4NiAoYENPTkZJR19YODZfMzJgKSBhbmQgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgaW4gYSBLTVNBTiBidWlsZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNDo1Ny44Mjg2NzkwNTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDYzNTUzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZjdkNzc4MjY0MmM2YjZlZWE0NzNjMTM0NjFiYTdlNzJiODFkNjdhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDEzOjA0OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG5pbmRleCA4NTJiYWYyZTRkYjRkLi4wMTdjYzllN2U0ZTJiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcXG5AQCAtMTYyMCwxMyArMTYyMCwyNSBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsXFxuIFxcdFxcdC8qIGFkZCBlc3AsXFxcImJ5dGVzX2luX3N0YWNrXFxcIiAqL1xcbiBcXHRcXHRlbmRfYWRkciAtPSAzO1xcbiBcXG4tXFx0LyogbW92IGR3b3JkIHB0ciBbZWJwK29mZl0sZWR4ICovXFxuLVxcdGlmIChmbS1cXHUwMDNlcmV0X3NpemUgXFx1MDAzZSBzaXplb2YodTMyKSlcXG4tXFx0XFx0ZW5kX2FkZHIgLT0gMztcXG4tXFxuLVxcdC8qIG1vdiBkd29yZCBwdHIgW2VicCtvZmZdLGVheCAqL1xcbi1cXHRpZiAoZm0tXFx1MDAzZXJldF9zaXplKVxcbitcXHRzd2l0Y2ggKGZtLVxcdTAwM2VyZXRfc2l6ZSkge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIHNpemVvZih1OCk6XFxuK1xcdGNhc2Ugc2l6ZW9mKHUxNik6XFxuK1xcdFxcdC8qIG1vdltzfHpdeCBlYXgsW2FdeCAqL1xcbiBcXHRcXHRlbmRfYWRkciAtPSAzO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBzaXplb2YodTMyKTpcXG4rXFx0XFx0LyogY2RxIG9yIHhvciBlZHgsZWR4ICovXFxuK1xcdFxcdGVuZF9hZGRyIC09IGZtLVxcdTAwM2VyZXRfZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAxIDogMjtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2Ugc2l6ZW9mKHU2NCk6XFxuK1xcdFxcdC8qIFN0b3JlIEVEWDpFQVggaW4gUjAuICovXFxuK1xcdFxcdGVuZF9hZGRyIC09IDY7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4gXFx0am1wX29mZnNldCA9ICh1OCAqKV9fYnBmX2NhbGxfYmFzZSArIGluc24tXFx1MDAzZWltbSAtIGVuZF9hZGRyO1xcbiBcXHRpZiAoIWlzX3NpbW0zMihqbXBfb2Zmc2V0KSkge1xcbkBAIC0xNjM3LDE1ICsxNjQ5LDM4IEBAIHN0YXRpYyBpbnQgZW1pdF9rZnVuY19jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIHU4ICplbmRfYWRkcixcXG4gXFxuIFxcdEVNSVQxX29mZjMyKDB4RTgsIGptcF9vZmZzZXQpO1xcbiBcXG4tXFx0aWYgKGZtLVxcdTAwM2VyZXRfc2l6ZSlcXG4rXFx0c3dpdGNoIChmbS1cXHUwMDNlcmV0X3NpemUpIHtcXG4rXFx0Y2FzZSBzaXplb2YodTgpOlxcbitcXHRcXHQvKiBtb3Zbc3x6XXggZWF4LGFsICovXFxuK1xcdFxcdEVNSVQzKDB4MEYsIGZtLVxcdTAwM2VyZXRfZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAweEJFIDogMHhCNixcXG4rXFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIHNpemVvZih1MTYpOlxcbitcXHRcXHQvKiBtb3Zbc3x6XXggZWF4LGF4ICovXFxuK1xcdFxcdEVNSVQzKDB4MEYsIGZtLVxcdTAwM2VyZXRfZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAweEJGIDogMHhCNyxcXG4rXFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZtLVxcdTAwM2VyZXRfc2l6ZSBcXHUwMDI2XFx1MDAyNiBmbS1cXHUwMDNlcmV0X3NpemUgXFx1MDAzYz0gc2l6ZW9mKHUzMikpIHtcXG4rXFx0XFx0aWYgKGZtLVxcdTAwM2VyZXRfZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcpXFxuK1xcdFxcdFxcdC8qIGNkcSAqL1xcbitcXHRcXHRcXHRFTUlUMSgweDk5KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHQvKiB4b3IgZWR4LGVkeCAqL1xcbitcXHRcXHRcXHRFTUlUMigweDMxLCBhZGRfMnJlZygweEMwLCBJQTMyX0VEWCwgSUEzMl9FRFgpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZtLVxcdTAwM2VyZXRfc2l6ZSkge1xcbiBcXHRcXHQvKiBtb3YgZHdvcmQgcHRyIFtlYnArb2ZmXSxlYXggKi9cXG4gXFx0XFx0RU1JVDMoMHg4OSwgYWRkXzJyZWcoMHg0MCwgSUEzMl9FQlAsIElBMzJfRUFYKSxcXG4gXFx0XFx0ICAgICAgU1RBQ0tfVkFSKGJwZjJpYTMyW0JQRl9SRUdfMF1bMF0pKTtcXG4tXFxuLVxcdGlmIChmbS1cXHUwMDNlcmV0X3NpemUgXFx1MDAzZSBzaXplb2YodTMyKSlcXG4gXFx0XFx0LyogbW92IGR3b3JkIHB0ciBbZWJwK29mZl0sZWR4ICovXFxuIFxcdFxcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VEWCksXFxuIFxcdFxcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzFdKSk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChieXRlc19pbl9zdGFjaylcXG4gXFx0XFx0LyogYWRkIGVzcCxcXFwiYnl0ZXNfaW5fc3RhY2tcXFwiICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuaW5kZXggODExM2ZlYTdiYTg2Yy4uNDYzOGUwYTQ1ZGI2ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbkBAIC0xMjcsNiArMTI3LDcgQEBcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX3NldF9yZXR2YWwuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfbHNtLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidmVyaWZpZXJfa2Z1bmNfcmV0dXJuLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlycS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX3pleHQuc2tlbC5oXFxcIlxcbkBAIC0yODksNiArMjkwLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2xzbSh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2xzbSk7IH1cXG4gdm9pZCB0ZXN0X2lycSh2b2lkKVxcdFxcdFxcdCAgICAgIHsgUlVOKGlycSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX210dSh2b2lkKVxcdFxcdCAgICAgIHsgUlVOKHZlcmlmaWVyX210dSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2ppdF9pbmxpbmUodm9pZCkgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9qaXRfaW5saW5lKTsgfVxcbit2b2lkIHRlc3RfdmVyaWZpZXJfa2Z1bmNfcmV0dXJuKHZvaWQpICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2tmdW5jX3JldHVybik7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX3pleHQodm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOX1RFU1RTKHZlcmlmaWVyX3pleHQpOyB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuaW5kZXggNWVhY2YxYjQzMjUyMS4uMTQ5OGRhMDQ1OTdhZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuQEAgLTE1NSw2ICsxNTUsNyBAQFxcbiAjZGVmaW5lIF9fYnRmX2Z1bmNfcGF0aChwYXRoKVxcdF9fdGVzdF90YWcoXFxcInRlc3RfYnRmX2Z1bmNfcGF0aD1cXFwiIHBhdGgpXFxuICNkZWZpbmUgX19hcmNoKGFyY2gpXFx0XFx0X190ZXN0X3RhZyhcXFwidGVzdF9hcmNoPVxcXCIgYXJjaClcXG4gI2RlZmluZSBfX2FyY2hfeDg2XzY0XFx0XFx0X19hcmNoKFxcXCJYODZfNjRcXFwiKVxcbisjZGVmaW5lIF9fYXJjaF94ODZfMzJcXHRcXHRfX2FyY2goXFxcIlg4Nl8zMlxcXCIpXFxuICNkZWZpbmUgX19hcmNoX2FybTY0XFx0XFx0X19hcmNoKFxcXCJBUk02NFxcXCIpXFxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcXHRcXHRfX2FyY2goXFxcIlJJU0NWNjRcXFwiKVxcbiAjZGVmaW5lIF9fYXJjaF9zMzkweFxcdFxcdF9fYXJjaChcXFwiczM5MHhcXFwiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUyYTk0ZGFmMDM5MjJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jXFxuQEAgLTAsMCArMSw4NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbitcXG4rZXh0ZXJuIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pIF9fa3N5bTtcXG4rZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rXFx0X190eXBlKGtleSwgX191MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG4rfSBrZnVuY19yZXR1cm5fbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyIHN0cmluZ19hW10gPSBcXFwiYVxcXCI7XFxuK3N0YXRpYyBjb25zdCBjaGFyIHN0cmluZ19iW10gPSBcXFwiYlxcXCI7XFxuK1xcbit2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHIgPSB7fTtcXG4rXFxuK1xcdGJwZl9zdHJjbXAoc3RyaW5nX2EsIHN0cmluZ19iKTtcXG4rXFx0YnBmX2R5bnB0cl9pc19udWxsKFxcdTAwMjZwdHIpO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKVxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4rX19hcmNoX3g4Nl8zMlxcbitfX25ha2VkIHZvaWQga2Z1bmNfYm9vbF9yZXR1cm5femVyb19leHRlbmRlZCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Kih1MzIgKikocjEwIC0gNCkgPSByMDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9ICVba2Z1bmNfcmV0dXJuX21hcF0gbGw7XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSA4O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjMgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjQgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNCArPSAtMjQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2R5bnB0cl9mcm9tX21lbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCAhPSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9IDB4MTAwMDAwMDAwIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSArPSAtMjQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsIGJwZl9keW5wdHJfaXNfbnVsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwIFxcdTAwM2VcXHUwMDNlPSAzMjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMjtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tX2FkZHIoa2Z1bmNfcmV0dXJuX21hcCksXFxuK1xcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXFxuK1xcdCAgX19pbW0oYnBmX2R5bnB0cl9mcm9tX21lbSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19mbGFnKEJQRl9GX1NMRUVQQUJMRSlcXG4rX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxcbitfX2FyY2hfeDg2XzMyXFxuK19fbmFrZWQgdm9pZCBrZnVuY19pbnRfcmV0dXJuX3NpZ25fZXh0ZW5kZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gJVtzdHJpbmdfYV0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9ICVbc3RyaW5nX2JdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCBicGZfc3RyY21wO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgXFx1MDAzZVxcdTAwM2U9IDMyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW1fYWRkcihzdHJpbmdfYSksXFxuK1xcdCAgX19pbW1fYWRkcihzdHJpbmdfYilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5pbmRleCAwNzgwNzc1N2I1MThkLi44YTlmNGEzMWExYmIxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcXG5AQCAtMzc0LDE2ICszNzQsMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKipjb2xsZWN0X2RlY2xfdGFncyhzdHJ1Y3QgYnRmICpidGYsIGludCBpZCwgaW50ICpjbnQpXFxuIGVudW0gYXJjaCB7XFxuIFxcdEFSQ0hfVU5LTk9XTlxcdD0gMHgxLFxcbiBcXHRBUkNIX1g4Nl82NFxcdD0gMHgyLFxcbi1cXHRBUkNIX0FSTTY0XFx0PSAweDQsXFxuLVxcdEFSQ0hfUklTQ1Y2NFxcdD0gMHg4LFxcbi1cXHRBUkNIX1MzOTBYXFx0PSAweDEwLFxcbi1cXHRBUkNIX0xPT05HQVJDSFxcdD0gMHgyMCxcXG4rXFx0QVJDSF9YODZfMzJcXHQ9IDB4NCxcXG4rXFx0QVJDSF9BUk02NFxcdD0gMHg4LFxcbitcXHRBUkNIX1JJU0NWNjRcXHQ9IDB4MTAsXFxuK1xcdEFSQ0hfUzM5MFhcXHQ9IDB4MjAsXFxuK1xcdEFSQ0hfTE9PTkdBUkNIXFx0PSAweDQwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXFxuIHtcXG4gI2lmIGRlZmluZWQoX194ODZfNjRfXylcXG4gXFx0cmV0dXJuIEFSQ0hfWDg2XzY0O1xcbisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKVxcbitcXHRyZXR1cm4gQVJDSF9YODZfMzI7XFxuICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pXFxuIFxcdHJldHVybiBBUkNIX0FSTTY0O1xcbiAjZWxpZiBkZWZpbmVkKF9fcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NFxcbkBAIC01NzcsNiArNTgwLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXFxuIFxcdFxcdH0gZWxzZSBpZiAoKHZhbCA9IHN0cl9oYXNfcGZ4KHMsIFxcXCJ0ZXN0X2FyY2g9XFxcIikpKSB7XFxuIFxcdFxcdFxcdGlmIChzdHJjbXAodmFsLCBcXFwiWDg2XzY0XFxcIikgPT0gMCkge1xcbiBcXHRcXHRcXHRcXHRhcmNoID0gQVJDSF9YODZfNjQ7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXFxcIlg4Nl8zMlxcXCIpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfWDg2XzMyO1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFxcXCJBUk02NFxcXCIpID09IDApIHtcXG4gXFx0XFx0XFx0XFx0YXJjaCA9IEFSQ0hfQVJNNjQ7XFxuIFxcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXFxcIlJJU0NWNjRcXFwiKSA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA0OjU5LjEzNTgxODYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjMzNzg1NjMwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZjdkNzc4MjY0MmM2YjZlZWE0NzNjMTM0NjFiYTdlNzJiODFkNjdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MDQ6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jXG5pbmRleCA4NTJiYWYyZTRkYjRkLi4wMTdjYzllN2U0ZTJiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jXG5AQCAtMTYyMCwxMyArMTYyMCwyNSBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsXG4gXHRcdC8qIGFkZCBlc3AsXCJieXRlc19pbl9zdGFja1wiICovXG4gXHRcdGVuZF9hZGRyIC09IDM7XG4gXG4tXHQvKiBtb3YgZHdvcmQgcHRyIFtlYnArb2ZmXSxlZHggKi9cbi1cdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSBcdTAwM2Ugc2l6ZW9mKHUzMikpXG4tXHRcdGVuZF9hZGRyIC09IDM7XG4tXG4tXHQvKiBtb3YgZHdvcmQgcHRyIFtlYnArb2ZmXSxlYXggKi9cbi1cdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSlcbitcdHN3aXRjaCAoZm0tXHUwMDNlcmV0X3NpemUpIHtcbitcdGNhc2UgMDpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIHNpemVvZih1OCk6XG4rXHRjYXNlIHNpemVvZih1MTYpOlxuK1x0XHQvKiBtb3Zbc3x6XXggZWF4LFthXXggKi9cbiBcdFx0ZW5kX2FkZHIgLT0gMztcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIHNpemVvZih1MzIpOlxuK1x0XHQvKiBjZHEgb3IgeG9yIGVkeCxlZHggKi9cbitcdFx0ZW5kX2FkZHIgLT0gZm0tXHUwMDNlcmV0X2ZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAxIDogMjtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIHNpemVvZih1NjQpOlxuK1x0XHQvKiBTdG9yZSBFRFg6RUFYIGluIFIwLiAqL1xuK1x0XHRlbmRfYWRkciAtPSA2O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuIFx0am1wX29mZnNldCA9ICh1OCAqKV9fYnBmX2NhbGxfYmFzZSArIGluc24tXHUwMDNlaW1tIC0gZW5kX2FkZHI7XG4gXHRpZiAoIWlzX3NpbW0zMihqbXBfb2Zmc2V0KSkge1xuQEAgLTE2MzcsMTUgKzE2NDksMzggQEAgc3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLFxuIFxuIFx0RU1JVDFfb2ZmMzIoMHhFOCwgam1wX29mZnNldCk7XG4gXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUpXG4rXHRzd2l0Y2ggKGZtLVx1MDAzZXJldF9zaXplKSB7XG4rXHRjYXNlIHNpemVvZih1OCk6XG4rXHRcdC8qIG1vdltzfHpdeCBlYXgsYWwgKi9cbitcdFx0RU1JVDMoMHgwRiwgZm0tXHUwMDNlcmV0X2ZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcgPyAweEJFIDogMHhCNixcbitcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgSUEzMl9FQVgsIElBMzJfRUFYKSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBzaXplb2YodTE2KTpcbitcdFx0LyogbW92W3N8el14IGVheCxheCAqL1xuK1x0XHRFTUlUMygweDBGLCBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDB4QkYgOiAweEI3LFxuK1x0XHQgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSBcdTAwMjZcdTAwMjYgZm0tXHUwMDNlcmV0X3NpemUgXHUwMDNjPSBzaXplb2YodTMyKSkge1xuK1x0XHRpZiAoZm0tXHUwMDNlcmV0X2ZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX1NJR05FRF9BUkcpXG4rXHRcdFx0LyogY2RxICovXG4rXHRcdFx0RU1JVDEoMHg5OSk7XG4rXHRcdGVsc2VcbitcdFx0XHQvKiB4b3IgZWR4LGVkeCAqL1xuK1x0XHRcdEVNSVQyKDB4MzEsIGFkZF8ycmVnKDB4QzAsIElBMzJfRURYLCBJQTMyX0VEWCkpO1xuK1x0fVxuK1xuK1x0aWYgKGZtLVx1MDAzZXJldF9zaXplKSB7XG4gXHRcdC8qIG1vdiBkd29yZCBwdHIgW2VicCtvZmZdLGVheCAqL1xuIFx0XHRFTUlUMygweDg5LCBhZGRfMnJlZygweDQwLCBJQTMyX0VCUCwgSUEzMl9FQVgpLFxuIFx0XHQgICAgICBTVEFDS19WQVIoYnBmMmlhMzJbQlBGX1JFR18wXVswXSkpO1xuLVxuLVx0aWYgKGZtLVx1MDAzZXJldF9zaXplIFx1MDAzZSBzaXplb2YodTMyKSlcbiBcdFx0LyogbW92IGR3b3JkIHB0ciBbZWJwK29mZl0sZWR4ICovXG4gXHRcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VEWCksXG4gXHRcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzFdKSk7XG4rXHR9XG4gXG4gXHRpZiAoYnl0ZXNfaW5fc3RhY2spXG4gXHRcdC8qIGFkZCBlc3AsXCJieXRlc19pbl9zdGFja1wiICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IDgxMTNmZWE3YmE4NmMuLjQ2MzhlMGE0NWRiNmUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtMTI3LDYgKzEyNyw3IEBAXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9zZXRfcmV0dmFsLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9sc20uc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2ppdF9pbmxpbmUuc2tlbC5oXCJcbisjaW5jbHVkZSBcInZlcmlmaWVyX2tmdW5jX3JldHVybi5za2VsLmhcIlxuICNpbmNsdWRlIFwiaXJxLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9jdHhfcHRyX3BhcmFtLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl96ZXh0LnNrZWwuaFwiXG5AQCAtMjg5LDYgKzI5MCw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9sc20odm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9sc20pOyB9XG4gdm9pZCB0ZXN0X2lycSh2b2lkKVx0XHRcdCAgICAgIHsgUlVOKGlycSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbXR1KHZvaWQpXHRcdCAgICAgIHsgUlVOKHZlcmlmaWVyX210dSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfaml0X2lubGluZSh2b2lkKSAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2ppdF9pbmxpbmUpOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX2tmdW5jX3JldHVybih2b2lkKSAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9rZnVuY19yZXR1cm4pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2N0eF9wdHJfcGFyYW0odm9pZCkgICAgICAgeyBSVU4odmVyaWZpZXJfY3R4X3B0cl9wYXJhbSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfemV4dCh2b2lkKSAgICAgICAgICAgICAgICAgeyBSVU5fVEVTVFModmVyaWZpZXJfemV4dCk7IH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCA1ZWFjZjFiNDMyNTIxLi4xNDk4ZGEwNDU5N2FmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5AQCAtMTU1LDYgKzE1NSw3IEBAXG4gI2RlZmluZSBfX2J0Zl9mdW5jX3BhdGgocGF0aClcdF9fdGVzdF90YWcoXCJ0ZXN0X2J0Zl9mdW5jX3BhdGg9XCIgcGF0aClcbiAjZGVmaW5lIF9fYXJjaChhcmNoKVx0XHRfX3Rlc3RfdGFnKFwidGVzdF9hcmNoPVwiIGFyY2gpXG4gI2RlZmluZSBfX2FyY2hfeDg2XzY0XHRcdF9fYXJjaChcIlg4Nl82NFwiKVxuKyNkZWZpbmUgX19hcmNoX3g4Nl8zMlx0XHRfX2FyY2goXCJYODZfMzJcIilcbiAjZGVmaW5lIF9fYXJjaF9hcm02NFx0XHRfX2FyY2goXCJBUk02NFwiKVxuICNkZWZpbmUgX19hcmNoX3Jpc2N2NjRcdFx0X19hcmNoKFwiUklTQ1Y2NFwiKVxuICNkZWZpbmUgX19hcmNoX3MzOTB4XHRcdF9fYXJjaChcInMzOTB4XCIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTJhOTRkYWYwMzkyMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jXG5AQCAtMCwwICsxLDg0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2V4dGVybiBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKSBfX2tzeW07XG4rZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuK30ga2Z1bmNfcmV0dXJuX21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYVtdID0gXCJhXCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgc3RyaW5nX2JbXSA9IFwiYlwiO1xuK1xuK3ZvaWQgX19rZnVuY19idGZfcm9vdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0ciA9IHt9O1xuK1xuK1x0YnBmX3N0cmNtcChzdHJpbmdfYSwgc3RyaW5nX2IpO1xuK1x0YnBmX2R5bnB0cl9pc19udWxsKFx1MDAyNnB0cik7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2ZsYWcoQlBGX0ZfU0xFRVBBQkxFKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fYXJjaF94ODZfMzJcbitfX25ha2VkIHZvaWQga2Z1bmNfYm9vbF9yZXR1cm5femVyb19leHRlbmRlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Kih1MzIgKikocjEwIC0gNCkgPSByMDtcdFx0XHRcdFxcXG4rXHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIyICs9IC00O1x0XHRcdFx0XHRcXFxuK1x0cjEgPSAlW2tmdW5jX3JldHVybl9tYXBdIGxsO1x0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMSA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0cjIgPSA4O1x0XHRcdFx0XHRcdFxcXG4rXHRyMyA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHI0ID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjQgKz0gLTI0O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9keW5wdHJfZnJvbV9tZW1dO1x0XHRcdFxcXG4rXHRpZiByMCAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcXFxuK1x0cjAgPSAweDEwMDAwMDAwMCBsbDtcdFx0XHRcdFxcXG4rXHRyMSA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIxICs9IC0yNDtcdFx0XHRcdFx0XFxcbitcdGNhbGwgYnBmX2R5bnB0cl9pc19udWxsO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rMTpcdHIwID0gMjtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIoa2Z1bmNfcmV0dXJuX21hcCksXG4rXHQgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxuK1x0ICBfX2ltbShicGZfZHlucHRyX2Zyb21fbWVtKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fZmxhZyhCUEZfRl9TTEVFUEFCTEUpXG4rX19zdWNjZXNzIF9fcmV0dmFsKC0xKVxuK19fYXJjaF94ODZfMzJcbitfX25ha2VkIHZvaWQga2Z1bmNfaW50X3JldHVybl9zaWduX2V4dGVuZGVkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRyMSA9ICVbc3RyaW5nX2FdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gJVtzdHJpbmdfYl0gbGw7XHRcdFx0XHRcXFxuK1x0Y2FsbCBicGZfc3RyY21wO1x0XHRcdFx0XFxcbitcdHIwIFx1MDAzZVx1MDAzZT0gMzI7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihzdHJpbmdfYSksXG4rXHQgIF9faW1tX2FkZHIoc3RyaW5nX2IpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuaW5kZXggMDc4MDc3NTdiNTE4ZC4uOGE5ZjRhMzFhMWJiMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY1xuQEAgLTM3NCwxNiArMzc0LDE5IEBAIHN0YXRpYyBjb25zdCBjaGFyICoqY29sbGVjdF9kZWNsX3RhZ3Moc3RydWN0IGJ0ZiAqYnRmLCBpbnQgaWQsIGludCAqY250KVxuIGVudW0gYXJjaCB7XG4gXHRBUkNIX1VOS05PV05cdD0gMHgxLFxuIFx0QVJDSF9YODZfNjRcdD0gMHgyLFxuLVx0QVJDSF9BUk02NFx0PSAweDQsXG4tXHRBUkNIX1JJU0NWNjRcdD0gMHg4LFxuLVx0QVJDSF9TMzkwWFx0PSAweDEwLFxuLVx0QVJDSF9MT09OR0FSQ0hcdD0gMHgyMCxcbitcdEFSQ0hfWDg2XzMyXHQ9IDB4NCxcbitcdEFSQ0hfQVJNNjRcdD0gMHg4LFxuK1x0QVJDSF9SSVNDVjY0XHQ9IDB4MTAsXG4rXHRBUkNIX1MzOTBYXHQ9IDB4MjAsXG4rXHRBUkNIX0xPT05HQVJDSFx0PSAweDQwLFxuIH07XG4gXG4gc3RhdGljIGludCBnZXRfY3VycmVudF9hcmNoKHZvaWQpXG4ge1xuICNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4gXHRyZXR1cm4gQVJDSF9YODZfNjQ7XG4rI2VsaWYgZGVmaW5lZChfX2kzODZfXylcbitcdHJldHVybiBBUkNIX1g4Nl8zMjtcbiAjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIFx0cmV0dXJuIEFSQ0hfQVJNNjQ7XG4gI2VsaWYgZGVmaW5lZChfX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0XG5AQCAtNTc3LDYgKzU4MCw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGVzdF9zcGVjKHN0cnVjdCB0ZXN0X2xvYWRlciAqdGVzdGVyLFxuIFx0XHR9IGVsc2UgaWYgKCh2YWwgPSBzdHJfaGFzX3BmeChzLCBcInRlc3RfYXJjaD1cIikpKSB7XG4gXHRcdFx0aWYgKHN0cmNtcCh2YWwsIFwiWDg2XzY0XCIpID09IDApIHtcbiBcdFx0XHRcdGFyY2ggPSBBUkNIX1g4Nl82NDtcbitcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwiWDg2XzMyXCIpID09IDApIHtcbitcdFx0XHRcdGFyY2ggPSBBUkNIX1g4Nl8zMjtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwiQVJNNjRcIikgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfQVJNNjQ7XG4gXHRcdFx0fSBlbHNlIGlmIChzdHJjbXAodmFsLCBcIlJJU0NWNjRcIikgPT0gMCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDQ6NTkuMTM1ODE5ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkwMzg3NDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSB4ODYgMzItYml0IEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2AgYW5kIGFkZHMgc29tZSB0ZXN0cy4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBzZWVtIGZvY3VzZWQgb24gYGVtaXRfa2Z1bmNfY2FsbGAgaW4gdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlci4gSXQncyBoYW5kbGluZyBob3cgdGhlIEpJVCBjb21waWxlciBkZWFscyB3aXRoIHRoZSByZXR1cm4gc2l6ZXMgb2Yga2Z1bmNzLCB0aGluZ3MgbGlrZSB6ZXJvLCBvbmUsIHR3bywgZm91ciwgb3IgZWlnaHQgYnl0ZXMsIGFuZCB0aGUgc2lnbiBvciB6ZXJvIGV4dGVuc2lvbiBvZiB0aG9zZSByZXR1cm5lZCB2YWx1ZXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgYWN0dWFsbHkgcmVhY2hhYmxlPyBJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBkZWRpY2F0aW5nIGZ1enppbmcgcmVzb3VyY2VzIHRvP1wiIEkga25vdyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgIG9ubHkgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX1g4Nl8zMmAgYW5kIGBDT05GSUdfQlBGX0pJVGAgYXJlIGJvdGggZW5hYmxlZC4gTm93LCB1c3VhbGx5IHN5emthbGxlciBpcyB0YXJnZXRpbmcgeDg2XzY0LCBidXQgSSBrbm93IGl0ICpjYW4qIGZ1enogeDg2XzMyIGFuZCAzMi1iaXQgY29tcGF0IG1vZGUuIFNvIHRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyAzMi1iaXQgY29kZSBwYXRoIGFjdHVhbGx5IHVzZWQgaW4gYSAzMi1iaXQgeDg2IGtlcm5lbD9cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2x1ZXMgYWJvdXQgd2hlbiBhbmQgaG93IHRoaXMgZmlsZSBnZXRzIHB1bGxlZCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHNlZSBpZiBJIHNob3VsZCBjYXJlIGFib3V0IGRlZGljYXRpbmcgZnV6emluZyByZXNvdXJjZXMgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNToxNC4wMzk2OTgwODhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMTEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wMzJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGU9Nj1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjc6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wMzIub1xcbmFyY2gveDg2L25ldC9NYWtlZmlsZS04LWVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MTQuMDg2ODE0NTA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMTgxNDE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBBcmNoaXRlY3R1cmUgYW5kIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQgaXMgZGVmaW5pdGVseSBjb21waWxlZCBmb3IgYENPTkZJR19YODZfMzJgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHN5emthbGxlciBhY3R1YWxseSAqZnV6emVzKiB4ODZfMzIuIEEgcXVpY2sgY2hlY2suLi4geWVwLCB0aGVyZSBhcmUgc3l6LWJvdCBpbnN0YW5jZXMgZGVkaWNhdGVkIHRvIGkzODYuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuXG5cbk5vdywgdGhlIHNwZWNpZmljIHBhdGNoIEknbSBleGFtaW5pbmcgdG91Y2hlcyBgZW1pdF9rZnVuY19jYWxsYCBpbiBgYnBmX2ppdF9jb21wMzIuY2AuIE5hdHVyYWxseSwgbXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB3aGF0IHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQncyBkZWx2ZSBpbnRvIHRoYXQgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAzOCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA1OjE4LjA5ODYzMDk2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ1ODM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbWl0X2tmdW5jX2NhbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTQyMj1zdGF0aWMgdTggZ2V0X2NvbmRfam1wX29wY29kZShjb25zdCB1OCBvcCwgYm9vbCBpc19jbXBfbG8pXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTQyLSAqXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTU0MzogKiBlbWl0X2tmdW5jX2NhbGwoKSBmaW5kcyBvdXQgdGhlIGJ0Zl9mdW5jX21vZGVsIGJ5IGNhbGxpbmdcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTQ0LSAqIGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbCgpLiAgQSBidGZfZnVuY19tb2RlbFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTU2MS0gKiBjdXJyZW50IChCUEZfSk1QIHwgQlBGX0NBTEwpIGJwZi1pbnNuLiAgSXQgaXMgcGFzc2VkIGFzIFxcXCJlbmRfYWRkclxcXCJcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNTYyOiAqIHRvIHRoZSBlbWl0X2tmdW5jX2NhbGwoKS4gIFRodXMsIGl0IGNhbiBsZWFybiB0aGUgXFxcImltbWVkaWF0ZS1mb2xsb3ctY2FsbFxcXCJcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTYzLSAqIGFkZHJlc3MgYnkgZmlndXJpbmcgb3V0IGhvdyBtYW55IGppdC1pbnNuIGlzIGdlbmVyYXRlZCBiZXR3ZWVuXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNTY4LSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjE1Njk6c3RhdGljIGludCBlbWl0X2tmdW5jX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgdTggKmVuZF9hZGRyLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTE1NzAtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqKnBwcm9nKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTY5ND1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yMTMxLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjIxMzI6XFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9rZnVuY19jYWxsKGJwZl9wcm9nLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTIxMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW1hZ2UgKyBhZGRyc1tpXSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MTguMTQ0MDkyNTg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMzODQyODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIEtmdW5jIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhpcyBpcyB0cmlnZ2VyZWQgYnkgYGRvX2ppdGAsIHNwZWNpZmljYWxseSBmb3IgQlBGIGtmdW5jIGNhbGxzLiBJIGtub3cgdGhpcyBjb2RlLCB0aGlzIGlzIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgbG9naWMsIHRoZSBCUEYgSklUIGZvciB4ODZfMzIgaW4gdGhpcyBjYXNlLiBUaGUgY2hhbmdlcyB0aGV5J3ZlIG1hZGUgYWN0dWFsbHkgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LCBkZWFsaW5nIHdpdGggaG93IHdlIGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIHdoaWNoIGFyZSBub3cgb2YgdmFyaWVkIHNpemVzIGFuZCBzaWducywgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gU28sIGFic29sdXRlbHksIHdlIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gdHJ1ZS4gVGhpcyBpcyBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIGFib3V0IGBlbWl0X2tmdW5jX2NhbGxgLiBJdCdzIHN0YXRpYywgc28gaXQgKmNvdWxkKiBiZSBpbmxpbmVkLiBCdXQgd2FpdCBhIG1vbWVudC4uLiB0aGF0J3Mgd2hhdCB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQsIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IHdvdWxkIG1ha2UgaXQgbGVzcyB1c2VmdWwuIFNvLCB3aGVyZSdzIHRoZSBKSVQgZW50cnkgcG9pbnQ/IEFoLCBoZXJlIHdlIGdvLCBsb29raW5nIGF0IGBicGZfaW50X2ppdF9jb21waWxlYCwgd2hpY2ggc291bmRzIHJpZ2h0LiBMZXQncyBkaWcgaW50byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gVGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBhY3Rpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MjUuNDgyNTI0MTkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODQwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MjU1MT1ib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjU1NS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoyNTU2OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmMtMjU1Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA1OjI1LjUyNzM2NzgzMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjk0MDc1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEpJVCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBKSVQgY29kZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQsIHRoZSBtYWluIGZ1bmN0aW9uLiBCdXQgd2FpdCwgaXQncyBwcmV0dHkgZ2VuZXJpYy4gSXQncyB0aGUgKmdlbmVyaWMqIEpJVCBlbnRyeSBwb2ludCwgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIgZm9yIGEgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBjaGFuZ2VzLlxuXG5gZG9faml0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IG9mIGEgZGVhZCBlbmQgcmlnaHQgb2ZmIHRoZSBiYXQuIExldCdzIHN0YXJ0IGJ5IHVzaW5nIGBicGZfaW50X2ppdF9jb21waWxlYCBhcyBteSBtYWluIHBvaW50IG9mIGludGVyZXN0LiBJdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBsYWNlLlxuXG5XYWl0LCBpdCBpcyBwcmV0dHkgZ2VuZXJpYywgc28gSSBuZWVkIGEgbW9yZSBkaXJlY3QgbGVhZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZW1pdF9rZnVuY19jYWxsYC4gVGhhdCdzIHN0YXRpYyBhcyB3ZWxsLCBidXQgaXQncyBsYXJnZSBhbmQgc28gbWF5YmUgaXQgaXNuJ3QgaW5saW5lZD8gSXQncyB3b3J0aCBhIGxvb2sgdG8gc2VlIGlmIEkgY2FuIGZpbmQgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlIHRoYXQgd291bGQgYmUgd29ydGggaXQuXG5cbkFscmlnaHQsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSB0aGF0IG1pZ2h0IGJlIGEgYmV0dGVyIGZvY3VzLlxuXG5Ob3BlLCBzZWVtcyBsaWtlIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGV2ZW4gaWYgaXQncyB0aGUgbW9yZSBnZW5lcmljIG9uZS5cblxuTm93LCBmb3IgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGV2YW50IGJ1aWxkIGZsYWdzLiBEZWZpbml0ZWx5IGBDT05GSUdfQlBGX0pJVGAgZm9yIHN1cmUuIEFuZCwgd2hpbGUgSSdtIGF0IGl0LCBgQ09ORklHX1g4Nl8zMmAuIEJ1dCB3YWl0LCB0aGF0J3MgYW4gKmFyY2hpdGVjdHVyZSogY29uZmlnLiBTeXprYWxsZXIgaGFuZGxlcyBhcmNoZXMgc2VwYXJhdGVseSBzbyBpdCdzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gKmxpc3QqIGl0LiBCdXQgaXQgbWlnaHQgYmUgaGVscGZ1bCBmb3IgY29udGV4dCwgc28gSSdsbCBpbmNsdWRlIGl0LiBBbHRob3VnaCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlIGNoZWNrIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA1OjMxLjg5Njc3OTQzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTkyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl8zMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9Mz1jb25maWcgNjRCSVRcXG4tLVxcbmFyY2gveDg2L0tjb25maWctOS1cXG5hcmNoL3g4Ni9LY29uZmlnOjEwOmNvbmZpZyBYODZfMzJcXG5hcmNoL3g4Ni9LY29uZmlnLTExLVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NzQ5PWNvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctNzU3LVxcbmFyY2gveDg2L0tjb25maWc6NzU4OmNvbmZpZyBYODZfMzJfSVJJU1xcbmFyY2gveDg2L0tjb25maWctNzU5LVxcdHRyaXN0YXRlIFxcXCJFdXJvYnJhaWxsZS9JcmlzIHBvd2Vyb2ZmIG1vZHVsZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MzEuOTQyNDgzOTk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjkyNDczOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGxvZ2ljLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGBYODZfMzJgIG9wdGlvbiBpcyBlc3NlbnRpYWxseSBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YCBpZiBgNjRCSVRgIGlzbid0IGVuYWJsZWQuIFRoYXQgbWFrZXMgaXQgcmVkdW5kYW50IHRvIGV4cGxpY2l0bHkgbGlzdCBgWDg2XzMyYCBzZXBhcmF0ZWx5OyB0aGUgZGVwZW5kZW5jeSBoYW5kbGVzIGl0LlxuXG5UaGUgaW50ZXJlc3Rpbmcgb25lcyBhcmUgcmVsYXRlZCB0byBCUEYsIG9idmlvdXNseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX0pJVGAgaXMgaW5jbHVkZWQsIHRoYXQncyBjcnVjaWFsLiBBbmQgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEJQRiBrZnVuY3MsIGBCUEZfU1lTQ0FMTGAgd2lsbCBiZSBhIGRlcGVuZGVuY3ksIHRoYXQgc2VlbXMgbG9naWNhbC5cblxuTGV0J3MgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRseSBsaW5rZWQgY29uZmlndXJhdGlvbnMuIE5vIHVzZSBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLlxuXG5SaWdodCwgdGhlIHRlc3RzIGFyZSB1c2luZyBgYnBmX3N0cmNtcGAgYW5kIGBicGZfZHlucHRyX2lzX251bGxgIGtmdW5jcy4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgYGJwZl9zdHJjbXBgIGlzIGFjdHVhbGx5IGRlZmluZWQgdG8gbWFrZSBjZXJ0YWluIHRoaXMgY29uZmlndXJhdGlvbiBpcyBzdWZmaWNpZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNTozNi40MTE3MzM3OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMDkzNjQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc3RyY21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0zNzMwPXN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2MC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzYxOiAqIGJwZl9zdHJjbXAgLSBDb21wYXJlIHR3byBzdHJpbmdzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2Mi0gKiBAczFfX2lnbjogT25lIHN0cmluZ1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3Mi0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzczOl9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3NC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTQ4PUJURl9JRF9GTEFHUyhmdW5jLCBfX2JwZl90cmFwKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NTAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlY21wKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9MTA9Y2hhciAqaW52YWxpZF9rZXJuX3B0ciA9IChjaGFyICopLTE7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTMxLS8qIFBhc3NpbmcgTlVMTCB0byBzdHJpbmcga2Z1bmNzICh0cmVhdGVkIGFzIGEgdXNlcnNwYWNlIHB0cikgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jOjMyOlNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY21wX251bGwxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChOVUxMLCBcXFwiaGVsbG9cXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6MzM6U0VDKFxcXCJzeXNjYWxsXFxcIikgIF9fcmV0dmFsKFVTRVJfUFRSX0VSUilpbnQgdGVzdF9zdHJjbXBfbnVsbDIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKFxcXCJoZWxsb1xcXCIsIE5VTEwpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYy0zNC1TRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNhc2VjbXBfbnVsbDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZWNtcChOVUxMLCBcXFwiSEVMTE9cXFwiKTsgfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYz01NT1TRUMoXFxcInN5c2NhbGxcXFwiKSAgX19yZXR2YWwoVVNFUl9QVFJfRVJSKWludCB0ZXN0X3N0cm5jYXNlc3RyX251bGwyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cm5jYXNlc3RyKFxcXCJoZWxsb1xcXCIsIE5VTEwsIDEpOyB9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTU3LS8qIFBhc3NpbmcgdXNlcnNwYWNlIHB0ciB0byBzdHJpbmcga2Z1bmNzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo1ODpTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbChVU0VSX1BUUl9FUlIpIGludCB0ZXN0X3N0cmNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKHVzZXJfcHRyLCBcXFwiaGVsbG9cXFwiKTsgfVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6NTk6U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJjbXBfdXNlcl9wdHIyKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChcXFwiaGVsbG9cXFwiLCB1c2VyX3B0cik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTYwLVNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKFVTRVJfUFRSX0VSUikgaW50IHRlc3Rfc3RyY2FzZWNtcF91c2VyX3B0cjEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY2FzZWNtcCh1c2VyX3B0ciwgXFxcIkhFTExPXFxcIik7IH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM9ODE9U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoVVNFUl9QVFJfRVJSKSBpbnQgdGVzdF9zdHJuY2FzZXN0cl91c2VyX3B0cjIodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RybmNhc2VzdHIoXFxcImhlbGxvXFxcIiwgdXNlcl9wdHIsIDEpOyB9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTg1LS8qIFBhc3NpbmcgaW52YWxpZCBrZXJuZWwgcHRyIHRvIHN0cmluZyBrZnVuY3Mgc2hvdWxkIGFsd2F5cyByZXR1cm4gLUVGQVVMVCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUxLmM6ODY6U0VDKFxcXCJzeXNjYWxsXFxcIikgX19yZXR2YWwoLUVGQVVMVCkgaW50IHRlc3Rfc3RyY21wX3BhZ2VmYXVsdDEodm9pZCAqY3R4KSB7IHJldHVybiBicGZfc3RyY21wKGludmFsaWRfa2Vybl9wdHIsIFxcXCJoZWxsb1xcXCIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTEuYzo4NzpTRUMoXFxcInN5c2NhbGxcXFwiKSBfX3JldHZhbCgtRUZBVUxUKSBpbnQgdGVzdF9zdHJjbXBfcGFnZWZhdWx0Mih2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjbXAoXFxcImhlbGxvXFxcIiwgaW52YWxpZF9rZXJuX3B0cik7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMS5jLTg4LVNFQyhcXFwic3lzY2FsbFxcXCIpIF9fcmV0dmFsKC1FRkFVTFQpIGludCB0ZXN0X3N0cmNhc2VjbXBfcGFnZWZhdWx0MSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlY21wKGludmFsaWRfa2Vybl9wdHIsIFxcXCJIRUxMT1xcXCIpOyB9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jPTc9Y2hhciBsb25nX3N0cltYQVRUUl9TSVpFX01BWCArIDFdO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX2ZhaWx1cmUyLmMtOC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19mYWlsdXJlMi5jOjk6U0VDKFxcXCJzeXNjYWxsXFxcIikgaW50IHRlc3Rfc3RyY21wX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChsb25nX3N0ciwgbG9uZ19zdHIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3NfZmFpbHVyZTIuYy0xMC1TRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgdGVzdF9zdHJjYXNlY21wX3Rvb19sb25nKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNhc2VjbXAobG9uZ19zdHIsIGxvbmdfc3RyKTsgfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jPTg9Y2hhciBzdHJbXSA9IFxcXCJoZWxsbyB3b3JsZFxcXCI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyaW5nX2tmdW5jc19zdWNjZXNzLmMtMTItLyogRnVuY3Rpb25hbCB0ZXN0cyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJpbmdfa2Z1bmNzX3N1Y2Nlc3MuYzoxMzpfX3Rlc3QoMCkgaW50IHRlc3Rfc3RyY21wX2VxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChzdHIsIFxcXCJoZWxsbyB3b3JsZFxcXCIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jOjE0Ol9fdGVzdCgxKSBpbnQgdGVzdF9zdHJjbXBfbmVxKHZvaWQgKmN0eCkgeyByZXR1cm4gYnBmX3N0cmNtcChzdHIsIFxcXCJoZWxsb1xcXCIpOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmluZ19rZnVuY3Nfc3VjY2Vzcy5jLTE1LV9fdGVzdCgwKSBpbnQgdGVzdF9zdHJjYXNlY21wX2VxMSh2b2lkICpjdHgpIHsgcmV0dXJuIGJwZl9zdHJjYXNlY21wKHN0ciwgXFxcImhlbGxvIHdvcmxkXFxcIik7IH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYy03LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYzo4OmV4dGVybiBpbnQgYnBmX3N0cmNtcChjb25zdCBjaGFyICpzMV9faWduLCBjb25zdCBjaGFyICpzMl9faWduKSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jLTktZXh0ZXJuIGJvb2wgYnBmX2R5bnB0cl9pc19udWxsKGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpwKSBfX2tzeW07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmM9MjE9dm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMtMjQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jOjI1OlxcdGJwZl9zdHJjbXAoc3RyaW5nX2EsIHN0cmluZ19iKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMtMjYtXFx0YnBmX2R5bnB0cl9pc19udWxsKFxcdTAwMjZwdHIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jPTY5PV9fbmFrZWQgdm9pZCBrZnVuY19pbnRfcmV0dXJuX3NpZ25fZXh0ZW5kZWQodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uYy03NC1cXHRyMiA9ICVbc3RyaW5nX2JdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmM6NzU6XFx0Y2FsbCBicGZfc3RyY21wO1xcdFxcdFxcdFxcdFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMtNzYtXFx0cjAgXFx1MDAzZVxcdTAwM2U9IDMyO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6MzguMTQyNjc0ODYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzMzMzQ1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxhdGlvbiBoYXBwZW5zLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGNvbXBpbGF0aW9uIHByb2Nlc3MgaXMgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBCdXQgd2FpdCBhIHNlY29uZCwgdGhhdCBmdW5jdGlvbiAqaXMqIGRlZmluZWQgd2l0aGluIHRoZSBzYW1lIGZpbGUsIGBicGZfaml0X2NvbXAzMi5jYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGFueSBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNSwiT3V0cHV0VG9rZW5zIjo3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNTo0Mi4zMTYwMTIwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NDI2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jPTIzOTc9ZW1pdF9jb25kX2ptcDpcXHRcXHRqbXBfY29uZCA9IGdldF9jb25kX2ptcF9vcGNvZGUoQlBGX09QKGNvZGUpLCBmYWxzZSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTUwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjI1NTE6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTUyLXtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jPTI1NTY9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI2MjktXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM6MjYzMDpib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI2MzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNTo0Mi4zNjU2NjA1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTg5ODgyOTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZnVuY3Rpb24gaGVyZS4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBMZXQncyBtYWtlIHN1cmUgaXQncyBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gYSBkZWVwIGRpdmUuIFllcCwgaXQncyB0aGUgSklUIGNvbXBpbGVyJ3MgZW50cnkgcG9pbnQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHdvdWxkbid0IGV4cGVjdCBpdCB0byBiZSBhIGhvdC1wYXRoIGZ1bmN0aW9uOyBpdCdzIHdoYXQgZ2V0cyBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZGluZywgc28gdGhhdCBjaGVja3Mgb3V0LiBJdCBsb29rcyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sLlxuXG5Ob3csIGxldCdzIGFudGljaXBhdGUgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBPYnZpb3VzbHksIGBCUEZfU1lTQ0FMTGAgd2lsbCBiZSBlc3NlbnRpYWwsIGFuZCBgQlBGX0pJVGAgZ29lcyB3aXRob3V0IHNheWluZy4gQXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucyB0aGF0IHRoaXMgc3BlY2lmaWMgdGVzdCBvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgbW9yZSBicm9hZGx5IHdpbGwgcmVseSB1cG9uPyBUaGUgdGVzdCBjb2RlIG1lbnRpb25zIGBicGZfc3RyY21wYCwgd2hpY2ggbGl2ZXMgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IGlmIHRoYXQgcGFydGljdWxhciBoZWxwZXIgZnVuY3Rpb24gaGFzIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA1OjU0LjI2NDQ5MjQ4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1MTY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3N0cmNtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0zNzMwPXN0YXRpYyBpbnQgX19icGZfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIGlnbm9yZV9jYXNlLCBzaXplX3QgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2MC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzYxOiAqIGJwZl9zdHJjbXAgLSBDb21wYXJlIHR3byBzdHJpbmdzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc2Mi0gKiBAczFfX2lnbjogT25lIHN0cmluZ1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3Mi0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozNzczOl9fYnBmX2tmdW5jIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzc3NC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTQ4PUJURl9JRF9GTEFHUyhmdW5jLCBfX2JwZl90cmFwKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjbXApO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NTAtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJjYXNlY21wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDU6NTQuMzE0MDE1NDI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjUzMDQ3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBDb21waWxlciBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29kZSBpbiBxdWVzdGlvbiByZXNpZGVzIHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLCBidXQgb25seSB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQsIGFsb25nIHdpdGggYEJQRl9KSVRgLCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBrZWVwIGluIG1pbmQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBKSVQgY29tcGlsYXRpb24gZW50cnkgcG9pbnQg4oCTIGBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsYCBhbmQgYGJwZl9qaXRfbmVlZHNfemV4dGAgYXJlIHJlbGF0ZWQsIGJ1dCB0aGUgZm9ybWVyIGlzIHRyaXZpYWwgKGp1c3QgcmV0dXJucyB0cnVlKSBhbmQgdGhlIGxhdHRlciBqdXN0IHJldHVybnMgdHJ1ZS4gVGhlcmVmb3JlLCBmb2N1c2luZyBvbiBgYnBmX2ludF9qaXRfY29tcGlsZWAgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuXG5cbkkganVzdCBxdWlja2x5IGNoZWNrZWQgYGVtaXRfa2Z1bmNfY2FsbGAgYW5kIGNvbmZpcm1lZCBpdCdzIHN0YXRpYywgc28gd2UncmUgZ29vZCB0byBnbyB3aXRoIGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuVGhlIGRpZmYgYWxzbyB0b3VjaGVzIGEgYnVuY2ggb2YgdGVzdHM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9rZnVuY19yZXR1cm4uY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNgLiBBbGwgdGVzdHMsIHNvIG5vIGtlcm5lbCBjb2RlIGFjdHVhbGx5ICptb2RpZmllZCogb3RoZXIgdGhhbiB0aGlzIG9uZSBmaWxlLlxuXG5BaCwgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCDigJMgdGhpcyBpcyB0aGUgMzItYml0IHg4NiBCUEYgSklUIGNvbXBpbGVyLiBUaGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFib3V0IGhhbmRsaW5nIGtmdW5jIGNhbGxzIGFuZCB0aGVpciByZXR1cm4gdmFsdWVzIGNvcnJlY3RseSwgaW5jbHVkaW5nIGRpZmZlcmVudCBzaXplcyBhbmQgc2lnbnMuIFRoYXQncyBhIGRlZmluaXRlIHJlZCBmbGFnLiBUaGUgQlBGIEpJVCBjb21waWxlciBpcyBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0J3MgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayB3aXRoIHRoZSBmdXp6ZXIuXG5cbkluIHNob3J0LCBoZXJlJ3MgbXkgcXVpY2sgc3VtbWFyeTpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IFllc1xuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJicGZfaW50X2ppdF9jb21waWxlXCJdYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiQlBGX1NZU0NBTExcIiwgXCJCUEZfSklUXCJdYFxuKiAgICoqUmVhc29uaW5nKio6IFwiVGhlIHBhdGNoIGludm9sdmVzIHRoZSAzMi1iaXQgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBrZnVuYyByZXR1cm4gdmFsdWVzIG9mIHZhcmlvdXMgc2l6ZXMgYW5kIHNpZ25zLiBJdCBkaXJlY3RseSBhZmZlY3RzIHRoZSBCUEYgSklUIGNvbXBpbGVyLCB3aGljaCBpcyBjcnVjaWFsIGtlcm5lbCBsb2dpYywgYW5kIHRoZXJlZm9yZSBwcmVzZW50cyBhIGdvb2Qgb3Bwb3J0dW5pdHkgZm9yIGZ1enppbmcuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNDUsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjAyLjQzOTMyMzA5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MDU1MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgMzItYml0IHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIGNvcnJlY3RseSBoYW5kbGUga2Z1bmMgcmV0dXJuIHZhbHVlcyBvZiBkaWZmZXJlbnQgc2l6ZXMgYW5kIHNpZ25zLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIEpJVCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIDMyLWJpdCB4ODYgQlBGIEpJVCBjb21waWxlciB0byBjb3JyZWN0bHkgaGFuZGxlIGtmdW5jIHJldHVybiB2YWx1ZXMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzaWducy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBKSVQpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNjowMi41MTQzODU1NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTA5MDA0Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDY6MDIuNTE1MDA5MDg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMxOTA4Mzc1Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgMzItYml0IHg4NiAoYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCkgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgb3IgemVyby1leHRlbmQgcmV0dXJuIHZhbHVlcyBmcm9tIGtmdW5jcy4gV2hpbGUgdGhpcyBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB1bmluaXRpYWxpemVkIG9yIGxlZnRvdmVyIHJlZ2lzdGVyIHN0YXRlIGNvdWxkIGJlIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBLTVNBTiBpcyBvbmx5IHN1cHBvcnRlZCBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyAoZS5nLiwgYFg4Nl82NGApLiBUaGUgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgc3RyaWN0bHkgZm9yIDMyLWJpdCB4ODYgKGBDT05GSUdfWDg2XzMyYCkgYW5kIHdpbGwgbm90IGJlIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIGluIGEgS01TQU4gYnVpbGQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmN2Q3NzgyNjQyYzZiNmVlYTQ3M2MxMzQ2MWJhN2U3MmI4MWQ2N2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzowNDo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbmluZGV4IDg1MmJhZjJlNGRiNGQuLjAxN2NjOWU3ZTRlMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmNcbkBAIC0xNjIwLDEzICsxNjIwLDI1IEBAIHN0YXRpYyBpbnQgZW1pdF9rZnVuY19jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIHU4ICplbmRfYWRkcixcbiBcdFx0LyogYWRkIGVzcCxcImJ5dGVzX2luX3N0YWNrXCIgKi9cbiBcdFx0ZW5kX2FkZHIgLT0gMztcbiBcbi1cdC8qIG1vdiBkd29yZCBwdHIgW2VicCtvZmZdLGVkeCAqL1xuLVx0aWYgKGZtLVx1MDAzZXJldF9zaXplIFx1MDAzZSBzaXplb2YodTMyKSlcbi1cdFx0ZW5kX2FkZHIgLT0gMztcbi1cbi1cdC8qIG1vdiBkd29yZCBwdHIgW2VicCtvZmZdLGVheCAqL1xuLVx0aWYgKGZtLVx1MDAzZXJldF9zaXplKVxuK1x0c3dpdGNoIChmbS1cdTAwM2VyZXRfc2l6ZSkge1xuK1x0Y2FzZSAwOlxuK1x0XHRicmVhaztcbitcdGNhc2Ugc2l6ZW9mKHU4KTpcbitcdGNhc2Ugc2l6ZW9mKHUxNik6XG4rXHRcdC8qIG1vdltzfHpdeCBlYXgsW2FdeCAqL1xuIFx0XHRlbmRfYWRkciAtPSAzO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2Ugc2l6ZW9mKHUzMik6XG4rXHRcdC8qIGNkcSBvciB4b3IgZWR4LGVkeCAqL1xuK1x0XHRlbmRfYWRkciAtPSBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDEgOiAyO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4rXHRcdC8qIFN0b3JlIEVEWDpFQVggaW4gUjAuICovXG4rXHRcdGVuZF9hZGRyIC09IDY7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRqbXBfb2Zmc2V0ID0gKHU4ICopX19icGZfY2FsbF9iYXNlICsgaW5zbi1cdTAwM2VpbW0gLSBlbmRfYWRkcjtcbiBcdGlmICghaXNfc2ltbTMyKGptcF9vZmZzZXQpKSB7XG5AQCAtMTYzNywxNSArMTY0OSwzOCBAQCBzdGF0aWMgaW50IGVtaXRfa2Z1bmNfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCB1OCAqZW5kX2FkZHIsXG4gXG4gXHRFTUlUMV9vZmYzMigweEU4LCBqbXBfb2Zmc2V0KTtcbiBcbi1cdGlmIChmbS1cdTAwM2VyZXRfc2l6ZSlcbitcdHN3aXRjaCAoZm0tXHUwMDNlcmV0X3NpemUpIHtcbitcdGNhc2Ugc2l6ZW9mKHU4KTpcbitcdFx0LyogbW92W3N8el14IGVheCxhbCAqL1xuK1x0XHRFTUlUMygweDBGLCBmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRyA/IDB4QkUgOiAweEI2LFxuK1x0XHQgICAgICBhZGRfMnJlZygweEMwLCBJQTMyX0VBWCwgSUEzMl9FQVgpKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIHNpemVvZih1MTYpOlxuK1x0XHQvKiBtb3Zbc3x6XXggZWF4LGF4ICovXG4rXHRcdEVNSVQzKDB4MEYsIGZtLVx1MDAzZXJldF9mbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9TSUdORURfQVJHID8gMHhCRiA6IDB4QjcsXG4rXHRcdCAgICAgIGFkZF8ycmVnKDB4QzAsIElBMzJfRUFYLCBJQTMyX0VBWCkpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0aWYgKGZtLVx1MDAzZXJldF9zaXplIFx1MDAyNlx1MDAyNiBmbS1cdTAwM2VyZXRfc2l6ZSBcdTAwM2M9IHNpemVvZih1MzIpKSB7XG4rXHRcdGlmIChmbS1cdTAwM2VyZXRfZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfU0lHTkVEX0FSRylcbitcdFx0XHQvKiBjZHEgKi9cbitcdFx0XHRFTUlUMSgweDk5KTtcbitcdFx0ZWxzZVxuK1x0XHRcdC8qIHhvciBlZHgsZWR4ICovXG4rXHRcdFx0RU1JVDIoMHgzMSwgYWRkXzJyZWcoMHhDMCwgSUEzMl9FRFgsIElBMzJfRURYKSk7XG4rXHR9XG4rXG4rXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUpIHtcbiBcdFx0LyogbW92IGR3b3JkIHB0ciBbZWJwK29mZl0sZWF4ICovXG4gXHRcdEVNSVQzKDB4ODksIGFkZF8ycmVnKDB4NDAsIElBMzJfRUJQLCBJQTMyX0VBWCksXG4gXHRcdCAgICAgIFNUQUNLX1ZBUihicGYyaWEzMltCUEZfUkVHXzBdWzBdKSk7XG4tXG4tXHRpZiAoZm0tXHUwMDNlcmV0X3NpemUgXHUwMDNlIHNpemVvZih1MzIpKVxuIFx0XHQvKiBtb3YgZHdvcmQgcHRyIFtlYnArb2ZmXSxlZHggKi9cbiBcdFx0RU1JVDMoMHg4OSwgYWRkXzJyZWcoMHg0MCwgSUEzMl9FQlAsIElBMzJfRURYKSxcbiBcdFx0ICAgICAgU1RBQ0tfVkFSKGJwZjJpYTMyW0JQRl9SRUdfMF1bMV0pKTtcbitcdH1cbiBcbiBcdGlmIChieXRlc19pbl9zdGFjaylcbiBcdFx0LyogYWRkIGVzcCxcImJ5dGVzX2luX3N0YWNrXCIgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggODExM2ZlYTdiYTg2Yy4uNDYzOGUwYTQ1ZGI2ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC0xMjcsNiArMTI3LDcgQEBcbiAjaW5jbHVkZSBcInZlcmlmaWVyX3NldF9yZXR2YWwuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2xzbS5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfaml0X2lubGluZS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfa2Z1bmNfcmV0dXJuLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJpcnEuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2N0eF9wdHJfcGFyYW0uc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX3pleHQuc2tlbC5oXCJcbkBAIC0yODksNiArMjkwLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX2xzbSh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2xzbSk7IH1cbiB2b2lkIHRlc3RfaXJxKHZvaWQpXHRcdFx0ICAgICAgeyBSVU4oaXJxKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdHUodm9pZClcdFx0ICAgICAgeyBSVU4odmVyaWZpZXJfbXR1KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9qaXRfaW5saW5lKHZvaWQpICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfaml0X2lubGluZSk7IH1cbit2b2lkIHRlc3RfdmVyaWZpZXJfa2Z1bmNfcmV0dXJuKHZvaWQpICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2tmdW5jX3JldHVybik7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfY3R4X3B0cl9wYXJhbSh2b2lkKSAgICAgICB7IFJVTih2ZXJpZmllcl9jdHhfcHRyX3BhcmFtKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl96ZXh0KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTl9URVNUUyh2ZXJpZmllcl96ZXh0KTsgfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IDVlYWNmMWI0MzI1MjEuLjE0OThkYTA0NTk3YWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0xNTUsNiArMTU1LDcgQEBcbiAjZGVmaW5lIF9fYnRmX2Z1bmNfcGF0aChwYXRoKVx0X190ZXN0X3RhZyhcInRlc3RfYnRmX2Z1bmNfcGF0aD1cIiBwYXRoKVxuICNkZWZpbmUgX19hcmNoKGFyY2gpXHRcdF9fdGVzdF90YWcoXCJ0ZXN0X2FyY2g9XCIgYXJjaClcbiAjZGVmaW5lIF9fYXJjaF94ODZfNjRcdFx0X19hcmNoKFwiWDg2XzY0XCIpXG4rI2RlZmluZSBfX2FyY2hfeDg2XzMyXHRcdF9fYXJjaChcIlg4Nl8zMlwiKVxuICNkZWZpbmUgX19hcmNoX2FybTY0XHRcdF9fYXJjaChcIkFSTTY0XCIpXG4gI2RlZmluZSBfX2FyY2hfcmlzY3Y2NFx0XHRfX2FyY2goXCJSSVNDVjY0XCIpXG4gI2RlZmluZSBfX2FyY2hfczM5MHhcdFx0X19hcmNoKFwiczM5MHhcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MmE5NGRhZjAzOTIyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfa2Z1bmNfcmV0dXJuLmNcbkBAIC0wLDAgKzEsODQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rZXh0ZXJuIGludCBicGZfc3RyY21wKGNvbnN0IGNoYXIgKnMxX19pZ24sIGNvbnN0IGNoYXIgKnMyX19pZ24pIF9fa3N5bTtcbitleHRlcm4gYm9vbCBicGZfZHlucHRyX2lzX251bGwoY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnApIF9fa3N5bTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgX191MzIpO1xuK1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4rfSBrZnVuY19yZXR1cm5fbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBjb25zdCBjaGFyIHN0cmluZ19hW10gPSBcImFcIjtcbitzdGF0aWMgY29uc3QgY2hhciBzdHJpbmdfYltdID0gXCJiXCI7XG4rXG4rdm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyID0ge307XG4rXG4rXHRicGZfc3RyY21wKHN0cmluZ19hLCBzdHJpbmdfYik7XG4rXHRicGZfZHlucHRyX2lzX251bGwoXHUwMDI2cHRyKTtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fZmxhZyhCUEZfRl9TTEVFUEFCTEUpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19hcmNoX3g4Nl8zMlxuK19fbmFrZWQgdm9pZCBrZnVuY19ib29sX3JldHVybl96ZXJvX2V4dGVuZGVkKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHQqKHUzMiAqKShyMTAgLSA0KSA9IHIwO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTQ7XHRcdFx0XHRcdFxcXG4rXHRyMSA9ICVba2Z1bmNfcmV0dXJuX21hcF0gbGw7XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHIxID0gcjA7XHRcdFx0XHRcdFxcXG4rXHRyMiA9IDg7XHRcdFx0XHRcdFx0XFxcbitcdHIzID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjQgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyNCArPSAtMjQ7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2R5bnB0cl9mcm9tX21lbV07XHRcdFx0XFxcbitcdGlmIHIwICE9IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9IDB4MTAwMDAwMDAwIGxsO1x0XHRcdFx0XFxcbitcdHIxID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjEgKz0gLTI0O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCBicGZfZHlucHRyX2lzX251bGw7XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNlXHUwMDNlPSAzMjtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbisxOlx0cjAgPSAyO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihrZnVuY19yZXR1cm5fbWFwKSxcbitcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tKGJwZl9keW5wdHJfZnJvbV9tZW0pXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19mbGFnKEJQRl9GX1NMRUVQQUJMRSlcbitfX3N1Y2Nlc3MgX19yZXR2YWwoLTEpXG4rX19hcmNoX3g4Nl8zMlxuK19fbmFrZWQgdm9pZCBrZnVuY19pbnRfcmV0dXJuX3NpZ25fZXh0ZW5kZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHIxID0gJVtzdHJpbmdfYV0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSAlW3N0cmluZ19iXSBsbDtcdFx0XHRcdFxcXG4rXHRjYWxsIGJwZl9zdHJjbXA7XHRcdFx0XHRcXFxuK1x0cjAgXHUwMDNlXHUwMDNlPSAzMjtcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9hZGRyKHN0cmluZ19hKSxcbitcdCAgX19pbW1fYWRkcihzdHJpbmdfYilcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5pbmRleCAwNzgwNzc1N2I1MThkLi44YTlmNGEzMWExYmIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbG9hZGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xvYWRlci5jXG5AQCAtMzc0LDE2ICszNzQsMTkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKipjb2xsZWN0X2RlY2xfdGFncyhzdHJ1Y3QgYnRmICpidGYsIGludCBpZCwgaW50ICpjbnQpXG4gZW51bSBhcmNoIHtcbiBcdEFSQ0hfVU5LTk9XTlx0PSAweDEsXG4gXHRBUkNIX1g4Nl82NFx0PSAweDIsXG4tXHRBUkNIX0FSTTY0XHQ9IDB4NCxcbi1cdEFSQ0hfUklTQ1Y2NFx0PSAweDgsXG4tXHRBUkNIX1MzOTBYXHQ9IDB4MTAsXG4tXHRBUkNIX0xPT05HQVJDSFx0PSAweDIwLFxuK1x0QVJDSF9YODZfMzJcdD0gMHg0LFxuK1x0QVJDSF9BUk02NFx0PSAweDgsXG4rXHRBUkNIX1JJU0NWNjRcdD0gMHgxMCxcbitcdEFSQ0hfUzM5MFhcdD0gMHgyMCxcbitcdEFSQ0hfTE9PTkdBUkNIXHQ9IDB4NDAsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGdldF9jdXJyZW50X2FyY2godm9pZClcbiB7XG4gI2lmIGRlZmluZWQoX194ODZfNjRfXylcbiBcdHJldHVybiBBUkNIX1g4Nl82NDtcbisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKVxuK1x0cmV0dXJuIEFSQ0hfWDg2XzMyO1xuICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHRyZXR1cm4gQVJDSF9BUk02NDtcbiAjZWxpZiBkZWZpbmVkKF9fcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjRcbkBAIC01NzcsNiArNTgwLDggQEAgc3RhdGljIGludCBwYXJzZV90ZXN0X3NwZWMoc3RydWN0IHRlc3RfbG9hZGVyICp0ZXN0ZXIsXG4gXHRcdH0gZWxzZSBpZiAoKHZhbCA9IHN0cl9oYXNfcGZ4KHMsIFwidGVzdF9hcmNoPVwiKSkpIHtcbiBcdFx0XHRpZiAoc3RyY21wKHZhbCwgXCJYODZfNjRcIikgPT0gMCkge1xuIFx0XHRcdFx0YXJjaCA9IEFSQ0hfWDg2XzY0O1xuK1x0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJYODZfMzJcIikgPT0gMCkge1xuK1x0XHRcdFx0YXJjaCA9IEFSQ0hfWDg2XzMyO1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKHZhbCwgXCJBUk02NFwiKSA9PSAwKSB7XG4gXHRcdFx0XHRhcmNoID0gQVJDSF9BUk02NDtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcCh2YWwsIFwiUklTQ1Y2NFwiKSA9PSAwKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzowNjowMi41MTUwMTAwNjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY1MDE1NDk2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoIGZvciAzMi1iaXQgeDg2KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBlbWl0X2tmdW5jX2NhbGxgLiBJdCdzIGFkZHJlc3NpbmcgaG93IHRoZSBCUEYgSklUIGNvbXBpbGVyIGhhbmRsZXMgcmV0dXJuIHZhbHVlcyBmcm9tIGtlcm5lbCBmdW5jdGlvbiBjYWxscyAoa2Z1bmNzKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGVuc3VyaW5nIGNvcnJlY3QgcHJvcGFnYXRpb24gb2YgcmV0dXJuIHZhbHVlcyBvZiB2YXJ5aW5nIHNpemVzIOKAkyB1OCwgdTE2LCB1MzIsIGFuZCB1NjQg4oCTIGFuZCBoYW5kbGluZyB0aGVpciBzaWduZWRuZXNzIGNvcnJlY3RseS4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9naWMgdG8gZWl0aGVyIHplcm8tZXh0ZW5kIG9yIHNpZ24tZXh0ZW5kIHRoZSBrZnVuYydzIHJldHVybiB2YWx1ZSBiYXNlZCBvbiBpdHMgc2l6ZSBhbmQgd2hldGhlciBpdCdzIHNpZ25lZC4gVGhlIGFkZGVkIHRlc3RzIGluIGB2ZXJpZmllcl9rZnVuY19yZXR1cm4uY2AgYXJlIGEgd2VsY29tZSBhZGRpdGlvbiB0byB2YWxpZGF0ZSB0aGlzIGJlaGF2aW9yLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGl0J3MgcHJldHR5IGNsZWFyOiB0aGUgb2xkIGNvZGUgc2ltcGx5IG1vdmVkIHRoZSByZXR1cm4gdmFsdWUsIGFzc3VtaW5nIHRoYXQgdGhlIGNhbGxpbmcgY29udmVudGlvbiB3b3VsZCBoYW5kbGUgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIDY0LWJpdCByZXR1cm4gcmVnaXN0ZXIgUjAgKHdoaWNoIGNvcnJlc3BvbmRzIHRvIEVEWDpFQVggb24geDg2LTMyKS4gTm93LCBpdCBleHBsaWNpdGx5IGhhbmRsZXMgdGhlIHNpemUgYW5kIHNpZ25lZG5lc3MsIHVzaW5nIGFwcHJvcHJpYXRlIGluc3RydWN0aW9ucyBsaWtlIGBtb3Z6eGAgKHplcm8tZXh0ZW5kKSwgYG1vdnN4YCAoc2lnbi1leHRlbmQpLCBgY2RxYCAoc2lnbi1leHRlbmQgRUFYIHRvIEVEWDpFQVgpLCBhbmQgYHhvciBlZHgsZWR4YCAoemVybyBFRFgpLiBUaGlzIGlzIGNydWNpYWwuIFdpdGhvdXQgdGhpcywgeW91IGNvdWxkIGVuZCB1cCB3aXRoIGdhcmJhZ2UgZGF0YSBpbiB0aGUgdXBwZXIgYml0cyBvZiBSMC5cblxuVGhpcyB0cmlnZ2VycyBhIHRob3VnaHQg4oCTIGNvdWxkIHRoaXMgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkPyBCZWNhdXNlIHRoZSB1cHBlciBiaXRzIHdlcmUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkLiBUaGUgQlBGIGFyY2hpdGVjdHVyZSB1c2VzIFIwIGFzIGEgNjQtYml0IHJldHVybiByZWdpc3RlciwgYnV0IGtmdW5jcyBtaWdodCByZXR1cm4gc21hbGxlciB2YWx1ZXMsIGxpa2UgMzItYml0IHZhbHVlcy4gVGhhdCB3b3VsZCBtZWFuIHRoZSB1cHBlciAzMiBiaXRzIG9mIFIwIHdvdWxkIGNvbnRhaW4gZ2FyYmFnZS4gSWYgdGhlIEJQRiBwcm9ncmFtIHRoZW4gdXNlZCB0aGVzZSBiaXRzLCBpdCBjb3VsZCByZWFkIHRoYXQgZ2FyYmFnZSBkYXRhLiBJZiB0aGUga2Z1bmMgaXMga2VybmVsIGNvZGUsIHdvdWxkIHRoaXMgbWVhbiBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIGtlcm5lbD8gSXMgdGhpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrP1xuXG5BaGEhIFRoaXMgaXMgYSByZWdpc3RlciBsZWFrLCBub3QgYSBtZW1vcnkgbGVhayBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIFRoZSBCUEYgcHJvZ3JhbSAqY2FuKiByZWFkIEVEWCAob3IgdGhlIHVwcGVyIGJpdHMgb2YgRUFYKSwgYW5kIEVEWCBtaWdodCBjb250YWluIHNvbWUgbGVmdG92ZXIga2VybmVsIGRhdGEgb3IgYSBwb2ludGVyLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaG93IGlzIHRoaXMgaGFuZGxlZCBieSB0b29scyBsaWtlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcik/XG5cbldhaXQsIEtNU0FOISBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dC4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLi4uIFRoaXMgY29kZSBpcyBmb3IgeDg2LTMyLiBLTVNBTiwgbGFzdCBJIGNoZWNrZWQsIGRvZXMgbm90IHN1cHBvcnQgMzItYml0IHg4NiEgSXQgZm9jdXNlcyBvbiB4ODYtNjQgYW5kIHBvdGVudGlhbGx5IHMzOTB4IGFuZCBhcm02NCwgc28gdGVzdGluZyB3aXRoIEtNU0FOIHdvdWxkIGJlIHVzZWxlc3Mgb24gdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgYnBmX2ppdF9jb21wMzIuY2Agd2hpY2ggaXMgYnVpbHQgZXhjbHVzaXZlbHkgZm9yIDMyLWJpdCB4ODYuIFNvIEtNU0FOIHdvdWxkICpub3QqIGJlIHVzZWQgdG8gdGVzdCB0aGlzIHBhdGgsIGV2ZW4gaWYgdGhlIHVzZXIgd2VyZSB0byB1c2UgaXQuIFRoYXQncyBnb29kIHRvIGNsYXJpZnkuIExldCBtZSBjb25maXJtLCBJIGJlbGlldmUgSSByZWFkIHRoYXQgS01TQU4gb25seSBzdXBwb3J0cyB4ODYtNjQuICpDaGVja3MgbGliL0tjb25maWcua21zYW4qLiBZZXMsIEtNU0FOIHJlcXVpcmVzIHg4Ni02NC4gQ2FzZSBjbG9zZWQuIFRoZSBwYXRjaCBpcyBuZWNlc3NhcnksIGFuZCBLTVNBTiBpc24ndCByZWxldmFudCB0byB2YWxpZGF0aW5nIHRoaXMgMzItYml0IHg4NiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzIxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjE5LjAxNjU2MzE1NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTA2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtNU0FOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9LY29uZmlnLmttc2FuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmttc2FuPTU9Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTctXFxubGliL0tjb25maWcua21zYW46ODpjb25maWcgS01TQU5cXG5saWIvS2NvbmZpZy5rbXNhbi05LVxcdGJvb2wgXFxcIktNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbj0yNj1pZiBLTVNBTlxcbmxpYi9LY29uZmlnLmttc2FuLTI3LVxcbmxpYi9LY29uZmlnLmttc2FuOjI4OmNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcXG5saWIvS2NvbmZpZy5rbXNhbi0yOS1cXHRib29sIFxcXCJDaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uc1xcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTQxLVxcbmxpYi9LY29uZmlnLmttc2FuOjQyOmNvbmZpZyBLTVNBTl9LVU5JVF9URVNUXFxubGliL0tjb25maWcua21zYW4tNDMtXFx0dHJpc3RhdGUgXFxcIktNU0FOIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDY6MTkuMDYzMTc5MzU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDYwNzIyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKktNU0FOIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgS01TQU4gaXMgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCwgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBodWIgZm9yIGFsbCB0aGluZ3MgeDg2LXNwZWNpZmljLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBLTVNBTiBvcHRpb25zIGRlZmluZWQgYW5kIGhvcGVmdWxseSBlbmFibGVkIChvciBhdCBsZWFzdCByZWFkaWx5IGF2YWlsYWJsZSkgdGhlcmUuIExldCdzIHNlZSB3aGF0J3Mgd2hhdCBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS4gVGhpcyBjaGVjayBpcyBjcnVjaWFsOyBJIGNhbid0IHByb2NlZWQgd2l0aG91dCBjb25maXJtaW5nIHRoaXMgZm91bmRhdGlvbiBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjIyLjMwOTI1NDIzMloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwODExNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEhBVkVfQVJDSF9LTVNBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xOTgtXFx0c2VsZWN0IEhBVkVfQVJDSF9LRkVOQ0VcXG5hcmNoL3g4Ni9LY29uZmlnOjE5OTpcXHRzZWxlY3QgSEFWRV9BUkNIX0tNU0FOXFx0XFx0XFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0yMDAtXFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjIyLjM1NTM0MTg2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjM0MzQzNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgSW5hcHBsaWNhYmlsaXR5IGZvciB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgd2UndmUgZ290IGEgYHNlbGVjdCBIQVZFX0FSQ0hfS01TQU4gaWYgWDg2XzY0YCBjb25kaXRpb24uIFJpZ2h0IGF3YXksIHRoYXQncyBhIHJlZCBmbGFnLiBLTVNBTiBpcyBkZWZpbml0ZWx5ICpub3QqIHN1cHBvcnRlZCBvbiAzMi1iaXQgeDg2LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgb25seSBldmVyIGNvbXBpbGVkIGZvciAzMi1iaXQgeDg2IGFyY2hpdGVjdHVyZXMuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LlxuXG5TaW5jZSBgYnBmX2ppdF9jb21wMzIuY2Agb25seSBleGlzdHMgaW4gMzItYml0IGJ1aWxkcyBhbmQgS01TQU4gaXMgZXhjbHVzaXZlIHRvIDY0LWJpdCwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yICp0aGlzKiBwYXRjaCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLiBUaGUgbW9kaWZpZWQgY29kZSBzaW1wbHkgd29uJ3QgYmUgcGFydCBvZiBhIEtNU0FOLWVuYWJsZWQgYnVpbGQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLCBpbiBjYXNlIEknbSBtaXNzaW5nIHNvbWV0aGluZywgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZpbGVzIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuICpTaWdoKiBPa2F5LCBzbyB3ZSd2ZSBnb3QgYSBidW5jaCBvZiBzZWxmdGVzdCBmaWxlczogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2tmdW5jX3JldHVybi5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9sb2FkZXIuY2AuIEFsbCBzZWxmdGVzdHMuIE5vIHJlYWwga2VybmVsIGNvZGUgbW9kaWZpY2F0aW9uIGFwYXJ0IGZyb20gdGhlIGBicGZfaml0X2NvbXAzMi5jYCBmaWxlIEkgbWVudGlvbmVkIGVhcmxpZXIuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCwgd2hpY2ggYWRkcmVzc2VzIHNpZ24vemVyby1leHRlbnNpb24gaXNzdWVzIGluIHRoZSAzMi1iaXQgQlBGIEpJVCBjb21waWxlciwgd2lsbCBub3QgYmUgcmVsZXZhbnQgaW4gYSBLTVNBTiBjb250ZXh0LiBUaGUgbmF0dXJlIG9mIHRoZSAzMi1iaXQgQlBGIEpJVCBjb2RlIG1lYW5zIGl0IHNpbXBseSBkb2Vzbid0IGludGVyYWN0IHdpdGggS01TQU4gYnVpbGRzLiBBIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGJwZl9qaXRfY29tcDMyLmNgIGlzIGluZGVlZCAzMi1iaXQgb25seSBhcyBhIHNhbml0eSBjaGVjay4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MDY6MzAuNTg5Njg3ODc4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY0MTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2NvbXAzMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L01ha2VmaWxlPTY9aWZlcSAoJChDT05GSUdfWDg2XzMyKSx5KVxcbmFyY2gveDg2L25ldC9NYWtlZmlsZTo3OiAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcDMyLm9cXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtOC1lbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjMwLjYzNjMzNDI4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg3MDIwOTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29tcGlsYXRpb24gQ29udGV4dCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIHJpZ2h0IHRoZXJlLiBUaGUgY29kZSBJJ20gbG9va2luZyBhdCBpcyAqZGVmaW5pdGVseSogb25seSBjb21waWxlZCB1bmRlciB0aGUgYENPTkZJR19YODZfMzJgIGZsYWcuIFRoYXQncyB0aGUga2V5IHJlc3RyaWN0aW9uLiBObyBuZWVkIHRvIGxvb2sgYW55IGZ1cnRoZXIgYXQgdGhlIGdlbmVyYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBvciB0aGUgbGFyZ2VyIHByb2plY3Qgc3RydWN0dXJlLCBpdCBpcyBvbmx5IHJlbGF0ZWQgdG8gdGhlIDMyIGJpdCBhcmNoaXRlY3R1cmUuIE5vdyB0aGF0IEkgaGF2ZSBpc29sYXRlZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGl0IGlzIHRpbWUgdG8gc2V0IHRoZSBvdXRjb21lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDkxLCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjA2OjM0LjQyMzM1ODgyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIDMyLWJpdCB4ODYgKGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuY2ApIHRvIHByb3Blcmx5IHNpZ24tZXh0ZW5kIG9yIHplcm8tZXh0ZW5kIHJldHVybiB2YWx1ZXMgZnJvbSBrZnVuY3MuIFdoaWxlIHRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgdW5pbml0aWFsaXplZCBvciBsZWZ0b3ZlciByZWdpc3RlciBzdGF0ZSBjb3VsZCBiZSBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcywgS01TQU4gaXMgb25seSBzdXBwb3J0ZWQgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgKGUuZy4sIGBYODZfNjRgKS4gVGhlIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIHN0cmljdGx5IGZvciAzMi1iaXQgeDg2IChgQ09ORklHX1g4Nl8zMmApIGFuZCB3aWxsIG5vdCBiZSBjb21waWxlZCBvciBleGVjdXRlZCBpbiBhIEtNU0FOIGJ1aWxkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgMzItYml0IHg4NiAoYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jYCkgdG8gcHJvcGVybHkgc2lnbi1leHRlbmQgb3IgemVyby1leHRlbmQgcmV0dXJuIHZhbHVlcyBmcm9tIGtmdW5jcy4gV2hpbGUgdGhpcyBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB1bmluaXRpYWxpemVkIG9yIGxlZnRvdmVyIHJlZ2lzdGVyIHN0YXRlIGNvdWxkIGJlIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLCBLTVNBTiBpcyBvbmx5IHN1cHBvcnRlZCBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyAoZS5nLiwgYFg4Nl82NGApLiBUaGUgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgc3RyaWN0bHkgZm9yIDMyLWJpdCB4ODYgKGBDT05GSUdfWDg2XzMyYCkgYW5kIHdpbGwgbm90IGJlIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIGluIGEgS01TQU4gYnVpbGQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcwttg[1] Phase: Succeeded StartedAt: 2026-08-13 13:06:46 +0000 UTC FinishedAt: 2026-08-13 13:06:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 13:06:46 +0000 UTC FinishedAt: 2026-08-13 13:06:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2] Phase: Succeeded StartedAt: 2026-08-13 13:06:46 +0000 UTC FinishedAt: 2026-08-13 13:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 13:06:46 +0000 UTC FinishedAt: 2026-08-13 13:49:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 13:06:46 +0000 UTC FinishedAt: 2026-08-13 13:06:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 13:06:46 +0000 UTC FinishedAt: 2026-08-13 13:06:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcwttg/series-workflowcwttg-convert-artifact-2927420556/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 13:06:56 +0000 UTC FinishedAt: 2026-08-13 13:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 13:06:56 +0000 UTC FinishedAt: 2026-08-13 13:27:40 +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:*2cba521b-a408-4c7e-89b2-27599103a71e,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-workflowcwttg/series-workflowcwttg-convert-artifact-2927420556/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": "a82d18df-1f30-487e-a335-761151df20d1", "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-workflowcwttg/series-workflowcwttg-build-action-3306924730/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 13:06:56 +0000 UTC FinishedAt: 2026-08-13 13:27: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:*2cba521b-a408-4c7e-89b2-27599103a71e,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-workflowcwttg/series-workflowcwttg-convert-artifact-2927420556/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": "a82d18df-1f30-487e-a335-761151df20d1", "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-workflowcwttg/series-workflowcwttg-build-action-3306924730/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 13:27:40 +0000 UTC FinishedAt: 2026-08-13 13:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 13:27:40 +0000 UTC FinishedAt: 2026-08-13 13:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 13:27:40 +0000 UTC FinishedAt: 2026-08-13 13:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 13:27:40 +0000 UTC FinishedAt: 2026-08-13 13:27:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcwttg/series-workflowcwttg-convert-artifact-2274248907/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 13:27:51 +0000 UTC FinishedAt: 2026-08-13 13:29:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 13:27:51 +0000 UTC FinishedAt: 2026-08-13 13:29:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a82d18df-1f30-487e-a335-761151df20d1,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-workflowcwttg/series-workflowcwttg-build-action-3306924730/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-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 13:29:48 +0000 UTC FinishedAt: 2026-08-13 13:29:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 13:29:48 +0000 UTC FinishedAt: 2026-08-13 13:29:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 13:29:48 +0000 UTC FinishedAt: 2026-08-13 13:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 13:29:48 +0000 UTC FinishedAt: 2026-08-13 13:46:50 +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:*2cba521b-a408-4c7e-89b2-27599103a71e,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-workflowcwttg/series-workflowcwttg-convert-artifact-2274248907/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": "93285c1b-add4-4704-ba00-cf618bba2971", "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-workflowcwttg/series-workflowcwttg-build-action-856452463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 13:29:48 +0000 UTC FinishedAt: 2026-08-13 13:46:40 +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:*2cba521b-a408-4c7e-89b2-27599103a71e,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-workflowcwttg/series-workflowcwttg-convert-artifact-2274248907/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": "93285c1b-add4-4704-ba00-cf618bba2971", "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-workflowcwttg/series-workflowcwttg-build-action-856452463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 13:46:50 +0000 UTC FinishedAt: 2026-08-13 13:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 13:46:50 +0000 UTC FinishedAt: 2026-08-13 13:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 13:46:50 +0000 UTC FinishedAt: 2026-08-13 13:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 13:46:50 +0000 UTC FinishedAt: 2026-08-13 13:48:29 +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:*93285c1b-add4-4704-ba00-cf618bba2971,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-workflowcwttg/series-workflowcwttg-build-action-856452463/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-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 13:48:38 +0000 UTC FinishedAt: 2026-08-13 13:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 13:48:38 +0000 UTC FinishedAt: 2026-08-13 13:49:56 +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"],"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:*a82d18df-1f30-487e-a335-761151df20d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*93285c1b-add4-4704-ba00-cf618bba2971,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-workflowcwttg/series-workflowcwttg-build-action-3306924730/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-workflowcwttg/series-workflowcwttg-build-action-856452463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 13:48:38 +0000 UTC FinishedAt: 2026-08-13 13:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 13:48:38 +0000 UTC FinishedAt: 2026-08-13 13:48:43 +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"],"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-workflowcwttg/series-workflowcwttg-convert-artifact-2304078948/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 13:48:38 +0000 UTC FinishedAt: 2026-08-13 13:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 13:48:38 +0000 UTC FinishedAt: 2026-08-13 13:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 13:48:39 +0000 UTC FinishedAt: 2026-08-13 13:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 13:48:49 +0000 UTC FinishedAt: 2026-08-13 13:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcwttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"7500c01e-5bd0-481a-a9da-1f86e3f29ff7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 13:48:49 +0000 UTC FinishedAt: 2026-08-13 13:49:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a82d18df-1f30-487e-a335-761151df20d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*93285c1b-add4-4704-ba00-cf618bba2971,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-workflowcwttg/series-workflowcwttg-build-action-3306924730/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-workflowcwttg/series-workflowcwttg-build-action-856452463/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-workflowcwttg/series-workflowcwttg-convert-artifact-2304078948/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,}