Name: series-workflow8rh6g Phase: Succeeded StartedAt: 2026-08-02 18:17:38 +0000 UTC FinishedAt: 2026-08-02 19:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[0] Phase: Succeeded StartedAt: 2026-08-02 18:17:38 +0000 UTC FinishedAt: 2026-08-02 18:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 18:17:38 +0000 UTC FinishedAt: 2026-08-02 18:51:24 +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": "28e911d61d66b92a3bded8b54622ed3cd2795bf6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "KPROBES" ], "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": "28e911d61d66b92a3bded8b54622ed3cd2795bf6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "KPROBES" ], "series_id": "840633cf-38c1-4d0a-849f-bcbd4425843d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "ftrace_make_call", "ftrace_modify_call" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z0cmFjZV9tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7ZnRyYWNlX21vZGlmeV9jYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFJJU0MtViBmdHJhY2UgY29kZSBtb2RpZmljYXRpb24gd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIG9mIHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW5hYmxpbmcgZnRyYWNlIGFuZCBrcHJvYmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzQ3MWIyNDU5MjIwZTEwMzAxMDM4ZmFlMmU0MDUwNWM3OWE4OTI5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTg6NDk6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1xuaW5kZXggYjQzMGVkZmI4M2Y0Yy4uYmU4YjY4NTE0NDE3NCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RvcF9tYWNoaW5lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RleHQtcGF0Y2hpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vaW5zbi5oXHUwMDNlXG4gXG4gI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxuIHZvaWQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKVxuQEAgLTYzLDcgJiM0Mzs2NCw5IEBAIHN0YXRpYyBpbnQgX19mdHJhY2VfbW9kaWZ5X2NhbGwodW5zaWduZWQgbG9uZyBzb3VyY2UsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBib29sXG4gXHRcdGlmIChjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQocmVwbGFjZWQsICh2b2lkICopc291cmNlLCAyICogTUNPVU5UX0lOU05fU0laRSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4tXHRcdGlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdKSB7XG4mIzQzO1x0XHQvKiBCeXBhc3MgdGhlIGNoZWNrIGlmIHRoZSBhdWlwYyBpbnNuIGlzIGEga3Byb2JlIGJyZWFrcG9pbnQgKi9cbiYjNDM7XHRcdGlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEocmlzY3ZfaW5zbl9pc19lYnJlYWsocmVwbGFjZWRbMF0pIHx8IHJpc2N2X2luc25faXNfY19lYnJlYWsocmVwbGFjZWRbMF0pKSkge1xuIFx0XHRcdHByX2VycihcJiMzNDslcDogZXhwZWN0ZWQgKCUwOHgpIGJ1dCBnb3QgKCUwOHgpXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICAodm9pZCAqKXNvdXJjZSwgY2FsbFswXSwgcmVwbGFjZWRbMF0pO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O0tQUk9CRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdHJhY2VfbWFrZV9jYWxsJiMzNDssCiAgICAmIzM0O2Z0cmFjZV9tb2RpZnlfY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBSSVNDLVYgZnRyYWNlIGNvZGUgbW9kaWZpY2F0aW9uIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBhdWlwYyBpbnN0cnVjdGlvbiBvZiB0aGUgZnRyYWNlIGNhbGwgc2l0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVuYWJsaW5nIGZ0cmFjZSBhbmQga3Byb2Jlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0NzFiMjQ1OTIyMGUxMDMwMTAzOGZhZTJlNDA1MDVjNzlhODkyOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDE4OjQ5OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYwppbmRleCBiNDMwZWRmYjgzZjRjLi5iZThiNjg1MTQ0MTc0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zdG9wX21hY2hpbmUuaCZndDsKICNpbmNsdWRlICZsdDthc20vY2FjaGVmbHVzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS90ZXh0LXBhdGNoaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9pbnNuLmgmZ3Q7CiAKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKIHZvaWQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKQpAQCAtNjMsNyAmIzQzOzY0LDkgQEAgc3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2wKIAkJaWYgKGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdChyZXBsYWNlZCwgKHZvaWQgKilzb3VyY2UsIDIgKiBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdKSB7CiYjNDM7CQkvKiBCeXBhc3MgdGhlIGNoZWNrIGlmIHRoZSBhdWlwYyBpbnNuIGlzIGEga3Byb2JlIGJyZWFrcG9pbnQgKi8KJiM0MzsJCWlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHJpc2N2X2luc25faXNfZWJyZWFrKHJlcGxhY2VkWzBdKSB8fCByaXNjdl9pbnNuX2lzX2NfZWJyZWFrKHJlcGxhY2VkWzBdKSkpIHsKIAkJCXByX2VycigmIzM0OyVwOiBleHBlY3RlZCAoJTA4eCkgYnV0IGdvdCAoJTA4eClcbiYjMzQ7LAogCQkJICAgICAgICh2b2lkICopc291cmNlLCBjYWxsWzBdLCByZXBsYWNlZFswXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBSSVNDLVYgRnRyYWNlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNgLiBJdCYjMzk7cyBtb2RpZnlpbmcgYF9fZnRyYWNlX21vZGlmeV9jYWxsYCB0byBza2lwIGEgY2hlY2sgZm9yIGtwcm9iZSBicmVha3BvaW50cyDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBieXBhc3NpbmcgdGhlIGByaXNjdl9pbnNuX2lzX2VicmVha2AgYW5kIGByaXNjdl9pbnNuX2lzX2NfZWJyZWFrYCBjaGVja3MuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7LiBUaGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGRlYWxpbmcgd2l0aCBmdHJhY2UsIGFuZCB0aGF0IG1ha2VzIGl0IHdvcnRoIGludmVzdGlnYXRpbmcuCgpUaGlzIG1vZGlmaWNhdGlvbiBvY2N1cnMgZHVyaW5nIGZ0cmFjZSBlbmFibGluZyBvciBkaXNhYmxpbmcuIFdlIGNhbiB0cmlnZ2VyIHRoYXQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRyYWNlZnMsIGFuZCB0aGF0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludCBmb3IgdXMuIFRoZSByZWFsIGNhdGNoIGlzIHRoYXQgdGhpcyBpcyBSSVNDLVYgc3BlY2lmaWMuCgpCdXQgd2FpdCwgSSBrbm93IFN5emthbGxlciBzdXBwb3J0cyBSSVNDLVYhIFRoYXQmIzM5O3MgYSBodWdlIHdpbi4gU28sIGl0IGxvb2tzIHByb21pc2luZy4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBgX19mdHJhY2VfbW9kaWZ5X2NhbGxgIGluIGBhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY2AgbW9yZSBjbG9zZWx5IHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgcGxhbiBhIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mdHJhY2VfbW9kaWZ5X2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz00Mz12b2lkIGFyY2hfZnRyYWNlX3VwZGF0ZV9jb2RlKGludCBjb21tYW5kKVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTQ5LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6NTA6c3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2wgdmFsaWRhdGUpXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy01MS17XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MTIwPWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xMzMtXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoxMzQ6XHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwocGMsIGFkZHIsIGZhbHNlKTtcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTEzNS19XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MjE1PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMjQtXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyMjU6XHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwoY2FsbGVyLCBGVFJBQ0VfQUREUiwgdHJ1ZSk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnRyYWNlIENhbGwgTW9kaWZpY2F0aW9uIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gYF9fZnRyYWNlX21vZGlmeV9jYWxsYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBieSBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBTdGFuZGFyZCBmdHJhY2UgY2FsbGJhY2tzLCByaWdodD8gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcywgeWVhaCwgdGhpcyBpcyBwcm9iYWJseSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gRnRyYWNlIGlzIGRlZXAsIGl0JiMzOTtzIGNvcmUga2VybmVsIHN0dWZmLCBzbyBhbnkgaXNzdWVzIGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCByYW1pZmljYXRpb25zLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBmaXhpbmcgYSBzcGVjaWZpYyBmYWlsdXJlIHNjZW5hcmlvOiBmdHJhY2UgbW9kaWZpY2F0aW9uIGZhaWxpbmcgd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIGF0IHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgdHdlYWsuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuCgpMZXQgbWUgc2VlLi4uIGRpZ2dpbmcgaW50byB0aGUgY29uZmlnIG9wdGlvbnMuIExvb2tzIGxpa2UgYENPTkZJR19EWU5BTUlDX0ZUUkFDRWAgaXMgZXNzZW50aWFsLCBubyBzdXJwcmlzZSB0aGVyZS4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfUklTQ1ZgIGlzIG5lZWRlZCBzaW5jZSB0aGlzIGlzIGFyY2ggc3BlY2lmaWMuIEJ1dCwgZG8gd2UgbmVlZCB0byBzcGVjaWZ5IGFyY2hpdGVjdHVyZSBjb25maWdzIHNwZWNpZmljYWxseSwgb3IganVzdCBhc3N1bWUgdGhlIGFyY2hpdGVjdHVyZSBpcyBwcmVzZW50PyBQcm9iYWJseSBub3QsIHVzdWFsbHkgdGhlIGFyY2ggY29uZmlnIGlzIGltcGxpZWQsIGJ1dCwgd2FpdC4uLiBIb2xkIG9uLCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCBpcyAqaW5zaWRlKiBhbiBgI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRWAgYmxvY2sgaW4gYGFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jYC4gSG1tLCByaWdodC4gT2theSwgbGV0JiMzOTtzIGtlZXAgZGlnZ2luZyBhbmQgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIG91ciBkdWNrcyBpbiBhIHJvdyBmb3IgaG93IHRvIHJlcHJvZHVjZSB0aGlzIHNjZW5hcmlvIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19EWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTE2LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MTc6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTgtdm9pZCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MzA9dW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9hZGp1c3QodW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMzEte1xuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QUykpXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0zMy1cdFx0cmV0dXJuIGFkZHIgJiM0MzsgOCAmIzQzOyBNQ09VTlRfQVVJUENfU0laRTtcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz01MD1zdGF0aWMgaW50IF9fZnRyYWNlX21vZGlmeV9jYWxsKHVuc2lnbmVkIGxvbmcgc291cmNlLCB1bnNpZ25lZCBsb25nIHRhcmdldCwgYm9vbCB2YWxpZGF0ZSlcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy04Mi1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjgzOiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtODQtc3RhdGljIGNvbnN0IHN0cnVjdCBmdHJhY2Vfb3BzICpyaXNjdjY0X3JlY19nZXRfb3BzKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MTgxPWludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xODYtXHQgKi9cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjE4NzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTKSlcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTE4OC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjA2LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjA3OiNlbHNlIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjA4LXVuc2lnbmVkIGxvbmcgZnRyYWNlX2NhbGxfYWRqdXN0KHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMTEtfVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjEyOiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi9cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIxMy1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjIxNDojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMTUtaW50IGZ0cmFjZV9tb2RpZnlfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIG9sZF9hZGRyLFxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTIzMz12b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyLFxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI1MS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjI1MjojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yNTMtdm9pZCBmdHJhY2VfZ3JhcGhfZnVuYyh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yNzItfVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjczOiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi9cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI3NC0jZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS3Byb2JlIENvbm5lY3Rpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBoaWdobGlnaHRzIGByaXNjdl9pbnNuX2lzX2VicmVha2AgYW5kIGByaXNjdl9pbnNuX2lzX2NfZWJyZWFrYCwgYW5kIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRpZWQgdG8ga3Byb2Jlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7RG9lcyB0aGlzIHBhdGNoICpyZXF1aXJlKiBgQ09ORklHX0tQUk9CRVNgIHRvIGV2ZW4gYmUgcmVsZXZhbnQ/JiMzNDsuIExldCYjMzk7cyBmaWd1cmUgdGhhdCBvdXQuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBhbiBpc3N1ZSB3aGVuIGEga3Byb2JlIGlzIHBsYWNlZCBvbiB0aGUgYGF1aXBjYCBpbnN0cnVjdGlvbiB1c2VkIGJ5IGZ0cmFjZS4gQWhhISBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtsbCBuZWVkICpib3RoKiBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCBhbmQgYENPTkZJR19LUFJPQkVTYCB0byByZXByb2R1Y2UgYW5kIHZhbGlkYXRlIHRoaXMgZml4LiBUaW1lIHRvIGRpdmUgaW50byBgYXJjaC9yaXNjdi9LY29uZmlnYCBhbmQgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzU1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBUcmFjZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBtZW50YWwgbWFwIGltbWVkaWF0ZWx5IGhvbWVzIGluIG9uIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0cmFjaW5nIHN1YnN5c3RlbS4gQW55dGhpbmcgcmVsYXRlZCB0byB0cmFjaW5nIGNhcGFiaWxpdGllcyDigJMgd2hldGhlciBpdCYjMzk7cyBzcGVjaWZpYyBldmVudCB0cmFjaW5nLCBkeW5hbWljIHRyYWNpbmcsIG9yIGNvbnRyb2wgb3ZlciB0aGUgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmIOKAkyBpcyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIGRlZmluZWQgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBkZWNsYXJlZCB0aGVyZS4gVGhpcyBnaXZlcyBhIGJyb2FkIG92ZXJ2aWV3IG9mIHRoZSB0cmFjZSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbi4gTm93LCBsZXQmIzM5O3MgZXhwbG9yZSB0aGF0IGZpbGUgYW5kIGRlbHZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MjkwPWNvbmZpZyBGVU5DVElPTl9UUkFDRV9BUkdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzAwLVxua2VybmVsL3RyYWNlL0tjb25maWc6MzAxOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctMzAyLVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjUtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xua2VybmVsL3RyYWNlL0tjb25maWctMzM1LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzNy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzODpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzktXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzQyLVxua2VybmVsL3RyYWNlL0tjb25maWc6MzQzOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxua2VybmVsL3RyYWNlL0tjb25maWctMzQ0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzAyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiBLZXJuZWwgVHJhY2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBEWU5BTUlDX0ZUUkFDRWAsIGFuZCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgaW50cmluc2ljYWxseSB0aWVkIHRvIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgb2YgdHJhY2luZyBsaWtlIGBGVFJBQ0VgLCBhbmQgb2YgY291cnNlIGBGVU5DVElPTl9UUkFDRVJgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIGZhcmUuIEJ1dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYENPTkZJR19LUFJPQkVTYC4gSXQmIzM5O3MgcG9zc2libGUgdG8gdXNlIHRoZSBkeW5hbWljIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBpdCwgYnV0LCBJIGFtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQmIzM5O3Mgc3VwcG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLUFJPQkVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBpc3N1ZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gdG8gdGhlIGZ1bmRhbWVudGFscy4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgZ29lcyB0byBgYXJjaC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGJ1aWxkLXRpbWUgY3VzdG9taXphdGlvbi4gS25vd2luZyBpdCYjMzk7cyBsaWtlbHkgdGhlcmUsIHNhdmVzIHZhbHVhYmxlIHRpbWUgaW4gdGhlIHRyb3VibGVzaG9vdGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYsIGlmIEkgZG9uJiMzOTt0IHJlY2FsbCB0aGlzIGltbWVkaWF0ZWx5LiBGcm9tIGBhcmNoL0tjb25maWdgLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMsIGZpbmQgZGVmYXVsdHMsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtQUk9CRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTExMj1jb25maWcgR0VORVJJQ19FTlRSWVxuLS1cbmFyY2gvS2NvbmZpZy0xMTYtXG5hcmNoL0tjb25maWc6MTE3OmNvbmZpZyBLUFJPQkVTXG5hcmNoL0tjb25maWctMTE4LVx0Ym9vbCBcJiMzNDtLcHJvYmVzXCYjMzQ7XG4tLVxuYXJjaC9LY29uZmlnPTE2OD1jb25maWcgT1BUUFJPQkVTXG4tLVxuYXJjaC9LY29uZmlnLTE3Mi1cbmFyY2gvS2NvbmZpZzoxNzM6Y29uZmlnIEtQUk9CRVNfT05fRlRSQUNFXG5hcmNoL0tjb25maWctMTc0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlRyYWNpbmcgQ29uZmlndXJhdGlvbiBDb25mdXNpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0cmFjaW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgdXAgaGVyZS4gU2VlbXMgbGlrZSBgRFlOQU1JQ19GVFJBQ0VgIGFuZCBgS1BST0JFU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0byBrZWVwIGluIG1pbmQgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTm93LCB3YXNuJiMzOTt0IGBEWU5BTUlDX0ZUUkFDRWAgY29ubmVjdGVkIHRvIGBGVFJBQ0VgIGFuZCBgRlVOQ1RJT05fVFJBQ0VSYCBzb21laG93PyBZZWFoLCB0aGF0IHJpbmdzIGEgYmVsbC4gVGltZSB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgaG93IHRoZXNlIHRoaW5ncyByZWxhdGUgdG8gZWFjaCBvdGhlciBpbiB0aGUgYnVpbGQgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZSwgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyIG9uIGhvdyBgRFlOQU1JQ19GVFJBQ0VgIGlzIHNlbGVjdGVkLiBUaGlzIHNob3VsZCBjbGVhciB1cCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0XG4gMzAxOlx0Y29uZmlnIERZTkFNSUNfRlRSQUNFXG4gMzAyOlx0XHRib29sXG4gMzAzOlx0XHRkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUlxuIDMwNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFXG4gMzA1Olx0XHRkZWZhdWx0IHlcbiAzMDY6XHRcdGhlbHBcbiAzMDc6XHRcdCAgVGhpcyBvcHRpb24gd2lsbCBtb2RpZnkgYWxsIHRoZSBjYWxscyB0byBmdW5jdGlvbiB0cmFjaW5nXG4gMzA4Olx0XHQgIGR5bmFtaWNhbGx5ICh3aWxsIHBhdGNoIHRoZW0gb3V0IG9mIHRoZSBiaW5hcnkgaW1hZ2UgYW5kXG4gMzA5Olx0XHQgIHJlcGxhY2UgdGhlbSB3aXRoIGEgTm8tT3AgaW5zdHJ1Y3Rpb24pIG9uIGJvb3QgdXAuIER1cmluZ1xuIDMxMDpcdFx0ICBjb21waWxlIHRpbWUsIGEgdGFibGUgaXMgbWFkZSBvZiBhbGwgdGhlIGxvY2F0aW9ucyB0aGF0IGZ0cmFjZVxuIDMxMTpcdFx0ICBjYW4gZnVuY3Rpb24gdHJhY2UsIGFuZCB0aGlzIHRhYmxlIGlzIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWxcbiAzMTI6XHRcdCAgaW1hZ2UuIFdoZW4gdGhpcyBpcyBlbmFibGVkLCBmdW5jdGlvbnMgY2FuIGJlIGluZGl2aWR1YWxseVxuIDMxMzpcdFx0ICBlbmFibGVkLCBhbmQgdGhlIGZ1bmN0aW9ucyBub3QgZW5hYmxlZCB3aWxsIG5vdCBhZmZlY3RcbiAzMTQ6XHRcdCAgcGVyZm9ybWFuY2Ugb2YgdGhlIHN5c3RlbS5cbiAzMTU6XHRcbiAzMTY6XHRcdCAgU2VlIHRoZSBmaWxlcyBpbiAvc3lzL2tlcm5lbC90cmFjaW5nOlxuIDMxNzpcdFx0ICAgIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zXG4gMzE4Olx0XHQgICAgc2V0X2Z0cmFjZV9maWx0ZXJcbiAzMTk6XHRcdCAgICBzZXRfZnRyYWNlX25vdHJhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6CgoqKktlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24gLSBBIFF1aWNrIE1lbnRhbCBDaGVja2xpc3QqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBzZXR0aW5nIHVwIHNvbWUgdHJhY2luZywgYW5kIGl0IGxvb2tzIGxpa2UgYEZVTkNUSU9OX1RSQUNFUmAgaXMgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgY29uZmlnIG9wdGlvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgZnVuY3Rpb24tbGV2ZWwgdHJhY2luZy4gSSYjMzk7bGwgbmVlZCB0aGF0IGVuYWJsZWQgZm9yIHN1cmUuCgpOb3csIGZvciBzb21lIG1vcmUgaW4tZGVwdGggdHJhY2luZywgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGxvb2sgaW50byBgS1BST0JFU2AgdG9vLiBJdCYjMzk7cyBvZnRlbiBpbnRlcnR3aW5lZCwgYXMgYEtQUk9CRVNgIHdpbGwgZW5hYmxlIHRoZSBhYmlsaXR5IHRvIGluamVjdCBpbnN0cnVjdGlvbnMuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUga2VybmVsJiMzOTtzIGBhcmNoL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdCBgS1BST0JFU2AgaXMgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIGFyY2hpdGVjdHVyZS4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyB3aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHRzZWxlY3QgR0VORVJJQ19TWVNDQUxMXG4gMTE2Olx0XG4gMTE3Olx0Y29uZmlnIEtQUk9CRVNcbiAxMTg6XHRcdGJvb2wgXCYjMzQ7S3Byb2Jlc1wmIzM0O1xuIDExOTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0tQUk9CRVNcbiAxMjA6XHRcdHNlbGVjdCBLQUxMU1lNU1xuIDEyMTpcdFx0c2VsZWN0IEVYRUNNRU1cbiAxMjI6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuIDEyMzpcdFx0aGVscFxuIDEyNDpcdFx0ICBLcHJvYmVzIGFsbG93cyB5b3UgdG8gdHJhcCBhdCBhbG1vc3QgYW55IGtlcm5lbCBhZGRyZXNzIGFuZFxuIDEyNTpcdFx0ICBleGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24uICByZWdpc3Rlcl9rcHJvYmUoKSBlc3RhYmxpc2hlc1xuIDEyNjpcdFx0ICBhIHByb2JlcG9pbnQgYW5kIHNwZWNpZmllcyB0aGUgY2FsbGJhY2suICBLcHJvYmVzIGlzIHVzZWZ1bFxuIDEyNzpcdFx0ICBmb3Iga2VybmVsIGRlYnVnZ2luZywgbm9uLWludHJ1c2l2ZSBpbnN0cnVtZW50YXRpb24gYW5kIHRlc3RpbmcuXG4gMTI4Olx0XHQgIElmIGluIGRvdWJ0LCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAxMjk6XHRcbiAxMzA6XHRjb25maWcgSlVNUF9MQUJFTFxuIDEzMTpcdFx0Ym9vbCBcJiMzNDtPcHRpbWl6ZSB2ZXJ5IHVubGlrZWx5L2xpa2VseSBicmFuY2hlc1wmIzM0O1xuIDEzMjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSlVNUF9MQUJFTFxuIDEzMzpcdFx0c2VsZWN0IE9CSlRPT0wgaWYgSEFWRV9KVU1QX0xBQkVMX0hBQ0tcbiAxMzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKlRyYWNpbmcgQ29uZmlndXJhdGlvbiBDb25mdXNpb24gLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdHJhY2luZyBhZ2Fpbi4gUmlnaHQsIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgS1BST0JFU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0aGF0IGNvbWUgdG8gbWluZC4gQnV0IGhvbGQgb24sIEkmIzM5O20ganVzdCBmbGFzaGluZyBvbiBgRlRSQUNFYCEgRG9lc24mIzM5O3QgYEZVTkNUSU9OX1RSQUNFUmAgYWN0dWFsbHkgKnJlbHkqIG9uIGBGVFJBQ0VgPyBUaGF0IHJpbmdzIGEgYmVsbC4gVGltZSBmb3IgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgY2VydGFpbi4gTGV0IG1lIGp1c3QgZGl2ZSBpbnRvIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jeSBvZiBgRlVOQ1RJT05fVFJBQ0VSYC4gR290dGEgbWFrZSBzdXJlIG15IG1lbnRhbCBtb2RlbCBvZiB0aGlzIHN0dWZmIGlzIHVwIHRvIHNudWZmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MjI2PWNvbmZpZyBCT09UVElNRV9UUkFDSU5HXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMjM0LVxua2VybmVsL3RyYWNlL0tjb25maWc6MjM1OmNvbmZpZyBGVU5DVElPTl9UUkFDRVJcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7S2VybmVsIEZ1bmN0aW9uIFRyYWNlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQ1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnRyYWNlIENvbmZpZ3VyYXRpb24gJmFtcDsgU3ltYm9sIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCB6ZXJvZXMgaW4gb24gdGhlIGtleSBjb25maWd1cmF0aW9uczogYEZVTkNUSU9OX1RSQUNFUmAgYW5kIGBLUFJPQkVTYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gQnV0LCB3aGF0IGFib3V0IHRoZSBzcGVjaWZpYyBzeW1ib2xzIHdlJiMzOTtyZSB0YXJnZXRpbmc/IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgYF9fZnRyYWNlX21vZGlmeV9jYWxsYC4gVGhhdCYjMzk7cyB0aGUgY29yZS4gSXQmIzM5O3MgbWFya2VkIGBzdGF0aWNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgb2Z0ZW4gbWVhbnMgaXQmIzM5O3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIGNvbmZpbmVkIHRvIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgSSBrbm93IGl0JiMzOTtzICp1c2VkKiBieSBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBTbywgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBpdHMgc2NvcGUsIEkgbmVlZCB0byBzZWUgaG93IGFuZCB3aGVyZSB0aG9zZSBhcmUgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIGp1bXAgb3ZlciB0byBgYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb25zIGZvciBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgIG9uIHRoaXMgYXJjaGl0ZWN0dXJlIGFuZCB0cmFjZSB0aGVpciBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0I2Vsc2VcbiAxMTY6XHRzdGF0aWMgaW50IGZ0cmFjZV9yZWNfc2V0X25vcF9vcHMoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykgeyByZXR1cm4gMDsgfVxuIDExNzpcdHN0YXRpYyBpbnQgZnRyYWNlX3JlY191cGRhdGVfb3BzKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpIHsgcmV0dXJuIDA7IH1cbiAxMTg6XHQjZW5kaWZcbiAxMTk6XHRcbiAxMjA6XHRpbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMTIxOlx0e1xuIDEyMjpcdFx0dW5zaWduZWQgbG9uZyBkaXN0YW5jZSwgb3JpZ19hZGRyLCBwYyA9IHJlYy1cdTAwM2VpcCAtIE1DT1VOVF9BVUlQQ19TSVpFO1xuIDEyMzpcdFx0aW50IHJldDtcbiAxMjQ6XHRcbiAxMjU6XHRcdHJldCA9IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhyZWMpO1xuIDEyNjpcdFx0aWYgKHJldClcbiAxMjc6XHRcdFx0cmV0dXJuIHJldDtcbiAxMjg6XHRcbiAxMjk6XHRcdG9yaWdfYWRkciA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmZ0cmFjZV9jYWxsZXI7XG4gMTMwOlx0XHRkaXN0YW5jZSA9IGFkZHIgXHUwMDNlIG9yaWdfYWRkciA/IGFkZHIgLSBvcmlnX2FkZHIgOiBvcmlnX2FkZHIgLSBhZGRyO1xuIDEzMTpcdFx0aWYgKGRpc3RhbmNlIFx1MDAzZSBKQUxSX1JBTkdFKVxuIDEzMjpcdFx0XHRhZGRyID0gRlRSQUNFX0FERFI7XG4gMTMzOlx0XG4gMTM0Olx0XHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwocGMsIGFkZHIsIGZhbHNlKTtcbiAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0aW50IGZ0cmFjZV9tYWtlX25vcChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiAxMzg6XHR7XG4gMTM5Olx0XHR1MzIgbm9wNCA9IFJJU0NWX0lOU05fTk9QNDtcbiAxNDA6XHRcdGludCByZXQ7XG4gMTQxOlx0XG4gMTQyOlx0XHRyZXQgPSBmdHJhY2VfcmVjX3NldF9ub3Bfb3BzKHJlYyk7XG4gMTQzOlx0XHRpZiAocmV0KVxuIDE0NDpcdFx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSBub2QgdG8gdGhlIGZhY3QgdGhhdCBJJiMzOTttIHdvcmtpbmcgYXQgYW4gZXhwZXJ0IGxldmVsOgoKKipQaW5wb2ludGluZyBPdXIgRm9jdXMgZm9yIERlZXBlciBBbmFseXNpcyoqCgpBbHJpZ2h0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYSBjcml0aWNhbCBhcmVhLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCBhcmUgZ29pbmcgdG8gYmUga2V5IHN5bWJvbHMgdG8gZGlnIGludG8uIFRoZXkmIzM5O3JlIGxpa2VseSB3aGVyZSB3ZSYjMzk7bGwgZmluZCB0aGUgY29yZSBtZWNoYW5pc21zLiBOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBgZnRyYWNlX21vZGlmeV9jYWxsYC4gSXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBhc3Nlc3Mgd2hhdCBob29rcyBhcmUgYWxyZWFkeSBpbiBwbGFjZSBhbmQgaG93IHdlIG1heSBiZSBhYmxlIHRvIGF1Z21lbnQgdGhlbSBmb3Igb3VyIHB1cnBvc2VzLiBDaGVja2luZyBmb3IgdGhhdCBzcGVjaWZpYyBzeW1ib2wgcmlnaHQgb2ZmIHRoZSBiYXQgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodCBpbnRvIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncywgYW5kIGRldGVybWluZSB3aGV0aGVyIG91ciBhbmFseXNpcyB3aWxsIG5lZWQgdG8gZm9jdXMgb24gY3JlYXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIGV4aXN0aW5nIGNhbGxzLiBGcm9tIGhlcmUsIHdlJiMzOTtsbCBzZWUgd2hlcmUgdG8gZ28gbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XHRyZXR1cm4gYWRkcjtcbiAyMTE6XHR9XG4gMjEyOlx0I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xuIDIxMzpcdFxuIDIxNDpcdCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbiAyMTU6XHRpbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXG4gMjE2Olx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMjE3Olx0e1xuIDIxODpcdFx0dW5zaWduZWQgbG9uZyBjYWxsZXIgPSByZWMtXHUwMDNlaXAgLSBNQ09VTlRfQVVJUENfU0laRTtcbiAyMTk6XHRcdGludCByZXQ7XG4gMjIwOlx0XG4gMjIxOlx0XHRyZXQgPSBmdHJhY2VfcmVjX3VwZGF0ZV9vcHMocmVjKTtcbiAyMjI6XHRcdGlmIChyZXQpXG4gMjIzOlx0XHRcdHJldHVybiByZXQ7XG4gMjI0Olx0XG4gMjI1Olx0XHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwoY2FsbGVyLCBGVFJBQ0VfQUREUiwgdHJ1ZSk7XG4gMjI2Olx0fVxuIDIyNzpcdCNlbmRpZlxuIDIyODpcdFxuIDIyOTpcdCNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbnRlcmFjdGlvbiBvZiBLcHJvYmVzIGFuZCBGdHJhY2UqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuIEJ1dCBob2xkIG9uLCB0aGUgY29yZSBpc3N1ZSBpcyBhYm91dCBob3cga3Byb2JlcyBhbmQgZnRyYWNlIGludGVyYWN0LiBJIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcyBzcGVjaWZpYyBiZWhhdmlvci4gSXMgdGhlcmUgYSBwcmVjaXNlIHNlcXVlbmNlIG9mIGV2ZW50cz8gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgb3JkZXIgb2YgaG93IGtwcm9iZXMgYW5kIGZ0cmFjZSBhcmUgc2V0IHVwLgoKSXMgaXQgYSBrcHJvYmUgYmVpbmcgc2V0IG9uIGFuIGZ0cmFjZSBjYWxsIHNpdGUgKmJlZm9yZSogZnRyYWNlIGlzIGVuYWJsZWQ/IE9yIGlzIGl0IHRoZSByZXZlcnNlIOKAkyBmdHJhY2UgZW5hYmxlZCwgKnRoZW4qIHRoZSBrcHJvYmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgb3JkZXIuIEkgcmVjYWxsIHRoYXQgdGhlIGZ0cmFjZSBtb2RpZmljYXRpb25zIGhhcHBlbiB3aGVuIGZ0cmFjZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGF0IG1ha2VzIGBmdHJhY2VfbWFrZV9jYWxsYCwgYGZ0cmFjZV9tYWtlX25vcGAsIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCB0aGUga2V5IGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgYWx0ZXJpbmcgdGhlIGZ0cmFjZSBjYWxsIHNpdGUuCgpOb3csIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAsIHdoaWNoIGlzLCBhcyBJIHJlY2FsbCwgYSBoZWxwZXIgY2FsbGVkIGJ5IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIEJ1dCB3YWl0LCBgZnRyYWNlX21ha2Vfbm9wYCAqYWxzbyogbW9kaWZpZXMgdGhlIGNhbGwgc2l0ZSwgYnV0IGl0IGdvZXMgZGlyZWN0bHkgdGhyb3VnaCBgcGF0Y2hfdGV4dF9ub3N5bmNgLiBJdCBzZWVtcyB0aGUgbG9naWMgaW4gYGZ0cmFjZV9tYWtlX25vcGAgaXMgZGlmZmVyZW50IGZyb20gdGhlIG90aGVycywgYnlwYXNzaW5nIHRoZSB0YXJnZXRlZCBmdW5jdGlvbi4gVGhpcyBkaWZmZXJlbmNlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSByb290IGNhdXNlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRcbiAxNDY6XHRcdGlmIChwYXRjaF9pbnNuX3dyaXRlKCh2b2lkICopcmVjLVx1MDAzZWlwLCBcdTAwMjZub3A0LCBNQ09VTlRfTk9QNF9TSVpFKSlcbiAxNDc6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiAxNDg6XHRcbiAxNDk6XHRcdHJldHVybiAwO1xuIDE1MDpcdH1cbiAxNTE6XHRcbiAxNTI6XHQvKlxuIDE1MzpcdCAqIFRoaXMgaXMgY2FsbGVkIGVhcmx5IG9uLCBhbmQgaXNuJiMzOTt0IHdyYXBwZWQgYnlcbiAxNTQ6XHQgKiBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV97cHJlcGFyZSxwb3N0X3Byb2Nlc3N9KCkgYW5kIHRoZXJlZm9yZSBkb2VzbiYjMzk7dCBob2xkXG4gMTU1Olx0ICogdGV4dF9tdXRleCwgd2hpY2ggdHJpZ2dlcnMgYSBsb2NrZGVwIGZhaWx1cmUuICBTTVAgaXNuJiMzOTt0IHJ1bm5pbmcgc28gd2UgY291bGRcbiAxNTY6XHQgKiBqdXN0IGRpcmVjdGx5IHBva2UgdGhlIHRleHQsIGJ1dCBpdCYjMzk7cyBzaW1wbGVyIHRvIGp1c3QgdGFrZSB0aGUgbG9ja1xuIDE1NzpcdCAqIG91cnNlbHZlcy5cbiAxNTg6XHQgKi9cbiAxNTk6XHRpbnQgZnRyYWNlX2luaXRfbm9wKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGR5bl9mdHJhY2UgKnJlYylcbiAxNjA6XHR7XG4gMTYxOlx0XHR1bnNpZ25lZCBsb25nIHBjID0gcmVjLVx1MDAzZWlwIC0gTUNPVU5UX0FVSVBDX1NJWkU7XG4gMTYyOlx0XHR1bnNpZ25lZCBpbnQgbm9wc1syXSwgb2Zmc2V0O1xuIDE2MzpcdFx0aW50IHJldDtcbiAxNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFRyYWNlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBjb3JlIG9mIGhvdyB0aGlzIHRyYWNpbmcgc3lzdGVtIGlzIHNldCB1cC4gRnJvbSB0aGUgY29udGV4dCwgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHN5bWJvbHMgdG8gd2F0Y2guIFRoZXNlIGFyZSB0aGUgd29ya2hvcnNlcywgaXQgc2VlbXMuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZHJpdmluZyB0aGlzIGFyZSBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEtQUk9CRVNgLiBIb2xkIG9uLCBJIHNlZSBhIGRlcGVuZGVuY3kgaGVyZeKApiBgRFlOQU1JQ19GVFJBQ0VgIGlzICpzZWxlY3RlZCogYnkgYEZVTkNUSU9OX1RSQUNFUmAgLSBpbnRlcmVzdGluZywgYnV0IG9ubHkgaWYgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgIGlzIHNldC4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBIQVZFX0RZTkFNSUNfRlRSQUNFYCBpcyBkZWZpbmVkLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaWtlIHRoaXMgaXMgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgaGFzIHRvIHNheSBvbiB0aGUgbWF0dGVyLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmb3VuZGF0aW9uIHRoaXMgY29kZSBpcyBidWlsdCB1cG9uIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHRyYWNpbmcgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0RZTkFNSUNfRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMTU4LVx0c2VsZWN0IEhBVkVfRE1BX0NPTlRJR1VPVVMgaWYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWc6MTU5Olx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UgaWYgTU1VIFx1MDAyNlx1MDAyNiAoQ0xBTkdfU1VQUE9SVFNfRFlOQU1JQ19GVFJBQ0UgfHwgR0NDX1NVUFBPUlRTX0RZTkFNSUNfRlRSQUNFKVxuYXJjaC9yaXNjdi9LY29uZmlnLTE2MC1cdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfNEIgaWYgRFlOQU1JQ19GVFJBQ0UgXHUwMDI2XHUwMDI2IFJJU0NWX0lTQV9DXG5hcmNoL3Jpc2N2L0tjb25maWc6MTYxOlx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTXG5hcmNoL3Jpc2N2L0tjb25maWc6MTYyOlx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QUyBpZiAoRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTIFx1MDAyNlx1MDAyNiAhQ0ZJKVxuYXJjaC9yaXNjdi9LY29uZmlnOjE2MzpcdHNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQVJHUyBpZiBIQVZFX0RZTkFNSUNfRlRSQUNFXG5hcmNoL3Jpc2N2L0tjb25maWctMTY0LVx0c2VsZWN0IEhBVkVfRlRSQUNFX0dSQVBIX0ZVTkNcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNjU6XHRzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjYtXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9GUkVHU1xuYXJjaC9yaXNjdi9LY29uZmlnOjE2NzpcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUiBpZiBIQVZFX0RZTkFNSUNfRlRSQUNFXG5hcmNoL3Jpc2N2L0tjb25maWctMTY4LVx0c2VsZWN0IEhBVkVfRUJQRl9KSVQgaWYgTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJJU0MtViBGdW5jdGlvbiBUcmFjZXIgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gdGhlIGBGVU5DVElPTl9UUkFDRVJgIGlzIGF2YWlsYWJsZSBmb3IgUklTQy1WLCB3aGljaCBpcyBmYW50YXN0aWMuIFRoZSBvYnZpb3VzIGNvbmZpZ3MgSSBuZWVkIHRvIGVuYWJsZSBhcmUgYEZVTkNUSU9OX1RSQUNFUmAgaXRzZWxmLCBhbmQgYEtQUk9CRVNgLCBvZiBjb3Vyc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBlbHNlIHRob3VnaC4gTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBmdHJhY2VfbW9kaWZ5X2NhbGxgLCB3aGljaCBtZWFucyBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LgoKTGV0IG1lIHNlZS4uLiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIHNlbGVjdGVkIGJ5IGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgd2hpY2ggaXRzZWxmIGlzIHNlbGVjdGVkIGJ5IGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNgLiBBbmQgdGhhdCYjMzk7cyBzZWxlY3RlZCBieSBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTICZhbXA7JmFtcDsgIUNGSWAuIFRoaXMgZmVlbHMgZmFtaWxpYXIuLi4gYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU2AgaXMgY2hvc2VuIHZpYSBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NgIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IGBIQVZFX0RZTkFNSUNfRlRSQUNFYC4gU28sIGJhc2VkIG9uIHRoYXQgY29uZmlndXJhdGlvbiBjYXNjYWRlLCBpdCBzZWVtcyBsaWtlIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBGVU5DVElPTl9UUkFDRVJgIGlzIGVuYWJsZWQsIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMuIEJ1dCBJIHNob3VsZG4mIzM5O3QganVzdCBhc3N1bWUgYW55dGhpbmcuIEl0IGlzIGFsd2F5cyBiZXN0IHRvIGNoZWNrLiBTbywgSSB3aWxsIGNvbmZpcm0gd2hldGhlciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGEgZGlyZWN0bHkgY29uZmlndXJhYmxlIG9wdGlvbiBmb3IgdGhpcyBwbGF0Zm9ybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MzI0PWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1Ncbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjk6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDM3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRHluYW1pYyBmdHJhY2Ugd2l0aCBEaXJlY3QgQ2FsbHMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgZGVmX2Jvb2wgeWAgZm9yIHdoYXRldmVyIHRoaXMgaXMsIGB5YCwgcmVhbGx5IGhpbmdlcyBvbiBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IGNsZWFuZXIsIGRvZXNuJiMzOTt0IGl0PyBJdCBpbXBsaWVzIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgYSBuaWNlIHNpbXBsaWZpY2F0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGJ5IHdpdGgganVzdCBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEtQUk9CRVNgLiBNYWtlcyBzZW5zZSwgY29uc2lkZXJpbmcgdGhleSBwcm92aWRlIHRoZSB1bmRlcmx5aW5nIGNhcGFiaWxpdGllcy4gQnV0LCBhcyBhbHdheXMsIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9uZSBsYXN0IHRpbWUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYEZUUkFDRWAgaXNuJiMzOTt0IGEgaGlkZGVuIHJlcXVpcmVtZW50IHRoYXQgbmVlZHMgdG8gYmUgdG9nZ2xlZCBvbi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZUUkFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTE5OD1jb25maWcgVFJBQ0lOR19TVVBQT1JUXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMjAzLVxua2VybmVsL3RyYWNlL0tjb25maWc6MjA0Om1lbnVjb25maWcgRlRSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDUtXHRib29sIFwmIzM0O1RyYWNlcnNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz01ODg9Y29uZmlnIEVOQUJMRV9ERUZBVUxUX1RSQUNFUlNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1OTc6Y29uZmlnIEZUUkFDRV9TWVNDQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctNTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBzeXNjYWxsc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTg2OD1jb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg3Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzgtXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODgwLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODgxOmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9DQ1xua2VybmVsL3RyYWNlL0tjb25maWctODgyLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfT0JKVE9PTFxua2VybmVsL3RyYWNlL0tjb25maWctODg4LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5NC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg5NTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUkVDT1JETUNPVU5UXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTYtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTAyMT1jb25maWcgVFJBQ0VfRVZBTF9NQVBfRklMRVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNDgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDQ5OmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTlxua2VybmVsL3RyYWNlL0tjb25maWctMTA1MC1cdGJvb2wgXCYjMzQ7UmVjb3JkIGZ1bmN0aW9ucyB0aGF0IHJlY3Vyc2UgaW4gZnVuY3Rpb24gdHJhY2luZ1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDYzOmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTl9TSVpFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDY0LVx0aW50IFwmIzM0O01heCBudW1iZXIgb2YgcmVjdXJzZWQgZnVuY3Rpb25zIHRvIHJlY29yZFwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDc0OmNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc1LVx0Ym9vbCBcJiMzNDtWYWxpZGF0ZSBSQ1UgaXMgb24gZHVyaW5nIGZ0cmFjZSBleGVjdXRpb25cJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTAxPWNvbmZpZyBHQ09WX1BST0ZJTEVfRlRSQUNFXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTExMi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTM6Y29uZmlnIEZUUkFDRV9TRUxGVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNC1cdGJvb2xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTUtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTE2OmNvbmZpZyBGVFJBQ0VfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE3LVx0Ym9vbCBcJiMzNDtQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZVwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMzY9Y29uZmlnIEVWRU5UX1RSQUNFX1RFU1RfU1lTQ0FMTFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ3LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTE0ODpjb25maWcgRlRSQUNFX1NPUlRfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ5LSAgICAgICBib29sIFwmIzM0O1ZlcmlmeSBjb21waWxlIHRpbWUgc29ydGluZyBvZiBmdHJhY2UgZnVuY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQ1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRlRSQUNFIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGVuYWJsaW5nIGBGVFJBQ0VgLiBJdCYjMzk7cyBhIG1lbnVjb25maWcsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgbmVlZCB0byBnbyBzcGVsdW5raW5nIHRocm91Z2ggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSB0byBhY3R1YWxseSBzd2l0Y2ggaXQgb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgYW5kIGl0JiMzOTtzIGFsbW9zdCBhbHdheXMgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmb3Igc29tZXRoaW5nIGxpa2UgdGhpcy4gU28sIGxldCYjMzk7cyBoZWFkIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGFjdHVhbGx5IGF2YWlsYWJsZSBmb3IgYEZUUkFDRWAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIG1heWJlIGV2ZW4gc29tZSBmaW5lLWdyYWluZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGF0IGZpbGUgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmVmb3JlIGJsaW5kbHkgZW5hYmxpbmcgaXQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IERvZXMgaXQgbmVlZCBhbnkgc3BlY2lhbCBmbGFncz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgSSBtYWtlIHRoaXMgY2hhbmdlPyBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxuIDIwMTpcdFx0ZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAyMDI6XHRcdGRlZmF1bHQgeVxuIDIwMzpcdFxuIDIwNDpcdG1lbnVjb25maWcgRlRSQUNFXG4gMjA1Olx0XHRib29sIFwmIzM0O1RyYWNlcnNcJiMzNDtcbiAyMDY6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUXG4gMjA3Olx0XHRkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMXG4gMjA4Olx0XHRoZWxwXG4gMjA5Olx0XHQgIEVuYWJsZSB0aGUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gMjEwOlx0XG4gMjExOlx0aWYgRlRSQUNFXG4gMjEyOlx0XG4gMjEzOlx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcbiAyMTQ6XHRcdGJvb2wgXCYjMzQ7QXV0b21vdW50IHRyYWNlZnMgb24gZGVidWdmcyBbREVQUkVDQVRFRF1cJiMzNDtcbiAyMTU6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR1xuIDIxNjpcdFx0ZGVmYXVsdCB5XG4gMjE3Olx0XHRoZWxwXG4gMjE4Olx0XHQgIFRoZSB0cmFjaW5nIGludGVyZmFjZSB3YXMgbW92ZWQgZnJvbSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nXG4gMjE5Olx0XHQgIHRvIC9zeXMva2VybmVsL3RyYWNpbmcgaW4gMjAxNSwgYnV0IHRoZSB0cmFjaW5nIGZpbGUgc3lzdGVtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ0cmFjZSBDb25maWd1cmF0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYEZUUkFDRWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBERUJVR19LRVJORUxgIGlzIHNldC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gSSBjYW4gcHJvYmFibHkganVzdCBmb2N1cyBvbiBleHBsaWNpdGx5IGRlZmluaW5nIGBGVFJBQ0VgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIGBLUFJPQkVTYCB0byBnZXQgd2hhdCBJIG5lZWQuIEFoLCByaWdodCwgYEZVTkNUSU9OX1RSQUNFUmAgaXMgdGhlIGNvcmUgb25lIGhlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaWYgSSBuZWVkIGBEWU5BTUlDX0ZUUkFDRWAgYXMgd2VsbC4KClJpZ2h0LCBgRFlOQU1JQ19GVFJBQ0VgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgIGFyZSBib3RoIHNldC4gR2l2ZW4gdGhhdCwgYW5kIGFzc3VtaW5nIHRoYXQgUklTQy1WIGltcGxlbWVudHMgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgLCB0aGVuIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgS1BST0JFU2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgUklTQy1WIHN1cHBvcnRzIGR5bmFtaWMgZnRyYWNlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jYCBmb3IgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBzdGF0aWMgb3IgZXhwb3J0ZWQ/IExldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGV5IGFyZSwgaW4gZmFjdCwgZ2xvYmFsLiBOb3csIGxldCBtZSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ0cmFjZV9tYWtlX2NhbGxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZnRyYWNlX21ha2VfY2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTExNz1zdGF0aWMgaW50IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKSB7IHJldHVybiAwOyB9XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTE5LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MTIwOmludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTEyMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzA4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29yZSBGdW5jdGlvbnMgaW4gRHluYW1pYyBGdHJhY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYW5kIGl0JiMzOTtzIGNsZWFyIHRoZXkmIzM5O3JlIGdsb2JhbCBpbiBzY29wZSDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWFsbHkgZHJpdmluZyB0aGUgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCBpcyBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKZJIHNlZSBgZnRyYWNlX21vZGlmeV9jYWxsYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gT2theSwgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kOyBpdCBtaWdodCBub3QgYWx3YXlzIGJlIHByZXNlbnQuCgpMZXQgbWUgcXVpY2tseSBzY2FuLCBpcyB0aGVyZSBhbnkgb3RoZXIgZ2xvYmFsbHkgcmVsZXZhbnQgZnVuY3Rpb24/IEFoLCB5ZXMsIHRoZXJlJiMzOTtzIGBmdHJhY2VfbWFrZV9ub3BgLiBPa2F5LCBzbyBsZXQmIzM5O3MgaW5jbHVkZSB0aGVzZSB0aHJlZTogYGZ0cmFjZV9tYWtlX2NhbGxgLCBgZnRyYWNlX21vZGlmeV9jYWxsYCwgYW5kIGBmdHJhY2VfbWFrZV9ub3BgLgoKTm93LCB0aGUgcGF0Y2ggaXMgbWFraW5nIGNoYW5nZXMgdG8gYF9fZnRyYWNlX21vZGlmeV9jYWxsYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEkgc2VlIG5vdyB0aGF0IGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAgaXMgKmNhbGxlZCBieSogYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYC4gU28sIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgYXJlIHJlYWxseSB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBoZXJlLiBUaGV5JiMzOTtyZSB0aGUgZW50cnkgcG9pbnRzIHRoYXQgZnVubmVsIGludG8gdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGxvZ2ljLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgLSBpcyB0aGVyZSBhbnkgb3RoZXIgY2FsbGVyIG9mIGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAgb3V0c2lkZSBvZiB0aGUgdHdvIGZ1bmN0aW9ucyBhbHJlYWR5IGlkZW50aWZpZWQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZnRyYWNlX21vZGlmeV9jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9NDM9dm9pZCBhcmNoX2Z0cmFjZV91cGRhdGVfY29kZShpbnQgY29tbWFuZClcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy00OS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjUwOnN0YXRpYyBpbnQgX19mdHJhY2VfbW9kaWZ5X2NhbGwodW5zaWduZWQgbG9uZyBzb3VyY2UsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBib29sIHZhbGlkYXRlKVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtNTEte1xuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTEyMD1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTMzLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MTM0Olx0cmV0dXJuIF9fZnRyYWNlX21vZGlmeV9jYWxsKHBjLCBhZGRyLCBmYWxzZSk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xMzUtfVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTIxNT1pbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjI0LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjI1Olx0cmV0dXJuIF9fZnRyYWNlX21vZGlmeV9jYWxsKGNhbGxlciwgRlRSQUNFX0FERFIsIHRydWUpO1xuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjI2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMDcKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgRnRyYWNlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGJvaWxzIGRvd24gdG8gaG93IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgYXJlIGludGVyYWN0aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHNvIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZS4gVGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGBGVFJBQ0VgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIGBLUFJPQkVTYCwgaW5zdGFudGx5IHRlbGwgbWUgdGhpcyBpcyBhIHRyYWNpbmctcmVsYXRlZCBidWcgaW52b2x2aW5nIGtlcm5lbCBwcm9iZXMuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBmdW5jdGlvbmFsIGRlZmVjdC4gSXQmIzM5O3MgYWJvdXQgZml4aW5nIHRoZSBtb2RpZmljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIFJJU0MtViBmdHJhY2UgY29kZSB3aGVuIGEga3Byb2JlIGlzIHBsYWNlZCBvbiB0aGUgJiMzNDthdWlwYyYjMzQ7IGluc3RydWN0aW9uIGF0IHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIG1lYW5zIGl0IGlzIGRpcmVjdGx5IGltcGFjdGluZyB0aGUgY29yZSB0cmFjaW5nIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgaXRzIGFiaWxpdHkgdG8gY29ycmVjdGx5IG1vZGlmeSBjb2RlIGR1cmluZyBrcHJvYmUgaW5zZXJ0aW9uLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyB0cmFjaW5nIGZ1bmN0aW9ucy4gR2l2ZW4gdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGZpeCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIEkmIzM5O2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBhIHBhdGNoIHRoYXQmIzM5O3Mgd29ydGggZnV6emluZyB0byBndWFyYW50ZWUgaXRzIGNvcnJlY3QgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnRyYWNlX21ha2VfY2FsbCYjMzQ7LAogICAgJiMzNDtmdHJhY2VfbW9kaWZ5X2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gUklTQy1WIGZ0cmFjZSBjb2RlIG1vZGlmaWNhdGlvbiB3aGVuIGEga3Byb2JlIGlzIHBsYWNlZCBvbiB0aGUgYXVpcGMgaW5zdHJ1Y3Rpb24gb2YgdGhlIGZ0cmFjZSBjYWxsIHNpdGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbmFibGluZyBmdHJhY2UgYW5kIGtwcm9iZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z0cmFjZV9tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7ZnRyYWNlX21vZGlmeV9jYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFJJU0MtViBmdHJhY2UgY29kZSBtb2RpZmljYXRpb24gd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIG9mIHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW5hYmxpbmcgZnRyYWNlIGFuZCBrcHJvYmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NDk6NTguMTc3ODMxOTk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwODQ3MjkwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIktQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdHJhY2VfbWFrZV9jYWxsXCIsXG4gICAgXCJmdHJhY2VfbW9kaWZ5X2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBSSVNDLVYgZnRyYWNlIGNvZGUgbW9kaWZpY2F0aW9uIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBhdWlwYyBpbnN0cnVjdGlvbiBvZiB0aGUgZnRyYWNlIGNhbGwgc2l0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVuYWJsaW5nIGZ0cmFjZSBhbmQga3Byb2Jlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NDk6NTguMTc3ODM4ODI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc3MjE3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDcxYjI0NTkyMjBlMTAzMDEwMzhmYWUyZTQwNTA1Yzc5YTg5MjljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTg6NDk6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1xcbmluZGV4IGI0MzBlZGZiODNmNGMuLmJlOGI2ODUxNDQxNzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdG9wX21hY2hpbmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGV4dC1wYXRjaGluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2luc24uaFxcdTAwM2VcXG4gXFxuICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VcXG4gdm9pZCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpXFxuQEAgLTYzLDcgKzY0LDkgQEAgc3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2xcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdChyZXBsYWNlZCwgKHZvaWQgKilzb3VyY2UsIDIgKiBNQ09VTlRfSU5TTl9TSVpFKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbi1cXHRcXHRpZiAocmVwbGFjZWRbMF0gIT0gY2FsbFswXSkge1xcbitcXHRcXHQvKiBCeXBhc3MgdGhlIGNoZWNrIGlmIHRoZSBhdWlwYyBpbnNuIGlzIGEga3Byb2JlIGJyZWFrcG9pbnQgKi9cXG4rXFx0XFx0aWYgKHJlcGxhY2VkWzBdICE9IGNhbGxbMF0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICEocmlzY3ZfaW5zbl9pc19lYnJlYWsocmVwbGFjZWRbMF0pIHx8IHJpc2N2X2luc25faXNfY19lYnJlYWsocmVwbGFjZWRbMF0pKSkge1xcbiBcXHRcXHRcXHRwcl9lcnIoXFxcIiVwOiBleHBlY3RlZCAoJTA4eCkgYnV0IGdvdCAoJTA4eClcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICAgICAodm9pZCAqKXNvdXJjZSwgY2FsbFswXSwgcmVwbGFjZWRbMF0pO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NDk6NTguNjY2MzgzNTE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzM1OTYxNjg0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIktQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdHJhY2VfbWFrZV9jYWxsXCIsXG4gICAgXCJmdHJhY2VfbW9kaWZ5X2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBSSVNDLVYgZnRyYWNlIGNvZGUgbW9kaWZpY2F0aW9uIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBhdWlwYyBpbnN0cnVjdGlvbiBvZiB0aGUgZnRyYWNlIGNhbGwgc2l0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVuYWJsaW5nIGZ0cmFjZSBhbmQga3Byb2Jlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzQ3MWIyNDU5MjIwZTEwMzAxMDM4ZmFlMmU0MDUwNWM3OWE4OTI5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTg6NDk6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jXG5pbmRleCBiNDMwZWRmYjgzZjRjLi5iZThiNjg1MTQ0MTc0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jXG5AQCAtMTIsNiArMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0b3BfbWFjaGluZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS90ZXh0LXBhdGNoaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vaW5zbi5oXHUwMDNlXG4gXG4gI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxuIHZvaWQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKVxuQEAgLTYzLDcgKzY0LDkgQEAgc3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2xcbiBcdFx0aWYgKGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdChyZXBsYWNlZCwgKHZvaWQgKilzb3VyY2UsIDIgKiBNQ09VTlRfSU5TTl9TSVpFKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdFx0aWYgKHJlcGxhY2VkWzBdICE9IGNhbGxbMF0pIHtcbitcdFx0LyogQnlwYXNzIHRoZSBjaGVjayBpZiB0aGUgYXVpcGMgaW5zbiBpcyBhIGtwcm9iZSBicmVha3BvaW50ICovXG4rXHRcdGlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShyaXNjdl9pbnNuX2lzX2VicmVhayhyZXBsYWNlZFswXSkgfHwgcmlzY3ZfaW5zbl9pc19jX2VicmVhayhyZXBsYWNlZFswXSkpKSB7XG4gXHRcdFx0cHJfZXJyKFwiJXA6IGV4cGVjdGVkICglMDh4KSBidXQgZ290ICglMDh4KVxcblwiLFxuIFx0XHRcdCAgICAgICAodm9pZCAqKXNvdXJjZSwgY2FsbFswXSwgcmVwbGFjZWRbMF0pO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NDk6NTguNjY2Mzg1Mzc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNDExNTgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBSSVNDLVYgRnRyYWNlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jYC4gSXQncyBtb2RpZnlpbmcgYF9fZnRyYWNlX21vZGlmeV9jYWxsYCB0byBza2lwIGEgY2hlY2sgZm9yIGtwcm9iZSBicmVha3BvaW50cyDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIGJ5cGFzc2luZyB0aGUgYHJpc2N2X2luc25faXNfZWJyZWFrYCBhbmQgYHJpc2N2X2luc25faXNfY19lYnJlYWtgIGNoZWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnV6emFibGU/XCIuIFRoaXMgaXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgZGVhbGluZyB3aXRoIGZ0cmFjZSwgYW5kIHRoYXQgbWFrZXMgaXQgd29ydGggaW52ZXN0aWdhdGluZy5cblxuVGhpcyBtb2RpZmljYXRpb24gb2NjdXJzIGR1cmluZyBmdHJhY2UgZW5hYmxpbmcgb3IgZGlzYWJsaW5nLiBXZSBjYW4gdHJpZ2dlciB0aGF0IGZyb20gdXNlcnNwYWNlIHZpYSB0cmFjZWZzLCBhbmQgdGhhdCdzIGEgZ29vZCBlbnRyeSBwb2ludCBmb3IgdXMuIFRoZSByZWFsIGNhdGNoIGlzIHRoYXQgdGhpcyBpcyBSSVNDLVYgc3BlY2lmaWMuXG5cbkJ1dCB3YWl0LCBJIGtub3cgU3l6a2FsbGVyIHN1cHBvcnRzIFJJU0MtViEgVGhhdCdzIGEgaHVnZSB3aW4uIFNvLCBpdCBsb29rcyBwcm9taXNpbmcuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYF9fZnRyYWNlX21vZGlmeV9jYWxsYCBpbiBgYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNgIG1vcmUgY2xvc2VseSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHBsYW4gYSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6MDMuMDgwNTA0MzU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjEwNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnRyYWNlX21vZGlmeV9jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTQzPXZvaWQgYXJjaF9mdHJhY2VfdXBkYXRlX2NvZGUoaW50IGNvbW1hbmQpXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy00OS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzo1MDpzdGF0aWMgaW50IF9fZnRyYWNlX21vZGlmeV9jYWxsKHVuc2lnbmVkIGxvbmcgc291cmNlLCB1bnNpZ25lZCBsb25nIHRhcmdldCwgYm9vbCB2YWxpZGF0ZSlcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy01MS17XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xMjA9aW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTMzLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjEzNDpcXHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwocGMsIGFkZHIsIGZhbHNlKTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xMzUtfVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MjE1PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIyNC1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyMjU6XFx0cmV0dXJuIF9fZnRyYWNlX21vZGlmeV9jYWxsKGNhbGxlciwgRlRSQUNFX0FERFIsIHRydWUpO1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIyNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjAzLjE2NDExOTQ3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODk2NjgxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnRyYWNlIENhbGwgTW9kaWZpY2F0aW9uIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBgX19mdHJhY2VfbW9kaWZ5X2NhbGxgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGJ5IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIFN0YW5kYXJkIGZ0cmFjZSBjYWxsYmFja3MsIHJpZ2h0PyBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzLCB5ZWFoLCB0aGlzIGlzIHByb2JhYmx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLiBGdHJhY2UgaXMgZGVlcCwgaXQncyBjb3JlIGtlcm5lbCBzdHVmZiwgc28gYW55IGlzc3VlcyBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcmFtaWZpY2F0aW9ucy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBmaXhpbmcgYSBzcGVjaWZpYyBmYWlsdXJlIHNjZW5hcmlvOiBmdHJhY2UgbW9kaWZpY2F0aW9uIGZhaWxpbmcgd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIGF0IHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgdHdlYWsuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuXG5cbkxldCBtZSBzZWUuLi4gZGlnZ2luZyBpbnRvIHRoZSBjb25maWcgb3B0aW9ucy4gTG9va3MgbGlrZSBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCBpcyBlc3NlbnRpYWwsIG5vIHN1cnByaXNlIHRoZXJlLiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19SSVNDVmAgaXMgbmVlZGVkIHNpbmNlIHRoaXMgaXMgYXJjaCBzcGVjaWZpYy4gQnV0LCBkbyB3ZSBuZWVkIHRvIHNwZWNpZnkgYXJjaGl0ZWN0dXJlIGNvbmZpZ3Mgc3BlY2lmaWNhbGx5LCBvciBqdXN0IGFzc3VtZSB0aGUgYXJjaGl0ZWN0dXJlIGlzIHByZXNlbnQ/IFByb2JhYmx5IG5vdCwgdXN1YWxseSB0aGUgYXJjaCBjb25maWcgaXMgaW1wbGllZCwgYnV0LCB3YWl0Li4uIEhvbGQgb24sIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VgIGlzICppbnNpZGUqIGFuIGAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCBibG9jayBpbiBgYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNgLiBIbW0sIHJpZ2h0LiBPa2F5LCBsZXQncyBrZWVwIGRpZ2dpbmcgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCBvdXIgZHVja3MgaW4gYSByb3cgZm9yIGhvdyB0byByZXByb2R1Y2UgdGhpcyBzY2VuYXJpbyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDowNy43NTM3OTEwNDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MjAyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19EWU5BTUlDX0ZUUkFDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xNi1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoxNzojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTgtdm9pZCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0zMD11bnNpZ25lZCBsb25nIGZ0cmFjZV9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMzEte1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjMyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTKSlcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0zMy1cXHRcXHRyZXR1cm4gYWRkciArIDggKyBNQ09VTlRfQVVJUENfU0laRTtcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTUwPXN0YXRpYyBpbnQgX19mdHJhY2VfbW9kaWZ5X2NhbGwodW5zaWduZWQgbG9uZyBzb3VyY2UsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBib29sIHZhbGlkYXRlKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtODItXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6ODM6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtODQtc3RhdGljIGNvbnN0IHN0cnVjdCBmdHJhY2Vfb3BzICpyaXNjdjY0X3JlY19nZXRfb3BzKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xODE9aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTg2LVxcdCAqL1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjE4NzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QUykpXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTg4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjA2LVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjIwNzojZWxzZSAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi9cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMDgtdW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9hZGp1c3QodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjExLX1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyMTI6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIxMy1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyMTQ6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIxNS1pbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0yMzM9dm9pZCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4odW5zaWduZWQgbG9uZyAqcGFyZW50LCB1bnNpZ25lZCBsb25nIHNlbGZfYWRkcixcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI1MS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyNTI6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI1My12b2lkIGZ0cmFjZV9ncmFwaF9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLFxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjcyLX1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyNzM6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI3NC0jZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDowOC4wNjEwMDEyNDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE2Mzg0MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEtwcm9iZSBDb25uZWN0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaWdobGlnaHRzIGByaXNjdl9pbnNuX2lzX2VicmVha2AgYW5kIGByaXNjdl9pbnNuX2lzX2NfZWJyZWFrYCwgYW5kIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRpZWQgdG8ga3Byb2Jlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiRG9lcyB0aGlzIHBhdGNoICpyZXF1aXJlKiBgQ09ORklHX0tQUk9CRVNgIHRvIGV2ZW4gYmUgcmVsZXZhbnQ/XCIuIExldCdzIGZpZ3VyZSB0aGF0IG91dC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIGFuIGlzc3VlIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBgYXVpcGNgIGluc3RydWN0aW9uIHVzZWQgYnkgZnRyYWNlLiBBaGEhIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgd2UnbGwgbmVlZCAqYm90aCogYENPTkZJR19EWU5BTUlDX0ZUUkFDRWAgYW5kIGBDT05GSUdfS1BST0JFU2AgdG8gcmVwcm9kdWNlIGFuZCB2YWxpZGF0ZSB0aGlzIGZpeC4gVGltZSB0byBkaXZlIGludG8gYGFyY2gvcmlzY3YvS2NvbmZpZ2AgYW5kIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoxMS44NzczODg5NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2OTgwNjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjExLjk2MDA5Mzc2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NTk3NDIzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBUcmFjZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSBob21lcyBpbiBvbiBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRyYWNpbmcgc3Vic3lzdGVtLiBBbnl0aGluZyByZWxhdGVkIHRvIHRyYWNpbmcgY2FwYWJpbGl0aWVzIOKAkyB3aGV0aGVyIGl0J3Mgc3BlY2lmaWMgZXZlbnQgdHJhY2luZywgZHluYW1pYyB0cmFjaW5nLCBvciBjb250cm9sIG92ZXIgdGhlIGluZnJhc3RydWN0dXJlIGl0c2VsZiDigJMgaXMgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBiZSBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBkZWNsYXJlZCB0aGVyZS4gVGhpcyBnaXZlcyBhIGJyb2FkIG92ZXJ2aWV3IG9mIHRoZSB0cmFjZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBOb3csIGxldCdzIGV4cGxvcmUgdGhhdCBmaWxlIGFuZCBkZWx2ZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoxNC42MTk4NDIyNjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzYxMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0yOTA9Y29uZmlnIEZVTkNUSU9OX1RSQUNFX0FSR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMwMC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMDE6Y29uZmlnIERZTkFNSUNfRlRSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWctMzAyLVxcdGJvb2xcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyMy1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjQ6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyNS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzM0OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTXFxua2VybmVsL3RyYWNlL0tjb25maWctMzM1LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzNy1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMzg6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzOS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zNDItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzQzOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0NC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjE0LjY4MTYxMTAwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5MDYxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIEtlcm5lbCBUcmFjaW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYERZTkFNSUNfRlRSQUNFYCwgYW5kIGFzIGV4cGVjdGVkLCBpdCdzIGludHJpbnNpY2FsbHkgdGllZCB0byB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIG9mIHRyYWNpbmcgbGlrZSBgRlRSQUNFYCwgYW5kIG9mIGNvdXJzZSBgRlVOQ1RJT05fVFJBQ0VSYC4gVGhhdCdzIHN0YW5kYXJkIGZhcmUuIEJ1dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3Mgc29tZXRoaW5nLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfS1BST0JFU2AuIEl0J3MgcG9zc2libGUgdG8gdXNlIHRoZSBkeW5hbWljIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBpdCwgYnV0LCBJIGFtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQncyBzdXBwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoxNy45ODA2NzU0MDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTc0MjE2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjE4LjA1Mjg1NjkyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg5MjcwMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzc3VlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biB0byB0aGUgZnVuZGFtZW50YWxzLiBJdCdzIGFsbW9zdCBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBtZW50YWwgbWFwIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGFyY2gvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgYnVpbGQtdGltZSBjdXN0b21pemF0aW9uLiBLbm93aW5nIGl0J3MgbGlrZWx5IHRoZXJlLCBzYXZlcyB2YWx1YWJsZSB0aW1lIGluIHRoZSB0cm91Ymxlc2hvb3RpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmLCBpZiBJIGRvbid0IHJlY2FsbCB0aGlzIGltbWVkaWF0ZWx5LiBGcm9tIGBhcmNoL0tjb25maWdgLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMsIGZpbmQgZGVmYXVsdHMsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhbWV3b3JrLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoyMS4xNDIxMzA3NDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjEzNzkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTExMj1jb25maWcgR0VORVJJQ19FTlRSWVxcbi0tXFxuYXJjaC9LY29uZmlnLTExNi1cXG5hcmNoL0tjb25maWc6MTE3OmNvbmZpZyBLUFJPQkVTXFxuYXJjaC9LY29uZmlnLTExOC1cXHRib29sIFxcXCJLcHJvYmVzXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnPTE2OD1jb25maWcgT1BUUFJPQkVTXFxuLS1cXG5hcmNoL0tjb25maWctMTcyLVxcbmFyY2gvS2NvbmZpZzoxNzM6Y29uZmlnIEtQUk9CRVNfT05fRlRSQUNFXFxuYXJjaC9LY29uZmlnLTE3NC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjIxLjI1NDI3NzA5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE5OTkyNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVHJhY2luZyBDb25maWd1cmF0aW9uIENvbmZ1c2lvbioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0cmFjaW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgdXAgaGVyZS4gU2VlbXMgbGlrZSBgRFlOQU1JQ19GVFJBQ0VgIGFuZCBgS1BST0JFU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0byBrZWVwIGluIG1pbmQgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTm93LCB3YXNuJ3QgYERZTkFNSUNfRlRSQUNFYCBjb25uZWN0ZWQgdG8gYEZUUkFDRWAgYW5kIGBGVU5DVElPTl9UUkFDRVJgIHNvbWVob3c/IFllYWgsIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSBob3cgdGhlc2UgdGhpbmdzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCBtZSBjaGVjayB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gaG93IGBEWU5BTUlDX0ZUUkFDRWAgaXMgc2VsZWN0ZWQuIFRoaXMgc2hvdWxkIGNsZWFyIHVwIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODkxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6MjQuNTc0MjczNjMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFxuIDMwMTpcXHRjb25maWcgRFlOQU1JQ19GVFJBQ0VcXG4gMzAyOlxcdFxcdGJvb2xcXG4gMzAzOlxcdFxcdGRlcGVuZHMgb24gRlVOQ1RJT05fVFJBQ0VSXFxuIDMwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG4gMzA1OlxcdFxcdGRlZmF1bHQgeVxcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBUaGlzIG9wdGlvbiB3aWxsIG1vZGlmeSBhbGwgdGhlIGNhbGxzIHRvIGZ1bmN0aW9uIHRyYWNpbmdcXG4gMzA4OlxcdFxcdCAgZHluYW1pY2FsbHkgKHdpbGwgcGF0Y2ggdGhlbSBvdXQgb2YgdGhlIGJpbmFyeSBpbWFnZSBhbmRcXG4gMzA5OlxcdFxcdCAgcmVwbGFjZSB0aGVtIHdpdGggYSBOby1PcCBpbnN0cnVjdGlvbikgb24gYm9vdCB1cC4gRHVyaW5nXFxuIDMxMDpcXHRcXHQgIGNvbXBpbGUgdGltZSwgYSB0YWJsZSBpcyBtYWRlIG9mIGFsbCB0aGUgbG9jYXRpb25zIHRoYXQgZnRyYWNlXFxuIDMxMTpcXHRcXHQgIGNhbiBmdW5jdGlvbiB0cmFjZSwgYW5kIHRoaXMgdGFibGUgaXMgbGlua2VkIGludG8gdGhlIGtlcm5lbFxcbiAzMTI6XFx0XFx0ICBpbWFnZS4gV2hlbiB0aGlzIGlzIGVuYWJsZWQsIGZ1bmN0aW9ucyBjYW4gYmUgaW5kaXZpZHVhbGx5XFxuIDMxMzpcXHRcXHQgIGVuYWJsZWQsIGFuZCB0aGUgZnVuY3Rpb25zIG5vdCBlbmFibGVkIHdpbGwgbm90IGFmZmVjdFxcbiAzMTQ6XFx0XFx0ICBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtLlxcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHQgIFNlZSB0aGUgZmlsZXMgaW4gL3N5cy9rZXJuZWwvdHJhY2luZzpcXG4gMzE3OlxcdFxcdCAgICBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9uc1xcbiAzMTg6XFx0XFx0ICAgIHNldF9mdHJhY2VfZmlsdGVyXFxuIDMxOTpcXHRcXHQgICAgc2V0X2Z0cmFjZV9ub3RyYWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjI0LjU3NDQ2MTI0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg4MTU3ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFsczpcblxuKipLZXJuZWwgVHJhY2luZyBDb25maWd1cmF0aW9uIC0gQSBRdWljayBNZW50YWwgQ2hlY2tsaXN0KipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHNldHRpbmcgdXAgc29tZSB0cmFjaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBgRlVOQ1RJT05fVFJBQ0VSYCBpcyBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBjb25maWcgb3B0aW9uLiBUaGF0J3MgdXN1YWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1bmN0aW9uLWxldmVsIHRyYWNpbmcuIEknbGwgbmVlZCB0aGF0IGVuYWJsZWQgZm9yIHN1cmUuXG5cbk5vdywgZm9yIHNvbWUgbW9yZSBpbi1kZXB0aCB0cmFjaW5nLCBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gYEtQUk9CRVNgIHRvby4gSXQncyBvZnRlbiBpbnRlcnR3aW5lZCwgYXMgYEtQUk9CRVNgIHdpbGwgZW5hYmxlIHRoZSBhYmlsaXR5IHRvIGluamVjdCBpbnN0cnVjdGlvbnMuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBrZXJuZWwncyBgYXJjaC9LY29uZmlnYCB0byBjb25maXJtIHRoYXQgYEtQUk9CRVNgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIFRoYXQncyB0aGUgbmV4dCBzdGVwLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyB3aGF0IEknbSB0cnlpbmcgdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjI3LjY2MjYzNzI4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRzZWxlY3QgR0VORVJJQ19TWVNDQUxMXFxuIDExNjpcXHRcXG4gMTE3OlxcdGNvbmZpZyBLUFJPQkVTXFxuIDExODpcXHRcXHRib29sIFxcXCJLcHJvYmVzXFxcIlxcbiAxMTk6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0tQUk9CRVNcXG4gMTIwOlxcdFxcdHNlbGVjdCBLQUxMU1lNU1xcbiAxMjE6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gMTIyOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAxMjM6XFx0XFx0aGVscFxcbiAxMjQ6XFx0XFx0ICBLcHJvYmVzIGFsbG93cyB5b3UgdG8gdHJhcCBhdCBhbG1vc3QgYW55IGtlcm5lbCBhZGRyZXNzIGFuZFxcbiAxMjU6XFx0XFx0ICBleGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24uICByZWdpc3Rlcl9rcHJvYmUoKSBlc3RhYmxpc2hlc1xcbiAxMjY6XFx0XFx0ICBhIHByb2JlcG9pbnQgYW5kIHNwZWNpZmllcyB0aGUgY2FsbGJhY2suICBLcHJvYmVzIGlzIHVzZWZ1bFxcbiAxMjc6XFx0XFx0ICBmb3Iga2VybmVsIGRlYnVnZ2luZywgbm9uLWludHJ1c2l2ZSBpbnN0cnVtZW50YXRpb24gYW5kIHRlc3RpbmcuXFxuIDEyODpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgXFxcIk5cXFwiLlxcbiAxMjk6XFx0XFxuIDEzMDpcXHRjb25maWcgSlVNUF9MQUJFTFxcbiAxMzE6XFx0XFx0Ym9vbCBcXFwiT3B0aW1pemUgdmVyeSB1bmxpa2VseS9saWtlbHkgYnJhbmNoZXNcXFwiXFxuIDEzMjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9KVU1QX0xBQkVMXFxuIDEzMzpcXHRcXHRzZWxlY3QgT0JKVE9PTCBpZiBIQVZFX0pVTVBfTEFCRUxfSEFDS1xcbiAxMzQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoyNy42NjI3Njk2MTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMjg5MjIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqVHJhY2luZyBDb25maWd1cmF0aW9uIENvbmZ1c2lvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdHJhY2luZyBhZ2Fpbi4gUmlnaHQsIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgS1BST0JFU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0aGF0IGNvbWUgdG8gbWluZC4gQnV0IGhvbGQgb24sIEknbSBqdXN0IGZsYXNoaW5nIG9uIGBGVFJBQ0VgISBEb2Vzbid0IGBGVU5DVElPTl9UUkFDRVJgIGFjdHVhbGx5ICpyZWx5KiBvbiBgRlRSQUNFYD8gVGhhdCByaW5ncyBhIGJlbGwuIFRpbWUgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIGNlcnRhaW4uIExldCBtZSBqdXN0IGRpdmUgaW50byBga2VybmVsL3RyYWNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgb2YgYEZVTkNUSU9OX1RSQUNFUmAuIEdvdHRhIG1ha2Ugc3VyZSBteSBtZW50YWwgbW9kZWwgb2YgdGhpcyBzdHVmZiBpcyB1cCB0byBzbnVmZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6MzAuNjk1NjY1ODUxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTkxNTQzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVOQ1RJT05fVFJBQ0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTIyNj1jb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMjM0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjIzNTpjb25maWcgRlVOQ1RJT05fVFJBQ0VSXFxua2VybmVsL3RyYWNlL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBUcmFjZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjMwLjc2NTU4OTg0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQwNDY0Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnRyYWNlIENvbmZpZ3VyYXRpb24gXHUwMDI2IFN5bWJvbCBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIHplcm9lcyBpbiBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEtQUk9CRVNgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBCdXQsIHdoYXQgYWJvdXQgdGhlIHNwZWNpZmljIHN5bWJvbHMgd2UncmUgdGFyZ2V0aW5nPyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRob3NlLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgYF9fZnRyYWNlX21vZGlmeV9jYWxsYC4gVGhhdCdzIHRoZSBjb3JlLiBJdCdzIG1hcmtlZCBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG9mdGVuIG1lYW5zIGl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIGNvbmZpbmVkIHRvIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgSSBrbm93IGl0J3MgKnVzZWQqIGJ5IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIFNvLCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGl0cyBzY29wZSwgSSBuZWVkIHRvIHNlZSBob3cgYW5kIHdoZXJlIHRob3NlIGFyZSBiZWluZyBjYWxsZWQuIFRpbWUgdG8ganVtcCBvdmVyIHRvIGBhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCBvbiB0aGlzIGFyY2hpdGVjdHVyZSBhbmQgdHJhY2UgdGhlaXIgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6MzQuMzA2MDU3MjUyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0I2Vsc2VcXG4gMTE2OlxcdHN0YXRpYyBpbnQgZnRyYWNlX3JlY19zZXRfbm9wX29wcyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKSB7IHJldHVybiAwOyB9XFxuIDExNzpcXHRzdGF0aWMgaW50IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKSB7IHJldHVybiAwOyB9XFxuIDExODpcXHQjZW5kaWZcXG4gMTE5OlxcdFxcbiAxMjA6XFx0aW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiAxMjE6XFx0e1xcbiAxMjI6XFx0XFx0dW5zaWduZWQgbG9uZyBkaXN0YW5jZSwgb3JpZ19hZGRyLCBwYyA9IHJlYy1cXHUwMDNlaXAgLSBNQ09VTlRfQVVJUENfU0laRTtcXG4gMTIzOlxcdFxcdGludCByZXQ7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdHJldCA9IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhyZWMpO1xcbiAxMjY6XFx0XFx0aWYgKHJldClcXG4gMTI3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdG9yaWdfYWRkciA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZmdHJhY2VfY2FsbGVyO1xcbiAxMzA6XFx0XFx0ZGlzdGFuY2UgPSBhZGRyIFxcdTAwM2Ugb3JpZ19hZGRyID8gYWRkciAtIG9yaWdfYWRkciA6IG9yaWdfYWRkciAtIGFkZHI7XFxuIDEzMTpcXHRcXHRpZiAoZGlzdGFuY2UgXFx1MDAzZSBKQUxSX1JBTkdFKVxcbiAxMzI6XFx0XFx0XFx0YWRkciA9IEZUUkFDRV9BRERSO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwocGMsIGFkZHIsIGZhbHNlKTtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0aW50IGZ0cmFjZV9tYWtlX25vcChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gMTM4OlxcdHtcXG4gMTM5OlxcdFxcdHUzMiBub3A0ID0gUklTQ1ZfSU5TTl9OT1A0O1xcbiAxNDA6XFx0XFx0aW50IHJldDtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0cmV0ID0gZnRyYWNlX3JlY19zZXRfbm9wX29wcyhyZWMpO1xcbiAxNDM6XFx0XFx0aWYgKHJldClcXG4gMTQ0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjM0LjMwNjE4MDQ4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYxMTE3NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSBub2QgdG8gdGhlIGZhY3QgdGhhdCBJJ20gd29ya2luZyBhdCBhbiBleHBlcnQgbGV2ZWw6XG5cbioqUGlucG9pbnRpbmcgT3VyIEZvY3VzIGZvciBEZWVwZXIgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBJJ20gemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIGFyZWEuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgIGFyZSBnb2luZyB0byBiZSBrZXkgc3ltYm9scyB0byBkaWcgaW50by4gVGhleSdyZSBsaWtlbHkgd2hlcmUgd2UnbGwgZmluZCB0aGUgY29yZSBtZWNoYW5pc21zLiBOb3csIGxldCdzIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBJdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGFzc2VzcyB3aGF0IGhvb2tzIGFyZSBhbHJlYWR5IGluIHBsYWNlIGFuZCBob3cgd2UgbWF5IGJlIGFibGUgdG8gYXVnbWVudCB0aGVtIGZvciBvdXIgcHVycG9zZXMuIENoZWNraW5nIGZvciB0aGF0IHNwZWNpZmljIHN5bWJvbCByaWdodCBvZmYgdGhlIGJhdCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgb3VyIGFuYWx5c2lzIHdpbGwgbmVlZCB0byBmb2N1cyBvbiBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgZXhpc3RpbmcgY2FsbHMuIEZyb20gaGVyZSwgd2UnbGwgc2VlIHdoZXJlIHRvIGdvIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjM3Ljg2NzMwMDIwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDIxMTpcXHR9XFxuIDIxMjpcXHQjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovXFxuIDIxMzpcXHRcXG4gMjE0OlxcdCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG4gMjE1OlxcdGludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcXG4gMjE2OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDIxNzpcXHR7XFxuIDIxODpcXHRcXHR1bnNpZ25lZCBsb25nIGNhbGxlciA9IHJlYy1cXHUwMDNlaXAgLSBNQ09VTlRfQVVJUENfU0laRTtcXG4gMjE5OlxcdFxcdGludCByZXQ7XFxuIDIyMDpcXHRcXG4gMjIxOlxcdFxcdHJldCA9IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhyZWMpO1xcbiAyMjI6XFx0XFx0aWYgKHJldClcXG4gMjIzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIyNDpcXHRcXG4gMjI1OlxcdFxcdHJldHVybiBfX2Z0cmFjZV9tb2RpZnlfY2FsbChjYWxsZXIsIEZUUkFDRV9BRERSLCB0cnVlKTtcXG4gMjI2OlxcdH1cXG4gMjI3OlxcdCNlbmRpZlxcbiAyMjg6XFx0XFxuIDIyOTpcXHQjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDozNy44NjczNjU2MDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzMDE3NjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEludGVyYWN0aW9uIG9mIEtwcm9iZXMgYW5kIEZ0cmFjZSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuIEJ1dCBob2xkIG9uLCB0aGUgY29yZSBpc3N1ZSBpcyBhYm91dCBob3cga3Byb2JlcyBhbmQgZnRyYWNlIGludGVyYWN0LiBJIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIGJlaGF2aW9yLiBJcyB0aGVyZSBhIHByZWNpc2Ugc2VxdWVuY2Ugb2YgZXZlbnRzPyBNeSBpbml0aWFsIGh1bmNoIGlzIHRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBvcmRlciBvZiBob3cga3Byb2JlcyBhbmQgZnRyYWNlIGFyZSBzZXQgdXAuXG5cbklzIGl0IGEga3Byb2JlIGJlaW5nIHNldCBvbiBhbiBmdHJhY2UgY2FsbCBzaXRlICpiZWZvcmUqIGZ0cmFjZSBpcyBlbmFibGVkPyBPciBpcyBpdCB0aGUgcmV2ZXJzZSDigJMgZnRyYWNlIGVuYWJsZWQsICp0aGVuKiB0aGUga3Byb2JlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IG9yZGVyLiBJIHJlY2FsbCB0aGF0IHRoZSBmdHJhY2UgbW9kaWZpY2F0aW9ucyBoYXBwZW4gd2hlbiBmdHJhY2UgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhhdCBtYWtlcyBgZnRyYWNlX21ha2VfY2FsbGAsIGBmdHJhY2VfbWFrZV9ub3BgLCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgdGhlIGtleSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGFsdGVyaW5nIHRoZSBmdHJhY2UgY2FsbCBzaXRlLlxuXG5Ob3csIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAsIHdoaWNoIGlzLCBhcyBJIHJlY2FsbCwgYSBoZWxwZXIgY2FsbGVkIGJ5IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIEJ1dCB3YWl0LCBgZnRyYWNlX21ha2Vfbm9wYCAqYWxzbyogbW9kaWZpZXMgdGhlIGNhbGwgc2l0ZSwgYnV0IGl0IGdvZXMgZGlyZWN0bHkgdGhyb3VnaCBgcGF0Y2hfdGV4dF9ub3N5bmNgLiBJdCBzZWVtcyB0aGUgbG9naWMgaW4gYGZ0cmFjZV9tYWtlX25vcGAgaXMgZGlmZmVyZW50IGZyb20gdGhlIG90aGVycywgYnlwYXNzaW5nIHRoZSB0YXJnZXRlZCBmdW5jdGlvbi4gVGhpcyBkaWZmZXJlbmNlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSByb290IGNhdXNlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzUxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6NDIuOTk3NTQ1NzM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTg0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdFxcbiAxNDY6XFx0XFx0aWYgKHBhdGNoX2luc25fd3JpdGUoKHZvaWQgKilyZWMtXFx1MDAzZWlwLCBcXHUwMDI2bm9wNCwgTUNPVU5UX05PUDRfU0laRSkpXFxuIDE0NzpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiAxNDg6XFx0XFxuIDE0OTpcXHRcXHRyZXR1cm4gMDtcXG4gMTUwOlxcdH1cXG4gMTUxOlxcdFxcbiAxNTI6XFx0LypcXG4gMTUzOlxcdCAqIFRoaXMgaXMgY2FsbGVkIGVhcmx5IG9uLCBhbmQgaXNuJ3Qgd3JhcHBlZCBieVxcbiAxNTQ6XFx0ICogZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfe3ByZXBhcmUscG9zdF9wcm9jZXNzfSgpIGFuZCB0aGVyZWZvcmUgZG9lc24ndCBob2xkXFxuIDE1NTpcXHQgKiB0ZXh0X211dGV4LCB3aGljaCB0cmlnZ2VycyBhIGxvY2tkZXAgZmFpbHVyZS4gIFNNUCBpc24ndCBydW5uaW5nIHNvIHdlIGNvdWxkXFxuIDE1NjpcXHQgKiBqdXN0IGRpcmVjdGx5IHBva2UgdGhlIHRleHQsIGJ1dCBpdCdzIHNpbXBsZXIgdG8ganVzdCB0YWtlIHRoZSBsb2NrXFxuIDE1NzpcXHQgKiBvdXJzZWx2ZXMuXFxuIDE1ODpcXHQgKi9cXG4gMTU5OlxcdGludCBmdHJhY2VfaW5pdF9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKVxcbiAxNjA6XFx0e1xcbiAxNjE6XFx0XFx0dW5zaWduZWQgbG9uZyBwYyA9IHJlYy1cXHUwMDNlaXAgLSBNQ09VTlRfQVVJUENfU0laRTtcXG4gMTYyOlxcdFxcdHVuc2lnbmVkIGludCBub3BzWzJdLCBvZmZzZXQ7XFxuIDE2MzpcXHRcXHRpbnQgcmV0O1xcbiAxNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjQyLjk5OTcwODU0NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5NTc5NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIFRyYWNlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgY29yZSBvZiBob3cgdGhpcyB0cmFjaW5nIHN5c3RlbSBpcyBzZXQgdXAuIEZyb20gdGhlIGNvbnRleHQsIGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBzeW1ib2xzIHRvIHdhdGNoLiBUaGVzZSBhcmUgdGhlIHdvcmtob3JzZXMsIGl0IHNlZW1zLiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGRyaXZpbmcgdGhpcyBhcmUgYEZVTkNUSU9OX1RSQUNFUmAgYW5kIGBLUFJPQkVTYC4gSG9sZCBvbiwgSSBzZWUgYSBkZXBlbmRlbmN5IGhlcmXigKYgYERZTkFNSUNfRlRSQUNFYCBpcyAqc2VsZWN0ZWQqIGJ5IGBGVU5DVElPTl9UUkFDRVJgIC0gaW50ZXJlc3RpbmcsIGJ1dCBvbmx5IGlmIGBIQVZFX0RZTkFNSUNfRlRSQUNFYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSEFWRV9EWU5BTUlDX0ZUUkFDRWAgaXMgZGVmaW5lZC4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbGlrZSB0aGlzIGlzIGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0IHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGhhcyB0byBzYXkgb24gdGhlIG1hdHRlci4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZm91bmRhdGlvbiB0aGlzIGNvZGUgaXMgYnVpbHQgdXBvbiBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciB0cmFjaW5nIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6NDYuNDI5MjkxMjI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDgyMzAxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0RZTkFNSUNfRlRSQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMTU4LVxcdHNlbGVjdCBIQVZFX0RNQV9DT05USUdVT1VTIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNTk6XFx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UgaWYgTU1VIFxcdTAwMjZcXHUwMDI2IChDTEFOR19TVVBQT1JUU19EWU5BTUlDX0ZUUkFDRSB8fCBHQ0NfU1VQUE9SVFNfRFlOQU1JQ19GVFJBQ0UpXFxuYXJjaC9yaXNjdi9LY29uZmlnLTE2MC1cXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzRCIGlmIERZTkFNSUNfRlRSQUNFIFxcdTAwMjZcXHUwMDI2IFJJU0NWX0lTQV9DXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE2MTpcXHRzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBpZiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTYyOlxcdHNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFMgaWYgKERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHUyBcXHUwMDI2XFx1MDAyNiAhQ0ZJKVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNjM6XFx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG5hcmNoL3Jpc2N2L0tjb25maWctMTY0LVxcdHNlbGVjdCBIQVZFX0ZUUkFDRV9HUkFQSF9GVU5DXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE2NTpcXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG5hcmNoL3Jpc2N2L0tjb25maWctMTY2LVxcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZSRUdTXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE2NzpcXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjgtXFx0c2VsZWN0IEhBVkVfRUJQRl9KSVQgaWYgTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjQ2LjUyNDEyMDMwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM4MTkwODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBGdW5jdGlvbiBUcmFjZXIgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB0aGUgYEZVTkNUSU9OX1RSQUNFUmAgaXMgYXZhaWxhYmxlIGZvciBSSVNDLVYsIHdoaWNoIGlzIGZhbnRhc3RpYy4gVGhlIG9idmlvdXMgY29uZmlncyBJIG5lZWQgdG8gZW5hYmxlIGFyZSBgRlVOQ1RJT05fVFJBQ0VSYCBpdHNlbGYsIGFuZCBgS1BST0JFU2AsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgZWxzZSB0aG91Z2guIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IGBmdHJhY2VfbW9kaWZ5X2NhbGxgLCB3aGljaCBtZWFucyBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LlxuXG5MZXQgbWUgc2VlLi4uIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgc2VsZWN0ZWQgYnkgYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBpdHNlbGYgaXMgc2VsZWN0ZWQgYnkgYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU2AuIEFuZCB0aGF0J3Mgc2VsZWN0ZWQgYnkgYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHUyBcdTAwMjZcdTAwMjYgIUNGSWAuIFRoaXMgZmVlbHMgZmFtaWxpYXIuLi4gYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU2AgaXMgY2hvc2VuIHZpYSBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NgIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IGBIQVZFX0RZTkFNSUNfRlRSQUNFYC4gU28sIGJhc2VkIG9uIHRoYXQgY29uZmlndXJhdGlvbiBjYXNjYWRlLCBpdCBzZWVtcyBsaWtlIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBGVU5DVElPTl9UUkFDRVJgIGlzIGVuYWJsZWQsIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMuIEJ1dCBJIHNob3VsZG4ndCBqdXN0IGFzc3VtZSBhbnl0aGluZy4gSXQgaXMgYWx3YXlzIGJlc3QgdG8gY2hlY2suIFNvLCBJIHdpbGwgY29uZmlybSB3aGV0aGVyIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgYSBkaXJlY3RseSBjb25maWd1cmFibGUgb3B0aW9uIGZvciB0aGlzIHBsYXRmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1MS4wNjIzMTM4NjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MTkyODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1MS4xNTk1MTcyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg0NjEwMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIER5bmFtaWMgZnRyYWNlIHdpdGggRGlyZWN0IENhbGxzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgZGVmX2Jvb2wgeWAgZm9yIHdoYXRldmVyIHRoaXMgaXMsIGB5YCwgcmVhbGx5IGhpbmdlcyBvbiBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IGNsZWFuZXIsIGRvZXNuJ3QgaXQ/IEl0IGltcGxpZXMgd2UgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGEgbmljZSBzaW1wbGlmaWNhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBieSB3aXRoIGp1c3QgYEZVTkNUSU9OX1RSQUNFUmAgYW5kIGBLUFJPQkVTYC4gTWFrZXMgc2Vuc2UsIGNvbnNpZGVyaW5nIHRoZXkgcHJvdmlkZSB0aGUgdW5kZXJseWluZyBjYXBhYmlsaXRpZXMuIEJ1dCwgYXMgYWx3YXlzLCBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvbmUgbGFzdCB0aW1lLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBGVFJBQ0VgIGlzbid0IGEgaGlkZGVuIHJlcXVpcmVtZW50IHRoYXQgbmVlZHMgdG8gYmUgdG9nZ2xlZCBvbi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1NC44NDQxMjk1NTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTk5NzA0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlRSQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTE5OD1jb25maWcgVFJBQ0lOR19TVVBQT1JUXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MjA0Om1lbnVjb25maWcgRlRSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWctMjA1LVxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz01ODg9Y29uZmlnIEVOQUJMRV9ERUZBVUxUX1RSQUNFUlNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5Ni1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1OTc6Y29uZmlnIEZUUkFDRV9TWVNDQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5OC1cXHRib29sIFxcXCJUcmFjZSBzeXNjYWxsc1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTg2OD1jb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODc2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg3Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXFxua2VybmVsL3RyYWNlL0tjb25maWctODc4LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4MC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODE6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX0NDXFxua2VybmVsL3RyYWNlL0tjb25maWctODgyLVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Ni1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX09CSlRPT0xcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODk0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg5NTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUkVDT1JETUNPVU5UXFxua2VybmVsL3RyYWNlL0tjb25maWctODk2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTEwMjE9Y29uZmlnIFRSQUNFX0VWQUxfTUFQX0ZJTEVcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNDgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA0OTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDUwLVxcdGJvb2wgXFxcIlJlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIGZ1bmN0aW9uIHRyYWNpbmdcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDYyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNjM6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OX1NJWkVcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDY0LVxcdGludCBcXFwiTWF4IG51bWJlciBvZiByZWN1cnNlZCBmdW5jdGlvbnMgdG8gcmVjb3JkXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA3My1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDc0OmNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA3NS1cXHRib29sIFxcXCJWYWxpZGF0ZSBSQ1UgaXMgb24gZHVyaW5nIGZ0cmFjZSBleGVjdXRpb25cXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTAxPWNvbmZpZyBHQ09WX1BST0ZJTEVfRlRSQUNFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTEyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTM6Y29uZmlnIEZUUkFDRV9TRUxGVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTQtXFx0Ym9vbFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTUtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTExNjpjb25maWcgRlRSQUNFX1NUQVJUVVBfVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTctXFx0Ym9vbCBcXFwiUGVyZm9ybSBhIHN0YXJ0dXAgdGVzdCBvbiBmdHJhY2VcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTM2PWNvbmZpZyBFVkVOVF9UUkFDRV9URVNUX1NZU0NBTExTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ3LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExNDg6Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDktICAgICAgIGJvb2wgXFxcIlZlcmlmeSBjb21waWxlIHRpbWUgc29ydGluZyBvZiBmdHJhY2UgZnVuY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1NC45NTQxMzM0M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY1NDY3MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipGVFJBQ0UgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGVuYWJsaW5nIGBGVFJBQ0VgLiBJdCdzIGEgbWVudWNvbmZpZywgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBuZWVkIHRvIGdvIHNwZWx1bmtpbmcgdGhyb3VnaCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRvIGFjdHVhbGx5IHN3aXRjaCBpdCBvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBhbmQgaXQncyBhbG1vc3QgYWx3YXlzIGluIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZm9yIHNvbWV0aGluZyBsaWtlIHRoaXMuIFNvLCBsZXQncyBoZWFkIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGFjdHVhbGx5IGF2YWlsYWJsZSBmb3IgYEZUUkFDRWAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGZpbmUtZ3JhaW5lZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZSBpdHNlbGYuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBiZWZvcmUgYmxpbmRseSBlbmFibGluZyBpdC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gRG9lcyBpdCBuZWVkIGFueSBzcGVjaWFsIGZsYWdzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBJIG1ha2UgdGhpcyBjaGFuZ2U/IExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1OC4xMTk2MDM1NjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHRkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcXG4gMjAxOlxcdFxcdGRlcGVuZHMgb24gU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDIwMjpcXHRcXHRkZWZhdWx0IHlcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0bWVudWNvbmZpZyBGVFJBQ0VcXG4gMjA1OlxcdFxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxcbiAyMDc6XFx0XFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxcbiAyMDg6XFx0XFx0aGVscFxcbiAyMDk6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRpZiBGVFJBQ0VcXG4gMjEyOlxcdFxcbiAyMTM6XFx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcXG4gMjE0OlxcdFxcdGJvb2wgXFxcIkF1dG9tb3VudCB0cmFjZWZzIG9uIGRlYnVnZnMgW0RFUFJFQ0FURURdXFxcIlxcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBUUkFDSU5HXFxuIDIxNjpcXHRcXHRkZWZhdWx0IHlcXG4gMjE3OlxcdFxcdGhlbHBcXG4gMjE4OlxcdFxcdCAgVGhlIHRyYWNpbmcgaW50ZXJmYWNlIHdhcyBtb3ZlZCBmcm9tIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmdcXG4gMjE5OlxcdFxcdCAgdG8gL3N5cy9rZXJuZWwvdHJhY2luZyBpbiAyMDE1LCBidXQgdGhlIHRyYWNpbmcgZmlsZSBzeXN0ZW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6NTguMTE5NzU4OTY4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTQ1NzY2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnRyYWNlIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBGVFJBQ0VgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBgREVCVUdfS0VSTkVMYCBpcyBzZXQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIEkgY2FuIHByb2JhYmx5IGp1c3QgZm9jdXMgb24gZXhwbGljaXRseSBkZWZpbmluZyBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBgS1BST0JFU2AgdG8gZ2V0IHdoYXQgSSBuZWVkLiBBaCwgcmlnaHQsIGBGVU5DVElPTl9UUkFDRVJgIGlzIHRoZSBjb3JlIG9uZSBoZXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIGlmIEkgbmVlZCBgRFlOQU1JQ19GVFJBQ0VgIGFzIHdlbGwuXG5cblJpZ2h0LCBgRFlOQU1JQ19GVFJBQ0VgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgIGFyZSBib3RoIHNldC4gR2l2ZW4gdGhhdCwgYW5kIGFzc3VtaW5nIHRoYXQgUklTQy1WIGltcGxlbWVudHMgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgLCB0aGVuIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgS1BST0JFU2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBSSVNDLVYgc3VwcG9ydHMgZHluYW1pYyBmdHJhY2UuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jYCBmb3IgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBzdGF0aWMgb3IgZXhwb3J0ZWQ/IExldCdzIHZlcmlmeSB0aGF0IHRoZXkgYXJlLCBpbiBmYWN0LCBnbG9iYWwuIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZnRyYWNlX21ha2VfY2FsbGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6MDIuNTE0MzM4NDcyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg2MDUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZnRyYWNlX21ha2VfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xMTc9c3RhdGljIGludCBmdHJhY2VfcmVjX3VwZGF0ZV9vcHMoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykgeyByZXR1cm4gMDsgfVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTE5LVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjEyMDppbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6MDIuNTY2MjA0NDA4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjQyODA1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlIEZ1bmN0aW9ucyBpbiBEeW5hbWljIEZ0cmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYW5kIGl0J3MgY2xlYXIgdGhleSdyZSBnbG9iYWwgaW4gc2NvcGUg4oCTIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWFsbHkgZHJpdmluZyB0aGUgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCBpcyBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKZJIHNlZSBgZnRyYWNlX21vZGlmeV9jYWxsYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gT2theSwgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kOyBpdCBtaWdodCBub3QgYWx3YXlzIGJlIHByZXNlbnQuXG5cbkxldCBtZSBxdWlja2x5IHNjYW4sIGlzIHRoZXJlIGFueSBvdGhlciBnbG9iYWxseSByZWxldmFudCBmdW5jdGlvbj8gQWgsIHllcywgdGhlcmUncyBgZnRyYWNlX21ha2Vfbm9wYC4gT2theSwgc28gbGV0J3MgaW5jbHVkZSB0aGVzZSB0aHJlZTogYGZ0cmFjZV9tYWtlX2NhbGxgLCBgZnRyYWNlX21vZGlmeV9jYWxsYCwgYW5kIGBmdHJhY2VfbWFrZV9ub3BgLlxuXG5Ob3csIHRoZSBwYXRjaCBpcyBtYWtpbmcgY2hhbmdlcyB0byBgX19mdHJhY2VfbW9kaWZ5X2NhbGxgLiBUaGF0J3MgaW1wb3J0YW50LiBJIHNlZSBub3cgdGhhdCBgX19mdHJhY2VfbW9kaWZ5X2NhbGxgIGlzICpjYWxsZWQgYnkqIGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIFNvLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgYXJlIHJlYWxseSB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBoZXJlLiBUaGV5J3JlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBmdW5uZWwgaW50byB0aGUgY29yZSBtb2RpZmljYXRpb24gbG9naWMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgLSBpcyB0aGVyZSBhbnkgb3RoZXIgY2FsbGVyIG9mIGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAgb3V0c2lkZSBvZiB0aGUgdHdvIGZ1bmN0aW9ucyBhbHJlYWR5IGlkZW50aWZpZWQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUxOjA3LjQ5MDQ4NzY1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc5MDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Z0cmFjZV9tb2RpZnlfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz00Mz12b2lkIGFyY2hfZnRyYWNlX3VwZGF0ZV9jb2RlKGludCBjb21tYW5kKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtNDktXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6NTA6c3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2wgdmFsaWRhdGUpXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtNTEte1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MTIwPWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTEzMy1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoxMzQ6XFx0cmV0dXJuIF9fZnRyYWNlX21vZGlmeV9jYWxsKHBjLCBhZGRyLCBmYWxzZSk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTM1LX1cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTIxNT1pbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMjQtXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjI1OlxcdHJldHVybiBfX2Z0cmFjZV9tb2RpZnlfY2FsbChjYWxsZXIsIEZUUkFDRV9BRERSLCB0cnVlKTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMjYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MTowNy41NTUyODIyODZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NTIwNTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEZ0cmFjZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBob3cgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCBhcmUgaW50ZXJhY3RpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgc28gSSdsbCBiZSBmb2N1c2luZyBteSBhdHRlbnRpb24gdGhlcmUuIFRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBgS1BST0JFU2AsIGluc3RhbnRseSB0ZWxsIG1lIHRoaXMgaXMgYSB0cmFjaW5nLXJlbGF0ZWQgYnVnIGludm9sdmluZyBrZXJuZWwgcHJvYmVzLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBmdW5jdGlvbmFsIGRlZmVjdC4gSXQncyBhYm91dCBmaXhpbmcgdGhlIG1vZGlmaWNhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgUklTQy1WIGZ0cmFjZSBjb2RlIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBcImF1aXBjXCIgaW5zdHJ1Y3Rpb24gYXQgdGhlIGZ0cmFjZSBjYWxsIHNpdGUuIFRoaXMgbWVhbnMgaXQgaXMgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBjb3JlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBpdHMgYWJpbGl0eSB0byBjb3JyZWN0bHkgbW9kaWZ5IGNvZGUgZHVyaW5nIGtwcm9iZSBpbnNlcnRpb24uIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IHRyYWNpbmcgZnVuY3Rpb25zLiBHaXZlbiB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgZml4IHdpdGhpbiB0aGlzIHNwZWNpZmljIGFyY2hpdGVjdHVyZSwgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgYSBwYXRjaCB0aGF0J3Mgd29ydGggZnV6emluZyB0byBndWFyYW50ZWUgaXRzIGNvcnJlY3QgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwNywiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6MTIuMTQwNDkwMjA4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDU4NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiS1BST0JFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ0cmFjZV9tYWtlX2NhbGxcIixcbiAgICBcImZ0cmFjZV9tb2RpZnlfY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFJJU0MtViBmdHJhY2UgY29kZSBtb2RpZmljYXRpb24gd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIG9mIHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW5hYmxpbmcgZnRyYWNlIGFuZCBrcHJvYmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRlVOQ1RJT05fVFJBQ0VSXCIsXG4gICAgXCJLUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnRyYWNlX21ha2VfY2FsbFwiLFxuICAgIFwiZnRyYWNlX21vZGlmeV9jYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gUklTQy1WIGZ0cmFjZSBjb2RlIG1vZGlmaWNhdGlvbiB3aGVuIGEga3Byb2JlIGlzIHBsYWNlZCBvbiB0aGUgYXVpcGMgaW5zdHJ1Y3Rpb24gb2YgdGhlIGZ0cmFjZSBjYWxsIHNpdGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbmFibGluZyBmdHJhY2UgYW5kIGtwcm9iZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rh6g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 18:17:38 +0000 UTC FinishedAt: 2026-08-02 18:51:13 +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": "28e911d61d66b92a3bded8b54622ed3cd2795bf6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "KPROBES" ], "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": "28e911d61d66b92a3bded8b54622ed3cd2795bf6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "KPROBES" ], "series_id": "840633cf-38c1-4d0a-849f-bcbd4425843d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "ftrace_make_call", "ftrace_modify_call" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z0cmFjZV9tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7ZnRyYWNlX21vZGlmeV9jYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFJJU0MtViBmdHJhY2UgY29kZSBtb2RpZmljYXRpb24gd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIG9mIHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW5hYmxpbmcgZnRyYWNlIGFuZCBrcHJvYmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzQ3MWIyNDU5MjIwZTEwMzAxMDM4ZmFlMmU0MDUwNWM3OWE4OTI5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTg6NDk6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1xuaW5kZXggYjQzMGVkZmI4M2Y0Yy4uYmU4YjY4NTE0NDE3NCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RvcF9tYWNoaW5lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RleHQtcGF0Y2hpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vaW5zbi5oXHUwMDNlXG4gXG4gI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxuIHZvaWQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKVxuQEAgLTYzLDcgJiM0Mzs2NCw5IEBAIHN0YXRpYyBpbnQgX19mdHJhY2VfbW9kaWZ5X2NhbGwodW5zaWduZWQgbG9uZyBzb3VyY2UsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBib29sXG4gXHRcdGlmIChjb3B5X2Zyb21fa2VybmVsX25vZmF1bHQocmVwbGFjZWQsICh2b2lkICopc291cmNlLCAyICogTUNPVU5UX0lOU05fU0laRSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4tXHRcdGlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdKSB7XG4mIzQzO1x0XHQvKiBCeXBhc3MgdGhlIGNoZWNrIGlmIHRoZSBhdWlwYyBpbnNuIGlzIGEga3Byb2JlIGJyZWFrcG9pbnQgKi9cbiYjNDM7XHRcdGlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEocmlzY3ZfaW5zbl9pc19lYnJlYWsocmVwbGFjZWRbMF0pIHx8IHJpc2N2X2luc25faXNfY19lYnJlYWsocmVwbGFjZWRbMF0pKSkge1xuIFx0XHRcdHByX2VycihcJiMzNDslcDogZXhwZWN0ZWQgKCUwOHgpIGJ1dCBnb3QgKCUwOHgpXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICAodm9pZCAqKXNvdXJjZSwgY2FsbFswXSwgcmVwbGFjZWRbMF0pO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O0tQUk9CRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdHJhY2VfbWFrZV9jYWxsJiMzNDssCiAgICAmIzM0O2Z0cmFjZV9tb2RpZnlfY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBSSVNDLVYgZnRyYWNlIGNvZGUgbW9kaWZpY2F0aW9uIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBhdWlwYyBpbnN0cnVjdGlvbiBvZiB0aGUgZnRyYWNlIGNhbGwgc2l0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVuYWJsaW5nIGZ0cmFjZSBhbmQga3Byb2Jlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0NzFiMjQ1OTIyMGUxMDMwMTAzOGZhZTJlNDA1MDVjNzlhODkyOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDE4OjQ5OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYwppbmRleCBiNDMwZWRmYjgzZjRjLi5iZThiNjg1MTQ0MTc0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zdG9wX21hY2hpbmUuaCZndDsKICNpbmNsdWRlICZsdDthc20vY2FjaGVmbHVzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS90ZXh0LXBhdGNoaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9pbnNuLmgmZ3Q7CiAKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKIHZvaWQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKQpAQCAtNjMsNyAmIzQzOzY0LDkgQEAgc3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2wKIAkJaWYgKGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdChyZXBsYWNlZCwgKHZvaWQgKilzb3VyY2UsIDIgKiBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdKSB7CiYjNDM7CQkvKiBCeXBhc3MgdGhlIGNoZWNrIGlmIHRoZSBhdWlwYyBpbnNuIGlzIGEga3Byb2JlIGJyZWFrcG9pbnQgKi8KJiM0MzsJCWlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHJpc2N2X2luc25faXNfZWJyZWFrKHJlcGxhY2VkWzBdKSB8fCByaXNjdl9pbnNuX2lzX2NfZWJyZWFrKHJlcGxhY2VkWzBdKSkpIHsKIAkJCXByX2VycigmIzM0OyVwOiBleHBlY3RlZCAoJTA4eCkgYnV0IGdvdCAoJTA4eClcbiYjMzQ7LAogCQkJICAgICAgICh2b2lkICopc291cmNlLCBjYWxsWzBdLCByZXBsYWNlZFswXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBSSVNDLVYgRnRyYWNlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNgLiBJdCYjMzk7cyBtb2RpZnlpbmcgYF9fZnRyYWNlX21vZGlmeV9jYWxsYCB0byBza2lwIGEgY2hlY2sgZm9yIGtwcm9iZSBicmVha3BvaW50cyDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBieXBhc3NpbmcgdGhlIGByaXNjdl9pbnNuX2lzX2VicmVha2AgYW5kIGByaXNjdl9pbnNuX2lzX2NfZWJyZWFrYCBjaGVja3MuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7LiBUaGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGRlYWxpbmcgd2l0aCBmdHJhY2UsIGFuZCB0aGF0IG1ha2VzIGl0IHdvcnRoIGludmVzdGlnYXRpbmcuCgpUaGlzIG1vZGlmaWNhdGlvbiBvY2N1cnMgZHVyaW5nIGZ0cmFjZSBlbmFibGluZyBvciBkaXNhYmxpbmcuIFdlIGNhbiB0cmlnZ2VyIHRoYXQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRyYWNlZnMsIGFuZCB0aGF0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludCBmb3IgdXMuIFRoZSByZWFsIGNhdGNoIGlzIHRoYXQgdGhpcyBpcyBSSVNDLVYgc3BlY2lmaWMuCgpCdXQgd2FpdCwgSSBrbm93IFN5emthbGxlciBzdXBwb3J0cyBSSVNDLVYhIFRoYXQmIzM5O3MgYSBodWdlIHdpbi4gU28sIGl0IGxvb2tzIHByb21pc2luZy4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBgX19mdHJhY2VfbW9kaWZ5X2NhbGxgIGluIGBhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY2AgbW9yZSBjbG9zZWx5IHRvIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBhbmQgcGxhbiBhIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mdHJhY2VfbW9kaWZ5X2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz00Mz12b2lkIGFyY2hfZnRyYWNlX3VwZGF0ZV9jb2RlKGludCBjb21tYW5kKVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTQ5LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6NTA6c3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2wgdmFsaWRhdGUpXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy01MS17XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MTIwPWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xMzMtXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoxMzQ6XHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwocGMsIGFkZHIsIGZhbHNlKTtcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTEzNS19XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MjE1PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMjQtXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyMjU6XHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwoY2FsbGVyLCBGVFJBQ0VfQUREUiwgdHJ1ZSk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnRyYWNlIENhbGwgTW9kaWZpY2F0aW9uIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gYF9fZnRyYWNlX21vZGlmeV9jYWxsYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBieSBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBTdGFuZGFyZCBmdHJhY2UgY2FsbGJhY2tzLCByaWdodD8gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcywgeWVhaCwgdGhpcyBpcyBwcm9iYWJseSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gRnRyYWNlIGlzIGRlZXAsIGl0JiMzOTtzIGNvcmUga2VybmVsIHN0dWZmLCBzbyBhbnkgaXNzdWVzIGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCByYW1pZmljYXRpb25zLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBmaXhpbmcgYSBzcGVjaWZpYyBmYWlsdXJlIHNjZW5hcmlvOiBmdHJhY2UgbW9kaWZpY2F0aW9uIGZhaWxpbmcgd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIGF0IHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgdHdlYWsuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuCgpMZXQgbWUgc2VlLi4uIGRpZ2dpbmcgaW50byB0aGUgY29uZmlnIG9wdGlvbnMuIExvb2tzIGxpa2UgYENPTkZJR19EWU5BTUlDX0ZUUkFDRWAgaXMgZXNzZW50aWFsLCBubyBzdXJwcmlzZSB0aGVyZS4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfUklTQ1ZgIGlzIG5lZWRlZCBzaW5jZSB0aGlzIGlzIGFyY2ggc3BlY2lmaWMuIEJ1dCwgZG8gd2UgbmVlZCB0byBzcGVjaWZ5IGFyY2hpdGVjdHVyZSBjb25maWdzIHNwZWNpZmljYWxseSwgb3IganVzdCBhc3N1bWUgdGhlIGFyY2hpdGVjdHVyZSBpcyBwcmVzZW50PyBQcm9iYWJseSBub3QsIHVzdWFsbHkgdGhlIGFyY2ggY29uZmlnIGlzIGltcGxpZWQsIGJ1dCwgd2FpdC4uLiBIb2xkIG9uLCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCBpcyAqaW5zaWRlKiBhbiBgI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRWAgYmxvY2sgaW4gYGFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jYC4gSG1tLCByaWdodC4gT2theSwgbGV0JiMzOTtzIGtlZXAgZGlnZ2luZyBhbmQgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIG91ciBkdWNrcyBpbiBhIHJvdyBmb3IgaG93IHRvIHJlcHJvZHVjZSB0aGlzIHNjZW5hcmlvIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19EWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTE2LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MTc6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTgtdm9pZCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MzA9dW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9hZGp1c3QodW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMzEte1xuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QUykpXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0zMy1cdFx0cmV0dXJuIGFkZHIgJiM0MzsgOCAmIzQzOyBNQ09VTlRfQVVJUENfU0laRTtcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz01MD1zdGF0aWMgaW50IF9fZnRyYWNlX21vZGlmeV9jYWxsKHVuc2lnbmVkIGxvbmcgc291cmNlLCB1bnNpZ25lZCBsb25nIHRhcmdldCwgYm9vbCB2YWxpZGF0ZSlcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy04Mi1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjgzOiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtODQtc3RhdGljIGNvbnN0IHN0cnVjdCBmdHJhY2Vfb3BzICpyaXNjdjY0X3JlY19nZXRfb3BzKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MTgxPWludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xODYtXHQgKi9cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjE4NzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTKSlcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTE4OC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjA2LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjA3OiNlbHNlIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjA4LXVuc2lnbmVkIGxvbmcgZnRyYWNlX2NhbGxfYWRqdXN0KHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMTEtfVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjEyOiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi9cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIxMy1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjIxNDojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMTUtaW50IGZ0cmFjZV9tb2RpZnlfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIG9sZF9hZGRyLFxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTIzMz12b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyLFxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI1MS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjI1MjojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yNTMtdm9pZCBmdHJhY2VfZ3JhcGhfZnVuYyh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCxcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yNzItfVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjczOiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi9cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI3NC0jZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS3Byb2JlIENvbm5lY3Rpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBoaWdobGlnaHRzIGByaXNjdl9pbnNuX2lzX2VicmVha2AgYW5kIGByaXNjdl9pbnNuX2lzX2NfZWJyZWFrYCwgYW5kIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRpZWQgdG8ga3Byb2Jlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7RG9lcyB0aGlzIHBhdGNoICpyZXF1aXJlKiBgQ09ORklHX0tQUk9CRVNgIHRvIGV2ZW4gYmUgcmVsZXZhbnQ/JiMzNDsuIExldCYjMzk7cyBmaWd1cmUgdGhhdCBvdXQuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBhbiBpc3N1ZSB3aGVuIGEga3Byb2JlIGlzIHBsYWNlZCBvbiB0aGUgYGF1aXBjYCBpbnN0cnVjdGlvbiB1c2VkIGJ5IGZ0cmFjZS4gQWhhISBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtsbCBuZWVkICpib3RoKiBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCBhbmQgYENPTkZJR19LUFJPQkVTYCB0byByZXByb2R1Y2UgYW5kIHZhbGlkYXRlIHRoaXMgZml4LiBUaW1lIHRvIGRpdmUgaW50byBgYXJjaC9yaXNjdi9LY29uZmlnYCBhbmQgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzU1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCYjMzk7cyBUcmFjZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBtZW50YWwgbWFwIGltbWVkaWF0ZWx5IGhvbWVzIGluIG9uIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0cmFjaW5nIHN1YnN5c3RlbS4gQW55dGhpbmcgcmVsYXRlZCB0byB0cmFjaW5nIGNhcGFiaWxpdGllcyDigJMgd2hldGhlciBpdCYjMzk7cyBzcGVjaWZpYyBldmVudCB0cmFjaW5nLCBkeW5hbWljIHRyYWNpbmcsIG9yIGNvbnRyb2wgb3ZlciB0aGUgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmIOKAkyBpcyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIGRlZmluZWQgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBkZWNsYXJlZCB0aGVyZS4gVGhpcyBnaXZlcyBhIGJyb2FkIG92ZXJ2aWV3IG9mIHRoZSB0cmFjZSBzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbi4gTm93LCBsZXQmIzM5O3MgZXhwbG9yZSB0aGF0IGZpbGUgYW5kIGRlbHZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MjkwPWNvbmZpZyBGVU5DVElPTl9UUkFDRV9BUkdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzAwLVxua2VybmVsL3RyYWNlL0tjb25maWc6MzAxOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctMzAyLVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjUtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xua2VybmVsL3RyYWNlL0tjb25maWctMzM1LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzNy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzODpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzktXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzQyLVxua2VybmVsL3RyYWNlL0tjb25maWc6MzQzOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxua2VybmVsL3RyYWNlL0tjb25maWctMzQ0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzAyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiBLZXJuZWwgVHJhY2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBEWU5BTUlDX0ZUUkFDRWAsIGFuZCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgaW50cmluc2ljYWxseSB0aWVkIHRvIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgb2YgdHJhY2luZyBsaWtlIGBGVFJBQ0VgLCBhbmQgb2YgY291cnNlIGBGVU5DVElPTl9UUkFDRVJgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIGZhcmUuIEJ1dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYENPTkZJR19LUFJPQkVTYC4gSXQmIzM5O3MgcG9zc2libGUgdG8gdXNlIHRoZSBkeW5hbWljIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBpdCwgYnV0LCBJIGFtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQmIzM5O3Mgc3VwcG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLUFJPQkVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUzNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBpc3N1ZSwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gdG8gdGhlIGZ1bmRhbWVudGFscy4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgZ29lcyB0byBgYXJjaC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGJ1aWxkLXRpbWUgY3VzdG9taXphdGlvbi4gS25vd2luZyBpdCYjMzk7cyBsaWtlbHkgdGhlcmUsIHNhdmVzIHZhbHVhYmxlIHRpbWUgaW4gdGhlIHRyb3VibGVzaG9vdGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYsIGlmIEkgZG9uJiMzOTt0IHJlY2FsbCB0aGlzIGltbWVkaWF0ZWx5LiBGcm9tIGBhcmNoL0tjb25maWdgLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMsIGZpbmQgZGVmYXVsdHMsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtQUk9CRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTExMj1jb25maWcgR0VORVJJQ19FTlRSWVxuLS1cbmFyY2gvS2NvbmZpZy0xMTYtXG5hcmNoL0tjb25maWc6MTE3OmNvbmZpZyBLUFJPQkVTXG5hcmNoL0tjb25maWctMTE4LVx0Ym9vbCBcJiMzNDtLcHJvYmVzXCYjMzQ7XG4tLVxuYXJjaC9LY29uZmlnPTE2OD1jb25maWcgT1BUUFJPQkVTXG4tLVxuYXJjaC9LY29uZmlnLTE3Mi1cbmFyY2gvS2NvbmZpZzoxNzM6Y29uZmlnIEtQUk9CRVNfT05fRlRSQUNFXG5hcmNoL0tjb25maWctMTc0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlRyYWNpbmcgQ29uZmlndXJhdGlvbiBDb25mdXNpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0cmFjaW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgdXAgaGVyZS4gU2VlbXMgbGlrZSBgRFlOQU1JQ19GVFJBQ0VgIGFuZCBgS1BST0JFU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0byBrZWVwIGluIG1pbmQgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTm93LCB3YXNuJiMzOTt0IGBEWU5BTUlDX0ZUUkFDRWAgY29ubmVjdGVkIHRvIGBGVFJBQ0VgIGFuZCBgRlVOQ1RJT05fVFJBQ0VSYCBzb21laG93PyBZZWFoLCB0aGF0IHJpbmdzIGEgYmVsbC4gVGltZSB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgaG93IHRoZXNlIHRoaW5ncyByZWxhdGUgdG8gZWFjaCBvdGhlciBpbiB0aGUgYnVpbGQgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZSwgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyIG9uIGhvdyBgRFlOQU1JQ19GVFJBQ0VgIGlzIHNlbGVjdGVkLiBUaGlzIHNob3VsZCBjbGVhciB1cCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0XG4gMzAxOlx0Y29uZmlnIERZTkFNSUNfRlRSQUNFXG4gMzAyOlx0XHRib29sXG4gMzAzOlx0XHRkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUlxuIDMwNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFXG4gMzA1Olx0XHRkZWZhdWx0IHlcbiAzMDY6XHRcdGhlbHBcbiAzMDc6XHRcdCAgVGhpcyBvcHRpb24gd2lsbCBtb2RpZnkgYWxsIHRoZSBjYWxscyB0byBmdW5jdGlvbiB0cmFjaW5nXG4gMzA4Olx0XHQgIGR5bmFtaWNhbGx5ICh3aWxsIHBhdGNoIHRoZW0gb3V0IG9mIHRoZSBiaW5hcnkgaW1hZ2UgYW5kXG4gMzA5Olx0XHQgIHJlcGxhY2UgdGhlbSB3aXRoIGEgTm8tT3AgaW5zdHJ1Y3Rpb24pIG9uIGJvb3QgdXAuIER1cmluZ1xuIDMxMDpcdFx0ICBjb21waWxlIHRpbWUsIGEgdGFibGUgaXMgbWFkZSBvZiBhbGwgdGhlIGxvY2F0aW9ucyB0aGF0IGZ0cmFjZVxuIDMxMTpcdFx0ICBjYW4gZnVuY3Rpb24gdHJhY2UsIGFuZCB0aGlzIHRhYmxlIGlzIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWxcbiAzMTI6XHRcdCAgaW1hZ2UuIFdoZW4gdGhpcyBpcyBlbmFibGVkLCBmdW5jdGlvbnMgY2FuIGJlIGluZGl2aWR1YWxseVxuIDMxMzpcdFx0ICBlbmFibGVkLCBhbmQgdGhlIGZ1bmN0aW9ucyBub3QgZW5hYmxlZCB3aWxsIG5vdCBhZmZlY3RcbiAzMTQ6XHRcdCAgcGVyZm9ybWFuY2Ugb2YgdGhlIHN5c3RlbS5cbiAzMTU6XHRcbiAzMTY6XHRcdCAgU2VlIHRoZSBmaWxlcyBpbiAvc3lzL2tlcm5lbC90cmFjaW5nOlxuIDMxNzpcdFx0ICAgIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zXG4gMzE4Olx0XHQgICAgc2V0X2Z0cmFjZV9maWx0ZXJcbiAzMTk6XHRcdCAgICBzZXRfZnRyYWNlX25vdHJhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBpbnRlcm5hbHM6CgoqKktlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24gLSBBIFF1aWNrIE1lbnRhbCBDaGVja2xpc3QqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBzZXR0aW5nIHVwIHNvbWUgdHJhY2luZywgYW5kIGl0IGxvb2tzIGxpa2UgYEZVTkNUSU9OX1RSQUNFUmAgaXMgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgY29uZmlnIG9wdGlvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgZnVuY3Rpb24tbGV2ZWwgdHJhY2luZy4gSSYjMzk7bGwgbmVlZCB0aGF0IGVuYWJsZWQgZm9yIHN1cmUuCgpOb3csIGZvciBzb21lIG1vcmUgaW4tZGVwdGggdHJhY2luZywgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGxvb2sgaW50byBgS1BST0JFU2AgdG9vLiBJdCYjMzk7cyBvZnRlbiBpbnRlcnR3aW5lZCwgYXMgYEtQUk9CRVNgIHdpbGwgZW5hYmxlIHRoZSBhYmlsaXR5IHRvIGluamVjdCBpbnN0cnVjdGlvbnMuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUga2VybmVsJiMzOTtzIGBhcmNoL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdCBgS1BST0JFU2AgaXMgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIGFyY2hpdGVjdHVyZS4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyB3aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHRzZWxlY3QgR0VORVJJQ19TWVNDQUxMXG4gMTE2Olx0XG4gMTE3Olx0Y29uZmlnIEtQUk9CRVNcbiAxMTg6XHRcdGJvb2wgXCYjMzQ7S3Byb2Jlc1wmIzM0O1xuIDExOTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0tQUk9CRVNcbiAxMjA6XHRcdHNlbGVjdCBLQUxMU1lNU1xuIDEyMTpcdFx0c2VsZWN0IEVYRUNNRU1cbiAxMjI6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuIDEyMzpcdFx0aGVscFxuIDEyNDpcdFx0ICBLcHJvYmVzIGFsbG93cyB5b3UgdG8gdHJhcCBhdCBhbG1vc3QgYW55IGtlcm5lbCBhZGRyZXNzIGFuZFxuIDEyNTpcdFx0ICBleGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24uICByZWdpc3Rlcl9rcHJvYmUoKSBlc3RhYmxpc2hlc1xuIDEyNjpcdFx0ICBhIHByb2JlcG9pbnQgYW5kIHNwZWNpZmllcyB0aGUgY2FsbGJhY2suICBLcHJvYmVzIGlzIHVzZWZ1bFxuIDEyNzpcdFx0ICBmb3Iga2VybmVsIGRlYnVnZ2luZywgbm9uLWludHJ1c2l2ZSBpbnN0cnVtZW50YXRpb24gYW5kIHRlc3RpbmcuXG4gMTI4Olx0XHQgIElmIGluIGRvdWJ0LCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAxMjk6XHRcbiAxMzA6XHRjb25maWcgSlVNUF9MQUJFTFxuIDEzMTpcdFx0Ym9vbCBcJiMzNDtPcHRpbWl6ZSB2ZXJ5IHVubGlrZWx5L2xpa2VseSBicmFuY2hlc1wmIzM0O1xuIDEzMjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSlVNUF9MQUJFTFxuIDEzMzpcdFx0c2VsZWN0IE9CSlRPT0wgaWYgSEFWRV9KVU1QX0xBQkVMX0hBQ0tcbiAxMzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKlRyYWNpbmcgQ29uZmlndXJhdGlvbiBDb25mdXNpb24gLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdHJhY2luZyBhZ2Fpbi4gUmlnaHQsIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgS1BST0JFU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0aGF0IGNvbWUgdG8gbWluZC4gQnV0IGhvbGQgb24sIEkmIzM5O20ganVzdCBmbGFzaGluZyBvbiBgRlRSQUNFYCEgRG9lc24mIzM5O3QgYEZVTkNUSU9OX1RSQUNFUmAgYWN0dWFsbHkgKnJlbHkqIG9uIGBGVFJBQ0VgPyBUaGF0IHJpbmdzIGEgYmVsbC4gVGltZSBmb3IgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgY2VydGFpbi4gTGV0IG1lIGp1c3QgZGl2ZSBpbnRvIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jeSBvZiBgRlVOQ1RJT05fVFJBQ0VSYC4gR290dGEgbWFrZSBzdXJlIG15IG1lbnRhbCBtb2RlbCBvZiB0aGlzIHN0dWZmIGlzIHVwIHRvIHNudWZmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MjI2PWNvbmZpZyBCT09UVElNRV9UUkFDSU5HXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMjM0LVxua2VybmVsL3RyYWNlL0tjb25maWc6MjM1OmNvbmZpZyBGVU5DVElPTl9UUkFDRVJcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7S2VybmVsIEZ1bmN0aW9uIFRyYWNlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQ1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnRyYWNlIENvbmZpZ3VyYXRpb24gJmFtcDsgU3ltYm9sIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCB6ZXJvZXMgaW4gb24gdGhlIGtleSBjb25maWd1cmF0aW9uczogYEZVTkNUSU9OX1RSQUNFUmAgYW5kIGBLUFJPQkVTYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gQnV0LCB3aGF0IGFib3V0IHRoZSBzcGVjaWZpYyBzeW1ib2xzIHdlJiMzOTtyZSB0YXJnZXRpbmc/IEkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhvc2UuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgYF9fZnRyYWNlX21vZGlmeV9jYWxsYC4gVGhhdCYjMzk7cyB0aGUgY29yZS4gSXQmIzM5O3MgbWFya2VkIGBzdGF0aWNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgb2Z0ZW4gbWVhbnMgaXQmIzM5O3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIGNvbmZpbmVkIHRvIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgSSBrbm93IGl0JiMzOTtzICp1c2VkKiBieSBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBTbywgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBpdHMgc2NvcGUsIEkgbmVlZCB0byBzZWUgaG93IGFuZCB3aGVyZSB0aG9zZSBhcmUgYmVpbmcgY2FsbGVkLiBUaW1lIHRvIGp1bXAgb3ZlciB0byBgYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb25zIGZvciBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgIG9uIHRoaXMgYXJjaGl0ZWN0dXJlIGFuZCB0cmFjZSB0aGVpciBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0I2Vsc2VcbiAxMTY6XHRzdGF0aWMgaW50IGZ0cmFjZV9yZWNfc2V0X25vcF9vcHMoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykgeyByZXR1cm4gMDsgfVxuIDExNzpcdHN0YXRpYyBpbnQgZnRyYWNlX3JlY191cGRhdGVfb3BzKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpIHsgcmV0dXJuIDA7IH1cbiAxMTg6XHQjZW5kaWZcbiAxMTk6XHRcbiAxMjA6XHRpbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMTIxOlx0e1xuIDEyMjpcdFx0dW5zaWduZWQgbG9uZyBkaXN0YW5jZSwgb3JpZ19hZGRyLCBwYyA9IHJlYy1cdTAwM2VpcCAtIE1DT1VOVF9BVUlQQ19TSVpFO1xuIDEyMzpcdFx0aW50IHJldDtcbiAxMjQ6XHRcbiAxMjU6XHRcdHJldCA9IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhyZWMpO1xuIDEyNjpcdFx0aWYgKHJldClcbiAxMjc6XHRcdFx0cmV0dXJuIHJldDtcbiAxMjg6XHRcbiAxMjk6XHRcdG9yaWdfYWRkciA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmZ0cmFjZV9jYWxsZXI7XG4gMTMwOlx0XHRkaXN0YW5jZSA9IGFkZHIgXHUwMDNlIG9yaWdfYWRkciA/IGFkZHIgLSBvcmlnX2FkZHIgOiBvcmlnX2FkZHIgLSBhZGRyO1xuIDEzMTpcdFx0aWYgKGRpc3RhbmNlIFx1MDAzZSBKQUxSX1JBTkdFKVxuIDEzMjpcdFx0XHRhZGRyID0gRlRSQUNFX0FERFI7XG4gMTMzOlx0XG4gMTM0Olx0XHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwocGMsIGFkZHIsIGZhbHNlKTtcbiAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0aW50IGZ0cmFjZV9tYWtlX25vcChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiAxMzg6XHR7XG4gMTM5Olx0XHR1MzIgbm9wNCA9IFJJU0NWX0lOU05fTk9QNDtcbiAxNDA6XHRcdGludCByZXQ7XG4gMTQxOlx0XG4gMTQyOlx0XHRyZXQgPSBmdHJhY2VfcmVjX3NldF9ub3Bfb3BzKHJlYyk7XG4gMTQzOlx0XHRpZiAocmV0KVxuIDE0NDpcdFx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSBub2QgdG8gdGhlIGZhY3QgdGhhdCBJJiMzOTttIHdvcmtpbmcgYXQgYW4gZXhwZXJ0IGxldmVsOgoKKipQaW5wb2ludGluZyBPdXIgRm9jdXMgZm9yIERlZXBlciBBbmFseXNpcyoqCgpBbHJpZ2h0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYSBjcml0aWNhbCBhcmVhLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCBhcmUgZ29pbmcgdG8gYmUga2V5IHN5bWJvbHMgdG8gZGlnIGludG8uIFRoZXkmIzM5O3JlIGxpa2VseSB3aGVyZSB3ZSYjMzk7bGwgZmluZCB0aGUgY29yZSBtZWNoYW5pc21zLiBOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBgZnRyYWNlX21vZGlmeV9jYWxsYC4gSXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBhc3Nlc3Mgd2hhdCBob29rcyBhcmUgYWxyZWFkeSBpbiBwbGFjZSBhbmQgaG93IHdlIG1heSBiZSBhYmxlIHRvIGF1Z21lbnQgdGhlbSBmb3Igb3VyIHB1cnBvc2VzLiBDaGVja2luZyBmb3IgdGhhdCBzcGVjaWZpYyBzeW1ib2wgcmlnaHQgb2ZmIHRoZSBiYXQgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodCBpbnRvIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncywgYW5kIGRldGVybWluZSB3aGV0aGVyIG91ciBhbmFseXNpcyB3aWxsIG5lZWQgdG8gZm9jdXMgb24gY3JlYXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIGV4aXN0aW5nIGNhbGxzLiBGcm9tIGhlcmUsIHdlJiMzOTtsbCBzZWUgd2hlcmUgdG8gZ28gbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XHRyZXR1cm4gYWRkcjtcbiAyMTE6XHR9XG4gMjEyOlx0I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xuIDIxMzpcdFxuIDIxNDpcdCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbiAyMTU6XHRpbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXG4gMjE2Olx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4gMjE3Olx0e1xuIDIxODpcdFx0dW5zaWduZWQgbG9uZyBjYWxsZXIgPSByZWMtXHUwMDNlaXAgLSBNQ09VTlRfQVVJUENfU0laRTtcbiAyMTk6XHRcdGludCByZXQ7XG4gMjIwOlx0XG4gMjIxOlx0XHRyZXQgPSBmdHJhY2VfcmVjX3VwZGF0ZV9vcHMocmVjKTtcbiAyMjI6XHRcdGlmIChyZXQpXG4gMjIzOlx0XHRcdHJldHVybiByZXQ7XG4gMjI0Olx0XG4gMjI1Olx0XHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwoY2FsbGVyLCBGVFJBQ0VfQUREUiwgdHJ1ZSk7XG4gMjI2Olx0fVxuIDIyNzpcdCNlbmRpZlxuIDIyODpcdFxuIDIyOTpcdCNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbnRlcmFjdGlvbiBvZiBLcHJvYmVzIGFuZCBGdHJhY2UqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuIEJ1dCBob2xkIG9uLCB0aGUgY29yZSBpc3N1ZSBpcyBhYm91dCBob3cga3Byb2JlcyBhbmQgZnRyYWNlIGludGVyYWN0LiBJIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcyBzcGVjaWZpYyBiZWhhdmlvci4gSXMgdGhlcmUgYSBwcmVjaXNlIHNlcXVlbmNlIG9mIGV2ZW50cz8gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgb3JkZXIgb2YgaG93IGtwcm9iZXMgYW5kIGZ0cmFjZSBhcmUgc2V0IHVwLgoKSXMgaXQgYSBrcHJvYmUgYmVpbmcgc2V0IG9uIGFuIGZ0cmFjZSBjYWxsIHNpdGUgKmJlZm9yZSogZnRyYWNlIGlzIGVuYWJsZWQ/IE9yIGlzIGl0IHRoZSByZXZlcnNlIOKAkyBmdHJhY2UgZW5hYmxlZCwgKnRoZW4qIHRoZSBrcHJvYmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgb3JkZXIuIEkgcmVjYWxsIHRoYXQgdGhlIGZ0cmFjZSBtb2RpZmljYXRpb25zIGhhcHBlbiB3aGVuIGZ0cmFjZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGF0IG1ha2VzIGBmdHJhY2VfbWFrZV9jYWxsYCwgYGZ0cmFjZV9tYWtlX25vcGAsIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCB0aGUga2V5IGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgYWx0ZXJpbmcgdGhlIGZ0cmFjZSBjYWxsIHNpdGUuCgpOb3csIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAsIHdoaWNoIGlzLCBhcyBJIHJlY2FsbCwgYSBoZWxwZXIgY2FsbGVkIGJ5IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIEJ1dCB3YWl0LCBgZnRyYWNlX21ha2Vfbm9wYCAqYWxzbyogbW9kaWZpZXMgdGhlIGNhbGwgc2l0ZSwgYnV0IGl0IGdvZXMgZGlyZWN0bHkgdGhyb3VnaCBgcGF0Y2hfdGV4dF9ub3N5bmNgLiBJdCBzZWVtcyB0aGUgbG9naWMgaW4gYGZ0cmFjZV9tYWtlX25vcGAgaXMgZGlmZmVyZW50IGZyb20gdGhlIG90aGVycywgYnlwYXNzaW5nIHRoZSB0YXJnZXRlZCBmdW5jdGlvbi4gVGhpcyBkaWZmZXJlbmNlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSByb290IGNhdXNlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRcbiAxNDY6XHRcdGlmIChwYXRjaF9pbnNuX3dyaXRlKCh2b2lkICopcmVjLVx1MDAzZWlwLCBcdTAwMjZub3A0LCBNQ09VTlRfTk9QNF9TSVpFKSlcbiAxNDc6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiAxNDg6XHRcbiAxNDk6XHRcdHJldHVybiAwO1xuIDE1MDpcdH1cbiAxNTE6XHRcbiAxNTI6XHQvKlxuIDE1MzpcdCAqIFRoaXMgaXMgY2FsbGVkIGVhcmx5IG9uLCBhbmQgaXNuJiMzOTt0IHdyYXBwZWQgYnlcbiAxNTQ6XHQgKiBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV97cHJlcGFyZSxwb3N0X3Byb2Nlc3N9KCkgYW5kIHRoZXJlZm9yZSBkb2VzbiYjMzk7dCBob2xkXG4gMTU1Olx0ICogdGV4dF9tdXRleCwgd2hpY2ggdHJpZ2dlcnMgYSBsb2NrZGVwIGZhaWx1cmUuICBTTVAgaXNuJiMzOTt0IHJ1bm5pbmcgc28gd2UgY291bGRcbiAxNTY6XHQgKiBqdXN0IGRpcmVjdGx5IHBva2UgdGhlIHRleHQsIGJ1dCBpdCYjMzk7cyBzaW1wbGVyIHRvIGp1c3QgdGFrZSB0aGUgbG9ja1xuIDE1NzpcdCAqIG91cnNlbHZlcy5cbiAxNTg6XHQgKi9cbiAxNTk6XHRpbnQgZnRyYWNlX2luaXRfbm9wKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGR5bl9mdHJhY2UgKnJlYylcbiAxNjA6XHR7XG4gMTYxOlx0XHR1bnNpZ25lZCBsb25nIHBjID0gcmVjLVx1MDAzZWlwIC0gTUNPVU5UX0FVSVBDX1NJWkU7XG4gMTYyOlx0XHR1bnNpZ25lZCBpbnQgbm9wc1syXSwgb2Zmc2V0O1xuIDE2MzpcdFx0aW50IHJldDtcbiAxNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFRyYWNlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBjb3JlIG9mIGhvdyB0aGlzIHRyYWNpbmcgc3lzdGVtIGlzIHNldCB1cC4gRnJvbSB0aGUgY29udGV4dCwgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHN5bWJvbHMgdG8gd2F0Y2guIFRoZXNlIGFyZSB0aGUgd29ya2hvcnNlcywgaXQgc2VlbXMuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZHJpdmluZyB0aGlzIGFyZSBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEtQUk9CRVNgLiBIb2xkIG9uLCBJIHNlZSBhIGRlcGVuZGVuY3kgaGVyZeKApiBgRFlOQU1JQ19GVFJBQ0VgIGlzICpzZWxlY3RlZCogYnkgYEZVTkNUSU9OX1RSQUNFUmAgLSBpbnRlcmVzdGluZywgYnV0IG9ubHkgaWYgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgIGlzIHNldC4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBIQVZFX0RZTkFNSUNfRlRSQUNFYCBpcyBkZWZpbmVkLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaWtlIHRoaXMgaXMgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgaGFzIHRvIHNheSBvbiB0aGUgbWF0dGVyLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmb3VuZGF0aW9uIHRoaXMgY29kZSBpcyBidWlsdCB1cG9uIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHRyYWNpbmcgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0RZTkFNSUNfRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMTU4LVx0c2VsZWN0IEhBVkVfRE1BX0NPTlRJR1VPVVMgaWYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWc6MTU5Olx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UgaWYgTU1VIFx1MDAyNlx1MDAyNiAoQ0xBTkdfU1VQUE9SVFNfRFlOQU1JQ19GVFJBQ0UgfHwgR0NDX1NVUFBPUlRTX0RZTkFNSUNfRlRSQUNFKVxuYXJjaC9yaXNjdi9LY29uZmlnLTE2MC1cdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfNEIgaWYgRFlOQU1JQ19GVFJBQ0UgXHUwMDI2XHUwMDI2IFJJU0NWX0lTQV9DXG5hcmNoL3Jpc2N2L0tjb25maWc6MTYxOlx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTXG5hcmNoL3Jpc2N2L0tjb25maWc6MTYyOlx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QUyBpZiAoRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTIFx1MDAyNlx1MDAyNiAhQ0ZJKVxuYXJjaC9yaXNjdi9LY29uZmlnOjE2MzpcdHNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQVJHUyBpZiBIQVZFX0RZTkFNSUNfRlRSQUNFXG5hcmNoL3Jpc2N2L0tjb25maWctMTY0LVx0c2VsZWN0IEhBVkVfRlRSQUNFX0dSQVBIX0ZVTkNcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNjU6XHRzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjYtXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9GUkVHU1xuYXJjaC9yaXNjdi9LY29uZmlnOjE2NzpcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUiBpZiBIQVZFX0RZTkFNSUNfRlRSQUNFXG5hcmNoL3Jpc2N2L0tjb25maWctMTY4LVx0c2VsZWN0IEhBVkVfRUJQRl9KSVQgaWYgTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJJU0MtViBGdW5jdGlvbiBUcmFjZXIgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gdGhlIGBGVU5DVElPTl9UUkFDRVJgIGlzIGF2YWlsYWJsZSBmb3IgUklTQy1WLCB3aGljaCBpcyBmYW50YXN0aWMuIFRoZSBvYnZpb3VzIGNvbmZpZ3MgSSBuZWVkIHRvIGVuYWJsZSBhcmUgYEZVTkNUSU9OX1RSQUNFUmAgaXRzZWxmLCBhbmQgYEtQUk9CRVNgLCBvZiBjb3Vyc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBlbHNlIHRob3VnaC4gTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBmdHJhY2VfbW9kaWZ5X2NhbGxgLCB3aGljaCBtZWFucyBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LgoKTGV0IG1lIHNlZS4uLiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIHNlbGVjdGVkIGJ5IGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgd2hpY2ggaXRzZWxmIGlzIHNlbGVjdGVkIGJ5IGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNgLiBBbmQgdGhhdCYjMzk7cyBzZWxlY3RlZCBieSBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTICZhbXA7JmFtcDsgIUNGSWAuIFRoaXMgZmVlbHMgZmFtaWxpYXIuLi4gYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU2AgaXMgY2hvc2VuIHZpYSBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NgIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IGBIQVZFX0RZTkFNSUNfRlRSQUNFYC4gU28sIGJhc2VkIG9uIHRoYXQgY29uZmlndXJhdGlvbiBjYXNjYWRlLCBpdCBzZWVtcyBsaWtlIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBGVU5DVElPTl9UUkFDRVJgIGlzIGVuYWJsZWQsIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMuIEJ1dCBJIHNob3VsZG4mIzM5O3QganVzdCBhc3N1bWUgYW55dGhpbmcuIEl0IGlzIGFsd2F5cyBiZXN0IHRvIGNoZWNrLiBTbywgSSB3aWxsIGNvbmZpcm0gd2hldGhlciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGEgZGlyZWN0bHkgY29uZmlndXJhYmxlIG9wdGlvbiBmb3IgdGhpcyBwbGF0Zm9ybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MzI0PWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1Ncbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjk6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDM3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRHluYW1pYyBmdHJhY2Ugd2l0aCBEaXJlY3QgQ2FsbHMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgZGVmX2Jvb2wgeWAgZm9yIHdoYXRldmVyIHRoaXMgaXMsIGB5YCwgcmVhbGx5IGhpbmdlcyBvbiBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IGNsZWFuZXIsIGRvZXNuJiMzOTt0IGl0PyBJdCBpbXBsaWVzIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgYSBuaWNlIHNpbXBsaWZpY2F0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGJ5IHdpdGgganVzdCBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEtQUk9CRVNgLiBNYWtlcyBzZW5zZSwgY29uc2lkZXJpbmcgdGhleSBwcm92aWRlIHRoZSB1bmRlcmx5aW5nIGNhcGFiaWxpdGllcy4gQnV0LCBhcyBhbHdheXMsIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9uZSBsYXN0IHRpbWUsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYEZUUkFDRWAgaXNuJiMzOTt0IGEgaGlkZGVuIHJlcXVpcmVtZW50IHRoYXQgbmVlZHMgdG8gYmUgdG9nZ2xlZCBvbi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZUUkFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTE5OD1jb25maWcgVFJBQ0lOR19TVVBQT1JUXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMjAzLVxua2VybmVsL3RyYWNlL0tjb25maWc6MjA0Om1lbnVjb25maWcgRlRSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDUtXHRib29sIFwmIzM0O1RyYWNlcnNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz01ODg9Y29uZmlnIEVOQUJMRV9ERUZBVUxUX1RSQUNFUlNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1OTc6Y29uZmlnIEZUUkFDRV9TWVNDQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctNTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBzeXNjYWxsc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTg2OD1jb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg3Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzgtXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODgwLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODgxOmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9DQ1xua2VybmVsL3RyYWNlL0tjb25maWctODgyLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfT0JKVE9PTFxua2VybmVsL3RyYWNlL0tjb25maWctODg4LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5NC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg5NTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUkVDT1JETUNPVU5UXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTYtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTAyMT1jb25maWcgVFJBQ0VfRVZBTF9NQVBfRklMRVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNDgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDQ5OmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTlxua2VybmVsL3RyYWNlL0tjb25maWctMTA1MC1cdGJvb2wgXCYjMzQ7UmVjb3JkIGZ1bmN0aW9ucyB0aGF0IHJlY3Vyc2UgaW4gZnVuY3Rpb24gdHJhY2luZ1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDYzOmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTl9TSVpFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDY0LVx0aW50IFwmIzM0O01heCBudW1iZXIgb2YgcmVjdXJzZWQgZnVuY3Rpb25zIHRvIHJlY29yZFwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDc0OmNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc1LVx0Ym9vbCBcJiMzNDtWYWxpZGF0ZSBSQ1UgaXMgb24gZHVyaW5nIGZ0cmFjZSBleGVjdXRpb25cJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTAxPWNvbmZpZyBHQ09WX1BST0ZJTEVfRlRSQUNFXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTExMi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTM6Y29uZmlnIEZUUkFDRV9TRUxGVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNC1cdGJvb2xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTUtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTE2OmNvbmZpZyBGVFJBQ0VfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE3LVx0Ym9vbCBcJiMzNDtQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZVwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMzY9Y29uZmlnIEVWRU5UX1RSQUNFX1RFU1RfU1lTQ0FMTFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ3LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTE0ODpjb25maWcgRlRSQUNFX1NPUlRfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ5LSAgICAgICBib29sIFwmIzM0O1ZlcmlmeSBjb21waWxlIHRpbWUgc29ydGluZyBvZiBmdHJhY2UgZnVuY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQ1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRlRSQUNFIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGVuYWJsaW5nIGBGVFJBQ0VgLiBJdCYjMzk7cyBhIG1lbnVjb25maWcsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgbmVlZCB0byBnbyBzcGVsdW5raW5nIHRocm91Z2ggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSB0byBhY3R1YWxseSBzd2l0Y2ggaXQgb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgYW5kIGl0JiMzOTtzIGFsbW9zdCBhbHdheXMgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmb3Igc29tZXRoaW5nIGxpa2UgdGhpcy4gU28sIGxldCYjMzk7cyBoZWFkIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGFjdHVhbGx5IGF2YWlsYWJsZSBmb3IgYEZUUkFDRWAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIG1heWJlIGV2ZW4gc29tZSBmaW5lLWdyYWluZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGF0IGZpbGUgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmVmb3JlIGJsaW5kbHkgZW5hYmxpbmcgaXQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IERvZXMgaXQgbmVlZCBhbnkgc3BlY2lhbCBmbGFncz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgSSBtYWtlIHRoaXMgY2hhbmdlPyBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxuIDIwMTpcdFx0ZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAyMDI6XHRcdGRlZmF1bHQgeVxuIDIwMzpcdFxuIDIwNDpcdG1lbnVjb25maWcgRlRSQUNFXG4gMjA1Olx0XHRib29sIFwmIzM0O1RyYWNlcnNcJiMzNDtcbiAyMDY6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUXG4gMjA3Olx0XHRkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMXG4gMjA4Olx0XHRoZWxwXG4gMjA5Olx0XHQgIEVuYWJsZSB0aGUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gMjEwOlx0XG4gMjExOlx0aWYgRlRSQUNFXG4gMjEyOlx0XG4gMjEzOlx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcbiAyMTQ6XHRcdGJvb2wgXCYjMzQ7QXV0b21vdW50IHRyYWNlZnMgb24gZGVidWdmcyBbREVQUkVDQVRFRF1cJiMzNDtcbiAyMTU6XHRcdGRlcGVuZHMgb24gVFJBQ0lOR1xuIDIxNjpcdFx0ZGVmYXVsdCB5XG4gMjE3Olx0XHRoZWxwXG4gMjE4Olx0XHQgIFRoZSB0cmFjaW5nIGludGVyZmFjZSB3YXMgbW92ZWQgZnJvbSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nXG4gMjE5Olx0XHQgIHRvIC9zeXMva2VybmVsL3RyYWNpbmcgaW4gMjAxNSwgYnV0IHRoZSB0cmFjaW5nIGZpbGUgc3lzdGVtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ0cmFjZSBDb25maWd1cmF0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYEZUUkFDRWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBERUJVR19LRVJORUxgIGlzIHNldC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gSSBjYW4gcHJvYmFibHkganVzdCBmb2N1cyBvbiBleHBsaWNpdGx5IGRlZmluaW5nIGBGVFJBQ0VgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIGBLUFJPQkVTYCB0byBnZXQgd2hhdCBJIG5lZWQuIEFoLCByaWdodCwgYEZVTkNUSU9OX1RSQUNFUmAgaXMgdGhlIGNvcmUgb25lIGhlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaWYgSSBuZWVkIGBEWU5BTUlDX0ZUUkFDRWAgYXMgd2VsbC4KClJpZ2h0LCBgRFlOQU1JQ19GVFJBQ0VgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgIGFyZSBib3RoIHNldC4gR2l2ZW4gdGhhdCwgYW5kIGFzc3VtaW5nIHRoYXQgUklTQy1WIGltcGxlbWVudHMgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgLCB0aGVuIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgS1BST0JFU2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgUklTQy1WIHN1cHBvcnRzIGR5bmFtaWMgZnRyYWNlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jYCBmb3IgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBzdGF0aWMgb3IgZXhwb3J0ZWQ/IExldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGV5IGFyZSwgaW4gZmFjdCwgZ2xvYmFsLiBOb3csIGxldCBtZSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ0cmFjZV9tYWtlX2NhbGxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZnRyYWNlX21ha2VfY2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTExNz1zdGF0aWMgaW50IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKSB7IHJldHVybiAwOyB9XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTE5LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MTIwOmludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTEyMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzA4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29yZSBGdW5jdGlvbnMgaW4gRHluYW1pYyBGdHJhY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYW5kIGl0JiMzOTtzIGNsZWFyIHRoZXkmIzM5O3JlIGdsb2JhbCBpbiBzY29wZSDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWFsbHkgZHJpdmluZyB0aGUgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCBpcyBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKZJIHNlZSBgZnRyYWNlX21vZGlmeV9jYWxsYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gT2theSwgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kOyBpdCBtaWdodCBub3QgYWx3YXlzIGJlIHByZXNlbnQuCgpMZXQgbWUgcXVpY2tseSBzY2FuLCBpcyB0aGVyZSBhbnkgb3RoZXIgZ2xvYmFsbHkgcmVsZXZhbnQgZnVuY3Rpb24/IEFoLCB5ZXMsIHRoZXJlJiMzOTtzIGBmdHJhY2VfbWFrZV9ub3BgLiBPa2F5LCBzbyBsZXQmIzM5O3MgaW5jbHVkZSB0aGVzZSB0aHJlZTogYGZ0cmFjZV9tYWtlX2NhbGxgLCBgZnRyYWNlX21vZGlmeV9jYWxsYCwgYW5kIGBmdHJhY2VfbWFrZV9ub3BgLgoKTm93LCB0aGUgcGF0Y2ggaXMgbWFraW5nIGNoYW5nZXMgdG8gYF9fZnRyYWNlX21vZGlmeV9jYWxsYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEkgc2VlIG5vdyB0aGF0IGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAgaXMgKmNhbGxlZCBieSogYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYC4gU28sIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgYXJlIHJlYWxseSB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBoZXJlLiBUaGV5JiMzOTtyZSB0aGUgZW50cnkgcG9pbnRzIHRoYXQgZnVubmVsIGludG8gdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGxvZ2ljLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgLSBpcyB0aGVyZSBhbnkgb3RoZXIgY2FsbGVyIG9mIGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAgb3V0c2lkZSBvZiB0aGUgdHdvIGZ1bmN0aW9ucyBhbHJlYWR5IGlkZW50aWZpZWQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZnRyYWNlX21vZGlmeV9jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9NDM9dm9pZCBhcmNoX2Z0cmFjZV91cGRhdGVfY29kZShpbnQgY29tbWFuZClcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy00OS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjUwOnN0YXRpYyBpbnQgX19mdHJhY2VfbW9kaWZ5X2NhbGwodW5zaWduZWQgbG9uZyBzb3VyY2UsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBib29sIHZhbGlkYXRlKVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtNTEte1xuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTEyMD1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTMzLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MTM0Olx0cmV0dXJuIF9fZnRyYWNlX21vZGlmeV9jYWxsKHBjLCBhZGRyLCBmYWxzZSk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xMzUtfVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTIxNT1pbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjI0LVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjI1Olx0cmV0dXJuIF9fZnRyYWNlX21vZGlmeV9jYWxsKGNhbGxlciwgRlRSQUNFX0FERFIsIHRydWUpO1xuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjI2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMDcKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgRnRyYWNlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGJvaWxzIGRvd24gdG8gaG93IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgYXJlIGludGVyYWN0aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHNvIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZS4gVGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGBGVFJBQ0VgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kIGBLUFJPQkVTYCwgaW5zdGFudGx5IHRlbGwgbWUgdGhpcyBpcyBhIHRyYWNpbmctcmVsYXRlZCBidWcgaW52b2x2aW5nIGtlcm5lbCBwcm9iZXMuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBmdW5jdGlvbmFsIGRlZmVjdC4gSXQmIzM5O3MgYWJvdXQgZml4aW5nIHRoZSBtb2RpZmljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIFJJU0MtViBmdHJhY2UgY29kZSB3aGVuIGEga3Byb2JlIGlzIHBsYWNlZCBvbiB0aGUgJiMzNDthdWlwYyYjMzQ7IGluc3RydWN0aW9uIGF0IHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIG1lYW5zIGl0IGlzIGRpcmVjdGx5IGltcGFjdGluZyB0aGUgY29yZSB0cmFjaW5nIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgaXRzIGFiaWxpdHkgdG8gY29ycmVjdGx5IG1vZGlmeSBjb2RlIGR1cmluZyBrcHJvYmUgaW5zZXJ0aW9uLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyB0cmFjaW5nIGZ1bmN0aW9ucy4gR2l2ZW4gdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGZpeCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIEkmIzM5O2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBhIHBhdGNoIHRoYXQmIzM5O3Mgd29ydGggZnV6emluZyB0byBndWFyYW50ZWUgaXRzIGNvcnJlY3QgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnRyYWNlX21ha2VfY2FsbCYjMzQ7LAogICAgJiMzNDtmdHJhY2VfbW9kaWZ5X2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gUklTQy1WIGZ0cmFjZSBjb2RlIG1vZGlmaWNhdGlvbiB3aGVuIGEga3Byb2JlIGlzIHBsYWNlZCBvbiB0aGUgYXVpcGMgaW5zdHJ1Y3Rpb24gb2YgdGhlIGZ0cmFjZSBjYWxsIHNpdGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbmFibGluZyBmdHJhY2UgYW5kIGtwcm9iZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z0cmFjZV9tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7ZnRyYWNlX21vZGlmeV9jYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFJJU0MtViBmdHJhY2UgY29kZSBtb2RpZmljYXRpb24gd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIG9mIHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW5hYmxpbmcgZnRyYWNlIGFuZCBrcHJvYmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NDk6NTguMTc3ODMxOTk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwODQ3MjkwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIktQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdHJhY2VfbWFrZV9jYWxsXCIsXG4gICAgXCJmdHJhY2VfbW9kaWZ5X2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBSSVNDLVYgZnRyYWNlIGNvZGUgbW9kaWZpY2F0aW9uIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBhdWlwYyBpbnN0cnVjdGlvbiBvZiB0aGUgZnRyYWNlIGNhbGwgc2l0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVuYWJsaW5nIGZ0cmFjZSBhbmQga3Byb2Jlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NDk6NTguMTc3ODM4ODI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc3MjE3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDcxYjI0NTkyMjBlMTAzMDEwMzhmYWUyZTQwNTA1Yzc5YTg5MjljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTg6NDk6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1xcbmluZGV4IGI0MzBlZGZiODNmNGMuLmJlOGI2ODUxNDQxNzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdG9wX21hY2hpbmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGV4dC1wYXRjaGluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2luc24uaFxcdTAwM2VcXG4gXFxuICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VcXG4gdm9pZCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpXFxuQEAgLTYzLDcgKzY0LDkgQEAgc3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2xcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdChyZXBsYWNlZCwgKHZvaWQgKilzb3VyY2UsIDIgKiBNQ09VTlRfSU5TTl9TSVpFKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbi1cXHRcXHRpZiAocmVwbGFjZWRbMF0gIT0gY2FsbFswXSkge1xcbitcXHRcXHQvKiBCeXBhc3MgdGhlIGNoZWNrIGlmIHRoZSBhdWlwYyBpbnNuIGlzIGEga3Byb2JlIGJyZWFrcG9pbnQgKi9cXG4rXFx0XFx0aWYgKHJlcGxhY2VkWzBdICE9IGNhbGxbMF0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICEocmlzY3ZfaW5zbl9pc19lYnJlYWsocmVwbGFjZWRbMF0pIHx8IHJpc2N2X2luc25faXNfY19lYnJlYWsocmVwbGFjZWRbMF0pKSkge1xcbiBcXHRcXHRcXHRwcl9lcnIoXFxcIiVwOiBleHBlY3RlZCAoJTA4eCkgYnV0IGdvdCAoJTA4eClcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICAgICAodm9pZCAqKXNvdXJjZSwgY2FsbFswXSwgcmVwbGFjZWRbMF0pO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NDk6NTguNjY2MzgzNTE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzM1OTYxNjg0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIktQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdHJhY2VfbWFrZV9jYWxsXCIsXG4gICAgXCJmdHJhY2VfbW9kaWZ5X2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBSSVNDLVYgZnRyYWNlIGNvZGUgbW9kaWZpY2F0aW9uIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBhdWlwYyBpbnN0cnVjdGlvbiBvZiB0aGUgZnRyYWNlIGNhbGwgc2l0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVuYWJsaW5nIGZ0cmFjZSBhbmQga3Byb2Jlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzQ3MWIyNDU5MjIwZTEwMzAxMDM4ZmFlMmU0MDUwNWM3OWE4OTI5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTg6NDk6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jXG5pbmRleCBiNDMwZWRmYjgzZjRjLi5iZThiNjg1MTQ0MTc0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jXG5AQCAtMTIsNiArMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0b3BfbWFjaGluZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS90ZXh0LXBhdGNoaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vaW5zbi5oXHUwMDNlXG4gXG4gI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxuIHZvaWQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKVxuQEAgLTYzLDcgKzY0LDkgQEAgc3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2xcbiBcdFx0aWYgKGNvcHlfZnJvbV9rZXJuZWxfbm9mYXVsdChyZXBsYWNlZCwgKHZvaWQgKilzb3VyY2UsIDIgKiBNQ09VTlRfSU5TTl9TSVpFKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdFx0aWYgKHJlcGxhY2VkWzBdICE9IGNhbGxbMF0pIHtcbitcdFx0LyogQnlwYXNzIHRoZSBjaGVjayBpZiB0aGUgYXVpcGMgaW5zbiBpcyBhIGtwcm9iZSBicmVha3BvaW50ICovXG4rXHRcdGlmIChyZXBsYWNlZFswXSAhPSBjYWxsWzBdIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShyaXNjdl9pbnNuX2lzX2VicmVhayhyZXBsYWNlZFswXSkgfHwgcmlzY3ZfaW5zbl9pc19jX2VicmVhayhyZXBsYWNlZFswXSkpKSB7XG4gXHRcdFx0cHJfZXJyKFwiJXA6IGV4cGVjdGVkICglMDh4KSBidXQgZ290ICglMDh4KVxcblwiLFxuIFx0XHRcdCAgICAgICAodm9pZCAqKXNvdXJjZSwgY2FsbFswXSwgcmVwbGFjZWRbMF0pO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NDk6NTguNjY2Mzg1Mzc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxNDExNTgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBSSVNDLVYgRnRyYWNlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jYC4gSXQncyBtb2RpZnlpbmcgYF9fZnRyYWNlX21vZGlmeV9jYWxsYCB0byBza2lwIGEgY2hlY2sgZm9yIGtwcm9iZSBicmVha3BvaW50cyDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIGJ5cGFzc2luZyB0aGUgYHJpc2N2X2luc25faXNfZWJyZWFrYCBhbmQgYHJpc2N2X2luc25faXNfY19lYnJlYWtgIGNoZWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnV6emFibGU/XCIuIFRoaXMgaXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgZGVhbGluZyB3aXRoIGZ0cmFjZSwgYW5kIHRoYXQgbWFrZXMgaXQgd29ydGggaW52ZXN0aWdhdGluZy5cblxuVGhpcyBtb2RpZmljYXRpb24gb2NjdXJzIGR1cmluZyBmdHJhY2UgZW5hYmxpbmcgb3IgZGlzYWJsaW5nLiBXZSBjYW4gdHJpZ2dlciB0aGF0IGZyb20gdXNlcnNwYWNlIHZpYSB0cmFjZWZzLCBhbmQgdGhhdCdzIGEgZ29vZCBlbnRyeSBwb2ludCBmb3IgdXMuIFRoZSByZWFsIGNhdGNoIGlzIHRoYXQgdGhpcyBpcyBSSVNDLVYgc3BlY2lmaWMuXG5cbkJ1dCB3YWl0LCBJIGtub3cgU3l6a2FsbGVyIHN1cHBvcnRzIFJJU0MtViEgVGhhdCdzIGEgaHVnZSB3aW4uIFNvLCBpdCBsb29rcyBwcm9taXNpbmcuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYF9fZnRyYWNlX21vZGlmeV9jYWxsYCBpbiBgYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNgIG1vcmUgY2xvc2VseSB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHBsYW4gYSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6MDMuMDgwNTA0MzU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjEwNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnRyYWNlX21vZGlmeV9jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTQzPXZvaWQgYXJjaF9mdHJhY2VfdXBkYXRlX2NvZGUoaW50IGNvbW1hbmQpXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy00OS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzo1MDpzdGF0aWMgaW50IF9fZnRyYWNlX21vZGlmeV9jYWxsKHVuc2lnbmVkIGxvbmcgc291cmNlLCB1bnNpZ25lZCBsb25nIHRhcmdldCwgYm9vbCB2YWxpZGF0ZSlcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy01MS17XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xMjA9aW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTMzLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjEzNDpcXHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwocGMsIGFkZHIsIGZhbHNlKTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xMzUtfVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MjE1PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIyNC1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyMjU6XFx0cmV0dXJuIF9fZnRyYWNlX21vZGlmeV9jYWxsKGNhbGxlciwgRlRSQUNFX0FERFIsIHRydWUpO1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIyNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjAzLjE2NDExOTQ3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODk2NjgxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnRyYWNlIENhbGwgTW9kaWZpY2F0aW9uIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBgX19mdHJhY2VfbW9kaWZ5X2NhbGxgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGJ5IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIFN0YW5kYXJkIGZ0cmFjZSBjYWxsYmFja3MsIHJpZ2h0PyBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzLCB5ZWFoLCB0aGlzIGlzIHByb2JhYmx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLiBGdHJhY2UgaXMgZGVlcCwgaXQncyBjb3JlIGtlcm5lbCBzdHVmZiwgc28gYW55IGlzc3VlcyBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcmFtaWZpY2F0aW9ucy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBmaXhpbmcgYSBzcGVjaWZpYyBmYWlsdXJlIHNjZW5hcmlvOiBmdHJhY2UgbW9kaWZpY2F0aW9uIGZhaWxpbmcgd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIGF0IHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgdHdlYWsuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuXG5cbkxldCBtZSBzZWUuLi4gZGlnZ2luZyBpbnRvIHRoZSBjb25maWcgb3B0aW9ucy4gTG9va3MgbGlrZSBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCBpcyBlc3NlbnRpYWwsIG5vIHN1cnByaXNlIHRoZXJlLiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19SSVNDVmAgaXMgbmVlZGVkIHNpbmNlIHRoaXMgaXMgYXJjaCBzcGVjaWZpYy4gQnV0LCBkbyB3ZSBuZWVkIHRvIHNwZWNpZnkgYXJjaGl0ZWN0dXJlIGNvbmZpZ3Mgc3BlY2lmaWNhbGx5LCBvciBqdXN0IGFzc3VtZSB0aGUgYXJjaGl0ZWN0dXJlIGlzIHByZXNlbnQ/IFByb2JhYmx5IG5vdCwgdXN1YWxseSB0aGUgYXJjaCBjb25maWcgaXMgaW1wbGllZCwgYnV0LCB3YWl0Li4uIEhvbGQgb24sIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VgIGlzICppbnNpZGUqIGFuIGAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCBibG9jayBpbiBgYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNgLiBIbW0sIHJpZ2h0LiBPa2F5LCBsZXQncyBrZWVwIGRpZ2dpbmcgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCBvdXIgZHVja3MgaW4gYSByb3cgZm9yIGhvdyB0byByZXByb2R1Y2UgdGhpcyBzY2VuYXJpbyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDowNy43NTM3OTEwNDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MjAyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19EWU5BTUlDX0ZUUkFDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xNi1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoxNzojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTgtdm9pZCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0zMD11bnNpZ25lZCBsb25nIGZ0cmFjZV9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMzEte1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjMyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTKSlcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0zMy1cXHRcXHRyZXR1cm4gYWRkciArIDggKyBNQ09VTlRfQVVJUENfU0laRTtcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTUwPXN0YXRpYyBpbnQgX19mdHJhY2VfbW9kaWZ5X2NhbGwodW5zaWduZWQgbG9uZyBzb3VyY2UsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBib29sIHZhbGlkYXRlKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtODItXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6ODM6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtODQtc3RhdGljIGNvbnN0IHN0cnVjdCBmdHJhY2Vfb3BzICpyaXNjdjY0X3JlY19nZXRfb3BzKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xODE9aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTg2LVxcdCAqL1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjE4NzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QUykpXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTg4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjA2LVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjIwNzojZWxzZSAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi9cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMDgtdW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9hZGp1c3QodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjExLX1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyMTI6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIxMy1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyMTQ6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTIxNS1pbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0yMzM9dm9pZCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4odW5zaWduZWQgbG9uZyAqcGFyZW50LCB1bnNpZ25lZCBsb25nIHNlbGZfYWRkcixcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI1MS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyNTI6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI1My12b2lkIGZ0cmFjZV9ncmFwaF9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLFxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMjcyLX1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoyNzM6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTI3NC0jZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDowOC4wNjEwMDEyNDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE2Mzg0MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEtwcm9iZSBDb25uZWN0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaWdobGlnaHRzIGByaXNjdl9pbnNuX2lzX2VicmVha2AgYW5kIGByaXNjdl9pbnNuX2lzX2NfZWJyZWFrYCwgYW5kIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRpZWQgdG8ga3Byb2Jlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiRG9lcyB0aGlzIHBhdGNoICpyZXF1aXJlKiBgQ09ORklHX0tQUk9CRVNgIHRvIGV2ZW4gYmUgcmVsZXZhbnQ/XCIuIExldCdzIGZpZ3VyZSB0aGF0IG91dC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIGFuIGlzc3VlIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBgYXVpcGNgIGluc3RydWN0aW9uIHVzZWQgYnkgZnRyYWNlLiBBaGEhIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgd2UnbGwgbmVlZCAqYm90aCogYENPTkZJR19EWU5BTUlDX0ZUUkFDRWAgYW5kIGBDT05GSUdfS1BST0JFU2AgdG8gcmVwcm9kdWNlIGFuZCB2YWxpZGF0ZSB0aGlzIGZpeC4gVGltZSB0byBkaXZlIGludG8gYGFyY2gvcmlzY3YvS2NvbmZpZ2AgYW5kIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoxMS44NzczODg5NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2OTgwNjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjExLjk2MDA5Mzc2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NTk3NDIzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBUcmFjZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSBob21lcyBpbiBvbiBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRyYWNpbmcgc3Vic3lzdGVtLiBBbnl0aGluZyByZWxhdGVkIHRvIHRyYWNpbmcgY2FwYWJpbGl0aWVzIOKAkyB3aGV0aGVyIGl0J3Mgc3BlY2lmaWMgZXZlbnQgdHJhY2luZywgZHluYW1pYyB0cmFjaW5nLCBvciBjb250cm9sIG92ZXIgdGhlIGluZnJhc3RydWN0dXJlIGl0c2VsZiDigJMgaXMgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBiZSBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBkZWNsYXJlZCB0aGVyZS4gVGhpcyBnaXZlcyBhIGJyb2FkIG92ZXJ2aWV3IG9mIHRoZSB0cmFjZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBOb3csIGxldCdzIGV4cGxvcmUgdGhhdCBmaWxlIGFuZCBkZWx2ZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoxNC42MTk4NDIyNjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzYxMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0yOTA9Y29uZmlnIEZVTkNUSU9OX1RSQUNFX0FSR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMwMC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMDE6Y29uZmlnIERZTkFNSUNfRlRSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWctMzAyLVxcdGJvb2xcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyMy1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjQ6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyNS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzM0OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0NBTExfT1BTXFxua2VybmVsL3RyYWNlL0tjb25maWctMzM1LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzNy1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMzg6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzOS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zNDItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzQzOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0NC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjE0LjY4MTYxMTAwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5MDYxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIEtlcm5lbCBUcmFjaW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYERZTkFNSUNfRlRSQUNFYCwgYW5kIGFzIGV4cGVjdGVkLCBpdCdzIGludHJpbnNpY2FsbHkgdGllZCB0byB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIG9mIHRyYWNpbmcgbGlrZSBgRlRSQUNFYCwgYW5kIG9mIGNvdXJzZSBgRlVOQ1RJT05fVFJBQ0VSYC4gVGhhdCdzIHN0YW5kYXJkIGZhcmUuIEJ1dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3Mgc29tZXRoaW5nLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfS1BST0JFU2AuIEl0J3MgcG9zc2libGUgdG8gdXNlIHRoZSBkeW5hbWljIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBpdCwgYnV0LCBJIGFtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQncyBzdXBwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoxNy45ODA2NzU0MDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTc0MjE2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjE4LjA1Mjg1NjkyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg5MjcwMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzc3VlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZHJpbGwgZG93biB0byB0aGUgZnVuZGFtZW50YWxzLiBJdCdzIGFsbW9zdCBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBtZW50YWwgbWFwIGltbWVkaWF0ZWx5IGdvZXMgdG8gYGFyY2gvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgYnVpbGQtdGltZSBjdXN0b21pemF0aW9uLiBLbm93aW5nIGl0J3MgbGlrZWx5IHRoZXJlLCBzYXZlcyB2YWx1YWJsZSB0aW1lIGluIHRoZSB0cm91Ymxlc2hvb3RpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmLCBpZiBJIGRvbid0IHJlY2FsbCB0aGlzIGltbWVkaWF0ZWx5LiBGcm9tIGBhcmNoL0tjb25maWdgLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMsIGZpbmQgZGVmYXVsdHMsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhbWV3b3JrLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoyMS4xNDIxMzA3NDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjEzNzkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTExMj1jb25maWcgR0VORVJJQ19FTlRSWVxcbi0tXFxuYXJjaC9LY29uZmlnLTExNi1cXG5hcmNoL0tjb25maWc6MTE3OmNvbmZpZyBLUFJPQkVTXFxuYXJjaC9LY29uZmlnLTExOC1cXHRib29sIFxcXCJLcHJvYmVzXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnPTE2OD1jb25maWcgT1BUUFJPQkVTXFxuLS1cXG5hcmNoL0tjb25maWctMTcyLVxcbmFyY2gvS2NvbmZpZzoxNzM6Y29uZmlnIEtQUk9CRVNfT05fRlRSQUNFXFxuYXJjaC9LY29uZmlnLTE3NC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjIxLjI1NDI3NzA5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE5OTkyNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVHJhY2luZyBDb25maWd1cmF0aW9uIENvbmZ1c2lvbioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0cmFjaW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgdXAgaGVyZS4gU2VlbXMgbGlrZSBgRFlOQU1JQ19GVFJBQ0VgIGFuZCBgS1BST0JFU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0byBrZWVwIGluIG1pbmQgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTm93LCB3YXNuJ3QgYERZTkFNSUNfRlRSQUNFYCBjb25uZWN0ZWQgdG8gYEZUUkFDRWAgYW5kIGBGVU5DVElPTl9UUkFDRVJgIHNvbWVob3c/IFllYWgsIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSBob3cgdGhlc2UgdGhpbmdzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRoZSBidWlsZCBzeXN0ZW0uIExldCBtZSBjaGVjayB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gaG93IGBEWU5BTUlDX0ZUUkFDRWAgaXMgc2VsZWN0ZWQuIFRoaXMgc2hvdWxkIGNsZWFyIHVwIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODkxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6MjQuNTc0MjczNjMyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFxuIDMwMTpcXHRjb25maWcgRFlOQU1JQ19GVFJBQ0VcXG4gMzAyOlxcdFxcdGJvb2xcXG4gMzAzOlxcdFxcdGRlcGVuZHMgb24gRlVOQ1RJT05fVFJBQ0VSXFxuIDMwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG4gMzA1OlxcdFxcdGRlZmF1bHQgeVxcbiAzMDY6XFx0XFx0aGVscFxcbiAzMDc6XFx0XFx0ICBUaGlzIG9wdGlvbiB3aWxsIG1vZGlmeSBhbGwgdGhlIGNhbGxzIHRvIGZ1bmN0aW9uIHRyYWNpbmdcXG4gMzA4OlxcdFxcdCAgZHluYW1pY2FsbHkgKHdpbGwgcGF0Y2ggdGhlbSBvdXQgb2YgdGhlIGJpbmFyeSBpbWFnZSBhbmRcXG4gMzA5OlxcdFxcdCAgcmVwbGFjZSB0aGVtIHdpdGggYSBOby1PcCBpbnN0cnVjdGlvbikgb24gYm9vdCB1cC4gRHVyaW5nXFxuIDMxMDpcXHRcXHQgIGNvbXBpbGUgdGltZSwgYSB0YWJsZSBpcyBtYWRlIG9mIGFsbCB0aGUgbG9jYXRpb25zIHRoYXQgZnRyYWNlXFxuIDMxMTpcXHRcXHQgIGNhbiBmdW5jdGlvbiB0cmFjZSwgYW5kIHRoaXMgdGFibGUgaXMgbGlua2VkIGludG8gdGhlIGtlcm5lbFxcbiAzMTI6XFx0XFx0ICBpbWFnZS4gV2hlbiB0aGlzIGlzIGVuYWJsZWQsIGZ1bmN0aW9ucyBjYW4gYmUgaW5kaXZpZHVhbGx5XFxuIDMxMzpcXHRcXHQgIGVuYWJsZWQsIGFuZCB0aGUgZnVuY3Rpb25zIG5vdCBlbmFibGVkIHdpbGwgbm90IGFmZmVjdFxcbiAzMTQ6XFx0XFx0ICBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtLlxcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHQgIFNlZSB0aGUgZmlsZXMgaW4gL3N5cy9rZXJuZWwvdHJhY2luZzpcXG4gMzE3OlxcdFxcdCAgICBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9uc1xcbiAzMTg6XFx0XFx0ICAgIHNldF9mdHJhY2VfZmlsdGVyXFxuIDMxOTpcXHRcXHQgICAgc2V0X2Z0cmFjZV9ub3RyYWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjI0LjU3NDQ2MTI0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg4MTU3ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFsczpcblxuKipLZXJuZWwgVHJhY2luZyBDb25maWd1cmF0aW9uIC0gQSBRdWljayBNZW50YWwgQ2hlY2tsaXN0KipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHNldHRpbmcgdXAgc29tZSB0cmFjaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBgRlVOQ1RJT05fVFJBQ0VSYCBpcyBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBjb25maWcgb3B0aW9uLiBUaGF0J3MgdXN1YWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1bmN0aW9uLWxldmVsIHRyYWNpbmcuIEknbGwgbmVlZCB0aGF0IGVuYWJsZWQgZm9yIHN1cmUuXG5cbk5vdywgZm9yIHNvbWUgbW9yZSBpbi1kZXB0aCB0cmFjaW5nLCBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGludG8gYEtQUk9CRVNgIHRvby4gSXQncyBvZnRlbiBpbnRlcnR3aW5lZCwgYXMgYEtQUk9CRVNgIHdpbGwgZW5hYmxlIHRoZSBhYmlsaXR5IHRvIGluamVjdCBpbnN0cnVjdGlvbnMuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBrZXJuZWwncyBgYXJjaC9LY29uZmlnYCB0byBjb25maXJtIHRoYXQgYEtQUk9CRVNgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIFRoYXQncyB0aGUgbmV4dCBzdGVwLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyB3aGF0IEknbSB0cnlpbmcgdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjI3LjY2MjYzNzI4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRzZWxlY3QgR0VORVJJQ19TWVNDQUxMXFxuIDExNjpcXHRcXG4gMTE3OlxcdGNvbmZpZyBLUFJPQkVTXFxuIDExODpcXHRcXHRib29sIFxcXCJLcHJvYmVzXFxcIlxcbiAxMTk6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0tQUk9CRVNcXG4gMTIwOlxcdFxcdHNlbGVjdCBLQUxMU1lNU1xcbiAxMjE6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gMTIyOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAxMjM6XFx0XFx0aGVscFxcbiAxMjQ6XFx0XFx0ICBLcHJvYmVzIGFsbG93cyB5b3UgdG8gdHJhcCBhdCBhbG1vc3QgYW55IGtlcm5lbCBhZGRyZXNzIGFuZFxcbiAxMjU6XFx0XFx0ICBleGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24uICByZWdpc3Rlcl9rcHJvYmUoKSBlc3RhYmxpc2hlc1xcbiAxMjY6XFx0XFx0ICBhIHByb2JlcG9pbnQgYW5kIHNwZWNpZmllcyB0aGUgY2FsbGJhY2suICBLcHJvYmVzIGlzIHVzZWZ1bFxcbiAxMjc6XFx0XFx0ICBmb3Iga2VybmVsIGRlYnVnZ2luZywgbm9uLWludHJ1c2l2ZSBpbnN0cnVtZW50YXRpb24gYW5kIHRlc3RpbmcuXFxuIDEyODpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgXFxcIk5cXFwiLlxcbiAxMjk6XFx0XFxuIDEzMDpcXHRjb25maWcgSlVNUF9MQUJFTFxcbiAxMzE6XFx0XFx0Ym9vbCBcXFwiT3B0aW1pemUgdmVyeSB1bmxpa2VseS9saWtlbHkgYnJhbmNoZXNcXFwiXFxuIDEzMjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9KVU1QX0xBQkVMXFxuIDEzMzpcXHRcXHRzZWxlY3QgT0JKVE9PTCBpZiBIQVZFX0pVTVBfTEFCRUxfSEFDS1xcbiAxMzQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDoyNy42NjI3Njk2MTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMjg5MjIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqVHJhY2luZyBDb25maWd1cmF0aW9uIENvbmZ1c2lvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdHJhY2luZyBhZ2Fpbi4gUmlnaHQsIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgS1BST0JFU2AgYXJlIHRoZSBrZXkgY29uZmlncyB0aGF0IGNvbWUgdG8gbWluZC4gQnV0IGhvbGQgb24sIEknbSBqdXN0IGZsYXNoaW5nIG9uIGBGVFJBQ0VgISBEb2Vzbid0IGBGVU5DVElPTl9UUkFDRVJgIGFjdHVhbGx5ICpyZWx5KiBvbiBgRlRSQUNFYD8gVGhhdCByaW5ncyBhIGJlbGwuIFRpbWUgZm9yIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIGNlcnRhaW4uIExldCBtZSBqdXN0IGRpdmUgaW50byBga2VybmVsL3RyYWNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgb2YgYEZVTkNUSU9OX1RSQUNFUmAuIEdvdHRhIG1ha2Ugc3VyZSBteSBtZW50YWwgbW9kZWwgb2YgdGhpcyBzdHVmZiBpcyB1cCB0byBzbnVmZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6MzAuNjk1NjY1ODUxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTkxNTQzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVOQ1RJT05fVFJBQ0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTIyNj1jb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMjM0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjIzNTpjb25maWcgRlVOQ1RJT05fVFJBQ0VSXFxua2VybmVsL3RyYWNlL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBUcmFjZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjMwLjc2NTU4OTg0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQwNDY0Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnRyYWNlIENvbmZpZ3VyYXRpb24gXHUwMDI2IFN5bWJvbCBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIHplcm9lcyBpbiBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEtQUk9CRVNgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBCdXQsIHdoYXQgYWJvdXQgdGhlIHNwZWNpZmljIHN5bWJvbHMgd2UncmUgdGFyZ2V0aW5nPyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRob3NlLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgYF9fZnRyYWNlX21vZGlmeV9jYWxsYC4gVGhhdCdzIHRoZSBjb3JlLiBJdCdzIG1hcmtlZCBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG9mdGVuIG1lYW5zIGl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIGNvbmZpbmVkIHRvIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgSSBrbm93IGl0J3MgKnVzZWQqIGJ5IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIFNvLCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGl0cyBzY29wZSwgSSBuZWVkIHRvIHNlZSBob3cgYW5kIHdoZXJlIHRob3NlIGFyZSBiZWluZyBjYWxsZWQuIFRpbWUgdG8ganVtcCBvdmVyIHRvIGBhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCBvbiB0aGlzIGFyY2hpdGVjdHVyZSBhbmQgdHJhY2UgdGhlaXIgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6MzQuMzA2MDU3MjUyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0I2Vsc2VcXG4gMTE2OlxcdHN0YXRpYyBpbnQgZnRyYWNlX3JlY19zZXRfbm9wX29wcyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKSB7IHJldHVybiAwOyB9XFxuIDExNzpcXHRzdGF0aWMgaW50IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKSB7IHJldHVybiAwOyB9XFxuIDExODpcXHQjZW5kaWZcXG4gMTE5OlxcdFxcbiAxMjA6XFx0aW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiAxMjE6XFx0e1xcbiAxMjI6XFx0XFx0dW5zaWduZWQgbG9uZyBkaXN0YW5jZSwgb3JpZ19hZGRyLCBwYyA9IHJlYy1cXHUwMDNlaXAgLSBNQ09VTlRfQVVJUENfU0laRTtcXG4gMTIzOlxcdFxcdGludCByZXQ7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdHJldCA9IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhyZWMpO1xcbiAxMjY6XFx0XFx0aWYgKHJldClcXG4gMTI3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdG9yaWdfYWRkciA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZmdHJhY2VfY2FsbGVyO1xcbiAxMzA6XFx0XFx0ZGlzdGFuY2UgPSBhZGRyIFxcdTAwM2Ugb3JpZ19hZGRyID8gYWRkciAtIG9yaWdfYWRkciA6IG9yaWdfYWRkciAtIGFkZHI7XFxuIDEzMTpcXHRcXHRpZiAoZGlzdGFuY2UgXFx1MDAzZSBKQUxSX1JBTkdFKVxcbiAxMzI6XFx0XFx0XFx0YWRkciA9IEZUUkFDRV9BRERSO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRyZXR1cm4gX19mdHJhY2VfbW9kaWZ5X2NhbGwocGMsIGFkZHIsIGZhbHNlKTtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0aW50IGZ0cmFjZV9tYWtlX25vcChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gMTM4OlxcdHtcXG4gMTM5OlxcdFxcdHUzMiBub3A0ID0gUklTQ1ZfSU5TTl9OT1A0O1xcbiAxNDA6XFx0XFx0aW50IHJldDtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0cmV0ID0gZnRyYWNlX3JlY19zZXRfbm9wX29wcyhyZWMpO1xcbiAxNDM6XFx0XFx0aWYgKHJldClcXG4gMTQ0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjM0LjMwNjE4MDQ4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYxMTE3NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSBub2QgdG8gdGhlIGZhY3QgdGhhdCBJJ20gd29ya2luZyBhdCBhbiBleHBlcnQgbGV2ZWw6XG5cbioqUGlucG9pbnRpbmcgT3VyIEZvY3VzIGZvciBEZWVwZXIgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBJJ20gemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIGFyZWEuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgIGFyZSBnb2luZyB0byBiZSBrZXkgc3ltYm9scyB0byBkaWcgaW50by4gVGhleSdyZSBsaWtlbHkgd2hlcmUgd2UnbGwgZmluZCB0aGUgY29yZSBtZWNoYW5pc21zLiBOb3csIGxldCdzIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBJdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGFzc2VzcyB3aGF0IGhvb2tzIGFyZSBhbHJlYWR5IGluIHBsYWNlIGFuZCBob3cgd2UgbWF5IGJlIGFibGUgdG8gYXVnbWVudCB0aGVtIGZvciBvdXIgcHVycG9zZXMuIENoZWNraW5nIGZvciB0aGF0IHNwZWNpZmljIHN5bWJvbCByaWdodCBvZmYgdGhlIGJhdCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgb3VyIGFuYWx5c2lzIHdpbGwgbmVlZCB0byBmb2N1cyBvbiBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgZXhpc3RpbmcgY2FsbHMuIEZyb20gaGVyZSwgd2UnbGwgc2VlIHdoZXJlIHRvIGdvIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjM3Ljg2NzMwMDIwNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDIxMTpcXHR9XFxuIDIxMjpcXHQjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovXFxuIDIxMzpcXHRcXG4gMjE0OlxcdCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG4gMjE1OlxcdGludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcXG4gMjE2OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIDIxNzpcXHR7XFxuIDIxODpcXHRcXHR1bnNpZ25lZCBsb25nIGNhbGxlciA9IHJlYy1cXHUwMDNlaXAgLSBNQ09VTlRfQVVJUENfU0laRTtcXG4gMjE5OlxcdFxcdGludCByZXQ7XFxuIDIyMDpcXHRcXG4gMjIxOlxcdFxcdHJldCA9IGZ0cmFjZV9yZWNfdXBkYXRlX29wcyhyZWMpO1xcbiAyMjI6XFx0XFx0aWYgKHJldClcXG4gMjIzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIyNDpcXHRcXG4gMjI1OlxcdFxcdHJldHVybiBfX2Z0cmFjZV9tb2RpZnlfY2FsbChjYWxsZXIsIEZUUkFDRV9BRERSLCB0cnVlKTtcXG4gMjI2OlxcdH1cXG4gMjI3OlxcdCNlbmRpZlxcbiAyMjg6XFx0XFxuIDIyOTpcXHQjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDozNy44NjczNjU2MDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzMDE3NjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEludGVyYWN0aW9uIG9mIEtwcm9iZXMgYW5kIEZ0cmFjZSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuIEJ1dCBob2xkIG9uLCB0aGUgY29yZSBpc3N1ZSBpcyBhYm91dCBob3cga3Byb2JlcyBhbmQgZnRyYWNlIGludGVyYWN0LiBJIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIGJlaGF2aW9yLiBJcyB0aGVyZSBhIHByZWNpc2Ugc2VxdWVuY2Ugb2YgZXZlbnRzPyBNeSBpbml0aWFsIGh1bmNoIGlzIHRoaXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBvcmRlciBvZiBob3cga3Byb2JlcyBhbmQgZnRyYWNlIGFyZSBzZXQgdXAuXG5cbklzIGl0IGEga3Byb2JlIGJlaW5nIHNldCBvbiBhbiBmdHJhY2UgY2FsbCBzaXRlICpiZWZvcmUqIGZ0cmFjZSBpcyBlbmFibGVkPyBPciBpcyBpdCB0aGUgcmV2ZXJzZSDigJMgZnRyYWNlIGVuYWJsZWQsICp0aGVuKiB0aGUga3Byb2JlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IG9yZGVyLiBJIHJlY2FsbCB0aGF0IHRoZSBmdHJhY2UgbW9kaWZpY2F0aW9ucyBoYXBwZW4gd2hlbiBmdHJhY2UgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhhdCBtYWtlcyBgZnRyYWNlX21ha2VfY2FsbGAsIGBmdHJhY2VfbWFrZV9ub3BgLCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgdGhlIGtleSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGFsdGVyaW5nIHRoZSBmdHJhY2UgY2FsbCBzaXRlLlxuXG5Ob3csIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAsIHdoaWNoIGlzLCBhcyBJIHJlY2FsbCwgYSBoZWxwZXIgY2FsbGVkIGJ5IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIEJ1dCB3YWl0LCBgZnRyYWNlX21ha2Vfbm9wYCAqYWxzbyogbW9kaWZpZXMgdGhlIGNhbGwgc2l0ZSwgYnV0IGl0IGdvZXMgZGlyZWN0bHkgdGhyb3VnaCBgcGF0Y2hfdGV4dF9ub3N5bmNgLiBJdCBzZWVtcyB0aGUgbG9naWMgaW4gYGZ0cmFjZV9tYWtlX25vcGAgaXMgZGlmZmVyZW50IGZyb20gdGhlIG90aGVycywgYnlwYXNzaW5nIHRoZSB0YXJnZXRlZCBmdW5jdGlvbi4gVGhpcyBkaWZmZXJlbmNlIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSByb290IGNhdXNlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzUxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6NDIuOTk3NTQ1NzM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTg0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdFxcbiAxNDY6XFx0XFx0aWYgKHBhdGNoX2luc25fd3JpdGUoKHZvaWQgKilyZWMtXFx1MDAzZWlwLCBcXHUwMDI2bm9wNCwgTUNPVU5UX05PUDRfU0laRSkpXFxuIDE0NzpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiAxNDg6XFx0XFxuIDE0OTpcXHRcXHRyZXR1cm4gMDtcXG4gMTUwOlxcdH1cXG4gMTUxOlxcdFxcbiAxNTI6XFx0LypcXG4gMTUzOlxcdCAqIFRoaXMgaXMgY2FsbGVkIGVhcmx5IG9uLCBhbmQgaXNuJ3Qgd3JhcHBlZCBieVxcbiAxNTQ6XFx0ICogZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfe3ByZXBhcmUscG9zdF9wcm9jZXNzfSgpIGFuZCB0aGVyZWZvcmUgZG9lc24ndCBob2xkXFxuIDE1NTpcXHQgKiB0ZXh0X211dGV4LCB3aGljaCB0cmlnZ2VycyBhIGxvY2tkZXAgZmFpbHVyZS4gIFNNUCBpc24ndCBydW5uaW5nIHNvIHdlIGNvdWxkXFxuIDE1NjpcXHQgKiBqdXN0IGRpcmVjdGx5IHBva2UgdGhlIHRleHQsIGJ1dCBpdCdzIHNpbXBsZXIgdG8ganVzdCB0YWtlIHRoZSBsb2NrXFxuIDE1NzpcXHQgKiBvdXJzZWx2ZXMuXFxuIDE1ODpcXHQgKi9cXG4gMTU5OlxcdGludCBmdHJhY2VfaW5pdF9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKVxcbiAxNjA6XFx0e1xcbiAxNjE6XFx0XFx0dW5zaWduZWQgbG9uZyBwYyA9IHJlYy1cXHUwMDNlaXAgLSBNQ09VTlRfQVVJUENfU0laRTtcXG4gMTYyOlxcdFxcdHVuc2lnbmVkIGludCBub3BzWzJdLCBvZmZzZXQ7XFxuIDE2MzpcXHRcXHRpbnQgcmV0O1xcbiAxNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjQyLjk5OTcwODU0NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5NTc5NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIFRyYWNlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgY29yZSBvZiBob3cgdGhpcyB0cmFjaW5nIHN5c3RlbSBpcyBzZXQgdXAuIEZyb20gdGhlIGNvbnRleHQsIGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBzeW1ib2xzIHRvIHdhdGNoLiBUaGVzZSBhcmUgdGhlIHdvcmtob3JzZXMsIGl0IHNlZW1zLiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGRyaXZpbmcgdGhpcyBhcmUgYEZVTkNUSU9OX1RSQUNFUmAgYW5kIGBLUFJPQkVTYC4gSG9sZCBvbiwgSSBzZWUgYSBkZXBlbmRlbmN5IGhlcmXigKYgYERZTkFNSUNfRlRSQUNFYCBpcyAqc2VsZWN0ZWQqIGJ5IGBGVU5DVElPTl9UUkFDRVJgIC0gaW50ZXJlc3RpbmcsIGJ1dCBvbmx5IGlmIGBIQVZFX0RZTkFNSUNfRlRSQUNFYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSEFWRV9EWU5BTUlDX0ZUUkFDRWAgaXMgZGVmaW5lZC4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbGlrZSB0aGlzIGlzIGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0IHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGhhcyB0byBzYXkgb24gdGhlIG1hdHRlci4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZm91bmRhdGlvbiB0aGlzIGNvZGUgaXMgYnVpbHQgdXBvbiBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciB0cmFjaW5nIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6NDYuNDI5MjkxMjI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDgyMzAxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0RZTkFNSUNfRlRSQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMTU4LVxcdHNlbGVjdCBIQVZFX0RNQV9DT05USUdVT1VTIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNTk6XFx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UgaWYgTU1VIFxcdTAwMjZcXHUwMDI2IChDTEFOR19TVVBQT1JUU19EWU5BTUlDX0ZUUkFDRSB8fCBHQ0NfU1VQUE9SVFNfRFlOQU1JQ19GVFJBQ0UpXFxuYXJjaC9yaXNjdi9LY29uZmlnLTE2MC1cXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzRCIGlmIERZTkFNSUNfRlRSQUNFIFxcdTAwMjZcXHUwMDI2IFJJU0NWX0lTQV9DXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE2MTpcXHRzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBpZiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTYyOlxcdHNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFMgaWYgKERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHUyBcXHUwMDI2XFx1MDAyNiAhQ0ZJKVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxNjM6XFx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG5hcmNoL3Jpc2N2L0tjb25maWctMTY0LVxcdHNlbGVjdCBIQVZFX0ZUUkFDRV9HUkFQSF9GVU5DXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE2NTpcXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG5hcmNoL3Jpc2N2L0tjb25maWctMTY2LVxcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZSRUdTXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE2NzpcXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjgtXFx0c2VsZWN0IEhBVkVfRUJQRl9KSVQgaWYgTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUwOjQ2LjUyNDEyMDMwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM4MTkwODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBGdW5jdGlvbiBUcmFjZXIgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB0aGUgYEZVTkNUSU9OX1RSQUNFUmAgaXMgYXZhaWxhYmxlIGZvciBSSVNDLVYsIHdoaWNoIGlzIGZhbnRhc3RpYy4gVGhlIG9idmlvdXMgY29uZmlncyBJIG5lZWQgdG8gZW5hYmxlIGFyZSBgRlVOQ1RJT05fVFJBQ0VSYCBpdHNlbGYsIGFuZCBgS1BST0JFU2AsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgZWxzZSB0aG91Z2guIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IGBmdHJhY2VfbW9kaWZ5X2NhbGxgLCB3aGljaCBtZWFucyBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50LlxuXG5MZXQgbWUgc2VlLi4uIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgc2VsZWN0ZWQgYnkgYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBpdHNlbGYgaXMgc2VsZWN0ZWQgYnkgYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU2AuIEFuZCB0aGF0J3Mgc2VsZWN0ZWQgYnkgYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHUyBcdTAwMjZcdTAwMjYgIUNGSWAuIFRoaXMgZmVlbHMgZmFtaWxpYXIuLi4gYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU2AgaXMgY2hvc2VuIHZpYSBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NgIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IGBIQVZFX0RZTkFNSUNfRlRSQUNFYC4gU28sIGJhc2VkIG9uIHRoYXQgY29uZmlndXJhdGlvbiBjYXNjYWRlLCBpdCBzZWVtcyBsaWtlIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgcHJvYmFibHkgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBGVU5DVElPTl9UUkFDRVJgIGlzIGVuYWJsZWQsIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMuIEJ1dCBJIHNob3VsZG4ndCBqdXN0IGFzc3VtZSBhbnl0aGluZy4gSXQgaXMgYWx3YXlzIGJlc3QgdG8gY2hlY2suIFNvLCBJIHdpbGwgY29uZmlybSB3aGV0aGVyIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgYSBkaXJlY3RseSBjb25maWd1cmFibGUgb3B0aW9uIGZvciB0aGlzIHBsYXRmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1MS4wNjIzMTM4NjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MTkyODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1MS4xNTk1MTcyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg0NjEwMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIER5bmFtaWMgZnRyYWNlIHdpdGggRGlyZWN0IENhbGxzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgZGVmX2Jvb2wgeWAgZm9yIHdoYXRldmVyIHRoaXMgaXMsIGB5YCwgcmVhbGx5IGhpbmdlcyBvbiBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IGNsZWFuZXIsIGRvZXNuJ3QgaXQ/IEl0IGltcGxpZXMgd2UgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGEgbmljZSBzaW1wbGlmaWNhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBieSB3aXRoIGp1c3QgYEZVTkNUSU9OX1RSQUNFUmAgYW5kIGBLUFJPQkVTYC4gTWFrZXMgc2Vuc2UsIGNvbnNpZGVyaW5nIHRoZXkgcHJvdmlkZSB0aGUgdW5kZXJseWluZyBjYXBhYmlsaXRpZXMuIEJ1dCwgYXMgYWx3YXlzLCBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvbmUgbGFzdCB0aW1lLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBGVFJBQ0VgIGlzbid0IGEgaGlkZGVuIHJlcXVpcmVtZW50IHRoYXQgbmVlZHMgdG8gYmUgdG9nZ2xlZCBvbi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1NC44NDQxMjk1NTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTk5NzA0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlRSQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTE5OD1jb25maWcgVFJBQ0lOR19TVVBQT1JUXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MjA0Om1lbnVjb25maWcgRlRSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWctMjA1LVxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz01ODg9Y29uZmlnIEVOQUJMRV9ERUZBVUxUX1RSQUNFUlNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5Ni1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1OTc6Y29uZmlnIEZUUkFDRV9TWVNDQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5OC1cXHRib29sIFxcXCJUcmFjZSBzeXNjYWxsc1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTg2OD1jb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODc2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg3Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXFxua2VybmVsL3RyYWNlL0tjb25maWctODc4LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4MC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODE6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX0NDXFxua2VybmVsL3RyYWNlL0tjb25maWctODgyLVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Ni1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX09CSlRPT0xcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODk0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg5NTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUkVDT1JETUNPVU5UXFxua2VybmVsL3RyYWNlL0tjb25maWctODk2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTEwMjE9Y29uZmlnIFRSQUNFX0VWQUxfTUFQX0ZJTEVcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNDgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA0OTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDUwLVxcdGJvb2wgXFxcIlJlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIGZ1bmN0aW9uIHRyYWNpbmdcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDYyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNjM6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OX1NJWkVcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDY0LVxcdGludCBcXFwiTWF4IG51bWJlciBvZiByZWN1cnNlZCBmdW5jdGlvbnMgdG8gcmVjb3JkXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA3My1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDc0OmNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA3NS1cXHRib29sIFxcXCJWYWxpZGF0ZSBSQ1UgaXMgb24gZHVyaW5nIGZ0cmFjZSBleGVjdXRpb25cXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTAxPWNvbmZpZyBHQ09WX1BST0ZJTEVfRlRSQUNFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTEyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTM6Y29uZmlnIEZUUkFDRV9TRUxGVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTQtXFx0Ym9vbFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTUtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTExNjpjb25maWcgRlRSQUNFX1NUQVJUVVBfVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTctXFx0Ym9vbCBcXFwiUGVyZm9ybSBhIHN0YXJ0dXAgdGVzdCBvbiBmdHJhY2VcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTM2PWNvbmZpZyBFVkVOVF9UUkFDRV9URVNUX1NZU0NBTExTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ3LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExNDg6Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDktICAgICAgIGJvb2wgXFxcIlZlcmlmeSBjb21waWxlIHRpbWUgc29ydGluZyBvZiBmdHJhY2UgZnVuY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1NC45NTQxMzM0M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY1NDY3MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipGVFJBQ0UgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGVuYWJsaW5nIGBGVFJBQ0VgLiBJdCdzIGEgbWVudWNvbmZpZywgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBuZWVkIHRvIGdvIHNwZWx1bmtpbmcgdGhyb3VnaCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRvIGFjdHVhbGx5IHN3aXRjaCBpdCBvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBhbmQgaXQncyBhbG1vc3QgYWx3YXlzIGluIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZm9yIHNvbWV0aGluZyBsaWtlIHRoaXMuIFNvLCBsZXQncyBoZWFkIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGFjdHVhbGx5IGF2YWlsYWJsZSBmb3IgYEZUUkFDRWAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGZpbmUtZ3JhaW5lZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZSBpdHNlbGYuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBiZWZvcmUgYmxpbmRseSBlbmFibGluZyBpdC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gRG9lcyBpdCBuZWVkIGFueSBzcGVjaWFsIGZsYWdzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBJIG1ha2UgdGhpcyBjaGFuZ2U/IExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MDo1OC4xMTk2MDM1NjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHRkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcXG4gMjAxOlxcdFxcdGRlcGVuZHMgb24gU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDIwMjpcXHRcXHRkZWZhdWx0IHlcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0bWVudWNvbmZpZyBGVFJBQ0VcXG4gMjA1OlxcdFxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxcbiAyMDc6XFx0XFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxcbiAyMDg6XFx0XFx0aGVscFxcbiAyMDk6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRpZiBGVFJBQ0VcXG4gMjEyOlxcdFxcbiAyMTM6XFx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcXG4gMjE0OlxcdFxcdGJvb2wgXFxcIkF1dG9tb3VudCB0cmFjZWZzIG9uIGRlYnVnZnMgW0RFUFJFQ0FURURdXFxcIlxcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBUUkFDSU5HXFxuIDIxNjpcXHRcXHRkZWZhdWx0IHlcXG4gMjE3OlxcdFxcdGhlbHBcXG4gMjE4OlxcdFxcdCAgVGhlIHRyYWNpbmcgaW50ZXJmYWNlIHdhcyBtb3ZlZCBmcm9tIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmdcXG4gMjE5OlxcdFxcdCAgdG8gL3N5cy9rZXJuZWwvdHJhY2luZyBpbiAyMDE1LCBidXQgdGhlIHRyYWNpbmcgZmlsZSBzeXN0ZW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTA6NTguMTE5NzU4OTY4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTQ1NzY2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnRyYWNlIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBGVFJBQ0VgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBgREVCVUdfS0VSTkVMYCBpcyBzZXQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIEkgY2FuIHByb2JhYmx5IGp1c3QgZm9jdXMgb24gZXhwbGljaXRseSBkZWZpbmluZyBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBgS1BST0JFU2AgdG8gZ2V0IHdoYXQgSSBuZWVkLiBBaCwgcmlnaHQsIGBGVU5DVElPTl9UUkFDRVJgIGlzIHRoZSBjb3JlIG9uZSBoZXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIGlmIEkgbmVlZCBgRFlOQU1JQ19GVFJBQ0VgIGFzIHdlbGwuXG5cblJpZ2h0LCBgRFlOQU1JQ19GVFJBQ0VgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgIGFyZSBib3RoIHNldC4gR2l2ZW4gdGhhdCwgYW5kIGFzc3VtaW5nIHRoYXQgUklTQy1WIGltcGxlbWVudHMgYEhBVkVfRFlOQU1JQ19GVFJBQ0VgLCB0aGVuIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgS1BST0JFU2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBSSVNDLVYgc3VwcG9ydHMgZHluYW1pYyBmdHJhY2UuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gSSBzaG91bGQgY2hlY2sgYGFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jYCBmb3IgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYC4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBzdGF0aWMgb3IgZXhwb3J0ZWQ/IExldCdzIHZlcmlmeSB0aGF0IHRoZXkgYXJlLCBpbiBmYWN0LCBnbG9iYWwuIE5vdywgbGV0IG1lIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZnRyYWNlX21ha2VfY2FsbGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6MDIuNTE0MzM4NDcyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg2MDUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZnRyYWNlX21ha2VfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xMTc9c3RhdGljIGludCBmdHJhY2VfcmVjX3VwZGF0ZV9vcHMoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykgeyByZXR1cm4gMDsgfVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTE5LVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jOjEyMDppbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTIxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6MDIuNTY2MjA0NDA4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjQyODA1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlIEZ1bmN0aW9ucyBpbiBEeW5hbWljIEZ0cmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYW5kIGl0J3MgY2xlYXIgdGhleSdyZSBnbG9iYWwgaW4gc2NvcGUg4oCTIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWFsbHkgZHJpdmluZyB0aGUgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCBpcyBgZnRyYWNlX21ha2VfY2FsbGAgYW5kIGBmdHJhY2VfbW9kaWZ5X2NhbGxgLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKZJIHNlZSBgZnRyYWNlX21vZGlmeV9jYWxsYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gT2theSwgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kOyBpdCBtaWdodCBub3QgYWx3YXlzIGJlIHByZXNlbnQuXG5cbkxldCBtZSBxdWlja2x5IHNjYW4sIGlzIHRoZXJlIGFueSBvdGhlciBnbG9iYWxseSByZWxldmFudCBmdW5jdGlvbj8gQWgsIHllcywgdGhlcmUncyBgZnRyYWNlX21ha2Vfbm9wYC4gT2theSwgc28gbGV0J3MgaW5jbHVkZSB0aGVzZSB0aHJlZTogYGZ0cmFjZV9tYWtlX2NhbGxgLCBgZnRyYWNlX21vZGlmeV9jYWxsYCwgYW5kIGBmdHJhY2VfbWFrZV9ub3BgLlxuXG5Ob3csIHRoZSBwYXRjaCBpcyBtYWtpbmcgY2hhbmdlcyB0byBgX19mdHJhY2VfbW9kaWZ5X2NhbGxgLiBUaGF0J3MgaW1wb3J0YW50LiBJIHNlZSBub3cgdGhhdCBgX19mdHJhY2VfbW9kaWZ5X2NhbGxgIGlzICpjYWxsZWQgYnkqIGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAuIFNvLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBmdHJhY2VfbWFrZV9jYWxsYCBhbmQgYGZ0cmFjZV9tb2RpZnlfY2FsbGAgYXJlIHJlYWxseSB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBoZXJlLiBUaGV5J3JlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBmdW5uZWwgaW50byB0aGUgY29yZSBtb2RpZmljYXRpb24gbG9naWMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgLSBpcyB0aGVyZSBhbnkgb3RoZXIgY2FsbGVyIG9mIGBfX2Z0cmFjZV9tb2RpZnlfY2FsbGAgb3V0c2lkZSBvZiB0aGUgdHdvIGZ1bmN0aW9ucyBhbHJlYWR5IGlkZW50aWZpZWQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE4OjUxOjA3LjQ5MDQ4NzY1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc5MDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Z0cmFjZV9tb2RpZnlfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz00Mz12b2lkIGFyY2hfZnRyYWNlX3VwZGF0ZV9jb2RlKGludCBjb21tYW5kKVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtNDktXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6NTA6c3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbCh1bnNpZ25lZCBsb25nIHNvdXJjZSwgdW5zaWduZWQgbG9uZyB0YXJnZXQsIGJvb2wgdmFsaWRhdGUpXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtNTEte1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM9MTIwPWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jLTEzMy1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoxMzQ6XFx0cmV0dXJuIF9fZnRyYWNlX21vZGlmeV9jYWxsKHBjLCBhZGRyLCBmYWxzZSk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTM1LX1cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2Z0cmFjZS5jPTIxNT1pbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMjQtXFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MjI1OlxcdHJldHVybiBfX2Z0cmFjZV9tb2RpZnlfY2FsbChjYWxsZXIsIEZUUkFDRV9BRERSLCB0cnVlKTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0yMjYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxODo1MTowNy41NTUyODIyODZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NTIwNTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEZ0cmFjZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBob3cgYGZ0cmFjZV9tYWtlX2NhbGxgIGFuZCBgZnRyYWNlX21vZGlmeV9jYWxsYCBhcmUgaW50ZXJhY3RpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgc28gSSdsbCBiZSBmb2N1c2luZyBteSBhdHRlbnRpb24gdGhlcmUuIFRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBgRlRSQUNFYCwgYEZVTkNUSU9OX1RSQUNFUmAsIGFuZCBgS1BST0JFU2AsIGluc3RhbnRseSB0ZWxsIG1lIHRoaXMgaXMgYSB0cmFjaW5nLXJlbGF0ZWQgYnVnIGludm9sdmluZyBrZXJuZWwgcHJvYmVzLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBmdW5jdGlvbmFsIGRlZmVjdC4gSXQncyBhYm91dCBmaXhpbmcgdGhlIG1vZGlmaWNhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgUklTQy1WIGZ0cmFjZSBjb2RlIHdoZW4gYSBrcHJvYmUgaXMgcGxhY2VkIG9uIHRoZSBcImF1aXBjXCIgaW5zdHJ1Y3Rpb24gYXQgdGhlIGZ0cmFjZSBjYWxsIHNpdGUuIFRoaXMgbWVhbnMgaXQgaXMgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBjb3JlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBpdHMgYWJpbGl0eSB0byBjb3JyZWN0bHkgbW9kaWZ5IGNvZGUgZHVyaW5nIGtwcm9iZSBpbnNlcnRpb24uIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IHRyYWNpbmcgZnVuY3Rpb25zLiBHaXZlbiB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgZml4IHdpdGhpbiB0aGlzIHNwZWNpZmljIGFyY2hpdGVjdHVyZSwgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgYSBwYXRjaCB0aGF0J3Mgd29ydGggZnV6emluZyB0byBndWFyYW50ZWUgaXRzIGNvcnJlY3QgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIwNywiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTg6NTE6MTIuMTQwNDkwMjA4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDU4NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiS1BST0JFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ0cmFjZV9tYWtlX2NhbGxcIixcbiAgICBcImZ0cmFjZV9tb2RpZnlfY2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFJJU0MtViBmdHJhY2UgY29kZSBtb2RpZmljYXRpb24gd2hlbiBhIGtwcm9iZSBpcyBwbGFjZWQgb24gdGhlIGF1aXBjIGluc3RydWN0aW9uIG9mIHRoZSBmdHJhY2UgY2FsbCBzaXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW5hYmxpbmcgZnRyYWNlIGFuZCBrcHJvYmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRlVOQ1RJT05fVFJBQ0VSXCIsXG4gICAgXCJLUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnRyYWNlX21ha2VfY2FsbFwiLFxuICAgIFwiZnRyYWNlX21vZGlmeV9jYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gUklTQy1WIGZ0cmFjZSBjb2RlIG1vZGlmaWNhdGlvbiB3aGVuIGEga3Byb2JlIGlzIHBsYWNlZCBvbiB0aGUgYXVpcGMgaW5zdHJ1Y3Rpb24gb2YgdGhlIGZ0cmFjZSBjYWxsIHNpdGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbmFibGluZyBmdHJhY2UgYW5kIGtwcm9iZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rh6g[1] Phase: Succeeded StartedAt: 2026-08-02 18:51:24 +0000 UTC FinishedAt: 2026-08-02 18:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 18:51:24 +0000 UTC FinishedAt: 2026-08-02 18:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2] Phase: Succeeded StartedAt: 2026-08-02 18:51:24 +0000 UTC FinishedAt: 2026-08-02 19:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 18:51:24 +0000 UTC FinishedAt: 2026-08-02 19:59:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","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-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 18:51:24 +0000 UTC FinishedAt: 2026-08-02 18:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 18:51:24 +0000 UTC FinishedAt: 2026-08-02 18:51:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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-workflow8rh6g/series-workflow8rh6g-convert-artifact-1115377683/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 18:51:55 +0000 UTC FinishedAt: 2026-08-02 19:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 18:51:55 +0000 UTC FinishedAt: 2026-08-02 19:18:37 +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:*d6ddd03b-a9f3-46ab-b953-87ce9710144b,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-workflow8rh6g/series-workflow8rh6g-convert-artifact-1115377683/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": "bcd799f3-05b5-4ac0-9528-ee99626e136a", "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-workflow8rh6g/series-workflow8rh6g-build-action-265252161/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 18:51:55 +0000 UTC FinishedAt: 2026-08-02 19:18:27 +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:*d6ddd03b-a9f3-46ab-b953-87ce9710144b,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-workflow8rh6g/series-workflow8rh6g-convert-artifact-1115377683/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": "bcd799f3-05b5-4ac0-9528-ee99626e136a", "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-workflow8rh6g/series-workflow8rh6g-build-action-265252161/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 19:18:37 +0000 UTC FinishedAt: 2026-08-02 19:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 19:18:37 +0000 UTC FinishedAt: 2026-08-02 19:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 19:18:37 +0000 UTC FinishedAt: 2026-08-02 19:19:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 19:18:37 +0000 UTC FinishedAt: 2026-08-02 19:18:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","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-workflow8rh6g/series-workflow8rh6g-convert-artifact-634934026/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 19:19:03 +0000 UTC FinishedAt: 2026-08-02 19:20:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 19:19:03 +0000 UTC FinishedAt: 2026-08-02 19:20:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bcd799f3-05b5-4ac0-9528-ee99626e136a,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-workflow8rh6g/series-workflow8rh6g-build-action-265252161/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-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 19:20:53 +0000 UTC FinishedAt: 2026-08-02 19:20:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 19:20:53 +0000 UTC FinishedAt: 2026-08-02 19:20:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 19:20:53 +0000 UTC FinishedAt: 2026-08-02 19:54:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 19:20:53 +0000 UTC FinishedAt: 2026-08-02 19:54:24 +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:*d6ddd03b-a9f3-46ab-b953-87ce9710144b,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-workflow8rh6g/series-workflow8rh6g-convert-artifact-634934026/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": "9588bfb6-d412-4ffc-9381-7b275c38c4d5", "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-workflow8rh6g/series-workflow8rh6g-build-action-823628078/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 19:20:53 +0000 UTC FinishedAt: 2026-08-02 19:54:00 +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:*d6ddd03b-a9f3-46ab-b953-87ce9710144b,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-workflow8rh6g/series-workflow8rh6g-convert-artifact-634934026/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": "9588bfb6-d412-4ffc-9381-7b275c38c4d5", "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-workflow8rh6g/series-workflow8rh6g-build-action-823628078/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 19:54:24 +0000 UTC FinishedAt: 2026-08-02 19:54:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 19:54:24 +0000 UTC FinishedAt: 2026-08-02 19:54:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 19:54:24 +0000 UTC FinishedAt: 2026-08-02 19:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 19:54:24 +0000 UTC FinishedAt: 2026-08-02 19:56:12 +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:*9588bfb6-d412-4ffc-9381-7b275c38c4d5,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-workflow8rh6g/series-workflow8rh6g-build-action-823628078/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-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 19:56:23 +0000 UTC FinishedAt: 2026-08-02 19:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 19:56:23 +0000 UTC FinishedAt: 2026-08-02 19:59:24 +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":["ftrace_make_call","ftrace_modify_call"],"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:*bcd799f3-05b5-4ac0-9528-ee99626e136a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9588bfb6-d412-4ffc-9381-7b275c38c4d5,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-workflow8rh6g/series-workflow8rh6g-build-action-265252161/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-workflow8rh6g/series-workflow8rh6g-build-action-823628078/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 19:56:23 +0000 UTC FinishedAt: 2026-08-02 19:56:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 19:56:23 +0000 UTC FinishedAt: 2026-08-02 19:56:32 +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":["ftrace_make_call","ftrace_modify_call"],"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-workflow8rh6g/series-workflow8rh6g-convert-artifact-4209125023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 19:56:23 +0000 UTC FinishedAt: 2026-08-02 19:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 19:56:23 +0000 UTC FinishedAt: 2026-08-02 19:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 19:56:23 +0000 UTC FinishedAt: 2026-08-02 19:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 19:56:45 +0000 UTC FinishedAt: 2026-08-02 19:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rh6g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"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":["ftrace_make_call","ftrace_modify_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28e911d61d66b92a3bded8b54622ed3cd2795bf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","KPROBES"],"series_id":"840633cf-38c1-4d0a-849f-bcbd4425843d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 19:56:45 +0000 UTC FinishedAt: 2026-08-02 19:59:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bcd799f3-05b5-4ac0-9528-ee99626e136a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9588bfb6-d412-4ffc-9381-7b275c38c4d5,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-workflow8rh6g/series-workflow8rh6g-build-action-265252161/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-workflow8rh6g/series-workflow8rh6g-build-action-823628078/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-workflow8rh6g/series-workflow8rh6g-convert-artifact-4209125023/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,}