Name: series-workflowdhkvq Phase: Succeeded StartedAt: 2026-07-12 03:05:23 +0000 UTC FinishedAt: 2026-07-12 07:52:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[0] Phase: Succeeded StartedAt: 2026-07-12 03:05:23 +0000 UTC FinishedAt: 2026-07-12 03:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 03:05:23 +0000 UTC FinishedAt: 2026-07-12 03:24:09 +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": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "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": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "4acf8445-0d65-412b-beb9-aacf97f0fdf9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_prog_pack_alloc", "bpf_dispatcher_change_prog", "arch_bpf_trampoline_size", "bpf_jit_alloc_exec_rw", "alloc_new_pack" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDssCiAgICAmIzM0O2FyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2FsbG9jX2V4ZWNfcncmIzM0OywKICAgICYjMzQ7YWxsb2NfbmV3X3BhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODVjNmU1ZTNhMDQ3OTFlNDg0YjAxZDhkNTk5ODM0NDNiNmM5OGE2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDAzOjIwOjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuY1xuaW5kZXggZmI2NzIxN2ZkZGNkMzcuLjA3OWY4YzdlOWUzY2RlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9pbml0LmNcbkBAIC0xMTA3LDEwICYjNDM7MTEwNywxMCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuIFx0XHRcdH0sXG4gXHRcdFx0W0VYRUNNRU1fQlBGXSA9IHtcbi1cdFx0XHRcdC5mbGFnc1x0PSBFWEVDTUVNX0tBU0FOX1NIQURPVyxcbiYjNDM7XHRcdFx0XHQuZmxhZ3NcdD0gZmxhZ3MsXG4gXHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4gXHRcdFx0XHQuZW5kXHQ9IE1PRFVMRVNfRU5ELFxuLVx0XHRcdFx0LnBncHJvdFx0PSBQQUdFX0tFUk5FTCxcbiYjNDM7XHRcdFx0XHQucGdwcm90XHQ9IHBncHJvdCxcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4gXHRcdFx0fSxcbiBcdFx0XHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uYjJmZWVjODFlMjMxMmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTM3MDMsMTMgJiM0MzszNzAzLDEyIEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxuLVx0ICogVGhpcyB3aWxsIE5PVCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIGRpcmVjdCBtYXAsIGFzIHdlIGRvIG5vdFxuLVx0ICogY2FsbCBzZXRfbWVtb3J5XyooKSBvbiB0aGlzIGJ1ZmZlci5cbiBcdCAqXG4gXHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxuIFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbiYjNDM7XHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS5cbiBcdCAqL1xuLVx0aW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWMoUEFHRV9TSVpFKTtcbiYjNDM7XHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xuIFx0aWYgKCFpbWFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4zMmQ1Mjk3YzU1N2U1YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMzMzLDYgJiM0MzsxMzMzLDcgQEAgYnBmX2ppdF9iaW5hcnlfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxuIHZvaWQgYnBmX2ppdF9iaW5hcnlfZnJlZShzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhkcik7XG4gdTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKTtcbiB2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcbiYjNDM7dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gdm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKTtcbiB2b2lkIGJwZl9qaXRfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKTtcbiBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li5lMjA3NjY2N2IyNDUxNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuY1xuQEAgLTkxNiw2ICYjNDM7OTE2LDExIEBAIHN0YXRpYyBMSVNUX0hFQUQocGFja19saXN0KTtcbiBcbiAjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicGZfaml0X21lbV9pc19yb3godm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaztcbkBAIC05MjcsMTYgJiM0Mzs5MzIsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNcbiBcdHBhY2stXHUwMDNlcHRyID0gYnBmX2ppdF9hbGxvY19leGVjKEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4gXHRpZiAoIXBhY2stXHUwMDNlcHRyKVxuIFx0XHRnb3RvIG91dDtcbi1cdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcbiBcdGJpdG1hcF96ZXJvKHBhY2stXHUwMDNlYml0bWFwLCBCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKTtcbiBcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmJwZl9wcmVkX2ZsdXNoX2VuYWJsZWQpKVxuIFx0XHRwYWNrLVx1MDAzZWFyY2hfZmx1c2hfbmVlZGVkID0gdHJ1ZTtcbi1cdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVx1MDAzZXB0cik7XG4tXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVx1MDAzZXB0cixcbi1cdFx0XHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XG4mIzQzO1x0XHRicGZfZmlsbF9pbGxfaW5zbnMocGFjay1cdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4mIzQzO1x0XHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cdTAwM2VwdHIpO1xuJiM0MztcdFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cdTAwM2VwdHIsXG4mIzQzO1x0XHRcdFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwYWNrLVx1MDAzZWxpc3QsIFx1MDAyNnBhY2tfbGlzdCk7XG4gXHRyZXR1cm4gcGFjaztcbiBcbkBAIC05NjUsNyAmIzQzOzk3Miw3IEBAIHZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sXG4gXHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O0JQRjogUHJlZGljdG9ycyBub3QgZmx1c2hlZCBmb3IgYWxsb2NhdGlvbnMgZ3JlYXRlciB0aGFuIEJQRl9QUk9HX1BBQ0tfU0laRVxcblwmIzM0Oyk7XG4gXHRcdHNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpO1xuIFx0XHRwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoc2l6ZSk7XG4tXHRcdGlmIChwdHIpIHtcbiYjNDM7XHRcdGlmIChwdHIgXHUwMDI2XHUwMDI2ICFicGZfaml0X21lbV9pc19yb3goKSkge1xuIFx0XHRcdGludCBlcnI7XG4gXG4gXHRcdFx0YnBmX2ZpbGxfaWxsX2luc25zKHB0ciwgc2l6ZSk7XG5AQCAtMTExNiwxMiAmIzQzOzExMjMsMTcgQEAgdm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcbiBcdGF0b21pY19sb25nX3N1YihzaXplLCBcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xuIH1cbiBcbi12b2lkICpfX3dlYWsgYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gZXhlY21lbV9hbGxvYyhFWEVDTUVNX0JQRiwgc2l6ZSk7XG4gfVxuIFxuLXZvaWQgX193ZWFrIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXG4mIzQzO3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZXhlY21lbV9hbGxvY19ydyhFWEVDTUVNX0JQRiwgc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcilcbiB7XG4gXHRleGVjbWVtX2ZyZWUoYWRkcik7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jIGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcbmluZGV4IGVhMmQ2MGRjMWZlZWI3Li5kODViM2U4YWQyZTRlZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xuQEAgLTE0OCw3ICYjNDM7MTQ4LDEwIEBAIHZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXG4gXHRcdGQtXHUwMDNlaW1hZ2UgPSBicGZfcHJvZ19wYWNrX2FsbG9jKFBBR0VfU0laRSwgYnBmX2ppdF9maWxsX2hvbGVfd2l0aF96ZXJvLCBmYWxzZSk7XG4gXHRcdGlmICghZC1cdTAwM2VpbWFnZSlcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xuJiM0MztcdFx0LyogZC1cdTAwM2Vyd19pbWFnZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlXG4mIzQzO1x0XHQgKiBjYW4gdXNlIHZtYWxsb2MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGQtXHUwMDNlcndfaW1hZ2UgPSB2bWFsbG9jKFBBR0VfU0laRSk7XG4gXHRcdGlmICghZC1cdTAwM2Vyd19pbWFnZSkge1xuIFx0XHRcdGJwZl9wcm9nX3BhY2tfZnJlZShkLVx1MDAzZWltYWdlLCBQQUdFX1NJWkUpO1xuIFx0XHRcdGQtXHUwMDNlaW1hZ2UgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDssCiAgICAmIzM0O2FyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2FsbG9jX2V4ZWNfcncmIzM0OywKICAgICYjMzQ7YWxsb2NfbmV3X3BhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NWM2ZTVlM2EwNDc5MWU0ODRiMDFkOGQ1OTk4MzQ0M2I2Yzk4YTZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMTIgMDM6MjA6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggZmI2NzIxN2ZkZGNkMzcuLjA3OWY4YzdlOWUzY2RlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC0xMTA3LDEwICYjNDM7MTEwNywxMCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpCiAJCQkJLmFsaWdubWVudCA9IE1PRFVMRV9BTElHTiwKIAkJCX0sCiAJCQlbRVhFQ01FTV9CUEZdID0gewotCQkJCS5mbGFncwk9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLAomIzQzOwkJCQkuZmxhZ3MJPSBmbGFncywKIAkJCQkuc3RhcnQJPSBzdGFydCwKIAkJCQkuZW5kCT0gTU9EVUxFU19FTkQsCi0JCQkJLnBncHJvdAk9IFBBR0VfS0VSTkVMLAomIzQzOwkJCQkucGdwcm90CT0gcGdwcm90LAogCQkJCS5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sCiAJCQl9LAogCQkJW0VYRUNNRU1fTU9EVUxFX0RBVEFdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGRlNzUxNWVhMWJlYWU4Li5iMmZlZWM4MWUyMzEyZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMzcwMywxMyAmIzQzOzM3MDMsMTIgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncywKIAlpbnQgcmV0OwogCiAJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLgotCSAqIFRoaXMgd2lsbCBOT1QgY2F1c2UgZnJhZ21lbnRhdGlvbiBpbiBkaXJlY3QgbWFwLCBhcyB3ZSBkbyBub3QKLQkgKiBjYWxsIHNldF9tZW1vcnlfKigpIG9uIHRoaXMgYnVmZmVyLgogCSAqCiAJICogV2UgY2Fubm90IHVzZSBrdm1hbGxvYyBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaW1hZ2UgdG8gYmUgaW4KIAkgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLgomIzQzOwkgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS4KIAkgKi8KLQlpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpOwomIzQzOwlpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpOwogCWlmICghaW1hZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaAppbmRleCAxNGFjYjI0NTU3NDZmYy4uMzJkNTI5N2M1NTdlNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTMzMyw2ICYjNDM7MTMzMyw3IEBAIGJwZl9qaXRfYmluYXJ5X2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0ciwKIHZvaWQgYnBmX2ppdF9iaW5hcnlfZnJlZShzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhkcik7CiB1NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpOwogdm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiYjNDM7dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiB2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpOwogdm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpmcCk7CiBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuYwppbmRleCA0N2ZlMDQ3YWQzMGI4OC4uZTIwNzY2NjdiMjQ1MTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jCkBAIC05MTYsNiAmIzQzOzkxNiwxMSBAQCBzdGF0aWMgTElTVF9IRUFEKHBhY2tfbGlzdCk7CiAKICNkZWZpbmUgQlBGX1BST0dfQ0hVTktfQ09VTlQgKEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpCiAKJiM0MztzdGF0aWMgYm9vbCBicGZfaml0X21lbV9pc19yb3godm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucykKIHsKIAlzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjazsKQEAgLTkyNywxNiAmIzQzOzkzMiwxOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2lucwogCXBhY2stJmd0O3B0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhCUEZfUFJPR19QQUNLX1NJWkUpOwogCWlmICghcGFjay0mZ3Q7cHRyKQogCQlnb3RvIG91dDsKLQlicGZfZmlsbF9pbGxfaW5zbnMocGFjay0mZ3Q7cHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpOwogCWJpdG1hcF96ZXJvKHBhY2stJmd0O2JpdG1hcCwgQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSk7CiAKIAlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2JwZl9wcmVkX2ZsdXNoX2VuYWJsZWQpKQogCQlwYWNrLSZndDthcmNoX2ZsdXNoX25lZWRlZCA9IHRydWU7Ci0Jc2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stJmd0O3B0cik7Ci0JZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay0mZ3Q7cHRyLAotCQkJICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7CiYjNDM7CQlicGZfZmlsbF9pbGxfaW5zbnMocGFjay0mZ3Q7cHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpOwomIzQzOwkJc2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stJmd0O3B0cik7CiYjNDM7CQllcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLSZndDtwdHIsCiYjNDM7CQkJCSAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KIAlsaXN0X2FkZF90YWlsKCZhbXA7cGFjay0mZ3Q7bGlzdCwgJmFtcDtwYWNrX2xpc3QpOwogCXJldHVybiBwYWNrOwogCkBAIC05NjUsNyAmIzQzOzk3Miw3IEBAIHZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sCiAJCQlwcl93YXJuX29uY2UoJiMzNDtCUEY6IFByZWRpY3RvcnMgbm90IGZsdXNoZWQgZm9yIGFsbG9jYXRpb25zIGdyZWF0ZXIgdGhhbiBCUEZfUFJPR19QQUNLX1NJWkVcbiYjMzQ7KTsKIAkJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CiAJCXB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhzaXplKTsKLQkJaWYgKHB0cikgewomIzQzOwkJaWYgKHB0ciAmYW1wOyZhbXA7ICFicGZfaml0X21lbV9pc19yb3goKSkgewogCQkJaW50IGVycjsKIAogCQkJYnBmX2ZpbGxfaWxsX2luc25zKHB0ciwgc2l6ZSk7CkBAIC0xMTE2LDEyICYjNDM7MTEyMywxNyBAQCB2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKQogCWF0b21pY19sb25nX3N1YihzaXplLCAmYW1wO2JwZl9qaXRfY3VycmVudCk7CiB9CiAKLXZvaWQgKl9fd2VhayBicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJcmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpOwogfQogCi12b2lkIF9fd2VhayBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKQomIzQzO3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXhlY21lbV9hbGxvY19ydyhFWEVDTUVNX0JQRiwgc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcikKIHsKIAlleGVjbWVtX2ZyZWUoYWRkcik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jCmluZGV4IGVhMmQ2MGRjMWZlZWI3Li5kODViM2U4YWQyZTRlZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMKQEAgLTE0OCw3ICYjNDM7MTQ4LDEwIEBAIHZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sCiAJCWQtJmd0O2ltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpOwogCQlpZiAoIWQtJmd0O2ltYWdlKQogCQkJZ290byBvdXQ7Ci0JCWQtJmd0O3J3X2ltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7CiYjNDM7CQkvKiBkLSZndDtyd19pbWFnZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlCiYjNDM7CQkgKiBjYW4gdXNlIHZtYWxsb2MuCiYjNDM7CQkgKi8KJiM0MzsJCWQtJmd0O3J3X2ltYWdlID0gdm1hbGxvYyhQQUdFX1NJWkUpOwogCQlpZiAoIWQtJmd0O3J3X2ltYWdlKSB7CiAJCQlicGZfcHJvZ19wYWNrX2ZyZWUoZC0mZ3Q7aW1hZ2UsIFBBR0VfU0laRSk7CiAJCQlkLSZndDtpbWFnZSA9IE5VTEw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MzUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEpJVCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gaG93IHRoZSBCUEYgSklUIG1lbW9yeSBhbGxvY2F0aW9uIHdvcmtzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBzd2FwcGluZyBvdXQgdGhlIGN1cnJlbnQgYGJwZl9qaXRfYWxsb2NfZXhlY2Agd2l0aCBlaXRoZXIgYGV4ZWNtZW1fYWxsb2NgIG9yIHRoZSBuZXcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIHdoaWNoIHRoZW4gdXNlcyBgZXhlY21lbV9hbGxvY19yd2AuIFNlZW1zIGxpa2UgYSBtb3ZlIHRvd2FyZCBtb3JlIGNvbnRyb2wgb3IgZmxleGliaWxpdHkgaW4gaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIG1lbW9yeSByZWdpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9tbS9pbml0LmNgIHdpdGggdGhlIGBFWEVDTUVNX0JQRmAgZmxhZ3MgYW5kIGBwZ3Byb3RgLiBUaGUgY2hlY2sgaW4gYGtlcm5lbC9icGYvY29yZS5jYCBmb3IgYGJwZl9qaXRfbWVtX2lzX3JveCgpYCBhbmQgdGhlIGNvbmRpdGlvbmFsIGBzZXRfbWVtb3J5X3JveGAgc3VnZ2VzdHMgd2UmIzM5O3JlIGdldHRpbmcgc21hcnRlciBhYm91dCByZWFkLW9ubHkgbWVtb3J5IHJlZ2lvbnMsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNhbGxzLiBBbmQgdGhlIGNoYW5nZSB0byB1c2UgYHZtYWxsb2NgIGluIGBrZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY2AgZm9yIGBkLSZndDtyd19pbWFnZWAgaXMgaW50ZXJlc3RpbmcuCgpGdW5jdGlvbmFsbHksIHRoaXMgbWVhbnMgd2UmIzM5O3ZlIGNoYW5nZWQgaG93IEJQRiBKSVQgYW5kIGV4ZWNtZW0gYmVoYXZlLiBGcm9tIGFuIGFuYWx5c2lzIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGFjdHVhbGx5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aCBhbmQgaWYgaXQmIzM5O3MgZnV6emFibGUuIEJQRiBKSVQgKmlzKiBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgaW50byBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGludG8gdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgZm9jdXNpbmcgb24gcmVhY2hhYmlsaXR5IGFuZCBmdXp6aW5nOiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLCBgYnBmX2ppdF9hbGxvY19leGVjYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYW5kIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIHBhdGguIGBDT05GSUdfQlBGX0pJVGAgaXMgYSBtdXN0LCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYW5vdGhlciBvYnZpb3VzIG9uZS4gU2luY2UgaXQmIzM5O3MgdG91Y2hpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIEkmIzM5O2xsIGFkZCBgQ09ORklHX1g4NmAgdG8gdGhlIGxpc3QuCgpJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXhpc3RpbmcgdG9vbGluZyB0byB2ZXJpZnkgdGhlc2UgYXNzdW1wdGlvbnMgYW5kIHJlYWNoYWJpbGl0eSBwYXRocy4gVGltZSB0byBmaXJlIGl0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfYWxsb2NfZXhlY19ydyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY5OD1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzA4LVx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzA5Olx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxMC1cdCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3MTE6XHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MTItXHRpZiAoIWltYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTMzNT12b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTMzNjp2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTMzNy12b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTExMjY9dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xMTMwLVxua2VybmVsL2JwZi9jb3JlLmM6MTEzMTp2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxua2VybmVsL2JwZi9jb3JlLmMtMTEzMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IEJQRiBDb2RlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmb2N1cyBvZiB0aGUgbW9kaWZpY2F0aW9uIGNlbnRlcnMgYXJvdW5kIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgd2l0aGluIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHN1YnN5c3RlbS4gVGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGFyZTogYGJwZl9wcm9nX3BhY2tfYWxsb2NgLCBgYWxsb2NfbmV3X3BhY2tgLCBgYnBmX2ppdF9hbGxvY19leGVjYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AsIGFuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBkaXZlcnNlIHNldCwgc3Bhbm5pbmcgcGFjayBhbGxvY2F0aW9uLCBKSVQgbWVtb3J5IGFsbG9jYXRpb24gKGJvdGggcmVhZC1vbmx5IGFuZCByZWFkLXdyaXRlIHJlZ2lvbnMsIHByZXN1bWFibHkpLCBkaXNwYXRjaGVyIGNoYW5nZXMsIGFuZCBwb3RlbnRpYWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgd2l0aCB0aGUgdHJhbXBvbGluZSBzaXplLgoKTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9jb3JlLmNgIGFuZCBzdGFydCB3aXRoIHRoZSBgYnBmX3Byb2dfcGFja19hbGxvY2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFyY2hpbmcgc3RyYXRlZ3kgYmVpbmcgaW1wbGVtZW50ZWQgaGVyZS4gRnJvbSB0aGVyZSwgSSBleHBlY3QgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXJzLiBUaGUgSklUIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFyZSBjbGVhcmx5IGltcG9ydGFudCBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIFRoZSBkaXNwYXRjaGVyIGNoYW5nZSBoaW50cyBhdCBwb3RlbnRpYWxseSBuZXcgcHJvZ3JhbSBkaXNwYXRjaGluZyBzdHJhdGVnaWVzLCBhbmQgdGhlIHRyYW1wb2xpbmUgc2l6ZSBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBKSVQgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSByZWFkL3dyaXRlIGFzcGVjdCwgYW5kIGl0cyBpbXBhY3Qgb24gc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI4NzE9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI4NzIte1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjg3MzpcdHJldHVybiBicGZfcHJvZ19wYWNrX2FsbG9jKHNpemUsIGppdF9maWxsX2hvbGUsIGZhbHNlKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI4NzQtfVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTc5MT12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzkyLXtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTc5MzpcdHJldHVybiBicGZfcHJvZ19wYWNrX2FsbG9jKHNpemUsIGppdF9maWxsX2hvbGUsIGZhbHNlKTtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTc5NC19XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz01ODk9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTkwLXtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTkxOlx0cmV0dXJuIGJwZl9wcm9nX3BhY2tfYWxsb2Moc2l6ZSwgYnBmX2ppdF9maWxsX2lsbF9pbnNucywgZmFsc2UpO1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy01OTItfVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyMj12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzIzLXtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMyNDpcdHJldHVybiBicGZfcHJvZ19wYWNrX2FsbG9jKHNpemUsIGJwZl9maWxsX2lsbF9pbnNucywgZmFsc2UpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzI1LX1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY1ND12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NTUte1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2NTY6XHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1Ny19XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMzQwPWJwZl9qaXRfYmluYXJ5X3BhY2tfaGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzQxLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMzQyOnZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sIHdhc19jbGFzc2ljKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTM0My12b2lkIGJwZl9wcm9nX3BhY2tfZnJlZSh2b2lkICpwdHIsIHUzMiBzaXplKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz05MjQ9c3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy05NTUtXG5rZXJuZWwvYnBmL2NvcmUuYzo5NTY6dm9pZCAqYnBmX3Byb2dfcGFja19hbGxvYyh1MzIgc2l6ZSwgYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMsIGJvb2wgd2FzX2NsYXNzaWMpXG5rZXJuZWwvYnBmL2NvcmUuYy05NTcte1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTExOTc9YnBmX2ppdF9iaW5hcnlfcGFja19hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTIxNC1cdFx0cmV0dXJuIE5VTEw7XG5rZXJuZWwvYnBmL2NvcmUuYzoxMjE1Olx0cm9faGVhZGVyID0gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBicGZfZmlsbF9pbGxfaW5zbnMsIHdhc19jbGFzc2ljKTtcbmtlcm5lbC9icGYvY29yZS5jLTEyMTYtXHRpZiAoIXJvX2hlYWRlcikge1xuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jPTEzNz12b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTE0Ny1cdGlmICghZC1cdTAwM2VpbWFnZSkge1xua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTQ4Olx0XHRkLVx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTQ5LVx0XHRpZiAoIWQtXHUwMDNlaW1hZ2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcyNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBCUEYgSklUIE1lbW9yeSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IEJQRiBKSVQgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50LCBwb3RlbnRpYWxseSBoaWdoLWltcGFjdCBjaGFuZ2UgYmVjYXVzZSBpdCB0b3VjaGVzIG9uIEJQRiBKSVQgYW5kIGBleGVjbWVtYCDigJMgdGhlc2UgYXJlIGNydWNpYWwgYXJlYXMuICBUaGUgcGF0Y2gmIzM5O3MgY29yZSBpcyBtb2RpZnlpbmcgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSXTigJlzIHN3aXRjaGluZyBmcm9tIHRoZSBzdGFuZGFyZCBgYnBmX2ppdF9hbGxvY19leGVjYCBmdW5jdGlvbiB0byB1dGlsaXppbmcgYGV4ZWNtZW1fYWxsb2NgIG9yIHRoZSBuZXcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2Agd2l0aCBgZXhlY21lbV9hbGxvY19yd2AuICBJdCBsb29rcyBsaWtlIHRoZXJl4oCZcyBhbHNvIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBhcmNoL3g4Ni9tbS9pbml0LmNgLCBzcGVjaWZpY2FsbHkgYWRqdXN0bWVudHMgdG8gdGhlIGBFWEVDTUVNX0JQRmAgZmxhZ3MgYW5kIGBwZ3Byb3RgIHZhbHVlcyBmb3IgbWVtb3J5IHByb3RlY3Rpb24uCgpCZXlvbmQgdGhhdCwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHNvbWUgY2hlY2tzOyBJIHNlZSBhIG5ldyBgYnBmX2ppdF9tZW1faXNfcm94KClgIGZ1bmN0aW9uIGJlaW5nIGludHJvZHVjZWQsIGFuZCBjaGFuZ2VzIHRvIGF2b2lkIGNhbGxpbmcgYHNldF9tZW1vcnlfcm94YCBpZiB0aGUgbWVtb3J5IGlzIGFscmVhZHkgUmVhZCBPbmx5IEV4ZWN1dGUgKFJPWCkuICBJIGFsc28gbm90aWNlZCB0aGF0IHRoZSBwYXRjaCBpcyB1cGRhdGluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCB0byB1c2UgdGhlIG5ldyBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCBhbGxvY2F0aW9uLiAgQWRkaXRpb25hbGx5LCBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgIGlzIHN3aXRjaGluZyB0byBgdm1hbGxvY2AgaW5zdGVhZCBvZiBgYnBmX2ppdF9hbGxvY19leGVjYCBmb3IgdGhlIGBkLSZndDtyd19pbWFnZWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgaGVyZS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUgd29ydGggZnV6emluZz8mIzM0Oy4gQlBGIEpJVCwgaW4gbXkgZXhwZXJpZW5jZSwgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBpdHMgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdDoKCiogICBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYAoqICAgYGJwZl9qaXRfYWxsb2NfZXhlY2AKKiAgIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgCiogICBgYnBmX3Byb2dfcGFja19hbGxvY2AKKiAgIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AKClRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBpbiByZWxhdGlvbiB0byB0aGUgY2hhbmdlcy4KCkkmIzM5O2xsIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgbmV4dC4gSSAqa25vdyogSSBuZWVkIGBDT05GSUdfQlBGX0pJVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSBwYXRoIHRvIGJlIGFjdGl2ZS4gR2l2ZW4gdGhlIGBhcmNoL3g4NmAgcGF0aCwgb2YgY291cnNlLCBJIG5lZWQgYENPTkZJR19YODZgLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgZm9jdXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uOgoKKiAgIGBicGZfcHJvZ19wYWNrX2FsbG9jYAoqICAgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYAoqICAgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAKKiAgIGBhbGxvY19uZXdfcGFja2AKKiAgIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgCgpJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIGlzIHJlYWNoYWJsZS4gQlBGIGRpc3BhdGNoZXJzIGFyZSwgYXMgSSBrbm93LCB1c2VkIGZvciBtYW5hZ2luZyBCUEYgcHJvZ3JhbXMsIHNvIEkmIzM5O2xsIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGF0IGZyYW1ld29yay4KCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0xNTI0PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMTU4OS0jZGVmaW5lIEJQRl9ESVNQQVRDSEVSX1BUUihuYW1lKSAoXHUwMDI2YnBmX2Rpc3BhdGNoZXJfIyNuYW1lKVxuaW5jbHVkZS9saW51eC9icGYuaDoxNTkwOnZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE1OTEtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnRvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2MjM9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKSB7fVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMTYyNy0jZGVmaW5lIEJQRl9ESVNQQVRDSEVSX1BUUihuYW1lKSBOVUxMXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mjg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTYyOS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jPTEwNj1zdGF0aWMgdm9pZCBicGZfZGlzcGF0Y2hlcl91cGRhdGUoc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBpbnQgcHJldl9udW1fcHJvZ3MpXG4tLVxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTM2LVxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTM3OnZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy0xMzgtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnRvKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDI5PXZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMzAte1xubmV0L2NvcmUvZmlsdGVyLmM6MTIwMzE6XHRicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhCUEZfRElTUEFUQ0hFUl9QVFIoeGRwKSwgcHJldl9wcm9nLCBwcm9nKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDYxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IHdheXMgdGhlc2UgQlBGIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdHJpZ2dlcmVkLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgZm9yIHRoaXMgbmV3IHByb2plY3QuIEZpcnN0LCBJIHNlZSB0aGF0IGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgY2FuIGJlIGNhbGxlZCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggWERQIHByb2dyYW0gY2hhbmdlcyAtIHRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byBjb25zaWRlci4gVGhlbiwgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIGlzIHJlYWNoYWJsZSB2aWEgQlBGIEpJVCwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3Igb3B0aW1pemF0aW9uIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBMYXN0bHksIGFuZCB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0IGRpZ2dpbmcgYSBiaXQgZGVlcGVyLCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBjb25uZWN0ZWQgdG8gdGhlIEJQRiB0cmFtcG9saW5lIG1lY2hhbmlzbS4gR2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIHRoZSB0cmFtcG9saW5lIHNpemUgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCB0byBhbmFseXplIHJpZ2h0IG5vdy4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhcmFtZXRlcnMsIGVkZ2UgY2FzZXMsIGFuZCBpbXBhY3Qgb24gbXkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9Mjg0ND1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yODQ4LVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjg0OTppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjg1MC1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjE0ND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxODEtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIxODI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE4My1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9ODEyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5MS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTE5MjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTkzLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMDIyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzA2LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzA3OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMDgtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTA9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NjUtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5NjY6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjk2Ny1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqb3JpZ19jYWxsKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjY5PWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2OTctXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY5ODppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2OTktXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTEzMTg9aW50IF9fbXVzdF9jaGVjayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTMxOTppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuaW5jbHVkZS9saW51eC9icGYuaC0xMzIwLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz01OTc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxMy1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MTQ6XHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKG1vZGVsLCBmbGFncywgdG5vZGVzLCBzdHViX2Z1bmMpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxNS1cdGlmIChzaXplIFx1MDAzYz0gMClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02NzM9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MjQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MjU6XHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKFx1MDAyNnRyLVx1MDAzZWZ1bmMubW9kZWwsIHRyLVx1MDAzZWZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzI2LVx0XHRcdFx0XHR0bm9kZXMsIHRyLVx1MDAzZWZ1bmMuYWRkcik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2MT1pbnQgX193ZWFrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ2Ni1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE0Njc6aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDY4LVx0XHRcdFx0ICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI3OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IEJQRiB0cmFtcG9saW5lcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSBhbGxvY2F0aW9uIGFuZCB1cGRhdGUgcHJvY2Vzcy4gSSBzZWUgdGhhdCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBjZW50cmFsLCBhcyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYC4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgdHJpZ2dlcmVkIHdoZW4gd2UmIzM5O3JlIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gdGhlc2UgdHJhbXBvbGluZXMsIHdoaWNoIGlzIHRoZSBrZXkgcGFydCBvZiB0aGUgb3BlcmF0aW9uLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIHdvcmtzLCBJIHRoaW5rIGl0JiMzOTtzIHdvcnRoIHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBicGZfaml0X2FsbG9jX2V4ZWNfcndgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9hbGxvY19leGVjX3J3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjk4PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MDgtXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3MDk6XHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS5cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEwLVx0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcxMTpcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxMi1cdGlmICghaW1hZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMzM1PXZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMzM2OnZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzM3LXZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcik7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTEyNj12b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTExMzAtXG5rZXJuZWwvYnBmL2NvcmUuYzoxMTMxOnZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG5rZXJuZWwvYnBmL2NvcmUuYy0xMTMyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NjAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcmllbmNlZCBrZXJuZWwgZGV2ZWxvcGVyOgoKKipEZWNvZGluZyB0aGUgQlBGIEV4ZWN1dGlvbiBNZW1vcnkgUGF0Y2gqKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L21tL2luaXQuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZm9jdXMgaXMgYXJvdW5kIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgYEVYRUNNRU1fQlBGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhleSYjMzk7cmUgY2hhbmdpbmcgdGhlIG1lbW9yeSBzZXR1cCwgbGlrZWx5IHRoZSBwZXJtaXNzaW9ucyBvciBhdHRyaWJ1dGVzLCBhc3NvY2lhdGVkIHdpdGggcnVubmluZyBCUEYgY29kZSBvbiB4ODYuJiMzNDsgIFRoZSBrZXkgaXMgdGhlIHN3aXRjaCB0byBsZXZlcmFnaW5nIGBmbGFnc2AgYW5kIGBwZ3Byb3RgIHdpdGhpbiBgZXhlY21lbV9hcmNoX3NldHVwYC4KCk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpcmVjdGx5IG1hbmlwdWxhdGluZyB0aGVzZSB2YXJpYWJsZXMsIGBmbGFnc2AgYW5kIGBwZ3Byb3RgPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSeKAmWxsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBleGFjdCBkZWZpbml0aW9ucyBhbmQgcG9zc2libGUgdmFsdWVzLCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIGhvdyB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSBhcmUgY29uZmlndXJlZCBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucy4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZSBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIElzIHRoaXMgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBhIG5lY2Vzc2FyeSBzZWN1cml0eSBoYXJkZW5pbmcsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgZm9yIHRoZSBjaGFuZ2U/IEkgYmV0dGVyIGdvIHJldmlldyB0aGUgYGV4ZWNtZW1fYXJjaF9zZXR1cGAgZnVuY3Rpb24gcmlnaHQgbm93IHRvIGdldCBhIGJldHRlciBncmFzcCBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGVjbWVtX2FyY2hfc2V0dXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbW0vaW5pdC5jPTQ0OT1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9hcm0vbW0vaW5pdC5jLTQ1MC1cbmFyY2gvYXJtL21tL2luaXQuYzo0NTE6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9hcm0vbW0vaW5pdC5jLTQ1Mi17XG4tLVxuYXJjaC9hcm02NC9tbS9pbml0LmM9NTAzPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL2FybTY0L21tL2luaXQuYy01MDQtXG5hcmNoL2FybTY0L21tL2luaXQuYzo1MDU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTA2LXtcbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM9MjQwPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMjQxLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jOjI0MjpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMjQzLXtcbi0tXG5hcmNoL21pcHMvbW0vaW5pdC5jPTU2Mj1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9taXBzL21tL2luaXQuYy01NjMtXG5hcmNoL21pcHMvbW0vaW5pdC5jOjU2NDpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL21pcHMvbW0vaW5pdC5jLTU2NS17XG4tLVxuYXJjaC9uaW9zMi9tbS9pbml0LmM9MTM3PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL25pb3MyL21tL2luaXQuYy0xMzgtXG5hcmNoL25pb3MyL21tL2luaXQuYzoxMzk6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9uaW9zMi9tbS9pbml0LmMtMTQwLXtcbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9OTc3PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtOTc4LVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjk3OTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtOTgwLXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmM9MzkyPXN0YXRpYyB2b2lkIHByZWFsbG9jX2V4ZWNtZW1fcGd0YWJsZSh2b2lkKSB7IH1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmMtMzk0LVxuYXJjaC9wb3dlcnBjL21tL21lbS5jOjM5NTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmMtMzk2LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0xNDQ1PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDQ2LVxuYXJjaC9yaXNjdi9tbS9pbml0LmM6MTQ0NzpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDQ4LXtcbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTI5Mz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9zMzkwL21tL2luaXQuYy0yOTQtXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjI5NTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI5Ni17XG4tLVxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmM9NT1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmMtNi1cbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jOjc6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmMtOC17XG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jPTEwNjA9dm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTA2NS1cbmFyY2gveDg2L21tL2luaXQuYzoxMDY2OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gveDg2L21tL2luaXQuYy0xMDY3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaD0xMTQ9c3RydWN0IGV4ZWNtZW1faW5mbyB7XG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTE4LS8qKlxuaW5jbHVkZS9saW51eC9leGVjbWVtLmg6MTE5OiAqIGV4ZWNtZW1fYXJjaF9zZXR1cCAtIGRlZmluZSBwYXJhbWV0ZXJzIGZvciBhbGxvY2F0aW9ucyBvZiBleGVjdXRhYmxlIG1lbW9yeVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTIwLSAqXG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTMwLSAqL1xuaW5jbHVkZS9saW51eC9leGVjbWVtLmg6MTMxOnN0cnVjdCBleGVjbWVtX2luZm8gKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTEzMi1cbi0tXG5tbS9leGVjbWVtLmM9NTM3PXN0YXRpYyB2b2lkIGV4ZWNtZW1faW5pdF9taXNzaW5nKHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8pXG4tLVxubW0vZXhlY21lbS5jLTU1OC1cbm1tL2V4ZWNtZW0uYzo1NTk6c3RydWN0IGV4ZWNtZW1faW5mbyAqIF9fd2VhayBleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbm1tL2V4ZWNtZW0uYy01NjAte1xuLS1cbm1tL2V4ZWNtZW0uYz01NjQ9c3RhdGljIHZvaWQgX19pbml0IF9fZXhlY21lbV9pbml0KHZvaWQpXG5tbS9leGVjbWVtLmMtNTY1LXtcbm1tL2V4ZWNtZW0uYzo1NjY6XHRzdHJ1Y3QgZXhlY21lbV9pbmZvICppbmZvID0gZXhlY21lbV9hcmNoX3NldHVwKCk7XG5tbS9leGVjbWVtLmMtNTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc2NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIHg4NiBNZW1vcnkgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgZm9yIHRoaXMsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBpbnRvIGBhcmNoL3g4Ni9tbS9pbml0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkIGZvciB4ODYgc3lzdGVtcywgc28gaXQmIzM5O3MgYSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50LiBUbyBwaW5wb2ludCB0aGUgcmVsZXZhbnQgY29kZSBibG9jayBlZmZpY2llbnRseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDExMDcuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBhcmVhIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24sIGFuZCBJIGV4cGVjdCBJJiMzOTtsbCBiZSBhYmxlIHRvIHdvcmsgb3V0d2FyZHMgZnJvbSB0aGVyZSwgaG9wZWZ1bGx5IGZpbmRpbmcgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdFx0ZmxhZ3MgPSBFWEVDTUVNX0tBU0FOX1NIQURPVyB8IEVYRUNNRU1fUk9YX0NBQ0hFO1xuMTA4MTpcdFx0fSBlbHNlIHtcbjEwODI6XHRcdFx0cGdwcm90ID0gUEFHRV9LRVJORUw7XG4xMDgzOlx0XHRcdGZsYWdzID0gRVhFQ01FTV9LQVNBTl9TSEFET1c7XG4xMDg0Olx0XHR9XG4xMDg1Olx0XG4xMDg2Olx0XHRleGVjbWVtX2luZm8gPSAoc3RydWN0IGV4ZWNtZW1faW5mbyl7XG4xMDg3Olx0XHRcdC5yYW5nZXMgPSB7XG4xMDg4Olx0XHRcdFx0W0VYRUNNRU1fTU9EVUxFX1RFWFRdID0ge1xuMTA4OTpcdFx0XHRcdFx0LmZsYWdzXHQ9IGZsYWdzLFxuMTA5MDpcdFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuMTA5MTpcdFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbjEwOTI6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gcGdwcm90LFxuMTA5MzpcdFx0XHRcdFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcbjEwOTQ6XHRcdFx0XHR9LFxuMTA5NTpcdFx0XHRcdFtFWEVDTUVNX0tQUk9CRVNdID0ge1xuMTA5NjpcdFx0XHRcdFx0LmZsYWdzXHQ9IGZsYWdzLFxuMTA5NzpcdFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuMTA5ODpcdFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbjEwOTk6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUxfUk9YLFxuMTEwMDpcdFx0XHRcdFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcbjExMDE6XHRcdFx0XHR9LFxuMTEwMjpcdFx0XHRcdFtFWEVDTUVNX0ZUUkFDRV0gPSB7XG4xMTAzOlx0XHRcdFx0XHQuZmxhZ3NcdD0gZmxhZ3MsXG4xMTA0Olx0XHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4xMTA1Olx0XHRcdFx0XHQuZW5kXHQ9IE1PRFVMRVNfRU5ELFxuMTEwNjpcdFx0XHRcdFx0LnBncHJvdFx0PSBwZ3Byb3QsXG4xMTA3Olx0XHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuMTEwODpcdFx0XHRcdH0sXG4xMTA5Olx0XHRcdFx0W0VYRUNNRU1fQlBGXSA9IHtcbjExMTA6XHRcdFx0XHRcdC5mbGFnc1x0PSBmbGFncyxcbjExMTE6XHRcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbjExMTI6XHRcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4xMTEzOlx0XHRcdFx0XHQucGdwcm90XHQ9IHBncHJvdCxcbjExMTQ6XHRcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4xMTE1Olx0XHRcdFx0fSxcbjExMTY6XHRcdFx0XHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XG4xMTE3Olx0XHRcdFx0XHQuZmxhZ3NcdD0gRVhFQ01FTV9LQVNBTl9TSEFET1csXG4xMTE4Olx0XHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4xMTE5Olx0XHRcdFx0XHQuZW5kXHQ9IE1PRFVMRVNfRU5ELFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG1vdmluZyBhd2F5IGZyb20gaGFyZGNvZGVkIG1lbW9yeSBmbGFncyBhbmQgcGFnZSBwcm90ZWN0aW9uIGluIGBhcmNoL3g4Ni9tbS9pbml0LmNgIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZmxhZ3NgIGFuZCBgcGdwcm90YCBpbiBgRVhFQ01FTV9CUEZgLiBUaGlzIHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmQgbW9yZSBmbGV4aWJsZSBhbmQgcG90ZW50aWFsbHkgc2FmZXIgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIEpJVGVkIEJQRiBjb2RlLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGluc3RlYWQgb2YgYGJwZl9qaXRfYWxsb2NfZXhlY2AgYW5kIGl0cyBkZWNsYXJhdGlvbiBpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBpbXBvcnRhbnQuCgpUaGUgYWRkaXRpb24gb2YgYGJwZl9qaXRfbWVtX2lzX3JveGAgaW4gYGtlcm5lbC9icGYvY29yZS5jYCBhbmQgaXRzIGltcGFjdCBvbiBgYWxsb2NfbmV3X3BhY2tgIGFuZCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLiBDbGVhcmx5LCB0aGUgZW1waGFzaXMgaXMgb24gbWFraW5nIGl0IFJPWC1hd2FyZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGJwZl9qaXRfbWVtX2lzX3JveGAgY2hlY2suIFRoaXMgaXMgY2VudHJhbCB0byB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZS4KClRoZSBjaGFuZ2UgdG8gYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCB1c2luZyBgdm1hbGxvY2AgaW5zdGVhZCBvZiBgYnBmX2ppdF9hbGxvY19leGVjYCBmb3IgYGQtJmd0O3J3X2ltYWdlYCBpcyBhbHNvIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYGJwZl9wcm9nX3BhY2tfYWxsb2NgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgaW1wYWN0IG9mIFJPWCBtZW1vcnkgYWxsb2NhdGlvbiBpcyBiZWluZyBmZWx0IHRoZSBtb3N0LgoKUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIHVzYWdlLiBXYWl0LCBpdCYjMzk7cyB1c2VkIGluIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLCBhbmQgdGhhdCYjMzk7cyByZWxhdGVkIHRvIGF0dGFjaGluZyB0cmFtcG9saW5lcy4gVHJhbXBvbGluZXMgYXJlIG9mdGVuIHJlYWQtb25seSwgbWFraW5nIHRoaXMgY2hhbmdlIHZlcnkgaW1wb3J0YW50LiBJdCBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgY29ubmVjdGlvbiBiZXR3ZWVuIFJPWCBhbmQgYXR0YWNoaW5nIEJQRiBjb2RlLCBhIGNyaXRpY2FsIHBhcnQgb2YgbXkgd29yay4KClRoZW4gSSBoYXZlIHRvIGNoZWNrIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gSSBzZWUgdGhhdCBpdCBpcyB1c2VkIGluIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2Agd2hpY2ggY29uZmlybXMgbXkgc3VzcGljaW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgYnBmX3Byb2dfcGFja19hbGxvY2AsIGBhbGxvY19uZXdfcGFja2AsIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AsIGFuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYENPTkZJR19CUEZfSklUYCBmb3Igc3VyZSwgYW5kIGBDT05GSUdfWDg2YCBnaXZlbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNoYW5nZXMuIEl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gdmVyaWZ5IGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciBjb25maWcgYmVzaWRlcyB0aGVzZS4gQW5kIHllcywgaXQgaXMgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvY3VzZWQgb24gbWVtb3J5IHByb3RlY3Rpb24gb2YgSklUZWQgQlBGIGNvZGUsIGxpa2VseSByZWxhdGVkIHRvIHJlYWQtb25seSBleGVjdXRpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbW9yZSBmbGV4aWJsZSBhbmQgc2FmZXIgYXBwcm9hY2ggdG8gbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhcmUgbWFuYWdlZCBhbmQgSklUZWQuIFRoZSBST1ggYXNwZWN0IGlzIGtleSBoZXJlLiBJIHdpbGwgZGl2ZSBkZWVwZXIgaW50byBgYnBmX2ppdF9tZW1faXNfcm94YCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMtaWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9Nj1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZTo3OkNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICYjNDM7PSBwcmVsb2FkL1xua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyoqCgpBbHJpZ2h0LCBzbyBgY29yZS5vYCBpcyBhbHdheXMgY29tcGlsZWQsIHRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9uIGZvciBgYnBmX3Byb2dfcGFja19hbGxvY2AuIE15IGludHVpdGlvbiBzYXlzIGl0JiMzOTtzIHRpZWQgdG8gYENPTkZJR19CUEZfSklUYC4gSXQmIzM5O3Mgd29ydGggZGlnZ2luZyBpbnRvIHRoYXQgYCNpZmRlZmAgYmxvY2sgdG8gY29uZmlybS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMgaGVyZSB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgYXZhaWxhYmxlIG9yIGNvbnRpbmdlbnQgb24gYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhpbmdzIGFyZSBzZXQgdXAgYW5kIGF2b2lkIGFueSBhc3N1bXB0aW9ucy4gVGltZSB0byB2ZXJpZnkgdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9OTI0PXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtOTU1LVxua2VybmVsL2JwZi9jb3JlLmM6OTU2OnZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sIHdhc19jbGFzc2ljKVxua2VybmVsL2JwZi9jb3JlLmMtOTU3LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xMTk3PWJwZl9qaXRfYmluYXJ5X3BhY2tfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTEyMTQtXHRcdHJldHVybiBOVUxMO1xua2VybmVsL2JwZi9jb3JlLmM6MTIxNTpcdHJvX2hlYWRlciA9IGJwZl9wcm9nX3BhY2tfYWxsb2Moc2l6ZSwgYnBmX2ZpbGxfaWxsX2luc25zLCB3YXNfY2xhc3NpYyk7XG5rZXJuZWwvYnBmL2NvcmUuYy0xMjE2LVx0aWYgKCFyb19oZWFkZXIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGludG8gdGhlIGNvZGUgYW5kIGtub3cgdGhlIGxhbmRzY2FwZToKCioqQ2hlY2tpbmcgZm9yIEpJVCBDb21waWxhdGlvbiBTdXBwb3J0IGluIEJQRiBQcm9ncmFtIFBhY2thZ2luZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBwcmV0dHkgZnVuZGFtZW50YWwgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIEJQRiBKSVQgY29tcGlsYXRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBjcnVjaWFsIGZvciBwb3J0YWJpbGl0eSBhbmQgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgY29ycmVjdGx5IGluIGRpZmZlcmVudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXNzZW50aWFsbHkgZG91YmxlLWNoZWNraW5nIG15IGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgYnVpbGQgc3lzdGVtIHdpbGwgaGFuZGxlIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGFuZCB0aGUgY29kZSBpdHNlbGYgdG8gc2VlIGlmIGl0JiMzOTtzIHByb3RlY3RlZCBieSB0aGUgYCNpZmRlZiBDT05GSUdfQlBGX0pJVGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgb3Igc29tZXRoaW5nIGxvZ2ljYWxseSBlcXVpdmFsZW50LCBzbyB0aGUgY29kZSBpcyBjb21waWxlZCwgYW5kIHdvcmtpbmcsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBKSVQgaXMgaW4gcGxheS4gVGhpcyBpcyBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGF2b2lkIGEgcG90ZW50aWFsbHkgbmFzdHkgc3VycHJpc2UgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMDpcdHN0YXRpYyBERUZJTkVfTVVURVgocGFja19tdXRleCk7XG4gOTAxOlx0c3RhdGljIExJU1RfSEVBRChwYWNrX2xpc3QpO1xuIDkwMjpcdFxuIDkwMzpcdC8qIFBNRF9TSVpFIGlzIG5vdCBhdmFpbGFibGUgaW4gc29tZSBzcGVjaWFsIGNvbmZpZywgZS5nLiBBUkNIPWFybSB3aXRoXG4gOTA0Olx0ICogQ09ORklHX01NVT1uLiBVc2UgUEFHRV9TSVpFIGluIHRoZXNlIGNhc2VzLlxuIDkwNTpcdCAqL1xuIDkwNjpcdCNpZmRlZiBQTURfU0laRVxuIDkwNzpcdC8qIFBNRF9TSVpFIGlzIHJlYWxseSBiaWcgZm9yIHNvbWUgYXJjaHMuIEl0IGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UgdG9cbiA5MDg6XHQgKiByZXNlcnZlIHRvbyBtdWNoIG1lbW9yeSBpbiBvbmUgYWxsb2NhdGlvbi4gSGFyZGNvZGUgQlBGX1BST0dfUEFDS19TSVpFIHRvXG4gOTA5Olx0ICogMk1pQiAqIG51bV9wb3NzaWJsZV9ub2RlcygpLiBPbiBtb3N0IGFyY2hpdGVjdHVyZXMgUE1EX1NJWkUgd2lsbCBiZVxuIDkxMDpcdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyTUIuXG4gOTExOlx0ICovXG4gOTEyOlx0I2RlZmluZSBCUEZfUFJPR19QQUNLX1NJWkUgKFNaXzJNICogbnVtX3Bvc3NpYmxlX25vZGVzKCkpXG4gOTEzOlx0I2Vsc2VcbiA5MTQ6XHQjZGVmaW5lIEJQRl9QUk9HX1BBQ0tfU0laRSBQQUdFX1NJWkVcbiA5MTU6XHQjZW5kaWZcbiA5MTY6XHRcbiA5MTc6XHQjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxuIDkxODpcdFxuIDkxOTpcdHN0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxuIDkyMDpcdHtcbiA5MjE6XHRcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XG4gOTIyOlx0fVxuIDkyMzpcdFxuIDkyNDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXG4gOTI1Olx0e1xuIDkyNjpcdFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7XG4gOTI3Olx0XHRpbnQgZXJyO1xuIDkyODpcdFxuIDkyOTpcdFx0cGFjayA9IGt6YWxsb2NfZmxleCgqcGFjaywgYml0bWFwLCBCSVRTX1RPX0xPTkdTKEJQRl9QUk9HX0NIVU5LX0NPVU5UKSk7XG4gOTMwOlx0XHRpZiAoIXBhY2spXG4gOTMxOlx0XHRcdHJldHVybiBOVUxMO1xuIDkzMjpcdFx0cGFjay1cdTAwM2VwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTtcbiA5MzM6XHRcdGlmICghcGFjay1cdTAwM2VwdHIpXG4gOTM0Olx0XHRcdGdvdG8gb3V0O1xuIDkzNTpcdFx0Yml0bWFwX3plcm8ocGFjay1cdTAwM2ViaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpO1xuIDkzNjpcdFxuIDkzNzpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXG4gOTM4Olx0XHRcdHBhY2stXHUwMDNlYXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlO1xuIDkzOTpcdFx0aWYgKCFicGZfaml0X21lbV9pc19yb3goKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBmb3IgQlBGIEpJVCBTdXBwb3J0KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsIOKAkyBkb2VzIHRoZSBzeXN0ZW0gZXZlbiAqc3VwcG9ydCogdGhlIEJQRiBKSVQ/IEl0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LCBvYnZpb3VzbHkuIFNvLCBteSBpbml0aWFsIGNoZWNrIHdpbGwgZGVmaW5pdGVseSBpbnZvbHZlIGxvb2tpbmcgYXQgYENPTkZJR19CUEZfSklUYC4gVGhhdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZXNzZW50aWFsbHkgZW5hYmxlcyB0aGUganVzdC1pbi10aW1lIGNvbXBpbGVyIGZvciBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIGJ5dGVjb2RlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIGRlZmluZWQgYW5kIGVuYWJsZWQuIElmIGBDT05GSUdfQlBGX0pJVGAgaXMgb2ZmLCB0aGVuIHRoZSB3aG9sZSBhcHByb2FjaCBpcyBlc3NlbnRpYWxseSBhIG5vbi1zdGFydGVyLCBhbmQgSSYjMzk7bGwgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgc3RyYXRlZ3kuIE5vIHNlbnNlIGdvaW5nIGZ1cnRoZXIgZG93biB0aGlzIHBhdGggd2l0aG91dCB0aGF0IGNydWNpYWwgZm91bmRhdGlvbi4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGEgZnVuZGFtZW50YWwgZGlhZ25vc3RpYyBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTI4LVx0ZnAtXHUwMDNlaml0X3JlcXVlc3RlZCA9IGVicGZfaml0X2VuYWJsZWQoKTtcbmtlcm5lbC9icGYvY29yZS5jOjEyOTpcdGZwLVx1MDAzZWppdF9yZXF1aXJlZCA9IElTX0VOQUJMRUQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKTtcbmtlcm5lbC9icGYvY29yZS5jLTEzMC1cdGZwLVx1MDAzZWJsaW5kaW5nX3JlcXVlc3RlZCA9IGJwZl9qaXRfYmxpbmRpbmdfZW5hYmxlZChmcCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9NTQxPXZvaWQgYnBmX3Byb2dfa2FsbHN5bXNfZGVsX2FsbChzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTU0Ni1cbmtlcm5lbC9icGYvY29yZS5jOjU0NzojaWZkZWYgQ09ORklHX0JQRl9KSVRcbmtlcm5lbC9icGYvY29yZS5jLTU0OC0vKiBBbGwgQlBGIEpJVCBzeXNjdGwga25vYnMgaGVyZS4gKi9cbmtlcm5lbC9icGYvY29yZS5jOjU0OTppbnQgYnBmX2ppdF9lbmFibGUgICBfX3JlYWRfbW9zdGx5ID0gSVNfQlVJTFRJTihDT05GSUdfQlBGX0pJVF9ERUZBVUxUX09OKTtcbmtlcm5lbC9icGYvY29yZS5jOjU1MDppbnQgYnBmX2ppdF9rYWxsc3ltcyBfX3JlYWRfbW9zdGx5ID0gSVNfQlVJTFRJTihDT05GSUdfQlBGX0pJVF9ERUZBVUxUX09OKTtcbmtlcm5lbC9icGYvY29yZS5jLTU1MS1pbnQgYnBmX2ppdF9oYXJkZW4gICBfX3JlYWRfbW9zdGx5O1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTE2NTU9dTE2IGJwZl9vdXRfc3RhY2tfYXJnX2NudChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTY2My19XG5rZXJuZWwvYnBmL2NvcmUuYzoxNjY0OiNlbmRpZiAvKiBDT05GSUdfQlBGX0pJVCAqL1xua2VybmVsL2JwZi9jb3JlLmMtMTY2NS1cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xODIzPWJvb2wgYnBmX29wY29kZV9pbl9pbnNudGFibGUodTggY29kZSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xODQ1LVxua2VybmVsL2JwZi9jb3JlLmM6MTg0NjojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9jb3JlLmMtMTg0Ny0vKiBBYnNvbHV0ZSB2YWx1ZSBvZiBzMzIgd2l0aG91dCB1bmRlZmluZWQgYmVoYXZpb3IgZm9yIFMzMl9NSU4gKi9cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjEwPXN0YXRpYyBib29sIGJwZl9wcm9nX3NlbGVjdF9pbnRlcnByZXRlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2MTItXHRib29sIHNlbGVjdF9pbnRlcnByZXRlciA9IGZhbHNlO1xua2VybmVsL2JwZi9jb3JlLmM6MjYxMzojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9jb3JlLmMtMjYxNC1cdHUzMiBzdGFja19kZXB0aCA9IG1heF90KHUzMiwgZnAtXHUwMDNlYXV4LVx1MDAzZXN0YWNrX2RlcHRoLCAxKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvY29yZS5jLTI2MzQte1xua2VybmVsL2JwZi9jb3JlLmM6MjYzNTojaWZkZWYgQ09ORklHX0JQRl9KSVRcbmtlcm5lbC9icGYvY29yZS5jLTI2MzYtXHRzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQ29kZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgZGVmaW5lZCBhdCBsaW5lIDk1Ni4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZmFsbHMgcmlnaHQgYmV0d2VlbiBgI2lmZGVmIENPTkZJR19CUEZfSklUYCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYCNlbmRpZmAuIFNvLCB0aGF0IHNlZW1zIHByZXR0eSBjbGVhcjogYENPTkZJR19CUEZfSklUYCAqaXMqIHJlcXVpcmVkIGZvciB0aGlzIHNlY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGEgSklUIGNvbXBpbGVyIHdvdWxkIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgY29tcGlsZWQgQlBGIHByb2dyYW1zLgoKTm93LCB3aGF0IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNwZWN0cz8gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBgYXJjaC94ODYvbW0vaW5pdC5jYC4gVGhhdCBoaW50cyBhdCB4ODYgZGVwZW5kZW5jaWVzLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBUaGUgKmNvcmUqIG1vZGlmaWNhdGlvbnMgYXJlIGFjdHVhbGx5IGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYW5kIGBrZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIEJQRiBsaXZlcywgdGhlIGdlbmVyYWwgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCBJIGNhbiBkZWR1Y2UgdGhhdCB0aGUgYnVsayBvZiB0aGVzZSBjaGFuZ2VzIGFyZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgYW5kIHdpbGwgYWZmZWN0IGFsbCBwbGF0Zm9ybXMuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBpbiBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgIGlzIGltcG9ydGFudC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlcGVuZGVuY2llcy4gVGltZSB0byBnbyBjaGVjayB0aGF0IGNvbmZpZyBzZXR0aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyB0aGVyZS4gSSBzaG91bGQgbG9vayB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlzcGF0Y2hlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTIxPWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIzLWlmZXEgKCQoQ09ORklHX05FVCkseSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29yZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0JQRl9KSVRgIGlzIHRoZSBiaWcgb25lLCBvZiBjb3Vyc2UuIEJ1dCB3aGF0IGVsc2UgaXMgY3JpdGljYWw/IEkga25vdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB1c3VhbGx5IGEgbXVzdC1oYXZlIGZvciBCUEYgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19CUEZfSklUYCBhbG9uZSBpc24mIzM5O3Qgc3VmZmljaWVudC4gQWgsIHJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0IHJlcXVpcmVzIGJvdGggYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgLiBOb3csIGEgcXVpY2sgcmVtaW5kZXI6IGBDT05GSUdfQlBGX0pJVGAgaXRzZWxmIGRlcGVuZHMgb24gZWl0aGVyIGBIQVZFX0NCUEZfSklUYCBvciBgSEFWRV9FQlBGX0pJVGAuCgpBbHJpZ2h0LCBJJiMzOTtsbCBrZWVwIGl0IHNpbXBsZSBhbmQganVzdCBmb2N1cyBvbiBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAgZm9yIG5vdy4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgcmV2aWV3IHNvbWUgcmVsZXZhbnQgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjcml0aWNhbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBmb3Igbm93OgoqICAgYGJwZl9wcm9nX3BhY2tfYWxsb2NgCiogICBgYWxsb2NfbmV3X3BhY2tgCiogICBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgCiogICBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYAoqICAgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AKCkxldCBtZSBldmFsdWF0ZSBteSBjYW5kaWRhdGUgc3ltYm9scy4gSXMgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYSBnb29kIGNob2ljZT8gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGBleGVjbWVtX2FsbG9jX3J3YC4gSXQmIzM5O3MgYSB1c2VmdWwgc3ltYm9sIGJ1dCwgcGVyaGFwcyBub3QgdGhlIGJlc3QgdG8gZm9jdXMgb24uIEkgdGhpbmsgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgYSBiZXR0ZXIgZm9jdXMgc3ltYm9sLiBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgYW5vdGhlciBzdHJvbmcgY2FuZGlkYXRlLiBJJiMzOTtsbCBpbmNsdWRlIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgYXMgd2VsbC4KCkp1c3QgdG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCBkZWZpbml0aW9uIGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0IGNvcnJlY3RseSBpbiB0aGUgYnJvYWRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0XG4xMTIxOlx0dm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcbjExMjI6XHR7XG4xMTIzOlx0XHRhdG9taWNfbG9uZ19zdWIoc2l6ZSwgXHUwMDI2YnBmX2ppdF9jdXJyZW50KTtcbjExMjQ6XHR9XG4xMTI1Olx0XG4xMTI2Olx0dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbjExMjc6XHR7XG4xMTI4Olx0XHRyZXR1cm4gZXhlY21lbV9hbGxvYyhFWEVDTUVNX0JQRiwgc2l6ZSk7XG4xMTI5Olx0fVxuMTEzMDpcdFxuMTEzMTpcdHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG4xMTMyOlx0e1xuMTEzMzpcdFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xuMTEzNDpcdH1cbjExMzU6XHRcbjExMzY6XHR2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXG4xMTM3Olx0e1xuMTEzODpcdFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xuMTEzOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQWxsb2NhdGlvbiBTdHJhdGVneSoqCgpSaWdodCwgc28gdGhpcyBsb29rcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3cmFwcGVyIGZ1bmN0aW9uLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBjb21wbGV4LiBIb3dldmVyLCBpdCYjMzk7cyBhbHdheXMgd29ydGggZGlnZ2luZyBkZWVwZXIsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggQlBGLiBUaGF0IGBicGZfcHJvZ19wYWNrX2FsbG9jYCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFsbG9jYXRpb24gbWFnaWMgcHJvYmFibHkgcmVzaWRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoZSBpbnRyaWNhY2llcyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYWxpZ25tZW50LCBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBpc3N1ZXMsIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IHdpbGwgYmVjb21lIGNsZWFyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9wcm9nX3BhY2tfYWxsb2NgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTA6XHRvdXQ6XG4gOTUxOlx0XHRicGZfaml0X2ZyZWVfZXhlYyhwYWNrLVx1MDAzZXB0cik7XG4gOTUyOlx0XHRrZnJlZShwYWNrKTtcbiA5NTM6XHRcdHJldHVybiBOVUxMO1xuIDk1NDpcdH1cbiA5NTU6XHRcbiA5NTY6XHR2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcbiA5NTc6XHR7XG4gOTU4Olx0XHR1bnNpZ25lZCBpbnQgbmJpdHMgPSBCUEZfUFJPR19TSVpFX1RPX05CSVRTKHNpemUpO1xuIDk1OTpcdFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2ssICpmYWxsYmFja19wYWNrID0gTlVMTDtcbiA5NjA6XHRcdHVuc2lnbmVkIGxvbmcgcG9zLCBmYWxsYmFja19wb3MgPSAwO1xuIDk2MTpcdFx0dm9pZCAqcHRyID0gTlVMTDtcbiA5NjI6XHRcbiA5NjM6XHRcdG11dGV4X2xvY2soXHUwMDI2cGFja19tdXRleCk7XG4gOTY0Olx0XHRpZiAoc2l6ZSBcdTAwM2UgQlBGX1BST0dfUEFDS19TSVpFKSB7XG4gOTY1Olx0XHRcdC8qXG4gOTY2Olx0XHRcdCAqIEFsbG9jYXRpb25zIGxhcmdlciB0aGFuIGEgcGFjayBnZXQgdGhlaXIgb3duIHBhZ2VzLCBhbmRcbiA5Njc6XHRcdFx0ICogcHJlZGljdG9ycyBhcmUgbm90IGZsdXNoZWQgZm9yIHN1Y2ggYWxsb2NhdGlvbi4gVGhpcyBpcyBvbmx5XG4gOTY4Olx0XHRcdCAqIHNhZmUgYmVjYXVzZSBjQlBGIHByb2dyYW1zICh0aGUgdW5wcml2aWxlZ2VkIGF0dGFjayBzdXJmYWNlKVxuIDk2OTpcdFx0XHQgKiBhcmUgYm91bmRlZCB3ZWxsIGJlbG93IGEgcGFjayBzaXplLlxuIDk3MDpcdFx0XHQgKi9cbiA5NzE6XHRcdFx0aWYgKHdhc19jbGFzc2ljIFx1MDAyNlx1MDAyNiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmJwZl9wcmVkX2ZsdXNoX2VuYWJsZWQpKVxuIDk3MjpcdFx0XHRcdHByX3dhcm5fb25jZShcJiMzNDtCUEY6IFByZWRpY3RvcnMgbm90IGZsdXNoZWQgZm9yIGFsbG9jYXRpb25zIGdyZWF0ZXIgdGhhbiBCUEZfUFJPR19QQUNLX1NJWkVcXG5cJiMzNDspO1xuIDk3MzpcdFx0XHRzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTtcbiA5NzQ6XHRcdFx0cHRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xuIDk3NTpcdFx0XHRpZiAocHRyIFx1MDAyNlx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbiA5NzY6XHRcdFx0XHRpbnQgZXJyO1xuIDk3NzpcdFxuIDk3ODpcdFx0XHRcdGJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpO1xuIDk3OTpcdFx0XHRcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwdHIpO1xuIDk4MDpcdFx0XHRcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXB0cixcbiA5ODE6XHRcdFx0XHRcdFx0ICAgICBzaXplIC8gUEFHRV9TSVpFKTtcbiA5ODI6XHRcdFx0XHRpZiAoZXJyKSB7XG4gOTgzOlx0XHRcdFx0XHRicGZfaml0X2ZyZWVfZXhlYyhwdHIpO1xuIDk4NDpcdFx0XHRcdFx0cHRyID0gTlVMTDtcbiA5ODU6XHRcdFx0XHR9XG4gOTg2Olx0XHRcdH1cbiA5ODc6XHRcdFx0Z290byBvdXQ7XG4gOTg4Olx0XHR9XG4gOTg5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhY2ssIFx1MDAyNnBhY2tfbGlzdCwgbGlzdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYnBmX3Byb2dfcGFja19hbGxvYyBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gVGhlIHNpZ25pZmljYW50IGFsdGVyYXRpb24gaGVyZSBpcyByaWdodCBpbiB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50OgoKYGBgYwotCQlpZiAocHRyKSB7CiYjNDM7CQlpZiAocHRyICZhbXA7JmFtcDsgIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7CmBgYAoKRXNzZW50aWFsbHksIHRoZSBjb2RlIGlzIG5vdyBjaGVja2luZyBpZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAoYHB0cmApIGlzICpub3QqIGFscmVhZHkgcmVhZC1vbmx5LCBiZWZvcmUgYXR0ZW1wdGluZyB0byBtYXJrIGl0IGFzIHN1Y2guIFRoaXMgaXMgYSBjbGV2ZXIgb3B0aW1pemF0aW9uLiBCZWZvcmUsIHdlIHdlcmUgYmxpbmRseSBjYWxsaW5nIGBzZXRfbWVtb3J5X3JveGAgb24gdGhlIGFsbG9jYXRlZCBtZW1vcnksIGJ1dCBpZiBpdCB3YXMgYWxyZWFkeSBST1gsIHRoaXMgd2FzIGFuIHVubmVjZXNzYXJ5IG9wZXJhdGlvbi4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgYXZvaWRpbmcgYSByZWR1bmRhbnQgYHNldF9tZW1vcnlfcm94YCBjYWxsLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgaW1wYWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIGFuZCBzZWUgaG93IHRoaXMgbWlnaHQgYWZmZWN0IGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AuIEkgbmVlZCB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgZG93bnN0cmVhbSBlZmZlY3RzIG9mIHRoaXMgb3B0aW1pemF0aW9uIG9uIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIHRoZSBvcmlnaW5hbCBiZWhhdmlvciBvciBpZiBpdCYjMzk7cyByb2J1c3QgdG8gdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHQgKi9cbiAxMzE6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDEzMjpcdFxuIDEzMzpcdFx0aWYgKG5ldylcbiAxMzQ6XHRcdFx0ZC1cdTAwM2VpbWFnZV9vZmYgPSBub2ZmO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHR2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxuIDEzODpcdFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICp0bylcbiAxMzk6XHR7XG4gMTQwOlx0XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiAxNDE6XHRcdGludCBwcmV2X251bV9wcm9ncztcbiAxNDI6XHRcbiAxNDM6XHRcdGlmIChmcm9tID09IHRvKVxuIDE0NDpcdFx0XHRyZXR1cm47XG4gMTQ1Olx0XG4gMTQ2Olx0XHRtdXRleF9sb2NrKFx1MDAyNmQtXHUwMDNlbXV0ZXgpO1xuIDE0NzpcdFx0aWYgKCFkLVx1MDAzZWltYWdlKSB7XG4gMTQ4Olx0XHRcdGQtXHUwMDNlaW1hZ2UgPSBicGZfcHJvZ19wYWNrX2FsbG9jKFBBR0VfU0laRSwgYnBmX2ppdF9maWxsX2hvbGVfd2l0aF96ZXJvLCBmYWxzZSk7XG4gMTQ5Olx0XHRcdGlmICghZC1cdTAwM2VpbWFnZSlcbiAxNTA6XHRcdFx0XHRnb3RvIG91dDtcbiAxNTE6XHRcdFx0LyogZC1cdTAwM2Vyd19pbWFnZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlXG4gMTUyOlx0XHRcdCAqIGNhbiB1c2Ugdm1hbGxvYy5cbiAxNTM6XHRcdFx0ICovXG4gMTU0Olx0XHRcdGQtXHUwMDNlcndfaW1hZ2UgPSB2bWFsbG9jKFBBR0VfU0laRSk7XG4gMTU1Olx0XHRcdGlmICghZC1cdTAwM2Vyd19pbWFnZSkge1xuIDE1NjpcdFx0XHRcdGJwZl9wcm9nX3BhY2tfZnJlZShkLVx1MDAzZWltYWdlLCBQQUdFX1NJWkUpO1xuIDE1NzpcdFx0XHRcdGQtXHUwMDNlaW1hZ2UgPSBOVUxMO1xuIDE1ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDE1OTpcdFx0XHR9XG4gMTYwOlx0XHRcdGJwZl9pbWFnZV9rc3ltX2luaXQoZC1cdTAwM2VpbWFnZSwgUEFHRV9TSVpFLCBcdTAwMjZkLVx1MDAzZWtzeW0pO1xuIDE2MTpcdFx0XHRicGZfaW1hZ2Vfa3N5bV9hZGQoXHUwMDI2ZC1cdTAwM2Vrc3ltKTtcbiAxNjI6XHRcdH1cbiAxNjM6XHRcbiAxNjQ6XHRcdHByZXZfbnVtX3Byb2dzID0gZC1cdTAwM2VudW1fcHJvZ3M7XG4gMTY1Olx0XHRjaGFuZ2VkIHw9IGJwZl9kaXNwYXRjaGVyX3JlbW92ZV9wcm9nKGQsIGZyb20pO1xuIDE2NjpcdFx0Y2hhbmdlZCB8PSBicGZfZGlzcGF0Y2hlcl9hZGRfcHJvZyhkLCB0byk7XG4gMTY3Olx0XG4gMTY4Olx0XHRpZiAoIWNoYW5nZWQpXG4gMTY5Olx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcwMwoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA2NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdGhhdCYjMzk7cyBwcmV0dHkga2V5LCBhbmQgaXQgcmVhbGx5IHdhcnJhbnRzIGEgdGhvcm91Z2ggZ29pbmctb3Zlci4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRoZSBkaXNwYXRjaGVyJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSwgd2hpY2ggaXMgYWx3YXlzIGEgcGxhY2UgdGhhdCBkZXNlcnZlcyBleHRyYSBhdHRlbnRpb24uCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhbHRlcmluZyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgbWFuYWdlZCBmb3IgQlBGIEpJVCBleGVjdXRpb24uIEkgc2VlIGNoYW5nZXMgdG8gYGJwZl9qaXRfYWxsb2NfZXhlY2AsIHJlbmFtZWQgdG8gYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGluIHRoZSB4ODYtc3BlY2lmaWMgdHJhbXBvbGluZSBzaXplIGNhbGN1bGF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gbm93IHByZXNlbnQgaW4gdGhlIGdlbmVyYWwgQlBGIGNvcmUgY29kZS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGFsbG9jX25ld19wYWNrYCBhbmQgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIHRvIGluY2x1ZGUgY2hlY2tzIHRvIHByZXZlbnQgaWxsZWdhbCBpbnN0cnVjdGlvbnMgZnJvbSBiZWluZyB1c2VkIGFuZCB0byBzZXQgbWVtb3J5IHRvIFJPWCAoUmVhZCBPbmx5IGVYZWN1dGUpLiBNb3N0IG5vdGFibHksIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2Agbm93IHVzZXMgYHZtYWxsb2NgIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIG1lbW9yeSBhbGxvY2F0aW9uLgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIGxpa2VseSBpbXBhY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGNvbXBpbGVkIGFuZCBleGVjdXRlZCwgc28gdGhvc2UgYXJlIGRlZmluaXRlbHkgdGhlIGhvdCBzcG90cy4gSXQgYWxzbyBjaGFuZ2VzIGBhcmNoL3g4Ni9tbS9pbml0LmNgIHdpdGggcmVnYXJkcyB0byBtZW1vcnkgZmxhZ3MuCgpHaXZlbiB0aGUgc2NvcGUsIEkgaW1tZWRpYXRlbHkgZmxhZ2dlZCB0aGlzIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuIFRoZXNlIGtpbmRzIG9mIGNoYW5nZXMgdG8gY29yZSBCUEYgbG9naWMgYXJlIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gaGlkZS4KCk15IGtleSBmb2N1cyBhcmVhcyBmb3IgYW5hbHlzaXMgYXJlIGdvaW5nIHRvIGJlIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgKHNpbmNlIGl0JiMzOTtzIHg4Ni1zcGVjaWZpYyksIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgLCBhbmQgYGFsbG9jX25ld19wYWNrYC4gSSYjMzk7bSByZWFsbHkgY3VyaW91cyBob3cgdGhvc2UgY2hhbmdlcyBhZmZlY3QgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHByb2dyYW0gcGFja2luZy4KCkkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfQlBGX0pJVGAgaXMgZW5hYmxlZCwgYXMgdGhhdCBzZWVtcyBlc3NlbnRpYWwgZm9yIHRoaXMgcGF0Y2gsIGFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHByb2JhYmx5IG5lY2Vzc2FyeSBmb3IgQlBGIGZ1bmN0aW9uYWxpdHkgaW4gZ2VuZXJhbC4gQWZ0ZXIgYSBxdWljayBjaGVjaywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9KSVRgIGlzIGluZGVlZCBhIGhhcmQgcmVxdWlyZW1lbnQsIHdoaWNoIEkgY29uZmlybWVkIHdpdGggdGhlIGJ1aWxkIGRpcmVjdGl2ZXMgaW4gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4KCk15IHN0cmF0ZWd5IHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRob3NlIGZvY3VzIGZ1bmN0aW9ucywgZW5zdXJpbmcgdGhhdCB0aGUgbmV3IG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIFJPWCBtZW1vcnkgaGFuZGxpbmcgd29yayBhcyBleHBlY3RlZCBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgc2lkZS1jaGFubmVsIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byB0aG9yb3VnaGx5IGZ1enogdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDssCiAgICAmIzM0O2FyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2FsbG9jX2V4ZWNfcncmIzM0OywKICAgICYjMzQ7YWxsb2NfbmV3X3BhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcGFja19hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyYjMzQ7LAogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9hbGxvY19leGVjX3J3JiMzNDssCiAgICAmIzM0O2FsbG9jX25ld19wYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24sIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCBjaGFuZ2luZyBob3cgQlBGIHByb2dyYW0gcGFja3MgYW5kIGRpc3BhdGNoZXJzIGFsbG9jYXRlIG1lbW9yeS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIwOjUwLjE2MTQ2MjY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDMxOTQ1MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcGFja19hbGxvY1wiLFxuICAgIFwiYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dcIixcbiAgICBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiLFxuICAgIFwiYnBmX2ppdF9hbGxvY19leGVjX3J3XCIsXG4gICAgXCJhbGxvY19uZXdfcGFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24sIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCBjaGFuZ2luZyBob3cgQlBGIHByb2dyYW0gcGFja3MgYW5kIGRpc3BhdGNoZXJzIGFsbG9jYXRlIG1lbW9yeS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjA6NTAuMTYxNDY3MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTMxOTY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg1YzZlNWUzYTA0NzkxZTQ4NGIwMWQ4ZDU5OTgzNDQzYjZjOThhNmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMTIgMDM6MjA6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jXFxuaW5kZXggZmI2NzIxN2ZkZGNkMzcuLjA3OWY4YzdlOWUzY2RlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL2luaXQuY1xcbisrKyBiL2FyY2gveDg2L21tL2luaXQuY1xcbkBAIC0xMTA3LDEwICsxMTA3LDEwIEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG4gXFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4gXFx0XFx0XFx0fSxcXG4gXFx0XFx0XFx0W0VYRUNNRU1fQlBGXSA9IHtcXG4tXFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBFWEVDTUVNX0tBU0FOX1NIQURPVyxcXG4rXFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBmbGFncyxcXG4gXFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4gXFx0XFx0XFx0XFx0LmVuZFxcdD0gTU9EVUxFU19FTkQsXFxuLVxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IFBBR0VfS0VSTkVMLFxcbitcXHRcXHRcXHRcXHQucGdwcm90XFx0PSBwZ3Byb3QsXFxuIFxcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXFxuIFxcdFxcdFxcdH0sXFxuIFxcdFxcdFxcdFtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggZGU3NTE1ZWExYmVhZTguLmIyZmVlYzgxZTIzMTJlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0zNzAzLDEzICszNzAzLDEyIEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXFxuLVxcdCAqIFRoaXMgd2lsbCBOT1QgY2F1c2UgZnJhZ21lbnRhdGlvbiBpbiBkaXJlY3QgbWFwLCBhcyB3ZSBkbyBub3RcXG4tXFx0ICogY2FsbCBzZXRfbWVtb3J5XyooKSBvbiB0aGlzIGJ1ZmZlci5cXG4gXFx0ICpcXG4gXFx0ICogV2UgY2Fubm90IHVzZSBrdm1hbGxvYyBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaW1hZ2UgdG8gYmUgaW5cXG4gXFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cXG4rXFx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuXFxuIFxcdCAqL1xcbi1cXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xcbitcXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xcbiBcXHRpZiAoIWltYWdlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuaW5kZXggMTRhY2IyNDU1NzQ2ZmMuLjMyZDUyOTdjNTU3ZTViIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuQEAgLTEzMzMsNiArMTMzMyw3IEBAIGJwZl9qaXRfYmluYXJ5X2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0cixcXG4gdm9pZCBicGZfaml0X2JpbmFyeV9mcmVlKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGRyKTtcXG4gdTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKTtcXG4gdm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpO1xcbiB2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xcbiB2b2lkIGJwZl9qaXRfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKTtcXG4gc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li5lMjA3NjY2N2IyNDUxNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXFxuQEAgLTkxNiw2ICs5MTYsMTEgQEAgc3RhdGljIExJU1RfSEVBRChwYWNrX2xpc3QpO1xcbiBcXG4gI2RlZmluZSBCUEZfUFJPR19DSFVOS19DT1VOVCAoQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSlcXG4gXFxuK3N0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7XFxuQEAgLTkyNywxNiArOTMyLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zXFxuIFxcdHBhY2stXFx1MDAzZXB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhCUEZfUFJPR19QQUNLX1NJWkUpO1xcbiBcXHRpZiAoIXBhY2stXFx1MDAzZXB0cilcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVxcdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XFxuIFxcdGJpdG1hcF96ZXJvKHBhY2stXFx1MDAzZWJpdG1hcCwgQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSk7XFxuIFxcbiBcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXFxuIFxcdFxcdHBhY2stXFx1MDAzZWFyY2hfZmx1c2hfbmVlZGVkID0gdHJ1ZTtcXG4tXFx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stXFx1MDAzZXB0cik7XFxuLVxcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stXFx1MDAzZXB0cixcXG4tXFx0XFx0XFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFicGZfaml0X21lbV9pc19yb3goKSkge1xcbitcXHRcXHRicGZfZmlsbF9pbGxfaW5zbnMocGFjay1cXHUwMDNlcHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpO1xcbitcXHRcXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cXHUwMDNlcHRyKTtcXG4rXFx0XFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cXHUwMDNlcHRyLFxcbitcXHRcXHRcXHRcXHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBhY2stXFx1MDAzZWxpc3QsIFxcdTAwMjZwYWNrX2xpc3QpO1xcbiBcXHRyZXR1cm4gcGFjaztcXG4gXFxuQEAgLTk2NSw3ICs5NzIsNyBAQCB2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbFxcbiBcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcIkJQRjogUHJlZGljdG9ycyBub3QgZmx1c2hlZCBmb3IgYWxsb2NhdGlvbnMgZ3JlYXRlciB0aGFuIEJQRl9QUk9HX1BBQ0tfU0laRVxcXFxuXFxcIik7XFxuIFxcdFxcdHNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpO1xcbiBcXHRcXHRwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoc2l6ZSk7XFxuLVxcdFxcdGlmIChwdHIpIHtcXG4rXFx0XFx0aWYgKHB0ciBcXHUwMDI2XFx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcXG4gXFx0XFx0XFx0aW50IGVycjtcXG4gXFxuIFxcdFxcdFxcdGJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpO1xcbkBAIC0xMTE2LDEyICsxMTIzLDE3IEBAIHZvaWQgYnBmX2ppdF91bmNoYXJnZV9tb2RtZW0odTMyIHNpemUpXFxuIFxcdGF0b21pY19sb25nX3N1YihzaXplLCBcXHUwMDI2YnBmX2ppdF9jdXJyZW50KTtcXG4gfVxcbiBcXG4tdm9pZCAqX193ZWFrIGJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpXFxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpO1xcbiB9XFxuIFxcbi12b2lkIF9fd2VhayBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxcbit2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHJldHVybiBleGVjbWVtX2FsbG9jX3J3KEVYRUNNRU1fQlBGLCBzaXplKTtcXG4rfVxcbitcXG4rdm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxcbiB7XFxuIFxcdGV4ZWNtZW1fZnJlZShhZGRyKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXFxuaW5kZXggZWEyZDYwZGMxZmVlYjcuLmQ4NWIzZThhZDJlNGVlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXFxuKysrIGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcXG5AQCAtMTQ4LDcgKzE0OCwxMCBAQCB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxcbiBcXHRcXHRkLVxcdTAwM2VpbWFnZSA9IGJwZl9wcm9nX3BhY2tfYWxsb2MoUEFHRV9TSVpFLCBicGZfaml0X2ZpbGxfaG9sZV93aXRoX3plcm8sIGZhbHNlKTtcXG4gXFx0XFx0aWYgKCFkLVxcdTAwM2VpbWFnZSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGQtXFx1MDAzZXJ3X2ltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7XFxuK1xcdFxcdC8qIGQtXFx1MDAzZXJ3X2ltYWdlIGRvZXNuJ3QgbmVlZCB0byBiZSBpbiBtb2R1bGUgbWVtb3J5IHJhbmdlLCBzbyB3ZVxcbitcXHRcXHQgKiBjYW4gdXNlIHZtYWxsb2MuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkLVxcdTAwM2Vyd19pbWFnZSA9IHZtYWxsb2MoUEFHRV9TSVpFKTtcXG4gXFx0XFx0aWYgKCFkLVxcdTAwM2Vyd19pbWFnZSkge1xcbiBcXHRcXHRcXHRicGZfcHJvZ19wYWNrX2ZyZWUoZC1cXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XFxuIFxcdFxcdFxcdGQtXFx1MDAzZWltYWdlID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjA6NTAuNjU3MzU3MDA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDk5MzYwNDMyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ1wiLFxuICAgIFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCIsXG4gICAgXCJicGZfaml0X2FsbG9jX2V4ZWNfcndcIixcbiAgICBcImFsbG9jX25ld19wYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1YzZlNWUzYTA0NzkxZTQ4NGIwMWQ4ZDU5OTgzNDQzYjZjOThhNmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAwMzoyMDo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuY1xuaW5kZXggZmI2NzIxN2ZkZGNkMzcuLjA3OWY4YzdlOWUzY2RlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jXG4rKysgYi9hcmNoL3g4Ni9tbS9pbml0LmNcbkBAIC0xMTA3LDEwICsxMTA3LDEwIEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4gXHRcdFx0fSxcbiBcdFx0XHRbRVhFQ01FTV9CUEZdID0ge1xuLVx0XHRcdFx0LmZsYWdzXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxuK1x0XHRcdFx0LmZsYWdzXHQ9IGZsYWdzLFxuIFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuIFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbi1cdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4rXHRcdFx0XHQucGdwcm90XHQ9IHBncHJvdCxcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4gXHRcdFx0fSxcbiBcdFx0XHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uYjJmZWVjODFlMjMxMmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTM3MDMsMTMgKzM3MDMsMTIgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXG4tXHQgKiBUaGlzIHdpbGwgTk9UIGNhdXNlIGZyYWdtZW50YXRpb24gaW4gZGlyZWN0IG1hcCwgYXMgd2UgZG8gbm90XG4tXHQgKiBjYWxsIHNldF9tZW1vcnlfKigpIG9uIHRoaXMgYnVmZmVyLlxuIFx0ICpcbiBcdCAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluXG4gXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxuK1x0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuXG4gXHQgKi9cbi1cdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7XG4rXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xuIFx0aWYgKCFpbWFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4zMmQ1Mjk3YzU1N2U1YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMzMzLDYgKzEzMzMsNyBAQCBicGZfaml0X2JpbmFyeV9hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXG4gdm9pZCBicGZfaml0X2JpbmFyeV9mcmVlKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGRyKTtcbiB1NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpO1xuIHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpO1xuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpO1xuIHZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcik7XG4gdm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpmcCk7XG4gc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCA0N2ZlMDQ3YWQzMGI4OC4uZTIwNzY2NjdiMjQ1MTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC05MTYsNiArOTE2LDExIEBAIHN0YXRpYyBMSVNUX0hFQUQocGFja19saXN0KTtcbiBcbiAjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxuIFxuK3N0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxuK3tcbitcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7XG5AQCAtOTI3LDE2ICs5MzIsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNcbiBcdHBhY2stXHUwMDNlcHRyID0gYnBmX2ppdF9hbGxvY19leGVjKEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4gXHRpZiAoIXBhY2stXHUwMDNlcHRyKVxuIFx0XHRnb3RvIG91dDtcbi1cdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcbiBcdGJpdG1hcF96ZXJvKHBhY2stXHUwMDNlYml0bWFwLCBCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKTtcbiBcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmJwZl9wcmVkX2ZsdXNoX2VuYWJsZWQpKVxuIFx0XHRwYWNrLVx1MDAzZWFyY2hfZmx1c2hfbmVlZGVkID0gdHJ1ZTtcbi1cdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVx1MDAzZXB0cik7XG4tXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVx1MDAzZXB0cixcbi1cdFx0XHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbitcdFx0YnBmX2ZpbGxfaWxsX2luc25zKHBhY2stXHUwMDNlcHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpO1xuK1x0XHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cdTAwM2VwdHIpO1xuK1x0XHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVx1MDAzZXB0cixcbitcdFx0XHRcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cGFjay1cdTAwM2VsaXN0LCBcdTAwMjZwYWNrX2xpc3QpO1xuIFx0cmV0dXJuIHBhY2s7XG4gXG5AQCAtOTY1LDcgKzk3Miw3IEBAIHZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sXG4gXHRcdFx0cHJfd2Fybl9vbmNlKFwiQlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXFxuXCIpO1xuIFx0XHRzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTtcbiBcdFx0cHRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xuLVx0XHRpZiAocHRyKSB7XG4rXHRcdGlmIChwdHIgXHUwMDI2XHUwMDI2ICFicGZfaml0X21lbV9pc19yb3goKSkge1xuIFx0XHRcdGludCBlcnI7XG4gXG4gXHRcdFx0YnBmX2ZpbGxfaWxsX2luc25zKHB0ciwgc2l6ZSk7XG5AQCAtMTExNiwxMiArMTEyMywxNyBAQCB2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxuIFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFx1MDAyNmJwZl9qaXRfY3VycmVudCk7XG4gfVxuIFxuLXZvaWQgKl9fd2VhayBicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuIFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpO1xuIH1cbiBcbi12b2lkIF9fd2VhayBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xuK31cbitcbit2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXG4ge1xuIFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXG5pbmRleCBlYTJkNjBkYzFmZWViNy4uZDg1YjNlOGFkMmU0ZWUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xuKysrIGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcbkBAIC0xNDgsNyArMTQ4LDEwIEBAIHZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXG4gXHRcdGQtXHUwMDNlaW1hZ2UgPSBicGZfcHJvZ19wYWNrX2FsbG9jKFBBR0VfU0laRSwgYnBmX2ppdF9maWxsX2hvbGVfd2l0aF96ZXJvLCBmYWxzZSk7XG4gXHRcdGlmICghZC1cdTAwM2VpbWFnZSlcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xuK1x0XHQvKiBkLVx1MDAzZXJ3X2ltYWdlIGRvZXNuJ3QgbmVlZCB0byBiZSBpbiBtb2R1bGUgbWVtb3J5IHJhbmdlLCBzbyB3ZVxuK1x0XHQgKiBjYW4gdXNlIHZtYWxsb2MuXG4rXHRcdCAqL1xuK1x0XHRkLVx1MDAzZXJ3X2ltYWdlID0gdm1hbGxvYyhQQUdFX1NJWkUpO1xuIFx0XHRpZiAoIWQtXHUwMDNlcndfaW1hZ2UpIHtcbiBcdFx0XHRicGZfcHJvZ19wYWNrX2ZyZWUoZC1cdTAwM2VpbWFnZSwgUEFHRV9TSVpFKTtcbiBcdFx0XHRkLVx1MDAzZWltYWdlID0gTlVMTDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIwOjUwLjY1NzM1OTE4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDA0NDg3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEpJVCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIGhvdyB0aGUgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiB3b3Jrcy4gSXQncyBlc3NlbnRpYWxseSBzd2FwcGluZyBvdXQgdGhlIGN1cnJlbnQgYGJwZl9qaXRfYWxsb2NfZXhlY2Agd2l0aCBlaXRoZXIgYGV4ZWNtZW1fYWxsb2NgIG9yIHRoZSBuZXcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIHdoaWNoIHRoZW4gdXNlcyBgZXhlY21lbV9hbGxvY19yd2AuIFNlZW1zIGxpa2UgYSBtb3ZlIHRvd2FyZCBtb3JlIGNvbnRyb2wgb3IgZmxleGliaWxpdHkgaW4gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgbWVtb3J5IHJlZ2lvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMgdG8gYGFyY2gveDg2L21tL2luaXQuY2Agd2l0aCB0aGUgYEVYRUNNRU1fQlBGYCBmbGFncyBhbmQgYHBncHJvdGAuIFRoZSBjaGVjayBpbiBga2VybmVsL2JwZi9jb3JlLmNgIGZvciBgYnBmX2ppdF9tZW1faXNfcm94KClgIGFuZCB0aGUgY29uZGl0aW9uYWwgYHNldF9tZW1vcnlfcm94YCBzdWdnZXN0cyB3ZSdyZSBnZXR0aW5nIHNtYXJ0ZXIgYWJvdXQgcmVhZC1vbmx5IG1lbW9yeSByZWdpb25zLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjYWxscy4gQW5kIHRoZSBjaGFuZ2UgdG8gdXNlIGB2bWFsbG9jYCBpbiBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgIGZvciBgZC1cdTAwM2Vyd19pbWFnZWAgaXMgaW50ZXJlc3RpbmcuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBtZWFucyB3ZSd2ZSBjaGFuZ2VkIGhvdyBCUEYgSklUIGFuZCBleGVjbWVtIGJlaGF2ZS4gRnJvbSBhbiBhbmFseXNpcyBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhY3R1YWxseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGggYW5kIGlmIGl0J3MgZnV6emFibGUuIEJQRiBKSVQgKmlzKiBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgaW50byBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIGZvY3VzaW5nIG9uIHJlYWNoYWJpbGl0eSBhbmQgZnV6emluZzogSSdsbCBuZWVkIHRvIGNoZWNrIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLCBgYnBmX2ppdF9hbGxvY19leGVjYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYW5kIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgcGF0aC4gYENPTkZJR19CUEZfSklUYCBpcyBhIG11c3QsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhbm90aGVyIG9idmlvdXMgb25lLiBTaW5jZSBpdCdzIHRvdWNoaW5nIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCBJJ2xsIGFkZCBgQ09ORklHX1g4NmAgdG8gdGhlIGxpc3QuXG5cbkknbSBkZWZpbml0ZWx5IGdvaW5nIHRvIGxldmVyYWdlIG15IGV4aXN0aW5nIHRvb2xpbmcgdG8gdmVyaWZ5IHRoZXNlIGFzc3VtcHRpb25zIGFuZCByZWFjaGFiaWxpdHkgcGF0aHMuIFRpbWUgdG8gZmlyZSBpdCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIwOjU2Ljk5NzgwOTg5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgxOTUwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9qaXRfYWxsb2NfZXhlY19yd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY5OD1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MDgtXFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcwOTpcXHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS5cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxMC1cXHQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcxMTpcXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEyLVxcdGlmICghaW1hZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTEzMzU9dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMzM2OnZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTMzNy12b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTEyNj12b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTEzMC1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxMTMxOnZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXFxua2VybmVsL2JwZi9jb3JlLmMtMTEzMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIwOjU5LjM3OTc2NTIxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjUzMjc1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBCUEYgQ29kZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGZvY3VzIG9mIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyB3aXRoaW4gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3Vic3lzdGVtLiBUaGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlOiBgYnBmX3Byb2dfcGFja19hbGxvY2AsIGBhbGxvY19uZXdfcGFja2AsIGBicGZfaml0X2FsbG9jX2V4ZWNgLCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYW5kIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLiBUaGF0J3MgYSBwcmV0dHkgZGl2ZXJzZSBzZXQsIHNwYW5uaW5nIHBhY2sgYWxsb2NhdGlvbiwgSklUIG1lbW9yeSBhbGxvY2F0aW9uIChib3RoIHJlYWQtb25seSBhbmQgcmVhZC13cml0ZSByZWdpb25zLCBwcmVzdW1hYmx5KSwgZGlzcGF0Y2hlciBjaGFuZ2VzLCBhbmQgcG90ZW50aWFsbHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIHdpdGggdGhlIHRyYW1wb2xpbmUgc2l6ZS5cblxuTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9jb3JlLmNgIGFuZCBzdGFydCB3aXRoIHRoZSBgYnBmX3Byb2dfcGFja19hbGxvY2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFyY2hpbmcgc3RyYXRlZ3kgYmVpbmcgaW1wbGVtZW50ZWQgaGVyZS4gRnJvbSB0aGVyZSwgSSBleHBlY3QgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXJzLiBUaGUgSklUIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFyZSBjbGVhcmx5IGltcG9ydGFudCBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIFRoZSBkaXNwYXRjaGVyIGNoYW5nZSBoaW50cyBhdCBwb3RlbnRpYWxseSBuZXcgcHJvZ3JhbSBkaXNwYXRjaGluZyBzdHJhdGVnaWVzLCBhbmQgdGhlIHRyYW1wb2xpbmUgc2l6ZSBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIEpJVCBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHJlYWQvd3JpdGUgYXNwZWN0LCBhbmQgaXRzIGltcGFjdCBvbiBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UuIExldCdzIHNlZSB3aGF0IGBicGZfcHJvZ19wYWNrX2FsbG9jYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjE6MDMuMjQ1MDk1NTY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTg4NjcyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcGFja19hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yODcxPXZvaWQgKmFyY2hfYWxsb2NfYnBmX3RyYW1wb2xpbmUodW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjg3Mi17XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjg3MzpcXHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjg3NC19XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE3OTE9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE3OTIte1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTc5MzpcXHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzk0LX1cXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTg5PXZvaWQgKmFyY2hfYWxsb2NfYnBmX3RyYW1wb2xpbmUodW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy01OTAte1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTkxOlxcdHJldHVybiBicGZfcHJvZ19wYWNrX2FsbG9jKHNpemUsIGJwZl9qaXRfZmlsbF9pbGxfaW5zbnMsIGZhbHNlKTtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTU5Mi19XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMjI9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMjMte1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMyNDpcXHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBicGZfZmlsbF9pbGxfaW5zbnMsIGZhbHNlKTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMjUtfVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM2NTQ9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1NS17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2NTY6XFx0cmV0dXJuIGJwZl9wcm9nX3BhY2tfYWxsb2Moc2l6ZSwgaml0X2ZpbGxfaG9sZSwgZmFsc2UpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjU3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTM0MD1icGZfaml0X2JpbmFyeV9wYWNrX2hkcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEzNDEtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMzQyOnZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sIHdhc19jbGFzc2ljKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEzNDMtdm9pZCBicGZfcHJvZ19wYWNrX2ZyZWUodm9pZCAqcHRyLCB1MzIgc2l6ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz05MjQ9c3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTk1NS1cXG5rZXJuZWwvYnBmL2NvcmUuYzo5NTY6dm9pZCAqYnBmX3Byb2dfcGFja19hbGxvYyh1MzIgc2l6ZSwgYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMsIGJvb2wgd2FzX2NsYXNzaWMpXFxua2VybmVsL2JwZi9jb3JlLmMtOTU3LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTExOTc9YnBmX2ppdF9iaW5hcnlfcGFja19hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjE0LVxcdFxcdHJldHVybiBOVUxMO1xcbmtlcm5lbC9icGYvY29yZS5jOjEyMTU6XFx0cm9faGVhZGVyID0gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBicGZfZmlsbF9pbGxfaW5zbnMsIHdhc19jbGFzc2ljKTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjE2LVxcdGlmICghcm9faGVhZGVyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYz0xMzc9dm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcXG4tLVxcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTE0Ny1cXHRpZiAoIWQtXFx1MDAzZWltYWdlKSB7XFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTQ4OlxcdFxcdGQtXFx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTE0OS1cXHRcXHRpZiAoIWQtXFx1MDAzZWltYWdlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTowNS4xNjM5NjgzN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODQ2NTI3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBSZWxhdGVkIHRvIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IEJQRiBKSVQgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50LCBwb3RlbnRpYWxseSBoaWdoLWltcGFjdCBjaGFuZ2UgYmVjYXVzZSBpdCB0b3VjaGVzIG9uIEJQRiBKSVQgYW5kIGBleGVjbWVtYCDigJMgdGhlc2UgYXJlIGNydWNpYWwgYXJlYXMuICBUaGUgcGF0Y2gncyBjb3JlIGlzIG1vZGlmeWluZyBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLiBJdOKAmXMgc3dpdGNoaW5nIGZyb20gdGhlIHN0YW5kYXJkIGBicGZfaml0X2FsbG9jX2V4ZWNgIGZ1bmN0aW9uIHRvIHV0aWxpemluZyBgZXhlY21lbV9hbGxvY2Agb3IgdGhlIG5ldyBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCB3aXRoIGBleGVjbWVtX2FsbG9jX3J3YC4gIEl0IGxvb2tzIGxpa2UgdGhlcmXigJlzIGFsc28gbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFyY2gveDg2L21tL2luaXQuY2AsIHNwZWNpZmljYWxseSBhZGp1c3RtZW50cyB0byB0aGUgYEVYRUNNRU1fQlBGYCBmbGFncyBhbmQgYHBncHJvdGAgdmFsdWVzIGZvciBtZW1vcnkgcHJvdGVjdGlvbi5cblxuQmV5b25kIHRoYXQsIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBzb21lIGNoZWNrczsgSSBzZWUgYSBuZXcgYGJwZl9qaXRfbWVtX2lzX3JveCgpYCBmdW5jdGlvbiBiZWluZyBpbnRyb2R1Y2VkLCBhbmQgY2hhbmdlcyB0byBhdm9pZCBjYWxsaW5nIGBzZXRfbWVtb3J5X3JveGAgaWYgdGhlIG1lbW9yeSBpcyBhbHJlYWR5IFJlYWQgT25seSBFeGVjdXRlIChST1gpLiAgSSBhbHNvIG5vdGljZWQgdGhhdCB0aGUgcGF0Y2ggaXMgdXBkYXRpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgdG8gdXNlIHRoZSBuZXcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYWxsb2NhdGlvbi4gIEFkZGl0aW9uYWxseSwgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYCBpcyBzd2l0Y2hpbmcgdG8gYHZtYWxsb2NgIGluc3RlYWQgb2YgYGJwZl9qaXRfYWxsb2NfZXhlY2AgZm9yIHRoZSBgZC1cdTAwM2Vyd19pbWFnZWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgaGVyZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSB3b3J0aCBmdXp6aW5nP1wiLiBCUEYgSklULCBpbiBteSBleHBlcmllbmNlLCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGl0cyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMuIEknbGwgbmVlZCB0byBsb29rIGF0OlxuXG4qICAgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWBcbiogICBgYnBmX2ppdF9hbGxvY19leGVjYFxuKiAgIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgXG4qICAgYGJwZl9wcm9nX3BhY2tfYWxsb2NgXG4qICAgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYFxuXG5UaGVzZSBhcmUga2V5IGZ1bmN0aW9ucyBJIG11c3QgdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgaW4gcmVsYXRpb24gdG8gdGhlIGNoYW5nZXMuXG5cbkknbGwgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBuZXh0LiBJICprbm93KiBJIG5lZWQgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHBhdGggdG8gYmUgYWN0aXZlLiBHaXZlbiB0aGUgYGFyY2gveDg2YCBwYXRoLCBvZiBjb3Vyc2UsIEkgbmVlZCBgQ09ORklHX1g4NmAuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9scyB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uOlxuXG4qICAgYGJwZl9wcm9nX3BhY2tfYWxsb2NgXG4qICAgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYFxuKiAgIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgXG4qICAgYGFsbG9jX25ld19wYWNrYFxuKiAgIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgXG5cbkknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBpcyByZWFjaGFibGUuIEJQRiBkaXNwYXRjaGVycyBhcmUsIGFzIEkga25vdywgdXNlZCBmb3IgbWFuYWdpbmcgQlBGIHByb2dyYW1zLCBzbyBJJ2xsIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGF0IGZyYW1ld29yay5cblxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzI3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIxOjIwLjAxMDQ5NzUxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU4Nzk1NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MTUyND1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTU4OS0jZGVmaW5lIEJQRl9ESVNQQVRDSEVSX1BUUihuYW1lKSAoXFx1MDAyNmJwZl9kaXNwYXRjaGVyXyMjbmFtZSlcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE1OTA6dm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE1OTEtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICp0byk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2MjM9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKSB7fVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjI3LSNkZWZpbmUgQlBGX0RJU1BBVENIRVJfUFRSKG5hbWUpIE5VTExcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mjg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2MjktXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM9MTA2PXN0YXRpYyB2b2lkIGJwZl9kaXNwYXRjaGVyX3VwZGF0ZShzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIGludCBwcmV2X251bV9wcm9ncylcXG4tLVxcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTEzNi1cXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYzoxMzc6dm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy0xMzgtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICp0bylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDI5PXZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDMwLXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAzMTpcXHRicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhCUEZfRElTUEFUQ0hFUl9QVFIoeGRwKSwgcHJldl9wcm9nLCBwcm9nKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIxOjIxLjg2OTI5NzUwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzQxODM0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRpZmZlcmVudCB3YXlzIHRoZXNlIEJQRiBmdW5jdGlvbnMgYXJlIGJlaW5nIHRyaWdnZXJlZCwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIGZvciB0aGlzIG5ldyBwcm9qZWN0LiBGaXJzdCwgSSBzZWUgdGhhdCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIGNhbiBiZSBjYWxsZWQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggWERQIHByb2dyYW0gY2hhbmdlcyAtIHRoYXQncyBhIGtleSBhcmVhIHRvIGNvbnNpZGVyLiBUaGVuLCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgcmVhY2hhYmxlIHZpYSBCUEYgSklULCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGZvciBvcHRpbWl6YXRpb24gYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIExhc3RseSwgYW5kIHRoaXMgaXMgd2hlcmUgSSdsbCBzdGFydCBkaWdnaW5nIGEgYml0IGRlZXBlciwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgY29ubmVjdGVkIHRvIHRoZSBCUEYgdHJhbXBvbGluZSBtZWNoYW5pc20uIEdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSdtIHdvcmtpbmcgb24sIHRoZSB0cmFtcG9saW5lIHNpemUgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCB0byBhbmFseXplIHJpZ2h0IG5vdy4gTGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXJhbWV0ZXJzLCBlZGdlIGNhc2VzLCBhbmQgaW1wYWN0IG9uIG15IHNwZWNpZmljIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ2MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIxOjI1LjIwMzQ4MjkwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MTM5MTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9Mjg0ND1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI4NDgtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjg0OTppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI4NTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjE0ND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE4MS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIxODI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxODMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9ODEyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTkxLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTE5MjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5My1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMDIyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMDYtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzA3OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzA4LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTA9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjk2NS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5NjY6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKm9yaWdfY2FsbClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjY5PWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY5Ny1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY5ODppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjk5LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTEzMTg9aW50IF9fbXVzdF9jaGVjayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjEzMTk6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTEzMjAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NTk3PWludCBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxMy1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjE0OlxcdHNpemUgPSBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUobW9kZWwsIGZsYWdzLCB0bm9kZXMsIHN0dWJfZnVuYyk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxNS1cXHRpZiAoc2l6ZSBcXHUwMDNjPSAwKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MjQtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzI1OlxcdHNpemUgPSBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoXFx1MDAyNnRyLVxcdTAwM2VmdW5jLm1vZGVsLCB0ci1cXHUwMDNlZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzI2LVxcdFxcdFxcdFxcdFxcdHRub2RlcywgdHItXFx1MDAzZWZ1bmMuYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNDYxPWludCBfX3dlYWsgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NjYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTQ2NzppbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDY4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjE6MjYuOTk0ODc5Nzk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTQ3ODUzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBCUEYgdHJhbXBvbGluZXMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgdXBkYXRlIHByb2Nlc3MuIEkgc2VlIHRoYXQgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgY2VudHJhbCwgYXMgaXQncyBjYWxsZWQgZnJvbSBib3RoIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYC4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgdHJpZ2dlcmVkIHdoZW4gd2UncmUgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyB0byB0aGVzZSB0cmFtcG9saW5lcywgd2hpY2ggaXMgdGhlIGtleSBwYXJ0IG9mIHRoZSBvcGVyYXRpb24uIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgd29ya3MsIEkgdGhpbmsgaXQncyB3b3J0aCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTozMC4zMDk2NjcyNDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM3OTI5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9hbGxvY19leGVjX3J3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjk4PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcwOC1cXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzA5OlxcdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGJwZl9qaXRfYWxsb2NfZXhlY19ydygpLlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEwLVxcdCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzExOlxcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MTItXFx0aWYgKCFpbWFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTMzNT12b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEzMzY6dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzM3LXZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xMTI2PXZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xMTMwLVxcbmtlcm5lbC9icGYvY29yZS5jOjExMzE6dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5rZXJuZWwvYnBmL2NvcmUuYy0xMTMyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjE6MzIuMTEzNDY1NDYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTE1MzgzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVyaWVuY2VkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqRGVjb2RpbmcgdGhlIEJQRiBFeGVjdXRpb24gTWVtb3J5IFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L21tL2luaXQuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZm9jdXMgaXMgYXJvdW5kIGhvdyB3ZSdyZSBoYW5kbGluZyBgRVhFQ01FTV9CUEZgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGV5J3JlIGNoYW5naW5nIHRoZSBtZW1vcnkgc2V0dXAsIGxpa2VseSB0aGUgcGVybWlzc2lvbnMgb3IgYXR0cmlidXRlcywgYXNzb2NpYXRlZCB3aXRoIHJ1bm5pbmcgQlBGIGNvZGUgb24geDg2LlwiICBUaGUga2V5IGlzIHRoZSBzd2l0Y2ggdG8gbGV2ZXJhZ2luZyBgZmxhZ3NgIGFuZCBgcGdwcm90YCB3aXRoaW4gYGV4ZWNtZW1fYXJjaF9zZXR1cGAuXG5cbk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpcmVjdGx5IG1hbmlwdWxhdGluZyB0aGVzZSB2YXJpYWJsZXMsIGBmbGFnc2AgYW5kIGBwZ3Byb3RgPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSeKAmWxsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBleGFjdCBkZWZpbml0aW9ucyBhbmQgcG9zc2libGUgdmFsdWVzLCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIGhvdyB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSBhcmUgY29uZmlndXJlZCBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucy4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZSBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIElzIHRoaXMgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBhIG5lY2Vzc2FyeSBzZWN1cml0eSBoYXJkZW5pbmcsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/IFdoYXQncyB0aGUgY29udGV4dCBmb3IgdGhlIGNoYW5nZT8gSSBiZXR0ZXIgZ28gcmV2aWV3IHRoZSBgZXhlY21lbV9hcmNoX3NldHVwYCBmdW5jdGlvbiByaWdodCBub3cgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHdoYXQncyBnb2luZyBvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTozNS43MjUwMTAzMDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzkxNTUyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY21lbV9hcmNoX3NldHVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21tL2luaXQuYz00NDk9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL2FybS9tbS9pbml0LmMtNDUwLVxcbmFyY2gvYXJtL21tL2luaXQuYzo0NTE6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvYXJtL21tL2luaXQuYy00NTIte1xcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmM9NTAzPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTA0LVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjUwNTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTA2LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYz0yNDA9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMjQxLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoyNDI6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0yNDMte1xcbi0tXFxuYXJjaC9taXBzL21tL2luaXQuYz01NjI9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL21pcHMvbW0vaW5pdC5jLTU2My1cXG5hcmNoL21pcHMvbW0vaW5pdC5jOjU2NDpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9taXBzL21tL2luaXQuYy01NjUte1xcbi0tXFxuYXJjaC9uaW9zMi9tbS9pbml0LmM9MTM3PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9uaW9zMi9tbS9pbml0LmMtMTM4LVxcbmFyY2gvbmlvczIvbW0vaW5pdC5jOjEzOTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9uaW9zMi9tbS9pbml0LmMtMTQwLXtcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYz05Nzc9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtOTc4LVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYzo5Nzk6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy05ODAte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL21lbS5jPTM5Mj1zdGF0aWMgdm9pZCBwcmVhbGxvY19leGVjbWVtX3BndGFibGUodm9pZCkgeyB9XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmMtMzk0LVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYzozOTU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYy0zOTYte1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM9MTQ0NT1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE0NDYtXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM6MTQ0NzpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ0OC17XFxuLS1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTI5Mz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvczM5MC9tbS9pbml0LmMtMjk0LVxcbmFyY2gvczM5MC9tbS9pbml0LmM6Mjk1OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI5Ni17XFxuLS1cXG5hcmNoL3NwYXJjL21tL2V4ZWNtZW0uYz01PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmMtNi1cXG5hcmNoL3NwYXJjL21tL2V4ZWNtZW0uYzo3OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL3NwYXJjL21tL2V4ZWNtZW0uYy04LXtcXG4tLVxcbmFyY2gveDg2L21tL2luaXQuYz0xMDYwPXZvaWQgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTA2NS1cXG5hcmNoL3g4Ni9tbS9pbml0LmM6MTA2NjpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC94ODYvbW0vaW5pdC5jLTEwNjcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmg9MTE0PXN0cnVjdCBleGVjbWVtX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTE4LS8qKlxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oOjExOTogKiBleGVjbWVtX2FyY2hfc2V0dXAgLSBkZWZpbmUgcGFyYW1ldGVycyBmb3IgYWxsb2NhdGlvbnMgb2YgZXhlY3V0YWJsZSBtZW1vcnlcXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xMjAtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTEzMC0gKi9cXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaDoxMzE6c3RydWN0IGV4ZWNtZW1faW5mbyAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTEzMi1cXG4tLVxcbm1tL2V4ZWNtZW0uYz01Mzc9c3RhdGljIHZvaWQgZXhlY21lbV9pbml0X21pc3Npbmcoc3RydWN0IGV4ZWNtZW1faW5mbyAqaW5mbylcXG4tLVxcbm1tL2V4ZWNtZW0uYy01NTgtXFxubW0vZXhlY21lbS5jOjU1OTpzdHJ1Y3QgZXhlY21lbV9pbmZvICogX193ZWFrIGV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbm1tL2V4ZWNtZW0uYy01NjAte1xcbi0tXFxubW0vZXhlY21lbS5jPTU2ND1zdGF0aWMgdm9pZCBfX2luaXQgX19leGVjbWVtX2luaXQodm9pZClcXG5tbS9leGVjbWVtLmMtNTY1LXtcXG5tbS9leGVjbWVtLmM6NTY2OlxcdHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8gPSBleGVjbWVtX2FyY2hfc2V0dXAoKTtcXG5tbS9leGVjbWVtLmMtNTY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTozNy42NjQxNzQ3OThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NDI4NDk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgeDg2IE1lbW9yeSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgZm9yIHRoaXMsIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gYGFyY2gveDg2L21tL2luaXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQgZm9yIHg4NiBzeXN0ZW1zLCBzbyBpdCdzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gVG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvZGUgYmxvY2sgZWZmaWNpZW50bHksIEknbSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDExMDcuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBhcmVhIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24sIGFuZCBJIGV4cGVjdCBJJ2xsIGJlIGFibGUgdG8gd29yayBvdXR3YXJkcyBmcm9tIHRoZXJlLCBob3BlZnVsbHkgZmluZGluZyB3aGF0IEknbSBsb29raW5nIGZvci4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIxOjQwLjYwODQ2MzEzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0XFx0ZmxhZ3MgPSBFWEVDTUVNX0tBU0FOX1NIQURPVyB8IEVYRUNNRU1fUk9YX0NBQ0hFO1xcbjEwODE6XFx0XFx0fSBlbHNlIHtcXG4xMDgyOlxcdFxcdFxcdHBncHJvdCA9IFBBR0VfS0VSTkVMO1xcbjEwODM6XFx0XFx0XFx0ZmxhZ3MgPSBFWEVDTUVNX0tBU0FOX1NIQURPVztcXG4xMDg0OlxcdFxcdH1cXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0ZXhlY21lbV9pbmZvID0gKHN0cnVjdCBleGVjbWVtX2luZm8pe1xcbjEwODc6XFx0XFx0XFx0LnJhbmdlcyA9IHtcXG4xMDg4OlxcdFxcdFxcdFxcdFtFWEVDTUVNX01PRFVMRV9URVhUXSA9IHtcXG4xMDg5OlxcdFxcdFxcdFxcdFxcdC5mbGFnc1xcdD0gZmxhZ3MsXFxuMTA5MDpcXHRcXHRcXHRcXHRcXHQuc3RhcnRcXHQ9IHN0YXJ0LFxcbjEwOTE6XFx0XFx0XFx0XFx0XFx0LmVuZFxcdD0gTU9EVUxFU19FTkQsXFxuMTA5MjpcXHRcXHRcXHRcXHRcXHQucGdwcm90XFx0PSBwZ3Byb3QsXFxuMTA5MzpcXHRcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbjEwOTQ6XFx0XFx0XFx0XFx0fSxcXG4xMDk1OlxcdFxcdFxcdFxcdFtFWEVDTUVNX0tQUk9CRVNdID0ge1xcbjEwOTY6XFx0XFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBmbGFncyxcXG4xMDk3OlxcdFxcdFxcdFxcdFxcdC5zdGFydFxcdD0gc3RhcnQsXFxuMTA5ODpcXHRcXHRcXHRcXHRcXHQuZW5kXFx0PSBNT0RVTEVTX0VORCxcXG4xMDk5OlxcdFxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IFBBR0VfS0VSTkVMX1JPWCxcXG4xMTAwOlxcdFxcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXFxuMTEwMTpcXHRcXHRcXHRcXHR9LFxcbjExMDI6XFx0XFx0XFx0XFx0W0VYRUNNRU1fRlRSQUNFXSA9IHtcXG4xMTAzOlxcdFxcdFxcdFxcdFxcdC5mbGFnc1xcdD0gZmxhZ3MsXFxuMTEwNDpcXHRcXHRcXHRcXHRcXHQuc3RhcnRcXHQ9IHN0YXJ0LFxcbjExMDU6XFx0XFx0XFx0XFx0XFx0LmVuZFxcdD0gTU9EVUxFU19FTkQsXFxuMTEwNjpcXHRcXHRcXHRcXHRcXHQucGdwcm90XFx0PSBwZ3Byb3QsXFxuMTEwNzpcXHRcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbjExMDg6XFx0XFx0XFx0XFx0fSxcXG4xMTA5OlxcdFxcdFxcdFxcdFtFWEVDTUVNX0JQRl0gPSB7XFxuMTExMDpcXHRcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IGZsYWdzLFxcbjExMTE6XFx0XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4xMTEyOlxcdFxcdFxcdFxcdFxcdC5lbmRcXHQ9IE1PRFVMRVNfRU5ELFxcbjExMTM6XFx0XFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gcGdwcm90LFxcbjExMTQ6XFx0XFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4xMTE1OlxcdFxcdFxcdFxcdH0sXFxuMTExNjpcXHRcXHRcXHRcXHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XFxuMTExNzpcXHRcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxcbjExMTg6XFx0XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4xMTE5OlxcdFxcdFxcdFxcdFxcdC5lbmRcXHQ9IE1PRFVMRVNfRU5ELFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTo0MC42MDg1OTcwMjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1NTg1NTY1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgbW92aW5nIGF3YXkgZnJvbSBoYXJkY29kZWQgbWVtb3J5IGZsYWdzIGFuZCBwYWdlIHByb3RlY3Rpb24gaW4gYGFyY2gveDg2L21tL2luaXQuY2Agd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGBmbGFnc2AgYW5kIGBwZ3Byb3RgIGluIGBFWEVDTUVNX0JQRmAuIFRoaXMgc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZCBtb3JlIGZsZXhpYmxlIGFuZCBwb3RlbnRpYWxseSBzYWZlciBtZW1vcnkgbWFuYWdlbWVudCBmb3IgSklUZWQgQlBGIGNvZGUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgaW5zdGVhZCBvZiBgYnBmX2ppdF9hbGxvY19leGVjYCBhbmQgaXRzIGRlY2xhcmF0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGltcG9ydGFudC5cblxuVGhlIGFkZGl0aW9uIG9mIGBicGZfaml0X21lbV9pc19yb3hgIGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYW5kIGl0cyBpbXBhY3Qgb24gYGFsbG9jX25ld19wYWNrYCBhbmQgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIGlzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbi4gQ2xlYXJseSwgdGhlIGVtcGhhc2lzIGlzIG9uIG1ha2luZyBpdCBST1gtYXdhcmUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBicGZfaml0X21lbV9pc19yb3hgIGNoZWNrLiBUaGlzIGlzIGNlbnRyYWwgdG8gdGhlIHBhdGNoJ3MgcHVycG9zZS5cblxuVGhlIGNoYW5nZSB0byBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIHVzaW5nIGB2bWFsbG9jYCBpbnN0ZWFkIG9mIGBicGZfaml0X2FsbG9jX2V4ZWNgIGZvciBgZC1cdTAwM2Vyd19pbWFnZWAgaXMgYWxzbyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGltcGFjdCBvZiBST1ggbWVtb3J5IGFsbG9jYXRpb24gaXMgYmVpbmcgZmVsdCB0aGUgbW9zdC5cblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIHVzYWdlLiBXYWl0LCBpdCdzIHVzZWQgaW4gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIGFuZCB0aGF0J3MgcmVsYXRlZCB0byBhdHRhY2hpbmcgdHJhbXBvbGluZXMuIFRyYW1wb2xpbmVzIGFyZSBvZnRlbiByZWFkLW9ubHksIG1ha2luZyB0aGlzIGNoYW5nZSB2ZXJ5IGltcG9ydGFudC4gSXQgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGNvbm5lY3Rpb24gYmV0d2VlbiBST1ggYW5kIGF0dGFjaGluZyBCUEYgY29kZSwgYSBjcml0aWNhbCBwYXJ0IG9mIG15IHdvcmsuXG5cblRoZW4gSSBoYXZlIHRvIGNoZWNrIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gSSBzZWUgdGhhdCBpdCBpcyB1c2VkIGluIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2Agd2hpY2ggY29uZmlybXMgbXkgc3VzcGljaW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHN5bWJvbHM6IGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGFsbG9jX25ld19wYWNrYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYW5kIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfQlBGX0pJVGAgZm9yIHN1cmUsIGFuZCBgQ09ORklHX1g4NmAgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjaGFuZ2VzLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHZlcmlmeSBpZiB0aGVyZSdzIGFueSBvdGhlciBjb25maWcgYmVzaWRlcyB0aGVzZS4gQW5kIHllcywgaXQgaXMgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9jdXNlZCBvbiBtZW1vcnkgcHJvdGVjdGlvbiBvZiBKSVRlZCBCUEYgY29kZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVhZC1vbmx5IGV4ZWN1dGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIGZsZXhpYmxlIGFuZCBzYWZlciBhcHByb2FjaCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgaG93IEJQRiBwcm9ncmFtIHBhY2tzIGFyZSBtYW5hZ2VkIGFuZCBKSVRlZC4gVGhlIFJPWCBhc3BlY3QgaXMga2V5IGhlcmUuIEkgd2lsbCBkaXZlIGRlZXBlciBpbnRvIGBicGZfaml0X21lbV9pc19yb3hgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6MDYuMTY3MTU2MDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY0ODcwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29yZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zLWlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Nj1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NzpDRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmVsb19jb3JlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX2l0ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMjowNi40MDM2NTEyOTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNDg5MDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzKipcblxuQWxyaWdodCwgc28gYGNvcmUub2AgaXMgYWx3YXlzIGNvbXBpbGVkLCB0aGF0J3MgYSBnaXZlbi4gQnV0IEknbSBjdXJpb3VzIGFib3V0IHRoZSBjb21waWxhdGlvbiBjb25kaXRpb24gZm9yIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gTXkgaW50dWl0aW9uIHNheXMgaXQncyB0aWVkIHRvIGBDT05GSUdfQlBGX0pJVGAuIEl0J3Mgd29ydGggZGlnZ2luZyBpbnRvIHRoYXQgYCNpZmRlZmAgYmxvY2sgdG8gY29uZmlybS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMgaGVyZSB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgYXZhaWxhYmxlIG9yIGNvbnRpbmdlbnQgb24gYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhbmQgYXZvaWQgYW55IGFzc3VtcHRpb25zLiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6MDkuNDI4NTQ0NjY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc2NjYzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3BhY2tfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9OTI0PXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy05NTUtXFxua2VybmVsL2JwZi9jb3JlLmM6OTU2OnZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sIHdhc19jbGFzc2ljKVxcbmtlcm5lbC9icGYvY29yZS5jLTk1Ny17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xMTk3PWJwZl9qaXRfYmluYXJ5X3BhY2tfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTIxNC1cXHRcXHRyZXR1cm4gTlVMTDtcXG5rZXJuZWwvYnBmL2NvcmUuYzoxMjE1OlxcdHJvX2hlYWRlciA9IGJwZl9wcm9nX3BhY2tfYWxsb2Moc2l6ZSwgYnBmX2ZpbGxfaWxsX2luc25zLCB3YXNfY2xhc3NpYyk7XFxua2VybmVsL2JwZi9jb3JlLmMtMTIxNi1cXHRpZiAoIXJvX2hlYWRlcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMjoxMC43MDUyMTE3NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzUxODQ1NjEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBsYWlkIG91dCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbnRvIHRoZSBjb2RlIGFuZCBrbm93IHRoZSBsYW5kc2NhcGU6XG5cbioqQ2hlY2tpbmcgZm9yIEpJVCBDb21waWxhdGlvbiBTdXBwb3J0IGluIEJQRiBQcm9ncmFtIFBhY2thZ2luZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHByZXR0eSBmdW5kYW1lbnRhbCBoZXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gd2hldGhlciBCUEYgSklUIGNvbXBpbGF0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcG9ydGFiaWxpdHkgYW5kIHRvIGVuc3VyZSB0aGUgY29kZSBiZWhhdmVzIGNvcnJlY3RseSBpbiBkaWZmZXJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZXNzZW50aWFsbHkgZG91YmxlLWNoZWNraW5nIG15IGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgYnVpbGQgc3lzdGVtIHdpbGwgaGFuZGxlIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEknbSBtZW50YWxseSBwYXJzaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYW5kIHRoZSBjb2RlIGl0c2VsZiB0byBzZWUgaWYgaXQncyBwcm90ZWN0ZWQgYnkgdGhlIGAjaWZkZWYgQ09ORklHX0JQRl9KSVRgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIG9yIHNvbWV0aGluZyBsb2dpY2FsbHkgZXF1aXZhbGVudCwgc28gdGhlIGNvZGUgaXMgY29tcGlsZWQsIGFuZCB3b3JraW5nLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgSklUIGlzIGluIHBsYXkuIFRoaXMgaXMganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCBhIHBvdGVudGlhbGx5IG5hc3R5IHN1cnByaXNlIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjI0LjIyMzY3MDc0OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAwOlxcdHN0YXRpYyBERUZJTkVfTVVURVgocGFja19tdXRleCk7XFxuIDkwMTpcXHRzdGF0aWMgTElTVF9IRUFEKHBhY2tfbGlzdCk7XFxuIDkwMjpcXHRcXG4gOTAzOlxcdC8qIFBNRF9TSVpFIGlzIG5vdCBhdmFpbGFibGUgaW4gc29tZSBzcGVjaWFsIGNvbmZpZywgZS5nLiBBUkNIPWFybSB3aXRoXFxuIDkwNDpcXHQgKiBDT05GSUdfTU1VPW4uIFVzZSBQQUdFX1NJWkUgaW4gdGhlc2UgY2FzZXMuXFxuIDkwNTpcXHQgKi9cXG4gOTA2OlxcdCNpZmRlZiBQTURfU0laRVxcbiA5MDc6XFx0LyogUE1EX1NJWkUgaXMgcmVhbGx5IGJpZyBmb3Igc29tZSBhcmNocy4gSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvXFxuIDkwODpcXHQgKiByZXNlcnZlIHRvbyBtdWNoIG1lbW9yeSBpbiBvbmUgYWxsb2NhdGlvbi4gSGFyZGNvZGUgQlBGX1BST0dfUEFDS19TSVpFIHRvXFxuIDkwOTpcXHQgKiAyTWlCICogbnVtX3Bvc3NpYmxlX25vZGVzKCkuIE9uIG1vc3QgYXJjaGl0ZWN0dXJlcyBQTURfU0laRSB3aWxsIGJlXFxuIDkxMDpcXHQgKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMk1CLlxcbiA5MTE6XFx0ICovXFxuIDkxMjpcXHQjZGVmaW5lIEJQRl9QUk9HX1BBQ0tfU0laRSAoU1pfMk0gKiBudW1fcG9zc2libGVfbm9kZXMoKSlcXG4gOTEzOlxcdCNlbHNlXFxuIDkxNDpcXHQjZGVmaW5lIEJQRl9QUk9HX1BBQ0tfU0laRSBQQUdFX1NJWkVcXG4gOTE1OlxcdCNlbmRpZlxcbiA5MTY6XFx0XFxuIDkxNzpcXHQjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxcbiA5MTg6XFx0XFxuIDkxOTpcXHRzdGF0aWMgYm9vbCBicGZfaml0X21lbV9pc19yb3godm9pZClcXG4gOTIwOlxcdHtcXG4gOTIxOlxcdFxcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XFxuIDkyMjpcXHR9XFxuIDkyMzpcXHRcXG4gOTI0OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXFxuIDkyNTpcXHR7XFxuIDkyNjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaztcXG4gOTI3OlxcdFxcdGludCBlcnI7XFxuIDkyODpcXHRcXG4gOTI5OlxcdFxcdHBhY2sgPSBremFsbG9jX2ZsZXgoKnBhY2ssIGJpdG1hcCwgQklUU19UT19MT05HUyhCUEZfUFJPR19DSFVOS19DT1VOVCkpO1xcbiA5MzA6XFx0XFx0aWYgKCFwYWNrKVxcbiA5MzE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDkzMjpcXHRcXHRwYWNrLVxcdTAwM2VwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTtcXG4gOTMzOlxcdFxcdGlmICghcGFjay1cXHUwMDNlcHRyKVxcbiA5MzQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDkzNTpcXHRcXHRiaXRtYXBfemVybyhwYWNrLVxcdTAwM2ViaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpO1xcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXFxuIDkzODpcXHRcXHRcXHRwYWNrLVxcdTAwM2VhcmNoX2ZsdXNoX25lZWRlZCA9IHRydWU7XFxuIDkzOTpcXHRcXHRpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjI0LjIyMzg0MDU0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAzMzA2NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIEJQRiBKSVQgU3VwcG9ydCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZydzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBmdW5kYW1lbnRhbCDigJMgZG9lcyB0aGUgc3lzdGVtIGV2ZW4gKnN1cHBvcnQqIHRoZSBCUEYgSklUPyBJdCdzIGEga2V5IHJlcXVpcmVtZW50LCBvYnZpb3VzbHkuIFNvLCBteSBpbml0aWFsIGNoZWNrIHdpbGwgZGVmaW5pdGVseSBpbnZvbHZlIGxvb2tpbmcgYXQgYENPTkZJR19CUEZfSklUYC4gVGhhdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBlc3NlbnRpYWxseSBlbmFibGVzIHRoZSBqdXN0LWluLXRpbWUgY29tcGlsZXIgZm9yIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgYnl0ZWNvZGUuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQncyBkZWZpbmVkIGFuZCBlbmFibGVkLiBJZiBgQ09ORklHX0JQRl9KSVRgIGlzIG9mZiwgdGhlbiB0aGUgd2hvbGUgYXBwcm9hY2ggaXMgZXNzZW50aWFsbHkgYSBub24tc3RhcnRlciwgYW5kIEknbGwgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgc3RyYXRlZ3kuIE5vIHNlbnNlIGdvaW5nIGZ1cnRoZXIgZG93biB0aGlzIHBhdGggd2l0aG91dCB0aGF0IGNydWNpYWwgZm91bmRhdGlvbi4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGEgZnVuZGFtZW50YWwgZGlhZ25vc3RpYyBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6MjcuMjI3MTQ5NjUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ2NjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NvcmUuYz0xMDA9c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19hbGxvY19ub19zdGF0cyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX2V4dHJhX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTI4LVxcdGZwLVxcdTAwM2VqaXRfcmVxdWVzdGVkID0gZWJwZl9qaXRfZW5hYmxlZCgpO1xcbmtlcm5lbC9icGYvY29yZS5jOjEyOTpcXHRmcC1cXHUwMDNlaml0X3JlcXVpcmVkID0gSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pO1xcbmtlcm5lbC9icGYvY29yZS5jLTEzMC1cXHRmcC1cXHUwMDNlYmxpbmRpbmdfcmVxdWVzdGVkID0gYnBmX2ppdF9ibGluZGluZ19lbmFibGVkKGZwKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTU0MT12b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbF9hbGwoc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTU0Ni1cXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDc6I2lmZGVmIENPTkZJR19CUEZfSklUXFxua2VybmVsL2JwZi9jb3JlLmMtNTQ4LS8qIEFsbCBCUEYgSklUIHN5c2N0bCBrbm9icyBoZXJlLiAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjU0OTppbnQgYnBmX2ppdF9lbmFibGUgICBfX3JlYWRfbW9zdGx5ID0gSVNfQlVJTFRJTihDT05GSUdfQlBGX0pJVF9ERUZBVUxUX09OKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzo1NTA6aW50IGJwZl9qaXRfa2FsbHN5bXMgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XFxua2VybmVsL2JwZi9jb3JlLmMtNTUxLWludCBicGZfaml0X2hhcmRlbiAgIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xNjU1PXUxNiBicGZfb3V0X3N0YWNrX2FyZ19jbnQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTY2My19XFxua2VybmVsL2JwZi9jb3JlLmM6MTY2NDojZW5kaWYgLyogQ09ORklHX0JQRl9KSVQgKi9cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNjY1LVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTgyMz1ib29sIGJwZl9vcGNvZGVfaW5faW5zbnRhYmxlKHU4IGNvZGUpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xODQ1LVxcbmtlcm5lbC9icGYvY29yZS5jOjE4NDY6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL2NvcmUuYy0xODQ3LS8qIEFic29sdXRlIHZhbHVlIG9mIHMzMiB3aXRob3V0IHVuZGVmaW5lZCBiZWhhdmlvciBmb3IgUzMyX01JTiAqL1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjYxMD1zdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2MTItXFx0Ym9vbCBzZWxlY3RfaW50ZXJwcmV0ZXIgPSBmYWxzZTtcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjEzOiNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9jb3JlLmMtMjYxNC1cXHR1MzIgc3RhY2tfZGVwdGggPSBtYXhfdCh1MzIsIGZwLVxcdTAwM2VhdXgtXFx1MDAzZXN0YWNrX2RlcHRoLCAxKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2MzM9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvY29yZS5jLTI2MzQte1xcbmtlcm5lbC9icGYvY29yZS5jOjI2MzU6I2lmZGVmIENPTkZJR19CUEZfSklUXFxua2VybmVsL2JwZi9jb3JlLmMtMjYzNi1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6MjcuMjgzNjIxNDA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mzc2ODk2OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIENvZGUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBicGZfcHJvZ19wYWNrX2FsbG9jYCBpcyBkZWZpbmVkIGF0IGxpbmUgOTU2LiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGZhbGxzIHJpZ2h0IGJldHdlZW4gYCNpZmRlZiBDT05GSUdfQlBGX0pJVGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGAjZW5kaWZgLiBTbywgdGhhdCBzZWVtcyBwcmV0dHkgY2xlYXI6IGBDT05GSUdfQlBGX0pJVGAgKmlzKiByZXF1aXJlZCBmb3IgdGhpcyBzZWN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBhIEpJVCBjb21waWxlciB3b3VsZCBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGNvbXBpbGVkIEJQRiBwcm9ncmFtcy5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNwZWN0cz8gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBgYXJjaC94ODYvbW0vaW5pdC5jYC4gVGhhdCBoaW50cyBhdCB4ODYgZGVwZW5kZW5jaWVzLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBUaGUgKmNvcmUqIG1vZGlmaWNhdGlvbnMgYXJlIGFjdHVhbGx5IGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYW5kIGBrZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY2AuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgQlBGIGxpdmVzLCB0aGUgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIEkgY2FuIGRlZHVjZSB0aGF0IHRoZSBidWxrIG9mIHRoZXNlIGNoYW5nZXMgYXJlIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCBhbmQgd2lsbCBhZmZlY3QgYWxsIHBsYXRmb3Jtcy5cblxuTGV0J3MgZHJpbGwgZG93biBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBpbiBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgIGlzIGltcG9ydGFudC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlcGVuZGVuY2llcy4gVGltZSB0byBnbyBjaGVjayB0aGF0IGNvbmZpZyBzZXR0aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyB0aGVyZS4gSSBzaG91bGQgbG9vayB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6NDEuNjYwNTIwNjkxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzc2MjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNwYXRjaGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTIxPWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMy1pZmVxICgkKENPTkZJR19ORVQpLHkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjQxLjcxODI4ODA3NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc1NTgyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX0pJVGAgaXMgdGhlIGJpZyBvbmUsIG9mIGNvdXJzZS4gQnV0IHdoYXQgZWxzZSBpcyBjcml0aWNhbD8gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHVzdWFsbHkgYSBtdXN0LWhhdmUgZm9yIEJQRiBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfQlBGX0pJVGAgYWxvbmUgaXNuJ3Qgc3VmZmljaWVudC4gQWgsIHJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0IHJlcXVpcmVzIGJvdGggYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgLiBOb3csIGEgcXVpY2sgcmVtaW5kZXI6IGBDT05GSUdfQlBGX0pJVGAgaXRzZWxmIGRlcGVuZHMgb24gZWl0aGVyIGBIQVZFX0NCUEZfSklUYCBvciBgSEFWRV9FQlBGX0pJVGAuXG5cbkFscmlnaHQsIEknbGwga2VlcCBpdCBzaW1wbGUgYW5kIGp1c3QgZm9jdXMgb24gYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGZvciBub3cuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCByZXZpZXcgc29tZSByZWxldmFudCBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY3JpdGljYWwgaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJ20gZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBmb3Igbm93OlxuKiAgIGBicGZfcHJvZ19wYWNrX2FsbG9jYFxuKiAgIGBhbGxvY19uZXdfcGFja2BcbiogICBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgXG4qICAgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWBcbiogICBgYnBmX2ppdF9hbGxvY19leGVjX3J3YFxuXG5MZXQgbWUgZXZhbHVhdGUgbXkgY2FuZGlkYXRlIHN5bWJvbHMuIElzIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGEgZ29vZCBjaG9pY2U/IEl0IGxvb2tzIGxpa2UgaXQncyBhIHJlbGF0aXZlbHkgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGBleGVjbWVtX2FsbG9jX3J3YC4gSXQncyBhIHVzZWZ1bCBzeW1ib2wgYnV0LCBwZXJoYXBzIG5vdCB0aGUgYmVzdCB0byBmb2N1cyBvbi4gSSB0aGluayBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBhIGJldHRlciBmb2N1cyBzeW1ib2wuIGBicGZfcHJvZ19wYWNrX2FsbG9jYCBpcyBhbm90aGVyIHN0cm9uZyBjYW5kaWRhdGUuIEknbGwgaW5jbHVkZSBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIGFzIHdlbGwuXG5cbkp1c3QgdG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCBkZWZpbml0aW9uIGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0IGNvcnJlY3RseSBpbiB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMyMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMjo0Ny40OTM4NzI2MjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFxuMTEyMTpcXHR2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxcbjExMjI6XFx0e1xcbjExMjM6XFx0XFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFxcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xcbjExMjQ6XFx0fVxcbjExMjU6XFx0XFxuMTEyNjpcXHR2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxcbjExMjc6XFx0e1xcbjExMjg6XFx0XFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpO1xcbjExMjk6XFx0fVxcbjExMzA6XFx0XFxuMTEzMTpcXHR2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxcbjExMzI6XFx0e1xcbjExMzM6XFx0XFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xcbjExMzQ6XFx0fVxcbjExMzU6XFx0XFxuMTEzNjpcXHR2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRleGVjbWVtX2ZyZWUoYWRkcik7XFxuMTEzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjQ3LjQ5NDA2OTI4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg3MjYyMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQWxsb2NhdGlvbiBTdHJhdGVneSoqXG5cblJpZ2h0LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgZnVuY3Rpb24uIE5vdGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIGNvbXBsZXguIEhvd2V2ZXIsIGl0J3MgYWx3YXlzIHdvcnRoIGRpZ2dpbmcgZGVlcGVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEJQRi4gVGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgZnVuY3Rpb24uLi4gdGhhdCdzIHdoZXJlIHRoZSByZWFsIGFsbG9jYXRpb24gbWFnaWMgcHJvYmFibHkgcmVzaWRlcy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuIEknbSBndWVzc2luZyB0aGUgaW50cmljYWNpZXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGFsaWdubWVudCwgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gaXNzdWVzLCBhbmQgdGhlIG92ZXJhbGwgZWZmaWNpZW5jeSBvZiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSB3aWxsIGJlY29tZSBjbGVhci4gVGltZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicGZfcHJvZ19wYWNrX2FsbG9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjUwLjE4MTMzNDQzNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdG91dDpcXG4gOTUxOlxcdFxcdGJwZl9qaXRfZnJlZV9leGVjKHBhY2stXFx1MDAzZXB0cik7XFxuIDk1MjpcXHRcXHRrZnJlZShwYWNrKTtcXG4gOTUzOlxcdFxcdHJldHVybiBOVUxMO1xcbiA5NTQ6XFx0fVxcbiA5NTU6XFx0XFxuIDk1NjpcXHR2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcXG4gOTU3OlxcdHtcXG4gOTU4OlxcdFxcdHVuc2lnbmVkIGludCBuYml0cyA9IEJQRl9QUk9HX1NJWkVfVE9fTkJJVFMoc2l6ZSk7XFxuIDk1OTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaywgKmZhbGxiYWNrX3BhY2sgPSBOVUxMO1xcbiA5NjA6XFx0XFx0dW5zaWduZWQgbG9uZyBwb3MsIGZhbGxiYWNrX3BvcyA9IDA7XFxuIDk2MTpcXHRcXHR2b2lkICpwdHIgPSBOVUxMO1xcbiA5NjI6XFx0XFxuIDk2MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwYWNrX211dGV4KTtcXG4gOTY0OlxcdFxcdGlmIChzaXplIFxcdTAwM2UgQlBGX1BST0dfUEFDS19TSVpFKSB7XFxuIDk2NTpcXHRcXHRcXHQvKlxcbiA5NjY6XFx0XFx0XFx0ICogQWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gYSBwYWNrIGdldCB0aGVpciBvd24gcGFnZXMsIGFuZFxcbiA5Njc6XFx0XFx0XFx0ICogcHJlZGljdG9ycyBhcmUgbm90IGZsdXNoZWQgZm9yIHN1Y2ggYWxsb2NhdGlvbi4gVGhpcyBpcyBvbmx5XFxuIDk2ODpcXHRcXHRcXHQgKiBzYWZlIGJlY2F1c2UgY0JQRiBwcm9ncmFtcyAodGhlIHVucHJpdmlsZWdlZCBhdHRhY2sgc3VyZmFjZSlcXG4gOTY5OlxcdFxcdFxcdCAqIGFyZSBib3VuZGVkIHdlbGwgYmVsb3cgYSBwYWNrIHNpemUuXFxuIDk3MDpcXHRcXHRcXHQgKi9cXG4gOTcxOlxcdFxcdFxcdGlmICh3YXNfY2xhc3NpYyBcXHUwMDI2XFx1MDAyNiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZicGZfcHJlZF9mbHVzaF9lbmFibGVkKSlcXG4gOTcyOlxcdFxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiQlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXFxcXG5cXFwiKTtcXG4gOTczOlxcdFxcdFxcdHNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpO1xcbiA5NzQ6XFx0XFx0XFx0cHRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xcbiA5NzU6XFx0XFx0XFx0aWYgKHB0ciBcXHUwMDI2XFx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcXG4gOTc2OlxcdFxcdFxcdFxcdGludCBlcnI7XFxuIDk3NzpcXHRcXG4gOTc4OlxcdFxcdFxcdFxcdGJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpO1xcbiA5Nzk6XFx0XFx0XFx0XFx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHB0cik7XFxuIDk4MDpcXHRcXHRcXHRcXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwdHIsXFxuIDk4MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemUgLyBQQUdFX1NJWkUpO1xcbiA5ODI6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbiA5ODM6XFx0XFx0XFx0XFx0XFx0YnBmX2ppdF9mcmVlX2V4ZWMocHRyKTtcXG4gOTg0OlxcdFxcdFxcdFxcdFxcdHB0ciA9IE5VTEw7XFxuIDk4NTpcXHRcXHRcXHRcXHR9XFxuIDk4NjpcXHRcXHRcXHR9XFxuIDk4NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTg4OlxcdFxcdH1cXG4gOTg5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGFjaywgXFx1MDAyNnBhY2tfbGlzdCwgbGlzdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMjo1MC4xODE1MTY1MzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MTE4ODM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJwZl9wcm9nX3BhY2tfYWxsb2MgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJwZl9wcm9nX3BhY2tfYWxsb2NgLiBUaGUgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiBoZXJlIGlzIHJpZ2h0IGluIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6XG5cbmBgYGNcbi1cdFx0aWYgKHB0cikge1xuK1x0XHRpZiAocHRyIFx1MDAyNlx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgdGhlIGNvZGUgaXMgbm93IGNoZWNraW5nIGlmIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IChgcHRyYCkgaXMgKm5vdCogYWxyZWFkeSByZWFkLW9ubHksIGJlZm9yZSBhdHRlbXB0aW5nIHRvIG1hcmsgaXQgYXMgc3VjaC4gVGhpcyBpcyBhIGNsZXZlciBvcHRpbWl6YXRpb24uIEJlZm9yZSwgd2Ugd2VyZSBibGluZGx5IGNhbGxpbmcgYHNldF9tZW1vcnlfcm94YCBvbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgYnV0IGlmIGl0IHdhcyBhbHJlYWR5IFJPWCwgdGhpcyB3YXMgYW4gdW5uZWNlc3Nhcnkgb3BlcmF0aW9uLiBUaGlzIG1lYW5zIHdlJ3JlIGF2b2lkaW5nIGEgcmVkdW5kYW50IGBzZXRfbWVtb3J5X3JveGAgY2FsbC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IGltcGFjdHMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gYW5kIHNlZSBob3cgdGhpcyBtaWdodCBhZmZlY3QgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYC4gSSBuZWVkIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkb3duc3RyZWFtIGVmZmVjdHMgb2YgdGhpcyBvcHRpbWl6YXRpb24gb24gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0J3MgZGVwZW5kZW50IG9uIHRoZSBvcmlnaW5hbCBiZWhhdmlvciBvciBpZiBpdCdzIHJvYnVzdCB0byB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMwOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6NTMuNjYyNzA3ODg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzcGF0Y2hlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRpZiAobmV3KVxcbiAxMzQ6XFx0XFx0XFx0ZC1cXHUwMDNlaW1hZ2Vfb2ZmID0gbm9mZjtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0dm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcXG4gMTM4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqdG8pXFxuIDEzOTpcXHR7XFxuIDE0MDpcXHRcXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4gMTQxOlxcdFxcdGludCBwcmV2X251bV9wcm9ncztcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0aWYgKGZyb20gPT0gdG8pXFxuIDE0NDpcXHRcXHRcXHRyZXR1cm47XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmQtXFx1MDAzZW11dGV4KTtcXG4gMTQ3OlxcdFxcdGlmICghZC1cXHUwMDNlaW1hZ2UpIHtcXG4gMTQ4OlxcdFxcdFxcdGQtXFx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xcbiAxNDk6XFx0XFx0XFx0aWYgKCFkLVxcdTAwM2VpbWFnZSlcXG4gMTUwOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNTE6XFx0XFx0XFx0LyogZC1cXHUwMDNlcndfaW1hZ2UgZG9lc24ndCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlXFxuIDE1MjpcXHRcXHRcXHQgKiBjYW4gdXNlIHZtYWxsb2MuXFxuIDE1MzpcXHRcXHRcXHQgKi9cXG4gMTU0OlxcdFxcdFxcdGQtXFx1MDAzZXJ3X2ltYWdlID0gdm1hbGxvYyhQQUdFX1NJWkUpO1xcbiAxNTU6XFx0XFx0XFx0aWYgKCFkLVxcdTAwM2Vyd19pbWFnZSkge1xcbiAxNTY6XFx0XFx0XFx0XFx0YnBmX3Byb2dfcGFja19mcmVlKGQtXFx1MDAzZWltYWdlLCBQQUdFX1NJWkUpO1xcbiAxNTc6XFx0XFx0XFx0XFx0ZC1cXHUwMDNlaW1hZ2UgPSBOVUxMO1xcbiAxNTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE1OTpcXHRcXHRcXHR9XFxuIDE2MDpcXHRcXHRcXHRicGZfaW1hZ2Vfa3N5bV9pbml0KGQtXFx1MDAzZWltYWdlLCBQQUdFX1NJWkUsIFxcdTAwMjZkLVxcdTAwM2Vrc3ltKTtcXG4gMTYxOlxcdFxcdFxcdGJwZl9pbWFnZV9rc3ltX2FkZChcXHUwMDI2ZC1cXHUwMDNla3N5bSk7XFxuIDE2MjpcXHRcXHR9XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHByZXZfbnVtX3Byb2dzID0gZC1cXHUwMDNlbnVtX3Byb2dzO1xcbiAxNjU6XFx0XFx0Y2hhbmdlZCB8PSBicGZfZGlzcGF0Y2hlcl9yZW1vdmVfcHJvZyhkLCBmcm9tKTtcXG4gMTY2OlxcdFxcdGNoYW5nZWQgfD0gYnBmX2Rpc3BhdGNoZXJfYWRkX3Byb2coZCwgdG8pO1xcbiAxNjc6XFx0XFxuIDE2ODpcXHRcXHRpZiAoIWNoYW5nZWQpXFxuIDE2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6NTMuNjYyNzc3OTg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2ODM3MTcwMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0aGF0J3MgcHJldHR5IGtleSwgYW5kIGl0IHJlYWxseSB3YXJyYW50cyBhIHRob3JvdWdoIGdvaW5nLW92ZXIuIEl0J3MgdG91Y2hpbmcgdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRoZSBkaXNwYXRjaGVyJ3MgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lLCB3aGljaCBpcyBhbHdheXMgYSBwbGFjZSB0aGF0IGRlc2VydmVzIGV4dHJhIGF0dGVudGlvbi5cblxuU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgYWx0ZXJpbmcgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIG1hbmFnZWQgZm9yIEJQRiBKSVQgZXhlY3V0aW9uLiBJIHNlZSBjaGFuZ2VzIHRvIGBicGZfaml0X2FsbG9jX2V4ZWNgLCByZW5hbWVkIHRvIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgLCBpbiB0aGUgeDg2LXNwZWNpZmljIHRyYW1wb2xpbmUgc2l6ZSBjYWxjdWxhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIG5vdyBwcmVzZW50IGluIHRoZSBnZW5lcmFsIEJQRiBjb3JlIGNvZGUuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhbGxvY19uZXdfcGFja2AgYW5kIGBicGZfcHJvZ19wYWNrX2FsbG9jYCB0byBpbmNsdWRlIGNoZWNrcyB0byBwcmV2ZW50IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGZyb20gYmVpbmcgdXNlZCBhbmQgdG8gc2V0IG1lbW9yeSB0byBST1ggKFJlYWQgT25seSBlWGVjdXRlKS4gTW9zdCBub3RhYmx5LCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIG5vdyB1c2VzIGB2bWFsbG9jYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBtZW1vcnkgYWxsb2NhdGlvbi5cblxuSSdtIHRoaW5raW5nIHRoaXMgbGlrZWx5IGltcGFjdHMgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkLCBzbyB0aG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgaG90IHNwb3RzLiBJdCBhbHNvIGNoYW5nZXMgYGFyY2gveDg2L21tL2luaXQuY2Agd2l0aCByZWdhcmRzIHRvIG1lbW9yeSBmbGFncy5cblxuR2l2ZW4gdGhlIHNjb3BlLCBJIGltbWVkaWF0ZWx5IGZsYWdnZWQgdGhpcyBhcyBcIldvcnRoRnV6emluZ1wiLiBUaGVzZSBraW5kcyBvZiBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljIGFyZSB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgY2FuIGhpZGUuXG5cbk15IGtleSBmb2N1cyBhcmVhcyBmb3IgYW5hbHlzaXMgYXJlIGdvaW5nIHRvIGJlIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgKHNpbmNlIGl0J3MgeDg2LXNwZWNpZmljKSwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGFuZCBgYWxsb2NfbmV3X3BhY2tgLiBJJ20gcmVhbGx5IGN1cmlvdXMgaG93IHRob3NlIGNoYW5nZXMgYWZmZWN0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBwcm9ncmFtIHBhY2tpbmcuXG5cbkknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyBlbmFibGVkLCBhcyB0aGF0IHNlZW1zIGVzc2VudGlhbCBmb3IgdGhpcyBwYXRjaCwgYW5kIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgcHJvYmFibHkgbmVjZXNzYXJ5IGZvciBCUEYgZnVuY3Rpb25hbGl0eSBpbiBnZW5lcmFsLiBBZnRlciBhIHF1aWNrIGNoZWNrLCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX0pJVGAgaXMgaW5kZWVkIGEgaGFyZCByZXF1aXJlbWVudCwgd2hpY2ggSSBjb25maXJtZWQgd2l0aCB0aGUgYnVpbGQgZGlyZWN0aXZlcyBpbiB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlxuXG5NeSBzdHJhdGVneSB3aWxsIGJlIHRvIGRpdmUgaW50byB0aG9zZSBmb2N1cyBmdW5jdGlvbnMsIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGFuZCBST1ggbWVtb3J5IGhhbmRsaW5nIHdvcmsgYXMgZXhwZWN0ZWQgYW5kIHRoYXQgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgc2lkZS1jaGFubmVsIGlzc3Vlcy4gSSdsbCBuZWVkIHRvIHRob3JvdWdobHkgZnV6eiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcwMywiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMzoyMC40OTk5NTAwODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQ0NDkxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ1wiLFxuICAgIFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCIsXG4gICAgXCJicGZfaml0X2FsbG9jX2V4ZWNfcndcIixcbiAgICBcImFsbG9jX25ld19wYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcGFja19hbGxvY1wiLFxuICAgIFwiYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dcIixcbiAgICBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiLFxuICAgIFwiYnBmX2ppdF9hbGxvY19leGVjX3J3XCIsXG4gICAgXCJhbGxvY19uZXdfcGFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24sIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCBjaGFuZ2luZyBob3cgQlBGIHByb2dyYW0gcGFja3MgYW5kIGRpc3BhdGNoZXJzIGFsbG9jYXRlIG1lbW9yeS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdhkvq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 03:05:23 +0000 UTC FinishedAt: 2026-07-12 03:23:22 +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": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "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": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "4acf8445-0d65-412b-beb9-aacf97f0fdf9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_prog_pack_alloc", "bpf_dispatcher_change_prog", "arch_bpf_trampoline_size", "bpf_jit_alloc_exec_rw", "alloc_new_pack" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDssCiAgICAmIzM0O2FyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2FsbG9jX2V4ZWNfcncmIzM0OywKICAgICYjMzQ7YWxsb2NfbmV3X3BhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODVjNmU1ZTNhMDQ3OTFlNDg0YjAxZDhkNTk5ODM0NDNiNmM5OGE2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDAzOjIwOjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuY1xuaW5kZXggZmI2NzIxN2ZkZGNkMzcuLjA3OWY4YzdlOWUzY2RlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9pbml0LmNcbkBAIC0xMTA3LDEwICYjNDM7MTEwNywxMCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuIFx0XHRcdH0sXG4gXHRcdFx0W0VYRUNNRU1fQlBGXSA9IHtcbi1cdFx0XHRcdC5mbGFnc1x0PSBFWEVDTUVNX0tBU0FOX1NIQURPVyxcbiYjNDM7XHRcdFx0XHQuZmxhZ3NcdD0gZmxhZ3MsXG4gXHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4gXHRcdFx0XHQuZW5kXHQ9IE1PRFVMRVNfRU5ELFxuLVx0XHRcdFx0LnBncHJvdFx0PSBQQUdFX0tFUk5FTCxcbiYjNDM7XHRcdFx0XHQucGdwcm90XHQ9IHBncHJvdCxcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4gXHRcdFx0fSxcbiBcdFx0XHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uYjJmZWVjODFlMjMxMmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTM3MDMsMTMgJiM0MzszNzAzLDEyIEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxuLVx0ICogVGhpcyB3aWxsIE5PVCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIGRpcmVjdCBtYXAsIGFzIHdlIGRvIG5vdFxuLVx0ICogY2FsbCBzZXRfbWVtb3J5XyooKSBvbiB0aGlzIGJ1ZmZlci5cbiBcdCAqXG4gXHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxuIFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbiYjNDM7XHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS5cbiBcdCAqL1xuLVx0aW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWMoUEFHRV9TSVpFKTtcbiYjNDM7XHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xuIFx0aWYgKCFpbWFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4zMmQ1Mjk3YzU1N2U1YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMzMzLDYgJiM0MzsxMzMzLDcgQEAgYnBmX2ppdF9iaW5hcnlfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxuIHZvaWQgYnBmX2ppdF9iaW5hcnlfZnJlZShzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhkcik7XG4gdTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKTtcbiB2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcbiYjNDM7dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gdm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKTtcbiB2b2lkIGJwZl9qaXRfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKTtcbiBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li5lMjA3NjY2N2IyNDUxNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuY1xuQEAgLTkxNiw2ICYjNDM7OTE2LDExIEBAIHN0YXRpYyBMSVNUX0hFQUQocGFja19saXN0KTtcbiBcbiAjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxuIFxuJiM0MztzdGF0aWMgYm9vbCBicGZfaml0X21lbV9pc19yb3godm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaztcbkBAIC05MjcsMTYgJiM0Mzs5MzIsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNcbiBcdHBhY2stXHUwMDNlcHRyID0gYnBmX2ppdF9hbGxvY19leGVjKEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4gXHRpZiAoIXBhY2stXHUwMDNlcHRyKVxuIFx0XHRnb3RvIG91dDtcbi1cdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcbiBcdGJpdG1hcF96ZXJvKHBhY2stXHUwMDNlYml0bWFwLCBCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKTtcbiBcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmJwZl9wcmVkX2ZsdXNoX2VuYWJsZWQpKVxuIFx0XHRwYWNrLVx1MDAzZWFyY2hfZmx1c2hfbmVlZGVkID0gdHJ1ZTtcbi1cdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVx1MDAzZXB0cik7XG4tXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVx1MDAzZXB0cixcbi1cdFx0XHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XG4mIzQzO1x0XHRicGZfZmlsbF9pbGxfaW5zbnMocGFjay1cdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4mIzQzO1x0XHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cdTAwM2VwdHIpO1xuJiM0MztcdFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cdTAwM2VwdHIsXG4mIzQzO1x0XHRcdFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwYWNrLVx1MDAzZWxpc3QsIFx1MDAyNnBhY2tfbGlzdCk7XG4gXHRyZXR1cm4gcGFjaztcbiBcbkBAIC05NjUsNyAmIzQzOzk3Miw3IEBAIHZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sXG4gXHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O0JQRjogUHJlZGljdG9ycyBub3QgZmx1c2hlZCBmb3IgYWxsb2NhdGlvbnMgZ3JlYXRlciB0aGFuIEJQRl9QUk9HX1BBQ0tfU0laRVxcblwmIzM0Oyk7XG4gXHRcdHNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpO1xuIFx0XHRwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoc2l6ZSk7XG4tXHRcdGlmIChwdHIpIHtcbiYjNDM7XHRcdGlmIChwdHIgXHUwMDI2XHUwMDI2ICFicGZfaml0X21lbV9pc19yb3goKSkge1xuIFx0XHRcdGludCBlcnI7XG4gXG4gXHRcdFx0YnBmX2ZpbGxfaWxsX2luc25zKHB0ciwgc2l6ZSk7XG5AQCAtMTExNiwxMiAmIzQzOzExMjMsMTcgQEAgdm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcbiBcdGF0b21pY19sb25nX3N1YihzaXplLCBcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xuIH1cbiBcbi12b2lkICpfX3dlYWsgYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gZXhlY21lbV9hbGxvYyhFWEVDTUVNX0JQRiwgc2l6ZSk7XG4gfVxuIFxuLXZvaWQgX193ZWFrIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXG4mIzQzO3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZXhlY21lbV9hbGxvY19ydyhFWEVDTUVNX0JQRiwgc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcilcbiB7XG4gXHRleGVjbWVtX2ZyZWUoYWRkcik7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jIGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcbmluZGV4IGVhMmQ2MGRjMWZlZWI3Li5kODViM2U4YWQyZTRlZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xuQEAgLTE0OCw3ICYjNDM7MTQ4LDEwIEBAIHZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXG4gXHRcdGQtXHUwMDNlaW1hZ2UgPSBicGZfcHJvZ19wYWNrX2FsbG9jKFBBR0VfU0laRSwgYnBmX2ppdF9maWxsX2hvbGVfd2l0aF96ZXJvLCBmYWxzZSk7XG4gXHRcdGlmICghZC1cdTAwM2VpbWFnZSlcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xuJiM0MztcdFx0LyogZC1cdTAwM2Vyd19pbWFnZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlXG4mIzQzO1x0XHQgKiBjYW4gdXNlIHZtYWxsb2MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGQtXHUwMDNlcndfaW1hZ2UgPSB2bWFsbG9jKFBBR0VfU0laRSk7XG4gXHRcdGlmICghZC1cdTAwM2Vyd19pbWFnZSkge1xuIFx0XHRcdGJwZl9wcm9nX3BhY2tfZnJlZShkLVx1MDAzZWltYWdlLCBQQUdFX1NJWkUpO1xuIFx0XHRcdGQtXHUwMDNlaW1hZ2UgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDssCiAgICAmIzM0O2FyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2FsbG9jX2V4ZWNfcncmIzM0OywKICAgICYjMzQ7YWxsb2NfbmV3X3BhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NWM2ZTVlM2EwNDc5MWU0ODRiMDFkOGQ1OTk4MzQ0M2I2Yzk4YTZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMTIgMDM6MjA6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggZmI2NzIxN2ZkZGNkMzcuLjA3OWY4YzdlOWUzY2RlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC0xMTA3LDEwICYjNDM7MTEwNywxMCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpCiAJCQkJLmFsaWdubWVudCA9IE1PRFVMRV9BTElHTiwKIAkJCX0sCiAJCQlbRVhFQ01FTV9CUEZdID0gewotCQkJCS5mbGFncwk9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLAomIzQzOwkJCQkuZmxhZ3MJPSBmbGFncywKIAkJCQkuc3RhcnQJPSBzdGFydCwKIAkJCQkuZW5kCT0gTU9EVUxFU19FTkQsCi0JCQkJLnBncHJvdAk9IFBBR0VfS0VSTkVMLAomIzQzOwkJCQkucGdwcm90CT0gcGdwcm90LAogCQkJCS5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sCiAJCQl9LAogCQkJW0VYRUNNRU1fTU9EVUxFX0RBVEFdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGRlNzUxNWVhMWJlYWU4Li5iMmZlZWM4MWUyMzEyZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMzcwMywxMyAmIzQzOzM3MDMsMTIgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncywKIAlpbnQgcmV0OwogCiAJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLgotCSAqIFRoaXMgd2lsbCBOT1QgY2F1c2UgZnJhZ21lbnRhdGlvbiBpbiBkaXJlY3QgbWFwLCBhcyB3ZSBkbyBub3QKLQkgKiBjYWxsIHNldF9tZW1vcnlfKigpIG9uIHRoaXMgYnVmZmVyLgogCSAqCiAJICogV2UgY2Fubm90IHVzZSBrdm1hbGxvYyBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaW1hZ2UgdG8gYmUgaW4KIAkgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLgomIzQzOwkgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS4KIAkgKi8KLQlpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpOwomIzQzOwlpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpOwogCWlmICghaW1hZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaAppbmRleCAxNGFjYjI0NTU3NDZmYy4uMzJkNTI5N2M1NTdlNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTMzMyw2ICYjNDM7MTMzMyw3IEBAIGJwZl9qaXRfYmluYXJ5X2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0ciwKIHZvaWQgYnBmX2ppdF9iaW5hcnlfZnJlZShzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhkcik7CiB1NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpOwogdm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiYjNDM7dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiB2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpOwogdm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpmcCk7CiBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuYwppbmRleCA0N2ZlMDQ3YWQzMGI4OC4uZTIwNzY2NjdiMjQ1MTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jCkBAIC05MTYsNiAmIzQzOzkxNiwxMSBAQCBzdGF0aWMgTElTVF9IRUFEKHBhY2tfbGlzdCk7CiAKICNkZWZpbmUgQlBGX1BST0dfQ0hVTktfQ09VTlQgKEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpCiAKJiM0MztzdGF0aWMgYm9vbCBicGZfaml0X21lbV9pc19yb3godm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucykKIHsKIAlzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjazsKQEAgLTkyNywxNiAmIzQzOzkzMiwxOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2lucwogCXBhY2stJmd0O3B0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhCUEZfUFJPR19QQUNLX1NJWkUpOwogCWlmICghcGFjay0mZ3Q7cHRyKQogCQlnb3RvIG91dDsKLQlicGZfZmlsbF9pbGxfaW5zbnMocGFjay0mZ3Q7cHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpOwogCWJpdG1hcF96ZXJvKHBhY2stJmd0O2JpdG1hcCwgQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSk7CiAKIAlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2JwZl9wcmVkX2ZsdXNoX2VuYWJsZWQpKQogCQlwYWNrLSZndDthcmNoX2ZsdXNoX25lZWRlZCA9IHRydWU7Ci0Jc2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stJmd0O3B0cik7Ci0JZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay0mZ3Q7cHRyLAotCQkJICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7CiYjNDM7CQlicGZfZmlsbF9pbGxfaW5zbnMocGFjay0mZ3Q7cHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpOwomIzQzOwkJc2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stJmd0O3B0cik7CiYjNDM7CQllcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLSZndDtwdHIsCiYjNDM7CQkJCSAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KIAlsaXN0X2FkZF90YWlsKCZhbXA7cGFjay0mZ3Q7bGlzdCwgJmFtcDtwYWNrX2xpc3QpOwogCXJldHVybiBwYWNrOwogCkBAIC05NjUsNyAmIzQzOzk3Miw3IEBAIHZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sCiAJCQlwcl93YXJuX29uY2UoJiMzNDtCUEY6IFByZWRpY3RvcnMgbm90IGZsdXNoZWQgZm9yIGFsbG9jYXRpb25zIGdyZWF0ZXIgdGhhbiBCUEZfUFJPR19QQUNLX1NJWkVcbiYjMzQ7KTsKIAkJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CiAJCXB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhzaXplKTsKLQkJaWYgKHB0cikgewomIzQzOwkJaWYgKHB0ciAmYW1wOyZhbXA7ICFicGZfaml0X21lbV9pc19yb3goKSkgewogCQkJaW50IGVycjsKIAogCQkJYnBmX2ZpbGxfaWxsX2luc25zKHB0ciwgc2l6ZSk7CkBAIC0xMTE2LDEyICYjNDM7MTEyMywxNyBAQCB2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKQogCWF0b21pY19sb25nX3N1YihzaXplLCAmYW1wO2JwZl9qaXRfY3VycmVudCk7CiB9CiAKLXZvaWQgKl9fd2VhayBicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJcmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpOwogfQogCi12b2lkIF9fd2VhayBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKQomIzQzO3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXhlY21lbV9hbGxvY19ydyhFWEVDTUVNX0JQRiwgc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcikKIHsKIAlleGVjbWVtX2ZyZWUoYWRkcik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jCmluZGV4IGVhMmQ2MGRjMWZlZWI3Li5kODViM2U4YWQyZTRlZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMKQEAgLTE0OCw3ICYjNDM7MTQ4LDEwIEBAIHZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sCiAJCWQtJmd0O2ltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpOwogCQlpZiAoIWQtJmd0O2ltYWdlKQogCQkJZ290byBvdXQ7Ci0JCWQtJmd0O3J3X2ltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7CiYjNDM7CQkvKiBkLSZndDtyd19pbWFnZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlCiYjNDM7CQkgKiBjYW4gdXNlIHZtYWxsb2MuCiYjNDM7CQkgKi8KJiM0MzsJCWQtJmd0O3J3X2ltYWdlID0gdm1hbGxvYyhQQUdFX1NJWkUpOwogCQlpZiAoIWQtJmd0O3J3X2ltYWdlKSB7CiAJCQlicGZfcHJvZ19wYWNrX2ZyZWUoZC0mZ3Q7aW1hZ2UsIFBBR0VfU0laRSk7CiAJCQlkLSZndDtpbWFnZSA9IE5VTEw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MzUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEpJVCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gaG93IHRoZSBCUEYgSklUIG1lbW9yeSBhbGxvY2F0aW9uIHdvcmtzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBzd2FwcGluZyBvdXQgdGhlIGN1cnJlbnQgYGJwZl9qaXRfYWxsb2NfZXhlY2Agd2l0aCBlaXRoZXIgYGV4ZWNtZW1fYWxsb2NgIG9yIHRoZSBuZXcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIHdoaWNoIHRoZW4gdXNlcyBgZXhlY21lbV9hbGxvY19yd2AuIFNlZW1zIGxpa2UgYSBtb3ZlIHRvd2FyZCBtb3JlIGNvbnRyb2wgb3IgZmxleGliaWxpdHkgaW4gaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIG1lbW9yeSByZWdpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9tbS9pbml0LmNgIHdpdGggdGhlIGBFWEVDTUVNX0JQRmAgZmxhZ3MgYW5kIGBwZ3Byb3RgLiBUaGUgY2hlY2sgaW4gYGtlcm5lbC9icGYvY29yZS5jYCBmb3IgYGJwZl9qaXRfbWVtX2lzX3JveCgpYCBhbmQgdGhlIGNvbmRpdGlvbmFsIGBzZXRfbWVtb3J5X3JveGAgc3VnZ2VzdHMgd2UmIzM5O3JlIGdldHRpbmcgc21hcnRlciBhYm91dCByZWFkLW9ubHkgbWVtb3J5IHJlZ2lvbnMsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNhbGxzLiBBbmQgdGhlIGNoYW5nZSB0byB1c2UgYHZtYWxsb2NgIGluIGBrZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY2AgZm9yIGBkLSZndDtyd19pbWFnZWAgaXMgaW50ZXJlc3RpbmcuCgpGdW5jdGlvbmFsbHksIHRoaXMgbWVhbnMgd2UmIzM5O3ZlIGNoYW5nZWQgaG93IEJQRiBKSVQgYW5kIGV4ZWNtZW0gYmVoYXZlLiBGcm9tIGFuIGFuYWx5c2lzIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGFjdHVhbGx5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aCBhbmQgaWYgaXQmIzM5O3MgZnV6emFibGUuIEJQRiBKSVQgKmlzKiBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgaW50byBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGludG8gdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgZm9jdXNpbmcgb24gcmVhY2hhYmlsaXR5IGFuZCBmdXp6aW5nOiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLCBgYnBmX2ppdF9hbGxvY19leGVjYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYW5kIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIHBhdGguIGBDT05GSUdfQlBGX0pJVGAgaXMgYSBtdXN0LCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYW5vdGhlciBvYnZpb3VzIG9uZS4gU2luY2UgaXQmIzM5O3MgdG91Y2hpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIEkmIzM5O2xsIGFkZCBgQ09ORklHX1g4NmAgdG8gdGhlIGxpc3QuCgpJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXhpc3RpbmcgdG9vbGluZyB0byB2ZXJpZnkgdGhlc2UgYXNzdW1wdGlvbnMgYW5kIHJlYWNoYWJpbGl0eSBwYXRocy4gVGltZSB0byBmaXJlIGl0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfYWxsb2NfZXhlY19ydyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY5OD1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzA4LVx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzA5Olx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxMC1cdCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3MTE6XHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MTItXHRpZiAoIWltYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTMzNT12b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTMzNjp2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTMzNy12b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTExMjY9dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xMTMwLVxua2VybmVsL2JwZi9jb3JlLmM6MTEzMTp2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxua2VybmVsL2JwZi9jb3JlLmMtMTEzMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IEJQRiBDb2RlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmb2N1cyBvZiB0aGUgbW9kaWZpY2F0aW9uIGNlbnRlcnMgYXJvdW5kIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgd2l0aGluIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHN1YnN5c3RlbS4gVGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGFyZTogYGJwZl9wcm9nX3BhY2tfYWxsb2NgLCBgYWxsb2NfbmV3X3BhY2tgLCBgYnBmX2ppdF9hbGxvY19leGVjYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AsIGFuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBkaXZlcnNlIHNldCwgc3Bhbm5pbmcgcGFjayBhbGxvY2F0aW9uLCBKSVQgbWVtb3J5IGFsbG9jYXRpb24gKGJvdGggcmVhZC1vbmx5IGFuZCByZWFkLXdyaXRlIHJlZ2lvbnMsIHByZXN1bWFibHkpLCBkaXNwYXRjaGVyIGNoYW5nZXMsIGFuZCBwb3RlbnRpYWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgd2l0aCB0aGUgdHJhbXBvbGluZSBzaXplLgoKTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9jb3JlLmNgIGFuZCBzdGFydCB3aXRoIHRoZSBgYnBmX3Byb2dfcGFja19hbGxvY2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFyY2hpbmcgc3RyYXRlZ3kgYmVpbmcgaW1wbGVtZW50ZWQgaGVyZS4gRnJvbSB0aGVyZSwgSSBleHBlY3QgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXJzLiBUaGUgSklUIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFyZSBjbGVhcmx5IGltcG9ydGFudCBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIFRoZSBkaXNwYXRjaGVyIGNoYW5nZSBoaW50cyBhdCBwb3RlbnRpYWxseSBuZXcgcHJvZ3JhbSBkaXNwYXRjaGluZyBzdHJhdGVnaWVzLCBhbmQgdGhlIHRyYW1wb2xpbmUgc2l6ZSBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBKSVQgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSByZWFkL3dyaXRlIGFzcGVjdCwgYW5kIGl0cyBpbXBhY3Qgb24gc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI4NzE9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI4NzIte1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjg3MzpcdHJldHVybiBicGZfcHJvZ19wYWNrX2FsbG9jKHNpemUsIGppdF9maWxsX2hvbGUsIGZhbHNlKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI4NzQtfVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTc5MT12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzkyLXtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTc5MzpcdHJldHVybiBicGZfcHJvZ19wYWNrX2FsbG9jKHNpemUsIGppdF9maWxsX2hvbGUsIGZhbHNlKTtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTc5NC19XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz01ODk9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTkwLXtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTkxOlx0cmV0dXJuIGJwZl9wcm9nX3BhY2tfYWxsb2Moc2l6ZSwgYnBmX2ppdF9maWxsX2lsbF9pbnNucywgZmFsc2UpO1xuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy01OTItfVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyMj12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzIzLXtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMyNDpcdHJldHVybiBicGZfcHJvZ19wYWNrX2FsbG9jKHNpemUsIGJwZl9maWxsX2lsbF9pbnNucywgZmFsc2UpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzI1LX1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY1ND12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NTUte1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2NTY6XHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1Ny19XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMzQwPWJwZl9qaXRfYmluYXJ5X3BhY2tfaGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzQxLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMzQyOnZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sIHdhc19jbGFzc2ljKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTM0My12b2lkIGJwZl9wcm9nX3BhY2tfZnJlZSh2b2lkICpwdHIsIHUzMiBzaXplKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz05MjQ9c3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy05NTUtXG5rZXJuZWwvYnBmL2NvcmUuYzo5NTY6dm9pZCAqYnBmX3Byb2dfcGFja19hbGxvYyh1MzIgc2l6ZSwgYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMsIGJvb2wgd2FzX2NsYXNzaWMpXG5rZXJuZWwvYnBmL2NvcmUuYy05NTcte1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTExOTc9YnBmX2ppdF9iaW5hcnlfcGFja19hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTIxNC1cdFx0cmV0dXJuIE5VTEw7XG5rZXJuZWwvYnBmL2NvcmUuYzoxMjE1Olx0cm9faGVhZGVyID0gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBicGZfZmlsbF9pbGxfaW5zbnMsIHdhc19jbGFzc2ljKTtcbmtlcm5lbC9icGYvY29yZS5jLTEyMTYtXHRpZiAoIXJvX2hlYWRlcikge1xuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jPTEzNz12b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTE0Ny1cdGlmICghZC1cdTAwM2VpbWFnZSkge1xua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTQ4Olx0XHRkLVx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTQ5LVx0XHRpZiAoIWQtXHUwMDNlaW1hZ2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcyNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBCUEYgSklUIE1lbW9yeSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IEJQRiBKSVQgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50LCBwb3RlbnRpYWxseSBoaWdoLWltcGFjdCBjaGFuZ2UgYmVjYXVzZSBpdCB0b3VjaGVzIG9uIEJQRiBKSVQgYW5kIGBleGVjbWVtYCDigJMgdGhlc2UgYXJlIGNydWNpYWwgYXJlYXMuICBUaGUgcGF0Y2gmIzM5O3MgY29yZSBpcyBtb2RpZnlpbmcgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSXTigJlzIHN3aXRjaGluZyBmcm9tIHRoZSBzdGFuZGFyZCBgYnBmX2ppdF9hbGxvY19leGVjYCBmdW5jdGlvbiB0byB1dGlsaXppbmcgYGV4ZWNtZW1fYWxsb2NgIG9yIHRoZSBuZXcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2Agd2l0aCBgZXhlY21lbV9hbGxvY19yd2AuICBJdCBsb29rcyBsaWtlIHRoZXJl4oCZcyBhbHNvIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBhcmNoL3g4Ni9tbS9pbml0LmNgLCBzcGVjaWZpY2FsbHkgYWRqdXN0bWVudHMgdG8gdGhlIGBFWEVDTUVNX0JQRmAgZmxhZ3MgYW5kIGBwZ3Byb3RgIHZhbHVlcyBmb3IgbWVtb3J5IHByb3RlY3Rpb24uCgpCZXlvbmQgdGhhdCwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHNvbWUgY2hlY2tzOyBJIHNlZSBhIG5ldyBgYnBmX2ppdF9tZW1faXNfcm94KClgIGZ1bmN0aW9uIGJlaW5nIGludHJvZHVjZWQsIGFuZCBjaGFuZ2VzIHRvIGF2b2lkIGNhbGxpbmcgYHNldF9tZW1vcnlfcm94YCBpZiB0aGUgbWVtb3J5IGlzIGFscmVhZHkgUmVhZCBPbmx5IEV4ZWN1dGUgKFJPWCkuICBJIGFsc28gbm90aWNlZCB0aGF0IHRoZSBwYXRjaCBpcyB1cGRhdGluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCB0byB1c2UgdGhlIG5ldyBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCBhbGxvY2F0aW9uLiAgQWRkaXRpb25hbGx5LCBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgIGlzIHN3aXRjaGluZyB0byBgdm1hbGxvY2AgaW5zdGVhZCBvZiBgYnBmX2ppdF9hbGxvY19leGVjYCBmb3IgdGhlIGBkLSZndDtyd19pbWFnZWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgaGVyZS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUgd29ydGggZnV6emluZz8mIzM0Oy4gQlBGIEpJVCwgaW4gbXkgZXhwZXJpZW5jZSwgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBpdHMgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdDoKCiogICBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYAoqICAgYGJwZl9qaXRfYWxsb2NfZXhlY2AKKiAgIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgCiogICBgYnBmX3Byb2dfcGFja19hbGxvY2AKKiAgIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AKClRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBpbiByZWxhdGlvbiB0byB0aGUgY2hhbmdlcy4KCkkmIzM5O2xsIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgbmV4dC4gSSAqa25vdyogSSBuZWVkIGBDT05GSUdfQlBGX0pJVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29kZSBwYXRoIHRvIGJlIGFjdGl2ZS4gR2l2ZW4gdGhlIGBhcmNoL3g4NmAgcGF0aCwgb2YgY291cnNlLCBJIG5lZWQgYENPTkZJR19YODZgLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgZm9jdXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uOgoKKiAgIGBicGZfcHJvZ19wYWNrX2FsbG9jYAoqICAgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYAoqICAgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAKKiAgIGBhbGxvY19uZXdfcGFja2AKKiAgIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgCgpJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIGlzIHJlYWNoYWJsZS4gQlBGIGRpc3BhdGNoZXJzIGFyZSwgYXMgSSBrbm93LCB1c2VkIGZvciBtYW5hZ2luZyBCUEYgcHJvZ3JhbXMsIHNvIEkmIzM5O2xsIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGF0IGZyYW1ld29yay4KCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0xNTI0PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMTU4OS0jZGVmaW5lIEJQRl9ESVNQQVRDSEVSX1BUUihuYW1lKSAoXHUwMDI2YnBmX2Rpc3BhdGNoZXJfIyNuYW1lKVxuaW5jbHVkZS9saW51eC9icGYuaDoxNTkwOnZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE1OTEtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnRvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2MjM9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKSB7fVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMTYyNy0jZGVmaW5lIEJQRl9ESVNQQVRDSEVSX1BUUihuYW1lKSBOVUxMXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mjg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTYyOS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jPTEwNj1zdGF0aWMgdm9pZCBicGZfZGlzcGF0Y2hlcl91cGRhdGUoc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBpbnQgcHJldl9udW1fcHJvZ3MpXG4tLVxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTM2LVxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTM3OnZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy0xMzgtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnRvKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDI5PXZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMzAte1xubmV0L2NvcmUvZmlsdGVyLmM6MTIwMzE6XHRicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhCUEZfRElTUEFUQ0hFUl9QVFIoeGRwKSwgcHJldl9wcm9nLCBwcm9nKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDYxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IHdheXMgdGhlc2UgQlBGIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdHJpZ2dlcmVkLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgZm9yIHRoaXMgbmV3IHByb2plY3QuIEZpcnN0LCBJIHNlZSB0aGF0IGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgY2FuIGJlIGNhbGxlZCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggWERQIHByb2dyYW0gY2hhbmdlcyAtIHRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byBjb25zaWRlci4gVGhlbiwgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIGlzIHJlYWNoYWJsZSB2aWEgQlBGIEpJVCwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3Igb3B0aW1pemF0aW9uIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBMYXN0bHksIGFuZCB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0IGRpZ2dpbmcgYSBiaXQgZGVlcGVyLCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBjb25uZWN0ZWQgdG8gdGhlIEJQRiB0cmFtcG9saW5lIG1lY2hhbmlzbS4gR2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIHRoZSB0cmFtcG9saW5lIHNpemUgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCB0byBhbmFseXplIHJpZ2h0IG5vdy4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhcmFtZXRlcnMsIGVkZ2UgY2FzZXMsIGFuZCBpbXBhY3Qgb24gbXkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9Mjg0ND1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yODQ4LVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjg0OTppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjg1MC1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjE0ND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxODEtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIxODI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE4My1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9ODEyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5MS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTE5MjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTkzLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMDIyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzA2LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzA3OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMDgtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTA9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NjUtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5NjY6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjk2Ny1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqb3JpZ19jYWxsKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjY5PWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2OTctXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY5ODppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2OTktXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTEzMTg9aW50IF9fbXVzdF9jaGVjayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTMxOTppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuaW5jbHVkZS9saW51eC9icGYuaC0xMzIwLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz01OTc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxMy1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MTQ6XHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKG1vZGVsLCBmbGFncywgdG5vZGVzLCBzdHViX2Z1bmMpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxNS1cdGlmIChzaXplIFx1MDAzYz0gMClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02NzM9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MjQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MjU6XHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKFx1MDAyNnRyLVx1MDAzZWZ1bmMubW9kZWwsIHRyLVx1MDAzZWZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzI2LVx0XHRcdFx0XHR0bm9kZXMsIHRyLVx1MDAzZWZ1bmMuYWRkcik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2MT1pbnQgX193ZWFrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ2Ni1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE0Njc6aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDY4LVx0XHRcdFx0ICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI3OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IEJQRiB0cmFtcG9saW5lcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSBhbGxvY2F0aW9uIGFuZCB1cGRhdGUgcHJvY2Vzcy4gSSBzZWUgdGhhdCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBjZW50cmFsLCBhcyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYC4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgdHJpZ2dlcmVkIHdoZW4gd2UmIzM5O3JlIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgdG8gdGhlc2UgdHJhbXBvbGluZXMsIHdoaWNoIGlzIHRoZSBrZXkgcGFydCBvZiB0aGUgb3BlcmF0aW9uLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIHdvcmtzLCBJIHRoaW5rIGl0JiMzOTtzIHdvcnRoIHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBicGZfaml0X2FsbG9jX2V4ZWNfcndgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9hbGxvY19leGVjX3J3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjk4PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MDgtXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3MDk6XHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS5cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEwLVx0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcxMTpcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxMi1cdGlmICghaW1hZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMzM1PXZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMzM2OnZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzM3LXZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcik7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTEyNj12b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTExMzAtXG5rZXJuZWwvYnBmL2NvcmUuYzoxMTMxOnZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG5rZXJuZWwvYnBmL2NvcmUuYy0xMTMyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NjAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcmllbmNlZCBrZXJuZWwgZGV2ZWxvcGVyOgoKKipEZWNvZGluZyB0aGUgQlBGIEV4ZWN1dGlvbiBNZW1vcnkgUGF0Y2gqKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L21tL2luaXQuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZm9jdXMgaXMgYXJvdW5kIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgYEVYRUNNRU1fQlBGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhleSYjMzk7cmUgY2hhbmdpbmcgdGhlIG1lbW9yeSBzZXR1cCwgbGlrZWx5IHRoZSBwZXJtaXNzaW9ucyBvciBhdHRyaWJ1dGVzLCBhc3NvY2lhdGVkIHdpdGggcnVubmluZyBCUEYgY29kZSBvbiB4ODYuJiMzNDsgIFRoZSBrZXkgaXMgdGhlIHN3aXRjaCB0byBsZXZlcmFnaW5nIGBmbGFnc2AgYW5kIGBwZ3Byb3RgIHdpdGhpbiBgZXhlY21lbV9hcmNoX3NldHVwYC4KCk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpcmVjdGx5IG1hbmlwdWxhdGluZyB0aGVzZSB2YXJpYWJsZXMsIGBmbGFnc2AgYW5kIGBwZ3Byb3RgPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSeKAmWxsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBleGFjdCBkZWZpbml0aW9ucyBhbmQgcG9zc2libGUgdmFsdWVzLCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIGhvdyB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSBhcmUgY29uZmlndXJlZCBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucy4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZSBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIElzIHRoaXMgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBhIG5lY2Vzc2FyeSBzZWN1cml0eSBoYXJkZW5pbmcsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgZm9yIHRoZSBjaGFuZ2U/IEkgYmV0dGVyIGdvIHJldmlldyB0aGUgYGV4ZWNtZW1fYXJjaF9zZXR1cGAgZnVuY3Rpb24gcmlnaHQgbm93IHRvIGdldCBhIGJldHRlciBncmFzcCBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGVjbWVtX2FyY2hfc2V0dXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbW0vaW5pdC5jPTQ0OT1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9hcm0vbW0vaW5pdC5jLTQ1MC1cbmFyY2gvYXJtL21tL2luaXQuYzo0NTE6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9hcm0vbW0vaW5pdC5jLTQ1Mi17XG4tLVxuYXJjaC9hcm02NC9tbS9pbml0LmM9NTAzPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL2FybTY0L21tL2luaXQuYy01MDQtXG5hcmNoL2FybTY0L21tL2luaXQuYzo1MDU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTA2LXtcbi0tXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM9MjQwPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMjQxLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jOjI0MjpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMjQzLXtcbi0tXG5hcmNoL21pcHMvbW0vaW5pdC5jPTU2Mj1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9taXBzL21tL2luaXQuYy01NjMtXG5hcmNoL21pcHMvbW0vaW5pdC5jOjU2NDpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL21pcHMvbW0vaW5pdC5jLTU2NS17XG4tLVxuYXJjaC9uaW9zMi9tbS9pbml0LmM9MTM3PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL25pb3MyL21tL2luaXQuYy0xMzgtXG5hcmNoL25pb3MyL21tL2luaXQuYzoxMzk6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9uaW9zMi9tbS9pbml0LmMtMTQwLXtcbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9OTc3PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtOTc4LVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjk3OTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtOTgwLXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmM9MzkyPXN0YXRpYyB2b2lkIHByZWFsbG9jX2V4ZWNtZW1fcGd0YWJsZSh2b2lkKSB7IH1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmMtMzk0LVxuYXJjaC9wb3dlcnBjL21tL21lbS5jOjM5NTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmMtMzk2LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0xNDQ1PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDQ2LVxuYXJjaC9yaXNjdi9tbS9pbml0LmM6MTQ0NzpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDQ4LXtcbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTI5Mz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9zMzkwL21tL2luaXQuYy0yOTQtXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjI5NTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI5Ni17XG4tLVxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmM9NT1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmMtNi1cbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jOjc6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmMtOC17XG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jPTEwNjA9dm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTA2NS1cbmFyY2gveDg2L21tL2luaXQuYzoxMDY2OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gveDg2L21tL2luaXQuYy0xMDY3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaD0xMTQ9c3RydWN0IGV4ZWNtZW1faW5mbyB7XG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTE4LS8qKlxuaW5jbHVkZS9saW51eC9leGVjbWVtLmg6MTE5OiAqIGV4ZWNtZW1fYXJjaF9zZXR1cCAtIGRlZmluZSBwYXJhbWV0ZXJzIGZvciBhbGxvY2F0aW9ucyBvZiBleGVjdXRhYmxlIG1lbW9yeVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTIwLSAqXG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTMwLSAqL1xuaW5jbHVkZS9saW51eC9leGVjbWVtLmg6MTMxOnN0cnVjdCBleGVjbWVtX2luZm8gKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTEzMi1cbi0tXG5tbS9leGVjbWVtLmM9NTM3PXN0YXRpYyB2b2lkIGV4ZWNtZW1faW5pdF9taXNzaW5nKHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8pXG4tLVxubW0vZXhlY21lbS5jLTU1OC1cbm1tL2V4ZWNtZW0uYzo1NTk6c3RydWN0IGV4ZWNtZW1faW5mbyAqIF9fd2VhayBleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbm1tL2V4ZWNtZW0uYy01NjAte1xuLS1cbm1tL2V4ZWNtZW0uYz01NjQ9c3RhdGljIHZvaWQgX19pbml0IF9fZXhlY21lbV9pbml0KHZvaWQpXG5tbS9leGVjbWVtLmMtNTY1LXtcbm1tL2V4ZWNtZW0uYzo1NjY6XHRzdHJ1Y3QgZXhlY21lbV9pbmZvICppbmZvID0gZXhlY21lbV9hcmNoX3NldHVwKCk7XG5tbS9leGVjbWVtLmMtNTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc2NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIHg4NiBNZW1vcnkgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgZm9yIHRoaXMsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBpbnRvIGBhcmNoL3g4Ni9tbS9pbml0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkIGZvciB4ODYgc3lzdGVtcywgc28gaXQmIzM5O3MgYSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50LiBUbyBwaW5wb2ludCB0aGUgcmVsZXZhbnQgY29kZSBibG9jayBlZmZpY2llbnRseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDExMDcuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBhcmVhIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24sIGFuZCBJIGV4cGVjdCBJJiMzOTtsbCBiZSBhYmxlIHRvIHdvcmsgb3V0d2FyZHMgZnJvbSB0aGVyZSwgaG9wZWZ1bGx5IGZpbmRpbmcgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdFx0ZmxhZ3MgPSBFWEVDTUVNX0tBU0FOX1NIQURPVyB8IEVYRUNNRU1fUk9YX0NBQ0hFO1xuMTA4MTpcdFx0fSBlbHNlIHtcbjEwODI6XHRcdFx0cGdwcm90ID0gUEFHRV9LRVJORUw7XG4xMDgzOlx0XHRcdGZsYWdzID0gRVhFQ01FTV9LQVNBTl9TSEFET1c7XG4xMDg0Olx0XHR9XG4xMDg1Olx0XG4xMDg2Olx0XHRleGVjbWVtX2luZm8gPSAoc3RydWN0IGV4ZWNtZW1faW5mbyl7XG4xMDg3Olx0XHRcdC5yYW5nZXMgPSB7XG4xMDg4Olx0XHRcdFx0W0VYRUNNRU1fTU9EVUxFX1RFWFRdID0ge1xuMTA4OTpcdFx0XHRcdFx0LmZsYWdzXHQ9IGZsYWdzLFxuMTA5MDpcdFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuMTA5MTpcdFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbjEwOTI6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gcGdwcm90LFxuMTA5MzpcdFx0XHRcdFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcbjEwOTQ6XHRcdFx0XHR9LFxuMTA5NTpcdFx0XHRcdFtFWEVDTUVNX0tQUk9CRVNdID0ge1xuMTA5NjpcdFx0XHRcdFx0LmZsYWdzXHQ9IGZsYWdzLFxuMTA5NzpcdFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuMTA5ODpcdFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbjEwOTk6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUxfUk9YLFxuMTEwMDpcdFx0XHRcdFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcbjExMDE6XHRcdFx0XHR9LFxuMTEwMjpcdFx0XHRcdFtFWEVDTUVNX0ZUUkFDRV0gPSB7XG4xMTAzOlx0XHRcdFx0XHQuZmxhZ3NcdD0gZmxhZ3MsXG4xMTA0Olx0XHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4xMTA1Olx0XHRcdFx0XHQuZW5kXHQ9IE1PRFVMRVNfRU5ELFxuMTEwNjpcdFx0XHRcdFx0LnBncHJvdFx0PSBwZ3Byb3QsXG4xMTA3Olx0XHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuMTEwODpcdFx0XHRcdH0sXG4xMTA5Olx0XHRcdFx0W0VYRUNNRU1fQlBGXSA9IHtcbjExMTA6XHRcdFx0XHRcdC5mbGFnc1x0PSBmbGFncyxcbjExMTE6XHRcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbjExMTI6XHRcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4xMTEzOlx0XHRcdFx0XHQucGdwcm90XHQ9IHBncHJvdCxcbjExMTQ6XHRcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4xMTE1Olx0XHRcdFx0fSxcbjExMTY6XHRcdFx0XHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XG4xMTE3Olx0XHRcdFx0XHQuZmxhZ3NcdD0gRVhFQ01FTV9LQVNBTl9TSEFET1csXG4xMTE4Olx0XHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4xMTE5Olx0XHRcdFx0XHQuZW5kXHQ9IE1PRFVMRVNfRU5ELFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG1vdmluZyBhd2F5IGZyb20gaGFyZGNvZGVkIG1lbW9yeSBmbGFncyBhbmQgcGFnZSBwcm90ZWN0aW9uIGluIGBhcmNoL3g4Ni9tbS9pbml0LmNgIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZmxhZ3NgIGFuZCBgcGdwcm90YCBpbiBgRVhFQ01FTV9CUEZgLiBUaGlzIHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmQgbW9yZSBmbGV4aWJsZSBhbmQgcG90ZW50aWFsbHkgc2FmZXIgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIEpJVGVkIEJQRiBjb2RlLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGluc3RlYWQgb2YgYGJwZl9qaXRfYWxsb2NfZXhlY2AgYW5kIGl0cyBkZWNsYXJhdGlvbiBpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBpbXBvcnRhbnQuCgpUaGUgYWRkaXRpb24gb2YgYGJwZl9qaXRfbWVtX2lzX3JveGAgaW4gYGtlcm5lbC9icGYvY29yZS5jYCBhbmQgaXRzIGltcGFjdCBvbiBgYWxsb2NfbmV3X3BhY2tgIGFuZCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLiBDbGVhcmx5LCB0aGUgZW1waGFzaXMgaXMgb24gbWFraW5nIGl0IFJPWC1hd2FyZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGJwZl9qaXRfbWVtX2lzX3JveGAgY2hlY2suIFRoaXMgaXMgY2VudHJhbCB0byB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZS4KClRoZSBjaGFuZ2UgdG8gYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCB1c2luZyBgdm1hbGxvY2AgaW5zdGVhZCBvZiBgYnBmX2ppdF9hbGxvY19leGVjYCBmb3IgYGQtJmd0O3J3X2ltYWdlYCBpcyBhbHNvIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYGJwZl9wcm9nX3BhY2tfYWxsb2NgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgaW1wYWN0IG9mIFJPWCBtZW1vcnkgYWxsb2NhdGlvbiBpcyBiZWluZyBmZWx0IHRoZSBtb3N0LgoKUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIHVzYWdlLiBXYWl0LCBpdCYjMzk7cyB1c2VkIGluIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLCBhbmQgdGhhdCYjMzk7cyByZWxhdGVkIHRvIGF0dGFjaGluZyB0cmFtcG9saW5lcy4gVHJhbXBvbGluZXMgYXJlIG9mdGVuIHJlYWQtb25seSwgbWFraW5nIHRoaXMgY2hhbmdlIHZlcnkgaW1wb3J0YW50LiBJdCBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgY29ubmVjdGlvbiBiZXR3ZWVuIFJPWCBhbmQgYXR0YWNoaW5nIEJQRiBjb2RlLCBhIGNyaXRpY2FsIHBhcnQgb2YgbXkgd29yay4KClRoZW4gSSBoYXZlIHRvIGNoZWNrIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gSSBzZWUgdGhhdCBpdCBpcyB1c2VkIGluIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2Agd2hpY2ggY29uZmlybXMgbXkgc3VzcGljaW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgYnBmX3Byb2dfcGFja19hbGxvY2AsIGBhbGxvY19uZXdfcGFja2AsIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AsIGFuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYENPTkZJR19CUEZfSklUYCBmb3Igc3VyZSwgYW5kIGBDT05GSUdfWDg2YCBnaXZlbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNoYW5nZXMuIEl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gdmVyaWZ5IGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciBjb25maWcgYmVzaWRlcyB0aGVzZS4gQW5kIHllcywgaXQgaXMgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvY3VzZWQgb24gbWVtb3J5IHByb3RlY3Rpb24gb2YgSklUZWQgQlBGIGNvZGUsIGxpa2VseSByZWxhdGVkIHRvIHJlYWQtb25seSBleGVjdXRpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbW9yZSBmbGV4aWJsZSBhbmQgc2FmZXIgYXBwcm9hY2ggdG8gbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhcmUgbWFuYWdlZCBhbmQgSklUZWQuIFRoZSBST1ggYXNwZWN0IGlzIGtleSBoZXJlLiBJIHdpbGwgZGl2ZSBkZWVwZXIgaW50byBgYnBmX2ppdF9tZW1faXNfcm94YCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMtaWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9Nj1lbmRpZlxua2VybmVsL2JwZi9NYWtlZmlsZTo3OkNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICYjNDM7PSBwcmVsb2FkL1xua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cbmtlcm5lbC9icGYvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyoqCgpBbHJpZ2h0LCBzbyBgY29yZS5vYCBpcyBhbHdheXMgY29tcGlsZWQsIHRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9uIGZvciBgYnBmX3Byb2dfcGFja19hbGxvY2AuIE15IGludHVpdGlvbiBzYXlzIGl0JiMzOTtzIHRpZWQgdG8gYENPTkZJR19CUEZfSklUYC4gSXQmIzM5O3Mgd29ydGggZGlnZ2luZyBpbnRvIHRoYXQgYCNpZmRlZmAgYmxvY2sgdG8gY29uZmlybS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMgaGVyZSB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgYXZhaWxhYmxlIG9yIGNvbnRpbmdlbnQgb24gYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhpbmdzIGFyZSBzZXQgdXAgYW5kIGF2b2lkIGFueSBhc3N1bXB0aW9ucy4gVGltZSB0byB2ZXJpZnkgdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9OTI0PXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtOTU1LVxua2VybmVsL2JwZi9jb3JlLmM6OTU2OnZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sIHdhc19jbGFzc2ljKVxua2VybmVsL2JwZi9jb3JlLmMtOTU3LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xMTk3PWJwZl9qaXRfYmluYXJ5X3BhY2tfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTEyMTQtXHRcdHJldHVybiBOVUxMO1xua2VybmVsL2JwZi9jb3JlLmM6MTIxNTpcdHJvX2hlYWRlciA9IGJwZl9wcm9nX3BhY2tfYWxsb2Moc2l6ZSwgYnBmX2ZpbGxfaWxsX2luc25zLCB3YXNfY2xhc3NpYyk7XG5rZXJuZWwvYnBmL2NvcmUuYy0xMjE2LVx0aWYgKCFyb19oZWFkZXIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGludG8gdGhlIGNvZGUgYW5kIGtub3cgdGhlIGxhbmRzY2FwZToKCioqQ2hlY2tpbmcgZm9yIEpJVCBDb21waWxhdGlvbiBTdXBwb3J0IGluIEJQRiBQcm9ncmFtIFBhY2thZ2luZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBwcmV0dHkgZnVuZGFtZW50YWwgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIEJQRiBKSVQgY29tcGlsYXRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBjcnVjaWFsIGZvciBwb3J0YWJpbGl0eSBhbmQgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgY29ycmVjdGx5IGluIGRpZmZlcmVudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXNzZW50aWFsbHkgZG91YmxlLWNoZWNraW5nIG15IGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgYnVpbGQgc3lzdGVtIHdpbGwgaGFuZGxlIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGFuZCB0aGUgY29kZSBpdHNlbGYgdG8gc2VlIGlmIGl0JiMzOTtzIHByb3RlY3RlZCBieSB0aGUgYCNpZmRlZiBDT05GSUdfQlBGX0pJVGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgb3Igc29tZXRoaW5nIGxvZ2ljYWxseSBlcXVpdmFsZW50LCBzbyB0aGUgY29kZSBpcyBjb21waWxlZCwgYW5kIHdvcmtpbmcsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBKSVQgaXMgaW4gcGxheS4gVGhpcyBpcyBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGF2b2lkIGEgcG90ZW50aWFsbHkgbmFzdHkgc3VycHJpc2UgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMDpcdHN0YXRpYyBERUZJTkVfTVVURVgocGFja19tdXRleCk7XG4gOTAxOlx0c3RhdGljIExJU1RfSEVBRChwYWNrX2xpc3QpO1xuIDkwMjpcdFxuIDkwMzpcdC8qIFBNRF9TSVpFIGlzIG5vdCBhdmFpbGFibGUgaW4gc29tZSBzcGVjaWFsIGNvbmZpZywgZS5nLiBBUkNIPWFybSB3aXRoXG4gOTA0Olx0ICogQ09ORklHX01NVT1uLiBVc2UgUEFHRV9TSVpFIGluIHRoZXNlIGNhc2VzLlxuIDkwNTpcdCAqL1xuIDkwNjpcdCNpZmRlZiBQTURfU0laRVxuIDkwNzpcdC8qIFBNRF9TSVpFIGlzIHJlYWxseSBiaWcgZm9yIHNvbWUgYXJjaHMuIEl0IGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UgdG9cbiA5MDg6XHQgKiByZXNlcnZlIHRvbyBtdWNoIG1lbW9yeSBpbiBvbmUgYWxsb2NhdGlvbi4gSGFyZGNvZGUgQlBGX1BST0dfUEFDS19TSVpFIHRvXG4gOTA5Olx0ICogMk1pQiAqIG51bV9wb3NzaWJsZV9ub2RlcygpLiBPbiBtb3N0IGFyY2hpdGVjdHVyZXMgUE1EX1NJWkUgd2lsbCBiZVxuIDkxMDpcdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyTUIuXG4gOTExOlx0ICovXG4gOTEyOlx0I2RlZmluZSBCUEZfUFJPR19QQUNLX1NJWkUgKFNaXzJNICogbnVtX3Bvc3NpYmxlX25vZGVzKCkpXG4gOTEzOlx0I2Vsc2VcbiA5MTQ6XHQjZGVmaW5lIEJQRl9QUk9HX1BBQ0tfU0laRSBQQUdFX1NJWkVcbiA5MTU6XHQjZW5kaWZcbiA5MTY6XHRcbiA5MTc6XHQjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxuIDkxODpcdFxuIDkxOTpcdHN0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxuIDkyMDpcdHtcbiA5MjE6XHRcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XG4gOTIyOlx0fVxuIDkyMzpcdFxuIDkyNDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXG4gOTI1Olx0e1xuIDkyNjpcdFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7XG4gOTI3Olx0XHRpbnQgZXJyO1xuIDkyODpcdFxuIDkyOTpcdFx0cGFjayA9IGt6YWxsb2NfZmxleCgqcGFjaywgYml0bWFwLCBCSVRTX1RPX0xPTkdTKEJQRl9QUk9HX0NIVU5LX0NPVU5UKSk7XG4gOTMwOlx0XHRpZiAoIXBhY2spXG4gOTMxOlx0XHRcdHJldHVybiBOVUxMO1xuIDkzMjpcdFx0cGFjay1cdTAwM2VwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTtcbiA5MzM6XHRcdGlmICghcGFjay1cdTAwM2VwdHIpXG4gOTM0Olx0XHRcdGdvdG8gb3V0O1xuIDkzNTpcdFx0Yml0bWFwX3plcm8ocGFjay1cdTAwM2ViaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpO1xuIDkzNjpcdFxuIDkzNzpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXG4gOTM4Olx0XHRcdHBhY2stXHUwMDNlYXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlO1xuIDkzOTpcdFx0aWYgKCFicGZfaml0X21lbV9pc19yb3goKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBmb3IgQlBGIEpJVCBTdXBwb3J0KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsIOKAkyBkb2VzIHRoZSBzeXN0ZW0gZXZlbiAqc3VwcG9ydCogdGhlIEJQRiBKSVQ/IEl0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LCBvYnZpb3VzbHkuIFNvLCBteSBpbml0aWFsIGNoZWNrIHdpbGwgZGVmaW5pdGVseSBpbnZvbHZlIGxvb2tpbmcgYXQgYENPTkZJR19CUEZfSklUYC4gVGhhdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZXNzZW50aWFsbHkgZW5hYmxlcyB0aGUganVzdC1pbi10aW1lIGNvbXBpbGVyIGZvciBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIGJ5dGVjb2RlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIGRlZmluZWQgYW5kIGVuYWJsZWQuIElmIGBDT05GSUdfQlBGX0pJVGAgaXMgb2ZmLCB0aGVuIHRoZSB3aG9sZSBhcHByb2FjaCBpcyBlc3NlbnRpYWxseSBhIG5vbi1zdGFydGVyLCBhbmQgSSYjMzk7bGwgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgc3RyYXRlZ3kuIE5vIHNlbnNlIGdvaW5nIGZ1cnRoZXIgZG93biB0aGlzIHBhdGggd2l0aG91dCB0aGF0IGNydWNpYWwgZm91bmRhdGlvbi4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGEgZnVuZGFtZW50YWwgZGlhZ25vc3RpYyBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jPTEwMD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2FsbG9jX25vX3N0YXRzKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfZXh0cmFfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTI4LVx0ZnAtXHUwMDNlaml0X3JlcXVlc3RlZCA9IGVicGZfaml0X2VuYWJsZWQoKTtcbmtlcm5lbC9icGYvY29yZS5jOjEyOTpcdGZwLVx1MDAzZWppdF9yZXF1aXJlZCA9IElTX0VOQUJMRUQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKTtcbmtlcm5lbC9icGYvY29yZS5jLTEzMC1cdGZwLVx1MDAzZWJsaW5kaW5nX3JlcXVlc3RlZCA9IGJwZl9qaXRfYmxpbmRpbmdfZW5hYmxlZChmcCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9NTQxPXZvaWQgYnBmX3Byb2dfa2FsbHN5bXNfZGVsX2FsbChzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTU0Ni1cbmtlcm5lbC9icGYvY29yZS5jOjU0NzojaWZkZWYgQ09ORklHX0JQRl9KSVRcbmtlcm5lbC9icGYvY29yZS5jLTU0OC0vKiBBbGwgQlBGIEpJVCBzeXNjdGwga25vYnMgaGVyZS4gKi9cbmtlcm5lbC9icGYvY29yZS5jOjU0OTppbnQgYnBmX2ppdF9lbmFibGUgICBfX3JlYWRfbW9zdGx5ID0gSVNfQlVJTFRJTihDT05GSUdfQlBGX0pJVF9ERUZBVUxUX09OKTtcbmtlcm5lbC9icGYvY29yZS5jOjU1MDppbnQgYnBmX2ppdF9rYWxsc3ltcyBfX3JlYWRfbW9zdGx5ID0gSVNfQlVJTFRJTihDT05GSUdfQlBGX0pJVF9ERUZBVUxUX09OKTtcbmtlcm5lbC9icGYvY29yZS5jLTU1MS1pbnQgYnBmX2ppdF9oYXJkZW4gICBfX3JlYWRfbW9zdGx5O1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTE2NTU9dTE2IGJwZl9vdXRfc3RhY2tfYXJnX2NudChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTY2My19XG5rZXJuZWwvYnBmL2NvcmUuYzoxNjY0OiNlbmRpZiAvKiBDT05GSUdfQlBGX0pJVCAqL1xua2VybmVsL2JwZi9jb3JlLmMtMTY2NS1cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xODIzPWJvb2wgYnBmX29wY29kZV9pbl9pbnNudGFibGUodTggY29kZSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xODQ1LVxua2VybmVsL2JwZi9jb3JlLmM6MTg0NjojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9jb3JlLmMtMTg0Ny0vKiBBYnNvbHV0ZSB2YWx1ZSBvZiBzMzIgd2l0aG91dCB1bmRlZmluZWQgYmVoYXZpb3IgZm9yIFMzMl9NSU4gKi9cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjEwPXN0YXRpYyBib29sIGJwZl9wcm9nX3NlbGVjdF9pbnRlcnByZXRlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2MTItXHRib29sIHNlbGVjdF9pbnRlcnByZXRlciA9IGZhbHNlO1xua2VybmVsL2JwZi9jb3JlLmM6MjYxMzojaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9jb3JlLmMtMjYxNC1cdHUzMiBzdGFja19kZXB0aCA9IG1heF90KHUzMiwgZnAtXHUwMDNlYXV4LVx1MDAzZXN0YWNrX2RlcHRoLCAxKTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvY29yZS5jLTI2MzQte1xua2VybmVsL2JwZi9jb3JlLmM6MjYzNTojaWZkZWYgQ09ORklHX0JQRl9KSVRcbmtlcm5lbC9icGYvY29yZS5jLTI2MzYtXHRzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQ29kZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgZGVmaW5lZCBhdCBsaW5lIDk1Ni4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZmFsbHMgcmlnaHQgYmV0d2VlbiBgI2lmZGVmIENPTkZJR19CUEZfSklUYCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYCNlbmRpZmAuIFNvLCB0aGF0IHNlZW1zIHByZXR0eSBjbGVhcjogYENPTkZJR19CUEZfSklUYCAqaXMqIHJlcXVpcmVkIGZvciB0aGlzIHNlY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGEgSklUIGNvbXBpbGVyIHdvdWxkIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgY29tcGlsZWQgQlBGIHByb2dyYW1zLgoKTm93LCB3aGF0IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNwZWN0cz8gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBgYXJjaC94ODYvbW0vaW5pdC5jYC4gVGhhdCBoaW50cyBhdCB4ODYgZGVwZW5kZW5jaWVzLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBUaGUgKmNvcmUqIG1vZGlmaWNhdGlvbnMgYXJlIGFjdHVhbGx5IGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYW5kIGBrZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIEJQRiBsaXZlcywgdGhlIGdlbmVyYWwgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCBJIGNhbiBkZWR1Y2UgdGhhdCB0aGUgYnVsayBvZiB0aGVzZSBjaGFuZ2VzIGFyZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgYW5kIHdpbGwgYWZmZWN0IGFsbCBwbGF0Zm9ybXMuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBpbiBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgIGlzIGltcG9ydGFudC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlcGVuZGVuY2llcy4gVGltZSB0byBnbyBjaGVjayB0aGF0IGNvbmZpZyBzZXR0aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyB0aGVyZS4gSSBzaG91bGQgbG9vayB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlzcGF0Y2hlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTIxPWVuZGlmXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIzLWlmZXEgKCQoQ09ORklHX05FVCkseSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29yZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0JQRl9KSVRgIGlzIHRoZSBiaWcgb25lLCBvZiBjb3Vyc2UuIEJ1dCB3aGF0IGVsc2UgaXMgY3JpdGljYWw/IEkga25vdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB1c3VhbGx5IGEgbXVzdC1oYXZlIGZvciBCUEYgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19CUEZfSklUYCBhbG9uZSBpc24mIzM5O3Qgc3VmZmljaWVudC4gQWgsIHJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0IHJlcXVpcmVzIGJvdGggYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgLiBOb3csIGEgcXVpY2sgcmVtaW5kZXI6IGBDT05GSUdfQlBGX0pJVGAgaXRzZWxmIGRlcGVuZHMgb24gZWl0aGVyIGBIQVZFX0NCUEZfSklUYCBvciBgSEFWRV9FQlBGX0pJVGAuCgpBbHJpZ2h0LCBJJiMzOTtsbCBrZWVwIGl0IHNpbXBsZSBhbmQganVzdCBmb2N1cyBvbiBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAgZm9yIG5vdy4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgcmV2aWV3IHNvbWUgcmVsZXZhbnQgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjcml0aWNhbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBmb3Igbm93OgoqICAgYGJwZl9wcm9nX3BhY2tfYWxsb2NgCiogICBgYWxsb2NfbmV3X3BhY2tgCiogICBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgCiogICBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYAoqICAgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AKCkxldCBtZSBldmFsdWF0ZSBteSBjYW5kaWRhdGUgc3ltYm9scy4gSXMgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYSBnb29kIGNob2ljZT8gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGBleGVjbWVtX2FsbG9jX3J3YC4gSXQmIzM5O3MgYSB1c2VmdWwgc3ltYm9sIGJ1dCwgcGVyaGFwcyBub3QgdGhlIGJlc3QgdG8gZm9jdXMgb24uIEkgdGhpbmsgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgYSBiZXR0ZXIgZm9jdXMgc3ltYm9sLiBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgYW5vdGhlciBzdHJvbmcgY2FuZGlkYXRlLiBJJiMzOTtsbCBpbmNsdWRlIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgYXMgd2VsbC4KCkp1c3QgdG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCBkZWZpbml0aW9uIGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0IGNvcnJlY3RseSBpbiB0aGUgYnJvYWRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0XG4xMTIxOlx0dm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcbjExMjI6XHR7XG4xMTIzOlx0XHRhdG9taWNfbG9uZ19zdWIoc2l6ZSwgXHUwMDI2YnBmX2ppdF9jdXJyZW50KTtcbjExMjQ6XHR9XG4xMTI1Olx0XG4xMTI2Olx0dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbjExMjc6XHR7XG4xMTI4Olx0XHRyZXR1cm4gZXhlY21lbV9hbGxvYyhFWEVDTUVNX0JQRiwgc2l6ZSk7XG4xMTI5Olx0fVxuMTEzMDpcdFxuMTEzMTpcdHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG4xMTMyOlx0e1xuMTEzMzpcdFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xuMTEzNDpcdH1cbjExMzU6XHRcbjExMzY6XHR2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXG4xMTM3Olx0e1xuMTEzODpcdFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xuMTEzOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQWxsb2NhdGlvbiBTdHJhdGVneSoqCgpSaWdodCwgc28gdGhpcyBsb29rcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3cmFwcGVyIGZ1bmN0aW9uLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBjb21wbGV4LiBIb3dldmVyLCBpdCYjMzk7cyBhbHdheXMgd29ydGggZGlnZ2luZyBkZWVwZXIsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggQlBGLiBUaGF0IGBicGZfcHJvZ19wYWNrX2FsbG9jYCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFsbG9jYXRpb24gbWFnaWMgcHJvYmFibHkgcmVzaWRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoZSBpbnRyaWNhY2llcyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYWxpZ25tZW50LCBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBpc3N1ZXMsIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IHdpbGwgYmVjb21lIGNsZWFyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9wcm9nX3BhY2tfYWxsb2NgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTA6XHRvdXQ6XG4gOTUxOlx0XHRicGZfaml0X2ZyZWVfZXhlYyhwYWNrLVx1MDAzZXB0cik7XG4gOTUyOlx0XHRrZnJlZShwYWNrKTtcbiA5NTM6XHRcdHJldHVybiBOVUxMO1xuIDk1NDpcdH1cbiA5NTU6XHRcbiA5NTY6XHR2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcbiA5NTc6XHR7XG4gOTU4Olx0XHR1bnNpZ25lZCBpbnQgbmJpdHMgPSBCUEZfUFJPR19TSVpFX1RPX05CSVRTKHNpemUpO1xuIDk1OTpcdFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2ssICpmYWxsYmFja19wYWNrID0gTlVMTDtcbiA5NjA6XHRcdHVuc2lnbmVkIGxvbmcgcG9zLCBmYWxsYmFja19wb3MgPSAwO1xuIDk2MTpcdFx0dm9pZCAqcHRyID0gTlVMTDtcbiA5NjI6XHRcbiA5NjM6XHRcdG11dGV4X2xvY2soXHUwMDI2cGFja19tdXRleCk7XG4gOTY0Olx0XHRpZiAoc2l6ZSBcdTAwM2UgQlBGX1BST0dfUEFDS19TSVpFKSB7XG4gOTY1Olx0XHRcdC8qXG4gOTY2Olx0XHRcdCAqIEFsbG9jYXRpb25zIGxhcmdlciB0aGFuIGEgcGFjayBnZXQgdGhlaXIgb3duIHBhZ2VzLCBhbmRcbiA5Njc6XHRcdFx0ICogcHJlZGljdG9ycyBhcmUgbm90IGZsdXNoZWQgZm9yIHN1Y2ggYWxsb2NhdGlvbi4gVGhpcyBpcyBvbmx5XG4gOTY4Olx0XHRcdCAqIHNhZmUgYmVjYXVzZSBjQlBGIHByb2dyYW1zICh0aGUgdW5wcml2aWxlZ2VkIGF0dGFjayBzdXJmYWNlKVxuIDk2OTpcdFx0XHQgKiBhcmUgYm91bmRlZCB3ZWxsIGJlbG93IGEgcGFjayBzaXplLlxuIDk3MDpcdFx0XHQgKi9cbiA5NzE6XHRcdFx0aWYgKHdhc19jbGFzc2ljIFx1MDAyNlx1MDAyNiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmJwZl9wcmVkX2ZsdXNoX2VuYWJsZWQpKVxuIDk3MjpcdFx0XHRcdHByX3dhcm5fb25jZShcJiMzNDtCUEY6IFByZWRpY3RvcnMgbm90IGZsdXNoZWQgZm9yIGFsbG9jYXRpb25zIGdyZWF0ZXIgdGhhbiBCUEZfUFJPR19QQUNLX1NJWkVcXG5cJiMzNDspO1xuIDk3MzpcdFx0XHRzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTtcbiA5NzQ6XHRcdFx0cHRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xuIDk3NTpcdFx0XHRpZiAocHRyIFx1MDAyNlx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbiA5NzY6XHRcdFx0XHRpbnQgZXJyO1xuIDk3NzpcdFxuIDk3ODpcdFx0XHRcdGJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpO1xuIDk3OTpcdFx0XHRcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwdHIpO1xuIDk4MDpcdFx0XHRcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXB0cixcbiA5ODE6XHRcdFx0XHRcdFx0ICAgICBzaXplIC8gUEFHRV9TSVpFKTtcbiA5ODI6XHRcdFx0XHRpZiAoZXJyKSB7XG4gOTgzOlx0XHRcdFx0XHRicGZfaml0X2ZyZWVfZXhlYyhwdHIpO1xuIDk4NDpcdFx0XHRcdFx0cHRyID0gTlVMTDtcbiA5ODU6XHRcdFx0XHR9XG4gOTg2Olx0XHRcdH1cbiA5ODc6XHRcdFx0Z290byBvdXQ7XG4gOTg4Olx0XHR9XG4gOTg5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhY2ssIFx1MDAyNnBhY2tfbGlzdCwgbGlzdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYnBmX3Byb2dfcGFja19hbGxvYyBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gVGhlIHNpZ25pZmljYW50IGFsdGVyYXRpb24gaGVyZSBpcyByaWdodCBpbiB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50OgoKYGBgYwotCQlpZiAocHRyKSB7CiYjNDM7CQlpZiAocHRyICZhbXA7JmFtcDsgIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7CmBgYAoKRXNzZW50aWFsbHksIHRoZSBjb2RlIGlzIG5vdyBjaGVja2luZyBpZiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAoYHB0cmApIGlzICpub3QqIGFscmVhZHkgcmVhZC1vbmx5LCBiZWZvcmUgYXR0ZW1wdGluZyB0byBtYXJrIGl0IGFzIHN1Y2guIFRoaXMgaXMgYSBjbGV2ZXIgb3B0aW1pemF0aW9uLiBCZWZvcmUsIHdlIHdlcmUgYmxpbmRseSBjYWxsaW5nIGBzZXRfbWVtb3J5X3JveGAgb24gdGhlIGFsbG9jYXRlZCBtZW1vcnksIGJ1dCBpZiBpdCB3YXMgYWxyZWFkeSBST1gsIHRoaXMgd2FzIGFuIHVubmVjZXNzYXJ5IG9wZXJhdGlvbi4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgYXZvaWRpbmcgYSByZWR1bmRhbnQgYHNldF9tZW1vcnlfcm94YCBjYWxsLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgaW1wYWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIGFuZCBzZWUgaG93IHRoaXMgbWlnaHQgYWZmZWN0IGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AuIEkgbmVlZCB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgZG93bnN0cmVhbSBlZmZlY3RzIG9mIHRoaXMgb3B0aW1pemF0aW9uIG9uIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIHRoZSBvcmlnaW5hbCBiZWhhdmlvciBvciBpZiBpdCYjMzk7cyByb2J1c3QgdG8gdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XHQgKi9cbiAxMzE6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDEzMjpcdFxuIDEzMzpcdFx0aWYgKG5ldylcbiAxMzQ6XHRcdFx0ZC1cdTAwM2VpbWFnZV9vZmYgPSBub2ZmO1xuIDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHR2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxuIDEzODpcdFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICp0bylcbiAxMzk6XHR7XG4gMTQwOlx0XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiAxNDE6XHRcdGludCBwcmV2X251bV9wcm9ncztcbiAxNDI6XHRcbiAxNDM6XHRcdGlmIChmcm9tID09IHRvKVxuIDE0NDpcdFx0XHRyZXR1cm47XG4gMTQ1Olx0XG4gMTQ2Olx0XHRtdXRleF9sb2NrKFx1MDAyNmQtXHUwMDNlbXV0ZXgpO1xuIDE0NzpcdFx0aWYgKCFkLVx1MDAzZWltYWdlKSB7XG4gMTQ4Olx0XHRcdGQtXHUwMDNlaW1hZ2UgPSBicGZfcHJvZ19wYWNrX2FsbG9jKFBBR0VfU0laRSwgYnBmX2ppdF9maWxsX2hvbGVfd2l0aF96ZXJvLCBmYWxzZSk7XG4gMTQ5Olx0XHRcdGlmICghZC1cdTAwM2VpbWFnZSlcbiAxNTA6XHRcdFx0XHRnb3RvIG91dDtcbiAxNTE6XHRcdFx0LyogZC1cdTAwM2Vyd19pbWFnZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlXG4gMTUyOlx0XHRcdCAqIGNhbiB1c2Ugdm1hbGxvYy5cbiAxNTM6XHRcdFx0ICovXG4gMTU0Olx0XHRcdGQtXHUwMDNlcndfaW1hZ2UgPSB2bWFsbG9jKFBBR0VfU0laRSk7XG4gMTU1Olx0XHRcdGlmICghZC1cdTAwM2Vyd19pbWFnZSkge1xuIDE1NjpcdFx0XHRcdGJwZl9wcm9nX3BhY2tfZnJlZShkLVx1MDAzZWltYWdlLCBQQUdFX1NJWkUpO1xuIDE1NzpcdFx0XHRcdGQtXHUwMDNlaW1hZ2UgPSBOVUxMO1xuIDE1ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDE1OTpcdFx0XHR9XG4gMTYwOlx0XHRcdGJwZl9pbWFnZV9rc3ltX2luaXQoZC1cdTAwM2VpbWFnZSwgUEFHRV9TSVpFLCBcdTAwMjZkLVx1MDAzZWtzeW0pO1xuIDE2MTpcdFx0XHRicGZfaW1hZ2Vfa3N5bV9hZGQoXHUwMDI2ZC1cdTAwM2Vrc3ltKTtcbiAxNjI6XHRcdH1cbiAxNjM6XHRcbiAxNjQ6XHRcdHByZXZfbnVtX3Byb2dzID0gZC1cdTAwM2VudW1fcHJvZ3M7XG4gMTY1Olx0XHRjaGFuZ2VkIHw9IGJwZl9kaXNwYXRjaGVyX3JlbW92ZV9wcm9nKGQsIGZyb20pO1xuIDE2NjpcdFx0Y2hhbmdlZCB8PSBicGZfZGlzcGF0Y2hlcl9hZGRfcHJvZyhkLCB0byk7XG4gMTY3Olx0XG4gMTY4Olx0XHRpZiAoIWNoYW5nZWQpXG4gMTY5Olx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcwMwoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA2NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEpJVCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdGhhdCYjMzk7cyBwcmV0dHkga2V5LCBhbmQgaXQgcmVhbGx5IHdhcnJhbnRzIGEgdGhvcm91Z2ggZ29pbmctb3Zlci4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRoZSBkaXNwYXRjaGVyJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSwgd2hpY2ggaXMgYWx3YXlzIGEgcGxhY2UgdGhhdCBkZXNlcnZlcyBleHRyYSBhdHRlbnRpb24uCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhbHRlcmluZyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgbWFuYWdlZCBmb3IgQlBGIEpJVCBleGVjdXRpb24uIEkgc2VlIGNoYW5nZXMgdG8gYGJwZl9qaXRfYWxsb2NfZXhlY2AsIHJlbmFtZWQgdG8gYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGluIHRoZSB4ODYtc3BlY2lmaWMgdHJhbXBvbGluZSBzaXplIGNhbGN1bGF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gbm93IHByZXNlbnQgaW4gdGhlIGdlbmVyYWwgQlBGIGNvcmUgY29kZS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGFsbG9jX25ld19wYWNrYCBhbmQgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIHRvIGluY2x1ZGUgY2hlY2tzIHRvIHByZXZlbnQgaWxsZWdhbCBpbnN0cnVjdGlvbnMgZnJvbSBiZWluZyB1c2VkIGFuZCB0byBzZXQgbWVtb3J5IHRvIFJPWCAoUmVhZCBPbmx5IGVYZWN1dGUpLiBNb3N0IG5vdGFibHksIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2Agbm93IHVzZXMgYHZtYWxsb2NgIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIG1lbW9yeSBhbGxvY2F0aW9uLgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIGxpa2VseSBpbXBhY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGNvbXBpbGVkIGFuZCBleGVjdXRlZCwgc28gdGhvc2UgYXJlIGRlZmluaXRlbHkgdGhlIGhvdCBzcG90cy4gSXQgYWxzbyBjaGFuZ2VzIGBhcmNoL3g4Ni9tbS9pbml0LmNgIHdpdGggcmVnYXJkcyB0byBtZW1vcnkgZmxhZ3MuCgpHaXZlbiB0aGUgc2NvcGUsIEkgaW1tZWRpYXRlbHkgZmxhZ2dlZCB0aGlzIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuIFRoZXNlIGtpbmRzIG9mIGNoYW5nZXMgdG8gY29yZSBCUEYgbG9naWMgYXJlIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gaGlkZS4KCk15IGtleSBmb2N1cyBhcmVhcyBmb3IgYW5hbHlzaXMgYXJlIGdvaW5nIHRvIGJlIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgKHNpbmNlIGl0JiMzOTtzIHg4Ni1zcGVjaWZpYyksIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgLCBhbmQgYGFsbG9jX25ld19wYWNrYC4gSSYjMzk7bSByZWFsbHkgY3VyaW91cyBob3cgdGhvc2UgY2hhbmdlcyBhZmZlY3QgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHByb2dyYW0gcGFja2luZy4KCkkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfQlBGX0pJVGAgaXMgZW5hYmxlZCwgYXMgdGhhdCBzZWVtcyBlc3NlbnRpYWwgZm9yIHRoaXMgcGF0Y2gsIGFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHByb2JhYmx5IG5lY2Vzc2FyeSBmb3IgQlBGIGZ1bmN0aW9uYWxpdHkgaW4gZ2VuZXJhbC4gQWZ0ZXIgYSBxdWljayBjaGVjaywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9KSVRgIGlzIGluZGVlZCBhIGhhcmQgcmVxdWlyZW1lbnQsIHdoaWNoIEkgY29uZmlybWVkIHdpdGggdGhlIGJ1aWxkIGRpcmVjdGl2ZXMgaW4gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4KCk15IHN0cmF0ZWd5IHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRob3NlIGZvY3VzIGZ1bmN0aW9ucywgZW5zdXJpbmcgdGhhdCB0aGUgbmV3IG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIFJPWCBtZW1vcnkgaGFuZGxpbmcgd29yayBhcyBleHBlY3RlZCBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgc2lkZS1jaGFubmVsIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byB0aG9yb3VnaGx5IGZ1enogdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDM6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ19wYWNrX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDssCiAgICAmIzM0O2FyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X2FsbG9jX2V4ZWNfcncmIzM0OywKICAgICYjMzQ7YWxsb2NfbmV3X3BhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfcGFja19hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyYjMzQ7LAogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9hbGxvY19leGVjX3J3JiMzNDssCiAgICAmIzM0O2FsbG9jX25ld19wYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24sIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCBjaGFuZ2luZyBob3cgQlBGIHByb2dyYW0gcGFja3MgYW5kIGRpc3BhdGNoZXJzIGFsbG9jYXRlIG1lbW9yeS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIwOjUwLjE2MTQ2MjY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDMxOTQ1MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcGFja19hbGxvY1wiLFxuICAgIFwiYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dcIixcbiAgICBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiLFxuICAgIFwiYnBmX2ppdF9hbGxvY19leGVjX3J3XCIsXG4gICAgXCJhbGxvY19uZXdfcGFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24sIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCBjaGFuZ2luZyBob3cgQlBGIHByb2dyYW0gcGFja3MgYW5kIGRpc3BhdGNoZXJzIGFsbG9jYXRlIG1lbW9yeS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjA6NTAuMTYxNDY3MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTMxOTY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg1YzZlNWUzYTA0NzkxZTQ4NGIwMWQ4ZDU5OTgzNDQzYjZjOThhNmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMTIgMDM6MjA6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jXFxuaW5kZXggZmI2NzIxN2ZkZGNkMzcuLjA3OWY4YzdlOWUzY2RlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL2luaXQuY1xcbisrKyBiL2FyY2gveDg2L21tL2luaXQuY1xcbkBAIC0xMTA3LDEwICsxMTA3LDEwIEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG4gXFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4gXFx0XFx0XFx0fSxcXG4gXFx0XFx0XFx0W0VYRUNNRU1fQlBGXSA9IHtcXG4tXFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBFWEVDTUVNX0tBU0FOX1NIQURPVyxcXG4rXFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBmbGFncyxcXG4gXFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4gXFx0XFx0XFx0XFx0LmVuZFxcdD0gTU9EVUxFU19FTkQsXFxuLVxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IFBBR0VfS0VSTkVMLFxcbitcXHRcXHRcXHRcXHQucGdwcm90XFx0PSBwZ3Byb3QsXFxuIFxcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXFxuIFxcdFxcdFxcdH0sXFxuIFxcdFxcdFxcdFtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggZGU3NTE1ZWExYmVhZTguLmIyZmVlYzgxZTIzMTJlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0zNzAzLDEzICszNzAzLDEyIEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXFxuLVxcdCAqIFRoaXMgd2lsbCBOT1QgY2F1c2UgZnJhZ21lbnRhdGlvbiBpbiBkaXJlY3QgbWFwLCBhcyB3ZSBkbyBub3RcXG4tXFx0ICogY2FsbCBzZXRfbWVtb3J5XyooKSBvbiB0aGlzIGJ1ZmZlci5cXG4gXFx0ICpcXG4gXFx0ICogV2UgY2Fubm90IHVzZSBrdm1hbGxvYyBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaW1hZ2UgdG8gYmUgaW5cXG4gXFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cXG4rXFx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuXFxuIFxcdCAqL1xcbi1cXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xcbitcXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xcbiBcXHRpZiAoIWltYWdlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuaW5kZXggMTRhY2IyNDU1NzQ2ZmMuLjMyZDUyOTdjNTU3ZTViIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuQEAgLTEzMzMsNiArMTMzMyw3IEBAIGJwZl9qaXRfYmluYXJ5X2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0cixcXG4gdm9pZCBicGZfaml0X2JpbmFyeV9mcmVlKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGRyKTtcXG4gdTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKTtcXG4gdm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpO1xcbiB2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xcbiB2b2lkIGJwZl9qaXRfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKTtcXG4gc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li5lMjA3NjY2N2IyNDUxNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXFxuQEAgLTkxNiw2ICs5MTYsMTEgQEAgc3RhdGljIExJU1RfSEVBRChwYWNrX2xpc3QpO1xcbiBcXG4gI2RlZmluZSBCUEZfUFJPR19DSFVOS19DT1VOVCAoQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSlcXG4gXFxuK3N0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7XFxuQEAgLTkyNywxNiArOTMyLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zXFxuIFxcdHBhY2stXFx1MDAzZXB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhCUEZfUFJPR19QQUNLX1NJWkUpO1xcbiBcXHRpZiAoIXBhY2stXFx1MDAzZXB0cilcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVxcdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XFxuIFxcdGJpdG1hcF96ZXJvKHBhY2stXFx1MDAzZWJpdG1hcCwgQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSk7XFxuIFxcbiBcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXFxuIFxcdFxcdHBhY2stXFx1MDAzZWFyY2hfZmx1c2hfbmVlZGVkID0gdHJ1ZTtcXG4tXFx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stXFx1MDAzZXB0cik7XFxuLVxcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stXFx1MDAzZXB0cixcXG4tXFx0XFx0XFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFicGZfaml0X21lbV9pc19yb3goKSkge1xcbitcXHRcXHRicGZfZmlsbF9pbGxfaW5zbnMocGFjay1cXHUwMDNlcHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpO1xcbitcXHRcXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cXHUwMDNlcHRyKTtcXG4rXFx0XFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cXHUwMDNlcHRyLFxcbitcXHRcXHRcXHRcXHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBhY2stXFx1MDAzZWxpc3QsIFxcdTAwMjZwYWNrX2xpc3QpO1xcbiBcXHRyZXR1cm4gcGFjaztcXG4gXFxuQEAgLTk2NSw3ICs5NzIsNyBAQCB2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbFxcbiBcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcIkJQRjogUHJlZGljdG9ycyBub3QgZmx1c2hlZCBmb3IgYWxsb2NhdGlvbnMgZ3JlYXRlciB0aGFuIEJQRl9QUk9HX1BBQ0tfU0laRVxcXFxuXFxcIik7XFxuIFxcdFxcdHNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpO1xcbiBcXHRcXHRwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoc2l6ZSk7XFxuLVxcdFxcdGlmIChwdHIpIHtcXG4rXFx0XFx0aWYgKHB0ciBcXHUwMDI2XFx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcXG4gXFx0XFx0XFx0aW50IGVycjtcXG4gXFxuIFxcdFxcdFxcdGJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpO1xcbkBAIC0xMTE2LDEyICsxMTIzLDE3IEBAIHZvaWQgYnBmX2ppdF91bmNoYXJnZV9tb2RtZW0odTMyIHNpemUpXFxuIFxcdGF0b21pY19sb25nX3N1YihzaXplLCBcXHUwMDI2YnBmX2ppdF9jdXJyZW50KTtcXG4gfVxcbiBcXG4tdm9pZCAqX193ZWFrIGJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpXFxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpO1xcbiB9XFxuIFxcbi12b2lkIF9fd2VhayBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxcbit2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHJldHVybiBleGVjbWVtX2FsbG9jX3J3KEVYRUNNRU1fQlBGLCBzaXplKTtcXG4rfVxcbitcXG4rdm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxcbiB7XFxuIFxcdGV4ZWNtZW1fZnJlZShhZGRyKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXFxuaW5kZXggZWEyZDYwZGMxZmVlYjcuLmQ4NWIzZThhZDJlNGVlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXFxuKysrIGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcXG5AQCAtMTQ4LDcgKzE0OCwxMCBAQCB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxcbiBcXHRcXHRkLVxcdTAwM2VpbWFnZSA9IGJwZl9wcm9nX3BhY2tfYWxsb2MoUEFHRV9TSVpFLCBicGZfaml0X2ZpbGxfaG9sZV93aXRoX3plcm8sIGZhbHNlKTtcXG4gXFx0XFx0aWYgKCFkLVxcdTAwM2VpbWFnZSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGQtXFx1MDAzZXJ3X2ltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7XFxuK1xcdFxcdC8qIGQtXFx1MDAzZXJ3X2ltYWdlIGRvZXNuJ3QgbmVlZCB0byBiZSBpbiBtb2R1bGUgbWVtb3J5IHJhbmdlLCBzbyB3ZVxcbitcXHRcXHQgKiBjYW4gdXNlIHZtYWxsb2MuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkLVxcdTAwM2Vyd19pbWFnZSA9IHZtYWxsb2MoUEFHRV9TSVpFKTtcXG4gXFx0XFx0aWYgKCFkLVxcdTAwM2Vyd19pbWFnZSkge1xcbiBcXHRcXHRcXHRicGZfcHJvZ19wYWNrX2ZyZWUoZC1cXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XFxuIFxcdFxcdFxcdGQtXFx1MDAzZWltYWdlID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjA6NTAuNjU3MzU3MDA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDk5MzYwNDMyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ1wiLFxuICAgIFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCIsXG4gICAgXCJicGZfaml0X2FsbG9jX2V4ZWNfcndcIixcbiAgICBcImFsbG9jX25ld19wYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1YzZlNWUzYTA0NzkxZTQ4NGIwMWQ4ZDU5OTgzNDQzYjZjOThhNmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAwMzoyMDo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuY1xuaW5kZXggZmI2NzIxN2ZkZGNkMzcuLjA3OWY4YzdlOWUzY2RlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jXG4rKysgYi9hcmNoL3g4Ni9tbS9pbml0LmNcbkBAIC0xMTA3LDEwICsxMTA3LDEwIEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4gXHRcdFx0fSxcbiBcdFx0XHRbRVhFQ01FTV9CUEZdID0ge1xuLVx0XHRcdFx0LmZsYWdzXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxuK1x0XHRcdFx0LmZsYWdzXHQ9IGZsYWdzLFxuIFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuIFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbi1cdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4rXHRcdFx0XHQucGdwcm90XHQ9IHBncHJvdCxcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4gXHRcdFx0fSxcbiBcdFx0XHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uYjJmZWVjODFlMjMxMmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTM3MDMsMTMgKzM3MDMsMTIgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXG4tXHQgKiBUaGlzIHdpbGwgTk9UIGNhdXNlIGZyYWdtZW50YXRpb24gaW4gZGlyZWN0IG1hcCwgYXMgd2UgZG8gbm90XG4tXHQgKiBjYWxsIHNldF9tZW1vcnlfKigpIG9uIHRoaXMgYnVmZmVyLlxuIFx0ICpcbiBcdCAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluXG4gXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxuK1x0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuXG4gXHQgKi9cbi1cdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7XG4rXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xuIFx0aWYgKCFpbWFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4zMmQ1Mjk3YzU1N2U1YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMzMzLDYgKzEzMzMsNyBAQCBicGZfaml0X2JpbmFyeV9hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXG4gdm9pZCBicGZfaml0X2JpbmFyeV9mcmVlKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGRyKTtcbiB1NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpO1xuIHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpO1xuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpO1xuIHZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcik7XG4gdm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpmcCk7XG4gc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCA0N2ZlMDQ3YWQzMGI4OC4uZTIwNzY2NjdiMjQ1MTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC05MTYsNiArOTE2LDExIEBAIHN0YXRpYyBMSVNUX0hFQUQocGFja19saXN0KTtcbiBcbiAjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxuIFxuK3N0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxuK3tcbitcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7XG5AQCAtOTI3LDE2ICs5MzIsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNcbiBcdHBhY2stXHUwMDNlcHRyID0gYnBmX2ppdF9hbGxvY19leGVjKEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4gXHRpZiAoIXBhY2stXHUwMDNlcHRyKVxuIFx0XHRnb3RvIG91dDtcbi1cdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcbiBcdGJpdG1hcF96ZXJvKHBhY2stXHUwMDNlYml0bWFwLCBCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKTtcbiBcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmJwZl9wcmVkX2ZsdXNoX2VuYWJsZWQpKVxuIFx0XHRwYWNrLVx1MDAzZWFyY2hfZmx1c2hfbmVlZGVkID0gdHJ1ZTtcbi1cdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVx1MDAzZXB0cik7XG4tXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVx1MDAzZXB0cixcbi1cdFx0XHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbitcdFx0YnBmX2ZpbGxfaWxsX2luc25zKHBhY2stXHUwMDNlcHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpO1xuK1x0XHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cdTAwM2VwdHIpO1xuK1x0XHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVx1MDAzZXB0cixcbitcdFx0XHRcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cGFjay1cdTAwM2VsaXN0LCBcdTAwMjZwYWNrX2xpc3QpO1xuIFx0cmV0dXJuIHBhY2s7XG4gXG5AQCAtOTY1LDcgKzk3Miw3IEBAIHZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sXG4gXHRcdFx0cHJfd2Fybl9vbmNlKFwiQlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXFxuXCIpO1xuIFx0XHRzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTtcbiBcdFx0cHRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xuLVx0XHRpZiAocHRyKSB7XG4rXHRcdGlmIChwdHIgXHUwMDI2XHUwMDI2ICFicGZfaml0X21lbV9pc19yb3goKSkge1xuIFx0XHRcdGludCBlcnI7XG4gXG4gXHRcdFx0YnBmX2ZpbGxfaWxsX2luc25zKHB0ciwgc2l6ZSk7XG5AQCAtMTExNiwxMiArMTEyMywxNyBAQCB2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxuIFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFx1MDAyNmJwZl9qaXRfY3VycmVudCk7XG4gfVxuIFxuLXZvaWQgKl9fd2VhayBicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuIFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpO1xuIH1cbiBcbi12b2lkIF9fd2VhayBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xuK31cbitcbit2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXG4ge1xuIFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXG5pbmRleCBlYTJkNjBkYzFmZWViNy4uZDg1YjNlOGFkMmU0ZWUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xuKysrIGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcbkBAIC0xNDgsNyArMTQ4LDEwIEBAIHZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXG4gXHRcdGQtXHUwMDNlaW1hZ2UgPSBicGZfcHJvZ19wYWNrX2FsbG9jKFBBR0VfU0laRSwgYnBmX2ppdF9maWxsX2hvbGVfd2l0aF96ZXJvLCBmYWxzZSk7XG4gXHRcdGlmICghZC1cdTAwM2VpbWFnZSlcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xuK1x0XHQvKiBkLVx1MDAzZXJ3X2ltYWdlIGRvZXNuJ3QgbmVlZCB0byBiZSBpbiBtb2R1bGUgbWVtb3J5IHJhbmdlLCBzbyB3ZVxuK1x0XHQgKiBjYW4gdXNlIHZtYWxsb2MuXG4rXHRcdCAqL1xuK1x0XHRkLVx1MDAzZXJ3X2ltYWdlID0gdm1hbGxvYyhQQUdFX1NJWkUpO1xuIFx0XHRpZiAoIWQtXHUwMDNlcndfaW1hZ2UpIHtcbiBcdFx0XHRicGZfcHJvZ19wYWNrX2ZyZWUoZC1cdTAwM2VpbWFnZSwgUEFHRV9TSVpFKTtcbiBcdFx0XHRkLVx1MDAzZWltYWdlID0gTlVMTDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIwOjUwLjY1NzM1OTE4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDA0NDg3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEpJVCBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIGhvdyB0aGUgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiB3b3Jrcy4gSXQncyBlc3NlbnRpYWxseSBzd2FwcGluZyBvdXQgdGhlIGN1cnJlbnQgYGJwZl9qaXRfYWxsb2NfZXhlY2Agd2l0aCBlaXRoZXIgYGV4ZWNtZW1fYWxsb2NgIG9yIHRoZSBuZXcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIHdoaWNoIHRoZW4gdXNlcyBgZXhlY21lbV9hbGxvY19yd2AuIFNlZW1zIGxpa2UgYSBtb3ZlIHRvd2FyZCBtb3JlIGNvbnRyb2wgb3IgZmxleGliaWxpdHkgaW4gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgbWVtb3J5IHJlZ2lvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMgdG8gYGFyY2gveDg2L21tL2luaXQuY2Agd2l0aCB0aGUgYEVYRUNNRU1fQlBGYCBmbGFncyBhbmQgYHBncHJvdGAuIFRoZSBjaGVjayBpbiBga2VybmVsL2JwZi9jb3JlLmNgIGZvciBgYnBmX2ppdF9tZW1faXNfcm94KClgIGFuZCB0aGUgY29uZGl0aW9uYWwgYHNldF9tZW1vcnlfcm94YCBzdWdnZXN0cyB3ZSdyZSBnZXR0aW5nIHNtYXJ0ZXIgYWJvdXQgcmVhZC1vbmx5IG1lbW9yeSByZWdpb25zLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjYWxscy4gQW5kIHRoZSBjaGFuZ2UgdG8gdXNlIGB2bWFsbG9jYCBpbiBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgIGZvciBgZC1cdTAwM2Vyd19pbWFnZWAgaXMgaW50ZXJlc3RpbmcuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBtZWFucyB3ZSd2ZSBjaGFuZ2VkIGhvdyBCUEYgSklUIGFuZCBleGVjbWVtIGJlaGF2ZS4gRnJvbSBhbiBhbmFseXNpcyBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhY3R1YWxseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGggYW5kIGlmIGl0J3MgZnV6emFibGUuIEJQRiBKSVQgKmlzKiBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgaW50byBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIGZvY3VzaW5nIG9uIHJlYWNoYWJpbGl0eSBhbmQgZnV6emluZzogSSdsbCBuZWVkIHRvIGNoZWNrIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLCBgYnBmX2ppdF9hbGxvY19leGVjYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYW5kIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgcGF0aC4gYENPTkZJR19CUEZfSklUYCBpcyBhIG11c3QsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhbm90aGVyIG9idmlvdXMgb25lLiBTaW5jZSBpdCdzIHRvdWNoaW5nIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCBJJ2xsIGFkZCBgQ09ORklHX1g4NmAgdG8gdGhlIGxpc3QuXG5cbkknbSBkZWZpbml0ZWx5IGdvaW5nIHRvIGxldmVyYWdlIG15IGV4aXN0aW5nIHRvb2xpbmcgdG8gdmVyaWZ5IHRoZXNlIGFzc3VtcHRpb25zIGFuZCByZWFjaGFiaWxpdHkgcGF0aHMuIFRpbWUgdG8gZmlyZSBpdCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIwOjU2Ljk5NzgwOTg5N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgxOTUwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9qaXRfYWxsb2NfZXhlY19yd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY5OD1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MDgtXFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcwOTpcXHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS5cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxMC1cXHQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcxMTpcXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEyLVxcdGlmICghaW1hZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTEzMzU9dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMzM2OnZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTMzNy12b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTEyNj12b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTEzMC1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxMTMxOnZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXFxua2VybmVsL2JwZi9jb3JlLmMtMTEzMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIwOjU5LjM3OTc2NTIxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjUzMjc1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBCUEYgQ29kZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGZvY3VzIG9mIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyB3aXRoaW4gdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3Vic3lzdGVtLiBUaGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYXJlOiBgYnBmX3Byb2dfcGFja19hbGxvY2AsIGBhbGxvY19uZXdfcGFja2AsIGBicGZfaml0X2FsbG9jX2V4ZWNgLCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYW5kIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLiBUaGF0J3MgYSBwcmV0dHkgZGl2ZXJzZSBzZXQsIHNwYW5uaW5nIHBhY2sgYWxsb2NhdGlvbiwgSklUIG1lbW9yeSBhbGxvY2F0aW9uIChib3RoIHJlYWQtb25seSBhbmQgcmVhZC13cml0ZSByZWdpb25zLCBwcmVzdW1hYmx5KSwgZGlzcGF0Y2hlciBjaGFuZ2VzLCBhbmQgcG90ZW50aWFsbHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIHdpdGggdGhlIHRyYW1wb2xpbmUgc2l6ZS5cblxuTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9jb3JlLmNgIGFuZCBzdGFydCB3aXRoIHRoZSBgYnBmX3Byb2dfcGFja19hbGxvY2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFyY2hpbmcgc3RyYXRlZ3kgYmVpbmcgaW1wbGVtZW50ZWQgaGVyZS4gRnJvbSB0aGVyZSwgSSBleHBlY3QgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXJzLiBUaGUgSklUIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFyZSBjbGVhcmx5IGltcG9ydGFudCBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIFRoZSBkaXNwYXRjaGVyIGNoYW5nZSBoaW50cyBhdCBwb3RlbnRpYWxseSBuZXcgcHJvZ3JhbSBkaXNwYXRjaGluZyBzdHJhdGVnaWVzLCBhbmQgdGhlIHRyYW1wb2xpbmUgc2l6ZSBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIEpJVCBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHJlYWQvd3JpdGUgYXNwZWN0LCBhbmQgaXRzIGltcGFjdCBvbiBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UuIExldCdzIHNlZSB3aGF0IGBicGZfcHJvZ19wYWNrX2FsbG9jYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjE6MDMuMjQ1MDk1NTY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTg4NjcyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfcGFja19hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yODcxPXZvaWQgKmFyY2hfYWxsb2NfYnBmX3RyYW1wb2xpbmUodW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjg3Mi17XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjg3MzpcXHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjg3NC19XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE3OTE9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE3OTIte1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTc5MzpcXHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzk0LX1cXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTg5PXZvaWQgKmFyY2hfYWxsb2NfYnBmX3RyYW1wb2xpbmUodW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy01OTAte1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTkxOlxcdHJldHVybiBicGZfcHJvZ19wYWNrX2FsbG9jKHNpemUsIGJwZl9qaXRfZmlsbF9pbGxfaW5zbnMsIGZhbHNlKTtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTU5Mi19XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMjI9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMjMte1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMyNDpcXHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBicGZfZmlsbF9pbGxfaW5zbnMsIGZhbHNlKTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMjUtfVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM2NTQ9dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1NS17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2NTY6XFx0cmV0dXJuIGJwZl9wcm9nX3BhY2tfYWxsb2Moc2l6ZSwgaml0X2ZpbGxfaG9sZSwgZmFsc2UpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjU3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTM0MD1icGZfaml0X2JpbmFyeV9wYWNrX2hkcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEzNDEtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMzQyOnZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sIHdhc19jbGFzc2ljKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEzNDMtdm9pZCBicGZfcHJvZ19wYWNrX2ZyZWUodm9pZCAqcHRyLCB1MzIgc2l6ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz05MjQ9c3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTk1NS1cXG5rZXJuZWwvYnBmL2NvcmUuYzo5NTY6dm9pZCAqYnBmX3Byb2dfcGFja19hbGxvYyh1MzIgc2l6ZSwgYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMsIGJvb2wgd2FzX2NsYXNzaWMpXFxua2VybmVsL2JwZi9jb3JlLmMtOTU3LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTExOTc9YnBmX2ppdF9iaW5hcnlfcGFja19hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjE0LVxcdFxcdHJldHVybiBOVUxMO1xcbmtlcm5lbC9icGYvY29yZS5jOjEyMTU6XFx0cm9faGVhZGVyID0gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBicGZfZmlsbF9pbGxfaW5zbnMsIHdhc19jbGFzc2ljKTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjE2LVxcdGlmICghcm9faGVhZGVyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYz0xMzc9dm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcXG4tLVxcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTE0Ny1cXHRpZiAoIWQtXFx1MDAzZWltYWdlKSB7XFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6MTQ4OlxcdFxcdGQtXFx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTE0OS1cXHRcXHRpZiAoIWQtXFx1MDAzZWltYWdlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTowNS4xNjM5NjgzN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODQ2NTI3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBSZWxhdGVkIHRvIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IEJQRiBKSVQgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50LCBwb3RlbnRpYWxseSBoaWdoLWltcGFjdCBjaGFuZ2UgYmVjYXVzZSBpdCB0b3VjaGVzIG9uIEJQRiBKSVQgYW5kIGBleGVjbWVtYCDigJMgdGhlc2UgYXJlIGNydWNpYWwgYXJlYXMuICBUaGUgcGF0Y2gncyBjb3JlIGlzIG1vZGlmeWluZyBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLiBJdOKAmXMgc3dpdGNoaW5nIGZyb20gdGhlIHN0YW5kYXJkIGBicGZfaml0X2FsbG9jX2V4ZWNgIGZ1bmN0aW9uIHRvIHV0aWxpemluZyBgZXhlY21lbV9hbGxvY2Agb3IgdGhlIG5ldyBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCB3aXRoIGBleGVjbWVtX2FsbG9jX3J3YC4gIEl0IGxvb2tzIGxpa2UgdGhlcmXigJlzIGFsc28gbW9kaWZpY2F0aW9ucyB3aXRoaW4gYGFyY2gveDg2L21tL2luaXQuY2AsIHNwZWNpZmljYWxseSBhZGp1c3RtZW50cyB0byB0aGUgYEVYRUNNRU1fQlBGYCBmbGFncyBhbmQgYHBncHJvdGAgdmFsdWVzIGZvciBtZW1vcnkgcHJvdGVjdGlvbi5cblxuQmV5b25kIHRoYXQsIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBzb21lIGNoZWNrczsgSSBzZWUgYSBuZXcgYGJwZl9qaXRfbWVtX2lzX3JveCgpYCBmdW5jdGlvbiBiZWluZyBpbnRyb2R1Y2VkLCBhbmQgY2hhbmdlcyB0byBhdm9pZCBjYWxsaW5nIGBzZXRfbWVtb3J5X3JveGAgaWYgdGhlIG1lbW9yeSBpcyBhbHJlYWR5IFJlYWQgT25seSBFeGVjdXRlIChST1gpLiAgSSBhbHNvIG5vdGljZWQgdGhhdCB0aGUgcGF0Y2ggaXMgdXBkYXRpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgdG8gdXNlIHRoZSBuZXcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYWxsb2NhdGlvbi4gIEFkZGl0aW9uYWxseSwgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYCBpcyBzd2l0Y2hpbmcgdG8gYHZtYWxsb2NgIGluc3RlYWQgb2YgYGJwZl9qaXRfYWxsb2NfZXhlY2AgZm9yIHRoZSBgZC1cdTAwM2Vyd19pbWFnZWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgaGVyZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSB3b3J0aCBmdXp6aW5nP1wiLiBCUEYgSklULCBpbiBteSBleHBlcmllbmNlLCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGl0cyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMuIEknbGwgbmVlZCB0byBsb29rIGF0OlxuXG4qICAgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWBcbiogICBgYnBmX2ppdF9hbGxvY19leGVjYFxuKiAgIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgXG4qICAgYGJwZl9wcm9nX3BhY2tfYWxsb2NgXG4qICAgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYFxuXG5UaGVzZSBhcmUga2V5IGZ1bmN0aW9ucyBJIG11c3QgdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgaW4gcmVsYXRpb24gdG8gdGhlIGNoYW5nZXMuXG5cbkknbGwgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBuZXh0LiBJICprbm93KiBJIG5lZWQgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHBhdGggdG8gYmUgYWN0aXZlLiBHaXZlbiB0aGUgYGFyY2gveDg2YCBwYXRoLCBvZiBjb3Vyc2UsIEkgbmVlZCBgQ09ORklHX1g4NmAuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9scyB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uOlxuXG4qICAgYGJwZl9wcm9nX3BhY2tfYWxsb2NgXG4qICAgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYFxuKiAgIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgXG4qICAgYGFsbG9jX25ld19wYWNrYFxuKiAgIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgXG5cbkknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBpcyByZWFjaGFibGUuIEJQRiBkaXNwYXRjaGVycyBhcmUsIGFzIEkga25vdywgdXNlZCBmb3IgbWFuYWdpbmcgQlBGIHByb2dyYW1zLCBzbyBJJ2xsIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGF0IGZyYW1ld29yay5cblxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzI3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIxOjIwLjAxMDQ5NzUxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU4Nzk1NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MTUyND1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTU4OS0jZGVmaW5lIEJQRl9ESVNQQVRDSEVSX1BUUihuYW1lKSAoXFx1MDAyNmJwZl9kaXNwYXRjaGVyXyMjbmFtZSlcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE1OTA6dm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE1OTEtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICp0byk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2MjM9c3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKSB7fVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjI3LSNkZWZpbmUgQlBGX0RJU1BBVENIRVJfUFRSKG5hbWUpIE5VTExcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mjg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2MjktXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM9MTA2PXN0YXRpYyB2b2lkIGJwZl9kaXNwYXRjaGVyX3VwZGF0ZShzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIGludCBwcmV2X251bV9wcm9ncylcXG4tLVxcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTEzNi1cXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYzoxMzc6dm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy0xMzgtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICp0bylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMDI5PXZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDMwLXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAzMTpcXHRicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhCUEZfRElTUEFUQ0hFUl9QVFIoeGRwKSwgcHJldl9wcm9nLCBwcm9nKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAzMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIxOjIxLjg2OTI5NzUwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzQxODM0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRpZmZlcmVudCB3YXlzIHRoZXNlIEJQRiBmdW5jdGlvbnMgYXJlIGJlaW5nIHRyaWdnZXJlZCwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIGZvciB0aGlzIG5ldyBwcm9qZWN0LiBGaXJzdCwgSSBzZWUgdGhhdCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIGNhbiBiZSBjYWxsZWQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggWERQIHByb2dyYW0gY2hhbmdlcyAtIHRoYXQncyBhIGtleSBhcmVhIHRvIGNvbnNpZGVyLiBUaGVuLCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgcmVhY2hhYmxlIHZpYSBCUEYgSklULCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGZvciBvcHRpbWl6YXRpb24gYW5kIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIExhc3RseSwgYW5kIHRoaXMgaXMgd2hlcmUgSSdsbCBzdGFydCBkaWdnaW5nIGEgYml0IGRlZXBlciwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgY29ubmVjdGVkIHRvIHRoZSBCUEYgdHJhbXBvbGluZSBtZWNoYW5pc20uIEdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSdtIHdvcmtpbmcgb24sIHRoZSB0cmFtcG9saW5lIHNpemUgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCB0byBhbmFseXplIHJpZ2h0IG5vdy4gTGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXJhbWV0ZXJzLCBlZGdlIGNhc2VzLCBhbmQgaW1wYWN0IG9uIG15IHNwZWNpZmljIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ2MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIxOjI1LjIwMzQ4MjkwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MTM5MTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9Mjg0ND1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI4NDgtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjg0OTppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI4NTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjE0ND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE4MS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIxODI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxODMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9ODEyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTkxLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTE5MjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5My1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMDIyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMDYtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzA3OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzA4LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTA9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjk2NS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5NjY6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKm9yaWdfY2FsbClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjY5PWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY5Ny1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY5ODppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjk5LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTEzMTg9aW50IF9fbXVzdF9jaGVjayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjEzMTk6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTEzMjAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NTk3PWludCBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxMy1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjE0OlxcdHNpemUgPSBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUobW9kZWwsIGZsYWdzLCB0bm9kZXMsIHN0dWJfZnVuYyk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxNS1cXHRpZiAoc2l6ZSBcXHUwMDNjPSAwKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MjQtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzI1OlxcdHNpemUgPSBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoXFx1MDAyNnRyLVxcdTAwM2VmdW5jLm1vZGVsLCB0ci1cXHUwMDNlZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzI2LVxcdFxcdFxcdFxcdFxcdHRub2RlcywgdHItXFx1MDAzZWZ1bmMuYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNDYxPWludCBfX3dlYWsgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NjYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTQ2NzppbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDY4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjE6MjYuOTk0ODc5Nzk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTQ3ODUzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBCUEYgdHJhbXBvbGluZXMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgdXBkYXRlIHByb2Nlc3MuIEkgc2VlIHRoYXQgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgY2VudHJhbCwgYXMgaXQncyBjYWxsZWQgZnJvbSBib3RoIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYC4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgdHJpZ2dlcmVkIHdoZW4gd2UncmUgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyB0byB0aGVzZSB0cmFtcG9saW5lcywgd2hpY2ggaXMgdGhlIGtleSBwYXJ0IG9mIHRoZSBvcGVyYXRpb24uIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgd29ya3MsIEkgdGhpbmsgaXQncyB3b3J0aCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTozMC4zMDk2NjcyNDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM3OTI5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9hbGxvY19leGVjX3J3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjk4PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcwOC1cXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzA5OlxcdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGJwZl9qaXRfYWxsb2NfZXhlY19ydygpLlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEwLVxcdCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzExOlxcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MTItXFx0aWYgKCFpbWFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTMzNT12b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEzMzY6dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzM3LXZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xMTI2PXZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xMTMwLVxcbmtlcm5lbC9icGYvY29yZS5jOjExMzE6dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5rZXJuZWwvYnBmL2NvcmUuYy0xMTMyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjE6MzIuMTEzNDY1NDYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTE1MzgzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVyaWVuY2VkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqRGVjb2RpbmcgdGhlIEJQRiBFeGVjdXRpb24gTWVtb3J5IFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L21tL2luaXQuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZm9jdXMgaXMgYXJvdW5kIGhvdyB3ZSdyZSBoYW5kbGluZyBgRVhFQ01FTV9CUEZgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGV5J3JlIGNoYW5naW5nIHRoZSBtZW1vcnkgc2V0dXAsIGxpa2VseSB0aGUgcGVybWlzc2lvbnMgb3IgYXR0cmlidXRlcywgYXNzb2NpYXRlZCB3aXRoIHJ1bm5pbmcgQlBGIGNvZGUgb24geDg2LlwiICBUaGUga2V5IGlzIHRoZSBzd2l0Y2ggdG8gbGV2ZXJhZ2luZyBgZmxhZ3NgIGFuZCBgcGdwcm90YCB3aXRoaW4gYGV4ZWNtZW1fYXJjaF9zZXR1cGAuXG5cbk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpcmVjdGx5IG1hbmlwdWxhdGluZyB0aGVzZSB2YXJpYWJsZXMsIGBmbGFnc2AgYW5kIGBwZ3Byb3RgPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSeKAmWxsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBleGFjdCBkZWZpbml0aW9ucyBhbmQgcG9zc2libGUgdmFsdWVzLCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIGhvdyB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSBhcmUgY29uZmlndXJlZCBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucy4gSSBhbHNvIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZSBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIElzIHRoaXMgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBhIG5lY2Vzc2FyeSBzZWN1cml0eSBoYXJkZW5pbmcsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/IFdoYXQncyB0aGUgY29udGV4dCBmb3IgdGhlIGNoYW5nZT8gSSBiZXR0ZXIgZ28gcmV2aWV3IHRoZSBgZXhlY21lbV9hcmNoX3NldHVwYCBmdW5jdGlvbiByaWdodCBub3cgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHdoYXQncyBnb2luZyBvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTozNS43MjUwMTAzMDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzkxNTUyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY21lbV9hcmNoX3NldHVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21tL2luaXQuYz00NDk9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL2FybS9tbS9pbml0LmMtNDUwLVxcbmFyY2gvYXJtL21tL2luaXQuYzo0NTE6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvYXJtL21tL2luaXQuYy00NTIte1xcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmM9NTAzPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTA0LVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjUwNTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTA2LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYz0yNDA9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMjQxLVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoyNDI6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYy0yNDMte1xcbi0tXFxuYXJjaC9taXBzL21tL2luaXQuYz01NjI9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL21pcHMvbW0vaW5pdC5jLTU2My1cXG5hcmNoL21pcHMvbW0vaW5pdC5jOjU2NDpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9taXBzL21tL2luaXQuYy01NjUte1xcbi0tXFxuYXJjaC9uaW9zMi9tbS9pbml0LmM9MTM3PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9uaW9zMi9tbS9pbml0LmMtMTM4LVxcbmFyY2gvbmlvczIvbW0vaW5pdC5jOjEzOTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9uaW9zMi9tbS9pbml0LmMtMTQwLXtcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYz05Nzc9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtOTc4LVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYzo5Nzk6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy05ODAte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL21lbS5jPTM5Mj1zdGF0aWMgdm9pZCBwcmVhbGxvY19leGVjbWVtX3BndGFibGUodm9pZCkgeyB9XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmMtMzk0LVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYzozOTU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYy0zOTYte1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM9MTQ0NT1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE0NDYtXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM6MTQ0NzpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ0OC17XFxuLS1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTI5Mz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvczM5MC9tbS9pbml0LmMtMjk0LVxcbmFyY2gvczM5MC9tbS9pbml0LmM6Mjk1OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI5Ni17XFxuLS1cXG5hcmNoL3NwYXJjL21tL2V4ZWNtZW0uYz01PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmMtNi1cXG5hcmNoL3NwYXJjL21tL2V4ZWNtZW0uYzo3OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL3NwYXJjL21tL2V4ZWNtZW0uYy04LXtcXG4tLVxcbmFyY2gveDg2L21tL2luaXQuYz0xMDYwPXZvaWQgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTA2NS1cXG5hcmNoL3g4Ni9tbS9pbml0LmM6MTA2NjpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC94ODYvbW0vaW5pdC5jLTEwNjcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmg9MTE0PXN0cnVjdCBleGVjbWVtX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTE4LS8qKlxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oOjExOTogKiBleGVjbWVtX2FyY2hfc2V0dXAgLSBkZWZpbmUgcGFyYW1ldGVycyBmb3IgYWxsb2NhdGlvbnMgb2YgZXhlY3V0YWJsZSBtZW1vcnlcXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xMjAtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTEzMC0gKi9cXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaDoxMzE6c3RydWN0IGV4ZWNtZW1faW5mbyAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTEzMi1cXG4tLVxcbm1tL2V4ZWNtZW0uYz01Mzc9c3RhdGljIHZvaWQgZXhlY21lbV9pbml0X21pc3Npbmcoc3RydWN0IGV4ZWNtZW1faW5mbyAqaW5mbylcXG4tLVxcbm1tL2V4ZWNtZW0uYy01NTgtXFxubW0vZXhlY21lbS5jOjU1OTpzdHJ1Y3QgZXhlY21lbV9pbmZvICogX193ZWFrIGV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbm1tL2V4ZWNtZW0uYy01NjAte1xcbi0tXFxubW0vZXhlY21lbS5jPTU2ND1zdGF0aWMgdm9pZCBfX2luaXQgX19leGVjbWVtX2luaXQodm9pZClcXG5tbS9leGVjbWVtLmMtNTY1LXtcXG5tbS9leGVjbWVtLmM6NTY2OlxcdHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8gPSBleGVjbWVtX2FyY2hfc2V0dXAoKTtcXG5tbS9leGVjbWVtLmMtNTY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTozNy42NjQxNzQ3OThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NDI4NDk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgeDg2IE1lbW9yeSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byB0aGUgbWVtb3J5IGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgZm9yIHRoaXMsIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gYGFyY2gveDg2L21tL2luaXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQgZm9yIHg4NiBzeXN0ZW1zLCBzbyBpdCdzIGEgbmF0dXJhbCBzdGFydGluZyBwb2ludC4gVG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvZGUgYmxvY2sgZWZmaWNpZW50bHksIEknbSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDExMDcuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBhcmVhIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24sIGFuZCBJIGV4cGVjdCBJJ2xsIGJlIGFibGUgdG8gd29yayBvdXR3YXJkcyBmcm9tIHRoZXJlLCBob3BlZnVsbHkgZmluZGluZyB3aGF0IEknbSBsb29raW5nIGZvci4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc2NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIxOjQwLjYwODQ2MzEzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0XFx0ZmxhZ3MgPSBFWEVDTUVNX0tBU0FOX1NIQURPVyB8IEVYRUNNRU1fUk9YX0NBQ0hFO1xcbjEwODE6XFx0XFx0fSBlbHNlIHtcXG4xMDgyOlxcdFxcdFxcdHBncHJvdCA9IFBBR0VfS0VSTkVMO1xcbjEwODM6XFx0XFx0XFx0ZmxhZ3MgPSBFWEVDTUVNX0tBU0FOX1NIQURPVztcXG4xMDg0OlxcdFxcdH1cXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0ZXhlY21lbV9pbmZvID0gKHN0cnVjdCBleGVjbWVtX2luZm8pe1xcbjEwODc6XFx0XFx0XFx0LnJhbmdlcyA9IHtcXG4xMDg4OlxcdFxcdFxcdFxcdFtFWEVDTUVNX01PRFVMRV9URVhUXSA9IHtcXG4xMDg5OlxcdFxcdFxcdFxcdFxcdC5mbGFnc1xcdD0gZmxhZ3MsXFxuMTA5MDpcXHRcXHRcXHRcXHRcXHQuc3RhcnRcXHQ9IHN0YXJ0LFxcbjEwOTE6XFx0XFx0XFx0XFx0XFx0LmVuZFxcdD0gTU9EVUxFU19FTkQsXFxuMTA5MjpcXHRcXHRcXHRcXHRcXHQucGdwcm90XFx0PSBwZ3Byb3QsXFxuMTA5MzpcXHRcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbjEwOTQ6XFx0XFx0XFx0XFx0fSxcXG4xMDk1OlxcdFxcdFxcdFxcdFtFWEVDTUVNX0tQUk9CRVNdID0ge1xcbjEwOTY6XFx0XFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBmbGFncyxcXG4xMDk3OlxcdFxcdFxcdFxcdFxcdC5zdGFydFxcdD0gc3RhcnQsXFxuMTA5ODpcXHRcXHRcXHRcXHRcXHQuZW5kXFx0PSBNT0RVTEVTX0VORCxcXG4xMDk5OlxcdFxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IFBBR0VfS0VSTkVMX1JPWCxcXG4xMTAwOlxcdFxcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXFxuMTEwMTpcXHRcXHRcXHRcXHR9LFxcbjExMDI6XFx0XFx0XFx0XFx0W0VYRUNNRU1fRlRSQUNFXSA9IHtcXG4xMTAzOlxcdFxcdFxcdFxcdFxcdC5mbGFnc1xcdD0gZmxhZ3MsXFxuMTEwNDpcXHRcXHRcXHRcXHRcXHQuc3RhcnRcXHQ9IHN0YXJ0LFxcbjExMDU6XFx0XFx0XFx0XFx0XFx0LmVuZFxcdD0gTU9EVUxFU19FTkQsXFxuMTEwNjpcXHRcXHRcXHRcXHRcXHQucGdwcm90XFx0PSBwZ3Byb3QsXFxuMTEwNzpcXHRcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbjExMDg6XFx0XFx0XFx0XFx0fSxcXG4xMTA5OlxcdFxcdFxcdFxcdFtFWEVDTUVNX0JQRl0gPSB7XFxuMTExMDpcXHRcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IGZsYWdzLFxcbjExMTE6XFx0XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4xMTEyOlxcdFxcdFxcdFxcdFxcdC5lbmRcXHQ9IE1PRFVMRVNfRU5ELFxcbjExMTM6XFx0XFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gcGdwcm90LFxcbjExMTQ6XFx0XFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4xMTE1OlxcdFxcdFxcdFxcdH0sXFxuMTExNjpcXHRcXHRcXHRcXHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XFxuMTExNzpcXHRcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxcbjExMTg6XFx0XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4xMTE5OlxcdFxcdFxcdFxcdFxcdC5lbmRcXHQ9IE1PRFVMRVNfRU5ELFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMTo0MC42MDg1OTcwMjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1NTg1NTY1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgbW92aW5nIGF3YXkgZnJvbSBoYXJkY29kZWQgbWVtb3J5IGZsYWdzIGFuZCBwYWdlIHByb3RlY3Rpb24gaW4gYGFyY2gveDg2L21tL2luaXQuY2Agd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGBmbGFnc2AgYW5kIGBwZ3Byb3RgIGluIGBFWEVDTUVNX0JQRmAuIFRoaXMgc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZCBtb3JlIGZsZXhpYmxlIGFuZCBwb3RlbnRpYWxseSBzYWZlciBtZW1vcnkgbWFuYWdlbWVudCBmb3IgSklUZWQgQlBGIGNvZGUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgaW5zdGVhZCBvZiBgYnBmX2ppdF9hbGxvY19leGVjYCBhbmQgaXRzIGRlY2xhcmF0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGltcG9ydGFudC5cblxuVGhlIGFkZGl0aW9uIG9mIGBicGZfaml0X21lbV9pc19yb3hgIGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYW5kIGl0cyBpbXBhY3Qgb24gYGFsbG9jX25ld19wYWNrYCBhbmQgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIGlzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbi4gQ2xlYXJseSwgdGhlIGVtcGhhc2lzIGlzIG9uIG1ha2luZyBpdCBST1gtYXdhcmUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBicGZfaml0X21lbV9pc19yb3hgIGNoZWNrLiBUaGlzIGlzIGNlbnRyYWwgdG8gdGhlIHBhdGNoJ3MgcHVycG9zZS5cblxuVGhlIGNoYW5nZSB0byBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIHVzaW5nIGB2bWFsbG9jYCBpbnN0ZWFkIG9mIGBicGZfaml0X2FsbG9jX2V4ZWNgIGZvciBgZC1cdTAwM2Vyd19pbWFnZWAgaXMgYWxzbyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGltcGFjdCBvZiBST1ggbWVtb3J5IGFsbG9jYXRpb24gaXMgYmVpbmcgZmVsdCB0aGUgbW9zdC5cblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIHVzYWdlLiBXYWl0LCBpdCdzIHVzZWQgaW4gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIGFuZCB0aGF0J3MgcmVsYXRlZCB0byBhdHRhY2hpbmcgdHJhbXBvbGluZXMuIFRyYW1wb2xpbmVzIGFyZSBvZnRlbiByZWFkLW9ubHksIG1ha2luZyB0aGlzIGNoYW5nZSB2ZXJ5IGltcG9ydGFudC4gSXQgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGNvbm5lY3Rpb24gYmV0d2VlbiBST1ggYW5kIGF0dGFjaGluZyBCUEYgY29kZSwgYSBjcml0aWNhbCBwYXJ0IG9mIG15IHdvcmsuXG5cblRoZW4gSSBoYXZlIHRvIGNoZWNrIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gSSBzZWUgdGhhdCBpdCBpcyB1c2VkIGluIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2Agd2hpY2ggY29uZmlybXMgbXkgc3VzcGljaW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHN5bWJvbHM6IGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGFsbG9jX25ld19wYWNrYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYW5kIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfQlBGX0pJVGAgZm9yIHN1cmUsIGFuZCBgQ09ORklHX1g4NmAgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjaGFuZ2VzLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIHZlcmlmeSBpZiB0aGVyZSdzIGFueSBvdGhlciBjb25maWcgYmVzaWRlcyB0aGVzZS4gQW5kIHllcywgaXQgaXMgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9jdXNlZCBvbiBtZW1vcnkgcHJvdGVjdGlvbiBvZiBKSVRlZCBCUEYgY29kZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVhZC1vbmx5IGV4ZWN1dGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIGZsZXhpYmxlIGFuZCBzYWZlciBhcHByb2FjaCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgaG93IEJQRiBwcm9ncmFtIHBhY2tzIGFyZSBtYW5hZ2VkIGFuZCBKSVRlZC4gVGhlIFJPWCBhc3BlY3QgaXMga2V5IGhlcmUuIEkgd2lsbCBkaXZlIGRlZXBlciBpbnRvIGBicGZfaml0X21lbV9pc19yb3hgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6MDYuMTY3MTU2MDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY0ODcwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29yZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zLWlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9Nj1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU6NzpDRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT02MT1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxua2VybmVsL2JwZi9NYWtlZmlsZS02Mi1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gcmVsb19jb3JlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmX2l0ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMjowNi40MDM2NTEyOTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNDg5MDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzKipcblxuQWxyaWdodCwgc28gYGNvcmUub2AgaXMgYWx3YXlzIGNvbXBpbGVkLCB0aGF0J3MgYSBnaXZlbi4gQnV0IEknbSBjdXJpb3VzIGFib3V0IHRoZSBjb21waWxhdGlvbiBjb25kaXRpb24gZm9yIGBicGZfcHJvZ19wYWNrX2FsbG9jYC4gTXkgaW50dWl0aW9uIHNheXMgaXQncyB0aWVkIHRvIGBDT05GSUdfQlBGX0pJVGAuIEl0J3Mgd29ydGggZGlnZ2luZyBpbnRvIHRoYXQgYCNpZmRlZmAgYmxvY2sgdG8gY29uZmlybS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMgaGVyZSB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgYXZhaWxhYmxlIG9yIGNvbnRpbmdlbnQgb24gYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhbmQgYXZvaWQgYW55IGFzc3VtcHRpb25zLiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6MDkuNDI4NTQ0NjY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc2NjYzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX3BhY2tfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9OTI0PXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy05NTUtXFxua2VybmVsL2JwZi9jb3JlLmM6OTU2OnZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sIHdhc19jbGFzc2ljKVxcbmtlcm5lbC9icGYvY29yZS5jLTk1Ny17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xMTk3PWJwZl9qaXRfYmluYXJ5X3BhY2tfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTIxNC1cXHRcXHRyZXR1cm4gTlVMTDtcXG5rZXJuZWwvYnBmL2NvcmUuYzoxMjE1OlxcdHJvX2hlYWRlciA9IGJwZl9wcm9nX3BhY2tfYWxsb2Moc2l6ZSwgYnBmX2ZpbGxfaWxsX2luc25zLCB3YXNfY2xhc3NpYyk7XFxua2VybmVsL2JwZi9jb3JlLmMtMTIxNi1cXHRpZiAoIXJvX2hlYWRlcikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMjoxMC43MDUyMTE3NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzUxODQ1NjEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBsYWlkIG91dCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbnRvIHRoZSBjb2RlIGFuZCBrbm93IHRoZSBsYW5kc2NhcGU6XG5cbioqQ2hlY2tpbmcgZm9yIEpJVCBDb21waWxhdGlvbiBTdXBwb3J0IGluIEJQRiBQcm9ncmFtIFBhY2thZ2luZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHByZXR0eSBmdW5kYW1lbnRhbCBoZXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gd2hldGhlciBCUEYgSklUIGNvbXBpbGF0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcG9ydGFiaWxpdHkgYW5kIHRvIGVuc3VyZSB0aGUgY29kZSBiZWhhdmVzIGNvcnJlY3RseSBpbiBkaWZmZXJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZXNzZW50aWFsbHkgZG91YmxlLWNoZWNraW5nIG15IGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgYnVpbGQgc3lzdGVtIHdpbGwgaGFuZGxlIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEknbSBtZW50YWxseSBwYXJzaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYW5kIHRoZSBjb2RlIGl0c2VsZiB0byBzZWUgaWYgaXQncyBwcm90ZWN0ZWQgYnkgdGhlIGAjaWZkZWYgQ09ORklHX0JQRl9KSVRgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIG9yIHNvbWV0aGluZyBsb2dpY2FsbHkgZXF1aXZhbGVudCwgc28gdGhlIGNvZGUgaXMgY29tcGlsZWQsIGFuZCB3b3JraW5nLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgSklUIGlzIGluIHBsYXkuIFRoaXMgaXMganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCBhIHBvdGVudGlhbGx5IG5hc3R5IHN1cnByaXNlIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjI0LjIyMzY3MDc0OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAwOlxcdHN0YXRpYyBERUZJTkVfTVVURVgocGFja19tdXRleCk7XFxuIDkwMTpcXHRzdGF0aWMgTElTVF9IRUFEKHBhY2tfbGlzdCk7XFxuIDkwMjpcXHRcXG4gOTAzOlxcdC8qIFBNRF9TSVpFIGlzIG5vdCBhdmFpbGFibGUgaW4gc29tZSBzcGVjaWFsIGNvbmZpZywgZS5nLiBBUkNIPWFybSB3aXRoXFxuIDkwNDpcXHQgKiBDT05GSUdfTU1VPW4uIFVzZSBQQUdFX1NJWkUgaW4gdGhlc2UgY2FzZXMuXFxuIDkwNTpcXHQgKi9cXG4gOTA2OlxcdCNpZmRlZiBQTURfU0laRVxcbiA5MDc6XFx0LyogUE1EX1NJWkUgaXMgcmVhbGx5IGJpZyBmb3Igc29tZSBhcmNocy4gSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvXFxuIDkwODpcXHQgKiByZXNlcnZlIHRvbyBtdWNoIG1lbW9yeSBpbiBvbmUgYWxsb2NhdGlvbi4gSGFyZGNvZGUgQlBGX1BST0dfUEFDS19TSVpFIHRvXFxuIDkwOTpcXHQgKiAyTWlCICogbnVtX3Bvc3NpYmxlX25vZGVzKCkuIE9uIG1vc3QgYXJjaGl0ZWN0dXJlcyBQTURfU0laRSB3aWxsIGJlXFxuIDkxMDpcXHQgKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMk1CLlxcbiA5MTE6XFx0ICovXFxuIDkxMjpcXHQjZGVmaW5lIEJQRl9QUk9HX1BBQ0tfU0laRSAoU1pfMk0gKiBudW1fcG9zc2libGVfbm9kZXMoKSlcXG4gOTEzOlxcdCNlbHNlXFxuIDkxNDpcXHQjZGVmaW5lIEJQRl9QUk9HX1BBQ0tfU0laRSBQQUdFX1NJWkVcXG4gOTE1OlxcdCNlbmRpZlxcbiA5MTY6XFx0XFxuIDkxNzpcXHQjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxcbiA5MTg6XFx0XFxuIDkxOTpcXHRzdGF0aWMgYm9vbCBicGZfaml0X21lbV9pc19yb3godm9pZClcXG4gOTIwOlxcdHtcXG4gOTIxOlxcdFxcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XFxuIDkyMjpcXHR9XFxuIDkyMzpcXHRcXG4gOTI0OlxcdHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXFxuIDkyNTpcXHR7XFxuIDkyNjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaztcXG4gOTI3OlxcdFxcdGludCBlcnI7XFxuIDkyODpcXHRcXG4gOTI5OlxcdFxcdHBhY2sgPSBremFsbG9jX2ZsZXgoKnBhY2ssIGJpdG1hcCwgQklUU19UT19MT05HUyhCUEZfUFJPR19DSFVOS19DT1VOVCkpO1xcbiA5MzA6XFx0XFx0aWYgKCFwYWNrKVxcbiA5MzE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDkzMjpcXHRcXHRwYWNrLVxcdTAwM2VwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTtcXG4gOTMzOlxcdFxcdGlmICghcGFjay1cXHUwMDNlcHRyKVxcbiA5MzQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDkzNTpcXHRcXHRiaXRtYXBfemVybyhwYWNrLVxcdTAwM2ViaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpO1xcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXFxuIDkzODpcXHRcXHRcXHRwYWNrLVxcdTAwM2VhcmNoX2ZsdXNoX25lZWRlZCA9IHRydWU7XFxuIDkzOTpcXHRcXHRpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjI0LjIyMzg0MDU0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAzMzA2NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIEJQRiBKSVQgU3VwcG9ydCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZydzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBmdW5kYW1lbnRhbCDigJMgZG9lcyB0aGUgc3lzdGVtIGV2ZW4gKnN1cHBvcnQqIHRoZSBCUEYgSklUPyBJdCdzIGEga2V5IHJlcXVpcmVtZW50LCBvYnZpb3VzbHkuIFNvLCBteSBpbml0aWFsIGNoZWNrIHdpbGwgZGVmaW5pdGVseSBpbnZvbHZlIGxvb2tpbmcgYXQgYENPTkZJR19CUEZfSklUYC4gVGhhdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBlc3NlbnRpYWxseSBlbmFibGVzIHRoZSBqdXN0LWluLXRpbWUgY29tcGlsZXIgZm9yIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgYnl0ZWNvZGUuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQncyBkZWZpbmVkIGFuZCBlbmFibGVkLiBJZiBgQ09ORklHX0JQRl9KSVRgIGlzIG9mZiwgdGhlbiB0aGUgd2hvbGUgYXBwcm9hY2ggaXMgZXNzZW50aWFsbHkgYSBub24tc3RhcnRlciwgYW5kIEknbGwgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgc3RyYXRlZ3kuIE5vIHNlbnNlIGdvaW5nIGZ1cnRoZXIgZG93biB0aGlzIHBhdGggd2l0aG91dCB0aGF0IGNydWNpYWwgZm91bmRhdGlvbi4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGEgZnVuZGFtZW50YWwgZGlhZ25vc3RpYyBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6MjcuMjI3MTQ5NjUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ2NjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NvcmUuYz0xMDA9c3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19hbGxvY19ub19zdGF0cyh1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX2V4dHJhX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTI4LVxcdGZwLVxcdTAwM2VqaXRfcmVxdWVzdGVkID0gZWJwZl9qaXRfZW5hYmxlZCgpO1xcbmtlcm5lbC9icGYvY29yZS5jOjEyOTpcXHRmcC1cXHUwMDNlaml0X3JlcXVpcmVkID0gSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pO1xcbmtlcm5lbC9icGYvY29yZS5jLTEzMC1cXHRmcC1cXHUwMDNlYmxpbmRpbmdfcmVxdWVzdGVkID0gYnBmX2ppdF9ibGluZGluZ19lbmFibGVkKGZwKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTU0MT12b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbF9hbGwoc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTU0Ni1cXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDc6I2lmZGVmIENPTkZJR19CUEZfSklUXFxua2VybmVsL2JwZi9jb3JlLmMtNTQ4LS8qIEFsbCBCUEYgSklUIHN5c2N0bCBrbm9icyBoZXJlLiAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjU0OTppbnQgYnBmX2ppdF9lbmFibGUgICBfX3JlYWRfbW9zdGx5ID0gSVNfQlVJTFRJTihDT05GSUdfQlBGX0pJVF9ERUZBVUxUX09OKTtcXG5rZXJuZWwvYnBmL2NvcmUuYzo1NTA6aW50IGJwZl9qaXRfa2FsbHN5bXMgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XFxua2VybmVsL2JwZi9jb3JlLmMtNTUxLWludCBicGZfaml0X2hhcmRlbiAgIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xNjU1PXUxNiBicGZfb3V0X3N0YWNrX2FyZ19jbnQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTY2My19XFxua2VybmVsL2JwZi9jb3JlLmM6MTY2NDojZW5kaWYgLyogQ09ORklHX0JQRl9KSVQgKi9cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNjY1LVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTgyMz1ib29sIGJwZl9vcGNvZGVfaW5faW5zbnRhYmxlKHU4IGNvZGUpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xODQ1LVxcbmtlcm5lbC9icGYvY29yZS5jOjE4NDY6I2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL2NvcmUuYy0xODQ3LS8qIEFic29sdXRlIHZhbHVlIG9mIHMzMiB3aXRob3V0IHVuZGVmaW5lZCBiZWhhdmlvciBmb3IgUzMyX01JTiAqL1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjYxMD1zdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2MTItXFx0Ym9vbCBzZWxlY3RfaW50ZXJwcmV0ZXIgPSBmYWxzZTtcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjEzOiNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9jb3JlLmMtMjYxNC1cXHR1MzIgc3RhY2tfZGVwdGggPSBtYXhfdCh1MzIsIGZwLVxcdTAwM2VhdXgtXFx1MDAzZXN0YWNrX2RlcHRoLCAxKTtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2MzM9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvY29yZS5jLTI2MzQte1xcbmtlcm5lbC9icGYvY29yZS5jOjI2MzU6I2lmZGVmIENPTkZJR19CUEZfSklUXFxua2VybmVsL2JwZi9jb3JlLmMtMjYzNi1cXHRzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6MjcuMjgzNjIxNDA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mzc2ODk2OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIENvZGUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBicGZfcHJvZ19wYWNrX2FsbG9jYCBpcyBkZWZpbmVkIGF0IGxpbmUgOTU2LiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGZhbGxzIHJpZ2h0IGJldHdlZW4gYCNpZmRlZiBDT05GSUdfQlBGX0pJVGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGAjZW5kaWZgLiBTbywgdGhhdCBzZWVtcyBwcmV0dHkgY2xlYXI6IGBDT05GSUdfQlBGX0pJVGAgKmlzKiByZXF1aXJlZCBmb3IgdGhpcyBzZWN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBhIEpJVCBjb21waWxlciB3b3VsZCBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGNvbXBpbGVkIEJQRiBwcm9ncmFtcy5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNwZWN0cz8gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBgYXJjaC94ODYvbW0vaW5pdC5jYC4gVGhhdCBoaW50cyBhdCB4ODYgZGVwZW5kZW5jaWVzLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBUaGUgKmNvcmUqIG1vZGlmaWNhdGlvbnMgYXJlIGFjdHVhbGx5IGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYW5kIGBrZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY2AuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgQlBGIGxpdmVzLCB0aGUgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIEkgY2FuIGRlZHVjZSB0aGF0IHRoZSBidWxrIG9mIHRoZXNlIGNoYW5nZXMgYXJlIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCBhbmQgd2lsbCBhZmZlY3QgYWxsIHBsYXRmb3Jtcy5cblxuTGV0J3MgZHJpbGwgZG93biBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBpbiBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgIGlzIGltcG9ydGFudC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlcGVuZGVuY2llcy4gVGltZSB0byBnbyBjaGVjayB0aGF0IGNvbmZpZyBzZXR0aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyB0aGVyZS4gSSBzaG91bGQgbG9vayB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6NDEuNjYwNTIwNjkxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzc2MjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNwYXRjaGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTIxPWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMy1pZmVxICgkKENPTkZJR19ORVQpLHkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjQxLjcxODI4ODA3NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc1NTgyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX0pJVGAgaXMgdGhlIGJpZyBvbmUsIG9mIGNvdXJzZS4gQnV0IHdoYXQgZWxzZSBpcyBjcml0aWNhbD8gSSBrbm93IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHVzdWFsbHkgYSBtdXN0LWhhdmUgZm9yIEJQRiBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfQlBGX0pJVGAgYWxvbmUgaXNuJ3Qgc3VmZmljaWVudC4gQWgsIHJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0IHJlcXVpcmVzIGJvdGggYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgLiBOb3csIGEgcXVpY2sgcmVtaW5kZXI6IGBDT05GSUdfQlBGX0pJVGAgaXRzZWxmIGRlcGVuZHMgb24gZWl0aGVyIGBIQVZFX0NCUEZfSklUYCBvciBgSEFWRV9FQlBGX0pJVGAuXG5cbkFscmlnaHQsIEknbGwga2VlcCBpdCBzaW1wbGUgYW5kIGp1c3QgZm9jdXMgb24gYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGZvciBub3cuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCByZXZpZXcgc29tZSByZWxldmFudCBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY3JpdGljYWwgaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJ20gZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBmb3Igbm93OlxuKiAgIGBicGZfcHJvZ19wYWNrX2FsbG9jYFxuKiAgIGBhbGxvY19uZXdfcGFja2BcbiogICBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgXG4qICAgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWBcbiogICBgYnBmX2ppdF9hbGxvY19leGVjX3J3YFxuXG5MZXQgbWUgZXZhbHVhdGUgbXkgY2FuZGlkYXRlIHN5bWJvbHMuIElzIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGEgZ29vZCBjaG9pY2U/IEl0IGxvb2tzIGxpa2UgaXQncyBhIHJlbGF0aXZlbHkgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGBleGVjbWVtX2FsbG9jX3J3YC4gSXQncyBhIHVzZWZ1bCBzeW1ib2wgYnV0LCBwZXJoYXBzIG5vdCB0aGUgYmVzdCB0byBmb2N1cyBvbi4gSSB0aGluayBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBhIGJldHRlciBmb2N1cyBzeW1ib2wuIGBicGZfcHJvZ19wYWNrX2FsbG9jYCBpcyBhbm90aGVyIHN0cm9uZyBjYW5kaWRhdGUuIEknbGwgaW5jbHVkZSBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIGFzIHdlbGwuXG5cbkp1c3QgdG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCBkZWZpbml0aW9uIGluIGBrZXJuZWwvYnBmL2NvcmUuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0IGNvcnJlY3RseSBpbiB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMyMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMjo0Ny40OTM4NzI2MjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFxuMTEyMTpcXHR2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxcbjExMjI6XFx0e1xcbjExMjM6XFx0XFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFxcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xcbjExMjQ6XFx0fVxcbjExMjU6XFx0XFxuMTEyNjpcXHR2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxcbjExMjc6XFx0e1xcbjExMjg6XFx0XFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpO1xcbjExMjk6XFx0fVxcbjExMzA6XFx0XFxuMTEzMTpcXHR2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxcbjExMzI6XFx0e1xcbjExMzM6XFx0XFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xcbjExMzQ6XFx0fVxcbjExMzU6XFx0XFxuMTEzNjpcXHR2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRleGVjbWVtX2ZyZWUoYWRkcik7XFxuMTEzOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjQ3LjQ5NDA2OTI4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg3MjYyMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQWxsb2NhdGlvbiBTdHJhdGVneSoqXG5cblJpZ2h0LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgZnVuY3Rpb24uIE5vdGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIGNvbXBsZXguIEhvd2V2ZXIsIGl0J3MgYWx3YXlzIHdvcnRoIGRpZ2dpbmcgZGVlcGVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIEJQRi4gVGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgZnVuY3Rpb24uLi4gdGhhdCdzIHdoZXJlIHRoZSByZWFsIGFsbG9jYXRpb24gbWFnaWMgcHJvYmFibHkgcmVzaWRlcy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuIEknbSBndWVzc2luZyB0aGUgaW50cmljYWNpZXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGFsaWdubWVudCwgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gaXNzdWVzLCBhbmQgdGhlIG92ZXJhbGwgZWZmaWNpZW5jeSBvZiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSB3aWxsIGJlY29tZSBjbGVhci4gVGltZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicGZfcHJvZ19wYWNrX2FsbG9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAzOjIyOjUwLjE4MTMzNDQzNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdG91dDpcXG4gOTUxOlxcdFxcdGJwZl9qaXRfZnJlZV9leGVjKHBhY2stXFx1MDAzZXB0cik7XFxuIDk1MjpcXHRcXHRrZnJlZShwYWNrKTtcXG4gOTUzOlxcdFxcdHJldHVybiBOVUxMO1xcbiA5NTQ6XFx0fVxcbiA5NTU6XFx0XFxuIDk1NjpcXHR2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcXG4gOTU3OlxcdHtcXG4gOTU4OlxcdFxcdHVuc2lnbmVkIGludCBuYml0cyA9IEJQRl9QUk9HX1NJWkVfVE9fTkJJVFMoc2l6ZSk7XFxuIDk1OTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaywgKmZhbGxiYWNrX3BhY2sgPSBOVUxMO1xcbiA5NjA6XFx0XFx0dW5zaWduZWQgbG9uZyBwb3MsIGZhbGxiYWNrX3BvcyA9IDA7XFxuIDk2MTpcXHRcXHR2b2lkICpwdHIgPSBOVUxMO1xcbiA5NjI6XFx0XFxuIDk2MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwYWNrX211dGV4KTtcXG4gOTY0OlxcdFxcdGlmIChzaXplIFxcdTAwM2UgQlBGX1BST0dfUEFDS19TSVpFKSB7XFxuIDk2NTpcXHRcXHRcXHQvKlxcbiA5NjY6XFx0XFx0XFx0ICogQWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gYSBwYWNrIGdldCB0aGVpciBvd24gcGFnZXMsIGFuZFxcbiA5Njc6XFx0XFx0XFx0ICogcHJlZGljdG9ycyBhcmUgbm90IGZsdXNoZWQgZm9yIHN1Y2ggYWxsb2NhdGlvbi4gVGhpcyBpcyBvbmx5XFxuIDk2ODpcXHRcXHRcXHQgKiBzYWZlIGJlY2F1c2UgY0JQRiBwcm9ncmFtcyAodGhlIHVucHJpdmlsZWdlZCBhdHRhY2sgc3VyZmFjZSlcXG4gOTY5OlxcdFxcdFxcdCAqIGFyZSBib3VuZGVkIHdlbGwgYmVsb3cgYSBwYWNrIHNpemUuXFxuIDk3MDpcXHRcXHRcXHQgKi9cXG4gOTcxOlxcdFxcdFxcdGlmICh3YXNfY2xhc3NpYyBcXHUwMDI2XFx1MDAyNiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZicGZfcHJlZF9mbHVzaF9lbmFibGVkKSlcXG4gOTcyOlxcdFxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiQlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXFxcXG5cXFwiKTtcXG4gOTczOlxcdFxcdFxcdHNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpO1xcbiA5NzQ6XFx0XFx0XFx0cHRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xcbiA5NzU6XFx0XFx0XFx0aWYgKHB0ciBcXHUwMDI2XFx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcXG4gOTc2OlxcdFxcdFxcdFxcdGludCBlcnI7XFxuIDk3NzpcXHRcXG4gOTc4OlxcdFxcdFxcdFxcdGJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpO1xcbiA5Nzk6XFx0XFx0XFx0XFx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHB0cik7XFxuIDk4MDpcXHRcXHRcXHRcXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwdHIsXFxuIDk4MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemUgLyBQQUdFX1NJWkUpO1xcbiA5ODI6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbiA5ODM6XFx0XFx0XFx0XFx0XFx0YnBmX2ppdF9mcmVlX2V4ZWMocHRyKTtcXG4gOTg0OlxcdFxcdFxcdFxcdFxcdHB0ciA9IE5VTEw7XFxuIDk4NTpcXHRcXHRcXHRcXHR9XFxuIDk4NjpcXHRcXHRcXHR9XFxuIDk4NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTg4OlxcdFxcdH1cXG4gOTg5OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGFjaywgXFx1MDAyNnBhY2tfbGlzdCwgbGlzdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMjo1MC4xODE1MTY1MzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MTE4ODM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJwZl9wcm9nX3BhY2tfYWxsb2MgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJwZl9wcm9nX3BhY2tfYWxsb2NgLiBUaGUgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiBoZXJlIGlzIHJpZ2h0IGluIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQ6XG5cbmBgYGNcbi1cdFx0aWYgKHB0cikge1xuK1x0XHRpZiAocHRyIFx1MDAyNlx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgdGhlIGNvZGUgaXMgbm93IGNoZWNraW5nIGlmIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IChgcHRyYCkgaXMgKm5vdCogYWxyZWFkeSByZWFkLW9ubHksIGJlZm9yZSBhdHRlbXB0aW5nIHRvIG1hcmsgaXQgYXMgc3VjaC4gVGhpcyBpcyBhIGNsZXZlciBvcHRpbWl6YXRpb24uIEJlZm9yZSwgd2Ugd2VyZSBibGluZGx5IGNhbGxpbmcgYHNldF9tZW1vcnlfcm94YCBvbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgYnV0IGlmIGl0IHdhcyBhbHJlYWR5IFJPWCwgdGhpcyB3YXMgYW4gdW5uZWNlc3Nhcnkgb3BlcmF0aW9uLiBUaGlzIG1lYW5zIHdlJ3JlIGF2b2lkaW5nIGEgcmVkdW5kYW50IGBzZXRfbWVtb3J5X3JveGAgY2FsbC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IGltcGFjdHMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gYW5kIHNlZSBob3cgdGhpcyBtaWdodCBhZmZlY3QgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYC4gSSBuZWVkIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkb3duc3RyZWFtIGVmZmVjdHMgb2YgdGhpcyBvcHRpbWl6YXRpb24gb24gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIGl0J3MgZGVwZW5kZW50IG9uIHRoZSBvcmlnaW5hbCBiZWhhdmlvciBvciBpZiBpdCdzIHJvYnVzdCB0byB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMwOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6NTMuNjYyNzA3ODg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzcGF0Y2hlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRpZiAobmV3KVxcbiAxMzQ6XFx0XFx0XFx0ZC1cXHUwMDNlaW1hZ2Vfb2ZmID0gbm9mZjtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0dm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcXG4gMTM4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqdG8pXFxuIDEzOTpcXHR7XFxuIDE0MDpcXHRcXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4gMTQxOlxcdFxcdGludCBwcmV2X251bV9wcm9ncztcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0aWYgKGZyb20gPT0gdG8pXFxuIDE0NDpcXHRcXHRcXHRyZXR1cm47XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmQtXFx1MDAzZW11dGV4KTtcXG4gMTQ3OlxcdFxcdGlmICghZC1cXHUwMDNlaW1hZ2UpIHtcXG4gMTQ4OlxcdFxcdFxcdGQtXFx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xcbiAxNDk6XFx0XFx0XFx0aWYgKCFkLVxcdTAwM2VpbWFnZSlcXG4gMTUwOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNTE6XFx0XFx0XFx0LyogZC1cXHUwMDNlcndfaW1hZ2UgZG9lc24ndCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlXFxuIDE1MjpcXHRcXHRcXHQgKiBjYW4gdXNlIHZtYWxsb2MuXFxuIDE1MzpcXHRcXHRcXHQgKi9cXG4gMTU0OlxcdFxcdFxcdGQtXFx1MDAzZXJ3X2ltYWdlID0gdm1hbGxvYyhQQUdFX1NJWkUpO1xcbiAxNTU6XFx0XFx0XFx0aWYgKCFkLVxcdTAwM2Vyd19pbWFnZSkge1xcbiAxNTY6XFx0XFx0XFx0XFx0YnBmX3Byb2dfcGFja19mcmVlKGQtXFx1MDAzZWltYWdlLCBQQUdFX1NJWkUpO1xcbiAxNTc6XFx0XFx0XFx0XFx0ZC1cXHUwMDNlaW1hZ2UgPSBOVUxMO1xcbiAxNTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE1OTpcXHRcXHRcXHR9XFxuIDE2MDpcXHRcXHRcXHRicGZfaW1hZ2Vfa3N5bV9pbml0KGQtXFx1MDAzZWltYWdlLCBQQUdFX1NJWkUsIFxcdTAwMjZkLVxcdTAwM2Vrc3ltKTtcXG4gMTYxOlxcdFxcdFxcdGJwZl9pbWFnZV9rc3ltX2FkZChcXHUwMDI2ZC1cXHUwMDNla3N5bSk7XFxuIDE2MjpcXHRcXHR9XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHByZXZfbnVtX3Byb2dzID0gZC1cXHUwMDNlbnVtX3Byb2dzO1xcbiAxNjU6XFx0XFx0Y2hhbmdlZCB8PSBicGZfZGlzcGF0Y2hlcl9yZW1vdmVfcHJvZyhkLCBmcm9tKTtcXG4gMTY2OlxcdFxcdGNoYW5nZWQgfD0gYnBmX2Rpc3BhdGNoZXJfYWRkX3Byb2coZCwgdG8pO1xcbiAxNjc6XFx0XFxuIDE2ODpcXHRcXHRpZiAoIWNoYW5nZWQpXFxuIDE2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDM6MjI6NTMuNjYyNzc3OTg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2ODM3MTcwMjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0aGF0J3MgcHJldHR5IGtleSwgYW5kIGl0IHJlYWxseSB3YXJyYW50cyBhIHRob3JvdWdoIGdvaW5nLW92ZXIuIEl0J3MgdG91Y2hpbmcgdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRoZSBkaXNwYXRjaGVyJ3MgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lLCB3aGljaCBpcyBhbHdheXMgYSBwbGFjZSB0aGF0IGRlc2VydmVzIGV4dHJhIGF0dGVudGlvbi5cblxuU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgYWx0ZXJpbmcgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIG1hbmFnZWQgZm9yIEJQRiBKSVQgZXhlY3V0aW9uLiBJIHNlZSBjaGFuZ2VzIHRvIGBicGZfaml0X2FsbG9jX2V4ZWNgLCByZW5hbWVkIHRvIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgLCBpbiB0aGUgeDg2LXNwZWNpZmljIHRyYW1wb2xpbmUgc2l6ZSBjYWxjdWxhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIG5vdyBwcmVzZW50IGluIHRoZSBnZW5lcmFsIEJQRiBjb3JlIGNvZGUuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhbGxvY19uZXdfcGFja2AgYW5kIGBicGZfcHJvZ19wYWNrX2FsbG9jYCB0byBpbmNsdWRlIGNoZWNrcyB0byBwcmV2ZW50IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGZyb20gYmVpbmcgdXNlZCBhbmQgdG8gc2V0IG1lbW9yeSB0byBST1ggKFJlYWQgT25seSBlWGVjdXRlKS4gTW9zdCBub3RhYmx5LCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIG5vdyB1c2VzIGB2bWFsbG9jYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBtZW1vcnkgYWxsb2NhdGlvbi5cblxuSSdtIHRoaW5raW5nIHRoaXMgbGlrZWx5IGltcGFjdHMgaG93IEJQRiBwcm9ncmFtcyBhcmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkLCBzbyB0aG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgaG90IHNwb3RzLiBJdCBhbHNvIGNoYW5nZXMgYGFyY2gveDg2L21tL2luaXQuY2Agd2l0aCByZWdhcmRzIHRvIG1lbW9yeSBmbGFncy5cblxuR2l2ZW4gdGhlIHNjb3BlLCBJIGltbWVkaWF0ZWx5IGZsYWdnZWQgdGhpcyBhcyBcIldvcnRoRnV6emluZ1wiLiBUaGVzZSBraW5kcyBvZiBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljIGFyZSB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgY2FuIGhpZGUuXG5cbk15IGtleSBmb2N1cyBhcmVhcyBmb3IgYW5hbHlzaXMgYXJlIGdvaW5nIHRvIGJlIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgKHNpbmNlIGl0J3MgeDg2LXNwZWNpZmljKSwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGFuZCBgYWxsb2NfbmV3X3BhY2tgLiBJJ20gcmVhbGx5IGN1cmlvdXMgaG93IHRob3NlIGNoYW5nZXMgYWZmZWN0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBwcm9ncmFtIHBhY2tpbmcuXG5cbkknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyBlbmFibGVkLCBhcyB0aGF0IHNlZW1zIGVzc2VudGlhbCBmb3IgdGhpcyBwYXRjaCwgYW5kIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgcHJvYmFibHkgbmVjZXNzYXJ5IGZvciBCUEYgZnVuY3Rpb25hbGl0eSBpbiBnZW5lcmFsLiBBZnRlciBhIHF1aWNrIGNoZWNrLCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX0pJVGAgaXMgaW5kZWVkIGEgaGFyZCByZXF1aXJlbWVudCwgd2hpY2ggSSBjb25maXJtZWQgd2l0aCB0aGUgYnVpbGQgZGlyZWN0aXZlcyBpbiB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlxuXG5NeSBzdHJhdGVneSB3aWxsIGJlIHRvIGRpdmUgaW50byB0aG9zZSBmb2N1cyBmdW5jdGlvbnMsIGVuc3VyaW5nIHRoYXQgdGhlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGFuZCBST1ggbWVtb3J5IGhhbmRsaW5nIHdvcmsgYXMgZXhwZWN0ZWQgYW5kIHRoYXQgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgc2lkZS1jaGFubmVsIGlzc3Vlcy4gSSdsbCBuZWVkIHRvIHRob3JvdWdobHkgZnV6eiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcwMywiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMzoyMzoyMC40OTk5NTAwODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQ0NDkxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ1wiLFxuICAgIFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCIsXG4gICAgXCJicGZfaml0X2FsbG9jX2V4ZWNfcndcIixcbiAgICBcImFsbG9jX25ld19wYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIGNoYW5naW5nIGhvdyBCUEYgcHJvZ3JhbSBwYWNrcyBhbmQgZGlzcGF0Y2hlcnMgYWxsb2NhdGUgbWVtb3J5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfcGFja19hbGxvY1wiLFxuICAgIFwiYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dcIixcbiAgICBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiLFxuICAgIFwiYnBmX2ppdF9hbGxvY19leGVjX3J3XCIsXG4gICAgXCJhbGxvY19uZXdfcGFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24sIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCBjaGFuZ2luZyBob3cgQlBGIHByb2dyYW0gcGFja3MgYW5kIGRpc3BhdGNoZXJzIGFsbG9jYXRlIG1lbW9yeS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdhkvq[1] Phase: Succeeded StartedAt: 2026-07-12 03:24:09 +0000 UTC FinishedAt: 2026-07-12 03:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 03:24:09 +0000 UTC FinishedAt: 2026-07-12 03:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2] Phase: Succeeded StartedAt: 2026-07-12 03:24:09 +0000 UTC FinishedAt: 2026-07-12 07:52:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 03:24:09 +0000 UTC FinishedAt: 2026-07-12 07:52:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 03:24:09 +0000 UTC FinishedAt: 2026-07-12 03:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 03:24:09 +0000 UTC FinishedAt: 2026-07-12 03:24:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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-workflowdhkvq/series-workflowdhkvq-convert-artifact-331190294/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 03:24:20 +0000 UTC FinishedAt: 2026-07-12 04:00:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 03:24:20 +0000 UTC FinishedAt: 2026-07-12 04:00:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*49b2bd05-8e6c-428a-95dc-ea78dc4e7ee3,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-workflowdhkvq/series-workflowdhkvq-convert-artifact-331190294/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": "a5f36029-e89a-4baa-a4cb-2dd63101a043", "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-workflowdhkvq/series-workflowdhkvq-build-action-1016643500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 03:24:20 +0000 UTC FinishedAt: 2026-07-12 03:59:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*49b2bd05-8e6c-428a-95dc-ea78dc4e7ee3,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-workflowdhkvq/series-workflowdhkvq-convert-artifact-331190294/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": "a5f36029-e89a-4baa-a4cb-2dd63101a043", "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-workflowdhkvq/series-workflowdhkvq-build-action-1016643500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:00:01 +0000 UTC FinishedAt: 2026-07-12 04:00:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:00:01 +0000 UTC FinishedAt: 2026-07-12 04:00:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:00:01 +0000 UTC FinishedAt: 2026-07-12 04:00:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:00:01 +0000 UTC FinishedAt: 2026-07-12 04:00:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-workflowdhkvq/series-workflowdhkvq-convert-artifact-4229608873/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:00:11 +0000 UTC FinishedAt: 2026-07-12 04:02:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:00:11 +0000 UTC FinishedAt: 2026-07-12 04:02:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a5f36029-e89a-4baa-a4cb-2dd63101a043,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-workflowdhkvq/series-workflowdhkvq-build-action-1016643500/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-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:02:13 +0000 UTC FinishedAt: 2026-07-12 04:02:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:02:13 +0000 UTC FinishedAt: 2026-07-12 04:02:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:02:13 +0000 UTC FinishedAt: 2026-07-12 04:44:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:02:13 +0000 UTC FinishedAt: 2026-07-12 04:44:27 +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:*49b2bd05-8e6c-428a-95dc-ea78dc4e7ee3,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-workflowdhkvq/series-workflowdhkvq-convert-artifact-4229608873/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": "07bc1f9c-ac1d-4f3c-aebe-d0e6adc10238", "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-workflowdhkvq/series-workflowdhkvq-build-action-1791097477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:02:13 +0000 UTC FinishedAt: 2026-07-12 04:44:17 +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:*49b2bd05-8e6c-428a-95dc-ea78dc4e7ee3,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-workflowdhkvq/series-workflowdhkvq-convert-artifact-4229608873/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": "07bc1f9c-ac1d-4f3c-aebe-d0e6adc10238", "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-workflowdhkvq/series-workflowdhkvq-build-action-1791097477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:44:27 +0000 UTC FinishedAt: 2026-07-12 04:44:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:44:27 +0000 UTC FinishedAt: 2026-07-12 04:44:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:44:27 +0000 UTC FinishedAt: 2026-07-12 04:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:44:27 +0000 UTC FinishedAt: 2026-07-12 04:46:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07bc1f9c-ac1d-4f3c-aebe-d0e6adc10238,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-workflowdhkvq/series-workflowdhkvq-build-action-1791097477/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-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:46:37 +0000 UTC FinishedAt: 2026-07-12 07:52:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:46:37 +0000 UTC FinishedAt: 2026-07-12 07:52:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"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:*a5f36029-e89a-4baa-a4cb-2dd63101a043,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07bc1f9c-ac1d-4f3c-aebe-d0e6adc10238,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-workflowdhkvq/series-workflowdhkvq-build-action-1016643500/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-workflowdhkvq/series-workflowdhkvq-build-action-1791097477/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:46:37 +0000 UTC FinishedAt: 2026-07-12 04:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:46:37 +0000 UTC FinishedAt: 2026-07-12 04:46:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"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-workflowdhkvq/series-workflowdhkvq-convert-artifact-1378102526/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:46:37 +0000 UTC FinishedAt: 2026-07-12 04:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:46:37 +0000 UTC FinishedAt: 2026-07-12 04:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:46:37 +0000 UTC FinishedAt: 2026-07-12 04:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:46:47 +0000 UTC FinishedAt: 2026-07-12 07:52:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhkvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","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":["bpf_prog_pack_alloc","bpf_dispatcher_change_prog","arch_bpf_trampoline_size","bpf_jit_alloc_exec_rw","alloc_new_pack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4acf8445-0d65-412b-beb9-aacf97f0fdf9","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-07-12 04:46:47 +0000 UTC FinishedAt: 2026-07-12 07:52:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a5f36029-e89a-4baa-a4cb-2dd63101a043,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07bc1f9c-ac1d-4f3c-aebe-d0e6adc10238,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-workflowdhkvq/series-workflowdhkvq-build-action-1016643500/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-workflowdhkvq/series-workflowdhkvq-build-action-1791097477/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-workflowdhkvq/series-workflowdhkvq-convert-artifact-1378102526/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,}