Name: series-workflowl75gr Phase: Succeeded StartedAt: 2026-08-06 03:23:02 +0000 UTC FinishedAt: 2026-08-06 07:11:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[0] Phase: Succeeded StartedAt: 2026-08-06 03:23:02 +0000 UTC FinishedAt: 2026-08-06 03:26:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 03:23:02 +0000 UTC FinishedAt: 2026-08-06 03:26:30 +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": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "1cb08b36-441f-4324-8b96-ab8565f52dca" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "range_tree_set", "range_tree_clear", "bpf_arena_free_pages", "bpf_arena_free_pages_non_sleepable", "arena_free_worker" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2FyZW5hX2ZyZWVfd29ya2VyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBtb2RpZmllcyB0aGUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG5vZGVzIGJlZm9yZSBhbHRlcmluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGluY29uc2lzdGVudCBzdGF0ZXMuIEl0IGFsc28gdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gaGFuZGxlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGhzIGFuZCB0cmVlIG1hbmlwdWxhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NGVhNWYyNzA2ZjEwZTZjOTUyZTVhNTRiMGNlNmFhZjljZWJiMjNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwMzoyNTo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDU1NWVlMjUzMWVmOTguLjMwNzQ1ZGE5Mjc3YjAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTg4MSw3ICYjNDM7ODgxLDEyIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGRlZmVyO1xuIFxuLVx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4mIzQzO1x0cmV0ID0gcmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbiBcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG5AQCAtMTAwNCwxMSAmIzQzOzEwMDksMTcgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRrYWRkciA9IGFyZW5hX3ZtX3N0YXJ0ICYjNDM7IHMtXHUwMDNldWFkZHI7XG4gXHRcdHBnb2ZmID0gY29tcHV0ZV9wZ29mZihhcmVuYSwgcy1cdTAwM2V1YWRkcik7XG4gXG4mIzQzO1x0XHQvKiBNYXJrIHRoZSByYW5nZSBhcyBmcmVlIGJlZm9yZSBjbGVhcmluZyBQVEVzIHNvIHRoYXRcbiYjNDM7XHRcdCAqIGlmIHRoZSByYW5nZSB0cmVlIHVwZGF0ZSBmYWlscyB3ZSBsZWF2ZSB0aGUgUFRFc1xuJiM0MztcdFx0ICogaW50YWN0LCBhdm9pZGluZyBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIHdoZXJlIHBhZ2VzXG4mIzQzO1x0XHQgKiBhcmUgZnJlZWQgYnV0IHRoZSBhcmVuYSBmcmVlIHRyZWUgZG9lcyBub3QgdHJhY2sgdGhlbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3QgcGFnZXMgaW4gZnJlZV9wYWdlcyBsbGlzdCAqL1xuIFx0XHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHRcdFx0ICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgXHUwMDI2Y2RhdGEpO1xuLVxuLVx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbiBcdH1cbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbmluZGV4IDJmMjg4ODZmM2ZmNzUuLjQ1NTYwZTlmMGQwN2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbkBAIC0xNDMsMTYgJiM0MzsxNDMsMjEgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRcdGlmIChybi1cdTAwM2Vybl9zdGFydCBcdTAwM2Mgc3RhcnQgXHUwMDI2XHUwMDI2IHJuLVx1MDAzZXJuX2xhc3QgXHUwMDNlIGxhc3QpIHtcbiBcdFx0XHR1MzIgb2xkX2xhc3QgPSBybi1cdTAwM2Vybl9sYXN0O1xuIFxuJiM0MztcdFx0XHQvKiBQcmUtYWxsb2NhdGUgdGhlIHJpZ2h0LWhhbGYgbm9kZSBiZWZvcmUgbW9kaWZ5aW5nXG4mIzQzO1x0XHRcdCAqIHRoZSB0cmVlLiBJZiBhbGxvY2F0aW9uIGZhaWxzIHdlIHJldHVybiAtRU5PTUVNXG4mIzQzO1x0XHRcdCAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLFxuJiM0MztcdFx0XHRcdFx0XHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuJiM0MztcdFx0XHRpZiAoIW5ld19ybilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4gXHRcdFx0LyogT3ZlcmxhcHMgd2l0aCB0aGUgZW50aXJlIGNsZWFyaW5nIHJhbmdlICovXG4gXHRcdFx0cmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7XG4gXHRcdFx0cm4tXHUwMDNlcm5fbGFzdCA9IHN0YXJ0IC0gMTtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTtcbiBcbi1cdFx0XHQvKiBBZGQgYSByYW5nZSAqL1xuLVx0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsXG4tXHRcdFx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbi1cdFx0XHRpZiAoIW5ld19ybilcbi1cdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHQvKiBBZGQgcmlnaHQtaGFsZiByYW5nZSAqL1xuIFx0XHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IGxhc3QgJiM0MzsgMTtcbiBcdFx0XHRuZXdfcm4tXHUwMDNlcm5fbGFzdCA9IG9sZF9sYXN0O1xuIFx0XHRcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcbkBAIC0xOTMsNiAmIzQzOzE5OCw3IEBAIGludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4ge1xuIFx0dTMyIGxhc3QgPSBzdGFydCAmIzQzOyBsZW4gLSAxO1xuJiM0MztcdHN0cnVjdCByYW5nZV9ub2RlICpuZXdfcm4gPSBOVUxMO1xuIFx0c3RydWN0IHJhbmdlX25vZGUgKnJpZ2h0O1xuIFx0c3RydWN0IHJhbmdlX25vZGUgKmxlZnQ7XG4gXHRpbnQgZXJyO1xuQEAgLTIwMiwyMCAmIzQzOzIwOCw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9zdGFydCBcdTAwM2M9IHN0YXJ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX2xhc3QgXHUwMDNlPSBsYXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgbmV3IG5vZGUgaXMgbmVlZGVkIG9ubHkgd2hlbiB0aGUgcmFuZ2UgaGFzIG5vIGFkamFjZW50IGZyZWVcbiYjNDM7XHQgKiByYW5nZSBvbiBlaXRoZXIgc2lkZS4gIFRoaXMgaXMga25vd24gYmVmb3JlIGNsZWFyaW5nOiBhbnkgcmFuZ2VcbiYjNDM7XHQgKiBjb3ZlcmluZyBzdGFydCAtIDEgb3IgbGFzdCAmIzQzOyAxIHN1cnZpdmVzIHRoZSBjbGVhciBhcyBhbiBhZGphY2VudFxuJiM0MztcdCAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvXG4mIzQzO1x0ICogYSBmYWlsdXJlIGxlYXZlcyB0aGUgcmFuZ2UgdHJlZSB1bm1vZGlmaWVkXG4mIzQzO1x0ICovXG4mIzQzO1x0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcbiYjNDM7XHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgJiM0MzsgMSwgbGFzdCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAoIWxlZnQgXHUwMDI2XHUwMDI2ICFyaWdodCkge1xuJiM0MztcdFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSxcbiYjNDM7XHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4mIzQzO1x0XHRpZiAoIW5ld19ybilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIENsZWFyIG91dCBldmVyeXRoaW5nIGluIHRoZSByYW5nZSB3ZSB3YW50IHRvIHNldC4gKi9cbiBcdGVyciA9IHJhbmdlX3RyZWVfY2xlYXIocnQsIHN0YXJ0LCBsZW4pO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWVfbmV3O1xuIFxuIFx0LyogRG8gd2UgaGF2ZSBhIGxlZnQtYWRqYWNlbnQgcmFuZ2UgPyAqL1xuIFx0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcbi1cdGlmIChsZWZ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX2xhc3QgJiM0MzsgMSAhPSBzdGFydClcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCAmIzQzOyAxICE9IHN0YXJ0KSB7XG4mIzQzO1x0XHRlcnIgPSAtRUZBVUxUO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4mIzQzO1x0fVxuIFxuIFx0LyogRG8gd2UgaGF2ZSBhIHJpZ2h0LWFkamFjZW50IHJhbmdlID8gKi9cbiBcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCAmIzQzOyAxLCBsYXN0ICYjNDM7IDEpO1xuLVx0aWYgKHJpZ2h0IFx1MDAyNlx1MDAyNiByaWdodC1cdTAwM2Vybl9zdGFydCAhPSBsYXN0ICYjNDM7IDEpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdGlmIChyaWdodCBcdTAwMjZcdTAwMjYgcmlnaHQtXHUwMDNlcm5fc3RhcnQgIT0gbGFzdCAmIzQzOyAxKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUZBVUxUO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IHJpZ2h0KSB7XG4gXHRcdC8qIENvbWJpbmUgbGVmdCBhbmQgcmlnaHQgYWRqYWNlbnQgcmFuZ2VzICovXG5AQCAtMjM1LDE0ICYjNDM7MjYxLDE2IEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBcdFx0cmlnaHQtXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbiBcdFx0cmFuZ2VfaXRfaW5zZXJ0KHJpZ2h0LCBydCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRsZWZ0ID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcbi1cdFx0aWYgKCFsZWZ0KVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRsZWZ0LVx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XG4tXHRcdGxlZnQtXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XG4tXHRcdHJhbmdlX2l0X2luc2VydChsZWZ0LCBydCk7XG4mIzQzO1x0XHQvKiBObyBhZGphY2VudCByYW5nZXM7IHVzZSB0aGUgcHJlLWFsbG9jYXRlZCBub2RlICovXG4mIzQzO1x0XHRuZXdfcm4tXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbiYjNDM7XHRcdG5ld19ybi1cdTAwM2Vybl9sYXN0ID0gbGFzdDtcbiYjNDM7XHRcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2ZyZWVfbmV3OlxuJiM0MztcdGtmcmVlX25vbG9jayhuZXdfcm4pO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYW5nZV90cmVlX3NldCYjMzQ7LAogICAgJiMzNDtyYW5nZV90cmVlX2NsZWFyJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YXJlbmFfZnJlZV93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGluIEJQRiBhcmVuYSYjMzk7cyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IG1vZGlmaWVzIHRoZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbm9kZXMgYmVmb3JlIGFsdGVyaW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IHN0YXRlcy4gSXQgYWxzbyB1cGRhdGVzIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCB0byBoYW5kbGUgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcGF0aHMgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0ZWE1ZjI3MDZmMTBlNmM5NTJlNWE1NGIwY2U2YWFmOWNlYmIyM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDAzOjI1OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jCmluZGV4IDU1NWVlMjUzMWVmOTguLjMwNzQ1ZGE5Mjc3YjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FyZW5hLmMKQEAgLTg4MSw3ICYjNDM7ODgxLDEyIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsCiAJaWYgKHJldCkKIAkJZ290byBkZWZlcjsKIAotCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiwgcGFnZV9jbnQpOwomIzQzOwlyZXQgPSByYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CQlicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKIAlpbml0X2xsaXN0X2hlYWQoJmFtcDtmcmVlX3BhZ2VzKTsKIAljZGF0YS5hcmVuYSA9IGFyZW5hOwpAQCAtMTAwNCwxMSAmIzQzOzEwMDksMTcgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlrYWRkciA9IGFyZW5hX3ZtX3N0YXJ0ICYjNDM7IHMtJmd0O3VhZGRyOwogCQlwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHMtJmd0O3VhZGRyKTsKIAomIzQzOwkJLyogTWFyayB0aGUgcmFuZ2UgYXMgZnJlZSBiZWZvcmUgY2xlYXJpbmcgUFRFcyBzbyB0aGF0CiYjNDM7CQkgKiBpZiB0aGUgcmFuZ2UgdHJlZSB1cGRhdGUgZmFpbHMgd2UgbGVhdmUgdGhlIFBURXMKJiM0MzsJCSAqIGludGFjdCwgYXZvaWRpbmcgYW4gdW5yZWNvdmVyYWJsZSBzdGF0ZSB3aGVyZSBwYWdlcwomIzQzOwkJICogYXJlIGZyZWVkIGJ1dCB0aGUgYXJlbmEgZnJlZSB0cmVlIGRvZXMgbm90IHRyYWNrIHRoZW0uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJLyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovCiAJCWFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoJmFtcDtpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKIAkJCQkJICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgJmFtcDtjZGF0YSk7Ci0KLQkJcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiAJfQogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCmluZGV4IDJmMjg4ODZmM2ZmNzUuLjQ1NTYwZTlmMGQwN2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCkBAIC0xNDMsMTYgJiM0MzsxNDMsMjEgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiAJCWlmIChybi0mZ3Q7cm5fc3RhcnQgJmx0OyBzdGFydCAmYW1wOyZhbXA7IHJuLSZndDtybl9sYXN0ICZndDsgbGFzdCkgewogCQkJdTMyIG9sZF9sYXN0ID0gcm4tJmd0O3JuX2xhc3Q7CiAKJiM0MzsJCQkvKiBQcmUtYWxsb2NhdGUgdGhlIHJpZ2h0LWhhbGYgbm9kZSBiZWZvcmUgbW9kaWZ5aW5nCiYjNDM7CQkJICogdGhlIHRyZWUuIElmIGFsbG9jYXRpb24gZmFpbHMgd2UgcmV0dXJuIC1FTk9NRU0KJiM0MzsJCQkgKiB3aXRob3V0IGFsdGVyaW5nIHRoZSByYW5nZSB0cmVlLgomIzQzOwkJCSAqLwomIzQzOwkJCW5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksCiYjNDM7CQkJCQkJX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTsKJiM0MzsJCQlpZiAoIW5ld19ybikKJiM0MzsJCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiAJCQkvKiBPdmVybGFwcyB3aXRoIHRoZSBlbnRpcmUgY2xlYXJpbmcgcmFuZ2UgKi8KIAkJCXJhbmdlX2l0X3JlbW92ZShybiwgcnQpOwogCQkJcm4tJmd0O3JuX2xhc3QgPSBzdGFydCAtIDE7CiAJCQlyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTsKIAotCQkJLyogQWRkIGEgcmFuZ2UgKi8KLQkJCW5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsCi0JCQkJCQlOVU1BX05PX05PREUpOwotCQkJaWYgKCFuZXdfcm4pCi0JCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJLyogQWRkIHJpZ2h0LWhhbGYgcmFuZ2UgKi8KIAkJCW5ld19ybi0mZ3Q7cm5fc3RhcnQgPSBsYXN0ICYjNDM7IDE7CiAJCQluZXdfcm4tJmd0O3JuX2xhc3QgPSBvbGRfbGFzdDsKIAkJCXJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTsKQEAgLTE5Myw2ICYjNDM7MTk4LDcgQEAgaW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKQogaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKQogewogCXUzMiBsYXN0ID0gc3RhcnQgJiM0MzsgbGVuIC0gMTsKJiM0MzsJc3RydWN0IHJhbmdlX25vZGUgKm5ld19ybiA9IE5VTEw7CiAJc3RydWN0IHJhbmdlX25vZGUgKnJpZ2h0OwogCXN0cnVjdCByYW5nZV9ub2RlICpsZWZ0OwogCWludCBlcnI7CkBAIC0yMDIsMjAgJiM0MzsyMDgsNDAgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKQogCWlmIChsZWZ0ICZhbXA7JmFtcDsgbGVmdC0mZ3Q7cm5fc3RhcnQgJmx0Oz0gc3RhcnQgJmFtcDsmYW1wOyBsZWZ0LSZndDtybl9sYXN0ICZndDs9IGxhc3QpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgbmV3IG5vZGUgaXMgbmVlZGVkIG9ubHkgd2hlbiB0aGUgcmFuZ2UgaGFzIG5vIGFkamFjZW50IGZyZWUKJiM0MzsJICogcmFuZ2Ugb24gZWl0aGVyIHNpZGUuICBUaGlzIGlzIGtub3duIGJlZm9yZSBjbGVhcmluZzogYW55IHJhbmdlCiYjNDM7CSAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICYjNDM7IDEgc3Vydml2ZXMgdGhlIGNsZWFyIGFzIGFuIGFkamFjZW50CiYjNDM7CSAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvCiYjNDM7CSAqIGEgZmFpbHVyZSBsZWF2ZXMgdGhlIHJhbmdlIHRyZWUgdW5tb2RpZmllZAomIzQzOwkgKi8KJiM0MzsJbGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTsKJiM0MzsJcmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICYjNDM7IDEsIGxhc3QgJiM0MzsgMSk7CiYjNDM7CWlmICghbGVmdCAmYW1wOyZhbXA7ICFyaWdodCkgewomIzQzOwkJbmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwKJiM0MzsJCQkJCV9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7CiYjNDM7CQlpZiAoIW5ld19ybikKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwogCS8qIENsZWFyIG91dCBldmVyeXRoaW5nIGluIHRoZSByYW5nZSB3ZSB3YW50IHRvIHNldC4gKi8KIAllcnIgPSByYW5nZV90cmVlX2NsZWFyKHJ0LCBzdGFydCwgbGVuKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBvdXRfZnJlZV9uZXc7CiAKIAkvKiBEbyB3ZSBoYXZlIGEgbGVmdC1hZGphY2VudCByYW5nZSA/ICovCiAJbGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTsKLQlpZiAobGVmdCAmYW1wOyZhbXA7IGxlZnQtJmd0O3JuX2xhc3QgJiM0MzsgMSAhPSBzdGFydCkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWlmIChsZWZ0ICZhbXA7JmFtcDsgbGVmdC0mZ3Q7cm5fbGFzdCAmIzQzOyAxICE9IHN0YXJ0KSB7CiYjNDM7CQllcnIgPSAtRUZBVUxUOwomIzQzOwkJZ290byBvdXRfZnJlZV9uZXc7CiYjNDM7CX0KIAogCS8qIERvIHdlIGhhdmUgYSByaWdodC1hZGphY2VudCByYW5nZSA/ICovCiAJcmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICYjNDM7IDEsIGxhc3QgJiM0MzsgMSk7Ci0JaWYgKHJpZ2h0ICZhbXA7JmFtcDsgcmlnaHQtJmd0O3JuX3N0YXJ0ICE9IGxhc3QgJiM0MzsgMSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWlmIChyaWdodCAmYW1wOyZhbXA7IHJpZ2h0LSZndDtybl9zdGFydCAhPSBsYXN0ICYjNDM7IDEpIHsKJiM0MzsJCWVyciA9IC1FRkFVTFQ7CiYjNDM7CQlnb3RvIG91dF9mcmVlX25ldzsKJiM0MzsJfQogCiAJaWYgKGxlZnQgJmFtcDsmYW1wOyByaWdodCkgewogCQkvKiBDb21iaW5lIGxlZnQgYW5kIHJpZ2h0IGFkamFjZW50IHJhbmdlcyAqLwpAQCAtMjM1LDE0ICYjNDM7MjYxLDE2IEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIAkJcmlnaHQtJmd0O3JuX3N0YXJ0ID0gc3RhcnQ7CiAJCXJhbmdlX2l0X2luc2VydChyaWdodCwgcnQpOwogCX0gZWxzZSB7Ci0JCWxlZnQgPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpOwotCQlpZiAoIWxlZnQpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbGVmdC0mZ3Q7cm5fc3RhcnQgPSBzdGFydDsKLQkJbGVmdC0mZ3Q7cm5fbGFzdCA9IGxhc3Q7Ci0JCXJhbmdlX2l0X2luc2VydChsZWZ0LCBydCk7CiYjNDM7CQkvKiBObyBhZGphY2VudCByYW5nZXM7IHVzZSB0aGUgcHJlLWFsbG9jYXRlZCBub2RlICovCiYjNDM7CQluZXdfcm4tJmd0O3JuX3N0YXJ0ID0gc3RhcnQ7CiYjNDM7CQluZXdfcm4tJmd0O3JuX2xhc3QgPSBsYXN0OwomIzQzOwkJcmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpOwogCX0KIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZnJlZV9uZXc6CiYjNDM7CWtmcmVlX25vbG9jayhuZXdfcm4pOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIHJhbmdlX3RyZWVfZGVzdHJveShzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEFyZW5hIGFuZCBSYW5nZSBUcmVlIFBhdGNoIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9yYW5nZV90cmVlLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGluIGhvdyBgcmFuZ2VfdHJlZV9zZXRgIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHByZS1hbGxvY2F0aW5nIG5vZGVzIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIGFuZCB0aGUgcGF0Y2ggdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gZGVhbCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYHJhbmdlX3RyZWVfc2V0YCBub3cuIFRoaXMgaXMgYWxsIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYW5kIGl0IGRpcmVjdGx5IHJlbGF0ZXMgdG8gQlBGIGFyZW5hcyBhbmQgcmFuZ2UgdHJlZXMsIHNvIGZ1enppbmcgdGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGltcG9ydGFudC4KClJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gcGF5IGF0dGVudGlvbiB0byBoZXJlLiBJIG5lZWQgdG8gemVybyBpbiBvbjogYGFyZW5hX2ZyZWVfcGFnZXNgLCBgYXJlbmFfZnJlZV93b3JrZXJgLCBgcmFuZ2VfdHJlZV9jbGVhcmAsIGFuZCBvZiBjb3Vyc2UsIGByYW5nZV90cmVlX3NldGAuIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbiBhbmQgYW5hbHl6ZSB0aGVtLgoKTm93LCBiZWZvcmUgSSBzdGFydCBidWlsZGluZyB1cCBhIGZ1enppbmcgc3RyYXRlZ3ksIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdXNhZ2VzIG9mIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYHJhbmdlX3RyZWVfc2V0YCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBhbnkgcG90ZW50aWFsIGNvbmZpZyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYy00OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAtXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTIxMD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjI5LVx0ICogU2tpcCB0aGUgcGVyLWFyZW5hIHNjcmF0Y2ggcGFnZS4gQSBrZXJuZWwgZmF1bHQgb24gYW4gdW5hbGxvY2F0ZWQgdWFkZHJcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzA6XHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xua2VybmVsL2JwZi9hcmVuYS5jLTIzMS1cdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY4PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcyLVx0XHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzM6XHRcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NzQtXHR9XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTc4OT1zdGF0aWMgdm9pZCB6YXBfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg0Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo4NDc6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODQ4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTA4ND12b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA5NjpfX2JwZl9rZnVuYyB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEwMi1cdFx0cmV0dXJuO1xua2VybmVsL2JwZi9hcmVuYS5jOjExMDM6XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIHRydWUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTExMDQtfVxua2VybmVsL2JwZi9hcmVuYS5jLTExMDUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwNjp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxua2VybmVsL2JwZi9hcmVuYS5jLTExMDcte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMTEyLVx0XHRyZXR1cm47XG5rZXJuZWwvYnBmL2FyZW5hLmM6MTExMzpcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTExMTQtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0xMTMyPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEzMzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTM3PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDItXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMDM6XHRLRl9icGZfYXJlbmFfZnJlZV9wYWdlcyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwNC1cdEtGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI5NT1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjk2OkJURl9JRChmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI5Ny1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODI3PXN0YXRpYyBib29sIGlzX2JwZl9hcmVuYV9rZnVuYyh1MzIgYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyOS1cdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTgzMDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODMxLVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXNdO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTgxNz1zdGF0aWMgaW50IHNwZWNpYWxpemVfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjLCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODU3LVx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg1ODpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NTktXHRcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg2MDpcdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2MS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIEJQRiBBcmVuYSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBCUEYgYXJlbmFzIGFuZCB3YW50IHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIGRlZmluaW5nIGFuZCBkb2N1bWVudGluZyB0aGVzZSB0eXBlcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBhbnkgc3BlY2lmaWMgZmxhZ3MsIHNldHRpbmdzLCBvciBjb21waWxlLXRpbWUgb3B0aW9ucyByZWxhdGVkIHRvIEJQRiBhcmVuYXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3IgbWlnaHQgbmVlZCB0byB0d2VhayBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgYXJlIGluIHBsYWNlIGFuZCBwb3RlbnRpYWxseSBndWlkZSBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgcmVsZXZhbnQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTI0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnkgb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRiBDb21waWxhdGlvbiBQcm9jZXNzKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQlBGIGluZnJhc3RydWN0dXJlIGhhbmRsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGtleSBmaWxlcyBsaWtlIGBhcmVuYS5jYCBhbmQgYHJhbmdlX3RyZWUuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIHRoZSBjb21waWxlciBmbGFncyB1c2VkIGZvciB0aGVzZSBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgdGFyZ2V0LXNwZWNpZmljIGluc3RydWN0aW9ucyByZWxldmFudCB0byB0aG9zZSBmdW5jdGlvbmFsaXRpZXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bnJhdmVsIHRoZSBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSYjMzk7bSB0cnlpbmcgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseSBmb3IgQlBGOgoKKipCUEYgUmVxdWlyZW1lbnRzIGFuZCBLZXkgRnVuY3Rpb24gRXhwbG9yYXRpb24qKgoKQWxyaWdodCwgSSBrbm93IEkmIzM5O20gd29ya2luZyB3aXRoIEJQRiwgc28gdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIG9wdGlvbiBpcyBkZWZpbml0ZWx5IGEgbXVzdC1oYXZlLiBUaGF0JiMzOTtzIGZ1bmRhbWVudGFsLiBBbmQgbmF0dXJhbGx5LCBzaW5jZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBydW5uaW5nIGNvZGUgZWZmZWN0aXZlbHksIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgbmVlZCB0byBiZSBlbmFibGVkIGFuZCBzZXQgdG8gJiMzOTt5JiMzOTsuIFRoYXQmIzM5O3MganVzdCBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGlzIGNvbnRleHQuCgpOb3csIG15IG5leHQgbW92ZSBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBvciBzdGF0aWMuIEtub3dpbmcgdGhlaXIgc2NvcGUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIGNhbiBpbnRlcmFjdCB3aXRoIHRoZXNlIGNvbXBvbmVudHMgYW5kIHRoZWlyIG92ZXJhbGwgYXZhaWxhYmlsaXR5LiBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBJIHN0cnVjdHVyZSBteSBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zMTktXHRyYW5nZV90cmVlX2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcdGVyciA9IHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCAwLCBhdHRyLVx1MDAzZW1heF9lbnRyaWVzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjEtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cdGlmIChyZXQpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1MjM6XHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUyNC1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI4LVx0aWYgKHJldCkge1xua2VybmVsL2JwZi9hcmVuYS5jOjUyOTpcdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTMwLVx0XHRmcmVlX3BhZ2VzX25vbG9jayhwYWdlLCAwKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY4PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE0LVx0aWYgKHVhZGRyKSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzE1Olx0XHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXHRcdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTc2OC1vdXQ6XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY5Olx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmICYjNDM7IG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc3MC1cdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDc9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg4My1cbmtlcm5lbC9icGYvYXJlbmEuYzo4ODQ6XHRyZXQgPSByYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy04ODUtXHRpZiAocmV0KSB7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTk0ND1zdGF0aWMgaW50IGFyZW5hX3Jlc2VydmVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIHUzMiBwYWdlX2NudClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTYyLVx0LyogQ2Fubm90IGd1YXJkIGFscmVhZHkgYWxsb2NhdGVkIHBhZ2VzLiAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjk2MzpcdHJldCA9IGlzX3JhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTk2NC1cdGlmIChyZXQpIHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTc4PXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxNi1cdFx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTAxNzpcdFx0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxua2VybmVsL2JwZi9hcmVuYS5jLTEwMTgtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjYtICogQXQgaW5pdCB0aW1lOlxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6Mjc6ICogICByYW5nZV90cmVlX3NldChydCwgMCwgbWF4KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI4LSAqIFRoZW46XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMzItICogdG8gZmluZCBmcmVlIHJhbmdlIGFuZCBtYXJrIHNsb3RzIGFzIGFsbG9jYXRlZCBhbmQgbGF0ZXI6XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzozMzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCBzdGFydCwgbGVuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTM0LSAqIHRvIG1hcmsgYXMgdW5hbGxvY2F0ZWQgYWZ0ZXIgdXNlLlxuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTEzNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xODQtLyogSXMgdGhlIHdob2xlIHJhbmdlIHNldCA/ICovXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxODU6aW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg2LXtcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTctLyogU2V0IHRoZSByYW5nZSBpbiB0aGlzIHJhbmdlIHRyZWUgKi9cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE5ODppbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTkte1xuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oPTE2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oOjE3OmludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbik7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaDoxODppbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pO1xua2VybmVsL2JwZi9yYW5nZV90cmVlLmgtMTktczY0IHJhbmdlX3RyZWVfZmluZChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBsZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhlIFByb3Bvc2VkIEJQRiBBcmVuYSBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBCUEYgYXJlbmEgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIGByYW5nZV90cmVlX3NldGAsIGByYW5nZV90cmVlX2NsZWFyYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50cyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHByb3Bvc2VkIGNoYW5nZXMgd2lsbCBhZmZlY3QgdGhlIGtlcm5lbC4KCkZpcnN0LCBJIG5vdGUgdGhhdCBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGByYW5nZV90cmVlLmNgIGFuZCBtYWRlIGF2YWlsYWJsZSB2aWEgYHJhbmdlX3RyZWUuaGAsIHNvIHRoZXkgYXJlICpub3QqIHN0YXRpYy4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMuCgpOZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgLiBUaGV5ICphcmUqIGRlZmluZWQgYXMgc3RhdGljIHdpdGhpbiBgYXJlbmEuY2AsIHdoaWNoIG1ha2VzIG1lIHBhdXNlLiBHaXZlbiB0aGUgZGlyZWN0aXZlLCB0aGVzZSBzZWVtIGxlc3MgaWRlYWwsIGFzIHRoZSBzdGF0aWMgbmF0dXJlIGhpbnRzIGF0IGlubGluaW5nLiBIb3dldmVyLCBgYXJlbmFfZnJlZV9wYWdlc2AgYXBwZWFycyB0byBiZSBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMsIHNwZWNpZmljYWxseSBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIG11bHRpcGxlIGxvY2F0aW9ucyBtYWtlcyBpbmxpbmluZyBsZXNzIGxpa2VseS4gVG8gYmUgY29uc2VydmF0aXZlLCBhbmQgY292ZXIgYWxsIGJhc2VzLCBJIHNob3VsZCBwcm9iYWJseSBpbmNsdWRlIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCBhcyB3ZWxsLiBXYWl0LCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGlzIGEga2Z1bmMuCgpUaGVyZWZvcmUsIHRoZSBrZXkgZm9jdXMgaXMgb246CgoqICAgYHJhbmdlX3RyZWVfc2V0YAoqICAgYHJhbmdlX3RyZWVfY2xlYXJgCiogICBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgCiogICBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAKCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIG9wdGltYWwgQVBJIGVudHJ5cG9pbnRzIGZvciB0aGlzIHRhc2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9ucyB0byBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgYXJlIGJlaW5nIGhhbmRsZWQsIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIGFyZSB0YXJnZXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MjEwPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yMjktXHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0xMDg0PXZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA5NS1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDk2Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTcte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA1LVxua2VybmVsL2JwZi9hcmVuYS5jOjExMDY6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA3LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzMj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jOjExMzM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jLTExMzQtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTEzNz1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjAyLVx0S0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjAzOlx0S0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDQtXHRLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyOTU9QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI5NjpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyOTctQlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTgyNz1zdGF0aWMgYm9vbCBpc19icGZfYXJlbmFfa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4MjktXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MzA6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgzMS1cdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzXTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4MTc9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg1Ny1cdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NTg6XHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODU5LVx0XHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zbGVlcGFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NjA6XHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTg1CgkJCQkJCQlvdXRwdXQ6IDE5MAoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgQlBGIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaWRlbnRpZmllcyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYW5kLCB0aGVyZWZvcmUsIGFyZSBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlIGxpc3QgaW5jbHVkZXMgYHJhbmdlX3RyZWVfc2V0YCwgYHJhbmdlX3RyZWVfY2xlYXJgLCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLiBJIGFsc28gbmVlZCB0byBpbmNsdWRlIGBhcmVuYV9mcmVlX3dvcmtlcmAsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBiZWNhdXNlIGl0IHJlcHJlc2VudHMgYSBkaXN0aW5jdCBleGVjdXRpb24gcGF0aCB0aGF0JiMzOTtzIG5vdyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guCgpJJiMzOTttIG1ha2luZyBhIG1lbnRhbCBub3RlIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBpcyBgQlBGX1NZU0NBTExgLiBXaGlsZSBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIGFyZSBwcmV0dHkgc3RhbmRhcmQsIEkgZG9uJiMzOTt0IHRoaW5rIHRoZXkmIzM5O3JlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoaXMgc3BlY2lmaWMgY2hhbmdlLiBgQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIGVuYWJsZXIgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHBhdGNoJiMzOTtzIGNvcmUgbG9naWMuIEl0JiMzOTtzIHJlYWxseSBhYm91dCBlbmhhbmNpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgQlBGJiMzOTtzIGFyZW5hIG1hbmFnZW1lbnQuIFRoZSBwYXRjaCBwcm9hY3RpdmVseSBhZGRyZXNzZXMgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgd2l0aGluIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBieSBpbXBsZW1lbnRpbmcgcHJlLWFsbG9jYXRpb24gb2Ygbm9kZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGFpbXMgdG8gcHJldmVudCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGNvcnJ1cHRpb24gdGhhdCBjb3VsZCBhcmlzZSBkdXJpbmcgcmFuZ2UgdHJlZSBtYW5pcHVsYXRpb24uIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGVmZmVjdHMgb2YgdGhlIGByYW5nZV90cmVlX3NldGAgY2hhbmdlcyB0byBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHNwZWNpZmljYWxseSB0aGVpciBmb2N1cyBvbiBlcnJvciBoYW5kbGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHJhbmdlIHRyZWUsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEl0JiMzOTtzIGltcGVyYXRpdmUgdG8gdmFsaWRhdGUgdGhlIGNvcnJlY3QgYmVoYXZpb3Igb2YgdGhlIGVycm9yIHBhdGhzIGFuZCBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgdHJlZSBvcGVyYXRpb25zIHVuZGVyIHZhcmlvdXMgY29uZGl0aW9ucywgZXNwZWNpYWxseSB1bmRlciBtZW1vcnkgcHJlc3N1cmUgb3IgYWxsb2NhdGlvbiBmYWlsdXJlcy4KClRoZXJlZm9yZSwgdGhlIHJlc3BvbnNlIHNob3VsZCBiZSBhcyBmb2xsb3dzOgoKV29ydGhGdXp6aW5nOiB0cnVlCkZvY3VzU3ltYm9sczoKLSBgcmFuZ2VfdHJlZV9zZXRgCi0gYHJhbmdlX3RyZWVfY2xlYXJgCi0gYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYAotIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYAotIGBhcmVuYV9mcmVlX3dvcmtlcmAKCkVuYWJsZUNvbmZpZ3M6Ci0gYEJQRl9TWVNDQUxMYAoKUmVhc29uaW5nOgpUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIEJQRiYjMzk7cyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IGludHJvZHVjZXMgbm9kZSBwcmUtYWxsb2NhdGlvbiB0byBhZGRyZXNzIHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgZW5zdXJpbmcgdGhlIHRyZWUmIzM5O3MgaW50ZWdyaXR5LiBGdXJ0aGVyIGNoYW5nZXMgY2FzY2FkZSBpbnRvIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYC4gQmVjYXVzZSB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGVycm9yIGhhbmRsaW5nIGFuZCByYW5nZSB0cmVlIG1hbmlwdWxhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBmdXp6aW5nIGlzIHJlcXVpcmVkIHRvIHZhbGlkYXRlIGJvdGggdGhlIGVycm9yIHBhdGhzIGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHRyZWUgbWFuaXB1bGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2FyZW5hX2ZyZWVfd29ya2VyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBtb2RpZmllcyB0aGUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG5vZGVzIGJlZm9yZSBhbHRlcmluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGluY29uc2lzdGVudCBzdGF0ZXMuIEl0IGFsc28gdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gaGFuZGxlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGhzIGFuZCB0cmVlIG1hbmlwdWxhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2FyZW5hX2ZyZWVfd29ya2VyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBtb2RpZmllcyB0aGUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG5vZGVzIGJlZm9yZSBhbHRlcmluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGluY29uc2lzdGVudCBzdGF0ZXMuIEl0IGFsc28gdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gaGFuZGxlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGhzIGFuZCB0cmVlIG1hbmlwdWxhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzoyNTo0OC4yMjI2NjM5OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDc0Mjg0NjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhbmdlX3RyZWVfc2V0XCIsXG4gICAgXCJyYW5nZV90cmVlX2NsZWFyXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZVwiLFxuICAgIFwiYXJlbmFfZnJlZV93b3JrZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gQlBGIGFyZW5hJ3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBtb2RpZmllcyB0aGUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG5vZGVzIGJlZm9yZSBhbHRlcmluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGluY29uc2lzdGVudCBzdGF0ZXMuIEl0IGFsc28gdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gaGFuZGxlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGhzIGFuZCB0cmVlIG1hbmlwdWxhdGlvbnMgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjQ4LjIyMjY3NDA1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTIzMDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc0ZWE1ZjI3MDZmMTBlNmM5NTJlNWE1NGIwY2U2YWFmOWNlYmIyM2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAwMzoyNTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcXG5pbmRleCA1NTVlZTI1MzFlZjk4Li4zMDc0NWRhOTI3N2IwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbkBAIC04ODEsNyArODgxLDEyIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZGVmZXI7XFxuIFxcbi1cXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbitcXHRyZXQgPSByYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4gXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZmcmVlX3BhZ2VzKTtcXG4gXFx0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcXG5AQCAtMTAwNCwxMSArMTAwOSwxNyBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGthZGRyID0gYXJlbmFfdm1fc3RhcnQgKyBzLVxcdTAwM2V1YWRkcjtcXG4gXFx0XFx0cGdvZmYgPSBjb21wdXRlX3Bnb2ZmKGFyZW5hLCBzLVxcdTAwM2V1YWRkcik7XFxuIFxcbitcXHRcXHQvKiBNYXJrIHRoZSByYW5nZSBhcyBmcmVlIGJlZm9yZSBjbGVhcmluZyBQVEVzIHNvIHRoYXRcXG4rXFx0XFx0ICogaWYgdGhlIHJhbmdlIHRyZWUgdXBkYXRlIGZhaWxzIHdlIGxlYXZlIHRoZSBQVEVzXFxuK1xcdFxcdCAqIGludGFjdCwgYXZvaWRpbmcgYW4gdW5yZWNvdmVyYWJsZSBzdGF0ZSB3aGVyZSBwYWdlc1xcbitcXHRcXHQgKiBhcmUgZnJlZWQgYnV0IHRoZSBhcmVuYSBmcmVlIHRyZWUgZG9lcyBub3QgdHJhY2sgdGhlbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3QgcGFnZXMgaW4gZnJlZV9wYWdlcyBsbGlzdCAqL1xcbiBcXHRcXHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFxcdTAwMjZpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgXFx1MDAyNmNkYXRhKTtcXG4tXFxuLVxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxuIFxcdH1cXG4gXFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcXG5pbmRleCAyZjI4ODg2ZjNmZjc1Li40NTU2MGU5ZjBkMDdlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXFxuKysrIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcXG5AQCAtMTQzLDE2ICsxNDMsMjEgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxuIFxcdFxcdGlmIChybi1cXHUwMDNlcm5fc3RhcnQgXFx1MDAzYyBzdGFydCBcXHUwMDI2XFx1MDAyNiBybi1cXHUwMDNlcm5fbGFzdCBcXHUwMDNlIGxhc3QpIHtcXG4gXFx0XFx0XFx0dTMyIG9sZF9sYXN0ID0gcm4tXFx1MDAzZXJuX2xhc3Q7XFxuIFxcbitcXHRcXHRcXHQvKiBQcmUtYWxsb2NhdGUgdGhlIHJpZ2h0LWhhbGYgbm9kZSBiZWZvcmUgbW9kaWZ5aW5nXFxuK1xcdFxcdFxcdCAqIHRoZSB0cmVlLiBJZiBhbGxvY2F0aW9uIGZhaWxzIHdlIHJldHVybiAtRU5PTUVNXFxuK1xcdFxcdFxcdCAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xcbitcXHRcXHRcXHRpZiAoIW5ld19ybilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbiBcXHRcXHRcXHQvKiBPdmVybGFwcyB3aXRoIHRoZSBlbnRpcmUgY2xlYXJpbmcgcmFuZ2UgKi9cXG4gXFx0XFx0XFx0cmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7XFxuIFxcdFxcdFxcdHJuLVxcdTAwM2Vybl9sYXN0ID0gc3RhcnQgLSAxO1xcbiBcXHRcXHRcXHRyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTtcXG4gXFxuLVxcdFxcdFxcdC8qIEFkZCBhIHJhbmdlICovXFxuLVxcdFxcdFxcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuLVxcdFxcdFxcdGlmICghbmV3X3JuKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0LyogQWRkIHJpZ2h0LWhhbGYgcmFuZ2UgKi9cXG4gXFx0XFx0XFx0bmV3X3JuLVxcdTAwM2Vybl9zdGFydCA9IGxhc3QgKyAxO1xcbiBcXHRcXHRcXHRuZXdfcm4tXFx1MDAzZXJuX2xhc3QgPSBvbGRfbGFzdDtcXG4gXFx0XFx0XFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xcbkBAIC0xOTMsNiArMTk4LDcgQEAgaW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxuIHtcXG4gXFx0dTMyIGxhc3QgPSBzdGFydCArIGxlbiAtIDE7XFxuK1xcdHN0cnVjdCByYW5nZV9ub2RlICpuZXdfcm4gPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmlnaHQ7XFxuIFxcdHN0cnVjdCByYW5nZV9ub2RlICpsZWZ0O1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0yMDIsMjAgKzIwOCw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxuIFxcdGlmIChsZWZ0IFxcdTAwMjZcXHUwMDI2IGxlZnQtXFx1MDAzZXJuX3N0YXJ0IFxcdTAwM2M9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGxlZnQtXFx1MDAzZXJuX2xhc3QgXFx1MDAzZT0gbGFzdClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIG5ldyBub2RlIGlzIG5lZWRlZCBvbmx5IHdoZW4gdGhlIHJhbmdlIGhhcyBubyBhZGphY2VudCBmcmVlXFxuK1xcdCAqIHJhbmdlIG9uIGVpdGhlciBzaWRlLiAgVGhpcyBpcyBrbm93biBiZWZvcmUgY2xlYXJpbmc6IGFueSByYW5nZVxcbitcXHQgKiBjb3ZlcmluZyBzdGFydCAtIDEgb3IgbGFzdCArIDEgc3Vydml2ZXMgdGhlIGNsZWFyIGFzIGFuIGFkamFjZW50XFxuK1xcdCAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvXFxuK1xcdCAqIGEgZmFpbHVyZSBsZWF2ZXMgdGhlIHJhbmdlIHRyZWUgdW5tb2RpZmllZFxcbitcXHQgKi9cXG4rXFx0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcXG4rXFx0cmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICsgMSwgbGFzdCArIDEpO1xcbitcXHRpZiAoIWxlZnQgXFx1MDAyNlxcdTAwMjYgIXJpZ2h0KSB7XFxuK1xcdFxcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXFxuK1xcdFxcdFxcdFxcdFxcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XFxuK1xcdFxcdGlmICghbmV3X3JuKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4gXFx0LyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqL1xcbiBcXHRlcnIgPSByYW5nZV90cmVlX2NsZWFyKHJ0LCBzdGFydCwgbGVuKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9uZXc7XFxuIFxcbiBcXHQvKiBEbyB3ZSBoYXZlIGEgbGVmdC1hZGphY2VudCByYW5nZSA/ICovXFxuIFxcdGxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7XFxuLVxcdGlmIChsZWZ0IFxcdTAwMjZcXHUwMDI2IGxlZnQtXFx1MDAzZXJuX2xhc3QgKyAxICE9IHN0YXJ0KVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aWYgKGxlZnQgXFx1MDAyNlxcdTAwMjYgbGVmdC1cXHUwMDNlcm5fbGFzdCArIDEgIT0gc3RhcnQpIHtcXG4rXFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9uZXc7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIERvIHdlIGhhdmUgYSByaWdodC1hZGphY2VudCByYW5nZSA/ICovXFxuIFxcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCArIDEsIGxhc3QgKyAxKTtcXG4tXFx0aWYgKHJpZ2h0IFxcdTAwMjZcXHUwMDI2IHJpZ2h0LVxcdTAwM2Vybl9zdGFydCAhPSBsYXN0ICsgMSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdGlmIChyaWdodCBcXHUwMDI2XFx1MDAyNiByaWdodC1cXHUwMDNlcm5fc3RhcnQgIT0gbGFzdCArIDEpIHtcXG4rXFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9uZXc7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChsZWZ0IFxcdTAwMjZcXHUwMDI2IHJpZ2h0KSB7XFxuIFxcdFxcdC8qIENvbWJpbmUgbGVmdCBhbmQgcmlnaHQgYWRqYWNlbnQgcmFuZ2VzICovXFxuQEAgLTIzNSwxNCArMjYxLDE2IEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4gXFx0XFx0cmlnaHQtXFx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XFxuIFxcdFxcdHJhbmdlX2l0X2luc2VydChyaWdodCwgcnQpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRsZWZ0ID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcXG4tXFx0XFx0aWYgKCFsZWZ0KVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0bGVmdC1cXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcXG4tXFx0XFx0bGVmdC1cXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XFxuLVxcdFxcdHJhbmdlX2l0X2luc2VydChsZWZ0LCBydCk7XFxuK1xcdFxcdC8qIE5vIGFkamFjZW50IHJhbmdlczsgdXNlIHRoZSBwcmUtYWxsb2NhdGVkIG5vZGUgKi9cXG4rXFx0XFx0bmV3X3JuLVxcdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xcbitcXHRcXHRuZXdfcm4tXFx1MDAzZXJuX2xhc3QgPSBsYXN0O1xcbitcXHRcXHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfZnJlZV9uZXc6XFxuK1xcdGtmcmVlX25vbG9jayhuZXdfcm4pO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiB2b2lkIHJhbmdlX3RyZWVfZGVzdHJveShzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjQ5LjU3NTAyOTM2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5MzkwNDY1NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmFuZ2VfdHJlZV9zZXRcIixcbiAgICBcInJhbmdlX3RyZWVfY2xlYXJcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlXCIsXG4gICAgXCJhcmVuYV9mcmVlX3dvcmtlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEncyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IG1vZGlmaWVzIHRoZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbm9kZXMgYmVmb3JlIGFsdGVyaW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IHN0YXRlcy4gSXQgYWxzbyB1cGRhdGVzIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCB0byBoYW5kbGUgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcGF0aHMgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzRlYTVmMjcwNmYxMGU2Yzk1MmU1YTU0YjBjZTZhYWY5Y2ViYjIzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDM6MjU6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDU1NWVlMjUzMWVmOTguLjMwNzQ1ZGE5Mjc3YjAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTg4MSw3ICs4ODEsMTIgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZGVmZXI7XG4gXG4tXHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbitcdHJldCA9IHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbitcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNmZyZWVfcGFnZXMpO1xuIFx0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcbkBAIC0xMDA0LDExICsxMDA5LDE3IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0a2FkZHIgPSBhcmVuYV92bV9zdGFydCArIHMtXHUwMDNldWFkZHI7XG4gXHRcdHBnb2ZmID0gY29tcHV0ZV9wZ29mZihhcmVuYSwgcy1cdTAwM2V1YWRkcik7XG4gXG4rXHRcdC8qIE1hcmsgdGhlIHJhbmdlIGFzIGZyZWUgYmVmb3JlIGNsZWFyaW5nIFBURXMgc28gdGhhdFxuK1x0XHQgKiBpZiB0aGUgcmFuZ2UgdHJlZSB1cGRhdGUgZmFpbHMgd2UgbGVhdmUgdGhlIFBURXNcbitcdFx0ICogaW50YWN0LCBhdm9pZGluZyBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIHdoZXJlIHBhZ2VzXG4rXHRcdCAqIGFyZSBmcmVlZCBidXQgdGhlIGFyZW5hIGZyZWUgdHJlZSBkb2VzIG5vdCB0cmFjayB0aGVtLlxuK1x0XHQgKi9cbitcdFx0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHQvKiBjbGVhciBwdGVzIGFuZCBjb2xsZWN0IHBhZ2VzIGluIGZyZWVfcGFnZXMgbGxpc3QgKi9cbiBcdFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gXHRcdFx0XHRcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFx1MDAyNmNkYXRhKTtcbi1cbi1cdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4gXHR9XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXG5pbmRleCAyZjI4ODg2ZjNmZjc1Li40NTU2MGU5ZjBkMDdlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbisrKyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXG5AQCAtMTQzLDE2ICsxNDMsMjEgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRcdGlmIChybi1cdTAwM2Vybl9zdGFydCBcdTAwM2Mgc3RhcnQgXHUwMDI2XHUwMDI2IHJuLVx1MDAzZXJuX2xhc3QgXHUwMDNlIGxhc3QpIHtcbiBcdFx0XHR1MzIgb2xkX2xhc3QgPSBybi1cdTAwM2Vybl9sYXN0O1xuIFxuK1x0XHRcdC8qIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmdcbitcdFx0XHQgKiB0aGUgdHJlZS4gSWYgYWxsb2NhdGlvbiBmYWlscyB3ZSByZXR1cm4gLUVOT01FTVxuK1x0XHRcdCAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuXG4rXHRcdFx0ICovXG4rXHRcdFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSxcbitcdFx0XHRcdFx0XHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuK1x0XHRcdGlmICghbmV3X3JuKVxuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4gXHRcdFx0LyogT3ZlcmxhcHMgd2l0aCB0aGUgZW50aXJlIGNsZWFyaW5nIHJhbmdlICovXG4gXHRcdFx0cmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7XG4gXHRcdFx0cm4tXHUwMDNlcm5fbGFzdCA9IHN0YXJ0IC0gMTtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTtcbiBcbi1cdFx0XHQvKiBBZGQgYSByYW5nZSAqL1xuLVx0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsXG4tXHRcdFx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbi1cdFx0XHRpZiAoIW5ld19ybilcbi1cdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdC8qIEFkZCByaWdodC1oYWxmIHJhbmdlICovXG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX3N0YXJ0ID0gbGFzdCArIDE7XG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX2xhc3QgPSBvbGRfbGFzdDtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XG5AQCAtMTkzLDYgKzE5OCw3IEBAIGludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4ge1xuIFx0dTMyIGxhc3QgPSBzdGFydCArIGxlbiAtIDE7XG4rXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbmV3X3JuID0gTlVMTDtcbiBcdHN0cnVjdCByYW5nZV9ub2RlICpyaWdodDtcbiBcdHN0cnVjdCByYW5nZV9ub2RlICpsZWZ0O1xuIFx0aW50IGVycjtcbkBAIC0yMDIsMjAgKzIwOCw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9zdGFydCBcdTAwM2M9IHN0YXJ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX2xhc3QgXHUwMDNlPSBsYXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBBIG5ldyBub2RlIGlzIG5lZWRlZCBvbmx5IHdoZW4gdGhlIHJhbmdlIGhhcyBubyBhZGphY2VudCBmcmVlXG4rXHQgKiByYW5nZSBvbiBlaXRoZXIgc2lkZS4gIFRoaXMgaXMga25vd24gYmVmb3JlIGNsZWFyaW5nOiBhbnkgcmFuZ2VcbitcdCAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICsgMSBzdXJ2aXZlcyB0aGUgY2xlYXIgYXMgYW4gYWRqYWNlbnRcbitcdCAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvXG4rXHQgKiBhIGZhaWx1cmUgbGVhdmVzIHRoZSByYW5nZSB0cmVlIHVubW9kaWZpZWRcbitcdCAqL1xuK1x0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcbitcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCArIDEsIGxhc3QgKyAxKTtcbitcdGlmICghbGVmdCBcdTAwMjZcdTAwMjYgIXJpZ2h0KSB7XG4rXHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXG4rXHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4rXHRcdGlmICghbmV3X3JuKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0LyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqL1xuIFx0ZXJyID0gcmFuZ2VfdHJlZV9jbGVhcihydCwgc3RhcnQsIGxlbik7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIG91dF9mcmVlX25ldztcbiBcbiBcdC8qIERvIHdlIGhhdmUgYSBsZWZ0LWFkamFjZW50IHJhbmdlID8gKi9cbiBcdGxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7XG4tXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydClcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydCkge1xuK1x0XHRlcnIgPSAtRUZBVUxUO1xuK1x0XHRnb3RvIG91dF9mcmVlX25ldztcbitcdH1cbiBcbiBcdC8qIERvIHdlIGhhdmUgYSByaWdodC1hZGphY2VudCByYW5nZSA/ICovXG4gXHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgKyAxLCBsYXN0ICsgMSk7XG4tXHRpZiAocmlnaHQgXHUwMDI2XHUwMDI2IHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgKyAxKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGlmIChyaWdodCBcdTAwMjZcdTAwMjYgcmlnaHQtXHUwMDNlcm5fc3RhcnQgIT0gbGFzdCArIDEpIHtcbitcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4rXHR9XG4gXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgcmlnaHQpIHtcbiBcdFx0LyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi9cbkBAIC0yMzUsMTQgKzI2MSwxNiBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRcdHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XG4gXHRcdHJhbmdlX2l0X2luc2VydChyaWdodCwgcnQpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bGVmdCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4tXHRcdGlmICghbGVmdClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bGVmdC1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuLVx0XHRsZWZ0LVx1MDAzZXJuX2xhc3QgPSBsYXN0O1xuLVx0XHRyYW5nZV9pdF9pbnNlcnQobGVmdCwgcnQpO1xuK1x0XHQvKiBObyBhZGphY2VudCByYW5nZXM7IHVzZSB0aGUgcHJlLWFsbG9jYXRlZCBub2RlICovXG4rXHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuK1x0XHRuZXdfcm4tXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XG4rXHRcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuK1xuK291dF9mcmVlX25ldzpcbitcdGtmcmVlX25vbG9jayhuZXdfcm4pO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCByYW5nZV90cmVlX2Rlc3Ryb3koc3RydWN0IHJhbmdlX3RyZWUgKnJ0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MjU6NDkuNTc1MDMzMDIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NTk4OTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgQXJlbmEgYW5kIFJhbmdlIFRyZWUgUGF0Y2ggUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2UgaXMgaW4gaG93IGByYW5nZV90cmVlX3NldGAgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcnMuIFNwZWNpZmljYWxseSwgaXQncyBwcmUtYWxsb2NhdGluZyBub2RlcyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlLCBhbmQgdGhlIHBhdGNoIHVwZGF0ZXMgYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgIHRvIGRlYWwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAgbm93LiBUaGlzIGlzIGFsbCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCBpdCBkaXJlY3RseSByZWxhdGVzIHRvIEJQRiBhcmVuYXMgYW5kIHJhbmdlIHRyZWVzLCBzbyBmdXp6aW5nIHRoaXMgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBpbXBvcnRhbnQuXG5cblJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBwYXkgYXR0ZW50aW9uIHRvIGhlcmUuIEkgbmVlZCB0byB6ZXJvIGluIG9uOiBgYXJlbmFfZnJlZV9wYWdlc2AsIGBhcmVuYV9mcmVlX3dvcmtlcmAsIGByYW5nZV90cmVlX2NsZWFyYCwgYW5kIG9mIGNvdXJzZSwgYHJhbmdlX3RyZWVfc2V0YC4gSSdsbCBuZWVkIHRvIHJlYWxseSBkaWcgaW4gYW5kIGFuYWx5emUgdGhlbS5cblxuTm93LCBiZWZvcmUgSSBzdGFydCBidWlsZGluZyB1cCBhIGZ1enppbmcgc3RyYXRlZ3ksIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBJJ2xsIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VhcmNoIGZvciB1c2FnZXMgb2YgYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGFueSBwb3RlbnRpYWwgY29uZmlnIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjUzLjc3MTAyNDk4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyNDU2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFfZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmMtNDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAtXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjEwPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTIyOS1cXHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzA6XFx0ICogc2NyYXRjaGVzIGl0cyBQVEUuIEEgbGF0ZXIgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKSBvdmVyIHRoYXQgcmFuZ2Ugd2Fsa3NcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVxcdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTc3Mi1cXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjc3MzpcXHRcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc3NC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9Nzg5PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjg0NzpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODQ4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMDg0PXZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDk2Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTAyLVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwMzpcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIHRydWUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA0LX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEwNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwNjp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTEyLVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTExMzpcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExNC19XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzMj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTMzOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcywgS0ZfQVJFTkFfQVJHMilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMzc9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjAyLVxcdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMDM6XFx0S0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjA0LVxcdEtGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjk1PUJURl9JRChmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjk2OkJURl9JRChmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyOTctQlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODI3PXN0YXRpYyBib29sIGlzX2JwZl9hcmVuYV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODI5LVxcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MzA6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODMxLVxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzXTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTgxNz1zdGF0aWMgaW50IHNwZWNpYWxpemVfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjLCBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NTctXFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg1ODpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg1OS1cXHRcXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg2MDpcXHRcXHRcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjEtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzoyNTo1My44NzEyNzUxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODMwMzUyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBCUEYgQXJlbmEgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IEJQRiBhcmVuYXMgYW5kIHdhbnQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBkZWZpbmluZyBhbmQgZG9jdW1lbnRpbmcgdGhlc2UgdHlwZXMgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBhbnkgc3BlY2lmaWMgZmxhZ3MsIHNldHRpbmdzLCBvciBjb21waWxlLXRpbWUgb3B0aW9ucyByZWxhdGVkIHRvIEJQRiBhcmVuYXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3IgbWlnaHQgbmVlZCB0byB0d2VhayBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgYXJlIGluIHBsYWNlIGFuZCBwb3RlbnRpYWxseSBndWlkZSBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgcmVsZXZhbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjU2LjY1NDMxMjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMjIyNzYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjU2Ljc2NzU0MzUzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTYyNzQzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgQ29tcGlsYXRpb24gUHJvY2VzcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQlBGIGluZnJhc3RydWN0dXJlIGhhbmRsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGtleSBmaWxlcyBsaWtlIGBhcmVuYS5jYCBhbmQgYHJhbmdlX3RyZWUuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgY29tcGlsZXIgZmxhZ3MgdXNlZCBmb3IgdGhlc2UgcGFydGljdWxhciBzb3VyY2UgZmlsZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIHRhcmdldC1zcGVjaWZpYyBpbnN0cnVjdGlvbnMgcmVsZXZhbnQgdG8gdGhvc2UgZnVuY3Rpb25hbGl0aWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5yYXZlbCB0aGUgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI2OjAwLjQ4MzgyMDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDQ3MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzoyNjowMC41NzUyNzEwOTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM0MjAzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSdtIHRyeWluZyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHNldCB1cCBjb3JyZWN0bHkgZm9yIEJQRjpcblxuKipCUEYgUmVxdWlyZW1lbnRzIGFuZCBLZXkgRnVuY3Rpb24gRXhwbG9yYXRpb24qKlxuXG5BbHJpZ2h0LCBJIGtub3cgSSdtIHdvcmtpbmcgd2l0aCBCUEYsIHNvIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24gaXMgZGVmaW5pdGVseSBhIG11c3QtaGF2ZS4gVGhhdCdzIGZ1bmRhbWVudGFsLiBBbmQgbmF0dXJhbGx5LCBzaW5jZSB3ZSdyZSB0YWxraW5nIGFib3V0IHJ1bm5pbmcgY29kZSBlZmZlY3RpdmVseSwgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBuZWVkIHRvIGJlIGVuYWJsZWQgYW5kIHNldCB0byAneScuIFRoYXQncyBqdXN0IHN0YW5kYXJkIHByYWN0aWNlIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBmdW5jdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3Igc3RhdGljLiBLbm93aW5nIHRoZWlyIHNjb3BlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IEJQRiBjYW4gaW50ZXJhY3Qgd2l0aCB0aGVzZSBjb21wb25lbnRzIGFuZCB0aGVpciBvdmVyYWxsIGF2YWlsYWJpbGl0eS4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBzdHJ1Y3R1cmUgbXkgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzoyNjowMy44MDk0Nzk2NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTgyNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhbmdlX3RyZWVfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz0yNjY9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE5LVxcdHJhbmdlX3RyZWVfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzIwOlxcdGVyciA9IHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIDAsIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cXHRpZiAocmV0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUyMzpcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI4LVxcdGlmIChyZXQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTI5OlxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MzAtXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY4PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTQtXFx0aWYgKHVhZGRyKSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjcxNTpcXHRcXHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03Njgtb3V0Olxcbmtlcm5lbC9icGYvYXJlbmEuYzo3Njk6XFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYgKyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcwLVxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9ODQ3PXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTg4My1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODg0OlxcdHJldCA9IHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTg4NS1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTQ0PXN0YXRpYyBpbnQgYXJlbmFfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgdTMyIHBhZ2VfY250KVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk2Mi1cXHQvKiBDYW5ub3QgZ3VhcmQgYWxyZWFkeSBhbGxvY2F0ZWQgcGFnZXMuICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjk2MzpcXHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy05NjQtXFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTk3OD1zdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxNi1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTAxNzpcXHRcXHRpZiAocmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxOC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI2LSAqIEF0IGluaXQgdGltZTpcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoyNzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCAwLCBtYXgpO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI4LSAqIFRoZW46XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zMi0gKiB0byBmaW5kIGZyZWUgcmFuZ2UgYW5kIG1hcmsgc2xvdHMgYXMgYWxsb2NhdGVkIGFuZCBsYXRlcjpcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzozMzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCBzdGFydCwgbGVuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zNC0gKiB0byBtYXJrIGFzIHVuYWxsb2NhdGVkIGFmdGVyIHVzZS5cXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTEzNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4NC0vKiBJcyB0aGUgd2hvbGUgcmFuZ2Ugc2V0ID8gKi9cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxODU6aW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTctLyogU2V0IHRoZSByYW5nZSBpbiB0aGlzIHJhbmdlIHRyZWUgKi9cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxOTg6aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE5OS17XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaD0xNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbik7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmg6MTc6aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaDoxODppbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oLTE5LXM2NCByYW5nZV90cmVlX2ZpbmQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MjY6MDMuODg1NjY5NTc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzExMjg1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiB0aGUgUHJvcG9zZWQgQlBGIEFyZW5hIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gQlBGIGFyZW5hIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBgcmFuZ2VfdHJlZV9zZXRgLCBgcmFuZ2VfdHJlZV9jbGVhcmAsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBwcm9wb3NlZCBjaGFuZ2VzIHdpbGwgYWZmZWN0IHRoZSBrZXJuZWwuXG5cbkZpcnN0LCBJIG5vdGUgdGhhdCBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGByYW5nZV90cmVlLmNgIGFuZCBtYWRlIGF2YWlsYWJsZSB2aWEgYHJhbmdlX3RyZWUuaGAsIHNvIHRoZXkgYXJlICpub3QqIHN0YXRpYy4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMuXG5cbk5leHQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuIFRoZXkgKmFyZSogZGVmaW5lZCBhcyBzdGF0aWMgd2l0aGluIGBhcmVuYS5jYCwgd2hpY2ggbWFrZXMgbWUgcGF1c2UuIEdpdmVuIHRoZSBkaXJlY3RpdmUsIHRoZXNlIHNlZW0gbGVzcyBpZGVhbCwgYXMgdGhlIHN0YXRpYyBuYXR1cmUgaGludHMgYXQgaW5saW5pbmcuIEhvd2V2ZXIsIGBhcmVuYV9mcmVlX3BhZ2VzYCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBmcm9tIGEgZmV3IHBsYWNlcywgc3BlY2lmaWNhbGx5IGBhcmVuYV9hbGxvY19wYWdlc2AsIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuIFRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBsb2NhdGlvbnMgbWFrZXMgaW5saW5pbmcgbGVzcyBsaWtlbHkuIFRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kIGNvdmVyIGFsbCBiYXNlcywgSSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAgYXMgd2VsbC4gV2FpdCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBpcyBhIGtmdW5jLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgZm9jdXMgaXMgb246XG5cbiogICBgcmFuZ2VfdHJlZV9zZXRgXG4qICAgYHJhbmdlX3RyZWVfY2xlYXJgXG4qICAgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYFxuKiAgIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYFxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBvcHRpbWFsIEFQSSBlbnRyeXBvaW50cyBmb3IgdGhpcyB0YXNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgIGFyZSBiZWluZyBoYW5kbGVkLCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cyBhcmUgdGFyZ2V0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MjY6MTAuOTE2ODAyNDE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDA5NTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MjEwPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTIyOS1cXHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzA6XFx0ICogc2NyYXRjaGVzIGl0cyBQVEUuIEEgbGF0ZXIgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKSBvdmVyIHRoYXQgcmFuZ2Ugd2Fsa3NcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVxcdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMDg0PXZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDk2Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTA2OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMDcte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTExMzI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcywgS0ZfQVJFTkFfUkVUIHwgS0ZfQVJFTkFfQVJHMilcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEzMzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMzQtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTM3PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwMi1cXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjAzOlxcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwNC1cXHRLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI5NT1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI5NjpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjk3LUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTgyNz1zdGF0aWMgYm9vbCBpc19icGZfYXJlbmFfa2Z1bmModTMyIGJ0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyOS1cXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExODMwOlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgzMS1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlc107XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4MTc9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODU3LVxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NTg6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NTktXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NjA6XFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODYxLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MjY6MTAuOTg2OTAyOTM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MzI4MTIzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEJQRiBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpZGVudGlmaWVzIHNldmVyYWwga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBhbmQsIHRoZXJlZm9yZSwgYXJlIHBvdGVudGlhbCB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGUgbGlzdCBpbmNsdWRlcyBgcmFuZ2VfdHJlZV9zZXRgLCBgcmFuZ2VfdHJlZV9jbGVhcmAsIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgYGFyZW5hX2ZyZWVfd29ya2VyYCwgZXZlbiB0aG91Z2ggaXQncyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgYmVjYXVzZSBpdCByZXByZXNlbnRzIGEgZGlzdGluY3QgZXhlY3V0aW9uIHBhdGggdGhhdCdzIG5vdyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guXG5cbkknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaXMgYEJQRl9TWVNDQUxMYC4gV2hpbGUgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBhcmUgcHJldHR5IHN0YW5kYXJkLCBJIGRvbid0IHRoaW5rIHRoZXkncmUgZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gZW5hYmxlciBoZXJlLlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgdGhlIHBhdGNoJ3MgY29yZSBsb2dpYy4gSXQncyByZWFsbHkgYWJvdXQgZW5oYW5jaW5nIHRoZSByb2J1c3RuZXNzIG9mIEJQRidzIGFyZW5hIG1hbmFnZW1lbnQuIFRoZSBwYXRjaCBwcm9hY3RpdmVseSBhZGRyZXNzZXMgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgd2l0aGluIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBieSBpbXBsZW1lbnRpbmcgcHJlLWFsbG9jYXRpb24gb2Ygbm9kZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGFpbXMgdG8gcHJldmVudCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGNvcnJ1cHRpb24gdGhhdCBjb3VsZCBhcmlzZSBkdXJpbmcgcmFuZ2UgdHJlZSBtYW5pcHVsYXRpb24uIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGVmZmVjdHMgb2YgdGhlIGByYW5nZV90cmVlX3NldGAgY2hhbmdlcyB0byBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRoZWlyIGZvY3VzIG9uIGVycm9yIGhhbmRsaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgcmFuZ2UgdHJlZSwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gSXQncyBpbXBlcmF0aXZlIHRvIHZhbGlkYXRlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSBlcnJvciBwYXRocyBhbmQgZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHRyZWUgb3BlcmF0aW9ucyB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMuXG5cblRoZXJlZm9yZSwgdGhlIHJlc3BvbnNlIHNob3VsZCBiZSBhcyBmb2xsb3dzOlxuXG5Xb3J0aEZ1enppbmc6IHRydWVcbkZvY3VzU3ltYm9sczpcbi0gYHJhbmdlX3RyZWVfc2V0YFxuLSBgcmFuZ2VfdHJlZV9jbGVhcmBcbi0gYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYFxuLSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWBcbi0gYGFyZW5hX2ZyZWVfd29ya2VyYFxuXG5FbmFibGVDb25maWdzOlxuLSBgQlBGX1NZU0NBTExgXG5cblJlYXNvbmluZzpcblRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gQlBGJ3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBpbnRyb2R1Y2VzIG5vZGUgcHJlLWFsbG9jYXRpb24gdG8gYWRkcmVzcyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIGVuc3VyaW5nIHRoZSB0cmVlJ3MgaW50ZWdyaXR5LiBGdXJ0aGVyIGNoYW5nZXMgY2FzY2FkZSBpbnRvIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYC4gQmVjYXVzZSB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGVycm9yIGhhbmRsaW5nIGFuZCByYW5nZSB0cmVlIG1hbmlwdWxhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBmdXp6aW5nIGlzIHJlcXVpcmVkIHRvIHZhbGlkYXRlIGJvdGggdGhlIGVycm9yIHBhdGhzIGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHRyZWUgbWFuaXB1bGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODUsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI2OjE4LjgxOTcxODQwMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTc3Mjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYW5nZV90cmVlX3NldFwiLFxuICAgIFwicmFuZ2VfdHJlZV9jbGVhclwiLFxuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVcIixcbiAgICBcImFyZW5hX2ZyZWVfd29ya2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGluIEJQRiBhcmVuYSdzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyAoYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgKS4gSXQgbW9kaWZpZXMgdGhlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBub2RlcyBiZWZvcmUgYWx0ZXJpbmcgdGhlIHRyZWUgdG8gcHJldmVudCBpbmNvbnNpc3RlbnQgc3RhdGVzLiBJdCBhbHNvIHVwZGF0ZXMgYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgIHRvIGhhbmRsZSB0aGVzZSBwb3RlbnRpYWwgZmFpbHVyZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBlcnJvciBwYXRocyBhbmQgdHJlZSBtYW5pcHVsYXRpb25zIGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmFuZ2VfdHJlZV9zZXRcIixcbiAgICBcInJhbmdlX3RyZWVfY2xlYXJcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlXCIsXG4gICAgXCJhcmVuYV9mcmVlX3dvcmtlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEncyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IG1vZGlmaWVzIHRoZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbm9kZXMgYmVmb3JlIGFsdGVyaW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IHN0YXRlcy4gSXQgYWxzbyB1cGRhdGVzIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCB0byBoYW5kbGUgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcGF0aHMgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl75gr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 03:23:02 +0000 UTC FinishedAt: 2026-08-06 03:26:20 +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": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "1cb08b36-441f-4324-8b96-ab8565f52dca" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "range_tree_set", "range_tree_clear", "bpf_arena_free_pages", "bpf_arena_free_pages_non_sleepable", "arena_free_worker" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2FyZW5hX2ZyZWVfd29ya2VyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBtb2RpZmllcyB0aGUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG5vZGVzIGJlZm9yZSBhbHRlcmluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGluY29uc2lzdGVudCBzdGF0ZXMuIEl0IGFsc28gdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gaGFuZGxlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGhzIGFuZCB0cmVlIG1hbmlwdWxhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NGVhNWYyNzA2ZjEwZTZjOTUyZTVhNTRiMGNlNmFhZjljZWJiMjNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwMzoyNTo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDU1NWVlMjUzMWVmOTguLjMwNzQ1ZGE5Mjc3YjAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTg4MSw3ICYjNDM7ODgxLDEyIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGRlZmVyO1xuIFxuLVx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4mIzQzO1x0cmV0ID0gcmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbiBcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG5AQCAtMTAwNCwxMSAmIzQzOzEwMDksMTcgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRrYWRkciA9IGFyZW5hX3ZtX3N0YXJ0ICYjNDM7IHMtXHUwMDNldWFkZHI7XG4gXHRcdHBnb2ZmID0gY29tcHV0ZV9wZ29mZihhcmVuYSwgcy1cdTAwM2V1YWRkcik7XG4gXG4mIzQzO1x0XHQvKiBNYXJrIHRoZSByYW5nZSBhcyBmcmVlIGJlZm9yZSBjbGVhcmluZyBQVEVzIHNvIHRoYXRcbiYjNDM7XHRcdCAqIGlmIHRoZSByYW5nZSB0cmVlIHVwZGF0ZSBmYWlscyB3ZSBsZWF2ZSB0aGUgUFRFc1xuJiM0MztcdFx0ICogaW50YWN0LCBhdm9pZGluZyBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIHdoZXJlIHBhZ2VzXG4mIzQzO1x0XHQgKiBhcmUgZnJlZWQgYnV0IHRoZSBhcmVuYSBmcmVlIHRyZWUgZG9lcyBub3QgdHJhY2sgdGhlbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3QgcGFnZXMgaW4gZnJlZV9wYWdlcyBsbGlzdCAqL1xuIFx0XHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHRcdFx0ICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgXHUwMDI2Y2RhdGEpO1xuLVxuLVx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbiBcdH1cbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbmluZGV4IDJmMjg4ODZmM2ZmNzUuLjQ1NTYwZTlmMGQwN2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbkBAIC0xNDMsMTYgJiM0MzsxNDMsMjEgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRcdGlmIChybi1cdTAwM2Vybl9zdGFydCBcdTAwM2Mgc3RhcnQgXHUwMDI2XHUwMDI2IHJuLVx1MDAzZXJuX2xhc3QgXHUwMDNlIGxhc3QpIHtcbiBcdFx0XHR1MzIgb2xkX2xhc3QgPSBybi1cdTAwM2Vybl9sYXN0O1xuIFxuJiM0MztcdFx0XHQvKiBQcmUtYWxsb2NhdGUgdGhlIHJpZ2h0LWhhbGYgbm9kZSBiZWZvcmUgbW9kaWZ5aW5nXG4mIzQzO1x0XHRcdCAqIHRoZSB0cmVlLiBJZiBhbGxvY2F0aW9uIGZhaWxzIHdlIHJldHVybiAtRU5PTUVNXG4mIzQzO1x0XHRcdCAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLFxuJiM0MztcdFx0XHRcdFx0XHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuJiM0MztcdFx0XHRpZiAoIW5ld19ybilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4gXHRcdFx0LyogT3ZlcmxhcHMgd2l0aCB0aGUgZW50aXJlIGNsZWFyaW5nIHJhbmdlICovXG4gXHRcdFx0cmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7XG4gXHRcdFx0cm4tXHUwMDNlcm5fbGFzdCA9IHN0YXJ0IC0gMTtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTtcbiBcbi1cdFx0XHQvKiBBZGQgYSByYW5nZSAqL1xuLVx0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsXG4tXHRcdFx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbi1cdFx0XHRpZiAoIW5ld19ybilcbi1cdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHQvKiBBZGQgcmlnaHQtaGFsZiByYW5nZSAqL1xuIFx0XHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IGxhc3QgJiM0MzsgMTtcbiBcdFx0XHRuZXdfcm4tXHUwMDNlcm5fbGFzdCA9IG9sZF9sYXN0O1xuIFx0XHRcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcbkBAIC0xOTMsNiAmIzQzOzE5OCw3IEBAIGludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4ge1xuIFx0dTMyIGxhc3QgPSBzdGFydCAmIzQzOyBsZW4gLSAxO1xuJiM0MztcdHN0cnVjdCByYW5nZV9ub2RlICpuZXdfcm4gPSBOVUxMO1xuIFx0c3RydWN0IHJhbmdlX25vZGUgKnJpZ2h0O1xuIFx0c3RydWN0IHJhbmdlX25vZGUgKmxlZnQ7XG4gXHRpbnQgZXJyO1xuQEAgLTIwMiwyMCAmIzQzOzIwOCw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9zdGFydCBcdTAwM2M9IHN0YXJ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX2xhc3QgXHUwMDNlPSBsYXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgbmV3IG5vZGUgaXMgbmVlZGVkIG9ubHkgd2hlbiB0aGUgcmFuZ2UgaGFzIG5vIGFkamFjZW50IGZyZWVcbiYjNDM7XHQgKiByYW5nZSBvbiBlaXRoZXIgc2lkZS4gIFRoaXMgaXMga25vd24gYmVmb3JlIGNsZWFyaW5nOiBhbnkgcmFuZ2VcbiYjNDM7XHQgKiBjb3ZlcmluZyBzdGFydCAtIDEgb3IgbGFzdCAmIzQzOyAxIHN1cnZpdmVzIHRoZSBjbGVhciBhcyBhbiBhZGphY2VudFxuJiM0MztcdCAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvXG4mIzQzO1x0ICogYSBmYWlsdXJlIGxlYXZlcyB0aGUgcmFuZ2UgdHJlZSB1bm1vZGlmaWVkXG4mIzQzO1x0ICovXG4mIzQzO1x0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcbiYjNDM7XHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgJiM0MzsgMSwgbGFzdCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAoIWxlZnQgXHUwMDI2XHUwMDI2ICFyaWdodCkge1xuJiM0MztcdFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSxcbiYjNDM7XHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4mIzQzO1x0XHRpZiAoIW5ld19ybilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIENsZWFyIG91dCBldmVyeXRoaW5nIGluIHRoZSByYW5nZSB3ZSB3YW50IHRvIHNldC4gKi9cbiBcdGVyciA9IHJhbmdlX3RyZWVfY2xlYXIocnQsIHN0YXJ0LCBsZW4pO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWVfbmV3O1xuIFxuIFx0LyogRG8gd2UgaGF2ZSBhIGxlZnQtYWRqYWNlbnQgcmFuZ2UgPyAqL1xuIFx0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcbi1cdGlmIChsZWZ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX2xhc3QgJiM0MzsgMSAhPSBzdGFydClcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCAmIzQzOyAxICE9IHN0YXJ0KSB7XG4mIzQzO1x0XHRlcnIgPSAtRUZBVUxUO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4mIzQzO1x0fVxuIFxuIFx0LyogRG8gd2UgaGF2ZSBhIHJpZ2h0LWFkamFjZW50IHJhbmdlID8gKi9cbiBcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCAmIzQzOyAxLCBsYXN0ICYjNDM7IDEpO1xuLVx0aWYgKHJpZ2h0IFx1MDAyNlx1MDAyNiByaWdodC1cdTAwM2Vybl9zdGFydCAhPSBsYXN0ICYjNDM7IDEpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdGlmIChyaWdodCBcdTAwMjZcdTAwMjYgcmlnaHQtXHUwMDNlcm5fc3RhcnQgIT0gbGFzdCAmIzQzOyAxKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUZBVUxUO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IHJpZ2h0KSB7XG4gXHRcdC8qIENvbWJpbmUgbGVmdCBhbmQgcmlnaHQgYWRqYWNlbnQgcmFuZ2VzICovXG5AQCAtMjM1LDE0ICYjNDM7MjYxLDE2IEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBcdFx0cmlnaHQtXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbiBcdFx0cmFuZ2VfaXRfaW5zZXJ0KHJpZ2h0LCBydCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRsZWZ0ID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcbi1cdFx0aWYgKCFsZWZ0KVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRsZWZ0LVx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XG4tXHRcdGxlZnQtXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XG4tXHRcdHJhbmdlX2l0X2luc2VydChsZWZ0LCBydCk7XG4mIzQzO1x0XHQvKiBObyBhZGphY2VudCByYW5nZXM7IHVzZSB0aGUgcHJlLWFsbG9jYXRlZCBub2RlICovXG4mIzQzO1x0XHRuZXdfcm4tXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbiYjNDM7XHRcdG5ld19ybi1cdTAwM2Vybl9sYXN0ID0gbGFzdDtcbiYjNDM7XHRcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2ZyZWVfbmV3OlxuJiM0MztcdGtmcmVlX25vbG9jayhuZXdfcm4pO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYW5nZV90cmVlX3NldCYjMzQ7LAogICAgJiMzNDtyYW5nZV90cmVlX2NsZWFyJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YXJlbmFfZnJlZV93b3JrZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGluIEJQRiBhcmVuYSYjMzk7cyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IG1vZGlmaWVzIHRoZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbm9kZXMgYmVmb3JlIGFsdGVyaW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IHN0YXRlcy4gSXQgYWxzbyB1cGRhdGVzIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCB0byBoYW5kbGUgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcGF0aHMgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0ZWE1ZjI3MDZmMTBlNmM5NTJlNWE1NGIwY2U2YWFmOWNlYmIyM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDAzOjI1OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jCmluZGV4IDU1NWVlMjUzMWVmOTguLjMwNzQ1ZGE5Mjc3YjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FyZW5hLmMKQEAgLTg4MSw3ICYjNDM7ODgxLDEyIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsCiAJaWYgKHJldCkKIAkJZ290byBkZWZlcjsKIAotCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiwgcGFnZV9jbnQpOwomIzQzOwlyZXQgPSByYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CQlicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKIAlpbml0X2xsaXN0X2hlYWQoJmFtcDtmcmVlX3BhZ2VzKTsKIAljZGF0YS5hcmVuYSA9IGFyZW5hOwpAQCAtMTAwNCwxMSAmIzQzOzEwMDksMTcgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlrYWRkciA9IGFyZW5hX3ZtX3N0YXJ0ICYjNDM7IHMtJmd0O3VhZGRyOwogCQlwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHMtJmd0O3VhZGRyKTsKIAomIzQzOwkJLyogTWFyayB0aGUgcmFuZ2UgYXMgZnJlZSBiZWZvcmUgY2xlYXJpbmcgUFRFcyBzbyB0aGF0CiYjNDM7CQkgKiBpZiB0aGUgcmFuZ2UgdHJlZSB1cGRhdGUgZmFpbHMgd2UgbGVhdmUgdGhlIFBURXMKJiM0MzsJCSAqIGludGFjdCwgYXZvaWRpbmcgYW4gdW5yZWNvdmVyYWJsZSBzdGF0ZSB3aGVyZSBwYWdlcwomIzQzOwkJICogYXJlIGZyZWVkIGJ1dCB0aGUgYXJlbmEgZnJlZSB0cmVlIGRvZXMgbm90IHRyYWNrIHRoZW0uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJLyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovCiAJCWFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoJmFtcDtpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKIAkJCQkJICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgJmFtcDtjZGF0YSk7Ci0KLQkJcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiAJfQogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCmluZGV4IDJmMjg4ODZmM2ZmNzUuLjQ1NTYwZTlmMGQwN2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCkBAIC0xNDMsMTYgJiM0MzsxNDMsMjEgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiAJCWlmIChybi0mZ3Q7cm5fc3RhcnQgJmx0OyBzdGFydCAmYW1wOyZhbXA7IHJuLSZndDtybl9sYXN0ICZndDsgbGFzdCkgewogCQkJdTMyIG9sZF9sYXN0ID0gcm4tJmd0O3JuX2xhc3Q7CiAKJiM0MzsJCQkvKiBQcmUtYWxsb2NhdGUgdGhlIHJpZ2h0LWhhbGYgbm9kZSBiZWZvcmUgbW9kaWZ5aW5nCiYjNDM7CQkJICogdGhlIHRyZWUuIElmIGFsbG9jYXRpb24gZmFpbHMgd2UgcmV0dXJuIC1FTk9NRU0KJiM0MzsJCQkgKiB3aXRob3V0IGFsdGVyaW5nIHRoZSByYW5nZSB0cmVlLgomIzQzOwkJCSAqLwomIzQzOwkJCW5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksCiYjNDM7CQkJCQkJX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTsKJiM0MzsJCQlpZiAoIW5ld19ybikKJiM0MzsJCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiAJCQkvKiBPdmVybGFwcyB3aXRoIHRoZSBlbnRpcmUgY2xlYXJpbmcgcmFuZ2UgKi8KIAkJCXJhbmdlX2l0X3JlbW92ZShybiwgcnQpOwogCQkJcm4tJmd0O3JuX2xhc3QgPSBzdGFydCAtIDE7CiAJCQlyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTsKIAotCQkJLyogQWRkIGEgcmFuZ2UgKi8KLQkJCW5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsCi0JCQkJCQlOVU1BX05PX05PREUpOwotCQkJaWYgKCFuZXdfcm4pCi0JCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJLyogQWRkIHJpZ2h0LWhhbGYgcmFuZ2UgKi8KIAkJCW5ld19ybi0mZ3Q7cm5fc3RhcnQgPSBsYXN0ICYjNDM7IDE7CiAJCQluZXdfcm4tJmd0O3JuX2xhc3QgPSBvbGRfbGFzdDsKIAkJCXJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTsKQEAgLTE5Myw2ICYjNDM7MTk4LDcgQEAgaW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKQogaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKQogewogCXUzMiBsYXN0ID0gc3RhcnQgJiM0MzsgbGVuIC0gMTsKJiM0MzsJc3RydWN0IHJhbmdlX25vZGUgKm5ld19ybiA9IE5VTEw7CiAJc3RydWN0IHJhbmdlX25vZGUgKnJpZ2h0OwogCXN0cnVjdCByYW5nZV9ub2RlICpsZWZ0OwogCWludCBlcnI7CkBAIC0yMDIsMjAgJiM0MzsyMDgsNDAgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKQogCWlmIChsZWZ0ICZhbXA7JmFtcDsgbGVmdC0mZ3Q7cm5fc3RhcnQgJmx0Oz0gc3RhcnQgJmFtcDsmYW1wOyBsZWZ0LSZndDtybl9sYXN0ICZndDs9IGxhc3QpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgbmV3IG5vZGUgaXMgbmVlZGVkIG9ubHkgd2hlbiB0aGUgcmFuZ2UgaGFzIG5vIGFkamFjZW50IGZyZWUKJiM0MzsJICogcmFuZ2Ugb24gZWl0aGVyIHNpZGUuICBUaGlzIGlzIGtub3duIGJlZm9yZSBjbGVhcmluZzogYW55IHJhbmdlCiYjNDM7CSAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICYjNDM7IDEgc3Vydml2ZXMgdGhlIGNsZWFyIGFzIGFuIGFkamFjZW50CiYjNDM7CSAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvCiYjNDM7CSAqIGEgZmFpbHVyZSBsZWF2ZXMgdGhlIHJhbmdlIHRyZWUgdW5tb2RpZmllZAomIzQzOwkgKi8KJiM0MzsJbGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTsKJiM0MzsJcmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICYjNDM7IDEsIGxhc3QgJiM0MzsgMSk7CiYjNDM7CWlmICghbGVmdCAmYW1wOyZhbXA7ICFyaWdodCkgewomIzQzOwkJbmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwKJiM0MzsJCQkJCV9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7CiYjNDM7CQlpZiAoIW5ld19ybikKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwogCS8qIENsZWFyIG91dCBldmVyeXRoaW5nIGluIHRoZSByYW5nZSB3ZSB3YW50IHRvIHNldC4gKi8KIAllcnIgPSByYW5nZV90cmVlX2NsZWFyKHJ0LCBzdGFydCwgbGVuKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBvdXRfZnJlZV9uZXc7CiAKIAkvKiBEbyB3ZSBoYXZlIGEgbGVmdC1hZGphY2VudCByYW5nZSA/ICovCiAJbGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTsKLQlpZiAobGVmdCAmYW1wOyZhbXA7IGxlZnQtJmd0O3JuX2xhc3QgJiM0MzsgMSAhPSBzdGFydCkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWlmIChsZWZ0ICZhbXA7JmFtcDsgbGVmdC0mZ3Q7cm5fbGFzdCAmIzQzOyAxICE9IHN0YXJ0KSB7CiYjNDM7CQllcnIgPSAtRUZBVUxUOwomIzQzOwkJZ290byBvdXRfZnJlZV9uZXc7CiYjNDM7CX0KIAogCS8qIERvIHdlIGhhdmUgYSByaWdodC1hZGphY2VudCByYW5nZSA/ICovCiAJcmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICYjNDM7IDEsIGxhc3QgJiM0MzsgMSk7Ci0JaWYgKHJpZ2h0ICZhbXA7JmFtcDsgcmlnaHQtJmd0O3JuX3N0YXJ0ICE9IGxhc3QgJiM0MzsgMSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWlmIChyaWdodCAmYW1wOyZhbXA7IHJpZ2h0LSZndDtybl9zdGFydCAhPSBsYXN0ICYjNDM7IDEpIHsKJiM0MzsJCWVyciA9IC1FRkFVTFQ7CiYjNDM7CQlnb3RvIG91dF9mcmVlX25ldzsKJiM0MzsJfQogCiAJaWYgKGxlZnQgJmFtcDsmYW1wOyByaWdodCkgewogCQkvKiBDb21iaW5lIGxlZnQgYW5kIHJpZ2h0IGFkamFjZW50IHJhbmdlcyAqLwpAQCAtMjM1LDE0ICYjNDM7MjYxLDE2IEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIAkJcmlnaHQtJmd0O3JuX3N0YXJ0ID0gc3RhcnQ7CiAJCXJhbmdlX2l0X2luc2VydChyaWdodCwgcnQpOwogCX0gZWxzZSB7Ci0JCWxlZnQgPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpOwotCQlpZiAoIWxlZnQpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbGVmdC0mZ3Q7cm5fc3RhcnQgPSBzdGFydDsKLQkJbGVmdC0mZ3Q7cm5fbGFzdCA9IGxhc3Q7Ci0JCXJhbmdlX2l0X2luc2VydChsZWZ0LCBydCk7CiYjNDM7CQkvKiBObyBhZGphY2VudCByYW5nZXM7IHVzZSB0aGUgcHJlLWFsbG9jYXRlZCBub2RlICovCiYjNDM7CQluZXdfcm4tJmd0O3JuX3N0YXJ0ID0gc3RhcnQ7CiYjNDM7CQluZXdfcm4tJmd0O3JuX2xhc3QgPSBsYXN0OwomIzQzOwkJcmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpOwogCX0KIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZnJlZV9uZXc6CiYjNDM7CWtmcmVlX25vbG9jayhuZXdfcm4pOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIHJhbmdlX3RyZWVfZGVzdHJveShzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEFyZW5hIGFuZCBSYW5nZSBUcmVlIFBhdGNoIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9yYW5nZV90cmVlLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGluIGhvdyBgcmFuZ2VfdHJlZV9zZXRgIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHByZS1hbGxvY2F0aW5nIG5vZGVzIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIGFuZCB0aGUgcGF0Y2ggdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gZGVhbCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYHJhbmdlX3RyZWVfc2V0YCBub3cuIFRoaXMgaXMgYWxsIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYW5kIGl0IGRpcmVjdGx5IHJlbGF0ZXMgdG8gQlBGIGFyZW5hcyBhbmQgcmFuZ2UgdHJlZXMsIHNvIGZ1enppbmcgdGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGltcG9ydGFudC4KClJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gcGF5IGF0dGVudGlvbiB0byBoZXJlLiBJIG5lZWQgdG8gemVybyBpbiBvbjogYGFyZW5hX2ZyZWVfcGFnZXNgLCBgYXJlbmFfZnJlZV93b3JrZXJgLCBgcmFuZ2VfdHJlZV9jbGVhcmAsIGFuZCBvZiBjb3Vyc2UsIGByYW5nZV90cmVlX3NldGAuIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbiBhbmQgYW5hbHl6ZSB0aGVtLgoKTm93LCBiZWZvcmUgSSBzdGFydCBidWlsZGluZyB1cCBhIGZ1enppbmcgc3RyYXRlZ3ksIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdXNhZ2VzIG9mIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYHJhbmdlX3RyZWVfc2V0YCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBhbnkgcG90ZW50aWFsIGNvbmZpZyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYy00OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAtXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTIxMD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjI5LVx0ICogU2tpcCB0aGUgcGVyLWFyZW5hIHNjcmF0Y2ggcGFnZS4gQSBrZXJuZWwgZmF1bHQgb24gYW4gdW5hbGxvY2F0ZWQgdWFkZHJcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzA6XHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xua2VybmVsL2JwZi9hcmVuYS5jLTIzMS1cdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY4PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcyLVx0XHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzM6XHRcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NzQtXHR9XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTc4OT1zdGF0aWMgdm9pZCB6YXBfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg0Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo4NDc6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODQ4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTA4ND12b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA5NjpfX2JwZl9rZnVuYyB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEwMi1cdFx0cmV0dXJuO1xua2VybmVsL2JwZi9hcmVuYS5jOjExMDM6XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIHRydWUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTExMDQtfVxua2VybmVsL2JwZi9hcmVuYS5jLTExMDUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwNjp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxua2VybmVsL2JwZi9hcmVuYS5jLTExMDcte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMTEyLVx0XHRyZXR1cm47XG5rZXJuZWwvYnBmL2FyZW5hLmM6MTExMzpcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTExMTQtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0xMTMyPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEzMzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTM3PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDItXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMDM6XHRLRl9icGZfYXJlbmFfZnJlZV9wYWdlcyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwNC1cdEtGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI5NT1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjk2OkJURl9JRChmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI5Ny1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODI3PXN0YXRpYyBib29sIGlzX2JwZl9hcmVuYV9rZnVuYyh1MzIgYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyOS1cdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTgzMDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODMxLVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXNdO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTgxNz1zdGF0aWMgaW50IHNwZWNpYWxpemVfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjLCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODU3LVx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg1ODpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NTktXHRcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg2MDpcdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2MS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIEJQRiBBcmVuYSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBCUEYgYXJlbmFzIGFuZCB3YW50IHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIGRlZmluaW5nIGFuZCBkb2N1bWVudGluZyB0aGVzZSB0eXBlcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBhbnkgc3BlY2lmaWMgZmxhZ3MsIHNldHRpbmdzLCBvciBjb21waWxlLXRpbWUgb3B0aW9ucyByZWxhdGVkIHRvIEJQRiBhcmVuYXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3IgbWlnaHQgbmVlZCB0byB0d2VhayBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgYXJlIGluIHBsYWNlIGFuZCBwb3RlbnRpYWxseSBndWlkZSBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgcmVsZXZhbnQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTI0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnkgb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRiBDb21waWxhdGlvbiBQcm9jZXNzKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQlBGIGluZnJhc3RydWN0dXJlIGhhbmRsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGtleSBmaWxlcyBsaWtlIGBhcmVuYS5jYCBhbmQgYHJhbmdlX3RyZWUuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIHRoZSBjb21waWxlciBmbGFncyB1c2VkIGZvciB0aGVzZSBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgdGFyZ2V0LXNwZWNpZmljIGluc3RydWN0aW9ucyByZWxldmFudCB0byB0aG9zZSBmdW5jdGlvbmFsaXRpZXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bnJhdmVsIHRoZSBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDE0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSYjMzk7bSB0cnlpbmcgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseSBmb3IgQlBGOgoKKipCUEYgUmVxdWlyZW1lbnRzIGFuZCBLZXkgRnVuY3Rpb24gRXhwbG9yYXRpb24qKgoKQWxyaWdodCwgSSBrbm93IEkmIzM5O20gd29ya2luZyB3aXRoIEJQRiwgc28gdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIG9wdGlvbiBpcyBkZWZpbml0ZWx5IGEgbXVzdC1oYXZlLiBUaGF0JiMzOTtzIGZ1bmRhbWVudGFsLiBBbmQgbmF0dXJhbGx5LCBzaW5jZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBydW5uaW5nIGNvZGUgZWZmZWN0aXZlbHksIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgbmVlZCB0byBiZSBlbmFibGVkIGFuZCBzZXQgdG8gJiMzOTt5JiMzOTsuIFRoYXQmIzM5O3MganVzdCBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGlzIGNvbnRleHQuCgpOb3csIG15IG5leHQgbW92ZSBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBvciBzdGF0aWMuIEtub3dpbmcgdGhlaXIgc2NvcGUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIGNhbiBpbnRlcmFjdCB3aXRoIHRoZXNlIGNvbXBvbmVudHMgYW5kIHRoZWlyIG92ZXJhbGwgYXZhaWxhYmlsaXR5LiBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBJIHN0cnVjdHVyZSBteSBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zMTktXHRyYW5nZV90cmVlX2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcdGVyciA9IHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCAwLCBhdHRyLVx1MDAzZW1heF9lbnRyaWVzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjEtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cdGlmIChyZXQpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1MjM6XHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUyNC1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI4LVx0aWYgKHJldCkge1xua2VybmVsL2JwZi9hcmVuYS5jOjUyOTpcdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTMwLVx0XHRmcmVlX3BhZ2VzX25vbG9jayhwYWdlLCAwKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY4PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE0LVx0aWYgKHVhZGRyKSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzE1Olx0XHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXHRcdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTc2OC1vdXQ6XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY5Olx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmICYjNDM7IG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc3MC1cdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDc9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg4My1cbmtlcm5lbC9icGYvYXJlbmEuYzo4ODQ6XHRyZXQgPSByYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy04ODUtXHRpZiAocmV0KSB7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTk0ND1zdGF0aWMgaW50IGFyZW5hX3Jlc2VydmVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIHUzMiBwYWdlX2NudClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTYyLVx0LyogQ2Fubm90IGd1YXJkIGFscmVhZHkgYWxsb2NhdGVkIHBhZ2VzLiAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjk2MzpcdHJldCA9IGlzX3JhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTk2NC1cdGlmIChyZXQpIHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTc4PXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxNi1cdFx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTAxNzpcdFx0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxua2VybmVsL2JwZi9hcmVuYS5jLTEwMTgtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjYtICogQXQgaW5pdCB0aW1lOlxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6Mjc6ICogICByYW5nZV90cmVlX3NldChydCwgMCwgbWF4KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI4LSAqIFRoZW46XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMzItICogdG8gZmluZCBmcmVlIHJhbmdlIGFuZCBtYXJrIHNsb3RzIGFzIGFsbG9jYXRlZCBhbmQgbGF0ZXI6XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzozMzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCBzdGFydCwgbGVuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTM0LSAqIHRvIG1hcmsgYXMgdW5hbGxvY2F0ZWQgYWZ0ZXIgdXNlLlxuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTEzNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xODQtLyogSXMgdGhlIHdob2xlIHJhbmdlIHNldCA/ICovXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxODU6aW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg2LXtcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTctLyogU2V0IHRoZSByYW5nZSBpbiB0aGlzIHJhbmdlIHRyZWUgKi9cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE5ODppbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTkte1xuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oPTE2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oOjE3OmludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbik7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaDoxODppbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pO1xua2VybmVsL2JwZi9yYW5nZV90cmVlLmgtMTktczY0IHJhbmdlX3RyZWVfZmluZChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBsZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhlIFByb3Bvc2VkIEJQRiBBcmVuYSBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBCUEYgYXJlbmEgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIGByYW5nZV90cmVlX3NldGAsIGByYW5nZV90cmVlX2NsZWFyYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50cyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHByb3Bvc2VkIGNoYW5nZXMgd2lsbCBhZmZlY3QgdGhlIGtlcm5lbC4KCkZpcnN0LCBJIG5vdGUgdGhhdCBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGByYW5nZV90cmVlLmNgIGFuZCBtYWRlIGF2YWlsYWJsZSB2aWEgYHJhbmdlX3RyZWUuaGAsIHNvIHRoZXkgYXJlICpub3QqIHN0YXRpYy4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMuCgpOZXh0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgLiBUaGV5ICphcmUqIGRlZmluZWQgYXMgc3RhdGljIHdpdGhpbiBgYXJlbmEuY2AsIHdoaWNoIG1ha2VzIG1lIHBhdXNlLiBHaXZlbiB0aGUgZGlyZWN0aXZlLCB0aGVzZSBzZWVtIGxlc3MgaWRlYWwsIGFzIHRoZSBzdGF0aWMgbmF0dXJlIGhpbnRzIGF0IGlubGluaW5nLiBIb3dldmVyLCBgYXJlbmFfZnJlZV9wYWdlc2AgYXBwZWFycyB0byBiZSBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMsIHNwZWNpZmljYWxseSBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIG11bHRpcGxlIGxvY2F0aW9ucyBtYWtlcyBpbmxpbmluZyBsZXNzIGxpa2VseS4gVG8gYmUgY29uc2VydmF0aXZlLCBhbmQgY292ZXIgYWxsIGJhc2VzLCBJIHNob3VsZCBwcm9iYWJseSBpbmNsdWRlIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCBhcyB3ZWxsLiBXYWl0LCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGlzIGEga2Z1bmMuCgpUaGVyZWZvcmUsIHRoZSBrZXkgZm9jdXMgaXMgb246CgoqICAgYHJhbmdlX3RyZWVfc2V0YAoqICAgYHJhbmdlX3RyZWVfY2xlYXJgCiogICBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgCiogICBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAKCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIG9wdGltYWwgQVBJIGVudHJ5cG9pbnRzIGZvciB0aGlzIHRhc2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9ucyB0byBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgYXJlIGJlaW5nIGhhbmRsZWQsIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIGFyZSB0YXJnZXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MjEwPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yMjktXHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0xMDg0PXZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA5NS1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDk2Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTcte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA1LVxua2VybmVsL2JwZi9hcmVuYS5jOjExMDY6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA3LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzMj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jOjExMzM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jLTExMzQtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTEzNz1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjAyLVx0S0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjAzOlx0S0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDQtXHRLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyOTU9QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI5NjpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyOTctQlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTgyNz1zdGF0aWMgYm9vbCBpc19icGZfYXJlbmFfa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE4MjktXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MzA6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgzMS1cdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzXTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4MTc9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg1Ny1cdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NTg6XHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODU5LVx0XHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zbGVlcGFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NjA6XHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTg1CgkJCQkJCQlvdXRwdXQ6IDE5MAoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgQlBGIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaWRlbnRpZmllcyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYW5kLCB0aGVyZWZvcmUsIGFyZSBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlIGxpc3QgaW5jbHVkZXMgYHJhbmdlX3RyZWVfc2V0YCwgYHJhbmdlX3RyZWVfY2xlYXJgLCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLiBJIGFsc28gbmVlZCB0byBpbmNsdWRlIGBhcmVuYV9mcmVlX3dvcmtlcmAsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBiZWNhdXNlIGl0IHJlcHJlc2VudHMgYSBkaXN0aW5jdCBleGVjdXRpb24gcGF0aCB0aGF0JiMzOTtzIG5vdyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guCgpJJiMzOTttIG1ha2luZyBhIG1lbnRhbCBub3RlIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBpcyBgQlBGX1NZU0NBTExgLiBXaGlsZSBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIGFyZSBwcmV0dHkgc3RhbmRhcmQsIEkgZG9uJiMzOTt0IHRoaW5rIHRoZXkmIzM5O3JlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoaXMgc3BlY2lmaWMgY2hhbmdlLiBgQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIGVuYWJsZXIgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHBhdGNoJiMzOTtzIGNvcmUgbG9naWMuIEl0JiMzOTtzIHJlYWxseSBhYm91dCBlbmhhbmNpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgQlBGJiMzOTtzIGFyZW5hIG1hbmFnZW1lbnQuIFRoZSBwYXRjaCBwcm9hY3RpdmVseSBhZGRyZXNzZXMgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgd2l0aGluIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBieSBpbXBsZW1lbnRpbmcgcHJlLWFsbG9jYXRpb24gb2Ygbm9kZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGFpbXMgdG8gcHJldmVudCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGNvcnJ1cHRpb24gdGhhdCBjb3VsZCBhcmlzZSBkdXJpbmcgcmFuZ2UgdHJlZSBtYW5pcHVsYXRpb24uIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGVmZmVjdHMgb2YgdGhlIGByYW5nZV90cmVlX3NldGAgY2hhbmdlcyB0byBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHNwZWNpZmljYWxseSB0aGVpciBmb2N1cyBvbiBlcnJvciBoYW5kbGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHJhbmdlIHRyZWUsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEl0JiMzOTtzIGltcGVyYXRpdmUgdG8gdmFsaWRhdGUgdGhlIGNvcnJlY3QgYmVoYXZpb3Igb2YgdGhlIGVycm9yIHBhdGhzIGFuZCBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgdHJlZSBvcGVyYXRpb25zIHVuZGVyIHZhcmlvdXMgY29uZGl0aW9ucywgZXNwZWNpYWxseSB1bmRlciBtZW1vcnkgcHJlc3N1cmUgb3IgYWxsb2NhdGlvbiBmYWlsdXJlcy4KClRoZXJlZm9yZSwgdGhlIHJlc3BvbnNlIHNob3VsZCBiZSBhcyBmb2xsb3dzOgoKV29ydGhGdXp6aW5nOiB0cnVlCkZvY3VzU3ltYm9sczoKLSBgcmFuZ2VfdHJlZV9zZXRgCi0gYHJhbmdlX3RyZWVfY2xlYXJgCi0gYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYAotIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYAotIGBhcmVuYV9mcmVlX3dvcmtlcmAKCkVuYWJsZUNvbmZpZ3M6Ci0gYEJQRl9TWVNDQUxMYAoKUmVhc29uaW5nOgpUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIEJQRiYjMzk7cyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IGludHJvZHVjZXMgbm9kZSBwcmUtYWxsb2NhdGlvbiB0byBhZGRyZXNzIHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgZW5zdXJpbmcgdGhlIHRyZWUmIzM5O3MgaW50ZWdyaXR5LiBGdXJ0aGVyIGNoYW5nZXMgY2FzY2FkZSBpbnRvIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYC4gQmVjYXVzZSB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGVycm9yIGhhbmRsaW5nIGFuZCByYW5nZSB0cmVlIG1hbmlwdWxhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBmdXp6aW5nIGlzIHJlcXVpcmVkIHRvIHZhbGlkYXRlIGJvdGggdGhlIGVycm9yIHBhdGhzIGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHRyZWUgbWFuaXB1bGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2FyZW5hX2ZyZWVfd29ya2VyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBtb2RpZmllcyB0aGUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG5vZGVzIGJlZm9yZSBhbHRlcmluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGluY29uc2lzdGVudCBzdGF0ZXMuIEl0IGFsc28gdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gaGFuZGxlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGhzIGFuZCB0cmVlIG1hbmlwdWxhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2FyZW5hX2ZyZWVfd29ya2VyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBtb2RpZmllcyB0aGUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG5vZGVzIGJlZm9yZSBhbHRlcmluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGluY29uc2lzdGVudCBzdGF0ZXMuIEl0IGFsc28gdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gaGFuZGxlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGhzIGFuZCB0cmVlIG1hbmlwdWxhdGlvbnMgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzoyNTo0OC4yMjI2NjM5OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDc0Mjg0NjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhbmdlX3RyZWVfc2V0XCIsXG4gICAgXCJyYW5nZV90cmVlX2NsZWFyXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZVwiLFxuICAgIFwiYXJlbmFfZnJlZV93b3JrZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gQlBGIGFyZW5hJ3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBtb2RpZmllcyB0aGUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG5vZGVzIGJlZm9yZSBhbHRlcmluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGluY29uc2lzdGVudCBzdGF0ZXMuIEl0IGFsc28gdXBkYXRlcyBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgdG8gaGFuZGxlIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGhzIGFuZCB0cmVlIG1hbmlwdWxhdGlvbnMgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjQ4LjIyMjY3NDA1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTIzMDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc0ZWE1ZjI3MDZmMTBlNmM5NTJlNWE1NGIwY2U2YWFmOWNlYmIyM2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAwMzoyNTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcXG5pbmRleCA1NTVlZTI1MzFlZjk4Li4zMDc0NWRhOTI3N2IwIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbkBAIC04ODEsNyArODgxLDEyIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZGVmZXI7XFxuIFxcbi1cXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbitcXHRyZXQgPSByYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4gXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZmcmVlX3BhZ2VzKTtcXG4gXFx0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcXG5AQCAtMTAwNCwxMSArMTAwOSwxNyBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGthZGRyID0gYXJlbmFfdm1fc3RhcnQgKyBzLVxcdTAwM2V1YWRkcjtcXG4gXFx0XFx0cGdvZmYgPSBjb21wdXRlX3Bnb2ZmKGFyZW5hLCBzLVxcdTAwM2V1YWRkcik7XFxuIFxcbitcXHRcXHQvKiBNYXJrIHRoZSByYW5nZSBhcyBmcmVlIGJlZm9yZSBjbGVhcmluZyBQVEVzIHNvIHRoYXRcXG4rXFx0XFx0ICogaWYgdGhlIHJhbmdlIHRyZWUgdXBkYXRlIGZhaWxzIHdlIGxlYXZlIHRoZSBQVEVzXFxuK1xcdFxcdCAqIGludGFjdCwgYXZvaWRpbmcgYW4gdW5yZWNvdmVyYWJsZSBzdGF0ZSB3aGVyZSBwYWdlc1xcbitcXHRcXHQgKiBhcmUgZnJlZWQgYnV0IHRoZSBhcmVuYSBmcmVlIHRyZWUgZG9lcyBub3QgdHJhY2sgdGhlbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3QgcGFnZXMgaW4gZnJlZV9wYWdlcyBsbGlzdCAqL1xcbiBcXHRcXHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFxcdTAwMjZpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgXFx1MDAyNmNkYXRhKTtcXG4tXFxuLVxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxuIFxcdH1cXG4gXFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcXG5pbmRleCAyZjI4ODg2ZjNmZjc1Li40NTU2MGU5ZjBkMDdlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXFxuKysrIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcXG5AQCAtMTQzLDE2ICsxNDMsMjEgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxuIFxcdFxcdGlmIChybi1cXHUwMDNlcm5fc3RhcnQgXFx1MDAzYyBzdGFydCBcXHUwMDI2XFx1MDAyNiBybi1cXHUwMDNlcm5fbGFzdCBcXHUwMDNlIGxhc3QpIHtcXG4gXFx0XFx0XFx0dTMyIG9sZF9sYXN0ID0gcm4tXFx1MDAzZXJuX2xhc3Q7XFxuIFxcbitcXHRcXHRcXHQvKiBQcmUtYWxsb2NhdGUgdGhlIHJpZ2h0LWhhbGYgbm9kZSBiZWZvcmUgbW9kaWZ5aW5nXFxuK1xcdFxcdFxcdCAqIHRoZSB0cmVlLiBJZiBhbGxvY2F0aW9uIGZhaWxzIHdlIHJldHVybiAtRU5PTUVNXFxuK1xcdFxcdFxcdCAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xcbitcXHRcXHRcXHRpZiAoIW5ld19ybilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbiBcXHRcXHRcXHQvKiBPdmVybGFwcyB3aXRoIHRoZSBlbnRpcmUgY2xlYXJpbmcgcmFuZ2UgKi9cXG4gXFx0XFx0XFx0cmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7XFxuIFxcdFxcdFxcdHJuLVxcdTAwM2Vybl9sYXN0ID0gc3RhcnQgLSAxO1xcbiBcXHRcXHRcXHRyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTtcXG4gXFxuLVxcdFxcdFxcdC8qIEFkZCBhIHJhbmdlICovXFxuLVxcdFxcdFxcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuLVxcdFxcdFxcdGlmICghbmV3X3JuKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0LyogQWRkIHJpZ2h0LWhhbGYgcmFuZ2UgKi9cXG4gXFx0XFx0XFx0bmV3X3JuLVxcdTAwM2Vybl9zdGFydCA9IGxhc3QgKyAxO1xcbiBcXHRcXHRcXHRuZXdfcm4tXFx1MDAzZXJuX2xhc3QgPSBvbGRfbGFzdDtcXG4gXFx0XFx0XFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xcbkBAIC0xOTMsNiArMTk4LDcgQEAgaW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxuIHtcXG4gXFx0dTMyIGxhc3QgPSBzdGFydCArIGxlbiAtIDE7XFxuK1xcdHN0cnVjdCByYW5nZV9ub2RlICpuZXdfcm4gPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmlnaHQ7XFxuIFxcdHN0cnVjdCByYW5nZV9ub2RlICpsZWZ0O1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0yMDIsMjAgKzIwOCw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxuIFxcdGlmIChsZWZ0IFxcdTAwMjZcXHUwMDI2IGxlZnQtXFx1MDAzZXJuX3N0YXJ0IFxcdTAwM2M9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGxlZnQtXFx1MDAzZXJuX2xhc3QgXFx1MDAzZT0gbGFzdClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIG5ldyBub2RlIGlzIG5lZWRlZCBvbmx5IHdoZW4gdGhlIHJhbmdlIGhhcyBubyBhZGphY2VudCBmcmVlXFxuK1xcdCAqIHJhbmdlIG9uIGVpdGhlciBzaWRlLiAgVGhpcyBpcyBrbm93biBiZWZvcmUgY2xlYXJpbmc6IGFueSByYW5nZVxcbitcXHQgKiBjb3ZlcmluZyBzdGFydCAtIDEgb3IgbGFzdCArIDEgc3Vydml2ZXMgdGhlIGNsZWFyIGFzIGFuIGFkamFjZW50XFxuK1xcdCAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvXFxuK1xcdCAqIGEgZmFpbHVyZSBsZWF2ZXMgdGhlIHJhbmdlIHRyZWUgdW5tb2RpZmllZFxcbitcXHQgKi9cXG4rXFx0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcXG4rXFx0cmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICsgMSwgbGFzdCArIDEpO1xcbitcXHRpZiAoIWxlZnQgXFx1MDAyNlxcdTAwMjYgIXJpZ2h0KSB7XFxuK1xcdFxcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXFxuK1xcdFxcdFxcdFxcdFxcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XFxuK1xcdFxcdGlmICghbmV3X3JuKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4gXFx0LyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqL1xcbiBcXHRlcnIgPSByYW5nZV90cmVlX2NsZWFyKHJ0LCBzdGFydCwgbGVuKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9uZXc7XFxuIFxcbiBcXHQvKiBEbyB3ZSBoYXZlIGEgbGVmdC1hZGphY2VudCByYW5nZSA/ICovXFxuIFxcdGxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7XFxuLVxcdGlmIChsZWZ0IFxcdTAwMjZcXHUwMDI2IGxlZnQtXFx1MDAzZXJuX2xhc3QgKyAxICE9IHN0YXJ0KVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aWYgKGxlZnQgXFx1MDAyNlxcdTAwMjYgbGVmdC1cXHUwMDNlcm5fbGFzdCArIDEgIT0gc3RhcnQpIHtcXG4rXFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9uZXc7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIERvIHdlIGhhdmUgYSByaWdodC1hZGphY2VudCByYW5nZSA/ICovXFxuIFxcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCArIDEsIGxhc3QgKyAxKTtcXG4tXFx0aWYgKHJpZ2h0IFxcdTAwMjZcXHUwMDI2IHJpZ2h0LVxcdTAwM2Vybl9zdGFydCAhPSBsYXN0ICsgMSlcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdGlmIChyaWdodCBcXHUwMDI2XFx1MDAyNiByaWdodC1cXHUwMDNlcm5fc3RhcnQgIT0gbGFzdCArIDEpIHtcXG4rXFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9uZXc7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChsZWZ0IFxcdTAwMjZcXHUwMDI2IHJpZ2h0KSB7XFxuIFxcdFxcdC8qIENvbWJpbmUgbGVmdCBhbmQgcmlnaHQgYWRqYWNlbnQgcmFuZ2VzICovXFxuQEAgLTIzNSwxNCArMjYxLDE2IEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4gXFx0XFx0cmlnaHQtXFx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XFxuIFxcdFxcdHJhbmdlX2l0X2luc2VydChyaWdodCwgcnQpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRsZWZ0ID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcXG4tXFx0XFx0aWYgKCFsZWZ0KVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0bGVmdC1cXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcXG4tXFx0XFx0bGVmdC1cXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XFxuLVxcdFxcdHJhbmdlX2l0X2luc2VydChsZWZ0LCBydCk7XFxuK1xcdFxcdC8qIE5vIGFkamFjZW50IHJhbmdlczsgdXNlIHRoZSBwcmUtYWxsb2NhdGVkIG5vZGUgKi9cXG4rXFx0XFx0bmV3X3JuLVxcdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xcbitcXHRcXHRuZXdfcm4tXFx1MDAzZXJuX2xhc3QgPSBsYXN0O1xcbitcXHRcXHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfZnJlZV9uZXc6XFxuK1xcdGtmcmVlX25vbG9jayhuZXdfcm4pO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiB2b2lkIHJhbmdlX3RyZWVfZGVzdHJveShzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjQ5LjU3NTAyOTM2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5MzkwNDY1NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmFuZ2VfdHJlZV9zZXRcIixcbiAgICBcInJhbmdlX3RyZWVfY2xlYXJcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlXCIsXG4gICAgXCJhcmVuYV9mcmVlX3dvcmtlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEncyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IG1vZGlmaWVzIHRoZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbm9kZXMgYmVmb3JlIGFsdGVyaW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IHN0YXRlcy4gSXQgYWxzbyB1cGRhdGVzIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCB0byBoYW5kbGUgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcGF0aHMgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzRlYTVmMjcwNmYxMGU2Yzk1MmU1YTU0YjBjZTZhYWY5Y2ViYjIzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDM6MjU6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDU1NWVlMjUzMWVmOTguLjMwNzQ1ZGE5Mjc3YjAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTg4MSw3ICs4ODEsMTIgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZGVmZXI7XG4gXG4tXHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbitcdHJldCA9IHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbitcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNmZyZWVfcGFnZXMpO1xuIFx0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcbkBAIC0xMDA0LDExICsxMDA5LDE3IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0a2FkZHIgPSBhcmVuYV92bV9zdGFydCArIHMtXHUwMDNldWFkZHI7XG4gXHRcdHBnb2ZmID0gY29tcHV0ZV9wZ29mZihhcmVuYSwgcy1cdTAwM2V1YWRkcik7XG4gXG4rXHRcdC8qIE1hcmsgdGhlIHJhbmdlIGFzIGZyZWUgYmVmb3JlIGNsZWFyaW5nIFBURXMgc28gdGhhdFxuK1x0XHQgKiBpZiB0aGUgcmFuZ2UgdHJlZSB1cGRhdGUgZmFpbHMgd2UgbGVhdmUgdGhlIFBURXNcbitcdFx0ICogaW50YWN0LCBhdm9pZGluZyBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIHdoZXJlIHBhZ2VzXG4rXHRcdCAqIGFyZSBmcmVlZCBidXQgdGhlIGFyZW5hIGZyZWUgdHJlZSBkb2VzIG5vdCB0cmFjayB0aGVtLlxuK1x0XHQgKi9cbitcdFx0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHQvKiBjbGVhciBwdGVzIGFuZCBjb2xsZWN0IHBhZ2VzIGluIGZyZWVfcGFnZXMgbGxpc3QgKi9cbiBcdFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gXHRcdFx0XHRcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFx1MDAyNmNkYXRhKTtcbi1cbi1cdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4gXHR9XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXG5pbmRleCAyZjI4ODg2ZjNmZjc1Li40NTU2MGU5ZjBkMDdlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbisrKyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXG5AQCAtMTQzLDE2ICsxNDMsMjEgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRcdGlmIChybi1cdTAwM2Vybl9zdGFydCBcdTAwM2Mgc3RhcnQgXHUwMDI2XHUwMDI2IHJuLVx1MDAzZXJuX2xhc3QgXHUwMDNlIGxhc3QpIHtcbiBcdFx0XHR1MzIgb2xkX2xhc3QgPSBybi1cdTAwM2Vybl9sYXN0O1xuIFxuK1x0XHRcdC8qIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmdcbitcdFx0XHQgKiB0aGUgdHJlZS4gSWYgYWxsb2NhdGlvbiBmYWlscyB3ZSByZXR1cm4gLUVOT01FTVxuK1x0XHRcdCAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuXG4rXHRcdFx0ICovXG4rXHRcdFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSxcbitcdFx0XHRcdFx0XHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuK1x0XHRcdGlmICghbmV3X3JuKVxuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4gXHRcdFx0LyogT3ZlcmxhcHMgd2l0aCB0aGUgZW50aXJlIGNsZWFyaW5nIHJhbmdlICovXG4gXHRcdFx0cmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7XG4gXHRcdFx0cm4tXHUwMDNlcm5fbGFzdCA9IHN0YXJ0IC0gMTtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTtcbiBcbi1cdFx0XHQvKiBBZGQgYSByYW5nZSAqL1xuLVx0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsXG4tXHRcdFx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbi1cdFx0XHRpZiAoIW5ld19ybilcbi1cdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdC8qIEFkZCByaWdodC1oYWxmIHJhbmdlICovXG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX3N0YXJ0ID0gbGFzdCArIDE7XG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX2xhc3QgPSBvbGRfbGFzdDtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XG5AQCAtMTkzLDYgKzE5OCw3IEBAIGludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4ge1xuIFx0dTMyIGxhc3QgPSBzdGFydCArIGxlbiAtIDE7XG4rXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbmV3X3JuID0gTlVMTDtcbiBcdHN0cnVjdCByYW5nZV9ub2RlICpyaWdodDtcbiBcdHN0cnVjdCByYW5nZV9ub2RlICpsZWZ0O1xuIFx0aW50IGVycjtcbkBAIC0yMDIsMjAgKzIwOCw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9zdGFydCBcdTAwM2M9IHN0YXJ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX2xhc3QgXHUwMDNlPSBsYXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBBIG5ldyBub2RlIGlzIG5lZWRlZCBvbmx5IHdoZW4gdGhlIHJhbmdlIGhhcyBubyBhZGphY2VudCBmcmVlXG4rXHQgKiByYW5nZSBvbiBlaXRoZXIgc2lkZS4gIFRoaXMgaXMga25vd24gYmVmb3JlIGNsZWFyaW5nOiBhbnkgcmFuZ2VcbitcdCAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICsgMSBzdXJ2aXZlcyB0aGUgY2xlYXIgYXMgYW4gYWRqYWNlbnRcbitcdCAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvXG4rXHQgKiBhIGZhaWx1cmUgbGVhdmVzIHRoZSByYW5nZSB0cmVlIHVubW9kaWZpZWRcbitcdCAqL1xuK1x0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcbitcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCArIDEsIGxhc3QgKyAxKTtcbitcdGlmICghbGVmdCBcdTAwMjZcdTAwMjYgIXJpZ2h0KSB7XG4rXHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXG4rXHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4rXHRcdGlmICghbmV3X3JuKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0LyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqL1xuIFx0ZXJyID0gcmFuZ2VfdHJlZV9jbGVhcihydCwgc3RhcnQsIGxlbik7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIG91dF9mcmVlX25ldztcbiBcbiBcdC8qIERvIHdlIGhhdmUgYSBsZWZ0LWFkamFjZW50IHJhbmdlID8gKi9cbiBcdGxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7XG4tXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydClcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydCkge1xuK1x0XHRlcnIgPSAtRUZBVUxUO1xuK1x0XHRnb3RvIG91dF9mcmVlX25ldztcbitcdH1cbiBcbiBcdC8qIERvIHdlIGhhdmUgYSByaWdodC1hZGphY2VudCByYW5nZSA/ICovXG4gXHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgKyAxLCBsYXN0ICsgMSk7XG4tXHRpZiAocmlnaHQgXHUwMDI2XHUwMDI2IHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgKyAxKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGlmIChyaWdodCBcdTAwMjZcdTAwMjYgcmlnaHQtXHUwMDNlcm5fc3RhcnQgIT0gbGFzdCArIDEpIHtcbitcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4rXHR9XG4gXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgcmlnaHQpIHtcbiBcdFx0LyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi9cbkBAIC0yMzUsMTQgKzI2MSwxNiBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRcdHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XG4gXHRcdHJhbmdlX2l0X2luc2VydChyaWdodCwgcnQpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bGVmdCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4tXHRcdGlmICghbGVmdClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bGVmdC1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuLVx0XHRsZWZ0LVx1MDAzZXJuX2xhc3QgPSBsYXN0O1xuLVx0XHRyYW5nZV9pdF9pbnNlcnQobGVmdCwgcnQpO1xuK1x0XHQvKiBObyBhZGphY2VudCByYW5nZXM7IHVzZSB0aGUgcHJlLWFsbG9jYXRlZCBub2RlICovXG4rXHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuK1x0XHRuZXdfcm4tXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XG4rXHRcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuK1xuK291dF9mcmVlX25ldzpcbitcdGtmcmVlX25vbG9jayhuZXdfcm4pO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCByYW5nZV90cmVlX2Rlc3Ryb3koc3RydWN0IHJhbmdlX3RyZWUgKnJ0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MjU6NDkuNTc1MDMzMDIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NTk4OTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgQXJlbmEgYW5kIFJhbmdlIFRyZWUgUGF0Y2ggUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2UgaXMgaW4gaG93IGByYW5nZV90cmVlX3NldGAgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcnMuIFNwZWNpZmljYWxseSwgaXQncyBwcmUtYWxsb2NhdGluZyBub2RlcyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlLCBhbmQgdGhlIHBhdGNoIHVwZGF0ZXMgYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgIHRvIGRlYWwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAgbm93LiBUaGlzIGlzIGFsbCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCBpdCBkaXJlY3RseSByZWxhdGVzIHRvIEJQRiBhcmVuYXMgYW5kIHJhbmdlIHRyZWVzLCBzbyBmdXp6aW5nIHRoaXMgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBpbXBvcnRhbnQuXG5cblJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBwYXkgYXR0ZW50aW9uIHRvIGhlcmUuIEkgbmVlZCB0byB6ZXJvIGluIG9uOiBgYXJlbmFfZnJlZV9wYWdlc2AsIGBhcmVuYV9mcmVlX3dvcmtlcmAsIGByYW5nZV90cmVlX2NsZWFyYCwgYW5kIG9mIGNvdXJzZSwgYHJhbmdlX3RyZWVfc2V0YC4gSSdsbCBuZWVkIHRvIHJlYWxseSBkaWcgaW4gYW5kIGFuYWx5emUgdGhlbS5cblxuTm93LCBiZWZvcmUgSSBzdGFydCBidWlsZGluZyB1cCBhIGZ1enppbmcgc3RyYXRlZ3ksIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBJJ2xsIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VhcmNoIGZvciB1c2FnZXMgb2YgYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGFueSBwb3RlbnRpYWwgY29uZmlnIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjUzLjc3MTAyNDk4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyNDU2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFfZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmMtNDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAtXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjEwPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTIyOS1cXHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzA6XFx0ICogc2NyYXRjaGVzIGl0cyBQVEUuIEEgbGF0ZXIgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKSBvdmVyIHRoYXQgcmFuZ2Ugd2Fsa3NcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVxcdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Njg9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTc3Mi1cXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjc3MzpcXHRcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc3NC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9Nzg5PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjg0NzpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODQ4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMDg0PXZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDk2Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTAyLVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwMzpcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIHRydWUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA0LX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEwNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwNjp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTEyLVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTExMzpcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExNC19XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzMj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTMzOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcywgS0ZfQVJFTkFfQVJHMilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMzc9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjAyLVxcdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMDM6XFx0S0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjA0LVxcdEtGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjk1PUJURl9JRChmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjk2OkJURl9JRChmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyOTctQlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODI3PXN0YXRpYyBib29sIGlzX2JwZl9hcmVuYV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODI5LVxcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MzA6XFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODMxLVxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzXTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTgxNz1zdGF0aWMgaW50IHNwZWNpYWxpemVfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjLCBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NTctXFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg1ODpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg1OS1cXHRcXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg2MDpcXHRcXHRcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjEtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzoyNTo1My44NzEyNzUxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODMwMzUyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBCUEYgQXJlbmEgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IEJQRiBhcmVuYXMgYW5kIHdhbnQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBkZWZpbmluZyBhbmQgZG9jdW1lbnRpbmcgdGhlc2UgdHlwZXMgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBhbnkgc3BlY2lmaWMgZmxhZ3MsIHNldHRpbmdzLCBvciBjb21waWxlLXRpbWUgb3B0aW9ucyByZWxhdGVkIHRvIEJQRiBhcmVuYXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3IgbWlnaHQgbmVlZCB0byB0d2VhayBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHdoYXQgY29udHJvbHMgYXJlIGluIHBsYWNlIGFuZCBwb3RlbnRpYWxseSBndWlkZSBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgcmVsZXZhbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjU2LjY1NDMxMjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMjIyNzYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI1OjU2Ljc2NzU0MzUzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTYyNzQzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgQ29tcGlsYXRpb24gUHJvY2VzcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQlBGIGluZnJhc3RydWN0dXJlIGhhbmRsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGtleSBmaWxlcyBsaWtlIGBhcmVuYS5jYCBhbmQgYHJhbmdlX3RyZWUuY2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgY29tcGlsZXIgZmxhZ3MgdXNlZCBmb3IgdGhlc2UgcGFydGljdWxhciBzb3VyY2UgZmlsZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIHRhcmdldC1zcGVjaWZpYyBpbnN0cnVjdGlvbnMgcmVsZXZhbnQgdG8gdGhvc2UgZnVuY3Rpb25hbGl0aWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5yYXZlbCB0aGUgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI2OjAwLjQ4MzgyMDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDQ3MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzoyNjowMC41NzUyNzEwOTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM0MjAzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSdtIHRyeWluZyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHNldCB1cCBjb3JyZWN0bHkgZm9yIEJQRjpcblxuKipCUEYgUmVxdWlyZW1lbnRzIGFuZCBLZXkgRnVuY3Rpb24gRXhwbG9yYXRpb24qKlxuXG5BbHJpZ2h0LCBJIGtub3cgSSdtIHdvcmtpbmcgd2l0aCBCUEYsIHNvIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24gaXMgZGVmaW5pdGVseSBhIG11c3QtaGF2ZS4gVGhhdCdzIGZ1bmRhbWVudGFsLiBBbmQgbmF0dXJhbGx5LCBzaW5jZSB3ZSdyZSB0YWxraW5nIGFib3V0IHJ1bm5pbmcgY29kZSBlZmZlY3RpdmVseSwgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBuZWVkIHRvIGJlIGVuYWJsZWQgYW5kIHNldCB0byAneScuIFRoYXQncyBqdXN0IHN0YW5kYXJkIHByYWN0aWNlIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBmdW5jdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgb3Igc3RhdGljLiBLbm93aW5nIHRoZWlyIHNjb3BlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IEJQRiBjYW4gaW50ZXJhY3Qgd2l0aCB0aGVzZSBjb21wb25lbnRzIGFuZCB0aGVpciBvdmVyYWxsIGF2YWlsYWJpbGl0eS4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBzdHJ1Y3R1cmUgbXkgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzoyNjowMy44MDk0Nzk2NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTgyNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhbmdlX3RyZWVfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz0yNjY9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE5LVxcdHJhbmdlX3RyZWVfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzIwOlxcdGVyciA9IHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIDAsIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cXHRpZiAocmV0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUyMzpcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI4LVxcdGlmIChyZXQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTI5OlxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MzAtXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY4PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTQtXFx0aWYgKHVhZGRyKSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjcxNTpcXHRcXHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03Njgtb3V0Olxcbmtlcm5lbC9icGYvYXJlbmEuYzo3Njk6XFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYgKyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcwLVxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9ODQ3PXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTg4My1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODg0OlxcdHJldCA9IHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTg4NS1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTQ0PXN0YXRpYyBpbnQgYXJlbmFfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgdTMyIHBhZ2VfY250KVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk2Mi1cXHQvKiBDYW5ub3QgZ3VhcmQgYWxyZWFkeSBhbGxvY2F0ZWQgcGFnZXMuICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjk2MzpcXHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy05NjQtXFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTk3OD1zdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxNi1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTAxNzpcXHRcXHRpZiAocmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxOC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI2LSAqIEF0IGluaXQgdGltZTpcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoyNzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCAwLCBtYXgpO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI4LSAqIFRoZW46XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zMi0gKiB0byBmaW5kIGZyZWUgcmFuZ2UgYW5kIG1hcmsgc2xvdHMgYXMgYWxsb2NhdGVkIGFuZCBsYXRlcjpcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzozMzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCBzdGFydCwgbGVuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zNC0gKiB0byBtYXJrIGFzIHVuYWxsb2NhdGVkIGFmdGVyIHVzZS5cXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTEzNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4NC0vKiBJcyB0aGUgd2hvbGUgcmFuZ2Ugc2V0ID8gKi9cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxODU6aW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTctLyogU2V0IHRoZSByYW5nZSBpbiB0aGlzIHJhbmdlIHRyZWUgKi9cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxOTg6aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE5OS17XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaD0xNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbik7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmg6MTc6aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaDoxODppbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oLTE5LXM2NCByYW5nZV90cmVlX2ZpbmQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MjY6MDMuODg1NjY5NTc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzExMjg1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiB0aGUgUHJvcG9zZWQgQlBGIEFyZW5hIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gQlBGIGFyZW5hIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBgcmFuZ2VfdHJlZV9zZXRgLCBgcmFuZ2VfdHJlZV9jbGVhcmAsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBlbnRyeSBwb2ludHMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBwcm9wb3NlZCBjaGFuZ2VzIHdpbGwgYWZmZWN0IHRoZSBrZXJuZWwuXG5cbkZpcnN0LCBJIG5vdGUgdGhhdCBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgYXJlIGV4cG9ydGVkIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGByYW5nZV90cmVlLmNgIGFuZCBtYWRlIGF2YWlsYWJsZSB2aWEgYHJhbmdlX3RyZWUuaGAsIHNvIHRoZXkgYXJlICpub3QqIHN0YXRpYy4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25zIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMuXG5cbk5leHQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuIFRoZXkgKmFyZSogZGVmaW5lZCBhcyBzdGF0aWMgd2l0aGluIGBhcmVuYS5jYCwgd2hpY2ggbWFrZXMgbWUgcGF1c2UuIEdpdmVuIHRoZSBkaXJlY3RpdmUsIHRoZXNlIHNlZW0gbGVzcyBpZGVhbCwgYXMgdGhlIHN0YXRpYyBuYXR1cmUgaGludHMgYXQgaW5saW5pbmcuIEhvd2V2ZXIsIGBhcmVuYV9mcmVlX3BhZ2VzYCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBmcm9tIGEgZmV3IHBsYWNlcywgc3BlY2lmaWNhbGx5IGBhcmVuYV9hbGxvY19wYWdlc2AsIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuIFRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBsb2NhdGlvbnMgbWFrZXMgaW5saW5pbmcgbGVzcyBsaWtlbHkuIFRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kIGNvdmVyIGFsbCBiYXNlcywgSSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAgYXMgd2VsbC4gV2FpdCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBpcyBhIGtmdW5jLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgZm9jdXMgaXMgb246XG5cbiogICBgcmFuZ2VfdHJlZV9zZXRgXG4qICAgYHJhbmdlX3RyZWVfY2xlYXJgXG4qICAgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYFxuKiAgIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYFxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBvcHRpbWFsIEFQSSBlbnRyeXBvaW50cyBmb3IgdGhpcyB0YXNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgIGFyZSBiZWluZyBoYW5kbGVkLCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cyBhcmUgdGFyZ2V0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MjY6MTAuOTE2ODAyNDE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDA5NTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MjEwPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTIyOS1cXHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzA6XFx0ICogc2NyYXRjaGVzIGl0cyBQVEUuIEEgbGF0ZXIgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKSBvdmVyIHRoYXQgcmFuZ2Ugd2Fsa3NcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVxcdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMDg0PXZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDk2Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTA1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTA2OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMDcte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTExMzI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcywgS0ZfQVJFTkFfUkVUIHwgS0ZfQVJFTkFfQVJHMilcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEzMzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMzQtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTM3PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwMi1cXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjAzOlxcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwNC1cXHRLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI5NT1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI5NjpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjk3LUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTgyNz1zdGF0aWMgYm9vbCBpc19icGZfYXJlbmFfa2Z1bmModTMyIGJ0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyOS1cXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExODMwOlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgzMS1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlc107XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4MTc9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODU3LVxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NTg6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NTktXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NjA6XFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODYxLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MjY6MTAuOTg2OTAyOTM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MzI4MTIzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEJQRiBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpZGVudGlmaWVzIHNldmVyYWwga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBhbmQsIHRoZXJlZm9yZSwgYXJlIHBvdGVudGlhbCB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGUgbGlzdCBpbmNsdWRlcyBgcmFuZ2VfdHJlZV9zZXRgLCBgcmFuZ2VfdHJlZV9jbGVhcmAsIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgYGFyZW5hX2ZyZWVfd29ya2VyYCwgZXZlbiB0aG91Z2ggaXQncyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgYmVjYXVzZSBpdCByZXByZXNlbnRzIGEgZGlzdGluY3QgZXhlY3V0aW9uIHBhdGggdGhhdCdzIG5vdyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guXG5cbkknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaXMgYEJQRl9TWVNDQUxMYC4gV2hpbGUgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBhcmUgcHJldHR5IHN0YW5kYXJkLCBJIGRvbid0IHRoaW5rIHRoZXkncmUgZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gZW5hYmxlciBoZXJlLlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgdGhlIHBhdGNoJ3MgY29yZSBsb2dpYy4gSXQncyByZWFsbHkgYWJvdXQgZW5oYW5jaW5nIHRoZSByb2J1c3RuZXNzIG9mIEJQRidzIGFyZW5hIG1hbmFnZW1lbnQuIFRoZSBwYXRjaCBwcm9hY3RpdmVseSBhZGRyZXNzZXMgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgd2l0aGluIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBieSBpbXBsZW1lbnRpbmcgcHJlLWFsbG9jYXRpb24gb2Ygbm9kZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGFpbXMgdG8gcHJldmVudCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGNvcnJ1cHRpb24gdGhhdCBjb3VsZCBhcmlzZSBkdXJpbmcgcmFuZ2UgdHJlZSBtYW5pcHVsYXRpb24uIFRoZSBwYXRjaCBhbHNvIHByb3BhZ2F0ZXMgdGhlIGVmZmVjdHMgb2YgdGhlIGByYW5nZV90cmVlX3NldGAgY2hhbmdlcyB0byBgYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRoZWlyIGZvY3VzIG9uIGVycm9yIGhhbmRsaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgcmFuZ2UgdHJlZSwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gSXQncyBpbXBlcmF0aXZlIHRvIHZhbGlkYXRlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSBlcnJvciBwYXRocyBhbmQgZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHRyZWUgb3BlcmF0aW9ucyB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMuXG5cblRoZXJlZm9yZSwgdGhlIHJlc3BvbnNlIHNob3VsZCBiZSBhcyBmb2xsb3dzOlxuXG5Xb3J0aEZ1enppbmc6IHRydWVcbkZvY3VzU3ltYm9sczpcbi0gYHJhbmdlX3RyZWVfc2V0YFxuLSBgcmFuZ2VfdHJlZV9jbGVhcmBcbi0gYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYFxuLSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWBcbi0gYGFyZW5hX2ZyZWVfd29ya2VyYFxuXG5FbmFibGVDb25maWdzOlxuLSBgQlBGX1NZU0NBTExgXG5cblJlYXNvbmluZzpcblRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gQlBGJ3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBpbnRyb2R1Y2VzIG5vZGUgcHJlLWFsbG9jYXRpb24gdG8gYWRkcmVzcyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIGVuc3VyaW5nIHRoZSB0cmVlJ3MgaW50ZWdyaXR5LiBGdXJ0aGVyIGNoYW5nZXMgY2FzY2FkZSBpbnRvIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYC4gQmVjYXVzZSB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGVycm9yIGhhbmRsaW5nIGFuZCByYW5nZSB0cmVlIG1hbmlwdWxhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBmdXp6aW5nIGlzIHJlcXVpcmVkIHRvIHZhbGlkYXRlIGJvdGggdGhlIGVycm9yIHBhdGhzIGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHRyZWUgbWFuaXB1bGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODUsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjI2OjE4LjgxOTcxODQwMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTc3Mjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYW5nZV90cmVlX3NldFwiLFxuICAgIFwicmFuZ2VfdHJlZV9jbGVhclwiLFxuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVcIixcbiAgICBcImFyZW5hX2ZyZWVfd29ya2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGluIEJQRiBhcmVuYSdzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyAoYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgKS4gSXQgbW9kaWZpZXMgdGhlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBub2RlcyBiZWZvcmUgYWx0ZXJpbmcgdGhlIHRyZWUgdG8gcHJldmVudCBpbmNvbnNpc3RlbnQgc3RhdGVzLiBJdCBhbHNvIHVwZGF0ZXMgYGFyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgIHRvIGhhbmRsZSB0aGVzZSBwb3RlbnRpYWwgZmFpbHVyZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBlcnJvciBwYXRocyBhbmQgdHJlZSBtYW5pcHVsYXRpb25zIGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmFuZ2VfdHJlZV9zZXRcIixcbiAgICBcInJhbmdlX3RyZWVfY2xlYXJcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlXCIsXG4gICAgXCJhcmVuYV9mcmVlX3dvcmtlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiBCUEYgYXJlbmEncyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IG1vZGlmaWVzIHRoZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbm9kZXMgYmVmb3JlIGFsdGVyaW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IHN0YXRlcy4gSXQgYWxzbyB1cGRhdGVzIGBhcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCB0byBoYW5kbGUgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcGF0aHMgYW5kIHRyZWUgbWFuaXB1bGF0aW9ucyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl75gr[1] Phase: Succeeded StartedAt: 2026-08-06 03:26:30 +0000 UTC FinishedAt: 2026-08-06 03:26:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 03:26:30 +0000 UTC FinishedAt: 2026-08-06 03:26:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2] Phase: Succeeded StartedAt: 2026-08-06 03:26:30 +0000 UTC FinishedAt: 2026-08-06 07:11:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:26:30 +0000 UTC FinishedAt: 2026-08-06 07:11:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:26:30 +0000 UTC FinishedAt: 2026-08-06 03:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:26:30 +0000 UTC FinishedAt: 2026-08-06 03:26:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-workflowl75gr/series-workflowl75gr-convert-artifact-1113394484/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:26:40 +0000 UTC FinishedAt: 2026-08-06 03:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:26:40 +0000 UTC FinishedAt: 2026-08-06 03:47:05 +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:*3004cd41-1765-442b-b890-8de8d9656728,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-workflowl75gr/series-workflowl75gr-convert-artifact-1113394484/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": "b760a670-89e1-498b-8f4e-46a2be71a849", "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-workflowl75gr/series-workflowl75gr-build-action-2663433010/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:26:40 +0000 UTC FinishedAt: 2026-08-06 03:46:55 +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:*3004cd41-1765-442b-b890-8de8d9656728,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-workflowl75gr/series-workflowl75gr-convert-artifact-1113394484/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": "b760a670-89e1-498b-8f4e-46a2be71a849", "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-workflowl75gr/series-workflowl75gr-build-action-2663433010/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:47:05 +0000 UTC FinishedAt: 2026-08-06 03:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:47:05 +0000 UTC FinishedAt: 2026-08-06 03:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:47:05 +0000 UTC FinishedAt: 2026-08-06 03:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:47:05 +0000 UTC FinishedAt: 2026-08-06 03:47:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-workflowl75gr/series-workflowl75gr-convert-artifact-2586445043/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:47:15 +0000 UTC FinishedAt: 2026-08-06 03:49:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:47:15 +0000 UTC FinishedAt: 2026-08-06 03:49:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b760a670-89e1-498b-8f4e-46a2be71a849,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-workflowl75gr/series-workflowl75gr-build-action-2663433010/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-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:49:14 +0000 UTC FinishedAt: 2026-08-06 03:49:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:49:14 +0000 UTC FinishedAt: 2026-08-06 03:49:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:49:14 +0000 UTC FinishedAt: 2026-08-06 04:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:49:14 +0000 UTC FinishedAt: 2026-08-06 04:06:42 +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:*3004cd41-1765-442b-b890-8de8d9656728,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-workflowl75gr/series-workflowl75gr-convert-artifact-2586445043/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": "e1ea9298-e41d-4efa-a2f1-befa15c4c599", "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-workflowl75gr/series-workflowl75gr-build-action-4283481255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 03:49:14 +0000 UTC FinishedAt: 2026-08-06 04:06:32 +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:*3004cd41-1765-442b-b890-8de8d9656728,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-workflowl75gr/series-workflowl75gr-convert-artifact-2586445043/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": "e1ea9298-e41d-4efa-a2f1-befa15c4c599", "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-workflowl75gr/series-workflowl75gr-build-action-4283481255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:06:42 +0000 UTC FinishedAt: 2026-08-06 04:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:06:42 +0000 UTC FinishedAt: 2026-08-06 04:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:06:42 +0000 UTC FinishedAt: 2026-08-06 04:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:06:42 +0000 UTC FinishedAt: 2026-08-06 04:08:35 +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:*e1ea9298-e41d-4efa-a2f1-befa15c4c599,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-workflowl75gr/series-workflowl75gr-build-action-4283481255/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-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:08:45 +0000 UTC FinishedAt: 2026-08-06 07:11:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:08:45 +0000 UTC FinishedAt: 2026-08-06 07:11:15 +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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"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:*b760a670-89e1-498b-8f4e-46a2be71a849,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1ea9298-e41d-4efa-a2f1-befa15c4c599,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-workflowl75gr/series-workflowl75gr-build-action-2663433010/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-workflowl75gr/series-workflowl75gr-build-action-4283481255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:08:45 +0000 UTC FinishedAt: 2026-08-06 04:08:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:08:45 +0000 UTC FinishedAt: 2026-08-06 04:08:50 +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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"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-workflowl75gr/series-workflowl75gr-convert-artifact-39819756/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:08:45 +0000 UTC FinishedAt: 2026-08-06 04:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:08:45 +0000 UTC FinishedAt: 2026-08-06 04:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:08:45 +0000 UTC FinishedAt: 2026-08-06 04:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:08:55 +0000 UTC FinishedAt: 2026-08-06 07:11:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl75gr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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":["range_tree_set","range_tree_clear","bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable","arena_free_worker"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"1cb08b36-441f-4324-8b96-ab8565f52dca","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-06 04:08:55 +0000 UTC FinishedAt: 2026-08-06 07:11:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b760a670-89e1-498b-8f4e-46a2be71a849,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1ea9298-e41d-4efa-a2f1-befa15c4c599,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-workflowl75gr/series-workflowl75gr-build-action-2663433010/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-workflowl75gr/series-workflowl75gr-build-action-4283481255/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-workflowl75gr/series-workflowl75gr-convert-artifact-39819756/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,}