Name: series-workflowd2sw4 Phase: Succeeded StartedAt: 2026-07-23 00:56:32 +0000 UTC FinishedAt: 2026-07-23 05:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[0] Phase: Succeeded StartedAt: 2026-07-23 00:56:32 +0000 UTC FinishedAt: 2026-07-23 01:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 00:56:32 +0000 UTC FinishedAt: 2026-07-23 01:17:56 +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": "87267b89459813cb50ab5377e076b639c07b4491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "87267b89459813cb50ab5377e076b639c07b4491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "4c8e9341-f04f-425f-92de-c71097a64fae" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "array_map_mmap_fault", "bpf_map_mmap_fault", "array_map_mmap" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJyYXlfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2FycmF5X21hcF9tbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcyBtYXBwZWQgdG8gdXNlciBzcGFjZS4gSXQgbW9kaWZpZXMgYGFycmF5X21hcF9tbWFwYCB0byBub3QgZWFnZXJseSBtYXAgdGhlIG1lbW9yeSBhbmQgYWRkcyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYnBmX21hcF9tbWFwX2ZhdWx0YCB0byBoYW5kbGUgcGFnZSBmYXVsdHMgb24gZGVtYW5kLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBieSBjcmVhdGluZyBhbmQgbW1hcC1pbmcgYSBCUEYgYXJyYXkgbWFwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDRhOGI2ZmRmZWNkN2YzMTEyNjc1Zjc2ZjhlODUyMGVmOWI2OTA0OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDAxOjE2OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCBlMDY2ZjQ0YTljMDU4MC4uYjUzNmYzYzllMTAzNmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTQ1LDYgJiM0MzsxNDUsNyBAQCBzdHJ1Y3QgYnBmX21hcF9vcHMge1xuIFx0aW50ICgqbWFwX2RpcmVjdF92YWx1ZV9tZXRhKShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgICB1NjQgaW1tLCB1MzIgKm9mZik7XG4gXHRpbnQgKCptYXBfbW1hcCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuJiM0MztcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9mYXVsdCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xuIFx0X19wb2xsX3QgKCptYXBfcG9sbCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cyk7XG4gXHR1bnNpZ25lZCBsb25nICgqbWFwX2dldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbmluZGV4IDI0OGI0ODE4MTc4Y2QxLi4xNzExYmU1ODI5MDdkYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcnJheW1hcC5jXG5AQCAtNTc2LDcgJiM0Mzs1NzYsNiBAQCBzdGF0aWMgaW50IGFycmF5X21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcbi1cdHBnb2ZmX3QgcGdvZmYgPSBQQUdFX0FMSUdOKHNpemVvZigqYXJyYXkpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdGlmICghKG1hcC1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNTg1LDggJiM0Mzs1ODQsNDIgQEAgc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdCAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktXHUwMDNlbWFwLm1heF9lbnRyaWVzICogYXJyYXktXHUwMDNlZWxlbV9zaXplKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpLFxuLVx0XHRcdFx0ICAgdm1hLVx1MDAzZXZtX3Bnb2ZmICYjNDM7IHBnb2ZmKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJiMzOTtlZCB1cCBmcm9udCwgc28gaW5zdGVhZCBvZiB3aXJpbmcgdXBcbiYjNDM7XHQgKiBldmVyeSBQVEUgaGVyZSB3ZSBsZXQgYXJyYXlfbWFwX21tYXBfZmF1bHQoKSBpbnNlcnQgcGFnZXMgb24gZGVtYW5kLlxuJiM0MztcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIHVzZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGZvciB1czsga2VlcFxuJiM0MztcdCAqIHRoZW0gdG8gcHJlc2VydmUgYmVoYXZpb3IgKG5vIFZNQSBleHBhbnNpb24sIGV4Y2x1ZGVkIGZyb20gY29yZWR1bXApLlxuJiM0MztcdCAqL1xuJiM0MztcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcbiYjNDM7XHRwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0dm9pZCAqa2FkZHI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogdm1mLVx1MDAzZXBnb2ZmIGlzIHRoZSBwYWdlIG9mZnNldCB3aXRoaW4gdGhlIG1hcHBpbmcgKHZtYS1cdTAwM2V2bV9wZ29mZiBwbHVzXG4mIzQzO1x0ICogdGhlIG9mZnNldCBvZiB0aGUgZmF1bHRpbmcgYWRkcmVzcykuIFRoZSBkYXRhIHBhZ2VzIHN0YXJ0IGFmdGVyIHRoZVxuJiM0MztcdCAqIGJwZl9hcnJheSBoZWFkZXIsIGhlbmNlIHRoZSBleHRyYSBwZ29mZi4gVGhpcyBtaXJyb3JzIHRoZSBvZmZzZXQgdGhhdFxuJiM0MztcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2Uodm1hLCAuLi4sIHZtYS1cdTAwM2V2bV9wZ29mZiAmIzQzOyBwZ29mZikgdXNlZCB0byBhcHBseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrYWRkciA9IGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpICYjNDM7XG4mIzQzO1x0XHQoKHU2NCkodm1mLVx1MDAzZXBnb2ZmICYjNDM7IHBnb2ZmKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1xuJiM0MztcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2Uoa2FkZHIpO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1xuJiM0MztcdGdldF9wYWdlKHBhZ2UpO1xuJiM0MztcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIGFycmF5X21hcF9tZXRhX2VxdWFsKGNvbnN0IHN0cnVjdCBicGZfbWFwICptZXRhMCxcbkBAIC04MTIsNiAmIzQzOzg0NSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuIFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbiBcdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXG4gXHQubWFwX21tYXAgPSBhcnJheV9tYXBfbW1hcCxcbiYjNDM7XHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcbiBcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLFxuIFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxuIFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggMGZmOWUzYWEyOTNkNTcuLmZiMGUxZjU1YzQ4NzNkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMTA3Nyw5ICYjNDM7MTA3NywyNiBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVkIGZvciBtYXBzIHRoYXQgcG9wdWxhdGUgdGhlaXIgbWVtb3J5LW1hcHBlZCByZWdpb24gbGF6aWx5LCBpLmUuIHRoYXRcbiYjNDM7ICogcmV0dXJuIHdpdGhvdXQgd2lyaW5nIHVwIGFueSBQVEVzIGZyb20gdGhlaXIgLVx1MDAzZW1hcF9tbWFwIGNhbGxiYWNrLiBNYXBzIHRoYXRcbiYjNDM7ICogcG9wdWxhdGUgdGhlIHdob2xlIFZNQSBlYWdlcmx5IChlLmcuIHZpYSByZW1hcF92bWFsbG9jX3JhbmdlKCkpIG5ldmVyIHJlYWNoXG4mIzQzOyAqIGhlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9mYXVsdClcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9tbWFwX2ZhdWx0KG1hcCwgdm1mKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcbiBcdC5vcGVuXHRcdD0gYnBmX21hcF9tbWFwX29wZW4sXG4gXHQuY2xvc2VcdFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXG4mIzQzO1x0LmZhdWx0XHRcdD0gYnBmX21hcF9tbWFwX2ZhdWx0LFxuIH07XG4gXG4gc3RhdGljIGludCBicGZfbWFwX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggNTVkMzk0NDM4NzA1YTYuLmI2NTkzZmIxMTM1YjI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC0xMDAzLDYgJiM0MzsxMDAzLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9ub3AubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFxcXG4mIzQzO1x0XHQgJChPVVRQVVQpL2JlbmNoX2FycmF5bWFwX21tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvdXNkdF8yLm8gXFxcbiBcdFx0ICNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkMy4uMTkyZDVmY2I3YTc0OGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yODcsNiAmIzQzOzI4Nyw3IEBAIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9jcnlwdG9fYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfc29ja21hcF9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9scG1fdHJpZV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfeGRwX2xiX2FyZ3A7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9hcnJheW1hcF9tbWFwX2FyZ3A7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHtcbiBcdHsgXHUwMDI2YmVuY2hfcmluZ2J1ZnNfYXJncCwgMCwgXCYjMzQ7UmluZyBidWZmZXJzIGJlbmNobWFya1wmIzM0OywgMCB9LFxuQEAgLTMwNCw2ICYjNDM7MzA1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHtcbiBcdHsgXHUwMDI2YmVuY2hfc29ja21hcF9hcmdwLCAwLCBcJiMzNDticGYgc29ja21hcCBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3AsIDAsIFwmIzM0O0xQTSB0cmllIG1hcCBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfeGRwX2xiX2FyZ3AsIDAsIFwmIzM0O1hEUCBsb2FkLWJhbGFuY2VyIGJlbmNobWFya1wmIzM0OywgMCB9LFxuJiM0MztcdHsgXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLCAwLCBcJiMzNDthcnJheW1hcC1tbWFwIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0e30sXG4gfTtcbiBcbkBAIC01ODIsNiAmIzQzOzU4NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9ub3A7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYXJyYXltYXBfbW1hcDtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2NvdW50X2dsb2JhbCxcbkBAIC02NjUsNiAmIzQzOzY2OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfbHBtX3RyaWVfZnJlZSxcbiBcdFx1MDAyNmJlbmNoX2JwZl9ub3AsXG4gXHRcdTAwMjZiZW5jaF94ZHBfbGIsXG4mIzQzO1x0XHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcCxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2FycmF5bWFwX21tYXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNTZkODBhODVjZjAxZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmNcbkBAIC0wLDAgJiM0MzsxLDE0NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YmVuY2guaFwmIzM0O1xuJiM0MztcbiYjNDM7LyogQmVuY2htYXJrIG1tYXAoKS9tdW5tYXAoKSBvZiBhbiBtbWFwLWFibGUgQlBGIGFycmF5IG1hcCBmcm9tIE4gdGhyZWFkcy4gKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbiYjNDM7XHRpbnQgbWFwX2ZkO1xuJiM0MztcdHNpemVfdCBtbWFwX3N6O1xuJiM0Mzt9IGN0eDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qge1xuJiM0MztcdF9fdTMyIG5yX3RocmVhZHM7XG4mIzQzO1x0X191NjQgbWFwX3NpemU7XG4mIzQzO30gYXJncyA9IHtcbiYjNDM7XHQubnJfdGhyZWFkcyA9IDE2LFxuJiM0MztcdC5tYXBfc2l6ZSA9IDggKiAxMDI0ICogMTAyNCwgLyogOCBNaUIgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdEFSR19OUl9USFJFQURTID0gNTAwMCxcbiYjNDM7XHRBUkdfTUFQX1NJWkUgPSA1MDAxLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4mIzQzO1x0eyBcJiMzNDtuci10aHJlYWRzXCYjMzQ7LCBBUkdfTlJfVEhSRUFEUywgXCYjMzQ7TlJfVEhSRUFEU1wmIzM0OywgMCxcbiYjNDM7XHRcdFwmIzM0O051bWJlciBvZiB0aHJlYWRzIHRoYXQgbW1hcC9tdW5tYXAgdGhlIG1hcCAoZGVmYXVsdCAxNilcJiMzNDsgfSxcbiYjNDM7XHR7IFwmIzM0O21hcC1zaXplXCYjMzQ7LCBBUkdfTUFQX1NJWkUsIFwmIzM0O0JZVEVTXCYjMzQ7LCAwLFxuJiM0MztcdFx0XCYjMzQ7U2l6ZSBvZiB0aGUgQlBGIGFycmF5IG1hcCBpbiBieXRlcyAoZGVmYXVsdCA4Mzg4NjA4KVwmIzM0OyB9LFxuJiM0MztcdHt9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGVycm9yX3QgcGFyc2VfYXJnKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChrZXkpIHtcbiYjNDM7XHRjYXNlIEFSR19OUl9USFJFQURTOlxuJiM0MztcdFx0YXJncy5ucl90aHJlYWRzID0gc3RydG91bChhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0aWYgKGFyZ3MubnJfdGhyZWFkcyA9PSAwKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIG5yLXRocmVhZHM6ICVzXFxuXCYjMzQ7LCBhcmcpO1xuJiM0MztcdFx0XHRhcmdwX3VzYWdlKHN0YXRlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQVJHX01BUF9TSVpFOlxuJiM0MztcdFx0YXJncy5tYXBfc2l6ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRpZiAoYXJncy5tYXBfc2l6ZSA9PSAwKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIG1hcC1zaXplOiAlc1xcblwmIzM0OywgYXJnKTtcbiYjNDM7XHRcdFx0YXJncF91c2FnZShzdGF0ZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXG4mIzQzO2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2FycmF5bWFwX21tYXBfYXJncCA9IHtcbiYjNDM7XHQub3B0aW9ucyA9IG9wdHMsXG4mIzQzO1x0LnBhcnNlciA9IHBhcnNlX2FyZyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZhbGlkYXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7YmVuY2htYXJrIGRvZXNuJiMzOTt0IHN1cHBvcnQgY29uc3VtZXIhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBudW1iZXIgb2Ygd29ya2VyIHRocmVhZHMgaXMgY29udHJvbGxlZCBieSAtLW5yLXRocmVhZHMgYW5kXG4mIzQzO1x0ICogZHJpdmVzIHRoZSBmcmFtZXdvcmsmIzM5O3MgcHJvZHVjZXIgbWFjaGluZXJ5LCBzbyBwZXItcHJvZHVjZXIgc3RhdHNcbiYjNDM7XHQgKiBhcmUgcmVwb3J0ZWQgY29ycmVjdGx5LlxuJiM0MztcdCAqL1xuJiM0MztcdGVudi5wcm9kdWNlcl9jbnQgPSBhcmdzLm5yX3RocmVhZHM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIGhpdHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpXG4mIzQzO3tcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0dm9pZCAqYWRkcjtcbiYjNDM7XG4mIzQzO1x0XHRhZGRyID0gbW1hcChOVUxMLCBjdHgubW1hcF9zeiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICAgIE1BUF9TSEFSRUQsIGN0eC5tYXBfZmQsIDApO1xuJiM0MztcdFx0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bW1hcCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCAtZXJybm8pO1xuJiM0MztcdFx0XHRleGl0KDEpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKG11bm1hcChhZGRyLCBjdHgubW1hcF9zeikpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O211bm1hcCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCAtZXJybm8pO1xuJiM0MztcdFx0XHRleGl0KDEpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YXRvbWljX2luYyhcdTAwMjZoaXRzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbiYjNDM7e1xuJiM0MztcdHJlcy1cdTAwM2VoaXRzID0gYXRvbWljX3N3YXAoXHUwMDI2aGl0cywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzLCAubWFwX2ZsYWdzID0gQlBGX0ZfTU1BUEFCTEUpO1xuJiM0MztcdGxvbmcgcGFnZV9zeiA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcbiYjNDM7XHRfX3UzMiB2YWx1ZV9zaXplID0gc2l6ZW9mKF9fdTY0KTtcbiYjNDM7XHRfX3UzMiBtYXhfZW50cmllcztcbiYjNDM7XG4mIzQzO1x0c2V0dXBfbGliYnBmKCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbW1hcC1hYmxlIGFycmF5IG1hcHMgcm91bmQgdGhlIHZhbHVlIHNpemUgdXAgdG8gOCBieXRlcyBhbmQgZXhwb3NlXG4mIzQzO1x0ICogUEFHRV9BTElHTihtYXhfZW50cmllcyAqIGVsZW1fc2l6ZSkgYnl0ZXMgdG8gdXNlciBzcGFjZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtYXhfZW50cmllcyA9IChhcmdzLm1hcF9zaXplICYjNDM7IHZhbHVlX3NpemUgLSAxKSAvIHZhbHVlX3NpemU7XG4mIzQzO1x0Y3R4Lm1tYXBfc3ogPSAoKF9fdTY0KW1heF9lbnRyaWVzICogdmFsdWVfc2l6ZSAmIzQzOyBwYWdlX3N6IC0gMSkgXHUwMDI2XG4mIzQzO1x0XHQgICAgICB+KHBhZ2Vfc3ogLSAxKTtcbiYjNDM7XG4mIzQzO1x0Y3R4Lm1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWSwgXCYjMzQ7bW1hcF9hcnJheVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgc2l6ZW9mKF9fdTMyKSwgdmFsdWVfc2l6ZSwgbWF4X2VudHJpZXMsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmIChjdHgubWFwX2ZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBtYXA6ICVkXFxuXCYjMzQ7LCAtZXJybm8pO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDthcnJheSBtYXA6ICV1IGVudHJpZXMsIG1tYXAgc2l6ZSAlenUgYnl0ZXMsICV1IHRocmVhZHNcXG5cJiMzNDssXG4mIzQzO1x0ICAgICAgIG1heF9lbnRyaWVzLCBjdHgubW1hcF9zeiwgYXJncy5ucl90aHJlYWRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2FycmF5bWFwX21tYXAgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDthcnJheW1hcC1tbWFwXCYjMzQ7LFxuJiM0MztcdC5hcmdwID0gXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLFxuJiM0MztcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuJiM0MztcdC5zZXR1cCA9IHNldHVwLFxuJiM0MztcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcbiYjNDM7XHQubWVhc3VyZSA9IG1lYXN1cmUsXG4mIzQzO1x0LnJlcG9ydF9wcm9ncmVzcyA9IG9wc19yZXBvcnRfcHJvZ3Jlc3MsXG4mIzQzO1x0LnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2VmZDQ0MWNkNjUzYTJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2hcbkBAIC0wLDAgJiM0MzsxLDE1IEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzO3NvdXJjZSAuL2JlbmNocy9ydW5fY29tbW9uLnNoXG4mIzQzO1xuJiM0MztzZXQgLWV1Zm8gcGlwZWZhaWxcbiYjNDM7XG4mIzQzO2ZvciB0IGluIDEgNCA4IDE2OyBkb1xuJiM0Mztmb3IgcyBpbiAxMDQ4NTc2IDgzODg2MDggNjcxMDg4NjQ7IGRvXG4mIzQzO3N1YnRpdGxlIFwmIzM0O25yX3RocmVhZHM6ICR0LCBtYXBfc2l6ZTogJHNcJiMzNDtcbiYjNDM7XHRzdW1tYXJpemVfb3BzIFwmIzM0O2FycmF5bWFwLW1tYXA6IFwmIzM0OyBcXFxuJiM0MztcdCAgICBcJiMzNDskKCRSVU5fQkVOQ0ggLS1uci10aHJlYWRzICR0IC0tbWFwLXNpemUgJHMgYXJyYXltYXAtbW1hcClcJiMzNDtcbiYjNDM7XHRwcmludGYgXCYjMzQ7XFxuXCYjMzQ7XG4mIzQzO2RvbmVcbiYjNDM7ZG9uZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FycmF5X21hcF9tbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgcGFnZSBmYXVsdGluZyBmb3IgQlBGIGFycmF5IG1hcHMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gbm90IGVhZ2VybHkgbWFwIHRoZSBtZW1vcnkgYW5kIGFkZHMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGJwZl9tYXBfbW1hcF9mYXVsdGAgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzIG9uIGRlbWFuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgY3JlYXRpbmcgYW5kIG1tYXAtaW5nIGEgQlBGIGFycmF5IG1hcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRhOGI2ZmRmZWNkN2YzMTEyNjc1Zjc2ZjhlODUyMGVmOWI2OTA0OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDAxOjE2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggZTA2NmY0NGE5YzA1ODAuLmI1MzZmM2M5ZTEwMzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTE0NSw2ICYjNDM7MTQ1LDcgQEAgc3RydWN0IGJwZl9tYXBfb3BzIHsKIAlpbnQgKCptYXBfZGlyZWN0X3ZhbHVlX21ldGEpKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJICAgICB1NjQgaW1tLCB1MzIgKm9mZik7CiAJaW50ICgqbWFwX21tYXApKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKJiM0MzsJdm1fZmF1bHRfdCAoKm1hcF9tbWFwX2ZhdWx0KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CiAJX19wb2xsX3QgKCptYXBfcG9sbCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKTsKIAl1bnNpZ25lZCBsb25nICgqbWFwX2dldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuYwppbmRleCAyNDhiNDgxODE3OGNkMS4uMTcxMWJlNTgyOTA3ZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYXJyYXltYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmMKQEAgLTU3Niw3ICYjNDM7NTc2LDYgQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsCiBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTsKLQlwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWlmICghKG1hcC0mZ3Q7bWFwX2ZsYWdzICZhbXA7IEJQRl9GX01NQVBBQkxFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01ODUsOCAmIzQzOzU4NCw0MiBAQCBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogCSAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktJmd0O21hcC5tYXhfZW50cmllcyAqIGFycmF5LSZndDtlbGVtX3NpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgYXJyYXlfbWFwX3ZtYWxsb2NfYWRkcihhcnJheSksCi0JCQkJICAgdm1hLSZndDt2bV9wZ29mZiAmIzQzOyBwZ29mZik7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJiMzOTtlZCB1cCBmcm9udCwgc28gaW5zdGVhZCBvZiB3aXJpbmcgdXAKJiM0MzsJICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IGFycmF5X21hcF9tbWFwX2ZhdWx0KCkgaW5zZXJ0IHBhZ2VzIG9uIGRlbWFuZC4KJiM0MzsJICogcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKCkgdXNlZCB0byBzZXQgdGhlc2UgZmxhZ3MgZm9yIHVzOyBrZWVwCiYjNDM7CSAqIHRoZW0gdG8gcHJlc2VydmUgYmVoYXZpb3IgKG5vIFZNQSBleHBhbnNpb24sIGV4Y2x1ZGVkIGZyb20gY29yZWR1bXApLgomIzQzOwkgKi8KJiM0MzsJdm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2bV9mYXVsdF90IGFycmF5X21hcF9tbWFwX2ZhdWx0KHN0cnVjdCBicGZfbWFwICptYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTsKJiM0MzsJcGdvZmZfdCBwZ29mZiA9IFBBR0VfQUxJR04oc2l6ZW9mKCphcnJheSkpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwl2b2lkICprYWRkcjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogdm1mLSZndDtwZ29mZiBpcyB0aGUgcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBtYXBwaW5nICh2bWEtJmd0O3ZtX3Bnb2ZmIHBsdXMKJiM0MzsJICogdGhlIG9mZnNldCBvZiB0aGUgZmF1bHRpbmcgYWRkcmVzcykuIFRoZSBkYXRhIHBhZ2VzIHN0YXJ0IGFmdGVyIHRoZQomIzQzOwkgKiBicGZfYXJyYXkgaGVhZGVyLCBoZW5jZSB0aGUgZXh0cmEgcGdvZmYuIFRoaXMgbWlycm9ycyB0aGUgb2Zmc2V0IHRoYXQKJiM0MzsJICogcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIC4uLiwgdm1hLSZndDt2bV9wZ29mZiAmIzQzOyBwZ29mZikgdXNlZCB0byBhcHBseS4KJiM0MzsJICovCiYjNDM7CWthZGRyID0gYXJyYXlfbWFwX3ZtYWxsb2NfYWRkcihhcnJheSkgJiM0MzsKJiM0MzsJCSgodTY0KSh2bWYtJmd0O3Bnb2ZmICYjNDM7IHBnb2ZmKSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKJiM0MzsKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShrYWRkcik7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CiYjNDM7CWdldF9wYWdlKHBhZ2UpOwomIzQzOwl2bWYtJmd0O3BhZ2UgPSBwYWdlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLApAQCAtODEyLDYgJiM0Mzs4NDUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHsKIAkubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLAogCS5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsCiAJLm1hcF9tbWFwID0gYXJyYXlfbWFwX21tYXAsCiYjNDM7CS5tYXBfbW1hcF9mYXVsdCA9IGFycmF5X21hcF9tbWFwX2ZhdWx0LAogCS5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLAogCS5tYXBfY2hlY2tfYnRmID0gYXJyYXlfbWFwX2NoZWNrX2J0ZiwKIAkubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggMGZmOWUzYWEyOTNkNTcuLmZiMGUxZjU1YzQ4NzNkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtMTA3Nyw5ICYjNDM7MTA3NywyNiBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJCWJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDYWxsZWQgZm9yIG1hcHMgdGhhdCBwb3B1bGF0ZSB0aGVpciBtZW1vcnktbWFwcGVkIHJlZ2lvbiBsYXppbHksIGkuZS4gdGhhdAomIzQzOyAqIHJldHVybiB3aXRob3V0IHdpcmluZyB1cCBhbnkgUFRFcyBmcm9tIHRoZWlyIC0mZ3Q7bWFwX21tYXAgY2FsbGJhY2suIE1hcHMgdGhhdAomIzQzOyAqIHBvcHVsYXRlIHRoZSB3aG9sZSBWTUEgZWFnZXJseSAoZS5nLiB2aWEgcmVtYXBfdm1hbGxvY19yYW5nZSgpKSBuZXZlciByZWFjaAomIzQzOyAqIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi0mZ3Q7dm1hLSZndDt2bV9wcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CWlmICghbWFwLSZndDtvcHMtJmd0O21hcF9tbWFwX2ZhdWx0KQomIzQzOwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcC0mZ3Q7b3BzLSZndDttYXBfbW1hcF9mYXVsdChtYXAsIHZtZik7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7CiAJLm9wZW4JCT0gYnBmX21hcF9tbWFwX29wZW4sCiAJLmNsb3NlCQk9IGJwZl9tYXBfbW1hcF9jbG9zZSwKJiM0MzsJLmZhdWx0CQk9IGJwZl9tYXBfbW1hcF9mYXVsdCwKIH07CiAKIHN0YXRpYyBpbnQgYnBmX21hcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1NWQzOTQ0Mzg3MDVhNi4uYjY1OTNmYjExMzViMjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKQEAgLTEwMDMsNiAmIzQzOzEwMDMsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9ub3AubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm8gXAomIzQzOwkJICQoT1VUUFVUKS9iZW5jaF9hcnJheW1hcF9tbWFwLm8gXAogCQkgJChPVVRQVVQpL3VzZHRfMS5vIFwKIAkJICQoT1VUUFVUKS91c2R0XzIubyBcCiAJCSAjCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCmluZGV4IDNkOWQyY2Q3NzY0YmQzLi4xOTJkNWZjYjdhNzQ4ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKQEAgLTI4Nyw2ICYjNDM7Mjg3LDcgQEAgZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2NyeXB0b19hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3NvY2ttYXBfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9scG1fdHJpZV9tYXBfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF94ZHBfbGJfYXJncDsKJiM0MztleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0gewogCXsgJmFtcDtiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCAmIzM0O1JpbmcgYnVmZmVycyBiZW5jaG1hcmsmIzM0OywgMCB9LApAQCAtMzA0LDYgJiM0MzszMDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0gewogCXsgJmFtcDtiZW5jaF9zb2NrbWFwX2FyZ3AsIDAsICYjMzQ7YnBmIHNvY2ttYXAgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3AsIDAsICYjMzQ7TFBNIHRyaWUgbWFwIGJlbmNobWFyayYjMzQ7LCAwIH0sCiAJeyAmYW1wO2JlbmNoX3hkcF9sYl9hcmdwLCAwLCAmIzM0O1hEUCBsb2FkLWJhbGFuY2VyIGJlbmNobWFyayYjMzQ7LCAwIH0sCiYjNDM7CXsgJmFtcDtiZW5jaF9hcnJheW1hcF9tbWFwX2FyZ3AsIDAsICYjMzQ7YXJyYXltYXAtbW1hcCBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXt9LAogfTsKIApAQCAtNTgyLDYgJiM0Mzs1ODQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX25vcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYXJyYXltYXBfbW1hcDsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7CiAJJmFtcDtiZW5jaF9jb3VudF9nbG9iYWwsCkBAIC02NjUsNiAmIzQzOzY2OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0gewogCSZhbXA7YmVuY2hfbHBtX3RyaWVfZnJlZSwKIAkmYW1wO2JlbmNoX2JwZl9ub3AsCiAJJmFtcDtiZW5jaF94ZHBfbGIsCiYjNDM7CSZhbXA7YmVuY2hfYXJyYXltYXBfbW1hcCwKIH07CiAKIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2FycmF5bWFwX21tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYXJyYXltYXBfbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNTZkODBhODVjZjAxZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYXJyYXltYXBfbW1hcC5jCkBAIC0wLDAgJiM0MzsxLDE0NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuICovCiYjNDM7I2luY2x1ZGUgJmx0O2FyZ3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JlbmNoLmgmIzM0OwomIzQzOwomIzQzOy8qIEJlbmNobWFyayBtbWFwKCkvbXVubWFwKCkgb2YgYW4gbW1hcC1hYmxlIEJQRiBhcnJheSBtYXAgZnJvbSBOIHRocmVhZHMuICovCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjdHggewomIzQzOwlpbnQgbWFwX2ZkOwomIzQzOwlzaXplX3QgbW1hcF9zejsKJiM0Mzt9IGN0eDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHsKJiM0MzsJX191MzIgbnJfdGhyZWFkczsKJiM0MzsJX191NjQgbWFwX3NpemU7CiYjNDM7fSBhcmdzID0gewomIzQzOwkubnJfdGhyZWFkcyA9IDE2LAomIzQzOwkubWFwX3NpemUgPSA4ICogMTAyNCAqIDEwMjQsIC8qIDggTWlCICovCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJQVJHX05SX1RIUkVBRFMgPSA1MDAwLAomIzQzOwlBUkdfTUFQX1NJWkUgPSA1MDAxLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7CiYjNDM7CXsgJiMzNDtuci10aHJlYWRzJiMzNDssIEFSR19OUl9USFJFQURTLCAmIzM0O05SX1RIUkVBRFMmIzM0OywgMCwKJiM0MzsJCSYjMzQ7TnVtYmVyIG9mIHRocmVhZHMgdGhhdCBtbWFwL211bm1hcCB0aGUgbWFwIChkZWZhdWx0IDE2KSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDttYXAtc2l6ZSYjMzQ7LCBBUkdfTUFQX1NJWkUsICYjMzQ7QllURVMmIzM0OywgMCwKJiM0MzsJCSYjMzQ7U2l6ZSBvZiB0aGUgQlBGIGFycmF5IG1hcCBpbiBieXRlcyAoZGVmYXVsdCA4Mzg4NjA4KSYjMzQ7IH0sCiYjNDM7CXt9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGVycm9yX3QgcGFyc2VfYXJnKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChrZXkpIHsKJiM0MzsJY2FzZSBBUkdfTlJfVEhSRUFEUzoKJiM0MzsJCWFyZ3MubnJfdGhyZWFkcyA9IHN0cnRvdWwoYXJnLCBOVUxMLCAwKTsKJiM0MzsJCWlmIChhcmdzLm5yX3RocmVhZHMgPT0gMCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ludmFsaWQgbnItdGhyZWFkczogJXNcbiYjMzQ7LCBhcmcpOwomIzQzOwkJCWFyZ3BfdXNhZ2Uoc3RhdGUpOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQVJHX01BUF9TSVpFOgomIzQzOwkJYXJncy5tYXBfc2l6ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMCk7CiYjNDM7CQlpZiAoYXJncy5tYXBfc2l6ZSA9PSAwKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCBtYXAtc2l6ZTogJXNcbiYjMzQ7LCBhcmcpOwomIzQzOwkJCWFyZ3BfdXNhZ2Uoc3RhdGUpOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovCiYjNDM7Y29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwID0gewomIzQzOwkub3B0aW9ucyA9IG9wdHMsCiYjNDM7CS5wYXJzZXIgPSBwYXJzZV9hcmcsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7YmVuY2htYXJrIGRvZXNuJiMzOTt0IHN1cHBvcnQgY29uc3VtZXIhXG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBudW1iZXIgb2Ygd29ya2VyIHRocmVhZHMgaXMgY29udHJvbGxlZCBieSAtLW5yLXRocmVhZHMgYW5kCiYjNDM7CSAqIGRyaXZlcyB0aGUgZnJhbWV3b3JrJiMzOTtzIHByb2R1Y2VyIG1hY2hpbmVyeSwgc28gcGVyLXByb2R1Y2VyIHN0YXRzCiYjNDM7CSAqIGFyZSByZXBvcnRlZCBjb3JyZWN0bHkuCiYjNDM7CSAqLwomIzQzOwllbnYucHJvZHVjZXJfY250ID0gYXJncy5ucl90aHJlYWRzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBoaXRzOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dCkKJiM0Mzt7CiYjNDM7CXdoaWxlICh0cnVlKSB7CiYjNDM7CQl2b2lkICphZGRyOwomIzQzOwomIzQzOwkJYWRkciA9IG1tYXAoTlVMTCwgY3R4Lm1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkJICAgIE1BUF9TSEFSRUQsIGN0eC5tYXBfZmQsIDApOwomIzQzOwkJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O21tYXAgZmFpbGVkOiAlZFxuJiMzNDssIC1lcnJubyk7CiYjNDM7CQkJZXhpdCgxKTsKJiM0MzsJCX0KJiM0MzsJCWlmIChtdW5tYXAoYWRkciwgY3R4Lm1tYXBfc3opKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7bXVubWFwIGZhaWxlZDogJWRcbiYjMzQ7LCAtZXJybm8pOwomIzQzOwkJCWV4aXQoMSk7CiYjNDM7CQl9CiYjNDM7CQlhdG9taWNfaW5jKCZhbXA7aGl0cyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKQomIzQzO3sKJiM0MzsJcmVzLSZndDtoaXRzID0gYXRvbWljX3N3YXAoJmFtcDtoaXRzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG9wdHMsIC5tYXBfZmxhZ3MgPSBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CWxvbmcgcGFnZV9zeiA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKJiM0MzsJX191MzIgdmFsdWVfc2l6ZSA9IHNpemVvZihfX3U2NCk7CiYjNDM7CV9fdTMyIG1heF9lbnRyaWVzOwomIzQzOwomIzQzOwlzZXR1cF9saWJicGYoKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbW1hcC1hYmxlIGFycmF5IG1hcHMgcm91bmQgdGhlIHZhbHVlIHNpemUgdXAgdG8gOCBieXRlcyBhbmQgZXhwb3NlCiYjNDM7CSAqIFBBR0VfQUxJR04obWF4X2VudHJpZXMgKiBlbGVtX3NpemUpIGJ5dGVzIHRvIHVzZXIgc3BhY2UuCiYjNDM7CSAqLwomIzQzOwltYXhfZW50cmllcyA9IChhcmdzLm1hcF9zaXplICYjNDM7IHZhbHVlX3NpemUgLSAxKSAvIHZhbHVlX3NpemU7CiYjNDM7CWN0eC5tbWFwX3N6ID0gKChfX3U2NCltYXhfZW50cmllcyAqIHZhbHVlX3NpemUgJiM0MzsgcGFnZV9zeiAtIDEpICZhbXA7CiYjNDM7CQkgICAgICB+KHBhZ2Vfc3ogLSAxKTsKJiM0MzsKJiM0MzsJY3R4Lm1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWSwgJiMzNDttbWFwX2FycmF5JiMzNDssCiYjNDM7CQkJCSAgICBzaXplb2YoX191MzIpLCB2YWx1ZV9zaXplLCBtYXhfZW50cmllcywKJiM0MzsJCQkJICAgICZhbXA7b3B0cyk7CiYjNDM7CWlmIChjdHgubWFwX2ZkICZsdDsgMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBtYXA6ICVkXG4mIzM0OywgLWVycm5vKTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpbnRmKCYjMzQ7YXJyYXkgbWFwOiAldSBlbnRyaWVzLCBtbWFwIHNpemUgJXp1IGJ5dGVzLCAldSB0aHJlYWRzXG4mIzM0OywKJiM0MzsJICAgICAgIG1heF9lbnRyaWVzLCBjdHgubW1hcF9zeiwgYXJncy5ucl90aHJlYWRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2FycmF5bWFwX21tYXAgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDthcnJheW1hcC1tbWFwJiMzNDssCiYjNDM7CS5hcmdwID0gJmFtcDtiZW5jaF9hcnJheW1hcF9tbWFwX2FyZ3AsCiYjNDM7CS52YWxpZGF0ZSA9IHZhbGlkYXRlLAomIzQzOwkuc2V0dXAgPSBzZXR1cCwKJiM0MzsJLnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLAomIzQzOwkubWVhc3VyZSA9IG1lYXN1cmUsCiYjNDM7CS5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLAomIzQzOwkucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjNlZmQ0NDFjZDY1M2EyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaApAQCAtMCwwICYjNDM7MSwxNSBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzO3NvdXJjZSAuL2JlbmNocy9ydW5fY29tbW9uLnNoCiYjNDM7CiYjNDM7c2V0IC1ldWZvIHBpcGVmYWlsCiYjNDM7CiYjNDM7Zm9yIHQgaW4gMSA0IDggMTY7IGRvCiYjNDM7Zm9yIHMgaW4gMTA0ODU3NiA4Mzg4NjA4IDY3MTA4ODY0OyBkbwomIzQzO3N1YnRpdGxlICYjMzQ7bnJfdGhyZWFkczogJHQsIG1hcF9zaXplOiAkcyYjMzQ7CiYjNDM7CXN1bW1hcml6ZV9vcHMgJiMzNDthcnJheW1hcC1tbWFwOiAmIzM0OyBcCiYjNDM7CSAgICAmIzM0OyQoJFJVTl9CRU5DSCAtLW5yLXRocmVhZHMgJHQgLS1tYXAtc2l6ZSAkcyBhcnJheW1hcC1tbWFwKSYjMzQ7CiYjNDM7CXByaW50ZiAmIzM0O1xuJiMzNDsKJiM0Mztkb25lCiYjNDM7ZG9uZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTMxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEFycmF5IE1hcCBtbWFwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIEJQRiBhcnJheSBtYXAgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjb3JlIGlkZWEgaXMgc2hpZnRpbmcgZnJvbSBlYWdlcmx5IG1hcHBpbmcgdGhlIG1lbW9yeSB3aXRoIGByZW1hcF92bWFsbG9jX3JhbmdlYCBpbiBgYXJyYXlfbWFwX21tYXBgIHRvIGEgbGF6eSwgZGVtYW5kLXBhZ2VkIGFwcHJvYWNoLiBUaGUgdXNlIG9mIGBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVBgIGZsYWdzIGlzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIHRoaXMsIGFsb25nIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBtYXBfbW1hcF9mYXVsdGAgY2FsbGJhY2sgd2hpY2ggd2lsbCBub3cgaGFuZGxlIHRoZSBwYWdlIGZhdWx0cy4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIHNoaWZ0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW4gZGV0YWlsLiBJIGtub3cgdGhpcyB3aWxsIGFmZmVjdCBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXNhZ2UuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgbWFraW5nIEJQRiBhcnJheSBtYXBzIGJlaGF2ZSBtb3JlIGxpa2UgdHlwaWNhbCBtZW1vcnkgcmVnaW9ucywgd2hlcmUgcGFnZXMgYXJlIG9ubHkgYWxsb2NhdGVkIGFuZCBtYXBwZWQgd2hlbiB0aGV5JiMzOTtyZSBhY3R1YWxseSBhY2Nlc3NlZC4gVGhpcyBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUuIEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBzY2VuYXJpb3M6IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiB0aGUgaW5pdGlhbCBhY2Nlc3Mgb3ZlcmhlYWQ/IEhvdyBkb2VzIHRoaXMgaW5mbHVlbmNlIG92ZXJhbGwgbWVtb3J5IGNvbnN1bXB0aW9uPyBJcyBpdCBnb2luZyB0byBiZSBhIHdpbiBpbiB0ZXJtcyBvZiByZWR1Y2VkIG1lbW9yeSBmb290cHJpbnQgZm9yIGxhcmdlIGFycmF5cywgb3Igd2lsbCB0aGUgYWRkZWQgZmF1bHQgaGFuZGxpbmcgY29zdCBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgaW4gY2VydGFpbiB3b3JrbG9hZHM/IFRoaXMgbmVlZHMgc29tZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24uCgpUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3ZlIG1vZGlmaWVkIGBicGZfbWFwX21tYXBgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gaG9vayB1cCB0aGUgZmF1bHQgaGFuZGxlciBpbiBgYnBmX21hcF9kZWZhdWx0X3Ztb3BzYCBpcyB0aGUga2V5LiBJdCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlZ3JhdGluZyB0aGUgbGF6eSBtYXBwaW5nIHdpdGhpbiB0aGUgQlBGIHN5c3RlbSBjYWxsIGludGVyZmFjZSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhleSYjMzk7dmUgdXBkYXRlZCB0aGUgYG1hcC0mZ3Q7b3BzLSZndDttYXBfbW1hcF9mYXVsdGAgY2FsbC4KClJpZ2h0LCBzbyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGFycmF5X21hcF9tbWFwYCwgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBicGZfbWFwX21tYXBfZmF1bHRgLiBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciBgYnBmX21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZXNlIGFyZSBiZWluZyBjYWxsZWQgZnJvbSBhbmQgdG8gc2VlIHdoYXQgaW50ZXJhY3Rpb25zIGV4aXN0LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBtYXAgZmF1bHRzIGFyZSB0cmlnZ2VyZWQsIGhhbmRsZWQsIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBvbiBkZW1hbmQuIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0IHRvIGFuYWx5emluZyB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MTA3Mj1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA4NS0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEwODY6c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA4Ny17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTA5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDk4LVx0LmNsb3NlXHRcdD0gYnBmX21hcF9tbWFwX2Nsb3NlLFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA5OTpcdC5mYXVsdFx0XHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExMDAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlYnVnZ2luZyBJbml0aWF0aXZlOiBUaGUgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIHByb2JsZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBsb2dzLCBhbmQgdGhlIGJlc3QgdG9vbCBmb3IgdGhhdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBncmVwYC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGlzc3VlIG9yIGZ1bmN0aW9uIGNhbGwgdGhhdCYjMzk7cyBjYXVzaW5nIHRoaXMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YC4gVGhpcyBsaWtlbHkgcG9pbnRzIHRvIGEgbWVtb3J5LXJlbGF0ZWQgaXNzdWUsIHByb2JhYmx5IHdpdGggbWVtb3J5IG1hcHBpbmcgYW5kIGhvdyBhbiBgYXJyYXlfbWFwYCBmdW5jdGlvbiBpcyBpbnRlcmFjdGluZyB3aXRoIGl0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gaHVudCBkb3duIGluc3RhbmNlcyBvZiB0aGF0IHNwZWNpZmljIHRlcm0sIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQg4oCTIHdoZXJlIHRoaXMgc3BlY2lmaWMgZXJyb3Igb3IgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIG9yIHJlZmVyZW5jZWQuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcm9vdCBjYXVzZS4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIHByb2JsZW1hdGljIGxvZ2ljIHF1aWNrbHkuIExldCYjMzk7cyBzZWUgd2hhdCBgZ3JlcGAgdW5jb3ZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJyYXlfbWFwX21tYXBfZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTU3Nj1zdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy01ODgtXHQgKiBUaGUgYmFja2luZyBtZW1vcnkgaXMgdm1hbGxvYyYjMzk7ZWQgdXAgZnJvbnQsIHNvIGluc3RlYWQgb2Ygd2lyaW5nIHVwXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NTg5Olx0ICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IGFycmF5X21hcF9tbWFwX2ZhdWx0KCkgaW5zZXJ0IHBhZ2VzIG9uIGRlbWFuZC5cbmtlcm5lbC9icGYvYXJyYXltYXAuYy01OTAtXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNTk3LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjU5ODpzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTU5OS1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODM0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NDctXHQubWFwX21tYXAgPSBhcnJheV9tYXBfbW1hcCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NDg6XHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NDktXHQubWFwX3NlcV9zaG93X2VsZW0gPSBhcnJheV9tYXBfc2VxX3Nob3dfZWxlbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzc0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOgoKKipGdW5jdGlvbmFsIFBhdGNoIEFuYWx5c2lzKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgc29saWQg4oCTIGl0JiMzOTtzIGZ1bmN0aW9uYWwgYW5kIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgY29kZSBwYXRoIGl0IG1vZGlmaWVzIGlzIHJlYWNoYWJsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBmb2N1cyBuZWVkcyB0byBiZSBsYXNlci1zaGFycCBvbiBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGRpZyBpbnRvLiBJdCBsb29rcyBsaWtlIGBhcnJheV9tYXBfbW1hcGAgaXRzZWxmIGhhcyBhbHNvIHNlZW4gc29tZSBtb2RpZmljYXRpb25zLCBzbyB0aGF0JiMzOTtzIHdvcnRoIGtlZXBpbmcgYW4gZXllIG9uIGFzIHdlbGwuCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBCdXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjaywgZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyLCBtb3JlIG9ic2N1cmUgY29uZmlndXJhdGlvbnMgdGhhdCB0aGlzIHBhdGNoIGRlcGVuZHMgb24uIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gY29uZmlybWluZyB0aGlzIGNoYW5nZSB3b3JrcyBhcyBleHBlY3RlZCBpbiB2YXJpb3VzIHNldHVwcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGdvaW5nIHRvIHBsYXkgbmljZSB3aXRoIGFsbCBvdXIgZGVwbG95bWVudCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxOTIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYGFycmF5bWFwLmNgKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBhcnJheW1hcC5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBhIHBhcnRpY3VsYXIgY29uZGl0aW9uLiBUaGlzIGNvdWxkIGJlIGEgbWFjcm8sIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSXQmIzM5O3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIGFjdHVhbGx5IGluY2x1ZGVkIGluIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyBhcm91bmQgY29tcGlsYXRpb24gb2YgdGhpcyBmaWxlIGlzIGZvdW5kYXRpb25hbCBiZWZvcmUgY29udGludWluZy4gSSBuZWVkIHRvIGtub3cgd2h5IGFuZCBob3cgaXQmIzM5O3MgaW5jbHVkZWQsIG9yIGV4Y2x1ZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcnJheW1hcC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jPTc5PXN0YXRpYyB2b2lkIHRlc3RfYXJyYXlfbWFwKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xMzAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjEzMTpcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VhcnJheW1hcF9vdXRwdXQsIGV4cGVjdGVkX3RvdGFsLCBcJiMzNDthcnJheV9vdXRwdXRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xMzItXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY3B1ICYjNDM7IDEsIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBlcmNwdV92YWwsIFwmIzM0O3BlcmNwdV92YWxcJiMzNDspO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jPTUwPWNoZWNrX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzo1ODp1MzIgYXJyYXltYXBfb3V0cHV0ID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTU5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jPTYxPWludCB0ZXN0X3BrdF9hY2Nlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTY4LVx0XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2YXJyYXltYXAsIHVudXNlZF9zdWJwcm9nLCBcdTAwMjZkYXRhLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jOjY5Olx0YXJyYXltYXBfb3V0cHV0ID0gZGF0YS5vdXRwdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy03MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBUaGF0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50LCB0aGUga2V5c3RvbmUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIGtub2JzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBCUEYgc3lzY2FsbCBiZWhhdmlvciwgZXZlbiBpbmRpcmVjdGx5PyBJIGNhbiYjMzk7dCBiZSBzdXJlLCBJIHNob3VsZCByZWFsbHkgY2hlY2suCgpMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSBzb3VyY2UgY29kZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIHN5c2NhbGwmIzM5O3MgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCBtaWdodCBiZSBhZmZlY3RlZCBieSB2YXJpb3VzIG90aGVyIGNvbXBpbGF0aW9uIG9wdGlvbnMgb3Iga2VybmVsIHNldHRpbmdzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDgxOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMucnN0PTM5Nj1jaXJjdW1zdGFuY2VzIHRoZSBjYWNoaW5nIGNvZGUgaXMgcnVubmluZyBpbiB0aGUgc2VjdXJpdHkgY29udGV4dCBvZiB3aGF0ZXZlclxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMucnN0OjM5Nzpwcm9jZXNzIGlzc3VlZCB0aGUgb3JpZ2luYWwgc3lzY2FsbCBvbiB0aGUgbmV0ZnMuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy5yc3QtMzk4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD05MD1vZiBmdHJhY2UuIEhlcmUgaXMgYSBsaXN0IG9mIHNvbWUgb2YgdGhlIGtleSBmaWxlczpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTg2LVx0YmVmb3JlIGEgd2FpdGVyIGlzIHdva2VuIHVwLiBUaGF0IGlzLCBpZiBhbiBhcHBsaWNhdGlvbiBjYWxscyBhXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTg3Olx0YmxvY2tpbmcgcmVhZCBzeXNjYWxsIG9uIG9uZSBvZiB0aGUgcGVyX2NwdSB0cmFjZV9waXBlX3JhdyBmaWxlcywgaXRcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xODgtXHR3aWxsIGJsb2NrIHVudGlsIHRoZSBnaXZlbiBhbW91bnQgb2YgZGF0YSBzcGVjaWZpZWQgYnkgYnVmZmVyX3BlcmNlbnRcbi0tXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvcnNlcS5yc3Q9MjE2PW9wZXJhdGlvbi5cbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9yc2VxLnJzdC0yMTctXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvcnNlcS5yc3Q6MjE4OklmIHRoZSB0aHJlYWQgaXNzdWVzIGEgc3lzY2FsbCBvdGhlciB0aGFuIHJzZXFfc2xpY2VfeWllbGQoMikgd2l0aGluIHRoZVxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL3JzZXEucnN0LTIxOS1ncmFudGVkIHRpbWVzbGljZSBleHRlbnNpb24sIHRoZSBncmFudCBpcyBhbHNvIHJldm9rZWQgYW5kIHRoZSBDUFUgaXNcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTMwNT1zdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfdGhyZWFkX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYyxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMxOC1cdCAqIFRvIGFsbG93IHRoZSBzeXNjYWxsczpzeXNfZXhpdF9leGVjdmUgdHJhY2Vwb2ludCB3ZSBuZWVkIHRvIHByZXNlcnZlXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjMxOTpcdCAqIHN5c2NhbGxubywgYnV0IGRvIG5vdCBuZWVkIG9yaWdfeDAgb3IgdGhlIG9yaWdpbmFsIEdQUnMuXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMyMC1cdCAqL1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtODgtLypcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg6ODk6ICogSWYgcHRfcmVncy5zeXNjYWxsbm8gPT0gTk9fU1lTQ0FMTCwgdGhlbiB0aGUgdGhyZWFkIGlzIG5vdCBleGVjdXRpbmdcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtOTAtICogYSBzeXNjYWxsIC0tIGkuZS4sIGl0cyBtb3N0IHJlY2VudCBlbnRyeSBpbnRvIHRoZSBrZXJuZWwgZnJvbVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg9MTU2PXN0cnVjdCBwdF9yZWdzIHtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTE2Ni1cdHU2NCBvcmlnX3gwO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaDoxNjc6XHRzMzIgc3lzY2FsbG5vO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xNjgtXHR1MzIgcG1yO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg9MTc3PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl9zeXNjYWxsKHN0cnVjdCBwdF9yZWdzIGNvbnN0ICpyZWdzKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xNzgte1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaDoxNzk6XHRyZXR1cm4gcmVncy1cdTAwM2VzeXNjYWxsbm8gIT0gTk9fU1lTQ0FMTDtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtMTgwLX1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHZvaWQgZm9yZ2V0X3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTE4My17XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oOjE4NDpcdHJlZ3MtXHUwMDNlc3lzY2FsbG5vID0gTk9fU1lTQ0FMTDtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtMTg1LX1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaD0yMD1zdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgtMjIte1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmg6MjM6XHRyZXR1cm4gcmVncy1cdTAwM2VzeXNjYWxsbm87XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaC0yNC19XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmg9NjQ9c3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaC02Ny17XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaDo2ODpcdHJlZ3MtXHUwMDNlc3lzY2FsbG5vID0gbnI7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaC02OS1cdGlmIChuciA9PSAtMSkge1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlPTEwPUNGTEFHU19SRU1PVkVfcmV0dXJuX2FkZHJlc3MubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlLTEzLSMgY2hlY2tzIGR1ZSB0byByYW5kb21pemVfa3N0YWNrX29mZnNldC5cbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlOjE0OkNGTEFHU19SRU1PVkVfc3lzY2FsbC5vXHQgPSAtZnN0YWNrLXByb3RlY3RvciAtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmdcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlOjE1OkNGTEFHU19zeXNjYWxsLm9cdCYjNDM7PSAtZm5vLXN0YWNrLXByb3RlY3RvclxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUtMTYtXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGU9Mjk9b2JqLXlcdFx0XHQ6PSBkZWJ1Zy1tb25pdG9ycy5vIGVudHJ5Lm8gaXJxLm8gZnBzaW1kLm9cdFx0XFxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZS0zNS1cdFx0XHQgICBzbXAubyBzbXBfc3Bpbl90YWJsZS5vIHRvcG9sb2d5Lm8gc21jY2MtY2FsbC5vXHRcXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGU6MzY6XHRcdFx0ICAgc3lzY2FsbC5vIHByb3Rvbi1wYWNrLm8gaWRsZS5vIHBhdGNoaW5nLm8gcGkvXHRcXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUtMzctXHRcdFx0ICAgcnNpLm8ganVtcF9sYWJlbC5vXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYz0yNz1pbnQgbWFpbih2b2lkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2FzbS1vZmZzZXRzLmMtNzUtICBERUZJTkUoU19QU1RBVEUsXHRcdG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwc3RhdGUpKTtcbmFyY2gvYXJtNjQva2VybmVsL2FzbS1vZmZzZXRzLmM6NzY6ICBERUZJTkUoU19TWVNDQUxMTk8sXHRcdG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzeXNjYWxsbm8pKTtcbmFyY2gvYXJtNjQva2VybmVsL2FzbS1vZmZzZXRzLmMtNzctICBERUZJTkUoU19TREVJX1RUQlIxLFx0XHRvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc2RlaV90dGJyMSkpO1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jPTczNj1zdGF0aWMgaW50IHN5c3RlbV9jYWxsX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy03Mzkte1xuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6NzQwOlx0cmV0dXJuIG1lbWJ1Zl9zdG9yZShcdTAwMjZ0bywgdGFza19wdF9yZWdzKHRhcmdldCktXHUwMDNlc3lzY2FsbG5vKTtcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc0MS19XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM9NzQzPXN0YXRpYyBpbnQgc3lzdGVtX2NhbGxfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc0Ny17XG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzo3NDg6XHRpbnQgc3lzY2FsbG5vID0gdGFza19wdF9yZWdzKHRhcmdldCktXHUwMDNlc3lzY2FsbG5vO1xuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzQ5LVx0aW50IHJldDtcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc1MC1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjc1MTpcdHJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbihcdTAwMjZwb3MsIFx1MDAyNmNvdW50LCBcdTAwMjZrYnVmLCBcdTAwMjZ1YnVmLCBcdTAwMjZzeXNjYWxsbm8sIDAsIC0xKTtcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc1Mi1cdGlmIChyZXQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzU0LVxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6NzU1Olx0dGFza19wdF9yZWdzKHRhcmdldCktXHUwMDNlc3lzY2FsbG5vID0gc3lzY2FsbG5vO1xuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzU2LVx0cmV0dXJuIHJldDtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYz0yMjM1PWxvbmcgY29tcGF0X2FyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGNvbXBhdF9sb25nX3QgcmVxdWVzdCxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy0yMjczLVx0XHRjYXNlIENPTVBBVF9QVFJBQ0VfU0VUX1NZU0NBTEw6XG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzoyMjc0Olx0XHRcdHRhc2tfcHRfcmVncyhjaGlsZCktXHUwMDNlc3lzY2FsbG5vID0gZGF0YTtcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTIyNzUtXHRcdFx0cmV0ID0gMDtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYz0yNDExPWludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTI0MjYtXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSlcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjI0Mjc6XHRcdHRyYWNlX3N5c19lbnRlcihyZWdzLCByZWdzLVx1MDAzZXN5c2NhbGxubyk7XG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy0yNDI4LVxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6MjQyOTpcdGF1ZGl0X3N5c2NhbGxfZW50cnkocmVncy1cdTAwM2VzeXNjYWxsbm8sIHJlZ3MtXHUwMDNlb3JpZ194MCwgcmVncy1cdTAwM2VyZWdzWzFdLFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtMjQzMC1cdFx0XHQgICAgcmVncy1cdTAwM2VyZWdzWzJdLCByZWdzLVx1MDAzZXJlZ3NbM10pO1xuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtMjQzMS1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjI0MzI6XHRyZXR1cm4gcmVncy1cdTAwM2VzeXNjYWxsbm87XG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy0yNDMzLX1cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM9NjI9c3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTY3LVx0cmVncy1cdTAwM2VvcmlnX3gwID0gcmVncy1cdTAwM2VyZWdzWzBdO1xuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjY4Olx0cmVncy1cdTAwM2VzeXNjYWxsbm8gPSBzY25vO1xuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTY5LVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvTWFrZWZpbGU9ND1vYmoteSAmIzQzOz0gaGVhZC5vIGVudHJ5Lm8gYXRvbWljLm8gc2lnbmFsLm8gdHJhcHMubyBpcnEubyB0aW1lLm8gdmRzby5vIHZkc28vXG5hcmNoL2Nza3kva2VybmVsL01ha2VmaWxlOjU6b2JqLXkgJiM0Mzs9IHBvd2VyLm8gc3lzY2FsbC5vIHN5c2NhbGxfdGFibGUubyBzZXR1cC5vXG5hcmNoL2Nza3kva2VybmVsL01ha2VmaWxlLTYtb2JqLXkgJiM0Mzs9IHByb2Nlc3MubyBjcHUtcHJvYmUubyBwdHJhY2UubyBzdGFja3RyYWNlLm9cbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGU9MTA9b2JqLXlcdFx0JiM0Mzs9IGhlYWQubyBjcHUtcHJvYmUubyBjYWNoZWluZm8ubyBlbnYubyBzZXR1cC5vIGVudHJ5Lm8gZ2VuZXgubyBcXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTExLVx0XHQgICB0cmFwcy5vIGlycS5vIGlkbGUubyBwcm9jZXNzLm8gZG1hLm8gbWVtLm8gcmVzZXQubyBzd2l0Y2gubyBcXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjEyOlx0XHQgICBlbGYubyBzeXNjYWxsLm8gc2lnbmFsLm8gdGltZS5vIHRvcG9sb2d5Lm8gaW5zdC5vIHB0cmFjZS5vIHZkc28ubyBcXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTEzLVx0XHQgICBhbHRlcm5hdGl2ZS5vIGtkZWJ1Z2ZzLm8gdW53aW5kLm9cbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGU9MjQ9Q0ZMQUdTX21vZHVsZS5vXHRcdCYjNDM7PSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCBvdmVycmlkZS1pbml0KVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjI1OkNGTEFHU19zeXNjYWxsLm9cdCYjNDM7PSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCBvdmVycmlkZS1pbml0KVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTI2LUNGTEFHU190cmFwcy5vXHRcdCYjNDM7PSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCBvdmVycmlkZS1pbml0KVxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaD00ND1lbnVtIHNwZWNfb3Age1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaC00Ny1cdGpyX29wLCBqYWxyX29wLCBtb3Z6X29wLCBtb3ZuX29wLFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oOjQ4Olx0c3lzY2FsbF9vcCwgYnJlYWtfb3AsIHNwaW1fb3AsIHN5bmNfb3AsXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0LmgtNDktXHRtZmhpX29wLCBtdGhpX29wLCBtZmxvX29wLCBtdGxvX29wLFxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaD00NDI9ZW51bSBtbV8zMmF4Zl9taW5vcl9vcCB7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oLTQ1OC1cdG1tX3N5bmNfb3AgPSAweDFhZCxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaDo0NTk6XHRtbV9zeXNjYWxsX29wID0gMHgyMmQsXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0LmgtNDYwLVx0bW1fd2FpdF9vcCA9IDB4MjRkLFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGU9OD1vYmoteVx0XHQmIzQzOz0gaGVhZC5vIGJyYW5jaC5vIGNtcHhjaGcubyBlbGYubyBlbnRyeS5vIGdlbmV4Lm8gaWRsZS5vIGlycS5vIFxcXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlLTktXHRcdCAgIHByb2Nlc3MubyBwcm9tLm8gcHRyYWNlLm8gcmVzZXQubyBzZXR1cC5vIHNpZ25hbC5vIFxcXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlOjEwOlx0XHQgICBzeXNjYWxsLm8gdGltZS5vIHRvcG9sb2d5Lm8gdHJhcHMubyB1bmFsaWduZWQubyB3YXRjaC5vIFxcXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlLTExLVx0XHQgICB2ZHNvLm8gY2FjaGVpbmZvLm9cbi0tXG5hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlM9MjU9TkVTVEVEKGhhbmRsZV9zeXMsIFBUX1NJWkUsIHNwKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUy0zMS1cbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUzozMjpcdGx3XHR0MSwgUFRfRVBDKHNwKVx0XHQjIHNraXAgc3lzY2FsbCBvbiByZXR1cm5cbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUy0zMy1cbi0tXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlM9MjY9TkVTVEVEKGhhbmRsZV9zeXNuMzIsIFBUX1NJWkUsIHNwKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUy0zOC0jaWZuZGVmIENPTkZJR19NSVBTMzJfTzMyXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlM6Mzk6XHRsZFx0dDEsIFBUX0VQQyhzcClcdFx0IyBza2lwIHN5c2NhbGwgb24gcmV0dXJuXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMtNDAtXHRkYWRkaXVcdHQxLCA0XHRcdFx0IyBza2lwIHRvIG5leHQgaW5zdHJ1Y3Rpb25cbi0tXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjY0LlM9Mjg9TkVTVEVEKGhhbmRsZV9zeXM2NCwgUFRfU0laRSwgc3ApXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW42NC5TLTQxLSNpZiAhZGVmaW5lZChDT05GSUdfTUlQUzMyX08zMikgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19NSVBTMzJfTjMyKVxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW42NC5TOjQyOlx0bGRcdHQxLCBQVF9FUEMoc3ApXHRcdCMgc2tpcCBzeXNjYWxsIG9uIHJldHVyblxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW42NC5TLTQzLVx0ZGFkZGl1XHR0MSwgNFx0XHRcdCMgc2tpcCB0byBuZXh0IGluc3RydWN0aW9uXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TPTI4PU5FU1RFRChoYW5kbGVfc3lzLCBQVF9TSVpFLCBzcClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMtMzMtXHQuc2V0XHRhdFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TOjM0Olx0bGRcdHQxLCBQVF9FUEMoc3ApXHRcdCMgc2tpcCBzeXNjYWxsIG9uIHJldHVyblxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TLTM1LVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jLTQ1LS8qXG5hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYzo0NjogKiBGb3IgaGlzdG9yaWMgcmVhc29ucyB0aGUgcGlwZSgyKSBzeXNjYWxsIG9uIE1JUFMgaGFzIGFuIHVudXN1YWwgY2FsbGluZ1xuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMtNDctICogY29udmVudGlvbi5cdEl0IHJldHVybnMgcmVzdWx0cyBpbiByZWdpc3RlcnMgJHYwIC8gJHYxIHdoaWNoIG1lYW5zIHRoZXJlXG4tLVxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM9NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpbnNuIGluc25fdGFibGVfTU1baW5zbl9pbnZhbGlkXSA9IHtcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYy0xMjMtXHRbaW5zbl9kaW5zbV1cdD0gezAsIDB9LFxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM6MTI0Olx0W2luc25fc3lzY2FsbF1cdD0ge00obW1fcG9vbDMyYV9vcCwgMCwgMCwgMCwgbW1fc3lzY2FsbF9vcCwgbW1fcG9vbDMyYXhmX29wKSwgU0NJTU19LFxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmMtMTI1LVx0W2luc25fYmJpdDBdXHQ9IHswLCAwfSxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmM9NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbnNuIGluc25fdGFibGVbaW5zbl9pbnZhbGlkXSA9IHtcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmMtMTk1LVx0W2luc25fc3luY11cdD0ge00oc3BlY19vcCwgMCwgMCwgMCwgMCwgc3luY19vcCksIFJFfSxcbmFyY2gvbWlwcy9tbS91YXNtLW1pcHMuYzoxOTY6XHRbaW5zbl9zeXNjYWxsXVx0PSB7TShzcGVjX29wLCAwLCAwLCAwLCAwLCBzeXNjYWxsX29wKSwgU0NJTU19LFxuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jLTE5Ny1cdFtpbnNuX3RsYnBdXHQ9IHtNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgdGxicF9vcCksICAwfSxcbi0tXG5hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oLTMyLSAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyBob3cgdGhlIHJlZ2lzdGVycyBhcmUgbGFpZCBvdXQgb24gdGhlIGtlcm5lbCBzdGFja1xuYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaDozMzogKiBkdXJpbmcgYSBzeXNjYWxsIG9yIG90aGVyIGtlcm5lbCBlbnRyeS5cbmFyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgtMzQtICpcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGU9OD1vYmoteVx0XHQ6PSBoZWFkLm8gY2FjaGUubyBwYWNhY2hlLm8gc2V0dXAubyBwZHQubyB0cmFwcy5vIHRpbWUubyBpcnEubyBcXFxuYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlOjk6XHRcdCAgIHN5c2NhbGwubyBlbnRyeS5vIHN5c19wYXJpc2MubyBmaXJtd2FyZS5vIFxcXG5hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGUtMTAtXHRcdCAgIHB0cmFjZS5vIGhhcmR3YXJlLm8gaW52ZW50b3J5Lm8gZHJpdmVycy5vIGFsdGVybmF0aXZlLm8gXFxcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmM9MzgzPWhhbmRsZV9zaWduYWwoc3RydWN0IGtzaWduYWwgKmtzaWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGluX3N5c2NhbGwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jLTQwNS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYzo0MDY6c3RhdGljIHZvaWQgY2hlY2tfc3lzY2FsbG5vX2luX2RlbGF5X2JyYW5jaChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00MDcte1xuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYz00NTE9c3lzY2FsbF9yZXN0YXJ0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00NzYtXHRcdERCRygxLCBcJiMzNDslczogJWxkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgcmVncy1cdTAwM2VnclsyOF0pO1xuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jOjQ3NzpcdFx0Y2hlY2tfc3lzY2FsbG5vX2luX2RlbGF5X2JyYW5jaChyZWdzKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00NzgtXHRcdGJyZWFrO1xuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYz00ODM9aW5zZXJ0X3Jlc3RhcnRfdHJhbXBvbGluZShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMtNTMzLVx0XHREQkcoMSwgXCYjMzQ7JXM6IFR5cGUgJWxkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgcmVncy1cdTAwM2VnclsyOF0pO1xuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jOjUzNDpcdFx0Y2hlY2tfc3lzY2FsbG5vX2luX2RlbGF5X2JyYW5jaChyZWdzKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy01MzUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TPTEzMT1saW51eF9nYXRld2F5X2VudHJ5OlxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMtMTg1LVx0ICAgc2F2ZWQvcmVzdG9yZWQpLiAgVEFTS19QVF9QU1cgaXMgemVyb2VkIHNvIHdlIGNhbiBzZWUgd2hldGhlclxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUzoxODY6XHQgICBhIHByb2Nlc3MgaXMgb24gYSBzeXNjYWxsIG9yIG5vdC4gIEZvciBhbiBpbnRlcnJ1cHQgdGhlIHJlYWxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMtMTg3LVx0ICAgUFNXIHZhbHVlIGlzIHN0b3JlZC4gIFRoaXMgaXMgbmVlZGVkIGZvciBnZGIgYW5kIHN5c19wdHJhY2UuICovXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUz0zNDg9dHJhY2VzeXNfbmV4dDpcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlM6MzQ5Olx0LyogZG9fc3lzY2FsbF90cmFjZV9lbnRlciBlaXRoZXIgcmV0dXJuZWQgdGhlIHN5c2NhbGxubywgb3IgLTFMLFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUy0zNTAtXHQgKiAgc28gd2Ugc2tpcCByZXN0b3JpbmcgdGhlIFBUX0dSMjAgYmVsb3csIHNpbmNlIHdlIHB1bGxlZCBpdCBmcm9tXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc28zMi9NYWtlZmlsZT0xMD1LQ1NBTl9TQU5JVElaRSA6PSBuXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlLTExLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc28zMi9NYWtlZmlsZToxMjpvYmotdmRzbzMyID0gbm90ZS5vIHNpZ3RyYW1wLm8gcmVzdGFydF9zeXNjYWxsLm9cbmFyY2gvcGFyaXNjL2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUtMTMtb2JqLWN2ZHNvMzIgPSB2ZHNvMzJfZ2VuZXJpYy5vXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc282NC9NYWtlZmlsZT0xMD1LQ1NBTl9TQU5JVElaRSA6PSBuXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlLTExLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc282NC9NYWtlZmlsZToxMjpvYmotdmRzbzY0ID0gbm90ZS5vIHNpZ3RyYW1wLm8gcmVzdGFydF9zeXNjYWxsLm9cbmFyY2gvcGFyaXNjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUtMTMtb2JqLWN2ZHNvNjQgPSB2ZHNvNjRfZ2VuZXJpYy5vXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZT01OD1LQ1NBTl9TQU5JVElaRV9zZXR1cF82NC5vIDo9IG5cbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlLTYyLSMgY2hlY2tzIGR1ZSB0byByYW5kb21pemVfa3N0YWNrX29mZnNldC5cbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU6NjM6Q0ZMQUdTX1JFTU9WRV9zeXNjYWxsLm8gPSAtZnN0YWNrLXByb3RlY3RvciAtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmdcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU6NjQ6Q0ZMQUdTX3N5c2NhbGwubyAmIzQzOz0gLWZuby1zdGFjay1wcm90ZWN0b3JcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUtNjUtI2VuZGlmXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZT02Nz1vYmoteVx0XHRcdFx0Oj0gY3B1dGFibGUubyBzeXNjYWxscy5vIHN3aXRjaC5vIFxcXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS03NC1cdFx0XHRcdCAgIGh3X2JyZWFrcG9pbnRfY29uc3RyYWludHMubyBpbnRlcnJ1cHQubyBcXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZTo3NTpcdFx0XHRcdCAgIGtkZWJ1Z2ZzLm8gc3RhY2t0cmFjZS5vIHN5c2NhbGwub1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS03Ni1vYmoteVx0XHRcdFx0JiM0Mzs9IHB0cmFjZS9cbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz00OD1zdHJ1Y3QgcnRhc19maWx0ZXIge1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTY3LSAqICAgICAgICAgIGdlbmVyYWxseSBhbGxvd2VkLCBhbmQgQGZpbHRlciBkZXNjcmliZXMgY29uc3RyYWludHMgb24gdGhlXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo2ODogKiAgICAgICAgICBhcmd1bWVudHMuIFNlZSBhbHNvIEBiYW5uZWRfZm9yX3N5c2NhbGxfb25fbGUuXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo2OTogKiBAYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlOiBTZXQgd2hlbiBjYWxsIHZpYSBzeXNfcnRhcyBpcyBnZW5lcmFsbHkgYWxsb3dlZFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtNzAtICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHNwZWNpZmljYWxseSByZXN0cmljdGVkIG9uIHBwYzY0bGUuIFN1Y2hcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz04Mz1zdHJ1Y3QgcnRhc19mdW5jdGlvbiB7XG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy04NC1cdHMzMiB0b2tlbjtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjg1Olx0Y29uc3QgYm9vbCBiYW5uZWRfZm9yX3N5c2NhbGxfb25fbGU6MTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTg2LVx0Y29uc3QgY2hhciAqIGNvbnN0IG5hbWU7XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmM9MTA0PXN0YXRpYyBzdHJ1Y3QgcnRhc19mdW5jdGlvbiBydGFzX2Z1bmN0aW9uX3RhYmxlW10gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTQ1NS1cdFx0Lm5hbWUgPSBcJiMzNDtpYm0sc3VzcGVuZC1tZVwmIzM0OyxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjQ1NjpcdFx0LmJhbm5lZF9mb3Jfc3lzY2FsbF9vbl9sZSA9IHRydWUsXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00NTctXHRcdC5maWx0ZXIgPSBcdTAwMjYoY29uc3Qgc3RydWN0IHJ0YXNfZmlsdGVyKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtNDY5LVx0XHQubmFtZSA9IFwmIzM0O2libSx1cGRhdGUtbm9kZXNcJiMzNDssXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo0NzA6XHRcdC5iYW5uZWRfZm9yX3N5c2NhbGxfb25fbGUgPSB0cnVlLFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtNDcxLVx0XHQuZmlsdGVyID0gXHUwMDI2KGNvbnN0IHN0cnVjdCBydGFzX2ZpbHRlcikge1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTQ3OC1cdFx0Lm5hbWUgPSBcJiMzNDtpYm0sdXBkYXRlLXByb3BlcnRpZXNcJiMzNDssXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo0Nzk6XHRcdC5iYW5uZWRfZm9yX3N5c2NhbGxfb25fbGUgPSB0cnVlLFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtNDgwLVx0XHQuZmlsdGVyID0gXHUwMDI2KGNvbnN0IHN0cnVjdCBydGFzX2ZpbHRlcikge1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jPTE3NzY9c3RhdGljIGJvb2wgYmxvY2tfcnRhc19jYWxsKGNvbnN0IHN0cnVjdCBydGFzX2Z1bmN0aW9uICpmdW5jLCBpbnQgbmFyZ3MsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtMTc5NC1cdCAqL1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmM6MTc5NTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfTElUVExFX0VORElBTikgXHUwMDI2XHUwMDI2IGZ1bmMtXHUwMDNlYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlKVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtMTc5Ni1cdFx0Z290byBlcnI7XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvc2lnbmFsLmM9NDEzPXN0YXRpYyBpbnQgc2V0dXBfcnRfZnJhbWUoc3RydWN0IGtzaWduYWwgKmtzaWcsIHNpZ3NldF90ICpzZXQsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvc2lnbmFsLmMtNDQ3LVx0ICogRm9yIHRoZSBub21tdSBjYXNlIHdlIGRvbiYjMzk7dCBoYXZlIGEgVkRTTy4gIEluc3RlYWQgd2UgcHVzaCB0d29cbmFyY2gvcmlzY3Yva2VybmVsL3NpZ25hbC5jOjQ0ODpcdCAqIGluc3RydWN0aW9ucyB0byBjYWxsIHRoZSBydF9zaWdyZXR1cm4gc3lzY2FsbCBvbnRvIHRoZSB1c2VyIHN0YWNrLlxuYXJjaC9yaXNjdi9rZXJuZWwvc2lnbmFsLmMtNDQ5LVx0ICovXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZT0zOT1vYmoteVx0Oj0gaGVhZC5vIHRyYXBzLm8gdGltZS5vIHByb2Nlc3MubyBlYXJseS5vIHNldHVwLm8gaWRsZS5vIHZ0aW1lLm9cbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU6NDA6b2JqLXlcdCYjNDM7PSBwcm9jZXNzb3IubyBzeXNjYWxsLm8gcHRyYWNlLm8gc2lnbmFsLm8gY3BjbWQubyBlYmNkaWMubyBubWkub1xuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZS00MS1vYmoteVx0JiM0Mzs9IGRlYnVnLm8gaXJxLm8gaXBsLm8gZGlzLm8gdmRzby5vIGNwdWZlYXR1cmUub1xuLS1cbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvTWFrZWZpbGU6MjpvYmoteSAmIzQzOz0gdnN5c2NhbGwubyB2c3lzY2FsbC1zeXNjYWxsLm8gdnN5c2NhbGwtc3ltcy5vXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC9NYWtlZmlsZS0zLVxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvTWFrZWZpbGU6NDokKG9iaikvdnN5c2NhbGwtc3lzY2FsbC5vOiAkKG9iaikvdnN5c2NhbGwtdHJhcGEuc29cbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlLTUtXG4tLVxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwuYz0zND1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2ZHNvX3RhYmxlW10gPSB7XG4tLVxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwuYy00Ni0vKlxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwuYzo0NzogKiBUaGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkIGJ5IHZzeXNjYWxsLm8gdG8gbWFyayB0aGUgYm91bmRzXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jLTQ4LSAqIG9mIHRoZSBFTEYgRFNPIGltYWdlcyBpbmNsdWRlZCB0aGVyZWluLlxuLS1cbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUtNS1cbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGU6NjpvYmoteSA6PSBzdHViLm8gbW11Lm8gcHJvY2Vzcy5vIHN5c2NhbGwubyB1YWNjZXNzLm8gXFxcbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUtNy1cdCBzdHViX2V4ZV9lbWJlZC5vXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg9MTI9ZXh0ZXJuIGxvbmcgX19pYTMyX3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xNy0gKiBfX3g2NF9zeXNfKigpICAgICAgICAgLSA2NC1iaXQgbmF0aXZlIHN5c2NhbGxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjE4OiAqIF9faWEzMl9zeXNfKigpICAgICAgICAtIDMyLWJpdCBuYXRpdmUgc3lzY2FsbCBvciBjb21tb24gY29tcGF0IHN5c2NhbGxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTE5LSAqIF9faWEzMl9jb21wYXRfc3lzXyooKSAtIDMyLWJpdCBjb21wYXQgc3lzY2FsbFxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZT04PW9iai15IDo9IGhlYWQubyBhbGlnbi5vIGNvcHJvY2Vzc29yLm8gZW50cnkubyBpcnEubyBwbGF0Zm9ybS5vIHByb2Nlc3MubyBcXFxuYXJjaC94dGVuc2Eva2VybmVsL01ha2VmaWxlOjk6XHQgcHRyYWNlLm8gc2V0dXAubyBzaWduYWwubyBzdGFja3RyYWNlLm8gc3lzY2FsbC5vIHRpbWUubyB0cmFwcy5vIFxcXG5hcmNoL3h0ZW5zYS9rZXJuZWwvTWFrZWZpbGUtMTAtXHQgdmVjdG9ycy5vXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYz0yOT1fX3ZtYV9tYXRjaGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jLTUzLSAqIHRvIGltcGxlbWVudCBEUk0gbW1hcCBzdXBwb3J0IGlzIHdpdGggYW4gbW1hcCBvZmZzZXQgaW9jdGwgKGxpa2VcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmM6NTQ6ICogaTkxNV9nZW1fbW1hcF9ndHQpIGFuZCB0aGVuIHVzaW5nIHRoZSBtbWFwIHN5c2NhbGwgb24gdGhlIERSTSBmZCBkaXJlY3RseS5cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMtNTUtICogVGhhdCB3YXkgZGVidWcgdG9vbGluZyBsaWtlIHZhbGdyaW5kIHdpbGwgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLCBoaWRpbmdcbi0tXG5kcml2ZXJzL3BjaS9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfWDg2X0lOVEVMX01JRClcdCYjNDM7PSBwY2ktbWlkLm9cbmRyaXZlcnMvcGNpL01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19QQ0lfU1lTQ0FMTClcdCYjNDM7PSBzeXNjYWxsLm9cbmRyaXZlcnMvcGNpL01ha2VmaWxlLTMwLW9iai0kKENPTkZJR19QQ0lfU1RVQilcdFx0JiM0Mzs9IHBjaS1zdHViLm9cbi0tXG5mcy9rZXJuZnMvZGlyLmM9MTAwMz11bnNpZ25lZCBpbnQga2VybmZzX3Jvb3RfZmxhZ3Moc3RydWN0IGtlcm5mc19ub2RlICprbilcbi0tXG5mcy9rZXJuZnMvZGlyLmMtMTAwOS0gKiBrZXJuZnNfY3JlYXRlX3Jvb3QgLSBjcmVhdGUgYSBuZXcga2VybmZzIGhpZXJhcmNoeVxuZnMva2VybmZzL2Rpci5jOjEwMTA6ICogQHNjb3BzOiBvcHRpb25hbCBzeXNjYWxsIG9wZXJhdGlvbnMgZm9yIHRoZSBoaWVyYXJjaHlcbmZzL2tlcm5mcy9kaXIuYy0xMDExLSAqIEBmbGFnczogS0VSTkZTX1JPT1RfKiBmbGFnc1xuLS1cbmZzL2tlcm5mcy9kaXIuYy0xMDE2LSAqL1xuZnMva2VybmZzL2Rpci5jOjEwMTc6c3RydWN0IGtlcm5mc19yb290ICprZXJuZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMsXG5mcy9rZXJuZnMvZGlyLmMtMTAxOC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgKnByaXYpXG4tLVxuZnMva2VybmZzL2Rpci5jLTEwNTctXG5mcy9rZXJuZnMvZGlyLmM6MTA1ODpcdHJvb3QtXHUwMDNlc3lzY2FsbF9vcHMgPSBzY29wcztcbmZzL2tlcm5mcy9kaXIuYy0xMDU5LVx0cm9vdC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuLS1cbmZzL2tlcm5mcy9kaXIuYz0xMjkxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICprZXJuZnNfaW9wX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2tlcm5mcy9kaXIuYy0xMjk1LVx0c3RydWN0IGtlcm5mc19ub2RlICpwYXJlbnQgPSBkaXItXHUwMDNlaV9wcml2YXRlO1xuZnMva2VybmZzL2Rpci5jOjEyOTY6XHRzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcyA9IGtlcm5mc19yb290KHBhcmVudCktXHUwMDNlc3lzY2FsbF9vcHM7XG5mcy9rZXJuZnMvZGlyLmMtMTI5Ny1cdGludCByZXQ7XG4tLVxuZnMva2VybmZzL2Rpci5jPTEzMTE9c3RhdGljIGludCBrZXJuZnNfaW9wX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMva2VybmZzL2Rpci5jLTEzMTMtXHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuICA9IGtlcm5mc19kZW50cnlfbm9kZShkZW50cnkpO1xuZnMva2VybmZzL2Rpci5jOjEzMTQ6XHRzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcyA9IGtlcm5mc19yb290KGtuKS1cdTAwM2VzeXNjYWxsX29wcztcbmZzL2tlcm5mcy9kaXIuYy0xMzE1LVx0aW50IHJldDtcbi0tXG5mcy9rZXJuZnMvZGlyLmM9MTMyOT1zdGF0aWMgaW50IGtlcm5mc19pb3BfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2tlcm5mcy9kaXIuYy0xMzM1LVx0c3RydWN0IGtlcm5mc19ub2RlICpuZXdfcGFyZW50ID0gbmV3X2Rpci1cdTAwM2VpX3ByaXZhdGU7XG5mcy9rZXJuZnMvZGlyLmM6MTMzNjpcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0ga2VybmZzX3Jvb3Qoa24pLVx1MDAzZXN5c2NhbGxfb3BzO1xuZnMva2VybmZzL2Rpci5jLTEzMzctXHRpbnQgcmV0O1xuLS1cbmZzL2tlcm5mcy9rZXJuZnMtaW50ZXJuYWwuaD0zMz1zdHJ1Y3Qga2VybmZzX3Jvb3Qge1xuLS1cbmZzL2tlcm5mcy9rZXJuZnMtaW50ZXJuYWwuaC00Mi1cdHUzMlx0XHRcdGlkX2hpZ2hiaXRzO1xuZnMva2VybmZzL2tlcm5mcy1pbnRlcm5hbC5oOjQzOlx0c3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc3lzY2FsbF9vcHM7XG5mcy9rZXJuZnMva2VybmZzLWludGVybmFsLmgtNDQtXG4tLVxuZnMva2VybmZzL21vdW50LmM9Mjg9c3RhdGljIGludCBrZXJuZnNfc29wX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMva2VybmZzL21vdW50LmMtMzAtXHRzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QgPSBrZXJuZnNfcm9vdChrZXJuZnNfZGVudHJ5X25vZGUoZGVudHJ5KSk7XG5mcy9rZXJuZnMvbW91bnQuYzozMTpcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0gcm9vdC1cdTAwM2VzeXNjYWxsX29wcztcbmZzL2tlcm5mcy9tb3VudC5jLTMyLVxuLS1cbmZzL2tlcm5mcy9tb3VudC5jPTM4PXN0YXRpYyBpbnQga2VybmZzX3NvcF9zaG93X3BhdGgoc3RydWN0IHNlcV9maWxlICpzZiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2tlcm5mcy9tb3VudC5jLTQxLVx0c3RydWN0IGtlcm5mc19yb290ICpyb290ID0ga2VybmZzX3Jvb3Qobm9kZSk7XG5mcy9rZXJuZnMvbW91bnQuYzo0MjpcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0gcm9vdC1cdTAwM2VzeXNjYWxsX29wcztcbmZzL2tlcm5mcy9tb3VudC5jLTQzLVxuLS1cbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYz00MjYwPXN0YXRpYyBpbnQgcmR0Z3JvdXBfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qga2VybmZzX3Jvb3QgKmtmKVxuLS1cbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy00Mjc2LVxuZnMvcmVzY3RybC9yZHRncm91cC5jOjQyNzc6c3RhdGljIHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgcmR0Z3JvdXBfa2Zfc3lzY2FsbF9vcHMgPSB7XG5mcy9yZXNjdHJsL3JkdGdyb3VwLmMtNDI3OC1cdC5ta2Rpclx0XHQ9IHJkdGdyb3VwX21rZGlyLFxuLS1cbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYz00Mjg0PXN0YXRpYyBpbnQgcmR0Z3JvdXBfc2V0dXBfcm9vdChzdHJ1Y3QgcmR0X2ZzX2NvbnRleHQgKmN0eClcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy00Mjg1LXtcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYzo0Mjg2Olx0cmR0X3Jvb3QgPSBrZXJuZnNfY3JlYXRlX3Jvb3QoXHUwMDI2cmR0Z3JvdXBfa2Zfc3lzY2FsbF9vcHMsXG5mcy9yZXNjdHJsL3JkdGdyb3VwLmMtNDI4Ny1cdFx0XHRcdCAgICAgIEtFUk5GU19ST09UX0NSRUFURV9ERUFDVElWQVRFRCB8XG4tLVxuaW5jbHVkZS9saW51eC9rZXJuZnMuaD0xOTk9c3RydWN0IGtlcm5mc19ub2RlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oLTIzOS0vKlxuaW5jbHVkZS9saW51eC9rZXJuZnMuaDoyNDA6ICoga2VybmZzX3N5c2NhbGxfb3BzIG1heSBiZSBzcGVjaWZpZWQgb24ga2VybmZzX2NyZWF0ZV9yb290KCkgdG8gc3VwcG9ydFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC0yNDEtICogc3lzY2FsbHMuICBUaGVzZSBvcHRpb25hbCBjYWxsYmFja3MgYXJlIGludm9rZWQgb24gdGhlIG1hdGNoaW5nIHN5c2NhbGxzXG4tLVxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC0yNDUtICovXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oOjI0NjpzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzIHtcbmluY2x1ZGUvbGludXgva2VybmZzLmgtMjQ3LVx0aW50ICgqc2hvd19vcHRpb25zKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QpO1xuLS1cbmluY2x1ZGUvbGludXgva2VybmZzLmg9NDI1PXN0cnVjdCBkZW50cnkgKmtlcm5mc19ub2RlX2RlbnRyeShzdHJ1Y3Qga2VybmZzX25vZGUgKmtuLFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC00MjYtXHRcdFx0XHQgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuaW5jbHVkZS9saW51eC9rZXJuZnMuaDo0Mjc6c3RydWN0IGtlcm5mc19yb290ICprZXJuZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMsXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oLTQyOC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgKnByaXYpO1xuLS1cbmluY2x1ZGUvbGludXgva2VybmZzLmg9NTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGtlcm5mc19yb290ICpcbmluY2x1ZGUvbGludXgva2VybmZzLmg6NTI2Omtlcm5mc19jcmVhdGVfcm9vdChzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcywgdW5zaWduZWQgaW50IGZsYWdzLFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC01MjctXHRcdCAgIHZvaWQgKnByaXYpXG4tLVxuaW5jbHVkZS9saW51eC9yc2VxX2VudHJ5Lmg9NjUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX3JzZXFfZXhpdF90b191c2VyX21vZGVfcmVzdGFydChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5pbmNsdWRlL2xpbnV4L3JzZXFfZW50cnkuaC02NTUtXHQgKiBJZiB0aGUgdGFzayBkaWQgbm90IGdvIHRocm91Z2ggc2NoZWR1bGUgb3IgZ290IHRoZSBmbGFnIGVuZm9yY2VkXG5pbmNsdWRlL2xpbnV4L3JzZXFfZW50cnkuaDo2NTY6XHQgKiBieSB0aGUgcnNlcSBzeXNjYWxsIG9yIGV4ZWN2ZSwgdGhlbiBub3RoaW5nIHRvIGRvIGhlcmUuXG5pbmNsdWRlL2xpbnV4L3JzZXFfZW50cnkuaC02NTctXHQgKlxuLS1cbmluY2x1ZGUvbWVkaWEvbWVkaWEtZGV2bm9kZS5oPTI4PWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICptZWRpYV9kZWJ1Z2ZzX3Jvb3Q7XG4tLVxuaW5jbHVkZS9tZWRpYS9tZWRpYS1kZXZub2RlLmgtNDUtICogQGNvbXBhdF9pb2N0bDogcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGhhbmRsZSAzMiBiaXRzIHVzZXJzcGFjZVxuaW5jbHVkZS9tZWRpYS9tZWRpYS1kZXZub2RlLmg6NDY6ICpcdGNhbGxzIHRvIHRoZSBpb2N0bCgpIHN5c2NhbGwgb24gYSBLZXJuZWwgY29tcGlsZWQgd2l0aCA2NCBiaXRzLlxuaW5jbHVkZS9tZWRpYS9tZWRpYS1kZXZub2RlLmgtNDctICogQG9wZW46IHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBvcGVuKCkgc3lzY2FsbFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC0xOS1cdEVNKCBNUl9NRU1PUllfSE9UUExVRyxcdFwmIzM0O21lbW9yeV9ob3RwbHVnXCYjMzQ7KVx0XHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjIwOlx0RU0oIE1SX1NZU0NBTEwsXHRcdFwmIzM0O3N5c2NhbGxfb3JfY3B1c2V0XCYjMzQ7KVx0XHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTIxLVx0RU0oIE1SX01FTVBPTElDWV9NQklORCxcdFwmIzM0O21lbXBvbGljeV9tYmluZFwmIzM0OylcdFx0XFxcbi0tXG5pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaD0zNzM9c3RydWN0IGRybV92bXdfZmVuY2VfcmVwIHtcbi0tXG5pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaC0zOTYtICpcbmluY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oOjM5NzogKiBCdWZmZXIgb2JqZWN0cyBhcmUgbWFwcGVkIHVzaW5nIHRoZSBtbWFwKCkgc3lzY2FsbCBvbiB0aGUgZHJtIGRldmljZS5cbmluY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oLTM5OC0gKi9cbi0tXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmg9NTQyPXN0cnVjdCBzaGFyZWRfaW5mbyB7XG4tLVxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oLTU4MC1cdCAqIFdhbGxjbG9jayB0aW1lOiB1cGRhdGVkIG9ubHkgYnkgY29udHJvbCBzb2Z0d2FyZS4gR3Vlc3RzIHNob3VsZCBiYXNlXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmg6NTgxOlx0ICogdGhlaXIgZ2V0dGltZW9mZGF5KCkgc3lzY2FsbCBvbiB0aGlzIHdhbGxjbG9jay1iYXNlIHZhbHVlLlxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oLTU4Mi1cdCAqL1xuLS1cbmlwYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19TWVNWSVBDX0NPTVBBVCkgJiM0Mzs9IGNvbXBhdC5vXG5pcGMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfU1lTVklQQykgJiM0Mzs9IHV0aWwubyBtc2d1dGlsLm8gbXNnLm8gc2VtLm8gc2htLm8gc3lzY2FsbC5vXG5pcGMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfU1lTVklQQ19TWVNDVEwpICYjNDM7PSBpcGNfc3lzY3RsLm9cbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE2MT1zdGF0aWMgdm9pZCAqYXJyYXlfbWFwX2VsZW1fcHRyKHN0cnVjdCBicGZfYXJyYXkqIGFycmF5LCB1MzIgaW5kZXgpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE2NS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNjY6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTE2Ny1zdGF0aWMgdm9pZCAqYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzQzPWludCBicGZfYXJyYXlfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTM1OS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzozNjA6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTM2MS1zdGF0aWMgbG9uZyBhcnJheV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NDAwPWludCBicGZfcGVyY3B1X2FycmF5X3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NDgtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDQ5Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NTAtc3RhdGljIGxvbmcgYXJyYXlfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz03MTI9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MjktXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3MzA6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSBkaXJlY3RseSwgc29cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczMS0gKiBhcmd1bWVudHMgaGF2ZSB0byBtYXRjaCBicGZfbWFwX2xvb2t1cF9lbGVtKCkgZXhhY3RseS5cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMTU5PXN0YXRpYyBpbnQgY2hlY2tfZmxhZ3Moc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsX29sZCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMTcyLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTE3MzovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMTc0LXN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTQ5ND1zdGF0aWMgbG9uZyBodGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTAwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTUwMTovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTAyLXN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9MjMwPXN0YXRpYyBzaXplX3QgbG9uZ2VzdF9wcmVmaXhfbWF0Y2goY29uc3Qgc3RydWN0IGxwbV90cmllICp0cmllLFxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy0yMzYtXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6MjM3Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy0yMzgtc3RhdGljIHZvaWQgKnRyaWVfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqX2tleSlcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9MzExPXN0YXRpYyBpbnQgdHJpZV9jaGVja19hZGRfZWxlbShzdHJ1Y3QgbHBtX3RyaWUgKnRyaWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzIwLVxua2VybmVsL2JwZi9scG1fdHJpZS5jOjMyMTovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzIyLXN0YXRpYyBsb25nIHRyaWVfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNDU1LVxua2VybmVsL2JwZi9scG1fdHJpZS5jOjQ1NjovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNDU3LXN0YXRpYyBsb25nIHRyaWVfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqX2tleSlcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz0xMjc9c3RhdGljIGxvbmcgX19zdGFja19tYXBfZ2V0KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCBib29sIGRlbGV0ZSlcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xNjAtXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzoxNjE6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTYyLXN0YXRpYyBsb25nIHF1ZXVlX21hcF9wZWVrX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTY2LVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM6MTY3Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTE2OC1zdGF0aWMgbG9uZyBzdGFja19tYXBfcGVla19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ3NQoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBBcnJheSBNYXAgTGF6eSBQYWdlIEZhdWx0aW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgZW5hYmxpbmcgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcyB0aGF0IGFyZSBgbW1hcGAtZWQgaW50byB1c2VyIHNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY2hhbmdlLgoKRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgdGhlIEJQRiBzdWJzeXN0ZW0sIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCBpcyB0aGUgZW50cnkgcG9pbnQuIFRoZSBwYXRjaCBtb2RpZmllcyBgYXJyYXltYXAuY2AgYW5kIGBzeXNjYWxsLmNgIHdpdGhpbiB0aGUgYGtlcm5lbC9icGZgIGRpcmVjdG9yeSwgd2hpY2ggaW1tZWRpYXRlbHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gdGhvc2UgZmlsZXMuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGJvdGggYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQsIG1lYW5pbmcgdGhhdCBpdCBpcyB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZy4KCk5vdywgaG93IGRvZXMgdGhpcyBhY3R1YWxseSB3b3JrPyBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFycmF5X21hcF9tbWFwYCB0byBzZXQgdGhlIGBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVBgIGZsYWdzIG9uIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIGFuZCByZXR1cm4gMCwgaW5zdGVhZCBvZiBlYWdlcmx5IG1hcHBpbmcgdGhlIG1lbW9yeS4gQ3JpdGljYWxseSwgaXQgdGhlbiBhZGRzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgYnBmX21hcF9tbWFwX2ZhdWx0YCB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIFRoaXMgc2lnbmFscyB0aGUgKmxhenkqIG5hdHVyZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uLgoKVGhlIGtleSB0byB2ZXJpZnlpbmcgdGhpcyBpcyB0aGUgc2VsZnRlc3QsIGBiZW5jaF9hcnJheW1hcF9tbWFwLmNgLiBUaGlzIGlzIGNydWNpYWwg4oCTIGl0IGNvbmZpcm1zIHRoZSBwYXRoIGlzIHZhbGlkISBUaGUgdGVzdCBjcmVhdGVzIGEgQlBGIGFycmF5IG1hcCB1c2luZyBgQlBGX0ZfTU1BUEFCTEVgLCBtYXBzIGl0IHVzaW5nIGBtbWFwYCwgYW5kIHN1YnNlcXVlbnRseSBhY2Nlc3NlcyB0aGUgbWVtb3J5LCBlZmZlY3RpdmVseSB0cmlnZ2VyaW5nIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGhpZ2hsaWdodHMgdGhlIHByYWN0aWNhbCByZWFjaGFiaWxpdHkgYW5kIHRoZSBpbnRlbmRlZCBmdW5jdGlvbiBvZiB0aGUgcGF0Y2guCgpJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBhcnJheV9tYXBfbW1hcGAuIFRoZSBgYXJyYXlfbWFwX21tYXBgIGZ1bmN0aW9uIGlzIGltcGFjdGVkIGJ5IGEgc21hbGwgY2hhbmdlLgoKSSYjMzk7bSBjb21mb3J0YWJsZSB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJvdmlkZXMgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcy4gR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgcmVhY2hhYmlsaXR5IHZpYSB1c2VyIHNwYWNlIGFuZCB3aXRoIHRoaXMgc2VsZnRlc3QsIEkmIzM5O20gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBvYnZpb3VzbHkgYEJQRl9TWVNDQUxMYCBhbmQgSSBhbSBnb2luZyB0byBsb2cgdGhlIGZ1bmN0aW9uIHN5bWJvbHMgdG8gdGhlIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FycmF5X21hcF9tbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgcGFnZSBmYXVsdGluZyBmb3IgQlBGIGFycmF5IG1hcHMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gbm90IGVhZ2VybHkgbWFwIHRoZSBtZW1vcnkgYW5kIGFkZHMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGJwZl9tYXBfbW1hcF9mYXVsdGAgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzIG9uIGRlbWFuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgY3JlYXRpbmcgYW5kIG1tYXAtaW5nIGEgQlBGIGFycmF5IG1hcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcnJheV9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YXJyYXlfbWFwX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBsYXp5IHBhZ2UgZmF1bHRpbmcgZm9yIEJQRiBhcnJheSBtYXBzIG1hcHBlZCB0byB1c2VyIHNwYWNlLiBJdCBtb2RpZmllcyBgYXJyYXlfbWFwX21tYXBgIHRvIG5vdCBlYWdlcmx5IG1hcCB0aGUgbWVtb3J5IGFuZCBhZGRzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgYW5kIGBicGZfbWFwX21tYXBfZmF1bHRgIHRvIGhhbmRsZSBwYWdlIGZhdWx0cyBvbiBkZW1hbmQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBtbWFwLWluZyBhIEJQRiBhcnJheSBtYXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMToxNjo0Ni41NzIyNDk4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDI4NzczMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImJwZl9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYXJyYXlfbWFwX21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgcGFnZSBmYXVsdGluZyBmb3IgQlBGIGFycmF5IG1hcHMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gbm90IGVhZ2VybHkgbWFwIHRoZSBtZW1vcnkgYW5kIGFkZHMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGJwZl9tYXBfbW1hcF9mYXVsdGAgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzIG9uIGRlbWFuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgY3JlYXRpbmcgYW5kIG1tYXAtaW5nIGEgQlBGIGFycmF5IG1hcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTY6NDYuNTcyMjU4NzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjU0NzUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0YThiNmZkZmVjZDdmMzExMjY3NWY3NmY4ZTg1MjBlZjliNjkwNDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDE6MTY6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5pbmRleCBlMDY2ZjQ0YTljMDU4MC4uYjUzNmYzYzllMTAzNmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMTQ1LDYgKzE0NSw3IEBAIHN0cnVjdCBicGZfbWFwX29wcyB7XFxuIFxcdGludCAoKm1hcF9kaXJlY3RfdmFsdWVfbWV0YSkoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0ICAgICB1NjQgaW1tLCB1MzIgKm9mZik7XFxuIFxcdGludCAoKm1hcF9tbWFwKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuK1xcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9mYXVsdCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xcbiBcXHRfX3BvbGxfdCAoKm1hcF9wb2xsKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cyk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKCptYXBfZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcXG5pbmRleCAyNDhiNDgxODE3OGNkMS4uMTcxMWJlNTgyOTA3ZGMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXFxuKysrIGIva2VybmVsL2JwZi9hcnJheW1hcC5jXFxuQEAgLTU3Niw3ICs1NzYsNiBAQCBzdGF0aWMgaW50IGFycmF5X21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuLVxcdHBnb2ZmX3QgcGdvZmYgPSBQQUdFX0FMSUdOKHNpemVvZigqYXJyYXkpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFx0aWYgKCEobWFwLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC01ODUsOCArNTg0LDQyIEBAIHN0YXRpYyBpbnQgYXJyYXlfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdCAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktXFx1MDAzZW1hcC5tYXhfZW50cmllcyAqIGFycmF5LVxcdTAwM2VlbGVtX3NpemUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHJldHVybiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgYXJyYXlfbWFwX3ZtYWxsb2NfYWRkcihhcnJheSksXFxuLVxcdFxcdFxcdFxcdCAgIHZtYS1cXHUwMDNldm1fcGdvZmYgKyBwZ29mZik7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJ2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cFxcbitcXHQgKiBldmVyeSBQVEUgaGVyZSB3ZSBsZXQgYXJyYXlfbWFwX21tYXBfZmF1bHQoKSBpbnNlcnQgcGFnZXMgb24gZGVtYW5kLlxcbitcXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcXG4rXFx0ICogdGhlbSB0byBwcmVzZXJ2ZSBiZWhhdmlvciAobm8gVk1BIGV4cGFuc2lvbiwgZXhjbHVkZWQgZnJvbSBjb3JlZHVtcCkuXFxuK1xcdCAqL1xcbitcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2bV9mYXVsdF90IGFycmF5X21hcF9tbWFwX2ZhdWx0KHN0cnVjdCBicGZfbWFwICptYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuK1xcdHBnb2ZmX3QgcGdvZmYgPSBQQUdFX0FMSUdOKHNpemVvZigqYXJyYXkpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0dm9pZCAqa2FkZHI7XFxuK1xcbitcXHQvKlxcbitcXHQgKiB2bWYtXFx1MDAzZXBnb2ZmIGlzIHRoZSBwYWdlIG9mZnNldCB3aXRoaW4gdGhlIG1hcHBpbmcgKHZtYS1cXHUwMDNldm1fcGdvZmYgcGx1c1xcbitcXHQgKiB0aGUgb2Zmc2V0IG9mIHRoZSBmYXVsdGluZyBhZGRyZXNzKS4gVGhlIGRhdGEgcGFnZXMgc3RhcnQgYWZ0ZXIgdGhlXFxuK1xcdCAqIGJwZl9hcnJheSBoZWFkZXIsIGhlbmNlIHRoZSBleHRyYSBwZ29mZi4gVGhpcyBtaXJyb3JzIHRoZSBvZmZzZXQgdGhhdFxcbitcXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgLi4uLCB2bWEtXFx1MDAzZXZtX3Bnb2ZmICsgcGdvZmYpIHVzZWQgdG8gYXBwbHkuXFxuK1xcdCAqL1xcbitcXHRrYWRkciA9IGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpICtcXG4rXFx0XFx0KCh1NjQpKHZtZi1cXHUwMDNlcGdvZmYgKyBwZ29mZikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuK1xcbitcXHRwYWdlID0gdm1hbGxvY190b19wYWdlKGthZGRyKTtcXG4rXFx0aWYgKCFwYWdlKVxcbitcXHRcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbitcXG4rXFx0Z2V0X3BhZ2UocGFnZSk7XFxuK1xcdHZtZi1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxcbkBAIC04MTIsNiArODQ1LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuIFxcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxuIFxcdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXFxuIFxcdC5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLFxcbitcXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcXG4gXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sXFxuIFxcdC5tYXBfY2hlY2tfYnRmID0gYXJyYXlfbWFwX2NoZWNrX2J0ZixcXG4gXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5pbmRleCAwZmY5ZTNhYTI5M2Q1Ny4uZmIwZTFmNTVjNDg3M2QgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC0xMDc3LDkgKzEwNzcsMjYgQEAgc3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRcXHRicGZfbWFwX3dyaXRlX2FjdGl2ZV9kZWMobWFwKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQ2FsbGVkIGZvciBtYXBzIHRoYXQgcG9wdWxhdGUgdGhlaXIgbWVtb3J5LW1hcHBlZCByZWdpb24gbGF6aWx5LCBpLmUuIHRoYXRcXG4rICogcmV0dXJuIHdpdGhvdXQgd2lyaW5nIHVwIGFueSBQVEVzIGZyb20gdGhlaXIgLVxcdTAwM2VtYXBfbW1hcCBjYWxsYmFjay4gTWFwcyB0aGF0XFxuKyAqIHBvcHVsYXRlIHRoZSB3aG9sZSBWTUEgZWFnZXJseSAoZS5nLiB2aWEgcmVtYXBfdm1hbGxvY19yYW5nZSgpKSBuZXZlciByZWFjaFxcbisgKiBoZXJlLlxcbisgKi9cXG4rc3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbitcXG4rXFx0aWYgKCFtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX21tYXBfZmF1bHQpXFxuK1xcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcbitcXHRyZXR1cm4gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9tbWFwX2ZhdWx0KG1hcCwgdm1mKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7XFxuIFxcdC5vcGVuXFx0XFx0PSBicGZfbWFwX21tYXBfb3BlbixcXG4gXFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxuK1xcdC5mYXVsdFxcdFxcdD0gYnBmX21hcF9tbWFwX2ZhdWx0LFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBicGZfbWFwX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5pbmRleCA1NWQzOTQ0Mzg3MDVhNi4uYjY1OTNmYjExMzViMjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTEwMDMsNiArMTAwMyw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxcXFxuK1xcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYXJyYXltYXBfbW1hcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS91c2R0XzEubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvdXNkdF8yLm8gXFxcXFxcbiBcXHRcXHQgI1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXFxuaW5kZXggM2Q5ZDJjZDc3NjRiZDMuLjE5MmQ1ZmNiN2E3NDhmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG5AQCAtMjg3LDYgKzI4Nyw3IEBAIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9jcnlwdG9fYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3NvY2ttYXBfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xwbV90cmllX21hcF9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfeGRwX2xiX2FyZ3A7XFxuK2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9hcnJheW1hcF9tbWFwX2FyZ3A7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xcbiBcXHR7IFxcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcXFwiUmluZyBidWZmZXJzIGJlbmNobWFya1xcXCIsIDAgfSxcXG5AQCAtMzA0LDYgKzMwNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XFxuIFxcdHsgXFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXFxcImJwZiBzb2NrbWFwIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3AsIDAsIFxcXCJMUE0gdHJpZSBtYXAgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF94ZHBfbGJfYXJncCwgMCwgXFxcIlhEUCBsb2FkLWJhbGFuY2VyIGJlbmNobWFya1xcXCIsIDAgfSxcXG4rXFx0eyBcXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLCAwLCBcXFwiYXJyYXltYXAtbW1hcCBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHt9LFxcbiB9O1xcbiBcXG5AQCAtNTgyLDYgKzU4NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX25vcDtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYXJyYXltYXBfbW1hcDtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfY291bnRfZ2xvYmFsLFxcbkBAIC02NjUsNiArNjY4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XFxuIFxcdFxcdTAwMjZiZW5jaF9scG1fdHJpZV9mcmVlLFxcbiBcXHRcXHUwMDI2YmVuY2hfYnBmX25vcCxcXG4gXFx0XFx1MDAyNmJlbmNoX3hkcF9sYixcXG4rXFx0XFx1MDAyNmJlbmNoX2FycmF5bWFwX21tYXAsXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2FycmF5bWFwX21tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYXJyYXltYXBfbW1hcC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzU2ZDgwYTg1Y2YwMWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmNcXG5AQCAtMCwwICsxLDE0NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gKi9cXG4rI2luY2x1ZGUgXFx1MDAzY2FyZ3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJiZW5jaC5oXFxcIlxcbitcXG4rLyogQmVuY2htYXJrIG1tYXAoKS9tdW5tYXAoKSBvZiBhbiBtbWFwLWFibGUgQlBGIGFycmF5IG1hcCBmcm9tIE4gdGhyZWFkcy4gKi9cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgY3R4IHtcXG4rXFx0aW50IG1hcF9mZDtcXG4rXFx0c2l6ZV90IG1tYXBfc3o7XFxuK30gY3R4O1xcbitcXG4rc3RhdGljIHN0cnVjdCB7XFxuK1xcdF9fdTMyIG5yX3RocmVhZHM7XFxuK1xcdF9fdTY0IG1hcF9zaXplO1xcbit9IGFyZ3MgPSB7XFxuK1xcdC5ucl90aHJlYWRzID0gMTYsXFxuK1xcdC5tYXBfc2l6ZSA9IDggKiAxMDI0ICogMTAyNCwgLyogOCBNaUIgKi9cXG4rfTtcXG4rXFxuK2VudW0ge1xcbitcXHRBUkdfTlJfVEhSRUFEUyA9IDUwMDAsXFxuK1xcdEFSR19NQVBfU0laRSA9IDUwMDEsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcXG4rXFx0eyBcXFwibnItdGhyZWFkc1xcXCIsIEFSR19OUl9USFJFQURTLCBcXFwiTlJfVEhSRUFEU1xcXCIsIDAsXFxuK1xcdFxcdFxcXCJOdW1iZXIgb2YgdGhyZWFkcyB0aGF0IG1tYXAvbXVubWFwIHRoZSBtYXAgKGRlZmF1bHQgMTYpXFxcIiB9LFxcbitcXHR7IFxcXCJtYXAtc2l6ZVxcXCIsIEFSR19NQVBfU0laRSwgXFxcIkJZVEVTXFxcIiwgMCxcXG4rXFx0XFx0XFxcIlNpemUgb2YgdGhlIEJQRiBhcnJheSBtYXAgaW4gYnl0ZXMgKGRlZmF1bHQgODM4ODYwOClcXFwiIH0sXFxuK1xcdHt9LFxcbit9O1xcbitcXG4rc3RhdGljIGVycm9yX3QgcGFyc2VfYXJnKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN3aXRjaCAoa2V5KSB7XFxuK1xcdGNhc2UgQVJHX05SX1RIUkVBRFM6XFxuK1xcdFxcdGFyZ3MubnJfdGhyZWFkcyA9IHN0cnRvdWwoYXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0aWYgKGFyZ3MubnJfdGhyZWFkcyA9PSAwKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiSW52YWxpZCBuci10aHJlYWRzOiAlc1xcXFxuXFxcIiwgYXJnKTtcXG4rXFx0XFx0XFx0YXJncF91c2FnZShzdGF0ZSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQVJHX01BUF9TSVpFOlxcbitcXHRcXHRhcmdzLm1hcF9zaXplID0gc3RydG91bGwoYXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0aWYgKGFyZ3MubWFwX3NpemUgPT0gMCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkludmFsaWQgbWFwLXNpemU6ICVzXFxcXG5cXFwiLCBhcmcpO1xcbitcXHRcXHRcXHRhcmdwX3VzYWdlKHN0YXRlKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBleHBvcnRlZCBpbnRvIGJlbmNobWFyayBydW5uZXIgKi9cXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwID0ge1xcbitcXHQub3B0aW9ucyA9IG9wdHMsXFxuK1xcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxcbit7XFxuK1xcdGlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBudW1iZXIgb2Ygd29ya2VyIHRocmVhZHMgaXMgY29udHJvbGxlZCBieSAtLW5yLXRocmVhZHMgYW5kXFxuK1xcdCAqIGRyaXZlcyB0aGUgZnJhbWV3b3JrJ3MgcHJvZHVjZXIgbWFjaGluZXJ5LCBzbyBwZXItcHJvZHVjZXIgc3RhdHNcXG4rXFx0ICogYXJlIHJlcG9ydGVkIGNvcnJlY3RseS5cXG4rXFx0ICovXFxuK1xcdGVudi5wcm9kdWNlcl9jbnQgPSBhcmdzLm5yX3RocmVhZHM7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIGhpdHM7XFxuK1xcbitzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpXFxuK3tcXG4rXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0XFx0dm9pZCAqYWRkcjtcXG4rXFxuK1xcdFxcdGFkZHIgPSBtbWFwKE5VTEwsIGN0eC5tbWFwX3N6LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgICAgTUFQX1NIQVJFRCwgY3R4Lm1hcF9mZCwgMCk7XFxuK1xcdFxcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtbWFwIGZhaWxlZDogJWRcXFxcblxcXCIsIC1lcnJubyk7XFxuK1xcdFxcdFxcdGV4aXQoMSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKG11bm1hcChhZGRyLCBjdHgubW1hcF9zeikpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtdW5tYXAgZmFpbGVkOiAlZFxcXFxuXFxcIiwgLWVycm5vKTtcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZoaXRzKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxcbit7XFxuK1xcdHJlcy1cXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFxcdTAwMjZoaXRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0dXAodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzLCAubWFwX2ZsYWdzID0gQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRsb25nIHBhZ2Vfc3ogPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XFxuK1xcdF9fdTMyIHZhbHVlX3NpemUgPSBzaXplb2YoX191NjQpO1xcbitcXHRfX3UzMiBtYXhfZW50cmllcztcXG4rXFxuK1xcdHNldHVwX2xpYmJwZigpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogbW1hcC1hYmxlIGFycmF5IG1hcHMgcm91bmQgdGhlIHZhbHVlIHNpemUgdXAgdG8gOCBieXRlcyBhbmQgZXhwb3NlXFxuK1xcdCAqIFBBR0VfQUxJR04obWF4X2VudHJpZXMgKiBlbGVtX3NpemUpIGJ5dGVzIHRvIHVzZXIgc3BhY2UuXFxuK1xcdCAqL1xcbitcXHRtYXhfZW50cmllcyA9IChhcmdzLm1hcF9zaXplICsgdmFsdWVfc2l6ZSAtIDEpIC8gdmFsdWVfc2l6ZTtcXG4rXFx0Y3R4Lm1tYXBfc3ogPSAoKF9fdTY0KW1heF9lbnRyaWVzICogdmFsdWVfc2l6ZSArIHBhZ2Vfc3ogLSAxKSBcXHUwMDI2XFxuK1xcdFxcdCAgICAgIH4ocGFnZV9zeiAtIDEpO1xcbitcXG4rXFx0Y3R4Lm1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWSwgXFxcIm1tYXBfYXJyYXlcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKF9fdTMyKSwgdmFsdWVfc2l6ZSwgbWF4X2VudHJpZXMsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmIChjdHgubWFwX2ZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBjcmVhdGUgbWFwOiAlZFxcXFxuXFxcIiwgLWVycm5vKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbitcXG4rXFx0cHJpbnRmKFxcXCJhcnJheSBtYXA6ICV1IGVudHJpZXMsIG1tYXAgc2l6ZSAlenUgYnl0ZXMsICV1IHRocmVhZHNcXFxcblxcXCIsXFxuK1xcdCAgICAgICBtYXhfZW50cmllcywgY3R4Lm1tYXBfc3osIGFyZ3MubnJfdGhyZWFkcyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9hcnJheW1hcF9tbWFwID0ge1xcbitcXHQubmFtZSA9IFxcXCJhcnJheW1hcC1tbWFwXFxcIixcXG4rXFx0LmFyZ3AgPSBcXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLFxcbitcXHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcXG4rXFx0LnNldHVwID0gc2V0dXAsXFxuK1xcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcXG4rXFx0Lm1lYXN1cmUgPSBtZWFzdXJlLFxcbitcXHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcXG4rXFx0LnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsXFxuK307XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9hcnJheW1hcF9tbWFwLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2VmZDQ0MWNkNjUzYTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaFxcbkBAIC0wLDAgKzEsMTUgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rc291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcXG4rXFxuK3NldCAtZXVmbyBwaXBlZmFpbFxcbitcXG4rZm9yIHQgaW4gMSA0IDggMTY7IGRvXFxuK2ZvciBzIGluIDEwNDg1NzYgODM4ODYwOCA2NzEwODg2NDsgZG9cXG4rc3VidGl0bGUgXFxcIm5yX3RocmVhZHM6ICR0LCBtYXBfc2l6ZTogJHNcXFwiXFxuK1xcdHN1bW1hcml6ZV9vcHMgXFxcImFycmF5bWFwLW1tYXA6IFxcXCIgXFxcXFxcbitcXHQgICAgXFxcIiQoJFJVTl9CRU5DSCAtLW5yLXRocmVhZHMgJHQgLS1tYXAtc2l6ZSAkcyBhcnJheW1hcC1tbWFwKVxcXCJcXG4rXFx0cHJpbnRmIFxcXCJcXFxcblxcXCJcXG4rZG9uZVxcbitkb25lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE2OjQ3LjM3OTc2Mzc3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ1NjIxMjM3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImJwZl9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYXJyYXlfbWFwX21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgcGFnZSBmYXVsdGluZyBmb3IgQlBGIGFycmF5IG1hcHMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gbm90IGVhZ2VybHkgbWFwIHRoZSBtZW1vcnkgYW5kIGFkZHMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGJwZl9tYXBfbW1hcF9mYXVsdGAgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzIG9uIGRlbWFuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgY3JlYXRpbmcgYW5kIG1tYXAtaW5nIGEgQlBGIGFycmF5IG1hcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGE4YjZmZGZlY2Q3ZjMxMTI2NzVmNzZmOGU4NTIwZWY5YjY5MDQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDE6MTY6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggZTA2NmY0NGE5YzA1ODAuLmI1MzZmM2M5ZTEwMzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTE0NSw2ICsxNDUsNyBAQCBzdHJ1Y3QgYnBmX21hcF9vcHMge1xuIFx0aW50ICgqbWFwX2RpcmVjdF92YWx1ZV9tZXRhKShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgICB1NjQgaW1tLCB1MzIgKm9mZik7XG4gXHRpbnQgKCptYXBfbW1hcCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuK1x0dm1fZmF1bHRfdCAoKm1hcF9tbWFwX2ZhdWx0KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG4gXHRfX3BvbGxfdCAoKm1hcF9wb2xsKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHQgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKTtcbiBcdHVuc2lnbmVkIGxvbmcgKCptYXBfZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuaW5kZXggMjQ4YjQ4MTgxNzhjZDEuLjE3MTFiZTU4MjkwN2RjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXG4rKysgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbkBAIC01NzYsNyArNTc2LDYgQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG4gc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4tXHRwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRpZiAoIShtYXAtXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTU4NSw4ICs1ODQsNDIgQEAgc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdCAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktXHUwMDNlbWFwLm1heF9lbnRyaWVzICogYXJyYXktXHUwMDNlZWxlbV9zaXplKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpLFxuLVx0XHRcdFx0ICAgdm1hLVx1MDAzZXZtX3Bnb2ZmICsgcGdvZmYpO1xuK1x0LypcbitcdCAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJ2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cFxuK1x0ICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IGFycmF5X21hcF9tbWFwX2ZhdWx0KCkgaW5zZXJ0IHBhZ2VzIG9uIGRlbWFuZC5cbitcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIHVzZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGZvciB1czsga2VlcFxuK1x0ICogdGhlbSB0byBwcmVzZXJ2ZSBiZWhhdmlvciAobm8gVk1BIGV4cGFuc2lvbiwgZXhjbHVkZWQgZnJvbSBjb3JlZHVtcCkuXG4rXHQgKi9cbitcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZtX2ZhdWx0X3QgYXJyYXlfbWFwX21tYXBfZmF1bHQoc3RydWN0IGJwZl9tYXAgKm1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbit7XG4rXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4rXHRwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHZvaWQgKmthZGRyO1xuK1xuK1x0LypcbitcdCAqIHZtZi1cdTAwM2VwZ29mZiBpcyB0aGUgcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBtYXBwaW5nICh2bWEtXHUwMDNldm1fcGdvZmYgcGx1c1xuK1x0ICogdGhlIG9mZnNldCBvZiB0aGUgZmF1bHRpbmcgYWRkcmVzcykuIFRoZSBkYXRhIHBhZ2VzIHN0YXJ0IGFmdGVyIHRoZVxuK1x0ICogYnBmX2FycmF5IGhlYWRlciwgaGVuY2UgdGhlIGV4dHJhIHBnb2ZmLiBUaGlzIG1pcnJvcnMgdGhlIG9mZnNldCB0aGF0XG4rXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgLi4uLCB2bWEtXHUwMDNldm1fcGdvZmYgKyBwZ29mZikgdXNlZCB0byBhcHBseS5cbitcdCAqL1xuK1x0a2FkZHIgPSBhcnJheV9tYXBfdm1hbGxvY19hZGRyKGFycmF5KSArXG4rXHRcdCgodTY0KSh2bWYtXHUwMDNlcGdvZmYgKyBwZ29mZikgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuK1xuK1x0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZShrYWRkcik7XG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXG4rXHRnZXRfcGFnZShwYWdlKTtcbitcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhcnJheV9tYXBfbWV0YV9lcXVhbChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWV0YTAsXG5AQCAtODEyLDYgKzg0NSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuIFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbiBcdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXG4gXHQubWFwX21tYXAgPSBhcnJheV9tYXBfbW1hcCxcbitcdC5tYXBfbW1hcF9mYXVsdCA9IGFycmF5X21hcF9tbWFwX2ZhdWx0LFxuIFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sXG4gXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG4gXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCAwZmY5ZTNhYTI5M2Q1Ny4uZmIwZTFmNTVjNDg3M2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0xMDc3LDkgKzEwNzcsMjYgQEAgc3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0XHRicGZfbWFwX3dyaXRlX2FjdGl2ZV9kZWMobWFwKTtcbiB9XG4gXG4rLypcbisgKiBDYWxsZWQgZm9yIG1hcHMgdGhhdCBwb3B1bGF0ZSB0aGVpciBtZW1vcnktbWFwcGVkIHJlZ2lvbiBsYXppbHksIGkuZS4gdGhhdFxuKyAqIHJldHVybiB3aXRob3V0IHdpcmluZyB1cCBhbnkgUFRFcyBmcm9tIHRoZWlyIC1cdTAwM2VtYXBfbW1hcCBjYWxsYmFjay4gTWFwcyB0aGF0XG4rICogcG9wdWxhdGUgdGhlIHdob2xlIFZNQSBlYWdlcmx5IChlLmcuIHZpYSByZW1hcF92bWFsbG9jX3JhbmdlKCkpIG5ldmVyIHJlYWNoXG4rICogaGVyZS5cbisgKi9cbitzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4re1xuK1x0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuK1xuK1x0aWYgKCFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9tbWFwX2ZhdWx0KVxuK1x0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1xuK1x0cmV0dXJuIG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX21tYXBfZmF1bHQobWFwLCB2bWYpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcbiBcdC5vcGVuXHRcdD0gYnBmX21hcF9tbWFwX29wZW4sXG4gXHQuY2xvc2VcdFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXG4rXHQuZmF1bHRcdFx0PSBicGZfbWFwX21tYXBfZmF1bHQsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGJwZl9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCA1NWQzOTQ0Mzg3MDVhNi4uYjY1OTNmYjExMzViMjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTEwMDMsNiArMTAwMyw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxuK1x0XHQgJChPVVRQVVQpL2JlbmNoX2FycmF5bWFwX21tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvdXNkdF8yLm8gXFxcbiBcdFx0ICNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkMy4uMTkyZDVmY2I3YTc0OGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yODcsNiArMjg3LDcgQEAgZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2NyeXB0b19hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zb2NrbWFwX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xwbV90cmllX21hcF9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF94ZHBfbGJfYXJncDtcbitleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3JpbmdidWZzX2FyZ3AsIDAsIFwiUmluZyBidWZmZXJzIGJlbmNobWFya1wiLCAwIH0sXG5AQCAtMzA0LDYgKzMwNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXCJicGYgc29ja21hcCBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9scG1fdHJpZV9tYXBfYXJncCwgMCwgXCJMUE0gdHJpZSBtYXAgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfeGRwX2xiX2FyZ3AsIDAsIFwiWERQIGxvYWQtYmFsYW5jZXIgYmVuY2htYXJrXCIsIDAgfSxcbitcdHsgXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLCAwLCBcImFycmF5bWFwLW1tYXAgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHt9LFxuIH07XG4gXG5AQCAtNTgyLDYgKzU4NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9ub3A7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9hcnJheW1hcF9tbWFwO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfY291bnRfZ2xvYmFsLFxuQEAgLTY2NSw2ICs2NjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2xwbV90cmllX2ZyZWUsXG4gXHRcdTAwMjZiZW5jaF9icGZfbm9wLFxuIFx0XHUwMDI2YmVuY2hfeGRwX2xiLFxuK1x0XHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcCxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2FycmF5bWFwX21tYXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNTZkODBhODVjZjAxZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmNcbkBAIC0wLDAgKzEsMTQ2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gKi9cbisjaW5jbHVkZSBcdTAwM2NhcmdwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbitcbisvKiBCZW5jaG1hcmsgbW1hcCgpL211bm1hcCgpIG9mIGFuIG1tYXAtYWJsZSBCUEYgYXJyYXkgbWFwIGZyb20gTiB0aHJlYWRzLiAqL1xuK1xuK3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbitcdGludCBtYXBfZmQ7XG4rXHRzaXplX3QgbW1hcF9zejtcbit9IGN0eDtcbitcbitzdGF0aWMgc3RydWN0IHtcbitcdF9fdTMyIG5yX3RocmVhZHM7XG4rXHRfX3U2NCBtYXBfc2l6ZTtcbit9IGFyZ3MgPSB7XG4rXHQubnJfdGhyZWFkcyA9IDE2LFxuK1x0Lm1hcF9zaXplID0gOCAqIDEwMjQgKiAxMDI0LCAvKiA4IE1pQiAqL1xuK307XG4rXG4rZW51bSB7XG4rXHRBUkdfTlJfVEhSRUFEUyA9IDUwMDAsXG4rXHRBUkdfTUFQX1NJWkUgPSA1MDAxLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4rXHR7IFwibnItdGhyZWFkc1wiLCBBUkdfTlJfVEhSRUFEUywgXCJOUl9USFJFQURTXCIsIDAsXG4rXHRcdFwiTnVtYmVyIG9mIHRocmVhZHMgdGhhdCBtbWFwL211bm1hcCB0aGUgbWFwIChkZWZhdWx0IDE2KVwiIH0sXG4rXHR7IFwibWFwLXNpemVcIiwgQVJHX01BUF9TSVpFLCBcIkJZVEVTXCIsIDAsXG4rXHRcdFwiU2l6ZSBvZiB0aGUgQlBGIGFycmF5IG1hcCBpbiBieXRlcyAoZGVmYXVsdCA4Mzg4NjA4KVwiIH0sXG4rXHR7fSxcbit9O1xuK1xuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzd2l0Y2ggKGtleSkge1xuK1x0Y2FzZSBBUkdfTlJfVEhSRUFEUzpcbitcdFx0YXJncy5ucl90aHJlYWRzID0gc3RydG91bChhcmcsIE5VTEwsIDApO1xuK1x0XHRpZiAoYXJncy5ucl90aHJlYWRzID09IDApIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJJbnZhbGlkIG5yLXRocmVhZHM6ICVzXFxuXCIsIGFyZyk7XG4rXHRcdFx0YXJncF91c2FnZShzdGF0ZSk7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFSR19NQVBfU0laRTpcbitcdFx0YXJncy5tYXBfc2l6ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMCk7XG4rXHRcdGlmIChhcmdzLm1hcF9zaXplID09IDApIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJJbnZhbGlkIG1hcC1zaXplOiAlc1xcblwiLCBhcmcpO1xuK1x0XHRcdGFyZ3BfdXNhZ2Uoc3RhdGUpO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwID0ge1xuK1x0Lm9wdGlvbnMgPSBvcHRzLFxuK1x0LnBhcnNlciA9IHBhcnNlX2FyZyxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHZhbGlkYXRlKHZvaWQpXG4re1xuK1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgbnVtYmVyIG9mIHdvcmtlciB0aHJlYWRzIGlzIGNvbnRyb2xsZWQgYnkgLS1uci10aHJlYWRzIGFuZFxuK1x0ICogZHJpdmVzIHRoZSBmcmFtZXdvcmsncyBwcm9kdWNlciBtYWNoaW5lcnksIHNvIHBlci1wcm9kdWNlciBzdGF0c1xuK1x0ICogYXJlIHJlcG9ydGVkIGNvcnJlY3RseS5cbitcdCAqL1xuK1x0ZW52LnByb2R1Y2VyX2NudCA9IGFyZ3MubnJfdGhyZWFkcztcbit9XG4rXG4rc3RhdGljIGxvbmcgaGl0cztcbitcbitzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpXG4re1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0dm9pZCAqYWRkcjtcbitcbitcdFx0YWRkciA9IG1tYXAoTlVMTCwgY3R4Lm1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdFx0ICAgIE1BUF9TSEFSRUQsIGN0eC5tYXBfZmQsIDApO1xuK1x0XHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwibW1hcCBmYWlsZWQ6ICVkXFxuXCIsIC1lcnJubyk7XG4rXHRcdFx0ZXhpdCgxKTtcbitcdFx0fVxuK1x0XHRpZiAobXVubWFwKGFkZHIsIGN0eC5tbWFwX3N6KSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIm11bm1hcCBmYWlsZWQ6ICVkXFxuXCIsIC1lcnJubyk7XG4rXHRcdFx0ZXhpdCgxKTtcbitcdFx0fVxuK1x0XHRhdG9taWNfaW5jKFx1MDAyNmhpdHMpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxuK3tcbitcdHJlcy1cdTAwM2VoaXRzID0gYXRvbWljX3N3YXAoXHUwMDI2aGl0cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cywgLm1hcF9mbGFncyA9IEJQRl9GX01NQVBBQkxFKTtcbitcdGxvbmcgcGFnZV9zeiA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcbitcdF9fdTMyIHZhbHVlX3NpemUgPSBzaXplb2YoX191NjQpO1xuK1x0X191MzIgbWF4X2VudHJpZXM7XG4rXG4rXHRzZXR1cF9saWJicGYoKTtcbitcbitcdC8qXG4rXHQgKiBtbWFwLWFibGUgYXJyYXkgbWFwcyByb3VuZCB0aGUgdmFsdWUgc2l6ZSB1cCB0byA4IGJ5dGVzIGFuZCBleHBvc2VcbitcdCAqIFBBR0VfQUxJR04obWF4X2VudHJpZXMgKiBlbGVtX3NpemUpIGJ5dGVzIHRvIHVzZXIgc3BhY2UuXG4rXHQgKi9cbitcdG1heF9lbnRyaWVzID0gKGFyZ3MubWFwX3NpemUgKyB2YWx1ZV9zaXplIC0gMSkgLyB2YWx1ZV9zaXplO1xuK1x0Y3R4Lm1tYXBfc3ogPSAoKF9fdTY0KW1heF9lbnRyaWVzICogdmFsdWVfc2l6ZSArIHBhZ2Vfc3ogLSAxKSBcdTAwMjZcbitcdFx0ICAgICAgfihwYWdlX3N6IC0gMSk7XG4rXG4rXHRjdHgubWFwX2ZkID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX0FSUkFZLCBcIm1tYXBfYXJyYXlcIixcbitcdFx0XHRcdCAgICBzaXplb2YoX191MzIpLCB2YWx1ZV9zaXplLCBtYXhfZW50cmllcyxcbitcdFx0XHRcdCAgICBcdTAwMjZvcHRzKTtcbitcdGlmIChjdHgubWFwX2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBjcmVhdGUgbWFwOiAlZFxcblwiLCAtZXJybm8pO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK1xuK1x0cHJpbnRmKFwiYXJyYXkgbWFwOiAldSBlbnRyaWVzLCBtbWFwIHNpemUgJXp1IGJ5dGVzLCAldSB0aHJlYWRzXFxuXCIsXG4rXHQgICAgICAgbWF4X2VudHJpZXMsIGN0eC5tbWFwX3N6LCBhcmdzLm5yX3RocmVhZHMpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYXJyYXltYXBfbW1hcCA9IHtcbitcdC5uYW1lID0gXCJhcnJheW1hcC1tbWFwXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2FycmF5bWFwX21tYXBfYXJncCxcbitcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuK1x0LnNldHVwID0gc2V0dXAsXG4rXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4rXHQubWVhc3VyZSA9IG1lYXN1cmUsXG4rXHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcbitcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2VmZDQ0MWNkNjUzYTJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2hcbkBAIC0wLDAgKzEsMTUgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbitzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxuK1xuK3NldCAtZXVmbyBwaXBlZmFpbFxuK1xuK2ZvciB0IGluIDEgNCA4IDE2OyBkb1xuK2ZvciBzIGluIDEwNDg1NzYgODM4ODYwOCA2NzEwODg2NDsgZG9cbitzdWJ0aXRsZSBcIm5yX3RocmVhZHM6ICR0LCBtYXBfc2l6ZTogJHNcIlxuK1x0c3VtbWFyaXplX29wcyBcImFycmF5bWFwLW1tYXA6IFwiIFxcXG4rXHQgICAgXCIkKCRSVU5fQkVOQ0ggLS1uci10aHJlYWRzICR0IC0tbWFwLXNpemUgJHMgYXJyYXltYXAtbW1hcClcIlxuK1x0cHJpbnRmIFwiXFxuXCJcbitkb25lXG4rZG9uZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTY6NDcuMzc5NzY1ODMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3MTQwMTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBBcnJheSBNYXAgbW1hcCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHRoaXMgaXMgYSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gQlBGIGFycmF5IG1hcCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvcmUgaWRlYSBpcyBzaGlmdGluZyBmcm9tIGVhZ2VybHkgbWFwcGluZyB0aGUgbWVtb3J5IHdpdGggYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGluIGBhcnJheV9tYXBfbW1hcGAgdG8gYSBsYXp5LCBkZW1hbmQtcGFnZWQgYXBwcm9hY2guIFRoZSB1c2Ugb2YgYFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUGAgZmxhZ3MgaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgdGhpcywgYWxvbmcgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgYG1hcF9tbWFwX2ZhdWx0YCBjYWxsYmFjayB3aGljaCB3aWxsIG5vdyBoYW5kbGUgdGhlIHBhZ2UgZmF1bHRzLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgc2hpZnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbiBkZXRhaWwuIEkga25vdyB0aGlzIHdpbGwgYWZmZWN0IHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1c2FnZS5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgbWFraW5nIEJQRiBhcnJheSBtYXBzIGJlaGF2ZSBtb3JlIGxpa2UgdHlwaWNhbCBtZW1vcnkgcmVnaW9ucywgd2hlcmUgcGFnZXMgYXJlIG9ubHkgYWxsb2NhdGVkIGFuZCBtYXBwZWQgd2hlbiB0aGV5J3JlIGFjdHVhbGx5IGFjY2Vzc2VkLiBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZS4gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIHNjZW5hcmlvczogV2hhdCdzIHRoZSBpbXBhY3Qgb2YgdGhlIGluaXRpYWwgYWNjZXNzIG92ZXJoZWFkPyBIb3cgZG9lcyB0aGlzIGluZmx1ZW5jZSBvdmVyYWxsIG1lbW9yeSBjb25zdW1wdGlvbj8gSXMgaXQgZ29pbmcgdG8gYmUgYSB3aW4gaW4gdGVybXMgb2YgcmVkdWNlZCBtZW1vcnkgZm9vdHByaW50IGZvciBsYXJnZSBhcnJheXMsIG9yIHdpbGwgdGhlIGFkZGVkIGZhdWx0IGhhbmRsaW5nIGNvc3Qgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIGluIGNlcnRhaW4gd29ya2xvYWRzPyBUaGlzIG5lZWRzIHNvbWUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLlxuXG5UaGUgZmFjdCB0aGF0IHRoZXkndmUgbW9kaWZpZWQgYGJwZl9tYXBfbW1hcGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBob29rIHVwIHRoZSBmYXVsdCBoYW5kbGVyIGluIGBicGZfbWFwX2RlZmF1bHRfdm1vcHNgIGlzIHRoZSBrZXkuIEl0IG1lYW5zIHRoZXkncmUgaW50ZWdyYXRpbmcgdGhlIGxhenkgbWFwcGluZyB3aXRoaW4gdGhlIEJQRiBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZXkndmUgdXBkYXRlZCB0aGUgYG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX21tYXBfZmF1bHRgIGNhbGwuXG5cblJpZ2h0LCBzbyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGFycmF5X21hcF9tbWFwYCwgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBicGZfbWFwX21tYXBfZmF1bHRgLiBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBgZ3JlcGAgZm9yIGBicGZfbWFwX21tYXBfZmF1bHRgIGFuZCBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlc2UgYXJlIGJlaW5nIGNhbGxlZCBmcm9tIGFuZCB0byBzZWUgd2hhdCBpbnRlcmFjdGlvbnMgZXhpc3QuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG1hcCBmYXVsdHMgYXJlIHRyaWdnZXJlZCwgaGFuZGxlZCwgYW5kIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIG9uIGRlbWFuZC4gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgc3RhcnQgdG8gYW5hbHl6aW5nIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTMxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTY6NTMuNjUxMTY5MzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5MTE3MDAxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX21tYXBfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MTA3Mj1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDg1LSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEwODY6c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwODcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTA5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwOTgtXFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA5OTpcXHQuZmF1bHRcXHRcXHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTAwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE2OjU3LjA0MjM0NTc4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzk0ODAzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWJ1Z2dpbmcgSW5pdGlhdGl2ZTogVGhlIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIHByb2JsZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBsb2dzLCBhbmQgdGhlIGJlc3QgdG9vbCBmb3IgdGhhdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBncmVwYC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGlzc3VlIG9yIGZ1bmN0aW9uIGNhbGwgdGhhdCdzIGNhdXNpbmcgdGhpcyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLiBUaGlzIGxpa2VseSBwb2ludHMgdG8gYSBtZW1vcnktcmVsYXRlZCBpc3N1ZSwgcHJvYmFibHkgd2l0aCBtZW1vcnkgbWFwcGluZyBhbmQgaG93IGFuIGBhcnJheV9tYXBgIGZ1bmN0aW9uIGlzIGludGVyYWN0aW5nIHdpdGggaXQuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIGh1bnQgZG93biBpbnN0YW5jZXMgb2YgdGhhdCBzcGVjaWZpYyB0ZXJtLCBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHN0YXJ0aW5nIHBvaW50IOKAkyB3aGVyZSB0aGlzIHNwZWNpZmljIGVycm9yIG9yIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBvciByZWZlcmVuY2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHJvb3QgY2F1c2UuIEknbSBob3BpbmcgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIHByb2JsZW1hdGljIGxvZ2ljIHF1aWNrbHkuIExldCdzIHNlZSB3aGF0IGBncmVwYCB1bmNvdmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjAwLjE4MTgyODM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzYwNTU5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcnJheW1hcC5jPTU3Nj1zdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTU4OC1cXHQgKiBUaGUgYmFja2luZyBtZW1vcnkgaXMgdm1hbGxvYydlZCB1cCBmcm9udCwgc28gaW5zdGVhZCBvZiB3aXJpbmcgdXBcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NTg5OlxcdCAqIGV2ZXJ5IFBURSBoZXJlIHdlIGxldCBhcnJheV9tYXBfbW1hcF9mYXVsdCgpIGluc2VydCBwYWdlcyBvbiBkZW1hbmQuXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTU5MC1cXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01OTctXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjU5ODpzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01OTktXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTgzND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NDctXFx0Lm1hcF9tbWFwID0gYXJyYXlfbWFwX21tYXAsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg0ODpcXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODQ5LVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMToxNzowMi40NTc4OTI4OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgwMTk4NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkZ1bmN0aW9uYWwgUGF0Y2ggQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHNvbGlkIOKAkyBpdCdzIGZ1bmN0aW9uYWwgYW5kIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgY29kZSBwYXRoIGl0IG1vZGlmaWVzIGlzIHJlYWNoYWJsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBmb2N1cyBuZWVkcyB0byBiZSBsYXNlci1zaGFycCBvbiBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGRpZyBpbnRvLiBJdCBsb29rcyBsaWtlIGBhcnJheV9tYXBfbW1hcGAgaXRzZWxmIGhhcyBhbHNvIHNlZW4gc29tZSBtb2RpZmljYXRpb25zLCBzbyB0aGF0J3Mgd29ydGgga2VlcGluZyBhbiBleWUgb24gYXMgd2VsbC5cblxuTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCwgdGhhdCdzIGEgZ2l2ZW4uIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLCBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciwgbW9yZSBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBwYXRjaCBkZXBlbmRzIG9uLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGNvbmZpcm1pbmcgdGhpcyBjaGFuZ2Ugd29ya3MgYXMgZXhwZWN0ZWQgaW4gdmFyaW91cyBzZXR1cHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBnb2luZyB0byBwbGF5IG5pY2Ugd2l0aCBhbGwgb3VyIGRlcGxveW1lbnQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc3NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjA2LjIzODA5NDM3NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM0Njc0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjA4LjM3Mjc3NDM2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjAwNDI0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgYXJyYXltYXAuY2AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBhcnJheW1hcC5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBhIHBhcnRpY3VsYXIgY29uZGl0aW9uLiBUaGlzIGNvdWxkIGJlIGEgbWFjcm8sIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGljaCBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgYWN0dWFsbHkgaW5jbHVkZWQgaW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25zIGFyb3VuZCBjb21waWxhdGlvbiBvZiB0aGlzIGZpbGUgaXMgZm91bmRhdGlvbmFsIGJlZm9yZSBjb250aW51aW5nLiBJIG5lZWQgdG8ga25vdyB3aHkgYW5kIGhvdyBpdCdzIGluY2x1ZGVkLCBvciBleGNsdWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjExLjAzMjgxODg4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MDgzNjI3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcnJheW1hcC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYz03OT1zdGF0aWMgdm9pZCB0ZXN0X2FycmF5X21hcCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xMzAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzoxMzE6XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYXJyYXltYXBfb3V0cHV0LCBleHBlY3RlZF90b3RhbCwgXFxcImFycmF5X291dHB1dFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTMyLVxcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNwdSArIDEsIHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcGVyY3B1X3ZhbCwgXFxcInBlcmNwdV92YWxcXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jPTUwPWNoZWNrX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy01Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzo1ODp1MzIgYXJyYXltYXBfb3V0cHV0ID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy01OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jPTYxPWludCB0ZXN0X3BrdF9hY2Nlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNjgtXFx0XFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFxcdTAwMjZhcnJheW1hcCwgdW51c2VkX3N1YnByb2csIFxcdTAwMjZkYXRhLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzo2OTpcXHRhcnJheW1hcF9vdXRwdXQgPSBkYXRhLm91dHB1dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy03MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTc6MTMuNjIzNjYyNzczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MjA1OTQ0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gVGhhdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50LCB0aGUga2V5c3RvbmUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIGtub2JzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBCUEYgc3lzY2FsbCBiZWhhdmlvciwgZXZlbiBpbmRpcmVjdGx5PyBJIGNhbid0IGJlIHN1cmUsIEkgc2hvdWxkIHJlYWxseSBjaGVjay5cblxuTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBzb3VyY2UgY29kZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIHN5c2NhbGwncyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHZhcmlvdXMgb3RoZXIgY29tcGlsYXRpb24gb3B0aW9ucyBvciBrZXJuZWwgc2V0dGluZ3MuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gdW5jb3ZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6OTA0MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjIxLjI0NDI1OTQ0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNDc0MTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjYWxsLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9jYWNoZWZpbGVzLnJzdD0zOTY9Y2lyY3Vtc3RhbmNlcyB0aGUgY2FjaGluZyBjb2RlIGlzIHJ1bm5pbmcgaW4gdGhlIHNlY3VyaXR5IGNvbnRleHQgb2Ygd2hhdGV2ZXJcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy5yc3Q6Mzk3OnByb2Nlc3MgaXNzdWVkIHRoZSBvcmlnaW5hbCBzeXNjYWxsIG9uIHRoZSBuZXRmcy5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy5yc3QtMzk4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0PTkwPW9mIGZ0cmFjZS4gSGVyZSBpcyBhIGxpc3Qgb2Ygc29tZSBvZiB0aGUga2V5IGZpbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE4Ni1cXHRiZWZvcmUgYSB3YWl0ZXIgaXMgd29rZW4gdXAuIFRoYXQgaXMsIGlmIGFuIGFwcGxpY2F0aW9uIGNhbGxzIGFcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTg3OlxcdGJsb2NraW5nIHJlYWQgc3lzY2FsbCBvbiBvbmUgb2YgdGhlIHBlcl9jcHUgdHJhY2VfcGlwZV9yYXcgZmlsZXMsIGl0XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE4OC1cXHR3aWxsIGJsb2NrIHVudGlsIHRoZSBnaXZlbiBhbW91bnQgb2YgZGF0YSBzcGVjaWZpZWQgYnkgYnVmZmVyX3BlcmNlbnRcXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9yc2VxLnJzdD0yMTY9b3BlcmF0aW9uLlxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9yc2VxLnJzdC0yMTctXFxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL3JzZXEucnN0OjIxODpJZiB0aGUgdGhyZWFkIGlzc3VlcyBhIHN5c2NhbGwgb3RoZXIgdGhhbiByc2VxX3NsaWNlX3lpZWxkKDIpIHdpdGhpbiB0aGVcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvcnNlcS5yc3QtMjE5LWdyYW50ZWQgdGltZXNsaWNlIGV4dGVuc2lvbiwgdGhlIGdyYW50IGlzIGFsc28gcmV2b2tlZCBhbmQgdGhlIENQVSBpc1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zMDU9c3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X3RocmVhZF9jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMxOC1cXHQgKiBUbyBhbGxvdyB0aGUgc3lzY2FsbHM6c3lzX2V4aXRfZXhlY3ZlIHRyYWNlcG9pbnQgd2UgbmVlZCB0byBwcmVzZXJ2ZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MzE5OlxcdCAqIHN5c2NhbGxubywgYnV0IGRvIG5vdCBuZWVkIG9yaWdfeDAgb3IgdGhlIG9yaWdpbmFsIEdQUnMuXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zMjAtXFx0ICovXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTg4LS8qXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaDo4OTogKiBJZiBwdF9yZWdzLnN5c2NhbGxubyA9PSBOT19TWVNDQUxMLCB0aGVuIHRoZSB0aHJlYWQgaXMgbm90IGV4ZWN1dGluZ1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtOTAtICogYSBzeXNjYWxsIC0tIGkuZS4sIGl0cyBtb3N0IHJlY2VudCBlbnRyeSBpbnRvIHRoZSBrZXJuZWwgZnJvbVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaD0xNTY9c3RydWN0IHB0X3JlZ3Mge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xNjYtXFx0dTY0IG9yaWdfeDA7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaDoxNjc6XFx0czMyIHN5c2NhbGxubztcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTE2OC1cXHR1MzIgcG1yO1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaD0xNzc9c3RhdGljIGlubGluZSBib29sIGluX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgY29uc3QgKnJlZ3MpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xNzgte1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg6MTc5OlxcdHJldHVybiByZWdzLVxcdTAwM2VzeXNjYWxsbm8gIT0gTk9fU1lTQ0FMTDtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTE4MC19XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHZvaWQgZm9yZ2V0X3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xODMte1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg6MTg0OlxcdHJlZ3MtXFx1MDAzZXN5c2NhbGxubyA9IE5PX1NZU0NBTEw7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xODUtfVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmg9MjA9c3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgtMjIte1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oOjIzOlxcdHJldHVybiByZWdzLVxcdTAwM2VzeXNjYWxsbm87XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgtMjQtfVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmg9NjQ9c3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oLTY3LXtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaDo2ODpcXHRyZWdzLVxcdTAwM2VzeXNjYWxsbm8gPSBucjtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaC02OS1cXHRpZiAobnIgPT0gLTEpIHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlPTEwPUNGTEFHU19SRU1PVkVfcmV0dXJuX2FkZHJlc3MubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUtMTMtIyBjaGVja3MgZHVlIHRvIHJhbmRvbWl6ZV9rc3RhY2tfb2Zmc2V0LlxcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlOjE0OkNGTEFHU19SRU1PVkVfc3lzY2FsbC5vXFx0ID0gLWZzdGFjay1wcm90ZWN0b3IgLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGU6MTU6Q0ZMQUdTX3N5c2NhbGwub1xcdCs9IC1mbm8tc3RhY2stcHJvdGVjdG9yXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUtMTYtXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZT0yOT1vYmoteVxcdFxcdFxcdDo9IGRlYnVnLW1vbml0b3JzLm8gZW50cnkubyBpcnEubyBmcHNpbWQub1xcdFxcdFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlLTM1LVxcdFxcdFxcdCAgIHNtcC5vIHNtcF9zcGluX3RhYmxlLm8gdG9wb2xvZ3kubyBzbWNjYy1jYWxsLm9cXHRcXFxcXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGU6MzY6XFx0XFx0XFx0ICAgc3lzY2FsbC5vIHByb3Rvbi1wYWNrLm8gaWRsZS5vIHBhdGNoaW5nLm8gcGkvXFx0XFxcXFxcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlLTM3LVxcdFxcdFxcdCAgIHJzaS5vIGp1bXBfbGFiZWwub1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYz0yNz1pbnQgbWFpbih2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYy03NS0gIERFRklORShTX1BTVEFURSxcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcHN0YXRlKSk7XFxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYzo3NjogIERFRklORShTX1NZU0NBTExOTyxcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3lzY2FsbG5vKSk7XFxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYy03Ny0gIERFRklORShTX1NERUlfVFRCUjEsXFx0XFx0b2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNkZWlfdHRicjEpKTtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jPTczNj1zdGF0aWMgaW50IHN5c3RlbV9jYWxsX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTczOS17XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6NzQwOlxcdHJldHVybiBtZW1idWZfc3RvcmUoXFx1MDAyNnRvLCB0YXNrX3B0X3JlZ3ModGFyZ2V0KS1cXHUwMDNlc3lzY2FsbG5vKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy03NDEtfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM9NzQzPXN0YXRpYyBpbnQgc3lzdGVtX2NhbGxfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzQ3LXtcXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzo3NDg6XFx0aW50IHN5c2NhbGxubyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpLVxcdTAwM2VzeXNjYWxsbm87XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzQ5LVxcdGludCByZXQ7XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzUwLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjc1MTpcXHRyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oXFx1MDAyNnBvcywgXFx1MDAyNmNvdW50LCBcXHUwMDI2a2J1ZiwgXFx1MDAyNnVidWYsIFxcdTAwMjZzeXNjYWxsbm8sIDAsIC0xKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy03NTItXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc1NC1cXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzo3NTU6XFx0dGFza19wdF9yZWdzKHRhcmdldCktXFx1MDAzZXN5c2NhbGxubyA9IHN5c2NhbGxubztcXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy03NTYtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jPTIyMzU9bG9uZyBjb21wYXRfYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgY29tcGF0X2xvbmdfdCByZXF1ZXN0LFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtMjI3My1cXHRcXHRjYXNlIENPTVBBVF9QVFJBQ0VfU0VUX1NZU0NBTEw6XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6MjI3NDpcXHRcXHRcXHR0YXNrX3B0X3JlZ3MoY2hpbGQpLVxcdTAwM2VzeXNjYWxsbm8gPSBkYXRhO1xcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTIyNzUtXFx0XFx0XFx0cmV0ID0gMDtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jPTI0MTE9aW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy0yNDI2LVxcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjI0Mjc6XFx0XFx0dHJhY2Vfc3lzX2VudGVyKHJlZ3MsIHJlZ3MtXFx1MDAzZXN5c2NhbGxubyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtMjQyOC1cXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzoyNDI5OlxcdGF1ZGl0X3N5c2NhbGxfZW50cnkocmVncy1cXHUwMDNlc3lzY2FsbG5vLCByZWdzLVxcdTAwM2VvcmlnX3gwLCByZWdzLVxcdTAwM2VyZWdzWzFdLFxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTI0MzAtXFx0XFx0XFx0ICAgIHJlZ3MtXFx1MDAzZXJlZ3NbMl0sIHJlZ3MtXFx1MDAzZXJlZ3NbM10pO1xcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTI0MzEtXFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6MjQzMjpcXHRyZXR1cm4gcmVncy1cXHUwMDNlc3lzY2FsbG5vO1xcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTI0MzMtfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTYyPXN0YXRpYyB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTY3LVxcdHJlZ3MtXFx1MDAzZW9yaWdfeDAgPSByZWdzLVxcdTAwM2VyZWdzWzBdO1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzo2ODpcXHRyZWdzLVxcdTAwM2VzeXNjYWxsbm8gPSBzY25vO1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy02OS1cXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvTWFrZWZpbGU9ND1vYmoteSArPSBoZWFkLm8gZW50cnkubyBhdG9taWMubyBzaWduYWwubyB0cmFwcy5vIGlycS5vIHRpbWUubyB2ZHNvLm8gdmRzby9cXG5hcmNoL2Nza3kva2VybmVsL01ha2VmaWxlOjU6b2JqLXkgKz0gcG93ZXIubyBzeXNjYWxsLm8gc3lzY2FsbF90YWJsZS5vIHNldHVwLm9cXG5hcmNoL2Nza3kva2VybmVsL01ha2VmaWxlLTYtb2JqLXkgKz0gcHJvY2Vzcy5vIGNwdS1wcm9iZS5vIHB0cmFjZS5vIHN0YWNrdHJhY2Uub1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTEwPW9iai15XFx0XFx0Kz0gaGVhZC5vIGNwdS1wcm9iZS5vIGNhY2hlaW5mby5vIGVudi5vIHNldHVwLm8gZW50cnkubyBnZW5leC5vIFxcXFxcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGUtMTEtXFx0XFx0ICAgdHJhcHMubyBpcnEubyBpZGxlLm8gcHJvY2Vzcy5vIGRtYS5vIG1lbS5vIHJlc2V0Lm8gc3dpdGNoLm8gXFxcXFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZToxMjpcXHRcXHQgICBlbGYubyBzeXNjYWxsLm8gc2lnbmFsLm8gdGltZS5vIHRvcG9sb2d5Lm8gaW5zdC5vIHB0cmFjZS5vIHZkc28ubyBcXFxcXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTEzLVxcdFxcdCAgIGFsdGVybmF0aXZlLm8ga2RlYnVnZnMubyB1bndpbmQub1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTI0PUNGTEFHU19tb2R1bGUub1xcdFxcdCs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIG92ZXJyaWRlLWluaXQpXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjI1OkNGTEFHU19zeXNjYWxsLm9cXHQrPSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCBvdmVycmlkZS1pbml0KVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZS0yNi1DRkxBR1NfdHJhcHMub1xcdFxcdCs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIG92ZXJyaWRlLWluaXQpXFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0Lmg9NDQ9ZW51bSBzcGVjX29wIHtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaC00Ny1cXHRqcl9vcCwgamFscl9vcCwgbW92el9vcCwgbW92bl9vcCxcXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0Lmg6NDg6XFx0c3lzY2FsbF9vcCwgYnJlYWtfb3AsIHNwaW1fb3AsIHN5bmNfb3AsXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oLTQ5LVxcdG1maGlfb3AsIG10aGlfb3AsIG1mbG9fb3AsIG10bG9fb3AsXFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0Lmg9NDQyPWVudW0gbW1fMzJheGZfbWlub3Jfb3Age1xcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oLTQ1OC1cXHRtbV9zeW5jX29wID0gMHgxYWQsXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oOjQ1OTpcXHRtbV9zeXNjYWxsX29wID0gMHgyMmQsXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oLTQ2MC1cXHRtbV93YWl0X29wID0gMHgyNGQsXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlPTg9b2JqLXlcXHRcXHQrPSBoZWFkLm8gYnJhbmNoLm8gY21weGNoZy5vIGVsZi5vIGVudHJ5Lm8gZ2VuZXgubyBpZGxlLm8gaXJxLm8gXFxcXFxcbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUtOS1cXHRcXHQgICBwcm9jZXNzLm8gcHJvbS5vIHB0cmFjZS5vIHJlc2V0Lm8gc2V0dXAubyBzaWduYWwubyBcXFxcXFxuYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZToxMDpcXHRcXHQgICBzeXNjYWxsLm8gdGltZS5vIHRvcG9sb2d5Lm8gdHJhcHMubyB1bmFsaWduZWQubyB3YXRjaC5vIFxcXFxcXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlLTExLVxcdFxcdCAgIHZkc28ubyBjYWNoZWluZm8ub1xcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TPTI1PU5FU1RFRChoYW5kbGVfc3lzLCBQVF9TSVpFLCBzcClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUy0zMS1cXG5hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlM6MzI6XFx0bHdcXHR0MSwgUFRfRVBDKHNwKVxcdFxcdCMgc2tpcCBzeXNjYWxsIG9uIHJldHVyblxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUy0zMy1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUz0yNj1ORVNURUQoaGFuZGxlX3N5c24zMiwgUFRfU0laRSwgc3ApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMtMzgtI2lmbmRlZiBDT05GSUdfTUlQUzMyX08zMlxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUzozOTpcXHRsZFxcdHQxLCBQVF9FUEMoc3ApXFx0XFx0IyBza2lwIHN5c2NhbGwgb24gcmV0dXJuXFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TLTQwLVxcdGRhZGRpdVxcdHQxLCA0XFx0XFx0XFx0IyBza2lwIHRvIG5leHQgaW5zdHJ1Y3Rpb25cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uNjQuUz0yOD1ORVNURUQoaGFuZGxlX3N5czY0LCBQVF9TSVpFLCBzcClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uNjQuUy00MS0jaWYgIWRlZmluZWQoQ09ORklHX01JUFMzMl9PMzIpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19NSVBTMzJfTjMyKVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uNjQuUzo0MjpcXHRsZFxcdHQxLCBQVF9FUEMoc3ApXFx0XFx0IyBza2lwIHN5c2NhbGwgb24gcmV0dXJuXFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW42NC5TLTQzLVxcdGRhZGRpdVxcdHQxLCA0XFx0XFx0XFx0IyBza2lwIHRvIG5leHQgaW5zdHJ1Y3Rpb25cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUz0yOD1ORVNURUQoaGFuZGxlX3N5cywgUFRfU0laRSwgc3ApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMtMzMtXFx0LnNldFxcdGF0XFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TOjM0OlxcdGxkXFx0dDEsIFBUX0VQQyhzcClcXHRcXHQjIHNraXAgc3lzY2FsbCBvbiByZXR1cm5cXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMtMzUtXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYy00NS0vKlxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jOjQ2OiAqIEZvciBoaXN0b3JpYyByZWFzb25zIHRoZSBwaXBlKDIpIHN5c2NhbGwgb24gTUlQUyBoYXMgYW4gdW51c3VhbCBjYWxsaW5nXFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMtNDctICogY29udmVudGlvbi5cXHRJdCByZXR1cm5zIHJlc3VsdHMgaW4gcmVnaXN0ZXJzICR2MCAvICR2MSB3aGljaCBtZWFucyB0aGVyZVxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM9NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpbnNuIGluc25fdGFibGVfTU1baW5zbl9pbnZhbGlkXSA9IHtcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pY3JvbWlwcy5jLTEyMy1cXHRbaW5zbl9kaW5zbV1cXHQ9IHswLCAwfSxcXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYzoxMjQ6XFx0W2luc25fc3lzY2FsbF1cXHQ9IHtNKG1tX3Bvb2wzMmFfb3AsIDAsIDAsIDAsIG1tX3N5c2NhbGxfb3AsIG1tX3Bvb2wzMmF4Zl9vcCksIFNDSU1NfSxcXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYy0xMjUtXFx0W2luc25fYmJpdDBdXFx0PSB7MCwgMH0sXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmM9NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbnNuIGluc25fdGFibGVbaW5zbl9pbnZhbGlkXSA9IHtcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pcHMuYy0xOTUtXFx0W2luc25fc3luY11cXHQ9IHtNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHN5bmNfb3ApLCBSRX0sXFxuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jOjE5NjpcXHRbaW5zbl9zeXNjYWxsXVxcdD0ge00oc3BlY19vcCwgMCwgMCwgMCwgMCwgc3lzY2FsbF9vcCksIFNDSU1NfSxcXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmMtMTk3LVxcdFtpbnNuX3RsYnBdXFx0PSB7TShjb3AwX29wLCBjb3Bfb3AsIDAsIDAsIDAsIHRsYnBfb3ApLCAgMH0sXFxuLS1cXG5hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oLTMyLSAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyBob3cgdGhlIHJlZ2lzdGVycyBhcmUgbGFpZCBvdXQgb24gdGhlIGtlcm5lbCBzdGFja1xcbmFyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmg6MzM6ICogZHVyaW5nIGEgc3lzY2FsbCBvciBvdGhlciBrZXJuZWwgZW50cnkuXFxuYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaC0zNC0gKlxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlPTg9b2JqLXlcXHRcXHQ6PSBoZWFkLm8gY2FjaGUubyBwYWNhY2hlLm8gc2V0dXAubyBwZHQubyB0cmFwcy5vIHRpbWUubyBpcnEubyBcXFxcXFxuYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlOjk6XFx0XFx0ICAgc3lzY2FsbC5vIGVudHJ5Lm8gc3lzX3BhcmlzYy5vIGZpcm13YXJlLm8gXFxcXFxcbmFyY2gvcGFyaXNjL2tlcm5lbC9NYWtlZmlsZS0xMC1cXHRcXHQgICBwdHJhY2UubyBoYXJkd2FyZS5vIGludmVudG9yeS5vIGRyaXZlcnMubyBhbHRlcm5hdGl2ZS5vIFxcXFxcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYz0zODM9aGFuZGxlX3NpZ25hbChzdHJ1Y3Qga3NpZ25hbCAqa3NpZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgaW5fc3lzY2FsbClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00MDUtXFxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jOjQwNjpzdGF0aWMgdm9pZCBjaGVja19zeXNjYWxsbm9faW5fZGVsYXlfYnJhbmNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00MDcte1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jPTQ1MT1zeXNjYWxsX3Jlc3RhcnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMtNDc2LVxcdFxcdERCRygxLCBcXFwiJXM6ICVsZFxcXFxuXFxcIiwgX19mdW5jX18sIHJlZ3MtXFx1MDAzZWdyWzI4XSk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jOjQ3NzpcXHRcXHRjaGVja19zeXNjYWxsbm9faW5fZGVsYXlfYnJhbmNoKHJlZ3MpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00NzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmM9NDgzPWluc2VydF9yZXN0YXJ0X3RyYW1wb2xpbmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMtNTMzLVxcdFxcdERCRygxLCBcXFwiJXM6IFR5cGUgJWxkXFxcXG5cXFwiLCBfX2Z1bmNfXywgcmVncy1cXHUwMDNlZ3JbMjhdKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmM6NTM0OlxcdFxcdGNoZWNrX3N5c2NhbGxub19pbl9kZWxheV9icmFuY2gocmVncyk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jLTUzNS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TPTEzMT1saW51eF9nYXRld2F5X2VudHJ5Olxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUy0xODUtXFx0ICAgc2F2ZWQvcmVzdG9yZWQpLiAgVEFTS19QVF9QU1cgaXMgemVyb2VkIHNvIHdlIGNhbiBzZWUgd2hldGhlclxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlM6MTg2OlxcdCAgIGEgcHJvY2VzcyBpcyBvbiBhIHN5c2NhbGwgb3Igbm90LiAgRm9yIGFuIGludGVycnVwdCB0aGUgcmVhbFxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMtMTg3LVxcdCAgIFBTVyB2YWx1ZSBpcyBzdG9yZWQuICBUaGlzIGlzIG5lZWRlZCBmb3IgZ2RiIGFuZCBzeXNfcHRyYWNlLiAqL1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUz0zNDg9dHJhY2VzeXNfbmV4dDpcXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TOjM0OTpcXHQvKiBkb19zeXNjYWxsX3RyYWNlX2VudGVyIGVpdGhlciByZXR1cm5lZCB0aGUgc3lzY2FsbG5vLCBvciAtMUwsXFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUy0zNTAtXFx0ICogIHNvIHdlIHNraXAgcmVzdG9yaW5nIHRoZSBQVF9HUjIwIGJlbG93LCBzaW5jZSB3ZSBwdWxsZWQgaXQgZnJvbVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc28zMi9NYWtlZmlsZT0xMD1LQ1NBTl9TQU5JVElaRSA6PSBuXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc28zMi9NYWtlZmlsZS0xMS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlOjEyOm9iai12ZHNvMzIgPSBub3RlLm8gc2lndHJhbXAubyByZXN0YXJ0X3N5c2NhbGwub1xcbmFyY2gvcGFyaXNjL2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUtMTMtb2JqLWN2ZHNvMzIgPSB2ZHNvMzJfZ2VuZXJpYy5vXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlPTEwPUtDU0FOX1NBTklUSVpFIDo9IG5cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlLTExLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGU6MTI6b2JqLXZkc282NCA9IG5vdGUubyBzaWd0cmFtcC5vIHJlc3RhcnRfc3lzY2FsbC5vXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc282NC9NYWtlZmlsZS0xMy1vYmotY3Zkc282NCA9IHZkc282NF9nZW5lcmljLm9cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU9NTg9S0NTQU5fU0FOSVRJWkVfc2V0dXBfNjQubyA6PSBuXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlLTYyLSMgY2hlY2tzIGR1ZSB0byByYW5kb21pemVfa3N0YWNrX29mZnNldC5cXG5hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlOjYzOkNGTEFHU19SRU1PVkVfc3lzY2FsbC5vID0gLWZzdGFjay1wcm90ZWN0b3IgLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZTo2NDpDRkxBR1Nfc3lzY2FsbC5vICs9IC1mbm8tc3RhY2stcHJvdGVjdG9yXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS02NS0jZW5kaWZcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU9Njc9b2JqLXlcXHRcXHRcXHRcXHQ6PSBjcHV0YWJsZS5vIHN5c2NhbGxzLm8gc3dpdGNoLm8gXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS03NC1cXHRcXHRcXHRcXHQgICBod19icmVha3BvaW50X2NvbnN0cmFpbnRzLm8gaW50ZXJydXB0Lm8gXFxcXFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU6NzU6XFx0XFx0XFx0XFx0ICAga2RlYnVnZnMubyBzdGFja3RyYWNlLm8gc3lzY2FsbC5vXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS03Ni1vYmoteVxcdFxcdFxcdFxcdCs9IHB0cmFjZS9cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jPTQ4PXN0cnVjdCBydGFzX2ZpbHRlciB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy02Ny0gKiAgICAgICAgICBnZW5lcmFsbHkgYWxsb3dlZCwgYW5kIEBmaWx0ZXIgZGVzY3JpYmVzIGNvbnN0cmFpbnRzIG9uIHRoZVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjY4OiAqICAgICAgICAgIGFyZ3VtZW50cy4gU2VlIGFsc28gQGJhbm5lZF9mb3Jfc3lzY2FsbF9vbl9sZS5cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo2OTogKiBAYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlOiBTZXQgd2hlbiBjYWxsIHZpYSBzeXNfcnRhcyBpcyBnZW5lcmFsbHkgYWxsb3dlZFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTcwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBzcGVjaWZpY2FsbHkgcmVzdHJpY3RlZCBvbiBwcGM2NGxlLiBTdWNoXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz04Mz1zdHJ1Y3QgcnRhc19mdW5jdGlvbiB7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtODQtXFx0czMyIHRva2VuO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjg1OlxcdGNvbnN0IGJvb2wgYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlOjE7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtODYtXFx0Y29uc3QgY2hhciAqIGNvbnN0IG5hbWU7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz0xMDQ9c3RhdGljIHN0cnVjdCBydGFzX2Z1bmN0aW9uIHJ0YXNfZnVuY3Rpb25fdGFibGVbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00NTUtXFx0XFx0Lm5hbWUgPSBcXFwiaWJtLHN1c3BlbmQtbWVcXFwiLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjQ1NjpcXHRcXHQuYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlID0gdHJ1ZSxcXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00NTctXFx0XFx0LmZpbHRlciA9IFxcdTAwMjYoY29uc3Qgc3RydWN0IHJ0YXNfZmlsdGVyKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00NjktXFx0XFx0Lm5hbWUgPSBcXFwiaWJtLHVwZGF0ZS1ub2Rlc1xcXCIsXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmM6NDcwOlxcdFxcdC5iYW5uZWRfZm9yX3N5c2NhbGxfb25fbGUgPSB0cnVlLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTQ3MS1cXHRcXHQuZmlsdGVyID0gXFx1MDAyNihjb25zdCBzdHJ1Y3QgcnRhc19maWx0ZXIpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTQ3OC1cXHRcXHQubmFtZSA9IFxcXCJpYm0sdXBkYXRlLXByb3BlcnRpZXNcXFwiLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjQ3OTpcXHRcXHQuYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlID0gdHJ1ZSxcXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00ODAtXFx0XFx0LmZpbHRlciA9IFxcdTAwMjYoY29uc3Qgc3RydWN0IHJ0YXNfZmlsdGVyKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz0xNzc2PXN0YXRpYyBib29sIGJsb2NrX3J0YXNfY2FsbChjb25zdCBzdHJ1Y3QgcnRhc19mdW5jdGlvbiAqZnVuYywgaW50IG5hcmdzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtMTc5NC1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzoxNzk1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfTElUVExFX0VORElBTikgXFx1MDAyNlxcdTAwMjYgZnVuYy1cXHUwMDNlYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlKVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTE3OTYtXFx0XFx0Z290byBlcnI7XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9zaWduYWwuYz00MTM9c3RhdGljIGludCBzZXR1cF9ydF9mcmFtZShzdHJ1Y3Qga3NpZ25hbCAqa3NpZywgc2lnc2V0X3QgKnNldCxcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL3NpZ25hbC5jLTQ0Ny1cXHQgKiBGb3IgdGhlIG5vbW11IGNhc2Ugd2UgZG9uJ3QgaGF2ZSBhIFZEU08uICBJbnN0ZWFkIHdlIHB1c2ggdHdvXFxuYXJjaC9yaXNjdi9rZXJuZWwvc2lnbmFsLmM6NDQ4OlxcdCAqIGluc3RydWN0aW9ucyB0byBjYWxsIHRoZSBydF9zaWdyZXR1cm4gc3lzY2FsbCBvbnRvIHRoZSB1c2VyIHN0YWNrLlxcbmFyY2gvcmlzY3Yva2VybmVsL3NpZ25hbC5jLTQ0OS1cXHQgKi9cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU9Mzk9b2JqLXlcXHQ6PSBoZWFkLm8gdHJhcHMubyB0aW1lLm8gcHJvY2Vzcy5vIGVhcmx5Lm8gc2V0dXAubyBpZGxlLm8gdnRpbWUub1xcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU6NDA6b2JqLXlcXHQrPSBwcm9jZXNzb3IubyBzeXNjYWxsLm8gcHRyYWNlLm8gc2lnbmFsLm8gY3BjbWQubyBlYmNkaWMubyBubWkub1xcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUtNDEtb2JqLXlcXHQrPSBkZWJ1Zy5vIGlycS5vIGlwbC5vIGRpcy5vIHZkc28ubyBjcHVmZWF0dXJlLm9cXG4tLVxcbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlOjI6b2JqLXkgKz0gdnN5c2NhbGwubyB2c3lzY2FsbC1zeXNjYWxsLm8gdnN5c2NhbGwtc3ltcy5vXFxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvTWFrZWZpbGUtMy1cXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC9NYWtlZmlsZTo0OiQob2JqKS92c3lzY2FsbC1zeXNjYWxsLm86ICQob2JqKS92c3lzY2FsbC10cmFwYS5zb1xcbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlLTUtXFxuLS1cXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jPTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZkc29fdGFibGVbXSA9IHtcXG4tLVxcbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLmMtNDYtLypcXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jOjQ3OiAqIFRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgYnkgdnN5c2NhbGwubyB0byBtYXJrIHRoZSBib3VuZHNcXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jLTQ4LSAqIG9mIHRoZSBFTEYgRFNPIGltYWdlcyBpbmNsdWRlZCB0aGVyZWluLlxcbi0tXFxuYXJjaC91bS9rZXJuZWwvc2thcy9NYWtlZmlsZS01LVxcbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGU6NjpvYmoteSA6PSBzdHViLm8gbW11Lm8gcHJvY2Vzcy5vIHN5c2NhbGwubyB1YWNjZXNzLm8gXFxcXFxcbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUtNy1cXHQgc3R1Yl9leGVfZW1iZWQub1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg9MTI9ZXh0ZXJuIGxvbmcgX19pYTMyX3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTE3LSAqIF9feDY0X3N5c18qKCkgICAgICAgICAtIDY0LWJpdCBuYXRpdmUgc3lzY2FsbFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjE4OiAqIF9faWEzMl9zeXNfKigpICAgICAgICAtIDMyLWJpdCBuYXRpdmUgc3lzY2FsbCBvciBjb21tb24gY29tcGF0IHN5c2NhbGxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xOS0gKiBfX2lhMzJfY29tcGF0X3N5c18qKCkgLSAzMi1iaXQgY29tcGF0IHN5c2NhbGxcXG4tLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZT04PW9iai15IDo9IGhlYWQubyBhbGlnbi5vIGNvcHJvY2Vzc29yLm8gZW50cnkubyBpcnEubyBwbGF0Zm9ybS5vIHByb2Nlc3MubyBcXFxcXFxuYXJjaC94dGVuc2Eva2VybmVsL01ha2VmaWxlOjk6XFx0IHB0cmFjZS5vIHNldHVwLm8gc2lnbmFsLm8gc3RhY2t0cmFjZS5vIHN5c2NhbGwubyB0aW1lLm8gdHJhcHMubyBcXFxcXFxuYXJjaC94dGVuc2Eva2VybmVsL01ha2VmaWxlLTEwLVxcdCB2ZWN0b3JzLm9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmM9Mjk9X192bWFfbWF0Y2hlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jLTUzLSAqIHRvIGltcGxlbWVudCBEUk0gbW1hcCBzdXBwb3J0IGlzIHdpdGggYW4gbW1hcCBvZmZzZXQgaW9jdGwgKGxpa2VcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jOjU0OiAqIGk5MTVfZ2VtX21tYXBfZ3R0KSBhbmQgdGhlbiB1c2luZyB0aGUgbW1hcCBzeXNjYWxsIG9uIHRoZSBEUk0gZmQgZGlyZWN0bHkuXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYy01NS0gKiBUaGF0IHdheSBkZWJ1ZyB0b29saW5nIGxpa2UgdmFsZ3JpbmQgd2lsbCB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgaGlkaW5nXFxuLS1cXG5kcml2ZXJzL3BjaS9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfWDg2X0lOVEVMX01JRClcXHQrPSBwY2ktbWlkLm9cXG5kcml2ZXJzL3BjaS9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfUENJX1NZU0NBTEwpXFx0Kz0gc3lzY2FsbC5vXFxuZHJpdmVycy9wY2kvTWFrZWZpbGUtMzAtb2JqLSQoQ09ORklHX1BDSV9TVFVCKVxcdFxcdCs9IHBjaS1zdHViLm9cXG4tLVxcbmZzL2tlcm5mcy9kaXIuYz0xMDAzPXVuc2lnbmVkIGludCBrZXJuZnNfcm9vdF9mbGFncyhzdHJ1Y3Qga2VybmZzX25vZGUgKmtuKVxcbi0tXFxuZnMva2VybmZzL2Rpci5jLTEwMDktICoga2VybmZzX2NyZWF0ZV9yb290IC0gY3JlYXRlIGEgbmV3IGtlcm5mcyBoaWVyYXJjaHlcXG5mcy9rZXJuZnMvZGlyLmM6MTAxMDogKiBAc2NvcHM6IG9wdGlvbmFsIHN5c2NhbGwgb3BlcmF0aW9ucyBmb3IgdGhlIGhpZXJhcmNoeVxcbmZzL2tlcm5mcy9kaXIuYy0xMDExLSAqIEBmbGFnczogS0VSTkZTX1JPT1RfKiBmbGFnc1xcbi0tXFxuZnMva2VybmZzL2Rpci5jLTEwMTYtICovXFxuZnMva2VybmZzL2Rpci5jOjEwMTc6c3RydWN0IGtlcm5mc19yb290ICprZXJuZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMsXFxuZnMva2VybmZzL2Rpci5jLTEwMTgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdm9pZCAqcHJpdilcXG4tLVxcbmZzL2tlcm5mcy9kaXIuYy0xMDU3LVxcbmZzL2tlcm5mcy9kaXIuYzoxMDU4OlxcdHJvb3QtXFx1MDAzZXN5c2NhbGxfb3BzID0gc2NvcHM7XFxuZnMva2VybmZzL2Rpci5jLTEwNTktXFx0cm9vdC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4tLVxcbmZzL2tlcm5mcy9kaXIuYz0xMjkxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICprZXJuZnNfaW9wX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMva2VybmZzL2Rpci5jLTEyOTUtXFx0c3RydWN0IGtlcm5mc19ub2RlICpwYXJlbnQgPSBkaXItXFx1MDAzZWlfcHJpdmF0ZTtcXG5mcy9rZXJuZnMvZGlyLmM6MTI5NjpcXHRzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcyA9IGtlcm5mc19yb290KHBhcmVudCktXFx1MDAzZXN5c2NhbGxfb3BzO1xcbmZzL2tlcm5mcy9kaXIuYy0xMjk3LVxcdGludCByZXQ7XFxuLS1cXG5mcy9rZXJuZnMvZGlyLmM9MTMxMT1zdGF0aWMgaW50IGtlcm5mc19pb3Bfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2tlcm5mcy9kaXIuYy0xMzEzLVxcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gID0ga2VybmZzX2RlbnRyeV9ub2RlKGRlbnRyeSk7XFxuZnMva2VybmZzL2Rpci5jOjEzMTQ6XFx0c3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMgPSBrZXJuZnNfcm9vdChrbiktXFx1MDAzZXN5c2NhbGxfb3BzO1xcbmZzL2tlcm5mcy9kaXIuYy0xMzE1LVxcdGludCByZXQ7XFxuLS1cXG5mcy9rZXJuZnMvZGlyLmM9MTMyOT1zdGF0aWMgaW50IGtlcm5mc19pb3BfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMva2VybmZzL2Rpci5jLTEzMzUtXFx0c3RydWN0IGtlcm5mc19ub2RlICpuZXdfcGFyZW50ID0gbmV3X2Rpci1cXHUwMDNlaV9wcml2YXRlO1xcbmZzL2tlcm5mcy9kaXIuYzoxMzM2OlxcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0ga2VybmZzX3Jvb3Qoa24pLVxcdTAwM2VzeXNjYWxsX29wcztcXG5mcy9rZXJuZnMvZGlyLmMtMTMzNy1cXHRpbnQgcmV0O1xcbi0tXFxuZnMva2VybmZzL2tlcm5mcy1pbnRlcm5hbC5oPTMzPXN0cnVjdCBrZXJuZnNfcm9vdCB7XFxuLS1cXG5mcy9rZXJuZnMva2VybmZzLWludGVybmFsLmgtNDItXFx0dTMyXFx0XFx0XFx0aWRfaGlnaGJpdHM7XFxuZnMva2VybmZzL2tlcm5mcy1pbnRlcm5hbC5oOjQzOlxcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnN5c2NhbGxfb3BzO1xcbmZzL2tlcm5mcy9rZXJuZnMtaW50ZXJuYWwuaC00NC1cXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jPTI4PXN0YXRpYyBpbnQga2VybmZzX3NvcF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMva2VybmZzL21vdW50LmMtMzAtXFx0c3RydWN0IGtlcm5mc19yb290ICpyb290ID0ga2VybmZzX3Jvb3Qoa2VybmZzX2RlbnRyeV9ub2RlKGRlbnRyeSkpO1xcbmZzL2tlcm5mcy9tb3VudC5jOjMxOlxcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0gcm9vdC1cXHUwMDNlc3lzY2FsbF9vcHM7XFxuZnMva2VybmZzL21vdW50LmMtMzItXFxuLS1cXG5mcy9rZXJuZnMvbW91bnQuYz0zOD1zdGF0aWMgaW50IGtlcm5mc19zb3Bfc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jLTQxLVxcdHN0cnVjdCBrZXJuZnNfcm9vdCAqcm9vdCA9IGtlcm5mc19yb290KG5vZGUpO1xcbmZzL2tlcm5mcy9tb3VudC5jOjQyOlxcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0gcm9vdC1cXHUwMDNlc3lzY2FsbF9vcHM7XFxuZnMva2VybmZzL21vdW50LmMtNDMtXFxuLS1cXG5mcy9yZXNjdHJsL3JkdGdyb3VwLmM9NDI2MD1zdGF0aWMgaW50IHJkdGdyb3VwX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGtlcm5mc19yb290ICprZilcXG4tLVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy00Mjc2LVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYzo0Mjc3OnN0YXRpYyBzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzIHJkdGdyb3VwX2tmX3N5c2NhbGxfb3BzID0ge1xcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy00Mjc4LVxcdC5ta2RpclxcdFxcdD0gcmR0Z3JvdXBfbWtkaXIsXFxuLS1cXG5mcy9yZXNjdHJsL3JkdGdyb3VwLmM9NDI4ND1zdGF0aWMgaW50IHJkdGdyb3VwX3NldHVwX3Jvb3Qoc3RydWN0IHJkdF9mc19jb250ZXh0ICpjdHgpXFxuZnMvcmVzY3RybC9yZHRncm91cC5jLTQyODUte1xcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYzo0Mjg2OlxcdHJkdF9yb290ID0ga2VybmZzX2NyZWF0ZV9yb290KFxcdTAwMjZyZHRncm91cF9rZl9zeXNjYWxsX29wcyxcXG5mcy9yZXNjdHJsL3JkdGdyb3VwLmMtNDI4Ny1cXHRcXHRcXHRcXHQgICAgICBLRVJORlNfUk9PVF9DUkVBVEVfREVBQ1RJVkFURUQgfFxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaD0xOTk9c3RydWN0IGtlcm5mc19ub2RlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmZzLmgtMjM5LS8qXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaDoyNDA6ICoga2VybmZzX3N5c2NhbGxfb3BzIG1heSBiZSBzcGVjaWZpZWQgb24ga2VybmZzX2NyZWF0ZV9yb290KCkgdG8gc3VwcG9ydFxcbmluY2x1ZGUvbGludXgva2VybmZzLmgtMjQxLSAqIHN5c2NhbGxzLiAgVGhlc2Ugb3B0aW9uYWwgY2FsbGJhY2tzIGFyZSBpbnZva2VkIG9uIHRoZSBtYXRjaGluZyBzeXNjYWxsc1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC0yNDUtICovXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaDoyNDY6c3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyB7XFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC0yNDctXFx0aW50ICgqc2hvd19vcHRpb25zKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaD00MjU9c3RydWN0IGRlbnRyeSAqa2VybmZzX25vZGVfZGVudHJ5KHN0cnVjdCBrZXJuZnNfbm9kZSAqa24sXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC00MjYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oOjQyNzpzdHJ1Y3Qga2VybmZzX3Jvb3QgKmtlcm5mc19jcmVhdGVfcm9vdChzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcyxcXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oLTQyOC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB2b2lkICpwcml2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmZzLmg9NTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGtlcm5mc19yb290ICpcXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oOjUyNjprZXJuZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMsIHVuc2lnbmVkIGludCBmbGFncyxcXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oLTUyNy1cXHRcXHQgICB2b2lkICpwcml2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9yc2VxX2VudHJ5Lmg9NjUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX3JzZXFfZXhpdF90b191c2VyX21vZGVfcmVzdGFydChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmluY2x1ZGUvbGludXgvcnNlcV9lbnRyeS5oLTY1NS1cXHQgKiBJZiB0aGUgdGFzayBkaWQgbm90IGdvIHRocm91Z2ggc2NoZWR1bGUgb3IgZ290IHRoZSBmbGFnIGVuZm9yY2VkXFxuaW5jbHVkZS9saW51eC9yc2VxX2VudHJ5Lmg6NjU2OlxcdCAqIGJ5IHRoZSByc2VxIHN5c2NhbGwgb3IgZXhlY3ZlLCB0aGVuIG5vdGhpbmcgdG8gZG8gaGVyZS5cXG5pbmNsdWRlL2xpbnV4L3JzZXFfZW50cnkuaC02NTctXFx0ICpcXG4tLVxcbmluY2x1ZGUvbWVkaWEvbWVkaWEtZGV2bm9kZS5oPTI4PWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICptZWRpYV9kZWJ1Z2ZzX3Jvb3Q7XFxuLS1cXG5pbmNsdWRlL21lZGlhL21lZGlhLWRldm5vZGUuaC00NS0gKiBAY29tcGF0X2lvY3RsOiBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgaGFuZGxlIDMyIGJpdHMgdXNlcnNwYWNlXFxuaW5jbHVkZS9tZWRpYS9tZWRpYS1kZXZub2RlLmg6NDY6ICpcXHRjYWxscyB0byB0aGUgaW9jdGwoKSBzeXNjYWxsIG9uIGEgS2VybmVsIGNvbXBpbGVkIHdpdGggNjQgYml0cy5cXG5pbmNsdWRlL21lZGlhL21lZGlhLWRldm5vZGUuaC00Ny0gKiBAb3BlbjogcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIG9wZW4oKSBzeXNjYWxsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtMTktXFx0RU0oIE1SX01FTU9SWV9IT1RQTFVHLFxcdFxcXCJtZW1vcnlfaG90cGx1Z1xcXCIpXFx0XFx0XFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDoyMDpcXHRFTSggTVJfU1lTQ0FMTCxcXHRcXHRcXFwic3lzY2FsbF9vcl9jcHVzZXRcXFwiKVxcdFxcdFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtMjEtXFx0RU0oIE1SX01FTVBPTElDWV9NQklORCxcXHRcXFwibWVtcG9saWN5X21iaW5kXFxcIilcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaD0zNzM9c3RydWN0IGRybV92bXdfZmVuY2VfcmVwIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oLTM5Ni0gKlxcbmluY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oOjM5NzogKiBCdWZmZXIgb2JqZWN0cyBhcmUgbWFwcGVkIHVzaW5nIHRoZSBtbWFwKCkgc3lzY2FsbCBvbiB0aGUgZHJtIGRldmljZS5cXG5pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaC0zOTgtICovXFxuLS1cXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmg9NTQyPXN0cnVjdCBzaGFyZWRfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmgtNTgwLVxcdCAqIFdhbGxjbG9jayB0aW1lOiB1cGRhdGVkIG9ubHkgYnkgY29udHJvbCBzb2Z0d2FyZS4gR3Vlc3RzIHNob3VsZCBiYXNlXFxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oOjU4MTpcXHQgKiB0aGVpciBnZXR0aW1lb2ZkYXkoKSBzeXNjYWxsIG9uIHRoaXMgd2FsbGNsb2NrLWJhc2UgdmFsdWUuXFxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oLTU4Mi1cXHQgKi9cXG4tLVxcbmlwYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19TWVNWSVBDX0NPTVBBVCkgKz0gY29tcGF0Lm9cXG5pcGMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfU1lTVklQQykgKz0gdXRpbC5vIG1zZ3V0aWwubyBtc2cubyBzZW0ubyBzaG0ubyBzeXNjYWxsLm9cXG5pcGMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfU1lTVklQQ19TWVNDVEwpICs9IGlwY19zeXNjdGwub1xcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE2MT1zdGF0aWMgdm9pZCAqYXJyYXlfbWFwX2VsZW1fcHRyKHN0cnVjdCBicGZfYXJyYXkqIGFycmF5LCB1MzIgaW5kZXgpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTY1LVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNjY6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNjctc3RhdGljIHZvaWQgKmFycmF5X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzQzPWludCBicGZfYXJyYXlfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzU5LVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzozNjA6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zNjEtc3RhdGljIGxvbmcgYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NDAwPWludCBicGZfcGVyY3B1X2FycmF5X3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ0OC1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDQ5Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDUwLXN0YXRpYyBsb25nIGFycmF5X21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz03MTI9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTcyOS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3MzA6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSBkaXJlY3RseSwgc29cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzEtICogYXJndW1lbnRzIGhhdmUgdG8gbWF0Y2ggYnBmX21hcF9sb29rdXBfZWxlbSgpIGV4YWN0bHkuXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMTU5PXN0YXRpYyBpbnQgY2hlY2tfZmxhZ3Moc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsX29sZCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExNzItXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTE3MzovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTE3NC1zdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MTQ5ND1zdGF0aWMgbG9uZyBodGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE1MDAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTUwMTovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTUwMi1zdGF0aWMgbG9uZyBodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9MjMwPXN0YXRpYyBzaXplX3QgbG9uZ2VzdF9wcmVmaXhfbWF0Y2goY29uc3Qgc3RydWN0IGxwbV90cmllICp0cmllLFxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTIzNi1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6MjM3Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMjM4LXN0YXRpYyB2b2lkICp0cmllX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKl9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9MzExPXN0YXRpYyBpbnQgdHJpZV9jaGVja19hZGRfZWxlbShzdHJ1Y3QgbHBtX3RyaWUgKnRyaWUsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy0zMjAtXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjMyMTovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTMyMi1zdGF0aWMgbG9uZyB0cmllX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNDU1LVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo0NTY6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy00NTctc3RhdGljIGxvbmcgdHJpZV9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpfa2V5KVxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9MTI3PXN0YXRpYyBsb25nIF9fc3RhY2tfbWFwX2dldChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgYm9vbCBkZWxldGUpXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xNjAtXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM6MTYxOi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xNjItc3RhdGljIGxvbmcgcXVldWVfbWFwX3BlZWtfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG4tLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTE2Ni1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzoxNjc6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTE2OC1zdGF0aWMgbG9uZyBzdGFja19tYXBfcGVla19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjIzLjc1OTAwNTk2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTAxOTU3Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgQXJyYXkgTWFwIExhenkgUGFnZSBGYXVsdGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgZW5hYmxpbmcgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcyB0aGF0IGFyZSBgbW1hcGAtZWQgaW50byB1c2VyIHNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY2hhbmdlLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgdGhhdCB0aGUgQlBGIHN1YnN5c3RlbSwgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGlzIHRoZSBlbnRyeSBwb2ludC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBhcnJheW1hcC5jYCBhbmQgYHN5c2NhbGwuY2Agd2l0aGluIHRoZSBga2VybmVsL2JwZmAgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSBmb2N1c2VzIG15IGF0dGVudGlvbiBvbiB0aG9zZSBmaWxlcy4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYm90aCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvbmx5IGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHNldCwgbWVhbmluZyB0aGF0IGl0IGlzIHRoZSAqb25seSogcmVxdWlyZWQgY29uZmlnLlxuXG5Ob3csIGhvdyBkb2VzIHRoaXMgYWN0dWFsbHkgd29yaz8gVGhlIHBhdGNoIG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gc2V0IHRoZSBgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QYCBmbGFncyBvbiB0aGUgdmlydHVhbCBtZW1vcnkgYXJlYSBhbmQgcmV0dXJuIDAsIGluc3RlYWQgb2YgZWFnZXJseSBtYXBwaW5nIHRoZSBtZW1vcnkuIENyaXRpY2FsbHksIGl0IHRoZW4gYWRkcyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGJwZl9tYXBfbW1hcF9mYXVsdGAgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzLiBUaGlzIHNpZ25hbHMgdGhlICpsYXp5KiBuYXR1cmUgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbi5cblxuVGhlIGtleSB0byB2ZXJpZnlpbmcgdGhpcyBpcyB0aGUgc2VsZnRlc3QsIGBiZW5jaF9hcnJheW1hcF9tbWFwLmNgLiBUaGlzIGlzIGNydWNpYWwg4oCTIGl0IGNvbmZpcm1zIHRoZSBwYXRoIGlzIHZhbGlkISBUaGUgdGVzdCBjcmVhdGVzIGEgQlBGIGFycmF5IG1hcCB1c2luZyBgQlBGX0ZfTU1BUEFCTEVgLCBtYXBzIGl0IHVzaW5nIGBtbWFwYCwgYW5kIHN1YnNlcXVlbnRseSBhY2Nlc3NlcyB0aGUgbWVtb3J5LCBlZmZlY3RpdmVseSB0cmlnZ2VyaW5nIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGhpZ2hsaWdodHMgdGhlIHByYWN0aWNhbCByZWFjaGFiaWxpdHkgYW5kIHRoZSBpbnRlbmRlZCBmdW5jdGlvbiBvZiB0aGUgcGF0Y2guXG5cbkkndmUgZGV0ZXJtaW5lZCB0aGF0IHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYGJwZl9tYXBfbW1hcF9mYXVsdGAsIGFuZCBgYXJyYXlfbWFwX21tYXBgLiBUaGUgYGFycmF5X21hcF9tbWFwYCBmdW5jdGlvbiBpcyBpbXBhY3RlZCBieSBhIHNtYWxsIGNoYW5nZS5cblxuSSdtIGNvbWZvcnRhYmxlIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcm92aWRlcyBsYXp5IHBhZ2UgZmF1bHRpbmcgZm9yIEJQRiBhcnJheSBtYXBzLiBHaXZlbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCByZWFjaGFiaWxpdHkgdmlhIHVzZXIgc3BhY2UgYW5kIHdpdGggdGhpcyBzZWxmdGVzdCwgSSdtIG1hcmtpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgb2J2aW91c2x5IGBCUEZfU1lTQ0FMTGAgYW5kIEkgYW0gZ29pbmcgdG8gbG9nIHRoZSBmdW5jdGlvbiBzeW1ib2xzIHRvIHRoZSB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ3NSwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTc6MzIuODYwOTY1NzQ4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDMxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFycmF5X21hcF9tbWFwX2ZhdWx0XCIsXG4gICAgXCJicGZfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImFycmF5X21hcF9tbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBsYXp5IHBhZ2UgZmF1bHRpbmcgZm9yIEJQRiBhcnJheSBtYXBzIG1hcHBlZCB0byB1c2VyIHNwYWNlLiBJdCBtb2RpZmllcyBgYXJyYXlfbWFwX21tYXBgIHRvIG5vdCBlYWdlcmx5IG1hcCB0aGUgbWVtb3J5IGFuZCBhZGRzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgYW5kIGBicGZfbWFwX21tYXBfZmF1bHRgIHRvIGhhbmRsZSBwYWdlIGZhdWx0cyBvbiBkZW1hbmQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBtbWFwLWluZyBhIEJQRiBhcnJheSBtYXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcnJheV9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9tbWFwX2ZhdWx0XCIsXG4gICAgXCJhcnJheV9tYXBfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcyBtYXBwZWQgdG8gdXNlciBzcGFjZS4gSXQgbW9kaWZpZXMgYGFycmF5X21hcF9tbWFwYCB0byBub3QgZWFnZXJseSBtYXAgdGhlIG1lbW9yeSBhbmQgYWRkcyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYnBmX21hcF9tbWFwX2ZhdWx0YCB0byBoYW5kbGUgcGFnZSBmYXVsdHMgb24gZGVtYW5kLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBieSBjcmVhdGluZyBhbmQgbW1hcC1pbmcgYSBCUEYgYXJyYXkgbWFwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowd2sw4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 00:56:32 +0000 UTC FinishedAt: 2026-07-23 01:17:35 +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": "87267b89459813cb50ab5377e076b639c07b4491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "87267b89459813cb50ab5377e076b639c07b4491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "4c8e9341-f04f-425f-92de-c71097a64fae" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "array_map_mmap_fault", "bpf_map_mmap_fault", "array_map_mmap" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJyYXlfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2FycmF5X21hcF9tbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcyBtYXBwZWQgdG8gdXNlciBzcGFjZS4gSXQgbW9kaWZpZXMgYGFycmF5X21hcF9tbWFwYCB0byBub3QgZWFnZXJseSBtYXAgdGhlIG1lbW9yeSBhbmQgYWRkcyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYnBmX21hcF9tbWFwX2ZhdWx0YCB0byBoYW5kbGUgcGFnZSBmYXVsdHMgb24gZGVtYW5kLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBieSBjcmVhdGluZyBhbmQgbW1hcC1pbmcgYSBCUEYgYXJyYXkgbWFwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDRhOGI2ZmRmZWNkN2YzMTEyNjc1Zjc2ZjhlODUyMGVmOWI2OTA0OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDAxOjE2OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCBlMDY2ZjQ0YTljMDU4MC4uYjUzNmYzYzllMTAzNmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTQ1LDYgJiM0MzsxNDUsNyBAQCBzdHJ1Y3QgYnBmX21hcF9vcHMge1xuIFx0aW50ICgqbWFwX2RpcmVjdF92YWx1ZV9tZXRhKShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgICB1NjQgaW1tLCB1MzIgKm9mZik7XG4gXHRpbnQgKCptYXBfbW1hcCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuJiM0MztcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9mYXVsdCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xuIFx0X19wb2xsX3QgKCptYXBfcG9sbCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cyk7XG4gXHR1bnNpZ25lZCBsb25nICgqbWFwX2dldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbmluZGV4IDI0OGI0ODE4MTc4Y2QxLi4xNzExYmU1ODI5MDdkYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcnJheW1hcC5jXG5AQCAtNTc2LDcgJiM0Mzs1NzYsNiBAQCBzdGF0aWMgaW50IGFycmF5X21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcbi1cdHBnb2ZmX3QgcGdvZmYgPSBQQUdFX0FMSUdOKHNpemVvZigqYXJyYXkpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdGlmICghKG1hcC1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNTg1LDggJiM0Mzs1ODQsNDIgQEAgc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdCAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktXHUwMDNlbWFwLm1heF9lbnRyaWVzICogYXJyYXktXHUwMDNlZWxlbV9zaXplKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpLFxuLVx0XHRcdFx0ICAgdm1hLVx1MDAzZXZtX3Bnb2ZmICYjNDM7IHBnb2ZmKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJiMzOTtlZCB1cCBmcm9udCwgc28gaW5zdGVhZCBvZiB3aXJpbmcgdXBcbiYjNDM7XHQgKiBldmVyeSBQVEUgaGVyZSB3ZSBsZXQgYXJyYXlfbWFwX21tYXBfZmF1bHQoKSBpbnNlcnQgcGFnZXMgb24gZGVtYW5kLlxuJiM0MztcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIHVzZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGZvciB1czsga2VlcFxuJiM0MztcdCAqIHRoZW0gdG8gcHJlc2VydmUgYmVoYXZpb3IgKG5vIFZNQSBleHBhbnNpb24sIGV4Y2x1ZGVkIGZyb20gY29yZWR1bXApLlxuJiM0MztcdCAqL1xuJiM0MztcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcbiYjNDM7XHRwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0dm9pZCAqa2FkZHI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogdm1mLVx1MDAzZXBnb2ZmIGlzIHRoZSBwYWdlIG9mZnNldCB3aXRoaW4gdGhlIG1hcHBpbmcgKHZtYS1cdTAwM2V2bV9wZ29mZiBwbHVzXG4mIzQzO1x0ICogdGhlIG9mZnNldCBvZiB0aGUgZmF1bHRpbmcgYWRkcmVzcykuIFRoZSBkYXRhIHBhZ2VzIHN0YXJ0IGFmdGVyIHRoZVxuJiM0MztcdCAqIGJwZl9hcnJheSBoZWFkZXIsIGhlbmNlIHRoZSBleHRyYSBwZ29mZi4gVGhpcyBtaXJyb3JzIHRoZSBvZmZzZXQgdGhhdFxuJiM0MztcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2Uodm1hLCAuLi4sIHZtYS1cdTAwM2V2bV9wZ29mZiAmIzQzOyBwZ29mZikgdXNlZCB0byBhcHBseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrYWRkciA9IGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpICYjNDM7XG4mIzQzO1x0XHQoKHU2NCkodm1mLVx1MDAzZXBnb2ZmICYjNDM7IHBnb2ZmKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1xuJiM0MztcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2Uoa2FkZHIpO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1xuJiM0MztcdGdldF9wYWdlKHBhZ2UpO1xuJiM0MztcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIGFycmF5X21hcF9tZXRhX2VxdWFsKGNvbnN0IHN0cnVjdCBicGZfbWFwICptZXRhMCxcbkBAIC04MTIsNiAmIzQzOzg0NSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuIFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbiBcdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXG4gXHQubWFwX21tYXAgPSBhcnJheV9tYXBfbW1hcCxcbiYjNDM7XHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcbiBcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLFxuIFx0Lm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLFxuIFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggMGZmOWUzYWEyOTNkNTcuLmZiMGUxZjU1YzQ4NzNkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMTA3Nyw5ICYjNDM7MTA3NywyNiBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVkIGZvciBtYXBzIHRoYXQgcG9wdWxhdGUgdGhlaXIgbWVtb3J5LW1hcHBlZCByZWdpb24gbGF6aWx5LCBpLmUuIHRoYXRcbiYjNDM7ICogcmV0dXJuIHdpdGhvdXQgd2lyaW5nIHVwIGFueSBQVEVzIGZyb20gdGhlaXIgLVx1MDAzZW1hcF9tbWFwIGNhbGxiYWNrLiBNYXBzIHRoYXRcbiYjNDM7ICogcG9wdWxhdGUgdGhlIHdob2xlIFZNQSBlYWdlcmx5IChlLmcuIHZpYSByZW1hcF92bWFsbG9jX3JhbmdlKCkpIG5ldmVyIHJlYWNoXG4mIzQzOyAqIGhlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9mYXVsdClcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9tbWFwX2ZhdWx0KG1hcCwgdm1mKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcbiBcdC5vcGVuXHRcdD0gYnBmX21hcF9tbWFwX29wZW4sXG4gXHQuY2xvc2VcdFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXG4mIzQzO1x0LmZhdWx0XHRcdD0gYnBmX21hcF9tbWFwX2ZhdWx0LFxuIH07XG4gXG4gc3RhdGljIGludCBicGZfbWFwX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggNTVkMzk0NDM4NzA1YTYuLmI2NTkzZmIxMTM1YjI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC0xMDAzLDYgJiM0MzsxMDAzLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9ub3AubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFxcXG4mIzQzO1x0XHQgJChPVVRQVVQpL2JlbmNoX2FycmF5bWFwX21tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvdXNkdF8yLm8gXFxcbiBcdFx0ICNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkMy4uMTkyZDVmY2I3YTc0OGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yODcsNiAmIzQzOzI4Nyw3IEBAIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9jcnlwdG9fYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfc29ja21hcF9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9scG1fdHJpZV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfeGRwX2xiX2FyZ3A7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9hcnJheW1hcF9tbWFwX2FyZ3A7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHtcbiBcdHsgXHUwMDI2YmVuY2hfcmluZ2J1ZnNfYXJncCwgMCwgXCYjMzQ7UmluZyBidWZmZXJzIGJlbmNobWFya1wmIzM0OywgMCB9LFxuQEAgLTMwNCw2ICYjNDM7MzA1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHtcbiBcdHsgXHUwMDI2YmVuY2hfc29ja21hcF9hcmdwLCAwLCBcJiMzNDticGYgc29ja21hcCBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3AsIDAsIFwmIzM0O0xQTSB0cmllIG1hcCBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfeGRwX2xiX2FyZ3AsIDAsIFwmIzM0O1hEUCBsb2FkLWJhbGFuY2VyIGJlbmNobWFya1wmIzM0OywgMCB9LFxuJiM0MztcdHsgXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLCAwLCBcJiMzNDthcnJheW1hcC1tbWFwIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0e30sXG4gfTtcbiBcbkBAIC01ODIsNiAmIzQzOzU4NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9ub3A7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYXJyYXltYXBfbW1hcDtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2NvdW50X2dsb2JhbCxcbkBAIC02NjUsNiAmIzQzOzY2OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfbHBtX3RyaWVfZnJlZSxcbiBcdFx1MDAyNmJlbmNoX2JwZl9ub3AsXG4gXHRcdTAwMjZiZW5jaF94ZHBfbGIsXG4mIzQzO1x0XHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcCxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2FycmF5bWFwX21tYXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNTZkODBhODVjZjAxZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmNcbkBAIC0wLDAgJiM0MzsxLDE0NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YmVuY2guaFwmIzM0O1xuJiM0MztcbiYjNDM7LyogQmVuY2htYXJrIG1tYXAoKS9tdW5tYXAoKSBvZiBhbiBtbWFwLWFibGUgQlBGIGFycmF5IG1hcCBmcm9tIE4gdGhyZWFkcy4gKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbiYjNDM7XHRpbnQgbWFwX2ZkO1xuJiM0MztcdHNpemVfdCBtbWFwX3N6O1xuJiM0Mzt9IGN0eDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qge1xuJiM0MztcdF9fdTMyIG5yX3RocmVhZHM7XG4mIzQzO1x0X191NjQgbWFwX3NpemU7XG4mIzQzO30gYXJncyA9IHtcbiYjNDM7XHQubnJfdGhyZWFkcyA9IDE2LFxuJiM0MztcdC5tYXBfc2l6ZSA9IDggKiAxMDI0ICogMTAyNCwgLyogOCBNaUIgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdEFSR19OUl9USFJFQURTID0gNTAwMCxcbiYjNDM7XHRBUkdfTUFQX1NJWkUgPSA1MDAxLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4mIzQzO1x0eyBcJiMzNDtuci10aHJlYWRzXCYjMzQ7LCBBUkdfTlJfVEhSRUFEUywgXCYjMzQ7TlJfVEhSRUFEU1wmIzM0OywgMCxcbiYjNDM7XHRcdFwmIzM0O051bWJlciBvZiB0aHJlYWRzIHRoYXQgbW1hcC9tdW5tYXAgdGhlIG1hcCAoZGVmYXVsdCAxNilcJiMzNDsgfSxcbiYjNDM7XHR7IFwmIzM0O21hcC1zaXplXCYjMzQ7LCBBUkdfTUFQX1NJWkUsIFwmIzM0O0JZVEVTXCYjMzQ7LCAwLFxuJiM0MztcdFx0XCYjMzQ7U2l6ZSBvZiB0aGUgQlBGIGFycmF5IG1hcCBpbiBieXRlcyAoZGVmYXVsdCA4Mzg4NjA4KVwmIzM0OyB9LFxuJiM0MztcdHt9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGVycm9yX3QgcGFyc2VfYXJnKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChrZXkpIHtcbiYjNDM7XHRjYXNlIEFSR19OUl9USFJFQURTOlxuJiM0MztcdFx0YXJncy5ucl90aHJlYWRzID0gc3RydG91bChhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0aWYgKGFyZ3MubnJfdGhyZWFkcyA9PSAwKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIG5yLXRocmVhZHM6ICVzXFxuXCYjMzQ7LCBhcmcpO1xuJiM0MztcdFx0XHRhcmdwX3VzYWdlKHN0YXRlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQVJHX01BUF9TSVpFOlxuJiM0MztcdFx0YXJncy5tYXBfc2l6ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMCk7XG4mIzQzO1x0XHRpZiAoYXJncy5tYXBfc2l6ZSA9PSAwKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtJbnZhbGlkIG1hcC1zaXplOiAlc1xcblwmIzM0OywgYXJnKTtcbiYjNDM7XHRcdFx0YXJncF91c2FnZShzdGF0ZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXG4mIzQzO2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2FycmF5bWFwX21tYXBfYXJncCA9IHtcbiYjNDM7XHQub3B0aW9ucyA9IG9wdHMsXG4mIzQzO1x0LnBhcnNlciA9IHBhcnNlX2FyZyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZhbGlkYXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7YmVuY2htYXJrIGRvZXNuJiMzOTt0IHN1cHBvcnQgY29uc3VtZXIhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBudW1iZXIgb2Ygd29ya2VyIHRocmVhZHMgaXMgY29udHJvbGxlZCBieSAtLW5yLXRocmVhZHMgYW5kXG4mIzQzO1x0ICogZHJpdmVzIHRoZSBmcmFtZXdvcmsmIzM5O3MgcHJvZHVjZXIgbWFjaGluZXJ5LCBzbyBwZXItcHJvZHVjZXIgc3RhdHNcbiYjNDM7XHQgKiBhcmUgcmVwb3J0ZWQgY29ycmVjdGx5LlxuJiM0MztcdCAqL1xuJiM0MztcdGVudi5wcm9kdWNlcl9jbnQgPSBhcmdzLm5yX3RocmVhZHM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIGhpdHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpXG4mIzQzO3tcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0dm9pZCAqYWRkcjtcbiYjNDM7XG4mIzQzO1x0XHRhZGRyID0gbW1hcChOVUxMLCBjdHgubW1hcF9zeiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICAgIE1BUF9TSEFSRUQsIGN0eC5tYXBfZmQsIDApO1xuJiM0MztcdFx0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bW1hcCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCAtZXJybm8pO1xuJiM0MztcdFx0XHRleGl0KDEpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKG11bm1hcChhZGRyLCBjdHgubW1hcF9zeikpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O211bm1hcCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCAtZXJybm8pO1xuJiM0MztcdFx0XHRleGl0KDEpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YXRvbWljX2luYyhcdTAwMjZoaXRzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbiYjNDM7e1xuJiM0MztcdHJlcy1cdTAwM2VoaXRzID0gYXRvbWljX3N3YXAoXHUwMDI2aGl0cywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzLCAubWFwX2ZsYWdzID0gQlBGX0ZfTU1BUEFCTEUpO1xuJiM0MztcdGxvbmcgcGFnZV9zeiA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcbiYjNDM7XHRfX3UzMiB2YWx1ZV9zaXplID0gc2l6ZW9mKF9fdTY0KTtcbiYjNDM7XHRfX3UzMiBtYXhfZW50cmllcztcbiYjNDM7XG4mIzQzO1x0c2V0dXBfbGliYnBmKCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbW1hcC1hYmxlIGFycmF5IG1hcHMgcm91bmQgdGhlIHZhbHVlIHNpemUgdXAgdG8gOCBieXRlcyBhbmQgZXhwb3NlXG4mIzQzO1x0ICogUEFHRV9BTElHTihtYXhfZW50cmllcyAqIGVsZW1fc2l6ZSkgYnl0ZXMgdG8gdXNlciBzcGFjZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtYXhfZW50cmllcyA9IChhcmdzLm1hcF9zaXplICYjNDM7IHZhbHVlX3NpemUgLSAxKSAvIHZhbHVlX3NpemU7XG4mIzQzO1x0Y3R4Lm1tYXBfc3ogPSAoKF9fdTY0KW1heF9lbnRyaWVzICogdmFsdWVfc2l6ZSAmIzQzOyBwYWdlX3N6IC0gMSkgXHUwMDI2XG4mIzQzO1x0XHQgICAgICB+KHBhZ2Vfc3ogLSAxKTtcbiYjNDM7XG4mIzQzO1x0Y3R4Lm1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWSwgXCYjMzQ7bW1hcF9hcnJheVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgc2l6ZW9mKF9fdTMyKSwgdmFsdWVfc2l6ZSwgbWF4X2VudHJpZXMsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmIChjdHgubWFwX2ZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBtYXA6ICVkXFxuXCYjMzQ7LCAtZXJybm8pO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDthcnJheSBtYXA6ICV1IGVudHJpZXMsIG1tYXAgc2l6ZSAlenUgYnl0ZXMsICV1IHRocmVhZHNcXG5cJiMzNDssXG4mIzQzO1x0ICAgICAgIG1heF9lbnRyaWVzLCBjdHgubW1hcF9zeiwgYXJncy5ucl90aHJlYWRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2FycmF5bWFwX21tYXAgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDthcnJheW1hcC1tbWFwXCYjMzQ7LFxuJiM0MztcdC5hcmdwID0gXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLFxuJiM0MztcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuJiM0MztcdC5zZXR1cCA9IHNldHVwLFxuJiM0MztcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcbiYjNDM7XHQubWVhc3VyZSA9IG1lYXN1cmUsXG4mIzQzO1x0LnJlcG9ydF9wcm9ncmVzcyA9IG9wc19yZXBvcnRfcHJvZ3Jlc3MsXG4mIzQzO1x0LnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2VmZDQ0MWNkNjUzYTJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2hcbkBAIC0wLDAgJiM0MzsxLDE1IEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzO3NvdXJjZSAuL2JlbmNocy9ydW5fY29tbW9uLnNoXG4mIzQzO1xuJiM0MztzZXQgLWV1Zm8gcGlwZWZhaWxcbiYjNDM7XG4mIzQzO2ZvciB0IGluIDEgNCA4IDE2OyBkb1xuJiM0Mztmb3IgcyBpbiAxMDQ4NTc2IDgzODg2MDggNjcxMDg4NjQ7IGRvXG4mIzQzO3N1YnRpdGxlIFwmIzM0O25yX3RocmVhZHM6ICR0LCBtYXBfc2l6ZTogJHNcJiMzNDtcbiYjNDM7XHRzdW1tYXJpemVfb3BzIFwmIzM0O2FycmF5bWFwLW1tYXA6IFwmIzM0OyBcXFxuJiM0MztcdCAgICBcJiMzNDskKCRSVU5fQkVOQ0ggLS1uci10aHJlYWRzICR0IC0tbWFwLXNpemUgJHMgYXJyYXltYXAtbW1hcClcJiMzNDtcbiYjNDM7XHRwcmludGYgXCYjMzQ7XFxuXCYjMzQ7XG4mIzQzO2RvbmVcbiYjNDM7ZG9uZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FycmF5X21hcF9tbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgcGFnZSBmYXVsdGluZyBmb3IgQlBGIGFycmF5IG1hcHMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gbm90IGVhZ2VybHkgbWFwIHRoZSBtZW1vcnkgYW5kIGFkZHMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGJwZl9tYXBfbW1hcF9mYXVsdGAgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzIG9uIGRlbWFuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgY3JlYXRpbmcgYW5kIG1tYXAtaW5nIGEgQlBGIGFycmF5IG1hcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRhOGI2ZmRmZWNkN2YzMTEyNjc1Zjc2ZjhlODUyMGVmOWI2OTA0OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDAxOjE2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggZTA2NmY0NGE5YzA1ODAuLmI1MzZmM2M5ZTEwMzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTE0NSw2ICYjNDM7MTQ1LDcgQEAgc3RydWN0IGJwZl9tYXBfb3BzIHsKIAlpbnQgKCptYXBfZGlyZWN0X3ZhbHVlX21ldGEpKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJICAgICB1NjQgaW1tLCB1MzIgKm9mZik7CiAJaW50ICgqbWFwX21tYXApKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKJiM0MzsJdm1fZmF1bHRfdCAoKm1hcF9tbWFwX2ZhdWx0KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CiAJX19wb2xsX3QgKCptYXBfcG9sbCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKTsKIAl1bnNpZ25lZCBsb25nICgqbWFwX2dldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuYwppbmRleCAyNDhiNDgxODE3OGNkMS4uMTcxMWJlNTgyOTA3ZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYXJyYXltYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmMKQEAgLTU3Niw3ICYjNDM7NTc2LDYgQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsCiBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTsKLQlwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWlmICghKG1hcC0mZ3Q7bWFwX2ZsYWdzICZhbXA7IEJQRl9GX01NQVBBQkxFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01ODUsOCAmIzQzOzU4NCw0MiBAQCBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogCSAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktJmd0O21hcC5tYXhfZW50cmllcyAqIGFycmF5LSZndDtlbGVtX3NpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgYXJyYXlfbWFwX3ZtYWxsb2NfYWRkcihhcnJheSksCi0JCQkJICAgdm1hLSZndDt2bV9wZ29mZiAmIzQzOyBwZ29mZik7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJiMzOTtlZCB1cCBmcm9udCwgc28gaW5zdGVhZCBvZiB3aXJpbmcgdXAKJiM0MzsJICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IGFycmF5X21hcF9tbWFwX2ZhdWx0KCkgaW5zZXJ0IHBhZ2VzIG9uIGRlbWFuZC4KJiM0MzsJICogcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKCkgdXNlZCB0byBzZXQgdGhlc2UgZmxhZ3MgZm9yIHVzOyBrZWVwCiYjNDM7CSAqIHRoZW0gdG8gcHJlc2VydmUgYmVoYXZpb3IgKG5vIFZNQSBleHBhbnNpb24sIGV4Y2x1ZGVkIGZyb20gY29yZWR1bXApLgomIzQzOwkgKi8KJiM0MzsJdm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2bV9mYXVsdF90IGFycmF5X21hcF9tbWFwX2ZhdWx0KHN0cnVjdCBicGZfbWFwICptYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTsKJiM0MzsJcGdvZmZfdCBwZ29mZiA9IFBBR0VfQUxJR04oc2l6ZW9mKCphcnJheSkpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwl2b2lkICprYWRkcjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogdm1mLSZndDtwZ29mZiBpcyB0aGUgcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBtYXBwaW5nICh2bWEtJmd0O3ZtX3Bnb2ZmIHBsdXMKJiM0MzsJICogdGhlIG9mZnNldCBvZiB0aGUgZmF1bHRpbmcgYWRkcmVzcykuIFRoZSBkYXRhIHBhZ2VzIHN0YXJ0IGFmdGVyIHRoZQomIzQzOwkgKiBicGZfYXJyYXkgaGVhZGVyLCBoZW5jZSB0aGUgZXh0cmEgcGdvZmYuIFRoaXMgbWlycm9ycyB0aGUgb2Zmc2V0IHRoYXQKJiM0MzsJICogcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIC4uLiwgdm1hLSZndDt2bV9wZ29mZiAmIzQzOyBwZ29mZikgdXNlZCB0byBhcHBseS4KJiM0MzsJICovCiYjNDM7CWthZGRyID0gYXJyYXlfbWFwX3ZtYWxsb2NfYWRkcihhcnJheSkgJiM0MzsKJiM0MzsJCSgodTY0KSh2bWYtJmd0O3Bnb2ZmICYjNDM7IHBnb2ZmKSAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKJiM0MzsKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShrYWRkcik7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CiYjNDM7CWdldF9wYWdlKHBhZ2UpOwomIzQzOwl2bWYtJmd0O3BhZ2UgPSBwYWdlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLApAQCAtODEyLDYgJiM0Mzs4NDUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHsKIAkubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLAogCS5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsCiAJLm1hcF9tbWFwID0gYXJyYXlfbWFwX21tYXAsCiYjNDM7CS5tYXBfbW1hcF9mYXVsdCA9IGFycmF5X21hcF9tbWFwX2ZhdWx0LAogCS5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLAogCS5tYXBfY2hlY2tfYnRmID0gYXJyYXlfbWFwX2NoZWNrX2J0ZiwKIAkubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggMGZmOWUzYWEyOTNkNTcuLmZiMGUxZjU1YzQ4NzNkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtMTA3Nyw5ICYjNDM7MTA3NywyNiBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJCWJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDYWxsZWQgZm9yIG1hcHMgdGhhdCBwb3B1bGF0ZSB0aGVpciBtZW1vcnktbWFwcGVkIHJlZ2lvbiBsYXppbHksIGkuZS4gdGhhdAomIzQzOyAqIHJldHVybiB3aXRob3V0IHdpcmluZyB1cCBhbnkgUFRFcyBmcm9tIHRoZWlyIC0mZ3Q7bWFwX21tYXAgY2FsbGJhY2suIE1hcHMgdGhhdAomIzQzOyAqIHBvcHVsYXRlIHRoZSB3aG9sZSBWTUEgZWFnZXJseSAoZS5nLiB2aWEgcmVtYXBfdm1hbGxvY19yYW5nZSgpKSBuZXZlciByZWFjaAomIzQzOyAqIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi0mZ3Q7dm1hLSZndDt2bV9wcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CWlmICghbWFwLSZndDtvcHMtJmd0O21hcF9tbWFwX2ZhdWx0KQomIzQzOwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcC0mZ3Q7b3BzLSZndDttYXBfbW1hcF9mYXVsdChtYXAsIHZtZik7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7CiAJLm9wZW4JCT0gYnBmX21hcF9tbWFwX29wZW4sCiAJLmNsb3NlCQk9IGJwZl9tYXBfbW1hcF9jbG9zZSwKJiM0MzsJLmZhdWx0CQk9IGJwZl9tYXBfbW1hcF9mYXVsdCwKIH07CiAKIHN0YXRpYyBpbnQgYnBmX21hcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1NWQzOTQ0Mzg3MDVhNi4uYjY1OTNmYjExMzViMjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKQEAgLTEwMDMsNiAmIzQzOzEwMDMsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9ub3AubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm8gXAomIzQzOwkJICQoT1VUUFVUKS9iZW5jaF9hcnJheW1hcF9tbWFwLm8gXAogCQkgJChPVVRQVVQpL3VzZHRfMS5vIFwKIAkJICQoT1VUUFVUKS91c2R0XzIubyBcCiAJCSAjCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jCmluZGV4IDNkOWQyY2Q3NzY0YmQzLi4xOTJkNWZjYjdhNzQ4ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKQEAgLTI4Nyw2ICYjNDM7Mjg3LDcgQEAgZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2NyeXB0b19hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3NvY2ttYXBfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9scG1fdHJpZV9tYXBfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF94ZHBfbGJfYXJncDsKJiM0MztleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0gewogCXsgJmFtcDtiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCAmIzM0O1JpbmcgYnVmZmVycyBiZW5jaG1hcmsmIzM0OywgMCB9LApAQCAtMzA0LDYgJiM0MzszMDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0gewogCXsgJmFtcDtiZW5jaF9zb2NrbWFwX2FyZ3AsIDAsICYjMzQ7YnBmIHNvY2ttYXAgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3AsIDAsICYjMzQ7TFBNIHRyaWUgbWFwIGJlbmNobWFyayYjMzQ7LCAwIH0sCiAJeyAmYW1wO2JlbmNoX3hkcF9sYl9hcmdwLCAwLCAmIzM0O1hEUCBsb2FkLWJhbGFuY2VyIGJlbmNobWFyayYjMzQ7LCAwIH0sCiYjNDM7CXsgJmFtcDtiZW5jaF9hcnJheW1hcF9tbWFwX2FyZ3AsIDAsICYjMzQ7YXJyYXltYXAtbW1hcCBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXt9LAogfTsKIApAQCAtNTgyLDYgJiM0Mzs1ODQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX25vcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYXJyYXltYXBfbW1hcDsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7CiAJJmFtcDtiZW5jaF9jb3VudF9nbG9iYWwsCkBAIC02NjUsNiAmIzQzOzY2OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0gewogCSZhbXA7YmVuY2hfbHBtX3RyaWVfZnJlZSwKIAkmYW1wO2JlbmNoX2JwZl9ub3AsCiAJJmFtcDtiZW5jaF94ZHBfbGIsCiYjNDM7CSZhbXA7YmVuY2hfYXJyYXltYXBfbW1hcCwKIH07CiAKIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2FycmF5bWFwX21tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYXJyYXltYXBfbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNTZkODBhODVjZjAxZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYXJyYXltYXBfbW1hcC5jCkBAIC0wLDAgJiM0MzsxLDE0NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuICovCiYjNDM7I2luY2x1ZGUgJmx0O2FyZ3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JlbmNoLmgmIzM0OwomIzQzOwomIzQzOy8qIEJlbmNobWFyayBtbWFwKCkvbXVubWFwKCkgb2YgYW4gbW1hcC1hYmxlIEJQRiBhcnJheSBtYXAgZnJvbSBOIHRocmVhZHMuICovCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjdHggewomIzQzOwlpbnQgbWFwX2ZkOwomIzQzOwlzaXplX3QgbW1hcF9zejsKJiM0Mzt9IGN0eDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHsKJiM0MzsJX191MzIgbnJfdGhyZWFkczsKJiM0MzsJX191NjQgbWFwX3NpemU7CiYjNDM7fSBhcmdzID0gewomIzQzOwkubnJfdGhyZWFkcyA9IDE2LAomIzQzOwkubWFwX3NpemUgPSA4ICogMTAyNCAqIDEwMjQsIC8qIDggTWlCICovCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJQVJHX05SX1RIUkVBRFMgPSA1MDAwLAomIzQzOwlBUkdfTUFQX1NJWkUgPSA1MDAxLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7CiYjNDM7CXsgJiMzNDtuci10aHJlYWRzJiMzNDssIEFSR19OUl9USFJFQURTLCAmIzM0O05SX1RIUkVBRFMmIzM0OywgMCwKJiM0MzsJCSYjMzQ7TnVtYmVyIG9mIHRocmVhZHMgdGhhdCBtbWFwL211bm1hcCB0aGUgbWFwIChkZWZhdWx0IDE2KSYjMzQ7IH0sCiYjNDM7CXsgJiMzNDttYXAtc2l6ZSYjMzQ7LCBBUkdfTUFQX1NJWkUsICYjMzQ7QllURVMmIzM0OywgMCwKJiM0MzsJCSYjMzQ7U2l6ZSBvZiB0aGUgQlBGIGFycmF5IG1hcCBpbiBieXRlcyAoZGVmYXVsdCA4Mzg4NjA4KSYjMzQ7IH0sCiYjNDM7CXt9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGVycm9yX3QgcGFyc2VfYXJnKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChrZXkpIHsKJiM0MzsJY2FzZSBBUkdfTlJfVEhSRUFEUzoKJiM0MzsJCWFyZ3MubnJfdGhyZWFkcyA9IHN0cnRvdWwoYXJnLCBOVUxMLCAwKTsKJiM0MzsJCWlmIChhcmdzLm5yX3RocmVhZHMgPT0gMCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ludmFsaWQgbnItdGhyZWFkczogJXNcbiYjMzQ7LCBhcmcpOwomIzQzOwkJCWFyZ3BfdXNhZ2Uoc3RhdGUpOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQVJHX01BUF9TSVpFOgomIzQzOwkJYXJncy5tYXBfc2l6ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMCk7CiYjNDM7CQlpZiAoYXJncy5tYXBfc2l6ZSA9PSAwKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7SW52YWxpZCBtYXAtc2l6ZTogJXNcbiYjMzQ7LCBhcmcpOwomIzQzOwkJCWFyZ3BfdXNhZ2Uoc3RhdGUpOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovCiYjNDM7Y29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwID0gewomIzQzOwkub3B0aW9ucyA9IG9wdHMsCiYjNDM7CS5wYXJzZXIgPSBwYXJzZV9hcmcsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7YmVuY2htYXJrIGRvZXNuJiMzOTt0IHN1cHBvcnQgY29uc3VtZXIhXG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBudW1iZXIgb2Ygd29ya2VyIHRocmVhZHMgaXMgY29udHJvbGxlZCBieSAtLW5yLXRocmVhZHMgYW5kCiYjNDM7CSAqIGRyaXZlcyB0aGUgZnJhbWV3b3JrJiMzOTtzIHByb2R1Y2VyIG1hY2hpbmVyeSwgc28gcGVyLXByb2R1Y2VyIHN0YXRzCiYjNDM7CSAqIGFyZSByZXBvcnRlZCBjb3JyZWN0bHkuCiYjNDM7CSAqLwomIzQzOwllbnYucHJvZHVjZXJfY250ID0gYXJncy5ucl90aHJlYWRzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBoaXRzOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dCkKJiM0Mzt7CiYjNDM7CXdoaWxlICh0cnVlKSB7CiYjNDM7CQl2b2lkICphZGRyOwomIzQzOwomIzQzOwkJYWRkciA9IG1tYXAoTlVMTCwgY3R4Lm1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkJICAgIE1BUF9TSEFSRUQsIGN0eC5tYXBfZmQsIDApOwomIzQzOwkJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O21tYXAgZmFpbGVkOiAlZFxuJiMzNDssIC1lcnJubyk7CiYjNDM7CQkJZXhpdCgxKTsKJiM0MzsJCX0KJiM0MzsJCWlmIChtdW5tYXAoYWRkciwgY3R4Lm1tYXBfc3opKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7bXVubWFwIGZhaWxlZDogJWRcbiYjMzQ7LCAtZXJybm8pOwomIzQzOwkJCWV4aXQoMSk7CiYjNDM7CQl9CiYjNDM7CQlhdG9taWNfaW5jKCZhbXA7aGl0cyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKQomIzQzO3sKJiM0MzsJcmVzLSZndDtoaXRzID0gYXRvbWljX3N3YXAoJmFtcDtoaXRzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG9wdHMsIC5tYXBfZmxhZ3MgPSBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CWxvbmcgcGFnZV9zeiA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKJiM0MzsJX191MzIgdmFsdWVfc2l6ZSA9IHNpemVvZihfX3U2NCk7CiYjNDM7CV9fdTMyIG1heF9lbnRyaWVzOwomIzQzOwomIzQzOwlzZXR1cF9saWJicGYoKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbW1hcC1hYmxlIGFycmF5IG1hcHMgcm91bmQgdGhlIHZhbHVlIHNpemUgdXAgdG8gOCBieXRlcyBhbmQgZXhwb3NlCiYjNDM7CSAqIFBBR0VfQUxJR04obWF4X2VudHJpZXMgKiBlbGVtX3NpemUpIGJ5dGVzIHRvIHVzZXIgc3BhY2UuCiYjNDM7CSAqLwomIzQzOwltYXhfZW50cmllcyA9IChhcmdzLm1hcF9zaXplICYjNDM7IHZhbHVlX3NpemUgLSAxKSAvIHZhbHVlX3NpemU7CiYjNDM7CWN0eC5tbWFwX3N6ID0gKChfX3U2NCltYXhfZW50cmllcyAqIHZhbHVlX3NpemUgJiM0MzsgcGFnZV9zeiAtIDEpICZhbXA7CiYjNDM7CQkgICAgICB+KHBhZ2Vfc3ogLSAxKTsKJiM0MzsKJiM0MzsJY3R4Lm1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWSwgJiMzNDttbWFwX2FycmF5JiMzNDssCiYjNDM7CQkJCSAgICBzaXplb2YoX191MzIpLCB2YWx1ZV9zaXplLCBtYXhfZW50cmllcywKJiM0MzsJCQkJICAgICZhbXA7b3B0cyk7CiYjNDM7CWlmIChjdHgubWFwX2ZkICZsdDsgMCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBtYXA6ICVkXG4mIzM0OywgLWVycm5vKTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpbnRmKCYjMzQ7YXJyYXkgbWFwOiAldSBlbnRyaWVzLCBtbWFwIHNpemUgJXp1IGJ5dGVzLCAldSB0aHJlYWRzXG4mIzM0OywKJiM0MzsJICAgICAgIG1heF9lbnRyaWVzLCBjdHgubW1hcF9zeiwgYXJncy5ucl90aHJlYWRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2FycmF5bWFwX21tYXAgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDthcnJheW1hcC1tbWFwJiMzNDssCiYjNDM7CS5hcmdwID0gJmFtcDtiZW5jaF9hcnJheW1hcF9tbWFwX2FyZ3AsCiYjNDM7CS52YWxpZGF0ZSA9IHZhbGlkYXRlLAomIzQzOwkuc2V0dXAgPSBzZXR1cCwKJiM0MzsJLnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLAomIzQzOwkubWVhc3VyZSA9IG1lYXN1cmUsCiYjNDM7CS5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLAomIzQzOwkucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjNlZmQ0NDFjZDY1M2EyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaApAQCAtMCwwICYjNDM7MSwxNSBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzO3NvdXJjZSAuL2JlbmNocy9ydW5fY29tbW9uLnNoCiYjNDM7CiYjNDM7c2V0IC1ldWZvIHBpcGVmYWlsCiYjNDM7CiYjNDM7Zm9yIHQgaW4gMSA0IDggMTY7IGRvCiYjNDM7Zm9yIHMgaW4gMTA0ODU3NiA4Mzg4NjA4IDY3MTA4ODY0OyBkbwomIzQzO3N1YnRpdGxlICYjMzQ7bnJfdGhyZWFkczogJHQsIG1hcF9zaXplOiAkcyYjMzQ7CiYjNDM7CXN1bW1hcml6ZV9vcHMgJiMzNDthcnJheW1hcC1tbWFwOiAmIzM0OyBcCiYjNDM7CSAgICAmIzM0OyQoJFJVTl9CRU5DSCAtLW5yLXRocmVhZHMgJHQgLS1tYXAtc2l6ZSAkcyBhcnJheW1hcC1tbWFwKSYjMzQ7CiYjNDM7CXByaW50ZiAmIzM0O1xuJiMzNDsKJiM0Mztkb25lCiYjNDM7ZG9uZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTMxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEFycmF5IE1hcCBtbWFwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIEJQRiBhcnJheSBtYXAgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjb3JlIGlkZWEgaXMgc2hpZnRpbmcgZnJvbSBlYWdlcmx5IG1hcHBpbmcgdGhlIG1lbW9yeSB3aXRoIGByZW1hcF92bWFsbG9jX3JhbmdlYCBpbiBgYXJyYXlfbWFwX21tYXBgIHRvIGEgbGF6eSwgZGVtYW5kLXBhZ2VkIGFwcHJvYWNoLiBUaGUgdXNlIG9mIGBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVBgIGZsYWdzIGlzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIHRoaXMsIGFsb25nIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBtYXBfbW1hcF9mYXVsdGAgY2FsbGJhY2sgd2hpY2ggd2lsbCBub3cgaGFuZGxlIHRoZSBwYWdlIGZhdWx0cy4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIHNoaWZ0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW4gZGV0YWlsLiBJIGtub3cgdGhpcyB3aWxsIGFmZmVjdCBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXNhZ2UuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgbWFraW5nIEJQRiBhcnJheSBtYXBzIGJlaGF2ZSBtb3JlIGxpa2UgdHlwaWNhbCBtZW1vcnkgcmVnaW9ucywgd2hlcmUgcGFnZXMgYXJlIG9ubHkgYWxsb2NhdGVkIGFuZCBtYXBwZWQgd2hlbiB0aGV5JiMzOTtyZSBhY3R1YWxseSBhY2Nlc3NlZC4gVGhpcyBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUuIEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBzY2VuYXJpb3M6IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiB0aGUgaW5pdGlhbCBhY2Nlc3Mgb3ZlcmhlYWQ/IEhvdyBkb2VzIHRoaXMgaW5mbHVlbmNlIG92ZXJhbGwgbWVtb3J5IGNvbnN1bXB0aW9uPyBJcyBpdCBnb2luZyB0byBiZSBhIHdpbiBpbiB0ZXJtcyBvZiByZWR1Y2VkIG1lbW9yeSBmb290cHJpbnQgZm9yIGxhcmdlIGFycmF5cywgb3Igd2lsbCB0aGUgYWRkZWQgZmF1bHQgaGFuZGxpbmcgY29zdCBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgaW4gY2VydGFpbiB3b3JrbG9hZHM/IFRoaXMgbmVlZHMgc29tZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24uCgpUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3ZlIG1vZGlmaWVkIGBicGZfbWFwX21tYXBgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gaG9vayB1cCB0aGUgZmF1bHQgaGFuZGxlciBpbiBgYnBmX21hcF9kZWZhdWx0X3Ztb3BzYCBpcyB0aGUga2V5LiBJdCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlZ3JhdGluZyB0aGUgbGF6eSBtYXBwaW5nIHdpdGhpbiB0aGUgQlBGIHN5c3RlbSBjYWxsIGludGVyZmFjZSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhleSYjMzk7dmUgdXBkYXRlZCB0aGUgYG1hcC0mZ3Q7b3BzLSZndDttYXBfbW1hcF9mYXVsdGAgY2FsbC4KClJpZ2h0LCBzbyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGFycmF5X21hcF9tbWFwYCwgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBicGZfbWFwX21tYXBfZmF1bHRgLiBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgYGdyZXBgIGZvciBgYnBmX21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZXNlIGFyZSBiZWluZyBjYWxsZWQgZnJvbSBhbmQgdG8gc2VlIHdoYXQgaW50ZXJhY3Rpb25zIGV4aXN0LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBtYXAgZmF1bHRzIGFyZSB0cmlnZ2VyZWQsIGhhbmRsZWQsIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBvbiBkZW1hbmQuIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0IHRvIGFuYWx5emluZyB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MTA3Mj1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA4NS0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEwODY6c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA4Ny17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTA5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDk4LVx0LmNsb3NlXHRcdD0gYnBmX21hcF9tbWFwX2Nsb3NlLFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA5OTpcdC5mYXVsdFx0XHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExMDAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlYnVnZ2luZyBJbml0aWF0aXZlOiBUaGUgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIHByb2JsZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBsb2dzLCBhbmQgdGhlIGJlc3QgdG9vbCBmb3IgdGhhdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBncmVwYC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGlzc3VlIG9yIGZ1bmN0aW9uIGNhbGwgdGhhdCYjMzk7cyBjYXVzaW5nIHRoaXMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YC4gVGhpcyBsaWtlbHkgcG9pbnRzIHRvIGEgbWVtb3J5LXJlbGF0ZWQgaXNzdWUsIHByb2JhYmx5IHdpdGggbWVtb3J5IG1hcHBpbmcgYW5kIGhvdyBhbiBgYXJyYXlfbWFwYCBmdW5jdGlvbiBpcyBpbnRlcmFjdGluZyB3aXRoIGl0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gaHVudCBkb3duIGluc3RhbmNlcyBvZiB0aGF0IHNwZWNpZmljIHRlcm0sIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQg4oCTIHdoZXJlIHRoaXMgc3BlY2lmaWMgZXJyb3Igb3IgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIG9yIHJlZmVyZW5jZWQuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcm9vdCBjYXVzZS4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIHByb2JsZW1hdGljIGxvZ2ljIHF1aWNrbHkuIExldCYjMzk7cyBzZWUgd2hhdCBgZ3JlcGAgdW5jb3ZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJyYXlfbWFwX21tYXBfZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTU3Nj1zdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy01ODgtXHQgKiBUaGUgYmFja2luZyBtZW1vcnkgaXMgdm1hbGxvYyYjMzk7ZWQgdXAgZnJvbnQsIHNvIGluc3RlYWQgb2Ygd2lyaW5nIHVwXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NTg5Olx0ICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IGFycmF5X21hcF9tbWFwX2ZhdWx0KCkgaW5zZXJ0IHBhZ2VzIG9uIGRlbWFuZC5cbmtlcm5lbC9icGYvYXJyYXltYXAuYy01OTAtXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNTk3LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjU5ODpzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTU5OS1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODM0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NDctXHQubWFwX21tYXAgPSBhcnJheV9tYXBfbW1hcCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NDg6XHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NDktXHQubWFwX3NlcV9zaG93X2VsZW0gPSBhcnJheV9tYXBfc2VxX3Nob3dfZWxlbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzc0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOgoKKipGdW5jdGlvbmFsIFBhdGNoIEFuYWx5c2lzKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgc29saWQg4oCTIGl0JiMzOTtzIGZ1bmN0aW9uYWwgYW5kIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgY29kZSBwYXRoIGl0IG1vZGlmaWVzIGlzIHJlYWNoYWJsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBmb2N1cyBuZWVkcyB0byBiZSBsYXNlci1zaGFycCBvbiBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGRpZyBpbnRvLiBJdCBsb29rcyBsaWtlIGBhcnJheV9tYXBfbW1hcGAgaXRzZWxmIGhhcyBhbHNvIHNlZW4gc29tZSBtb2RpZmljYXRpb25zLCBzbyB0aGF0JiMzOTtzIHdvcnRoIGtlZXBpbmcgYW4gZXllIG9uIGFzIHdlbGwuCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBCdXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjaywgZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyLCBtb3JlIG9ic2N1cmUgY29uZmlndXJhdGlvbnMgdGhhdCB0aGlzIHBhdGNoIGRlcGVuZHMgb24uIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gY29uZmlybWluZyB0aGlzIGNoYW5nZSB3b3JrcyBhcyBleHBlY3RlZCBpbiB2YXJpb3VzIHNldHVwcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGdvaW5nIHRvIHBsYXkgbmljZSB3aXRoIGFsbCBvdXIgZGVwbG95bWVudCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxOTIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYGFycmF5bWFwLmNgKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBhcnJheW1hcC5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBhIHBhcnRpY3VsYXIgY29uZGl0aW9uLiBUaGlzIGNvdWxkIGJlIGEgbWFjcm8sIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSXQmIzM5O3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIGFjdHVhbGx5IGluY2x1ZGVkIGluIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyBhcm91bmQgY29tcGlsYXRpb24gb2YgdGhpcyBmaWxlIGlzIGZvdW5kYXRpb25hbCBiZWZvcmUgY29udGludWluZy4gSSBuZWVkIHRvIGtub3cgd2h5IGFuZCBob3cgaXQmIzM5O3MgaW5jbHVkZWQsIG9yIGV4Y2x1ZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcnJheW1hcC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jPTc5PXN0YXRpYyB2b2lkIHRlc3RfYXJyYXlfbWFwKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xMzAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjEzMTpcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VhcnJheW1hcF9vdXRwdXQsIGV4cGVjdGVkX3RvdGFsLCBcJiMzNDthcnJheV9vdXRwdXRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xMzItXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY3B1ICYjNDM7IDEsIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBlcmNwdV92YWwsIFwmIzM0O3BlcmNwdV92YWxcJiMzNDspO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jPTUwPWNoZWNrX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzo1ODp1MzIgYXJyYXltYXBfb3V0cHV0ID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTU5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jPTYxPWludCB0ZXN0X3BrdF9hY2Nlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTY4LVx0XHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXHUwMDI2YXJyYXltYXAsIHVudXNlZF9zdWJwcm9nLCBcdTAwMjZkYXRhLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jOjY5Olx0YXJyYXltYXBfb3V0cHV0ID0gZGF0YS5vdXRwdXQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy03MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBUaGF0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50LCB0aGUga2V5c3RvbmUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIGtub2JzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBCUEYgc3lzY2FsbCBiZWhhdmlvciwgZXZlbiBpbmRpcmVjdGx5PyBJIGNhbiYjMzk7dCBiZSBzdXJlLCBJIHNob3VsZCByZWFsbHkgY2hlY2suCgpMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSBzb3VyY2UgY29kZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIHN5c2NhbGwmIzM5O3MgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCBtaWdodCBiZSBhZmZlY3RlZCBieSB2YXJpb3VzIG90aGVyIGNvbXBpbGF0aW9uIG9wdGlvbnMgb3Iga2VybmVsIHNldHRpbmdzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDgxOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMucnN0PTM5Nj1jaXJjdW1zdGFuY2VzIHRoZSBjYWNoaW5nIGNvZGUgaXMgcnVubmluZyBpbiB0aGUgc2VjdXJpdHkgY29udGV4dCBvZiB3aGF0ZXZlclxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMucnN0OjM5Nzpwcm9jZXNzIGlzc3VlZCB0aGUgb3JpZ2luYWwgc3lzY2FsbCBvbiB0aGUgbmV0ZnMuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy5yc3QtMzk4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdD05MD1vZiBmdHJhY2UuIEhlcmUgaXMgYSBsaXN0IG9mIHNvbWUgb2YgdGhlIGtleSBmaWxlczpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3QtMTg2LVx0YmVmb3JlIGEgd2FpdGVyIGlzIHdva2VuIHVwLiBUaGF0IGlzLCBpZiBhbiBhcHBsaWNhdGlvbiBjYWxscyBhXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTg3Olx0YmxvY2tpbmcgcmVhZCBzeXNjYWxsIG9uIG9uZSBvZiB0aGUgcGVyX2NwdSB0cmFjZV9waXBlX3JhdyBmaWxlcywgaXRcbkRvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnJzdC0xODgtXHR3aWxsIGJsb2NrIHVudGlsIHRoZSBnaXZlbiBhbW91bnQgb2YgZGF0YSBzcGVjaWZpZWQgYnkgYnVmZmVyX3BlcmNlbnRcbi0tXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvcnNlcS5yc3Q9MjE2PW9wZXJhdGlvbi5cbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9yc2VxLnJzdC0yMTctXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvcnNlcS5yc3Q6MjE4OklmIHRoZSB0aHJlYWQgaXNzdWVzIGEgc3lzY2FsbCBvdGhlciB0aGFuIHJzZXFfc2xpY2VfeWllbGQoMikgd2l0aGluIHRoZVxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL3JzZXEucnN0LTIxOS1ncmFudGVkIHRpbWVzbGljZSBleHRlbnNpb24sIHRoZSBncmFudCBpcyBhbHNvIHJldm9rZWQgYW5kIHRoZSBDUFUgaXNcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTMwNT1zdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfdGhyZWFkX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYyxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMxOC1cdCAqIFRvIGFsbG93IHRoZSBzeXNjYWxsczpzeXNfZXhpdF9leGVjdmUgdHJhY2Vwb2ludCB3ZSBuZWVkIHRvIHByZXNlcnZlXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjMxOTpcdCAqIHN5c2NhbGxubywgYnV0IGRvIG5vdCBuZWVkIG9yaWdfeDAgb3IgdGhlIG9yaWdpbmFsIEdQUnMuXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMyMC1cdCAqL1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtODgtLypcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg6ODk6ICogSWYgcHRfcmVncy5zeXNjYWxsbm8gPT0gTk9fU1lTQ0FMTCwgdGhlbiB0aGUgdGhyZWFkIGlzIG5vdCBleGVjdXRpbmdcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtOTAtICogYSBzeXNjYWxsIC0tIGkuZS4sIGl0cyBtb3N0IHJlY2VudCBlbnRyeSBpbnRvIHRoZSBrZXJuZWwgZnJvbVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg9MTU2PXN0cnVjdCBwdF9yZWdzIHtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTE2Ni1cdHU2NCBvcmlnX3gwO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaDoxNjc6XHRzMzIgc3lzY2FsbG5vO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xNjgtXHR1MzIgcG1yO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg9MTc3PXN0YXRpYyBpbmxpbmUgYm9vbCBpbl9zeXNjYWxsKHN0cnVjdCBwdF9yZWdzIGNvbnN0ICpyZWdzKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xNzgte1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaDoxNzk6XHRyZXR1cm4gcmVncy1cdTAwM2VzeXNjYWxsbm8gIT0gTk9fU1lTQ0FMTDtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtMTgwLX1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHZvaWQgZm9yZ2V0X3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTE4My17XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oOjE4NDpcdHJlZ3MtXHUwMDNlc3lzY2FsbG5vID0gTk9fU1lTQ0FMTDtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtMTg1LX1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaD0yMD1zdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgtMjIte1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmg6MjM6XHRyZXR1cm4gcmVncy1cdTAwM2VzeXNjYWxsbm87XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaC0yNC19XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmg9NjQ9c3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaC02Ny17XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaDo2ODpcdHJlZ3MtXHUwMDNlc3lzY2FsbG5vID0gbnI7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaC02OS1cdGlmIChuciA9PSAtMSkge1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlPTEwPUNGTEFHU19SRU1PVkVfcmV0dXJuX2FkZHJlc3MubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlLTEzLSMgY2hlY2tzIGR1ZSB0byByYW5kb21pemVfa3N0YWNrX29mZnNldC5cbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlOjE0OkNGTEFHU19SRU1PVkVfc3lzY2FsbC5vXHQgPSAtZnN0YWNrLXByb3RlY3RvciAtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmdcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlOjE1OkNGTEFHU19zeXNjYWxsLm9cdCYjNDM7PSAtZm5vLXN0YWNrLXByb3RlY3RvclxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUtMTYtXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGU9Mjk9b2JqLXlcdFx0XHQ6PSBkZWJ1Zy1tb25pdG9ycy5vIGVudHJ5Lm8gaXJxLm8gZnBzaW1kLm9cdFx0XFxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZS0zNS1cdFx0XHQgICBzbXAubyBzbXBfc3Bpbl90YWJsZS5vIHRvcG9sb2d5Lm8gc21jY2MtY2FsbC5vXHRcXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGU6MzY6XHRcdFx0ICAgc3lzY2FsbC5vIHByb3Rvbi1wYWNrLm8gaWRsZS5vIHBhdGNoaW5nLm8gcGkvXHRcXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUtMzctXHRcdFx0ICAgcnNpLm8ganVtcF9sYWJlbC5vXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYz0yNz1pbnQgbWFpbih2b2lkKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2FzbS1vZmZzZXRzLmMtNzUtICBERUZJTkUoU19QU1RBVEUsXHRcdG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwc3RhdGUpKTtcbmFyY2gvYXJtNjQva2VybmVsL2FzbS1vZmZzZXRzLmM6NzY6ICBERUZJTkUoU19TWVNDQUxMTk8sXHRcdG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzeXNjYWxsbm8pKTtcbmFyY2gvYXJtNjQva2VybmVsL2FzbS1vZmZzZXRzLmMtNzctICBERUZJTkUoU19TREVJX1RUQlIxLFx0XHRvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc2RlaV90dGJyMSkpO1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jPTczNj1zdGF0aWMgaW50IHN5c3RlbV9jYWxsX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy03Mzkte1xuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6NzQwOlx0cmV0dXJuIG1lbWJ1Zl9zdG9yZShcdTAwMjZ0bywgdGFza19wdF9yZWdzKHRhcmdldCktXHUwMDNlc3lzY2FsbG5vKTtcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc0MS19XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM9NzQzPXN0YXRpYyBpbnQgc3lzdGVtX2NhbGxfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc0Ny17XG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzo3NDg6XHRpbnQgc3lzY2FsbG5vID0gdGFza19wdF9yZWdzKHRhcmdldCktXHUwMDNlc3lzY2FsbG5vO1xuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzQ5LVx0aW50IHJldDtcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc1MC1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjc1MTpcdHJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbihcdTAwMjZwb3MsIFx1MDAyNmNvdW50LCBcdTAwMjZrYnVmLCBcdTAwMjZ1YnVmLCBcdTAwMjZzeXNjYWxsbm8sIDAsIC0xKTtcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc1Mi1cdGlmIChyZXQpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzU0LVxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6NzU1Olx0dGFza19wdF9yZWdzKHRhcmdldCktXHUwMDNlc3lzY2FsbG5vID0gc3lzY2FsbG5vO1xuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzU2LVx0cmV0dXJuIHJldDtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYz0yMjM1PWxvbmcgY29tcGF0X2FyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGNvbXBhdF9sb25nX3QgcmVxdWVzdCxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy0yMjczLVx0XHRjYXNlIENPTVBBVF9QVFJBQ0VfU0VUX1NZU0NBTEw6XG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzoyMjc0Olx0XHRcdHRhc2tfcHRfcmVncyhjaGlsZCktXHUwMDNlc3lzY2FsbG5vID0gZGF0YTtcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTIyNzUtXHRcdFx0cmV0ID0gMDtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYz0yNDExPWludCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTI0MjYtXHRpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKSlcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjI0Mjc6XHRcdHRyYWNlX3N5c19lbnRlcihyZWdzLCByZWdzLVx1MDAzZXN5c2NhbGxubyk7XG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy0yNDI4LVxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6MjQyOTpcdGF1ZGl0X3N5c2NhbGxfZW50cnkocmVncy1cdTAwM2VzeXNjYWxsbm8sIHJlZ3MtXHUwMDNlb3JpZ194MCwgcmVncy1cdTAwM2VyZWdzWzFdLFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtMjQzMC1cdFx0XHQgICAgcmVncy1cdTAwM2VyZWdzWzJdLCByZWdzLVx1MDAzZXJlZ3NbM10pO1xuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtMjQzMS1cbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjI0MzI6XHRyZXR1cm4gcmVncy1cdTAwM2VzeXNjYWxsbm87XG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy0yNDMzLX1cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9zeXNjYWxsLmM9NjI9c3RhdGljIHZvaWQgZWwwX3N2Y19jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzY25vLCBpbnQgc2NfbnIsXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTY3LVx0cmVncy1cdTAwM2VvcmlnX3gwID0gcmVncy1cdTAwM2VyZWdzWzBdO1xuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jOjY4Olx0cmVncy1cdTAwM2VzeXNjYWxsbm8gPSBzY25vO1xuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTY5LVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvTWFrZWZpbGU9ND1vYmoteSAmIzQzOz0gaGVhZC5vIGVudHJ5Lm8gYXRvbWljLm8gc2lnbmFsLm8gdHJhcHMubyBpcnEubyB0aW1lLm8gdmRzby5vIHZkc28vXG5hcmNoL2Nza3kva2VybmVsL01ha2VmaWxlOjU6b2JqLXkgJiM0Mzs9IHBvd2VyLm8gc3lzY2FsbC5vIHN5c2NhbGxfdGFibGUubyBzZXR1cC5vXG5hcmNoL2Nza3kva2VybmVsL01ha2VmaWxlLTYtb2JqLXkgJiM0Mzs9IHByb2Nlc3MubyBjcHUtcHJvYmUubyBwdHJhY2UubyBzdGFja3RyYWNlLm9cbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGU9MTA9b2JqLXlcdFx0JiM0Mzs9IGhlYWQubyBjcHUtcHJvYmUubyBjYWNoZWluZm8ubyBlbnYubyBzZXR1cC5vIGVudHJ5Lm8gZ2VuZXgubyBcXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTExLVx0XHQgICB0cmFwcy5vIGlycS5vIGlkbGUubyBwcm9jZXNzLm8gZG1hLm8gbWVtLm8gcmVzZXQubyBzd2l0Y2gubyBcXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjEyOlx0XHQgICBlbGYubyBzeXNjYWxsLm8gc2lnbmFsLm8gdGltZS5vIHRvcG9sb2d5Lm8gaW5zdC5vIHB0cmFjZS5vIHZkc28ubyBcXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTEzLVx0XHQgICBhbHRlcm5hdGl2ZS5vIGtkZWJ1Z2ZzLm8gdW53aW5kLm9cbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGU9MjQ9Q0ZMQUdTX21vZHVsZS5vXHRcdCYjNDM7PSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCBvdmVycmlkZS1pbml0KVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjI1OkNGTEFHU19zeXNjYWxsLm9cdCYjNDM7PSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCBvdmVycmlkZS1pbml0KVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTI2LUNGTEFHU190cmFwcy5vXHRcdCYjNDM7PSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCBvdmVycmlkZS1pbml0KVxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaD00ND1lbnVtIHNwZWNfb3Age1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaC00Ny1cdGpyX29wLCBqYWxyX29wLCBtb3Z6X29wLCBtb3ZuX29wLFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oOjQ4Olx0c3lzY2FsbF9vcCwgYnJlYWtfb3AsIHNwaW1fb3AsIHN5bmNfb3AsXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0LmgtNDktXHRtZmhpX29wLCBtdGhpX29wLCBtZmxvX29wLCBtdGxvX29wLFxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaD00NDI9ZW51bSBtbV8zMmF4Zl9taW5vcl9vcCB7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oLTQ1OC1cdG1tX3N5bmNfb3AgPSAweDFhZCxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaDo0NTk6XHRtbV9zeXNjYWxsX29wID0gMHgyMmQsXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0LmgtNDYwLVx0bW1fd2FpdF9vcCA9IDB4MjRkLFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGU9OD1vYmoteVx0XHQmIzQzOz0gaGVhZC5vIGJyYW5jaC5vIGNtcHhjaGcubyBlbGYubyBlbnRyeS5vIGdlbmV4Lm8gaWRsZS5vIGlycS5vIFxcXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlLTktXHRcdCAgIHByb2Nlc3MubyBwcm9tLm8gcHRyYWNlLm8gcmVzZXQubyBzZXR1cC5vIHNpZ25hbC5vIFxcXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlOjEwOlx0XHQgICBzeXNjYWxsLm8gdGltZS5vIHRvcG9sb2d5Lm8gdHJhcHMubyB1bmFsaWduZWQubyB3YXRjaC5vIFxcXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlLTExLVx0XHQgICB2ZHNvLm8gY2FjaGVpbmZvLm9cbi0tXG5hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlM9MjU9TkVTVEVEKGhhbmRsZV9zeXMsIFBUX1NJWkUsIHNwKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUy0zMS1cbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUzozMjpcdGx3XHR0MSwgUFRfRVBDKHNwKVx0XHQjIHNraXAgc3lzY2FsbCBvbiByZXR1cm5cbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUy0zMy1cbi0tXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlM9MjY9TkVTVEVEKGhhbmRsZV9zeXNuMzIsIFBUX1NJWkUsIHNwKVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUy0zOC0jaWZuZGVmIENPTkZJR19NSVBTMzJfTzMyXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlM6Mzk6XHRsZFx0dDEsIFBUX0VQQyhzcClcdFx0IyBza2lwIHN5c2NhbGwgb24gcmV0dXJuXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMtNDAtXHRkYWRkaXVcdHQxLCA0XHRcdFx0IyBza2lwIHRvIG5leHQgaW5zdHJ1Y3Rpb25cbi0tXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjY0LlM9Mjg9TkVTVEVEKGhhbmRsZV9zeXM2NCwgUFRfU0laRSwgc3ApXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW42NC5TLTQxLSNpZiAhZGVmaW5lZChDT05GSUdfTUlQUzMyX08zMikgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19NSVBTMzJfTjMyKVxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW42NC5TOjQyOlx0bGRcdHQxLCBQVF9FUEMoc3ApXHRcdCMgc2tpcCBzeXNjYWxsIG9uIHJldHVyblxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW42NC5TLTQzLVx0ZGFkZGl1XHR0MSwgNFx0XHRcdCMgc2tpcCB0byBuZXh0IGluc3RydWN0aW9uXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TPTI4PU5FU1RFRChoYW5kbGVfc3lzLCBQVF9TSVpFLCBzcClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMtMzMtXHQuc2V0XHRhdFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TOjM0Olx0bGRcdHQxLCBQVF9FUEMoc3ApXHRcdCMgc2tpcCBzeXNjYWxsIG9uIHJldHVyblxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TLTM1LVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jLTQ1LS8qXG5hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYzo0NjogKiBGb3IgaGlzdG9yaWMgcmVhc29ucyB0aGUgcGlwZSgyKSBzeXNjYWxsIG9uIE1JUFMgaGFzIGFuIHVudXN1YWwgY2FsbGluZ1xuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMtNDctICogY29udmVudGlvbi5cdEl0IHJldHVybnMgcmVzdWx0cyBpbiByZWdpc3RlcnMgJHYwIC8gJHYxIHdoaWNoIG1lYW5zIHRoZXJlXG4tLVxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM9NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpbnNuIGluc25fdGFibGVfTU1baW5zbl9pbnZhbGlkXSA9IHtcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYy0xMjMtXHRbaW5zbl9kaW5zbV1cdD0gezAsIDB9LFxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM6MTI0Olx0W2luc25fc3lzY2FsbF1cdD0ge00obW1fcG9vbDMyYV9vcCwgMCwgMCwgMCwgbW1fc3lzY2FsbF9vcCwgbW1fcG9vbDMyYXhmX29wKSwgU0NJTU19LFxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmMtMTI1LVx0W2luc25fYmJpdDBdXHQ9IHswLCAwfSxcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmM9NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbnNuIGluc25fdGFibGVbaW5zbl9pbnZhbGlkXSA9IHtcbi0tXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmMtMTk1LVx0W2luc25fc3luY11cdD0ge00oc3BlY19vcCwgMCwgMCwgMCwgMCwgc3luY19vcCksIFJFfSxcbmFyY2gvbWlwcy9tbS91YXNtLW1pcHMuYzoxOTY6XHRbaW5zbl9zeXNjYWxsXVx0PSB7TShzcGVjX29wLCAwLCAwLCAwLCAwLCBzeXNjYWxsX29wKSwgU0NJTU19LFxuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jLTE5Ny1cdFtpbnNuX3RsYnBdXHQ9IHtNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgdGxicF9vcCksICAwfSxcbi0tXG5hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oLTMyLSAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyBob3cgdGhlIHJlZ2lzdGVycyBhcmUgbGFpZCBvdXQgb24gdGhlIGtlcm5lbCBzdGFja1xuYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaDozMzogKiBkdXJpbmcgYSBzeXNjYWxsIG9yIG90aGVyIGtlcm5lbCBlbnRyeS5cbmFyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgtMzQtICpcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGU9OD1vYmoteVx0XHQ6PSBoZWFkLm8gY2FjaGUubyBwYWNhY2hlLm8gc2V0dXAubyBwZHQubyB0cmFwcy5vIHRpbWUubyBpcnEubyBcXFxuYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlOjk6XHRcdCAgIHN5c2NhbGwubyBlbnRyeS5vIHN5c19wYXJpc2MubyBmaXJtd2FyZS5vIFxcXG5hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGUtMTAtXHRcdCAgIHB0cmFjZS5vIGhhcmR3YXJlLm8gaW52ZW50b3J5Lm8gZHJpdmVycy5vIGFsdGVybmF0aXZlLm8gXFxcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmM9MzgzPWhhbmRsZV9zaWduYWwoc3RydWN0IGtzaWduYWwgKmtzaWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGluX3N5c2NhbGwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jLTQwNS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYzo0MDY6c3RhdGljIHZvaWQgY2hlY2tfc3lzY2FsbG5vX2luX2RlbGF5X2JyYW5jaChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00MDcte1xuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYz00NTE9c3lzY2FsbF9yZXN0YXJ0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00NzYtXHRcdERCRygxLCBcJiMzNDslczogJWxkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgcmVncy1cdTAwM2VnclsyOF0pO1xuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jOjQ3NzpcdFx0Y2hlY2tfc3lzY2FsbG5vX2luX2RlbGF5X2JyYW5jaChyZWdzKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00NzgtXHRcdGJyZWFrO1xuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYz00ODM9aW5zZXJ0X3Jlc3RhcnRfdHJhbXBvbGluZShzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMtNTMzLVx0XHREQkcoMSwgXCYjMzQ7JXM6IFR5cGUgJWxkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgcmVncy1cdTAwM2VnclsyOF0pO1xuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jOjUzNDpcdFx0Y2hlY2tfc3lzY2FsbG5vX2luX2RlbGF5X2JyYW5jaChyZWdzKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy01MzUtXHRcdHJldHVybjtcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TPTEzMT1saW51eF9nYXRld2F5X2VudHJ5OlxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMtMTg1LVx0ICAgc2F2ZWQvcmVzdG9yZWQpLiAgVEFTS19QVF9QU1cgaXMgemVyb2VkIHNvIHdlIGNhbiBzZWUgd2hldGhlclxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUzoxODY6XHQgICBhIHByb2Nlc3MgaXMgb24gYSBzeXNjYWxsIG9yIG5vdC4gIEZvciBhbiBpbnRlcnJ1cHQgdGhlIHJlYWxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMtMTg3LVx0ICAgUFNXIHZhbHVlIGlzIHN0b3JlZC4gIFRoaXMgaXMgbmVlZGVkIGZvciBnZGIgYW5kIHN5c19wdHJhY2UuICovXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUz0zNDg9dHJhY2VzeXNfbmV4dDpcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlM6MzQ5Olx0LyogZG9fc3lzY2FsbF90cmFjZV9lbnRlciBlaXRoZXIgcmV0dXJuZWQgdGhlIHN5c2NhbGxubywgb3IgLTFMLFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUy0zNTAtXHQgKiAgc28gd2Ugc2tpcCByZXN0b3JpbmcgdGhlIFBUX0dSMjAgYmVsb3csIHNpbmNlIHdlIHB1bGxlZCBpdCBmcm9tXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc28zMi9NYWtlZmlsZT0xMD1LQ1NBTl9TQU5JVElaRSA6PSBuXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlLTExLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc28zMi9NYWtlZmlsZToxMjpvYmotdmRzbzMyID0gbm90ZS5vIHNpZ3RyYW1wLm8gcmVzdGFydF9zeXNjYWxsLm9cbmFyY2gvcGFyaXNjL2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUtMTMtb2JqLWN2ZHNvMzIgPSB2ZHNvMzJfZ2VuZXJpYy5vXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc282NC9NYWtlZmlsZT0xMD1LQ1NBTl9TQU5JVElaRSA6PSBuXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlLTExLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc282NC9NYWtlZmlsZToxMjpvYmotdmRzbzY0ID0gbm90ZS5vIHNpZ3RyYW1wLm8gcmVzdGFydF9zeXNjYWxsLm9cbmFyY2gvcGFyaXNjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUtMTMtb2JqLWN2ZHNvNjQgPSB2ZHNvNjRfZ2VuZXJpYy5vXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZT01OD1LQ1NBTl9TQU5JVElaRV9zZXR1cF82NC5vIDo9IG5cbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlLTYyLSMgY2hlY2tzIGR1ZSB0byByYW5kb21pemVfa3N0YWNrX29mZnNldC5cbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU6NjM6Q0ZMQUdTX1JFTU9WRV9zeXNjYWxsLm8gPSAtZnN0YWNrLXByb3RlY3RvciAtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmdcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU6NjQ6Q0ZMQUdTX3N5c2NhbGwubyAmIzQzOz0gLWZuby1zdGFjay1wcm90ZWN0b3JcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUtNjUtI2VuZGlmXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZT02Nz1vYmoteVx0XHRcdFx0Oj0gY3B1dGFibGUubyBzeXNjYWxscy5vIHN3aXRjaC5vIFxcXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS03NC1cdFx0XHRcdCAgIGh3X2JyZWFrcG9pbnRfY29uc3RyYWludHMubyBpbnRlcnJ1cHQubyBcXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZTo3NTpcdFx0XHRcdCAgIGtkZWJ1Z2ZzLm8gc3RhY2t0cmFjZS5vIHN5c2NhbGwub1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS03Ni1vYmoteVx0XHRcdFx0JiM0Mzs9IHB0cmFjZS9cbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz00OD1zdHJ1Y3QgcnRhc19maWx0ZXIge1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTY3LSAqICAgICAgICAgIGdlbmVyYWxseSBhbGxvd2VkLCBhbmQgQGZpbHRlciBkZXNjcmliZXMgY29uc3RyYWludHMgb24gdGhlXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo2ODogKiAgICAgICAgICBhcmd1bWVudHMuIFNlZSBhbHNvIEBiYW5uZWRfZm9yX3N5c2NhbGxfb25fbGUuXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo2OTogKiBAYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlOiBTZXQgd2hlbiBjYWxsIHZpYSBzeXNfcnRhcyBpcyBnZW5lcmFsbHkgYWxsb3dlZFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtNzAtICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHNwZWNpZmljYWxseSByZXN0cmljdGVkIG9uIHBwYzY0bGUuIFN1Y2hcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz04Mz1zdHJ1Y3QgcnRhc19mdW5jdGlvbiB7XG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy04NC1cdHMzMiB0b2tlbjtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjg1Olx0Y29uc3QgYm9vbCBiYW5uZWRfZm9yX3N5c2NhbGxfb25fbGU6MTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTg2LVx0Y29uc3QgY2hhciAqIGNvbnN0IG5hbWU7XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmM9MTA0PXN0YXRpYyBzdHJ1Y3QgcnRhc19mdW5jdGlvbiBydGFzX2Z1bmN0aW9uX3RhYmxlW10gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTQ1NS1cdFx0Lm5hbWUgPSBcJiMzNDtpYm0sc3VzcGVuZC1tZVwmIzM0OyxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjQ1NjpcdFx0LmJhbm5lZF9mb3Jfc3lzY2FsbF9vbl9sZSA9IHRydWUsXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00NTctXHRcdC5maWx0ZXIgPSBcdTAwMjYoY29uc3Qgc3RydWN0IHJ0YXNfZmlsdGVyKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtNDY5LVx0XHQubmFtZSA9IFwmIzM0O2libSx1cGRhdGUtbm9kZXNcJiMzNDssXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo0NzA6XHRcdC5iYW5uZWRfZm9yX3N5c2NhbGxfb25fbGUgPSB0cnVlLFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtNDcxLVx0XHQuZmlsdGVyID0gXHUwMDI2KGNvbnN0IHN0cnVjdCBydGFzX2ZpbHRlcikge1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTQ3OC1cdFx0Lm5hbWUgPSBcJiMzNDtpYm0sdXBkYXRlLXByb3BlcnRpZXNcJiMzNDssXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo0Nzk6XHRcdC5iYW5uZWRfZm9yX3N5c2NhbGxfb25fbGUgPSB0cnVlLFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtNDgwLVx0XHQuZmlsdGVyID0gXHUwMDI2KGNvbnN0IHN0cnVjdCBydGFzX2ZpbHRlcikge1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jPTE3NzY9c3RhdGljIGJvb2wgYmxvY2tfcnRhc19jYWxsKGNvbnN0IHN0cnVjdCBydGFzX2Z1bmN0aW9uICpmdW5jLCBpbnQgbmFyZ3MsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtMTc5NC1cdCAqL1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmM6MTc5NTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfTElUVExFX0VORElBTikgXHUwMDI2XHUwMDI2IGZ1bmMtXHUwMDNlYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlKVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtMTc5Ni1cdFx0Z290byBlcnI7XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvc2lnbmFsLmM9NDEzPXN0YXRpYyBpbnQgc2V0dXBfcnRfZnJhbWUoc3RydWN0IGtzaWduYWwgKmtzaWcsIHNpZ3NldF90ICpzZXQsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvc2lnbmFsLmMtNDQ3LVx0ICogRm9yIHRoZSBub21tdSBjYXNlIHdlIGRvbiYjMzk7dCBoYXZlIGEgVkRTTy4gIEluc3RlYWQgd2UgcHVzaCB0d29cbmFyY2gvcmlzY3Yva2VybmVsL3NpZ25hbC5jOjQ0ODpcdCAqIGluc3RydWN0aW9ucyB0byBjYWxsIHRoZSBydF9zaWdyZXR1cm4gc3lzY2FsbCBvbnRvIHRoZSB1c2VyIHN0YWNrLlxuYXJjaC9yaXNjdi9rZXJuZWwvc2lnbmFsLmMtNDQ5LVx0ICovXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZT0zOT1vYmoteVx0Oj0gaGVhZC5vIHRyYXBzLm8gdGltZS5vIHByb2Nlc3MubyBlYXJseS5vIHNldHVwLm8gaWRsZS5vIHZ0aW1lLm9cbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU6NDA6b2JqLXlcdCYjNDM7PSBwcm9jZXNzb3IubyBzeXNjYWxsLm8gcHRyYWNlLm8gc2lnbmFsLm8gY3BjbWQubyBlYmNkaWMubyBubWkub1xuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZS00MS1vYmoteVx0JiM0Mzs9IGRlYnVnLm8gaXJxLm8gaXBsLm8gZGlzLm8gdmRzby5vIGNwdWZlYXR1cmUub1xuLS1cbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvTWFrZWZpbGU6MjpvYmoteSAmIzQzOz0gdnN5c2NhbGwubyB2c3lzY2FsbC1zeXNjYWxsLm8gdnN5c2NhbGwtc3ltcy5vXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC9NYWtlZmlsZS0zLVxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvTWFrZWZpbGU6NDokKG9iaikvdnN5c2NhbGwtc3lzY2FsbC5vOiAkKG9iaikvdnN5c2NhbGwtdHJhcGEuc29cbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlLTUtXG4tLVxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwuYz0zND1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2ZHNvX3RhYmxlW10gPSB7XG4tLVxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwuYy00Ni0vKlxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwuYzo0NzogKiBUaGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkIGJ5IHZzeXNjYWxsLm8gdG8gbWFyayB0aGUgYm91bmRzXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jLTQ4LSAqIG9mIHRoZSBFTEYgRFNPIGltYWdlcyBpbmNsdWRlZCB0aGVyZWluLlxuLS1cbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUtNS1cbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGU6NjpvYmoteSA6PSBzdHViLm8gbW11Lm8gcHJvY2Vzcy5vIHN5c2NhbGwubyB1YWNjZXNzLm8gXFxcbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUtNy1cdCBzdHViX2V4ZV9lbWJlZC5vXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg9MTI9ZXh0ZXJuIGxvbmcgX19pYTMyX3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xNy0gKiBfX3g2NF9zeXNfKigpICAgICAgICAgLSA2NC1iaXQgbmF0aXZlIHN5c2NhbGxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjE4OiAqIF9faWEzMl9zeXNfKigpICAgICAgICAtIDMyLWJpdCBuYXRpdmUgc3lzY2FsbCBvciBjb21tb24gY29tcGF0IHN5c2NhbGxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTE5LSAqIF9faWEzMl9jb21wYXRfc3lzXyooKSAtIDMyLWJpdCBjb21wYXQgc3lzY2FsbFxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZT04PW9iai15IDo9IGhlYWQubyBhbGlnbi5vIGNvcHJvY2Vzc29yLm8gZW50cnkubyBpcnEubyBwbGF0Zm9ybS5vIHByb2Nlc3MubyBcXFxuYXJjaC94dGVuc2Eva2VybmVsL01ha2VmaWxlOjk6XHQgcHRyYWNlLm8gc2V0dXAubyBzaWduYWwubyBzdGFja3RyYWNlLm8gc3lzY2FsbC5vIHRpbWUubyB0cmFwcy5vIFxcXG5hcmNoL3h0ZW5zYS9rZXJuZWwvTWFrZWZpbGUtMTAtXHQgdmVjdG9ycy5vXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYz0yOT1fX3ZtYV9tYXRjaGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jLTUzLSAqIHRvIGltcGxlbWVudCBEUk0gbW1hcCBzdXBwb3J0IGlzIHdpdGggYW4gbW1hcCBvZmZzZXQgaW9jdGwgKGxpa2VcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmM6NTQ6ICogaTkxNV9nZW1fbW1hcF9ndHQpIGFuZCB0aGVuIHVzaW5nIHRoZSBtbWFwIHN5c2NhbGwgb24gdGhlIERSTSBmZCBkaXJlY3RseS5cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMtNTUtICogVGhhdCB3YXkgZGVidWcgdG9vbGluZyBsaWtlIHZhbGdyaW5kIHdpbGwgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLCBoaWRpbmdcbi0tXG5kcml2ZXJzL3BjaS9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfWDg2X0lOVEVMX01JRClcdCYjNDM7PSBwY2ktbWlkLm9cbmRyaXZlcnMvcGNpL01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19QQ0lfU1lTQ0FMTClcdCYjNDM7PSBzeXNjYWxsLm9cbmRyaXZlcnMvcGNpL01ha2VmaWxlLTMwLW9iai0kKENPTkZJR19QQ0lfU1RVQilcdFx0JiM0Mzs9IHBjaS1zdHViLm9cbi0tXG5mcy9rZXJuZnMvZGlyLmM9MTAwMz11bnNpZ25lZCBpbnQga2VybmZzX3Jvb3RfZmxhZ3Moc3RydWN0IGtlcm5mc19ub2RlICprbilcbi0tXG5mcy9rZXJuZnMvZGlyLmMtMTAwOS0gKiBrZXJuZnNfY3JlYXRlX3Jvb3QgLSBjcmVhdGUgYSBuZXcga2VybmZzIGhpZXJhcmNoeVxuZnMva2VybmZzL2Rpci5jOjEwMTA6ICogQHNjb3BzOiBvcHRpb25hbCBzeXNjYWxsIG9wZXJhdGlvbnMgZm9yIHRoZSBoaWVyYXJjaHlcbmZzL2tlcm5mcy9kaXIuYy0xMDExLSAqIEBmbGFnczogS0VSTkZTX1JPT1RfKiBmbGFnc1xuLS1cbmZzL2tlcm5mcy9kaXIuYy0xMDE2LSAqL1xuZnMva2VybmZzL2Rpci5jOjEwMTc6c3RydWN0IGtlcm5mc19yb290ICprZXJuZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMsXG5mcy9rZXJuZnMvZGlyLmMtMTAxOC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgKnByaXYpXG4tLVxuZnMva2VybmZzL2Rpci5jLTEwNTctXG5mcy9rZXJuZnMvZGlyLmM6MTA1ODpcdHJvb3QtXHUwMDNlc3lzY2FsbF9vcHMgPSBzY29wcztcbmZzL2tlcm5mcy9kaXIuYy0xMDU5LVx0cm9vdC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuLS1cbmZzL2tlcm5mcy9kaXIuYz0xMjkxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICprZXJuZnNfaW9wX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2tlcm5mcy9kaXIuYy0xMjk1LVx0c3RydWN0IGtlcm5mc19ub2RlICpwYXJlbnQgPSBkaXItXHUwMDNlaV9wcml2YXRlO1xuZnMva2VybmZzL2Rpci5jOjEyOTY6XHRzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcyA9IGtlcm5mc19yb290KHBhcmVudCktXHUwMDNlc3lzY2FsbF9vcHM7XG5mcy9rZXJuZnMvZGlyLmMtMTI5Ny1cdGludCByZXQ7XG4tLVxuZnMva2VybmZzL2Rpci5jPTEzMTE9c3RhdGljIGludCBrZXJuZnNfaW9wX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMva2VybmZzL2Rpci5jLTEzMTMtXHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuICA9IGtlcm5mc19kZW50cnlfbm9kZShkZW50cnkpO1xuZnMva2VybmZzL2Rpci5jOjEzMTQ6XHRzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcyA9IGtlcm5mc19yb290KGtuKS1cdTAwM2VzeXNjYWxsX29wcztcbmZzL2tlcm5mcy9kaXIuYy0xMzE1LVx0aW50IHJldDtcbi0tXG5mcy9rZXJuZnMvZGlyLmM9MTMyOT1zdGF0aWMgaW50IGtlcm5mc19pb3BfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2tlcm5mcy9kaXIuYy0xMzM1LVx0c3RydWN0IGtlcm5mc19ub2RlICpuZXdfcGFyZW50ID0gbmV3X2Rpci1cdTAwM2VpX3ByaXZhdGU7XG5mcy9rZXJuZnMvZGlyLmM6MTMzNjpcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0ga2VybmZzX3Jvb3Qoa24pLVx1MDAzZXN5c2NhbGxfb3BzO1xuZnMva2VybmZzL2Rpci5jLTEzMzctXHRpbnQgcmV0O1xuLS1cbmZzL2tlcm5mcy9rZXJuZnMtaW50ZXJuYWwuaD0zMz1zdHJ1Y3Qga2VybmZzX3Jvb3Qge1xuLS1cbmZzL2tlcm5mcy9rZXJuZnMtaW50ZXJuYWwuaC00Mi1cdHUzMlx0XHRcdGlkX2hpZ2hiaXRzO1xuZnMva2VybmZzL2tlcm5mcy1pbnRlcm5hbC5oOjQzOlx0c3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc3lzY2FsbF9vcHM7XG5mcy9rZXJuZnMva2VybmZzLWludGVybmFsLmgtNDQtXG4tLVxuZnMva2VybmZzL21vdW50LmM9Mjg9c3RhdGljIGludCBrZXJuZnNfc29wX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMva2VybmZzL21vdW50LmMtMzAtXHRzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QgPSBrZXJuZnNfcm9vdChrZXJuZnNfZGVudHJ5X25vZGUoZGVudHJ5KSk7XG5mcy9rZXJuZnMvbW91bnQuYzozMTpcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0gcm9vdC1cdTAwM2VzeXNjYWxsX29wcztcbmZzL2tlcm5mcy9tb3VudC5jLTMyLVxuLS1cbmZzL2tlcm5mcy9tb3VudC5jPTM4PXN0YXRpYyBpbnQga2VybmZzX3NvcF9zaG93X3BhdGgoc3RydWN0IHNlcV9maWxlICpzZiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2tlcm5mcy9tb3VudC5jLTQxLVx0c3RydWN0IGtlcm5mc19yb290ICpyb290ID0ga2VybmZzX3Jvb3Qobm9kZSk7XG5mcy9rZXJuZnMvbW91bnQuYzo0MjpcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0gcm9vdC1cdTAwM2VzeXNjYWxsX29wcztcbmZzL2tlcm5mcy9tb3VudC5jLTQzLVxuLS1cbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYz00MjYwPXN0YXRpYyBpbnQgcmR0Z3JvdXBfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qga2VybmZzX3Jvb3QgKmtmKVxuLS1cbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy00Mjc2LVxuZnMvcmVzY3RybC9yZHRncm91cC5jOjQyNzc6c3RhdGljIHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgcmR0Z3JvdXBfa2Zfc3lzY2FsbF9vcHMgPSB7XG5mcy9yZXNjdHJsL3JkdGdyb3VwLmMtNDI3OC1cdC5ta2Rpclx0XHQ9IHJkdGdyb3VwX21rZGlyLFxuLS1cbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYz00Mjg0PXN0YXRpYyBpbnQgcmR0Z3JvdXBfc2V0dXBfcm9vdChzdHJ1Y3QgcmR0X2ZzX2NvbnRleHQgKmN0eClcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy00Mjg1LXtcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYzo0Mjg2Olx0cmR0X3Jvb3QgPSBrZXJuZnNfY3JlYXRlX3Jvb3QoXHUwMDI2cmR0Z3JvdXBfa2Zfc3lzY2FsbF9vcHMsXG5mcy9yZXNjdHJsL3JkdGdyb3VwLmMtNDI4Ny1cdFx0XHRcdCAgICAgIEtFUk5GU19ST09UX0NSRUFURV9ERUFDVElWQVRFRCB8XG4tLVxuaW5jbHVkZS9saW51eC9rZXJuZnMuaD0xOTk9c3RydWN0IGtlcm5mc19ub2RlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oLTIzOS0vKlxuaW5jbHVkZS9saW51eC9rZXJuZnMuaDoyNDA6ICoga2VybmZzX3N5c2NhbGxfb3BzIG1heSBiZSBzcGVjaWZpZWQgb24ga2VybmZzX2NyZWF0ZV9yb290KCkgdG8gc3VwcG9ydFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC0yNDEtICogc3lzY2FsbHMuICBUaGVzZSBvcHRpb25hbCBjYWxsYmFja3MgYXJlIGludm9rZWQgb24gdGhlIG1hdGNoaW5nIHN5c2NhbGxzXG4tLVxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC0yNDUtICovXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oOjI0NjpzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzIHtcbmluY2x1ZGUvbGludXgva2VybmZzLmgtMjQ3LVx0aW50ICgqc2hvd19vcHRpb25zKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QpO1xuLS1cbmluY2x1ZGUvbGludXgva2VybmZzLmg9NDI1PXN0cnVjdCBkZW50cnkgKmtlcm5mc19ub2RlX2RlbnRyeShzdHJ1Y3Qga2VybmZzX25vZGUgKmtuLFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC00MjYtXHRcdFx0XHQgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuaW5jbHVkZS9saW51eC9rZXJuZnMuaDo0Mjc6c3RydWN0IGtlcm5mc19yb290ICprZXJuZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMsXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oLTQyOC1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgKnByaXYpO1xuLS1cbmluY2x1ZGUvbGludXgva2VybmZzLmg9NTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGtlcm5mc19yb290ICpcbmluY2x1ZGUvbGludXgva2VybmZzLmg6NTI2Omtlcm5mc19jcmVhdGVfcm9vdChzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcywgdW5zaWduZWQgaW50IGZsYWdzLFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC01MjctXHRcdCAgIHZvaWQgKnByaXYpXG4tLVxuaW5jbHVkZS9saW51eC9yc2VxX2VudHJ5Lmg9NjUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX3JzZXFfZXhpdF90b191c2VyX21vZGVfcmVzdGFydChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5pbmNsdWRlL2xpbnV4L3JzZXFfZW50cnkuaC02NTUtXHQgKiBJZiB0aGUgdGFzayBkaWQgbm90IGdvIHRocm91Z2ggc2NoZWR1bGUgb3IgZ290IHRoZSBmbGFnIGVuZm9yY2VkXG5pbmNsdWRlL2xpbnV4L3JzZXFfZW50cnkuaDo2NTY6XHQgKiBieSB0aGUgcnNlcSBzeXNjYWxsIG9yIGV4ZWN2ZSwgdGhlbiBub3RoaW5nIHRvIGRvIGhlcmUuXG5pbmNsdWRlL2xpbnV4L3JzZXFfZW50cnkuaC02NTctXHQgKlxuLS1cbmluY2x1ZGUvbWVkaWEvbWVkaWEtZGV2bm9kZS5oPTI4PWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICptZWRpYV9kZWJ1Z2ZzX3Jvb3Q7XG4tLVxuaW5jbHVkZS9tZWRpYS9tZWRpYS1kZXZub2RlLmgtNDUtICogQGNvbXBhdF9pb2N0bDogcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGhhbmRsZSAzMiBiaXRzIHVzZXJzcGFjZVxuaW5jbHVkZS9tZWRpYS9tZWRpYS1kZXZub2RlLmg6NDY6ICpcdGNhbGxzIHRvIHRoZSBpb2N0bCgpIHN5c2NhbGwgb24gYSBLZXJuZWwgY29tcGlsZWQgd2l0aCA2NCBiaXRzLlxuaW5jbHVkZS9tZWRpYS9tZWRpYS1kZXZub2RlLmgtNDctICogQG9wZW46IHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBvcGVuKCkgc3lzY2FsbFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC0xOS1cdEVNKCBNUl9NRU1PUllfSE9UUExVRyxcdFwmIzM0O21lbW9yeV9ob3RwbHVnXCYjMzQ7KVx0XHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjIwOlx0RU0oIE1SX1NZU0NBTEwsXHRcdFwmIzM0O3N5c2NhbGxfb3JfY3B1c2V0XCYjMzQ7KVx0XHRcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTIxLVx0RU0oIE1SX01FTVBPTElDWV9NQklORCxcdFwmIzM0O21lbXBvbGljeV9tYmluZFwmIzM0OylcdFx0XFxcbi0tXG5pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaD0zNzM9c3RydWN0IGRybV92bXdfZmVuY2VfcmVwIHtcbi0tXG5pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaC0zOTYtICpcbmluY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oOjM5NzogKiBCdWZmZXIgb2JqZWN0cyBhcmUgbWFwcGVkIHVzaW5nIHRoZSBtbWFwKCkgc3lzY2FsbCBvbiB0aGUgZHJtIGRldmljZS5cbmluY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oLTM5OC0gKi9cbi0tXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmg9NTQyPXN0cnVjdCBzaGFyZWRfaW5mbyB7XG4tLVxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oLTU4MC1cdCAqIFdhbGxjbG9jayB0aW1lOiB1cGRhdGVkIG9ubHkgYnkgY29udHJvbCBzb2Z0d2FyZS4gR3Vlc3RzIHNob3VsZCBiYXNlXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmg6NTgxOlx0ICogdGhlaXIgZ2V0dGltZW9mZGF5KCkgc3lzY2FsbCBvbiB0aGlzIHdhbGxjbG9jay1iYXNlIHZhbHVlLlxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oLTU4Mi1cdCAqL1xuLS1cbmlwYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19TWVNWSVBDX0NPTVBBVCkgJiM0Mzs9IGNvbXBhdC5vXG5pcGMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfU1lTVklQQykgJiM0Mzs9IHV0aWwubyBtc2d1dGlsLm8gbXNnLm8gc2VtLm8gc2htLm8gc3lzY2FsbC5vXG5pcGMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfU1lTVklQQ19TWVNDVEwpICYjNDM7PSBpcGNfc3lzY3RsLm9cbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE2MT1zdGF0aWMgdm9pZCAqYXJyYXlfbWFwX2VsZW1fcHRyKHN0cnVjdCBicGZfYXJyYXkqIGFycmF5LCB1MzIgaW5kZXgpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE2NS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNjY6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTE2Ny1zdGF0aWMgdm9pZCAqYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzQzPWludCBicGZfYXJyYXlfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTM1OS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzozNjA6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTM2MS1zdGF0aWMgbG9uZyBhcnJheV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NDAwPWludCBicGZfcGVyY3B1X2FycmF5X3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NDgtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDQ5Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NTAtc3RhdGljIGxvbmcgYXJyYXlfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz03MTI9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MjktXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3MzA6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSBkaXJlY3RseSwgc29cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTczMS0gKiBhcmd1bWVudHMgaGF2ZSB0byBtYXRjaCBicGZfbWFwX2xvb2t1cF9lbGVtKCkgZXhhY3RseS5cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMTU5PXN0YXRpYyBpbnQgY2hlY2tfZmxhZ3Moc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsX29sZCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMTcyLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTE3MzovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMTc0LXN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTQ5ND1zdGF0aWMgbG9uZyBodGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTAwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTUwMTovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTAyLXN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9MjMwPXN0YXRpYyBzaXplX3QgbG9uZ2VzdF9wcmVmaXhfbWF0Y2goY29uc3Qgc3RydWN0IGxwbV90cmllICp0cmllLFxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy0yMzYtXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6MjM3Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy0yMzgtc3RhdGljIHZvaWQgKnRyaWVfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqX2tleSlcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9MzExPXN0YXRpYyBpbnQgdHJpZV9jaGVja19hZGRfZWxlbShzdHJ1Y3QgbHBtX3RyaWUgKnRyaWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzIwLVxua2VybmVsL2JwZi9scG1fdHJpZS5jOjMyMTovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzIyLXN0YXRpYyBsb25nIHRyaWVfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNDU1LVxua2VybmVsL2JwZi9scG1fdHJpZS5jOjQ1NjovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNDU3LXN0YXRpYyBsb25nIHRyaWVfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqX2tleSlcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz0xMjc9c3RhdGljIGxvbmcgX19zdGFja19tYXBfZ2V0KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCBib29sIGRlbGV0ZSlcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xNjAtXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzoxNjE6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTYyLXN0YXRpYyBsb25nIHF1ZXVlX21hcF9wZWVrX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTY2LVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM6MTY3Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTE2OC1zdGF0aWMgbG9uZyBzdGFja19tYXBfcGVla19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ3NQoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBBcnJheSBNYXAgTGF6eSBQYWdlIEZhdWx0aW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgZW5hYmxpbmcgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcyB0aGF0IGFyZSBgbW1hcGAtZWQgaW50byB1c2VyIHNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY2hhbmdlLgoKRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgdGhlIEJQRiBzdWJzeXN0ZW0sIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCBpcyB0aGUgZW50cnkgcG9pbnQuIFRoZSBwYXRjaCBtb2RpZmllcyBgYXJyYXltYXAuY2AgYW5kIGBzeXNjYWxsLmNgIHdpdGhpbiB0aGUgYGtlcm5lbC9icGZgIGRpcmVjdG9yeSwgd2hpY2ggaW1tZWRpYXRlbHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gdGhvc2UgZmlsZXMuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGJvdGggYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQsIG1lYW5pbmcgdGhhdCBpdCBpcyB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZy4KCk5vdywgaG93IGRvZXMgdGhpcyBhY3R1YWxseSB3b3JrPyBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFycmF5X21hcF9tbWFwYCB0byBzZXQgdGhlIGBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVBgIGZsYWdzIG9uIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIGFuZCByZXR1cm4gMCwgaW5zdGVhZCBvZiBlYWdlcmx5IG1hcHBpbmcgdGhlIG1lbW9yeS4gQ3JpdGljYWxseSwgaXQgdGhlbiBhZGRzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgYnBmX21hcF9tbWFwX2ZhdWx0YCB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIFRoaXMgc2lnbmFscyB0aGUgKmxhenkqIG5hdHVyZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uLgoKVGhlIGtleSB0byB2ZXJpZnlpbmcgdGhpcyBpcyB0aGUgc2VsZnRlc3QsIGBiZW5jaF9hcnJheW1hcF9tbWFwLmNgLiBUaGlzIGlzIGNydWNpYWwg4oCTIGl0IGNvbmZpcm1zIHRoZSBwYXRoIGlzIHZhbGlkISBUaGUgdGVzdCBjcmVhdGVzIGEgQlBGIGFycmF5IG1hcCB1c2luZyBgQlBGX0ZfTU1BUEFCTEVgLCBtYXBzIGl0IHVzaW5nIGBtbWFwYCwgYW5kIHN1YnNlcXVlbnRseSBhY2Nlc3NlcyB0aGUgbWVtb3J5LCBlZmZlY3RpdmVseSB0cmlnZ2VyaW5nIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGhpZ2hsaWdodHMgdGhlIHByYWN0aWNhbCByZWFjaGFiaWxpdHkgYW5kIHRoZSBpbnRlbmRlZCBmdW5jdGlvbiBvZiB0aGUgcGF0Y2guCgpJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBhcnJheV9tYXBfbW1hcGAuIFRoZSBgYXJyYXlfbWFwX21tYXBgIGZ1bmN0aW9uIGlzIGltcGFjdGVkIGJ5IGEgc21hbGwgY2hhbmdlLgoKSSYjMzk7bSBjb21mb3J0YWJsZSB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJvdmlkZXMgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcy4gR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgcmVhY2hhYmlsaXR5IHZpYSB1c2VyIHNwYWNlIGFuZCB3aXRoIHRoaXMgc2VsZnRlc3QsIEkmIzM5O20gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBvYnZpb3VzbHkgYEJQRl9TWVNDQUxMYCBhbmQgSSBhbSBnb2luZyB0byBsb2cgdGhlIGZ1bmN0aW9uIHN5bWJvbHMgdG8gdGhlIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FycmF5X21hcF9tbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgcGFnZSBmYXVsdGluZyBmb3IgQlBGIGFycmF5IG1hcHMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gbm90IGVhZ2VybHkgbWFwIHRoZSBtZW1vcnkgYW5kIGFkZHMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGJwZl9tYXBfbW1hcF9mYXVsdGAgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzIG9uIGRlbWFuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgY3JlYXRpbmcgYW5kIG1tYXAtaW5nIGEgQlBGIGFycmF5IG1hcC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcnJheV9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YXJyYXlfbWFwX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBsYXp5IHBhZ2UgZmF1bHRpbmcgZm9yIEJQRiBhcnJheSBtYXBzIG1hcHBlZCB0byB1c2VyIHNwYWNlLiBJdCBtb2RpZmllcyBgYXJyYXlfbWFwX21tYXBgIHRvIG5vdCBlYWdlcmx5IG1hcCB0aGUgbWVtb3J5IGFuZCBhZGRzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgYW5kIGBicGZfbWFwX21tYXBfZmF1bHRgIHRvIGhhbmRsZSBwYWdlIGZhdWx0cyBvbiBkZW1hbmQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBtbWFwLWluZyBhIEJQRiBhcnJheSBtYXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMToxNjo0Ni41NzIyNDk4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDI4NzczMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImJwZl9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYXJyYXlfbWFwX21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgcGFnZSBmYXVsdGluZyBmb3IgQlBGIGFycmF5IG1hcHMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gbm90IGVhZ2VybHkgbWFwIHRoZSBtZW1vcnkgYW5kIGFkZHMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGJwZl9tYXBfbW1hcF9mYXVsdGAgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzIG9uIGRlbWFuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgY3JlYXRpbmcgYW5kIG1tYXAtaW5nIGEgQlBGIGFycmF5IG1hcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTY6NDYuNTcyMjU4NzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjU0NzUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0YThiNmZkZmVjZDdmMzExMjY3NWY3NmY4ZTg1MjBlZjliNjkwNDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDE6MTY6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5pbmRleCBlMDY2ZjQ0YTljMDU4MC4uYjUzNmYzYzllMTAzNmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMTQ1LDYgKzE0NSw3IEBAIHN0cnVjdCBicGZfbWFwX29wcyB7XFxuIFxcdGludCAoKm1hcF9kaXJlY3RfdmFsdWVfbWV0YSkoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0ICAgICB1NjQgaW1tLCB1MzIgKm9mZik7XFxuIFxcdGludCAoKm1hcF9tbWFwKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuK1xcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9mYXVsdCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xcbiBcXHRfX3BvbGxfdCAoKm1hcF9wb2xsKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cyk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKCptYXBfZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcXG5pbmRleCAyNDhiNDgxODE3OGNkMS4uMTcxMWJlNTgyOTA3ZGMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXFxuKysrIGIva2VybmVsL2JwZi9hcnJheW1hcC5jXFxuQEAgLTU3Niw3ICs1NzYsNiBAQCBzdGF0aWMgaW50IGFycmF5X21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuLVxcdHBnb2ZmX3QgcGdvZmYgPSBQQUdFX0FMSUdOKHNpemVvZigqYXJyYXkpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFx0aWYgKCEobWFwLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC01ODUsOCArNTg0LDQyIEBAIHN0YXRpYyBpbnQgYXJyYXlfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdCAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktXFx1MDAzZW1hcC5tYXhfZW50cmllcyAqIGFycmF5LVxcdTAwM2VlbGVtX3NpemUpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHJldHVybiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgYXJyYXlfbWFwX3ZtYWxsb2NfYWRkcihhcnJheSksXFxuLVxcdFxcdFxcdFxcdCAgIHZtYS1cXHUwMDNldm1fcGdvZmYgKyBwZ29mZik7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJ2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cFxcbitcXHQgKiBldmVyeSBQVEUgaGVyZSB3ZSBsZXQgYXJyYXlfbWFwX21tYXBfZmF1bHQoKSBpbnNlcnQgcGFnZXMgb24gZGVtYW5kLlxcbitcXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcXG4rXFx0ICogdGhlbSB0byBwcmVzZXJ2ZSBiZWhhdmlvciAobm8gVk1BIGV4cGFuc2lvbiwgZXhjbHVkZWQgZnJvbSBjb3JlZHVtcCkuXFxuK1xcdCAqL1xcbitcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2bV9mYXVsdF90IGFycmF5X21hcF9tbWFwX2ZhdWx0KHN0cnVjdCBicGZfbWFwICptYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuK1xcdHBnb2ZmX3QgcGdvZmYgPSBQQUdFX0FMSUdOKHNpemVvZigqYXJyYXkpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0dm9pZCAqa2FkZHI7XFxuK1xcbitcXHQvKlxcbitcXHQgKiB2bWYtXFx1MDAzZXBnb2ZmIGlzIHRoZSBwYWdlIG9mZnNldCB3aXRoaW4gdGhlIG1hcHBpbmcgKHZtYS1cXHUwMDNldm1fcGdvZmYgcGx1c1xcbitcXHQgKiB0aGUgb2Zmc2V0IG9mIHRoZSBmYXVsdGluZyBhZGRyZXNzKS4gVGhlIGRhdGEgcGFnZXMgc3RhcnQgYWZ0ZXIgdGhlXFxuK1xcdCAqIGJwZl9hcnJheSBoZWFkZXIsIGhlbmNlIHRoZSBleHRyYSBwZ29mZi4gVGhpcyBtaXJyb3JzIHRoZSBvZmZzZXQgdGhhdFxcbitcXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgLi4uLCB2bWEtXFx1MDAzZXZtX3Bnb2ZmICsgcGdvZmYpIHVzZWQgdG8gYXBwbHkuXFxuK1xcdCAqL1xcbitcXHRrYWRkciA9IGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpICtcXG4rXFx0XFx0KCh1NjQpKHZtZi1cXHUwMDNlcGdvZmYgKyBwZ29mZikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuK1xcbitcXHRwYWdlID0gdm1hbGxvY190b19wYWdlKGthZGRyKTtcXG4rXFx0aWYgKCFwYWdlKVxcbitcXHRcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbitcXG4rXFx0Z2V0X3BhZ2UocGFnZSk7XFxuK1xcdHZtZi1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxcbkBAIC04MTIsNiArODQ1LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuIFxcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxuIFxcdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXFxuIFxcdC5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLFxcbitcXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcXG4gXFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sXFxuIFxcdC5tYXBfY2hlY2tfYnRmID0gYXJyYXlfbWFwX2NoZWNrX2J0ZixcXG4gXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5pbmRleCAwZmY5ZTNhYTI5M2Q1Ny4uZmIwZTFmNTVjNDg3M2QgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC0xMDc3LDkgKzEwNzcsMjYgQEAgc3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRcXHRicGZfbWFwX3dyaXRlX2FjdGl2ZV9kZWMobWFwKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQ2FsbGVkIGZvciBtYXBzIHRoYXQgcG9wdWxhdGUgdGhlaXIgbWVtb3J5LW1hcHBlZCByZWdpb24gbGF6aWx5LCBpLmUuIHRoYXRcXG4rICogcmV0dXJuIHdpdGhvdXQgd2lyaW5nIHVwIGFueSBQVEVzIGZyb20gdGhlaXIgLVxcdTAwM2VtYXBfbW1hcCBjYWxsYmFjay4gTWFwcyB0aGF0XFxuKyAqIHBvcHVsYXRlIHRoZSB3aG9sZSBWTUEgZWFnZXJseSAoZS5nLiB2aWEgcmVtYXBfdm1hbGxvY19yYW5nZSgpKSBuZXZlciByZWFjaFxcbisgKiBoZXJlLlxcbisgKi9cXG4rc3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbitcXG4rXFx0aWYgKCFtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX21tYXBfZmF1bHQpXFxuK1xcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcbitcXHRyZXR1cm4gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9tbWFwX2ZhdWx0KG1hcCwgdm1mKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7XFxuIFxcdC5vcGVuXFx0XFx0PSBicGZfbWFwX21tYXBfb3BlbixcXG4gXFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxuK1xcdC5mYXVsdFxcdFxcdD0gYnBmX21hcF9tbWFwX2ZhdWx0LFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBicGZfbWFwX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5pbmRleCA1NWQzOTQ0Mzg3MDVhNi4uYjY1OTNmYjExMzViMjkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTEwMDMsNiArMTAwMyw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxcXFxuK1xcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYXJyYXltYXBfbW1hcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS91c2R0XzEubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvdXNkdF8yLm8gXFxcXFxcbiBcXHRcXHQgI1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXFxuaW5kZXggM2Q5ZDJjZDc3NjRiZDMuLjE5MmQ1ZmNiN2E3NDhmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG5AQCAtMjg3LDYgKzI4Nyw3IEBAIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9jcnlwdG9fYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3NvY2ttYXBfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xwbV90cmllX21hcF9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfeGRwX2xiX2FyZ3A7XFxuK2V4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9hcnJheW1hcF9tbWFwX2FyZ3A7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xcbiBcXHR7IFxcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcXFwiUmluZyBidWZmZXJzIGJlbmNobWFya1xcXCIsIDAgfSxcXG5AQCAtMzA0LDYgKzMwNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XFxuIFxcdHsgXFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXFxcImJwZiBzb2NrbWFwIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfbHBtX3RyaWVfbWFwX2FyZ3AsIDAsIFxcXCJMUE0gdHJpZSBtYXAgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF94ZHBfbGJfYXJncCwgMCwgXFxcIlhEUCBsb2FkLWJhbGFuY2VyIGJlbmNobWFya1xcXCIsIDAgfSxcXG4rXFx0eyBcXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLCAwLCBcXFwiYXJyYXltYXAtbW1hcCBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHt9LFxcbiB9O1xcbiBcXG5AQCAtNTgyLDYgKzU4NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX25vcDtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYXJyYXltYXBfbW1hcDtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfY291bnRfZ2xvYmFsLFxcbkBAIC02NjUsNiArNjY4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XFxuIFxcdFxcdTAwMjZiZW5jaF9scG1fdHJpZV9mcmVlLFxcbiBcXHRcXHUwMDI2YmVuY2hfYnBmX25vcCxcXG4gXFx0XFx1MDAyNmJlbmNoX3hkcF9sYixcXG4rXFx0XFx1MDAyNmJlbmNoX2FycmF5bWFwX21tYXAsXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2FycmF5bWFwX21tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYXJyYXltYXBfbW1hcC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzU2ZDgwYTg1Y2YwMWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmNcXG5AQCAtMCwwICsxLDE0NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gKi9cXG4rI2luY2x1ZGUgXFx1MDAzY2FyZ3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJiZW5jaC5oXFxcIlxcbitcXG4rLyogQmVuY2htYXJrIG1tYXAoKS9tdW5tYXAoKSBvZiBhbiBtbWFwLWFibGUgQlBGIGFycmF5IG1hcCBmcm9tIE4gdGhyZWFkcy4gKi9cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgY3R4IHtcXG4rXFx0aW50IG1hcF9mZDtcXG4rXFx0c2l6ZV90IG1tYXBfc3o7XFxuK30gY3R4O1xcbitcXG4rc3RhdGljIHN0cnVjdCB7XFxuK1xcdF9fdTMyIG5yX3RocmVhZHM7XFxuK1xcdF9fdTY0IG1hcF9zaXplO1xcbit9IGFyZ3MgPSB7XFxuK1xcdC5ucl90aHJlYWRzID0gMTYsXFxuK1xcdC5tYXBfc2l6ZSA9IDggKiAxMDI0ICogMTAyNCwgLyogOCBNaUIgKi9cXG4rfTtcXG4rXFxuK2VudW0ge1xcbitcXHRBUkdfTlJfVEhSRUFEUyA9IDUwMDAsXFxuK1xcdEFSR19NQVBfU0laRSA9IDUwMDEsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcXG4rXFx0eyBcXFwibnItdGhyZWFkc1xcXCIsIEFSR19OUl9USFJFQURTLCBcXFwiTlJfVEhSRUFEU1xcXCIsIDAsXFxuK1xcdFxcdFxcXCJOdW1iZXIgb2YgdGhyZWFkcyB0aGF0IG1tYXAvbXVubWFwIHRoZSBtYXAgKGRlZmF1bHQgMTYpXFxcIiB9LFxcbitcXHR7IFxcXCJtYXAtc2l6ZVxcXCIsIEFSR19NQVBfU0laRSwgXFxcIkJZVEVTXFxcIiwgMCxcXG4rXFx0XFx0XFxcIlNpemUgb2YgdGhlIEJQRiBhcnJheSBtYXAgaW4gYnl0ZXMgKGRlZmF1bHQgODM4ODYwOClcXFwiIH0sXFxuK1xcdHt9LFxcbit9O1xcbitcXG4rc3RhdGljIGVycm9yX3QgcGFyc2VfYXJnKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN3aXRjaCAoa2V5KSB7XFxuK1xcdGNhc2UgQVJHX05SX1RIUkVBRFM6XFxuK1xcdFxcdGFyZ3MubnJfdGhyZWFkcyA9IHN0cnRvdWwoYXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0aWYgKGFyZ3MubnJfdGhyZWFkcyA9PSAwKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiSW52YWxpZCBuci10aHJlYWRzOiAlc1xcXFxuXFxcIiwgYXJnKTtcXG4rXFx0XFx0XFx0YXJncF91c2FnZShzdGF0ZSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQVJHX01BUF9TSVpFOlxcbitcXHRcXHRhcmdzLm1hcF9zaXplID0gc3RydG91bGwoYXJnLCBOVUxMLCAwKTtcXG4rXFx0XFx0aWYgKGFyZ3MubWFwX3NpemUgPT0gMCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkludmFsaWQgbWFwLXNpemU6ICVzXFxcXG5cXFwiLCBhcmcpO1xcbitcXHRcXHRcXHRhcmdwX3VzYWdlKHN0YXRlKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBleHBvcnRlZCBpbnRvIGJlbmNobWFyayBydW5uZXIgKi9cXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwID0ge1xcbitcXHQub3B0aW9ucyA9IG9wdHMsXFxuK1xcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxcbit7XFxuK1xcdGlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBudW1iZXIgb2Ygd29ya2VyIHRocmVhZHMgaXMgY29udHJvbGxlZCBieSAtLW5yLXRocmVhZHMgYW5kXFxuK1xcdCAqIGRyaXZlcyB0aGUgZnJhbWV3b3JrJ3MgcHJvZHVjZXIgbWFjaGluZXJ5LCBzbyBwZXItcHJvZHVjZXIgc3RhdHNcXG4rXFx0ICogYXJlIHJlcG9ydGVkIGNvcnJlY3RseS5cXG4rXFx0ICovXFxuK1xcdGVudi5wcm9kdWNlcl9jbnQgPSBhcmdzLm5yX3RocmVhZHM7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIGhpdHM7XFxuK1xcbitzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpXFxuK3tcXG4rXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0XFx0dm9pZCAqYWRkcjtcXG4rXFxuK1xcdFxcdGFkZHIgPSBtbWFwKE5VTEwsIGN0eC5tbWFwX3N6LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgICAgTUFQX1NIQVJFRCwgY3R4Lm1hcF9mZCwgMCk7XFxuK1xcdFxcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtbWFwIGZhaWxlZDogJWRcXFxcblxcXCIsIC1lcnJubyk7XFxuK1xcdFxcdFxcdGV4aXQoMSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKG11bm1hcChhZGRyLCBjdHgubW1hcF9zeikpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtdW5tYXAgZmFpbGVkOiAlZFxcXFxuXFxcIiwgLWVycm5vKTtcXG4rXFx0XFx0XFx0ZXhpdCgxKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZoaXRzKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxcbit7XFxuK1xcdHJlcy1cXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFxcdTAwMjZoaXRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0dXAodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzLCAubWFwX2ZsYWdzID0gQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRsb25nIHBhZ2Vfc3ogPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XFxuK1xcdF9fdTMyIHZhbHVlX3NpemUgPSBzaXplb2YoX191NjQpO1xcbitcXHRfX3UzMiBtYXhfZW50cmllcztcXG4rXFxuK1xcdHNldHVwX2xpYmJwZigpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogbW1hcC1hYmxlIGFycmF5IG1hcHMgcm91bmQgdGhlIHZhbHVlIHNpemUgdXAgdG8gOCBieXRlcyBhbmQgZXhwb3NlXFxuK1xcdCAqIFBBR0VfQUxJR04obWF4X2VudHJpZXMgKiBlbGVtX3NpemUpIGJ5dGVzIHRvIHVzZXIgc3BhY2UuXFxuK1xcdCAqL1xcbitcXHRtYXhfZW50cmllcyA9IChhcmdzLm1hcF9zaXplICsgdmFsdWVfc2l6ZSAtIDEpIC8gdmFsdWVfc2l6ZTtcXG4rXFx0Y3R4Lm1tYXBfc3ogPSAoKF9fdTY0KW1heF9lbnRyaWVzICogdmFsdWVfc2l6ZSArIHBhZ2Vfc3ogLSAxKSBcXHUwMDI2XFxuK1xcdFxcdCAgICAgIH4ocGFnZV9zeiAtIDEpO1xcbitcXG4rXFx0Y3R4Lm1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWSwgXFxcIm1tYXBfYXJyYXlcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKF9fdTMyKSwgdmFsdWVfc2l6ZSwgbWF4X2VudHJpZXMsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmIChjdHgubWFwX2ZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBjcmVhdGUgbWFwOiAlZFxcXFxuXFxcIiwgLWVycm5vKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbitcXG4rXFx0cHJpbnRmKFxcXCJhcnJheSBtYXA6ICV1IGVudHJpZXMsIG1tYXAgc2l6ZSAlenUgYnl0ZXMsICV1IHRocmVhZHNcXFxcblxcXCIsXFxuK1xcdCAgICAgICBtYXhfZW50cmllcywgY3R4Lm1tYXBfc3osIGFyZ3MubnJfdGhyZWFkcyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9hcnJheW1hcF9tbWFwID0ge1xcbitcXHQubmFtZSA9IFxcXCJhcnJheW1hcC1tbWFwXFxcIixcXG4rXFx0LmFyZ3AgPSBcXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLFxcbitcXHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcXG4rXFx0LnNldHVwID0gc2V0dXAsXFxuK1xcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcXG4rXFx0Lm1lYXN1cmUgPSBtZWFzdXJlLFxcbitcXHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcXG4rXFx0LnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsXFxuK307XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9hcnJheW1hcF9tbWFwLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2VmZDQ0MWNkNjUzYTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaFxcbkBAIC0wLDAgKzEsMTUgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rc291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcXG4rXFxuK3NldCAtZXVmbyBwaXBlZmFpbFxcbitcXG4rZm9yIHQgaW4gMSA0IDggMTY7IGRvXFxuK2ZvciBzIGluIDEwNDg1NzYgODM4ODYwOCA2NzEwODg2NDsgZG9cXG4rc3VidGl0bGUgXFxcIm5yX3RocmVhZHM6ICR0LCBtYXBfc2l6ZTogJHNcXFwiXFxuK1xcdHN1bW1hcml6ZV9vcHMgXFxcImFycmF5bWFwLW1tYXA6IFxcXCIgXFxcXFxcbitcXHQgICAgXFxcIiQoJFJVTl9CRU5DSCAtLW5yLXRocmVhZHMgJHQgLS1tYXAtc2l6ZSAkcyBhcnJheW1hcC1tbWFwKVxcXCJcXG4rXFx0cHJpbnRmIFxcXCJcXFxcblxcXCJcXG4rZG9uZVxcbitkb25lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE2OjQ3LjM3OTc2Mzc3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ1NjIxMjM3OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImJwZl9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYXJyYXlfbWFwX21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxhenkgcGFnZSBmYXVsdGluZyBmb3IgQlBGIGFycmF5IG1hcHMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0IG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gbm90IGVhZ2VybHkgbWFwIHRoZSBtZW1vcnkgYW5kIGFkZHMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGJwZl9tYXBfbW1hcF9mYXVsdGAgdG8gaGFuZGxlIHBhZ2UgZmF1bHRzIG9uIGRlbWFuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgY3JlYXRpbmcgYW5kIG1tYXAtaW5nIGEgQlBGIGFycmF5IG1hcC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGE4YjZmZGZlY2Q3ZjMxMTI2NzVmNzZmOGU4NTIwZWY5YjY5MDQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDE6MTY6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggZTA2NmY0NGE5YzA1ODAuLmI1MzZmM2M5ZTEwMzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTE0NSw2ICsxNDUsNyBAQCBzdHJ1Y3QgYnBmX21hcF9vcHMge1xuIFx0aW50ICgqbWFwX2RpcmVjdF92YWx1ZV9tZXRhKShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgICB1NjQgaW1tLCB1MzIgKm9mZik7XG4gXHRpbnQgKCptYXBfbW1hcCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuK1x0dm1fZmF1bHRfdCAoKm1hcF9tbWFwX2ZhdWx0KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG4gXHRfX3BvbGxfdCAoKm1hcF9wb2xsKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHQgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKTtcbiBcdHVuc2lnbmVkIGxvbmcgKCptYXBfZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuaW5kZXggMjQ4YjQ4MTgxNzhjZDEuLjE3MTFiZTU4MjkwN2RjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXG4rKysgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbkBAIC01NzYsNyArNTc2LDYgQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG4gc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4tXHRwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRpZiAoIShtYXAtXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTU4NSw4ICs1ODQsNDIgQEAgc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdCAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktXHUwMDNlbWFwLm1heF9lbnRyaWVzICogYXJyYXktXHUwMDNlZWxlbV9zaXplKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpLFxuLVx0XHRcdFx0ICAgdm1hLVx1MDAzZXZtX3Bnb2ZmICsgcGdvZmYpO1xuK1x0LypcbitcdCAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJ2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cFxuK1x0ICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IGFycmF5X21hcF9tbWFwX2ZhdWx0KCkgaW5zZXJ0IHBhZ2VzIG9uIGRlbWFuZC5cbitcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIHVzZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGZvciB1czsga2VlcFxuK1x0ICogdGhlbSB0byBwcmVzZXJ2ZSBiZWhhdmlvciAobm8gVk1BIGV4cGFuc2lvbiwgZXhjbHVkZWQgZnJvbSBjb3JlZHVtcCkuXG4rXHQgKi9cbitcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZtX2ZhdWx0X3QgYXJyYXlfbWFwX21tYXBfZmF1bHQoc3RydWN0IGJwZl9tYXAgKm1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbit7XG4rXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4rXHRwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHZvaWQgKmthZGRyO1xuK1xuK1x0LypcbitcdCAqIHZtZi1cdTAwM2VwZ29mZiBpcyB0aGUgcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBtYXBwaW5nICh2bWEtXHUwMDNldm1fcGdvZmYgcGx1c1xuK1x0ICogdGhlIG9mZnNldCBvZiB0aGUgZmF1bHRpbmcgYWRkcmVzcykuIFRoZSBkYXRhIHBhZ2VzIHN0YXJ0IGFmdGVyIHRoZVxuK1x0ICogYnBmX2FycmF5IGhlYWRlciwgaGVuY2UgdGhlIGV4dHJhIHBnb2ZmLiBUaGlzIG1pcnJvcnMgdGhlIG9mZnNldCB0aGF0XG4rXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgLi4uLCB2bWEtXHUwMDNldm1fcGdvZmYgKyBwZ29mZikgdXNlZCB0byBhcHBseS5cbitcdCAqL1xuK1x0a2FkZHIgPSBhcnJheV9tYXBfdm1hbGxvY19hZGRyKGFycmF5KSArXG4rXHRcdCgodTY0KSh2bWYtXHUwMDNlcGdvZmYgKyBwZ29mZikgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuK1xuK1x0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZShrYWRkcik7XG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXG4rXHRnZXRfcGFnZShwYWdlKTtcbitcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhcnJheV9tYXBfbWV0YV9lcXVhbChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWV0YTAsXG5AQCAtODEyLDYgKzg0NSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xuIFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbiBcdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXG4gXHQubWFwX21tYXAgPSBhcnJheV9tYXBfbW1hcCxcbitcdC5tYXBfbW1hcF9mYXVsdCA9IGFycmF5X21hcF9tbWFwX2ZhdWx0LFxuIFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sXG4gXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG4gXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCAwZmY5ZTNhYTI5M2Q1Ny4uZmIwZTFmNTVjNDg3M2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0xMDc3LDkgKzEwNzcsMjYgQEAgc3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0XHRicGZfbWFwX3dyaXRlX2FjdGl2ZV9kZWMobWFwKTtcbiB9XG4gXG4rLypcbisgKiBDYWxsZWQgZm9yIG1hcHMgdGhhdCBwb3B1bGF0ZSB0aGVpciBtZW1vcnktbWFwcGVkIHJlZ2lvbiBsYXppbHksIGkuZS4gdGhhdFxuKyAqIHJldHVybiB3aXRob3V0IHdpcmluZyB1cCBhbnkgUFRFcyBmcm9tIHRoZWlyIC1cdTAwM2VtYXBfbW1hcCBjYWxsYmFjay4gTWFwcyB0aGF0XG4rICogcG9wdWxhdGUgdGhlIHdob2xlIFZNQSBlYWdlcmx5IChlLmcuIHZpYSByZW1hcF92bWFsbG9jX3JhbmdlKCkpIG5ldmVyIHJlYWNoXG4rICogaGVyZS5cbisgKi9cbitzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4re1xuK1x0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuK1xuK1x0aWYgKCFtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9tbWFwX2ZhdWx0KVxuK1x0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1xuK1x0cmV0dXJuIG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX21tYXBfZmF1bHQobWFwLCB2bWYpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcbiBcdC5vcGVuXHRcdD0gYnBmX21hcF9tbWFwX29wZW4sXG4gXHQuY2xvc2VcdFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXG4rXHQuZmF1bHRcdFx0PSBicGZfbWFwX21tYXBfZmF1bHQsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGJwZl9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCA1NWQzOTQ0Mzg3MDVhNi4uYjY1OTNmYjExMzViMjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTEwMDMsNiArMTAwMyw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxuK1x0XHQgJChPVVRQVVQpL2JlbmNoX2FycmF5bWFwX21tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvdXNkdF8yLm8gXFxcbiBcdFx0ICNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkMy4uMTkyZDVmY2I3YTc0OGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yODcsNiArMjg3LDcgQEAgZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2NyeXB0b19hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zb2NrbWFwX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xwbV90cmllX21hcF9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF94ZHBfbGJfYXJncDtcbitleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3JpbmdidWZzX2FyZ3AsIDAsIFwiUmluZyBidWZmZXJzIGJlbmNobWFya1wiLCAwIH0sXG5AQCAtMzA0LDYgKzMwNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7XG4gXHR7IFx1MDAyNmJlbmNoX3NvY2ttYXBfYXJncCwgMCwgXCJicGYgc29ja21hcCBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9scG1fdHJpZV9tYXBfYXJncCwgMCwgXCJMUE0gdHJpZSBtYXAgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfeGRwX2xiX2FyZ3AsIDAsIFwiWERQIGxvYWQtYmFsYW5jZXIgYmVuY2htYXJrXCIsIDAgfSxcbitcdHsgXHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwLCAwLCBcImFycmF5bWFwLW1tYXAgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHt9LFxuIH07XG4gXG5AQCAtNTgyLDYgKzU4NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZGVsZXRlO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9ub3A7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF94ZHBfbGI7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9hcnJheW1hcF9tbWFwO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfY291bnRfZ2xvYmFsLFxuQEAgLTY2NSw2ICs2NjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2xwbV90cmllX2ZyZWUsXG4gXHRcdTAwMjZiZW5jaF9icGZfbm9wLFxuIFx0XHUwMDI2YmVuY2hfeGRwX2xiLFxuK1x0XHUwMDI2YmVuY2hfYXJyYXltYXBfbW1hcCxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGZpbmRfYmVuY2htYXJrKHZvaWQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2FycmF5bWFwX21tYXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNTZkODBhODVjZjAxZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9hcnJheW1hcF9tbWFwLmNcbkBAIC0wLDAgKzEsMTQ2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gKi9cbisjaW5jbHVkZSBcdTAwM2NhcmdwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbitcbisvKiBCZW5jaG1hcmsgbW1hcCgpL211bm1hcCgpIG9mIGFuIG1tYXAtYWJsZSBCUEYgYXJyYXkgbWFwIGZyb20gTiB0aHJlYWRzLiAqL1xuK1xuK3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbitcdGludCBtYXBfZmQ7XG4rXHRzaXplX3QgbW1hcF9zejtcbit9IGN0eDtcbitcbitzdGF0aWMgc3RydWN0IHtcbitcdF9fdTMyIG5yX3RocmVhZHM7XG4rXHRfX3U2NCBtYXBfc2l6ZTtcbit9IGFyZ3MgPSB7XG4rXHQubnJfdGhyZWFkcyA9IDE2LFxuK1x0Lm1hcF9zaXplID0gOCAqIDEwMjQgKiAxMDI0LCAvKiA4IE1pQiAqL1xuK307XG4rXG4rZW51bSB7XG4rXHRBUkdfTlJfVEhSRUFEUyA9IDUwMDAsXG4rXHRBUkdfTUFQX1NJWkUgPSA1MDAxLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4rXHR7IFwibnItdGhyZWFkc1wiLCBBUkdfTlJfVEhSRUFEUywgXCJOUl9USFJFQURTXCIsIDAsXG4rXHRcdFwiTnVtYmVyIG9mIHRocmVhZHMgdGhhdCBtbWFwL211bm1hcCB0aGUgbWFwIChkZWZhdWx0IDE2KVwiIH0sXG4rXHR7IFwibWFwLXNpemVcIiwgQVJHX01BUF9TSVpFLCBcIkJZVEVTXCIsIDAsXG4rXHRcdFwiU2l6ZSBvZiB0aGUgQlBGIGFycmF5IG1hcCBpbiBieXRlcyAoZGVmYXVsdCA4Mzg4NjA4KVwiIH0sXG4rXHR7fSxcbit9O1xuK1xuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzd2l0Y2ggKGtleSkge1xuK1x0Y2FzZSBBUkdfTlJfVEhSRUFEUzpcbitcdFx0YXJncy5ucl90aHJlYWRzID0gc3RydG91bChhcmcsIE5VTEwsIDApO1xuK1x0XHRpZiAoYXJncy5ucl90aHJlYWRzID09IDApIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJJbnZhbGlkIG5yLXRocmVhZHM6ICVzXFxuXCIsIGFyZyk7XG4rXHRcdFx0YXJncF91c2FnZShzdGF0ZSk7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFSR19NQVBfU0laRTpcbitcdFx0YXJncy5tYXBfc2l6ZSA9IHN0cnRvdWxsKGFyZywgTlVMTCwgMCk7XG4rXHRcdGlmIChhcmdzLm1hcF9zaXplID09IDApIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJJbnZhbGlkIG1hcC1zaXplOiAlc1xcblwiLCBhcmcpO1xuK1x0XHRcdGFyZ3BfdXNhZ2Uoc3RhdGUpO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYXJyYXltYXBfbW1hcF9hcmdwID0ge1xuK1x0Lm9wdGlvbnMgPSBvcHRzLFxuK1x0LnBhcnNlciA9IHBhcnNlX2FyZyxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHZhbGlkYXRlKHZvaWQpXG4re1xuK1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgbnVtYmVyIG9mIHdvcmtlciB0aHJlYWRzIGlzIGNvbnRyb2xsZWQgYnkgLS1uci10aHJlYWRzIGFuZFxuK1x0ICogZHJpdmVzIHRoZSBmcmFtZXdvcmsncyBwcm9kdWNlciBtYWNoaW5lcnksIHNvIHBlci1wcm9kdWNlciBzdGF0c1xuK1x0ICogYXJlIHJlcG9ydGVkIGNvcnJlY3RseS5cbitcdCAqL1xuK1x0ZW52LnByb2R1Y2VyX2NudCA9IGFyZ3MubnJfdGhyZWFkcztcbit9XG4rXG4rc3RhdGljIGxvbmcgaGl0cztcbitcbitzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpXG4re1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0dm9pZCAqYWRkcjtcbitcbitcdFx0YWRkciA9IG1tYXAoTlVMTCwgY3R4Lm1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdFx0ICAgIE1BUF9TSEFSRUQsIGN0eC5tYXBfZmQsIDApO1xuK1x0XHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwibW1hcCBmYWlsZWQ6ICVkXFxuXCIsIC1lcnJubyk7XG4rXHRcdFx0ZXhpdCgxKTtcbitcdFx0fVxuK1x0XHRpZiAobXVubWFwKGFkZHIsIGN0eC5tbWFwX3N6KSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIm11bm1hcCBmYWlsZWQ6ICVkXFxuXCIsIC1lcnJubyk7XG4rXHRcdFx0ZXhpdCgxKTtcbitcdFx0fVxuK1x0XHRhdG9taWNfaW5jKFx1MDAyNmhpdHMpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxuK3tcbitcdHJlcy1cdTAwM2VoaXRzID0gYXRvbWljX3N3YXAoXHUwMDI2aGl0cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cywgLm1hcF9mbGFncyA9IEJQRl9GX01NQVBBQkxFKTtcbitcdGxvbmcgcGFnZV9zeiA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTtcbitcdF9fdTMyIHZhbHVlX3NpemUgPSBzaXplb2YoX191NjQpO1xuK1x0X191MzIgbWF4X2VudHJpZXM7XG4rXG4rXHRzZXR1cF9saWJicGYoKTtcbitcbitcdC8qXG4rXHQgKiBtbWFwLWFibGUgYXJyYXkgbWFwcyByb3VuZCB0aGUgdmFsdWUgc2l6ZSB1cCB0byA4IGJ5dGVzIGFuZCBleHBvc2VcbitcdCAqIFBBR0VfQUxJR04obWF4X2VudHJpZXMgKiBlbGVtX3NpemUpIGJ5dGVzIHRvIHVzZXIgc3BhY2UuXG4rXHQgKi9cbitcdG1heF9lbnRyaWVzID0gKGFyZ3MubWFwX3NpemUgKyB2YWx1ZV9zaXplIC0gMSkgLyB2YWx1ZV9zaXplO1xuK1x0Y3R4Lm1tYXBfc3ogPSAoKF9fdTY0KW1heF9lbnRyaWVzICogdmFsdWVfc2l6ZSArIHBhZ2Vfc3ogLSAxKSBcdTAwMjZcbitcdFx0ICAgICAgfihwYWdlX3N6IC0gMSk7XG4rXG4rXHRjdHgubWFwX2ZkID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX0FSUkFZLCBcIm1tYXBfYXJyYXlcIixcbitcdFx0XHRcdCAgICBzaXplb2YoX191MzIpLCB2YWx1ZV9zaXplLCBtYXhfZW50cmllcyxcbitcdFx0XHRcdCAgICBcdTAwMjZvcHRzKTtcbitcdGlmIChjdHgubWFwX2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBjcmVhdGUgbWFwOiAlZFxcblwiLCAtZXJybm8pO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK1xuK1x0cHJpbnRmKFwiYXJyYXkgbWFwOiAldSBlbnRyaWVzLCBtbWFwIHNpemUgJXp1IGJ5dGVzLCAldSB0aHJlYWRzXFxuXCIsXG4rXHQgICAgICAgbWF4X2VudHJpZXMsIGN0eC5tbWFwX3N6LCBhcmdzLm5yX3RocmVhZHMpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYXJyYXltYXBfbW1hcCA9IHtcbitcdC5uYW1lID0gXCJhcnJheW1hcC1tbWFwXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2FycmF5bWFwX21tYXBfYXJncCxcbitcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuK1x0LnNldHVwID0gc2V0dXAsXG4rXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4rXHQubWVhc3VyZSA9IG1lYXN1cmUsXG4rXHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcbitcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYXJyYXltYXBfbW1hcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2VmZDQ0MWNkNjUzYTJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2FycmF5bWFwX21tYXAuc2hcbkBAIC0wLDAgKzEsMTUgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbitzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxuK1xuK3NldCAtZXVmbyBwaXBlZmFpbFxuK1xuK2ZvciB0IGluIDEgNCA4IDE2OyBkb1xuK2ZvciBzIGluIDEwNDg1NzYgODM4ODYwOCA2NzEwODg2NDsgZG9cbitzdWJ0aXRsZSBcIm5yX3RocmVhZHM6ICR0LCBtYXBfc2l6ZTogJHNcIlxuK1x0c3VtbWFyaXplX29wcyBcImFycmF5bWFwLW1tYXA6IFwiIFxcXG4rXHQgICAgXCIkKCRSVU5fQkVOQ0ggLS1uci10aHJlYWRzICR0IC0tbWFwLXNpemUgJHMgYXJyYXltYXAtbW1hcClcIlxuK1x0cHJpbnRmIFwiXFxuXCJcbitkb25lXG4rZG9uZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTY6NDcuMzc5NzY1ODMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3MTQwMTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBBcnJheSBNYXAgbW1hcCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHRoaXMgaXMgYSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gQlBGIGFycmF5IG1hcCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvcmUgaWRlYSBpcyBzaGlmdGluZyBmcm9tIGVhZ2VybHkgbWFwcGluZyB0aGUgbWVtb3J5IHdpdGggYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGluIGBhcnJheV9tYXBfbW1hcGAgdG8gYSBsYXp5LCBkZW1hbmQtcGFnZWQgYXBwcm9hY2guIFRoZSB1c2Ugb2YgYFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUGAgZmxhZ3MgaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgdGhpcywgYWxvbmcgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgYG1hcF9tbWFwX2ZhdWx0YCBjYWxsYmFjayB3aGljaCB3aWxsIG5vdyBoYW5kbGUgdGhlIHBhZ2UgZmF1bHRzLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgc2hpZnQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbiBkZXRhaWwuIEkga25vdyB0aGlzIHdpbGwgYWZmZWN0IHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1c2FnZS5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgbWFraW5nIEJQRiBhcnJheSBtYXBzIGJlaGF2ZSBtb3JlIGxpa2UgdHlwaWNhbCBtZW1vcnkgcmVnaW9ucywgd2hlcmUgcGFnZXMgYXJlIG9ubHkgYWxsb2NhdGVkIGFuZCBtYXBwZWQgd2hlbiB0aGV5J3JlIGFjdHVhbGx5IGFjY2Vzc2VkLiBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZS4gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIHNjZW5hcmlvczogV2hhdCdzIHRoZSBpbXBhY3Qgb2YgdGhlIGluaXRpYWwgYWNjZXNzIG92ZXJoZWFkPyBIb3cgZG9lcyB0aGlzIGluZmx1ZW5jZSBvdmVyYWxsIG1lbW9yeSBjb25zdW1wdGlvbj8gSXMgaXQgZ29pbmcgdG8gYmUgYSB3aW4gaW4gdGVybXMgb2YgcmVkdWNlZCBtZW1vcnkgZm9vdHByaW50IGZvciBsYXJnZSBhcnJheXMsIG9yIHdpbGwgdGhlIGFkZGVkIGZhdWx0IGhhbmRsaW5nIGNvc3Qgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIGluIGNlcnRhaW4gd29ya2xvYWRzPyBUaGlzIG5lZWRzIHNvbWUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLlxuXG5UaGUgZmFjdCB0aGF0IHRoZXkndmUgbW9kaWZpZWQgYGJwZl9tYXBfbW1hcGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBob29rIHVwIHRoZSBmYXVsdCBoYW5kbGVyIGluIGBicGZfbWFwX2RlZmF1bHRfdm1vcHNgIGlzIHRoZSBrZXkuIEl0IG1lYW5zIHRoZXkncmUgaW50ZWdyYXRpbmcgdGhlIGxhenkgbWFwcGluZyB3aXRoaW4gdGhlIEJQRiBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZXkndmUgdXBkYXRlZCB0aGUgYG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX21tYXBfZmF1bHRgIGNhbGwuXG5cblJpZ2h0LCBzbyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGFycmF5X21hcF9tbWFwYCwgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBicGZfbWFwX21tYXBfZmF1bHRgLiBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBgZ3JlcGAgZm9yIGBicGZfbWFwX21tYXBfZmF1bHRgIGFuZCBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlc2UgYXJlIGJlaW5nIGNhbGxlZCBmcm9tIGFuZCB0byBzZWUgd2hhdCBpbnRlcmFjdGlvbnMgZXhpc3QuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG1hcCBmYXVsdHMgYXJlIHRyaWdnZXJlZCwgaGFuZGxlZCwgYW5kIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIG9uIGRlbWFuZC4gVGhpcyBpcyBnb2luZyB0byBnaXZlIG1lIGEgc29saWQgc3RhcnQgdG8gYW5hbHl6aW5nIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTMxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTY6NTMuNjUxMTY5MzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5MTE3MDAxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX21tYXBfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MTA3Mj1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDg1LSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEwODY6c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwODcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTA5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwOTgtXFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA5OTpcXHQuZmF1bHRcXHRcXHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTAwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE2OjU3LjA0MjM0NTc4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzk0ODAzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWJ1Z2dpbmcgSW5pdGlhdGl2ZTogVGhlIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIHByb2JsZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBsb2dzLCBhbmQgdGhlIGJlc3QgdG9vbCBmb3IgdGhhdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGBncmVwYC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGlzc3VlIG9yIGZ1bmN0aW9uIGNhbGwgdGhhdCdzIGNhdXNpbmcgdGhpcyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLiBUaGlzIGxpa2VseSBwb2ludHMgdG8gYSBtZW1vcnktcmVsYXRlZCBpc3N1ZSwgcHJvYmFibHkgd2l0aCBtZW1vcnkgbWFwcGluZyBhbmQgaG93IGFuIGBhcnJheV9tYXBgIGZ1bmN0aW9uIGlzIGludGVyYWN0aW5nIHdpdGggaXQuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIGh1bnQgZG93biBpbnN0YW5jZXMgb2YgdGhhdCBzcGVjaWZpYyB0ZXJtLCBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHN0YXJ0aW5nIHBvaW50IOKAkyB3aGVyZSB0aGlzIHNwZWNpZmljIGVycm9yIG9yIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBvciByZWZlcmVuY2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHJvb3QgY2F1c2UuIEknbSBob3BpbmcgdGhpcyB3aWxsIGxlYWQgbWUgdG8gdGhlIHByb2JsZW1hdGljIGxvZ2ljIHF1aWNrbHkuIExldCdzIHNlZSB3aGF0IGBncmVwYCB1bmNvdmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjAwLjE4MTgyODM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzYwNTU5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcnJheW1hcC5jPTU3Nj1zdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTU4OC1cXHQgKiBUaGUgYmFja2luZyBtZW1vcnkgaXMgdm1hbGxvYydlZCB1cCBmcm9udCwgc28gaW5zdGVhZCBvZiB3aXJpbmcgdXBcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NTg5OlxcdCAqIGV2ZXJ5IFBURSBoZXJlIHdlIGxldCBhcnJheV9tYXBfbW1hcF9mYXVsdCgpIGluc2VydCBwYWdlcyBvbiBkZW1hbmQuXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTU5MC1cXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01OTctXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjU5ODpzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy01OTktXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTgzND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NDctXFx0Lm1hcF9tbWFwID0gYXJyYXlfbWFwX21tYXAsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg0ODpcXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODQ5LVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMToxNzowMi40NTc4OTI4OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgwMTk4NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkZ1bmN0aW9uYWwgUGF0Y2ggQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHNvbGlkIOKAkyBpdCdzIGZ1bmN0aW9uYWwgYW5kIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgY29kZSBwYXRoIGl0IG1vZGlmaWVzIGlzIHJlYWNoYWJsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBmb2N1cyBuZWVkcyB0byBiZSBsYXNlci1zaGFycCBvbiBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGRpZyBpbnRvLiBJdCBsb29rcyBsaWtlIGBhcnJheV9tYXBfbW1hcGAgaXRzZWxmIGhhcyBhbHNvIHNlZW4gc29tZSBtb2RpZmljYXRpb25zLCBzbyB0aGF0J3Mgd29ydGgga2VlcGluZyBhbiBleWUgb24gYXMgd2VsbC5cblxuTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdlIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbCwgdGhhdCdzIGEgZ2l2ZW4uIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLCBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciwgbW9yZSBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBwYXRjaCBkZXBlbmRzIG9uLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIGNvbmZpcm1pbmcgdGhpcyBjaGFuZ2Ugd29ya3MgYXMgZXhwZWN0ZWQgaW4gdmFyaW91cyBzZXR1cHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBnb2luZyB0byBwbGF5IG5pY2Ugd2l0aCBhbGwgb3VyIGRlcGxveW1lbnQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc3NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjA2LjIzODA5NDM3NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM0Njc0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjA4LjM3Mjc3NDM2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjAwNDI0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgYXJyYXltYXAuY2AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBhcnJheW1hcC5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBhIHBhcnRpY3VsYXIgY29uZGl0aW9uLiBUaGlzIGNvdWxkIGJlIGEgbWFjcm8sIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSXQncyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGljaCBwYXJ0cyBvZiB0aGUgY29kZSBhcmUgYWN0dWFsbHkgaW5jbHVkZWQgaW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25zIGFyb3VuZCBjb21waWxhdGlvbiBvZiB0aGlzIGZpbGUgaXMgZm91bmRhdGlvbmFsIGJlZm9yZSBjb250aW51aW5nLiBJIG5lZWQgdG8ga25vdyB3aHkgYW5kIGhvdyBpdCdzIGluY2x1ZGVkLCBvciBleGNsdWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjExLjAzMjgxODg4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MDgzNjI3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcnJheW1hcC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYz03OT1zdGF0aWMgdm9pZCB0ZXN0X2FycmF5X21hcCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xMzAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzoxMzE6XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYXJyYXltYXBfb3V0cHV0LCBleHBlY3RlZF90b3RhbCwgXFxcImFycmF5X291dHB1dFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTMyLVxcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNwdSArIDEsIHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcGVyY3B1X3ZhbCwgXFxcInBlcmNwdV92YWxcXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jPTUwPWNoZWNrX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyICprZXksIF9fdTY0ICp2YWwsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy01Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzo1ODp1MzIgYXJyYXltYXBfb3V0cHV0ID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy01OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jPTYxPWludCB0ZXN0X3BrdF9hY2Nlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNjgtXFx0XFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFxcdTAwMjZhcnJheW1hcCwgdW51c2VkX3N1YnByb2csIFxcdTAwMjZkYXRhLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzo2OTpcXHRhcnJheW1hcF9vdXRwdXQgPSBkYXRhLm91dHB1dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy03MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTc6MTMuNjIzNjYyNzczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MjA1OTQ0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gVGhhdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50LCB0aGUga2V5c3RvbmUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIGtub2JzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBCUEYgc3lzY2FsbCBiZWhhdmlvciwgZXZlbiBpbmRpcmVjdGx5PyBJIGNhbid0IGJlIHN1cmUsIEkgc2hvdWxkIHJlYWxseSBjaGVjay5cblxuTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBzb3VyY2UgY29kZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIHN5c2NhbGwncyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHZhcmlvdXMgb3RoZXIgY29tcGlsYXRpb24gb3B0aW9ucyBvciBrZXJuZWwgc2V0dGluZ3MuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gdW5jb3ZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6OTA0MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjIxLjI0NDI1OTQ0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNDc0MTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXNjYWxsLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9jYWNoZWZpbGVzLnJzdD0zOTY9Y2lyY3Vtc3RhbmNlcyB0aGUgY2FjaGluZyBjb2RlIGlzIHJ1bm5pbmcgaW4gdGhlIHNlY3VyaXR5IGNvbnRleHQgb2Ygd2hhdGV2ZXJcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy5yc3Q6Mzk3OnByb2Nlc3MgaXNzdWVkIHRoZSBvcmlnaW5hbCBzeXNjYWxsIG9uIHRoZSBuZXRmcy5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy5yc3QtMzk4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0PTkwPW9mIGZ0cmFjZS4gSGVyZSBpcyBhIGxpc3Qgb2Ygc29tZSBvZiB0aGUga2V5IGZpbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE4Ni1cXHRiZWZvcmUgYSB3YWl0ZXIgaXMgd29rZW4gdXAuIFRoYXQgaXMsIGlmIGFuIGFwcGxpY2F0aW9uIGNhbGxzIGFcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS5yc3Q6MTg3OlxcdGJsb2NraW5nIHJlYWQgc3lzY2FsbCBvbiBvbmUgb2YgdGhlIHBlcl9jcHUgdHJhY2VfcGlwZV9yYXcgZmlsZXMsIGl0XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UucnN0LTE4OC1cXHR3aWxsIGJsb2NrIHVudGlsIHRoZSBnaXZlbiBhbW91bnQgb2YgZGF0YSBzcGVjaWZpZWQgYnkgYnVmZmVyX3BlcmNlbnRcXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9yc2VxLnJzdD0yMTY9b3BlcmF0aW9uLlxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9yc2VxLnJzdC0yMTctXFxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL3JzZXEucnN0OjIxODpJZiB0aGUgdGhyZWFkIGlzc3VlcyBhIHN5c2NhbGwgb3RoZXIgdGhhbiByc2VxX3NsaWNlX3lpZWxkKDIpIHdpdGhpbiB0aGVcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvcnNlcS5yc3QtMjE5LWdyYW50ZWQgdGltZXNsaWNlIGV4dGVuc2lvbiwgdGhlIGdyYW50IGlzIGFsc28gcmV2b2tlZCBhbmQgdGhlIENQVSBpc1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zMDU9c3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X3RocmVhZF9jb21tb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTMxOC1cXHQgKiBUbyBhbGxvdyB0aGUgc3lzY2FsbHM6c3lzX2V4aXRfZXhlY3ZlIHRyYWNlcG9pbnQgd2UgbmVlZCB0byBwcmVzZXJ2ZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MzE5OlxcdCAqIHN5c2NhbGxubywgYnV0IGRvIG5vdCBuZWVkIG9yaWdfeDAgb3IgdGhlIG9yaWdpbmFsIEdQUnMuXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zMjAtXFx0ICovXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTg4LS8qXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaDo4OTogKiBJZiBwdF9yZWdzLnN5c2NhbGxubyA9PSBOT19TWVNDQUxMLCB0aGVuIHRoZSB0aHJlYWQgaXMgbm90IGV4ZWN1dGluZ1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgtOTAtICogYSBzeXNjYWxsIC0tIGkuZS4sIGl0cyBtb3N0IHJlY2VudCBlbnRyeSBpbnRvIHRoZSBrZXJuZWwgZnJvbVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaD0xNTY9c3RydWN0IHB0X3JlZ3Mge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xNjYtXFx0dTY0IG9yaWdfeDA7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaDoxNjc6XFx0czMyIHN5c2NhbGxubztcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTE2OC1cXHR1MzIgcG1yO1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaD0xNzc9c3RhdGljIGlubGluZSBib29sIGluX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgY29uc3QgKnJlZ3MpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xNzgte1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg6MTc5OlxcdHJldHVybiByZWdzLVxcdTAwM2VzeXNjYWxsbm8gIT0gTk9fU1lTQ0FMTDtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oLTE4MC19XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHZvaWQgZm9yZ2V0X3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xODMte1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmg6MTg0OlxcdHJlZ3MtXFx1MDAzZXN5c2NhbGxubyA9IE5PX1NZU0NBTEw7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaC0xODUtfVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmg9MjA9c3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgtMjIte1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oOjIzOlxcdHJldHVybiByZWdzLVxcdTAwM2VzeXNjYWxsbm87XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgtMjQtfVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zeXNjYWxsLmg9NjQ9c3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbC5oLTY3LXtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaDo2ODpcXHRyZWdzLVxcdTAwM2VzeXNjYWxsbm8gPSBucjtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGwuaC02OS1cXHRpZiAobnIgPT0gLTEpIHtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlPTEwPUNGTEFHU19SRU1PVkVfcmV0dXJuX2FkZHJlc3MubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUtMTMtIyBjaGVja3MgZHVlIHRvIHJhbmRvbWl6ZV9rc3RhY2tfb2Zmc2V0LlxcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlOjE0OkNGTEFHU19SRU1PVkVfc3lzY2FsbC5vXFx0ID0gLWZzdGFjay1wcm90ZWN0b3IgLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGU6MTU6Q0ZMQUdTX3N5c2NhbGwub1xcdCs9IC1mbm8tc3RhY2stcHJvdGVjdG9yXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUtMTYtXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZT0yOT1vYmoteVxcdFxcdFxcdDo9IGRlYnVnLW1vbml0b3JzLm8gZW50cnkubyBpcnEubyBmcHNpbWQub1xcdFxcdFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlLTM1LVxcdFxcdFxcdCAgIHNtcC5vIHNtcF9zcGluX3RhYmxlLm8gdG9wb2xvZ3kubyBzbWNjYy1jYWxsLm9cXHRcXFxcXFxuYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGU6MzY6XFx0XFx0XFx0ICAgc3lzY2FsbC5vIHByb3Rvbi1wYWNrLm8gaWRsZS5vIHBhdGNoaW5nLm8gcGkvXFx0XFxcXFxcbmFyY2gvYXJtNjQva2VybmVsL01ha2VmaWxlLTM3LVxcdFxcdFxcdCAgIHJzaS5vIGp1bXBfbGFiZWwub1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYz0yNz1pbnQgbWFpbih2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYy03NS0gIERFRklORShTX1BTVEFURSxcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcHN0YXRlKSk7XFxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYzo3NjogIERFRklORShTX1NZU0NBTExOTyxcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3lzY2FsbG5vKSk7XFxuYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYy03Ny0gIERFRklORShTX1NERUlfVFRCUjEsXFx0XFx0b2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNkZWlfdHRicjEpKTtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jPTczNj1zdGF0aWMgaW50IHN5c3RlbV9jYWxsX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTczOS17XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6NzQwOlxcdHJldHVybiBtZW1idWZfc3RvcmUoXFx1MDAyNnRvLCB0YXNrX3B0X3JlZ3ModGFyZ2V0KS1cXHUwMDNlc3lzY2FsbG5vKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy03NDEtfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM9NzQzPXN0YXRpYyBpbnQgc3lzdGVtX2NhbGxfc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzQ3LXtcXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzo3NDg6XFx0aW50IHN5c2NhbGxubyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpLVxcdTAwM2VzeXNjYWxsbm87XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzQ5LVxcdGludCByZXQ7XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtNzUwLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjc1MTpcXHRyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oXFx1MDAyNnBvcywgXFx1MDAyNmNvdW50LCBcXHUwMDI2a2J1ZiwgXFx1MDAyNnVidWYsIFxcdTAwMjZzeXNjYWxsbm8sIDAsIC0xKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy03NTItXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTc1NC1cXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzo3NTU6XFx0dGFza19wdF9yZWdzKHRhcmdldCktXFx1MDAzZXN5c2NhbGxubyA9IHN5c2NhbGxubztcXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy03NTYtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jPTIyMzU9bG9uZyBjb21wYXRfYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgY29tcGF0X2xvbmdfdCByZXF1ZXN0LFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtMjI3My1cXHRcXHRjYXNlIENPTVBBVF9QVFJBQ0VfU0VUX1NZU0NBTEw6XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6MjI3NDpcXHRcXHRcXHR0YXNrX3B0X3JlZ3MoY2hpbGQpLVxcdTAwM2VzeXNjYWxsbm8gPSBkYXRhO1xcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTIyNzUtXFx0XFx0XFx0cmV0ID0gMDtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jPTI0MTE9aW50IHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYy0yNDI2LVxcdGlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKVxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jOjI0Mjc6XFx0XFx0dHJhY2Vfc3lzX2VudGVyKHJlZ3MsIHJlZ3MtXFx1MDAzZXN5c2NhbGxubyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmMtMjQyOC1cXG5hcmNoL2FybTY0L2tlcm5lbC9wdHJhY2UuYzoyNDI5OlxcdGF1ZGl0X3N5c2NhbGxfZW50cnkocmVncy1cXHUwMDNlc3lzY2FsbG5vLCByZWdzLVxcdTAwM2VvcmlnX3gwLCByZWdzLVxcdTAwM2VyZWdzWzFdLFxcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTI0MzAtXFx0XFx0XFx0ICAgIHJlZ3MtXFx1MDAzZXJlZ3NbMl0sIHJlZ3MtXFx1MDAzZXJlZ3NbM10pO1xcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTI0MzEtXFxuYXJjaC9hcm02NC9rZXJuZWwvcHRyYWNlLmM6MjQzMjpcXHRyZXR1cm4gcmVncy1cXHUwMDNlc3lzY2FsbG5vO1xcbmFyY2gvYXJtNjQva2VybmVsL3B0cmFjZS5jLTI0MzMtfVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jPTYyPXN0YXRpYyB2b2lkIGVsMF9zdmNfY29tbW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2NubywgaW50IHNjX25yLFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvc3lzY2FsbC5jLTY3LVxcdHJlZ3MtXFx1MDAzZW9yaWdfeDAgPSByZWdzLVxcdTAwM2VyZWdzWzBdO1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYzo2ODpcXHRyZWdzLVxcdTAwM2VzeXNjYWxsbm8gPSBzY25vO1xcbmFyY2gvYXJtNjQva2VybmVsL3N5c2NhbGwuYy02OS1cXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvTWFrZWZpbGU9ND1vYmoteSArPSBoZWFkLm8gZW50cnkubyBhdG9taWMubyBzaWduYWwubyB0cmFwcy5vIGlycS5vIHRpbWUubyB2ZHNvLm8gdmRzby9cXG5hcmNoL2Nza3kva2VybmVsL01ha2VmaWxlOjU6b2JqLXkgKz0gcG93ZXIubyBzeXNjYWxsLm8gc3lzY2FsbF90YWJsZS5vIHNldHVwLm9cXG5hcmNoL2Nza3kva2VybmVsL01ha2VmaWxlLTYtb2JqLXkgKz0gcHJvY2Vzcy5vIGNwdS1wcm9iZS5vIHB0cmFjZS5vIHN0YWNrdHJhY2Uub1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTEwPW9iai15XFx0XFx0Kz0gaGVhZC5vIGNwdS1wcm9iZS5vIGNhY2hlaW5mby5vIGVudi5vIHNldHVwLm8gZW50cnkubyBnZW5leC5vIFxcXFxcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGUtMTEtXFx0XFx0ICAgdHJhcHMubyBpcnEubyBpZGxlLm8gcHJvY2Vzcy5vIGRtYS5vIG1lbS5vIHJlc2V0Lm8gc3dpdGNoLm8gXFxcXFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZToxMjpcXHRcXHQgICBlbGYubyBzeXNjYWxsLm8gc2lnbmFsLm8gdGltZS5vIHRvcG9sb2d5Lm8gaW5zdC5vIHB0cmFjZS5vIHZkc28ubyBcXFxcXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTEzLVxcdFxcdCAgIGFsdGVybmF0aXZlLm8ga2RlYnVnZnMubyB1bndpbmQub1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTI0PUNGTEFHU19tb2R1bGUub1xcdFxcdCs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIG92ZXJyaWRlLWluaXQpXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjI1OkNGTEFHU19zeXNjYWxsLm9cXHQrPSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCBvdmVycmlkZS1pbml0KVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZS0yNi1DRkxBR1NfdHJhcHMub1xcdFxcdCs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIG92ZXJyaWRlLWluaXQpXFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0Lmg9NDQ9ZW51bSBzcGVjX29wIHtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL2luc3QuaC00Ny1cXHRqcl9vcCwgamFscl9vcCwgbW92el9vcCwgbW92bl9vcCxcXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0Lmg6NDg6XFx0c3lzY2FsbF9vcCwgYnJlYWtfb3AsIHNwaW1fb3AsIHN5bmNfb3AsXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oLTQ5LVxcdG1maGlfb3AsIG10aGlfb3AsIG1mbG9fb3AsIG10bG9fb3AsXFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9pbnN0Lmg9NDQyPWVudW0gbW1fMzJheGZfbWlub3Jfb3Age1xcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oLTQ1OC1cXHRtbV9zeW5jX29wID0gMHgxYWQsXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oOjQ1OTpcXHRtbV9zeXNjYWxsX29wID0gMHgyMmQsXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vaW5zdC5oLTQ2MC1cXHRtbV93YWl0X29wID0gMHgyNGQsXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlPTg9b2JqLXlcXHRcXHQrPSBoZWFkLm8gYnJhbmNoLm8gY21weGNoZy5vIGVsZi5vIGVudHJ5Lm8gZ2VuZXgubyBpZGxlLm8gaXJxLm8gXFxcXFxcbmFyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUtOS1cXHRcXHQgICBwcm9jZXNzLm8gcHJvbS5vIHB0cmFjZS5vIHJlc2V0Lm8gc2V0dXAubyBzaWduYWwubyBcXFxcXFxuYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZToxMDpcXHRcXHQgICBzeXNjYWxsLm8gdGltZS5vIHRvcG9sb2d5Lm8gdHJhcHMubyB1bmFsaWduZWQubyB3YXRjaC5vIFxcXFxcXG5hcmNoL21pcHMva2VybmVsL01ha2VmaWxlLTExLVxcdFxcdCAgIHZkc28ubyBjYWNoZWluZm8ub1xcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TPTI1PU5FU1RFRChoYW5kbGVfc3lzLCBQVF9TSVpFLCBzcClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUy0zMS1cXG5hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlM6MzI6XFx0bHdcXHR0MSwgUFRfRVBDKHNwKVxcdFxcdCMgc2tpcCBzeXNjYWxsIG9uIHJldHVyblxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUy0zMy1cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUz0yNj1ORVNURUQoaGFuZGxlX3N5c24zMiwgUFRfU0laRSwgc3ApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMtMzgtI2lmbmRlZiBDT05GSUdfTUlQUzMyX08zMlxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUzozOTpcXHRsZFxcdHQxLCBQVF9FUEMoc3ApXFx0XFx0IyBza2lwIHN5c2NhbGwgb24gcmV0dXJuXFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TLTQwLVxcdGRhZGRpdVxcdHQxLCA0XFx0XFx0XFx0IyBza2lwIHRvIG5leHQgaW5zdHJ1Y3Rpb25cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uNjQuUz0yOD1ORVNURUQoaGFuZGxlX3N5czY0LCBQVF9TSVpFLCBzcClcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uNjQuUy00MS0jaWYgIWRlZmluZWQoQ09ORklHX01JUFMzMl9PMzIpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19NSVBTMzJfTjMyKVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uNjQuUzo0MjpcXHRsZFxcdHQxLCBQVF9FUEMoc3ApXFx0XFx0IyBza2lwIHN5c2NhbGwgb24gcmV0dXJuXFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW42NC5TLTQzLVxcdGRhZGRpdVxcdHQxLCA0XFx0XFx0XFx0IyBza2lwIHRvIG5leHQgaW5zdHJ1Y3Rpb25cXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUz0yOD1ORVNURUQoaGFuZGxlX3N5cywgUFRfU0laRSwgc3ApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMtMzMtXFx0LnNldFxcdGF0XFxuYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TOjM0OlxcdGxkXFx0dDEsIFBUX0VQQyhzcClcXHRcXHQjIHNraXAgc3lzY2FsbCBvbiByZXR1cm5cXG5hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMtMzUtXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYy00NS0vKlxcbmFyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jOjQ2OiAqIEZvciBoaXN0b3JpYyByZWFzb25zIHRoZSBwaXBlKDIpIHN5c2NhbGwgb24gTUlQUyBoYXMgYW4gdW51c3VhbCBjYWxsaW5nXFxuYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMtNDctICogY29udmVudGlvbi5cXHRJdCByZXR1cm5zIHJlc3VsdHMgaW4gcmVnaXN0ZXJzICR2MCAvICR2MSB3aGljaCBtZWFucyB0aGVyZVxcbi0tXFxuYXJjaC9taXBzL21tL3Vhc20tbWljcm9taXBzLmM9NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpbnNuIGluc25fdGFibGVfTU1baW5zbl9pbnZhbGlkXSA9IHtcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pY3JvbWlwcy5jLTEyMy1cXHRbaW5zbl9kaW5zbV1cXHQ9IHswLCAwfSxcXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYzoxMjQ6XFx0W2luc25fc3lzY2FsbF1cXHQ9IHtNKG1tX3Bvb2wzMmFfb3AsIDAsIDAsIDAsIG1tX3N5c2NhbGxfb3AsIG1tX3Bvb2wzMmF4Zl9vcCksIFNDSU1NfSxcXG5hcmNoL21pcHMvbW0vdWFzbS1taWNyb21pcHMuYy0xMjUtXFx0W2luc25fYmJpdDBdXFx0PSB7MCwgMH0sXFxuLS1cXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmM9NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbnNuIGluc25fdGFibGVbaW5zbl9pbnZhbGlkXSA9IHtcXG4tLVxcbmFyY2gvbWlwcy9tbS91YXNtLW1pcHMuYy0xOTUtXFx0W2luc25fc3luY11cXHQ9IHtNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHN5bmNfb3ApLCBSRX0sXFxuYXJjaC9taXBzL21tL3Vhc20tbWlwcy5jOjE5NjpcXHRbaW5zbl9zeXNjYWxsXVxcdD0ge00oc3BlY19vcCwgMCwgMCwgMCwgMCwgc3lzY2FsbF9vcCksIFNDSU1NfSxcXG5hcmNoL21pcHMvbW0vdWFzbS1taXBzLmMtMTk3LVxcdFtpbnNuX3RsYnBdXFx0PSB7TShjb3AwX29wLCBjb3Bfb3AsIDAsIDAsIDAsIHRsYnBfb3ApLCAgMH0sXFxuLS1cXG5hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oLTMyLSAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyBob3cgdGhlIHJlZ2lzdGVycyBhcmUgbGFpZCBvdXQgb24gdGhlIGtlcm5lbCBzdGFja1xcbmFyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmg6MzM6ICogZHVyaW5nIGEgc3lzY2FsbCBvciBvdGhlciBrZXJuZWwgZW50cnkuXFxuYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wdHJhY2UuaC0zNC0gKlxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlPTg9b2JqLXlcXHRcXHQ6PSBoZWFkLm8gY2FjaGUubyBwYWNhY2hlLm8gc2V0dXAubyBwZHQubyB0cmFwcy5vIHRpbWUubyBpcnEubyBcXFxcXFxuYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlOjk6XFx0XFx0ICAgc3lzY2FsbC5vIGVudHJ5Lm8gc3lzX3BhcmlzYy5vIGZpcm13YXJlLm8gXFxcXFxcbmFyY2gvcGFyaXNjL2tlcm5lbC9NYWtlZmlsZS0xMC1cXHRcXHQgICBwdHJhY2UubyBoYXJkd2FyZS5vIGludmVudG9yeS5vIGRyaXZlcnMubyBhbHRlcm5hdGl2ZS5vIFxcXFxcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYz0zODM9aGFuZGxlX3NpZ25hbChzdHJ1Y3Qga3NpZ25hbCAqa3NpZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgaW5fc3lzY2FsbClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00MDUtXFxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jOjQwNjpzdGF0aWMgdm9pZCBjaGVja19zeXNjYWxsbm9faW5fZGVsYXlfYnJhbmNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00MDcte1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jPTQ1MT1zeXNjYWxsX3Jlc3RhcnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMtNDc2LVxcdFxcdERCRygxLCBcXFwiJXM6ICVsZFxcXFxuXFxcIiwgX19mdW5jX18sIHJlZ3MtXFx1MDAzZWdyWzI4XSk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jOjQ3NzpcXHRcXHRjaGVja19zeXNjYWxsbm9faW5fZGVsYXlfYnJhbmNoKHJlZ3MpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYy00NzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmM9NDgzPWluc2VydF9yZXN0YXJ0X3RyYW1wb2xpbmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMtNTMzLVxcdFxcdERCRygxLCBcXFwiJXM6IFR5cGUgJWxkXFxcXG5cXFwiLCBfX2Z1bmNfXywgcmVncy1cXHUwMDNlZ3JbMjhdKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmM6NTM0OlxcdFxcdGNoZWNrX3N5c2NhbGxub19pbl9kZWxheV9icmFuY2gocmVncyk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jLTUzNS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TPTEzMT1saW51eF9nYXRld2F5X2VudHJ5Olxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUy0xODUtXFx0ICAgc2F2ZWQvcmVzdG9yZWQpLiAgVEFTS19QVF9QU1cgaXMgemVyb2VkIHNvIHdlIGNhbiBzZWUgd2hldGhlclxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlM6MTg2OlxcdCAgIGEgcHJvY2VzcyBpcyBvbiBhIHN5c2NhbGwgb3Igbm90LiAgRm9yIGFuIGludGVycnVwdCB0aGUgcmVhbFxcbmFyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMtMTg3LVxcdCAgIFBTVyB2YWx1ZSBpcyBzdG9yZWQuICBUaGlzIGlzIG5lZWRlZCBmb3IgZ2RiIGFuZCBzeXNfcHRyYWNlLiAqL1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUz0zNDg9dHJhY2VzeXNfbmV4dDpcXG5hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TOjM0OTpcXHQvKiBkb19zeXNjYWxsX3RyYWNlX2VudGVyIGVpdGhlciByZXR1cm5lZCB0aGUgc3lzY2FsbG5vLCBvciAtMUwsXFxuYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUy0zNTAtXFx0ICogIHNvIHdlIHNraXAgcmVzdG9yaW5nIHRoZSBQVF9HUjIwIGJlbG93LCBzaW5jZSB3ZSBwdWxsZWQgaXQgZnJvbVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc28zMi9NYWtlZmlsZT0xMD1LQ1NBTl9TQU5JVElaRSA6PSBuXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc28zMi9NYWtlZmlsZS0xMS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlOjEyOm9iai12ZHNvMzIgPSBub3RlLm8gc2lndHJhbXAubyByZXN0YXJ0X3N5c2NhbGwub1xcbmFyY2gvcGFyaXNjL2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUtMTMtb2JqLWN2ZHNvMzIgPSB2ZHNvMzJfZ2VuZXJpYy5vXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlPTEwPUtDU0FOX1NBTklUSVpFIDo9IG5cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlLTExLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGU6MTI6b2JqLXZkc282NCA9IG5vdGUubyBzaWd0cmFtcC5vIHJlc3RhcnRfc3lzY2FsbC5vXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Zkc282NC9NYWtlZmlsZS0xMy1vYmotY3Zkc282NCA9IHZkc282NF9nZW5lcmljLm9cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU9NTg9S0NTQU5fU0FOSVRJWkVfc2V0dXBfNjQubyA6PSBuXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlLTYyLSMgY2hlY2tzIGR1ZSB0byByYW5kb21pemVfa3N0YWNrX29mZnNldC5cXG5hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlOjYzOkNGTEFHU19SRU1PVkVfc3lzY2FsbC5vID0gLWZzdGFjay1wcm90ZWN0b3IgLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZTo2NDpDRkxBR1Nfc3lzY2FsbC5vICs9IC1mbm8tc3RhY2stcHJvdGVjdG9yXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS02NS0jZW5kaWZcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU9Njc9b2JqLXlcXHRcXHRcXHRcXHQ6PSBjcHV0YWJsZS5vIHN5c2NhbGxzLm8gc3dpdGNoLm8gXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS03NC1cXHRcXHRcXHRcXHQgICBod19icmVha3BvaW50X2NvbnN0cmFpbnRzLm8gaW50ZXJydXB0Lm8gXFxcXFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU6NzU6XFx0XFx0XFx0XFx0ICAga2RlYnVnZnMubyBzdGFja3RyYWNlLm8gc3lzY2FsbC5vXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZS03Ni1vYmoteVxcdFxcdFxcdFxcdCs9IHB0cmFjZS9cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jPTQ4PXN0cnVjdCBydGFzX2ZpbHRlciB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy02Ny0gKiAgICAgICAgICBnZW5lcmFsbHkgYWxsb3dlZCwgYW5kIEBmaWx0ZXIgZGVzY3JpYmVzIGNvbnN0cmFpbnRzIG9uIHRoZVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjY4OiAqICAgICAgICAgIGFyZ3VtZW50cy4gU2VlIGFsc28gQGJhbm5lZF9mb3Jfc3lzY2FsbF9vbl9sZS5cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzo2OTogKiBAYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlOiBTZXQgd2hlbiBjYWxsIHZpYSBzeXNfcnRhcyBpcyBnZW5lcmFsbHkgYWxsb3dlZFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTcwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBzcGVjaWZpY2FsbHkgcmVzdHJpY3RlZCBvbiBwcGM2NGxlLiBTdWNoXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz04Mz1zdHJ1Y3QgcnRhc19mdW5jdGlvbiB7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtODQtXFx0czMyIHRva2VuO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjg1OlxcdGNvbnN0IGJvb2wgYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlOjE7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtODYtXFx0Y29uc3QgY2hhciAqIGNvbnN0IG5hbWU7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz0xMDQ9c3RhdGljIHN0cnVjdCBydGFzX2Z1bmN0aW9uIHJ0YXNfZnVuY3Rpb25fdGFibGVbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00NTUtXFx0XFx0Lm5hbWUgPSBcXFwiaWJtLHN1c3BlbmQtbWVcXFwiLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjQ1NjpcXHRcXHQuYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlID0gdHJ1ZSxcXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00NTctXFx0XFx0LmZpbHRlciA9IFxcdTAwMjYoY29uc3Qgc3RydWN0IHJ0YXNfZmlsdGVyKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00NjktXFx0XFx0Lm5hbWUgPSBcXFwiaWJtLHVwZGF0ZS1ub2Rlc1xcXCIsXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmM6NDcwOlxcdFxcdC5iYW5uZWRfZm9yX3N5c2NhbGxfb25fbGUgPSB0cnVlLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTQ3MS1cXHRcXHQuZmlsdGVyID0gXFx1MDAyNihjb25zdCBzdHJ1Y3QgcnRhc19maWx0ZXIpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTQ3OC1cXHRcXHQubmFtZSA9IFxcXCJpYm0sdXBkYXRlLXByb3BlcnRpZXNcXFwiLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jOjQ3OTpcXHRcXHQuYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlID0gdHJ1ZSxcXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYy00ODAtXFx0XFx0LmZpbHRlciA9IFxcdTAwMjYoY29uc3Qgc3RydWN0IHJ0YXNfZmlsdGVyKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYz0xNzc2PXN0YXRpYyBib29sIGJsb2NrX3J0YXNfY2FsbChjb25zdCBzdHJ1Y3QgcnRhc19mdW5jdGlvbiAqZnVuYywgaW50IG5hcmdzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMtMTc5NC1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYzoxNzk1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfTElUVExFX0VORElBTikgXFx1MDAyNlxcdTAwMjYgZnVuYy1cXHUwMDNlYmFubmVkX2Zvcl9zeXNjYWxsX29uX2xlKVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLTE3OTYtXFx0XFx0Z290byBlcnI7XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9zaWduYWwuYz00MTM9c3RhdGljIGludCBzZXR1cF9ydF9mcmFtZShzdHJ1Y3Qga3NpZ25hbCAqa3NpZywgc2lnc2V0X3QgKnNldCxcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL3NpZ25hbC5jLTQ0Ny1cXHQgKiBGb3IgdGhlIG5vbW11IGNhc2Ugd2UgZG9uJ3QgaGF2ZSBhIFZEU08uICBJbnN0ZWFkIHdlIHB1c2ggdHdvXFxuYXJjaC9yaXNjdi9rZXJuZWwvc2lnbmFsLmM6NDQ4OlxcdCAqIGluc3RydWN0aW9ucyB0byBjYWxsIHRoZSBydF9zaWdyZXR1cm4gc3lzY2FsbCBvbnRvIHRoZSB1c2VyIHN0YWNrLlxcbmFyY2gvcmlzY3Yva2VybmVsL3NpZ25hbC5jLTQ0OS1cXHQgKi9cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU9Mzk9b2JqLXlcXHQ6PSBoZWFkLm8gdHJhcHMubyB0aW1lLm8gcHJvY2Vzcy5vIGVhcmx5Lm8gc2V0dXAubyBpZGxlLm8gdnRpbWUub1xcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU6NDA6b2JqLXlcXHQrPSBwcm9jZXNzb3IubyBzeXNjYWxsLm8gcHRyYWNlLm8gc2lnbmFsLm8gY3BjbWQubyBlYmNkaWMubyBubWkub1xcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUtNDEtb2JqLXlcXHQrPSBkZWJ1Zy5vIGlycS5vIGlwbC5vIGRpcy5vIHZkc28ubyBjcHVmZWF0dXJlLm9cXG4tLVxcbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlOjI6b2JqLXkgKz0gdnN5c2NhbGwubyB2c3lzY2FsbC1zeXNjYWxsLm8gdnN5c2NhbGwtc3ltcy5vXFxuYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvTWFrZWZpbGUtMy1cXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC9NYWtlZmlsZTo0OiQob2JqKS92c3lzY2FsbC1zeXNjYWxsLm86ICQob2JqKS92c3lzY2FsbC10cmFwYS5zb1xcbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlLTUtXFxuLS1cXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jPTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZkc29fdGFibGVbXSA9IHtcXG4tLVxcbmFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLmMtNDYtLypcXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jOjQ3OiAqIFRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgYnkgdnN5c2NhbGwubyB0byBtYXJrIHRoZSBib3VuZHNcXG5hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jLTQ4LSAqIG9mIHRoZSBFTEYgRFNPIGltYWdlcyBpbmNsdWRlZCB0aGVyZWluLlxcbi0tXFxuYXJjaC91bS9rZXJuZWwvc2thcy9NYWtlZmlsZS01LVxcbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGU6NjpvYmoteSA6PSBzdHViLm8gbW11Lm8gcHJvY2Vzcy5vIHN5c2NhbGwubyB1YWNjZXNzLm8gXFxcXFxcbmFyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUtNy1cXHQgc3R1Yl9leGVfZW1iZWQub1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg9MTI9ZXh0ZXJuIGxvbmcgX19pYTMyX3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTE3LSAqIF9feDY0X3N5c18qKCkgICAgICAgICAtIDY0LWJpdCBuYXRpdmUgc3lzY2FsbFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjE4OiAqIF9faWEzMl9zeXNfKigpICAgICAgICAtIDMyLWJpdCBuYXRpdmUgc3lzY2FsbCBvciBjb21tb24gY29tcGF0IHN5c2NhbGxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xOS0gKiBfX2lhMzJfY29tcGF0X3N5c18qKCkgLSAzMi1iaXQgY29tcGF0IHN5c2NhbGxcXG4tLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZT04PW9iai15IDo9IGhlYWQubyBhbGlnbi5vIGNvcHJvY2Vzc29yLm8gZW50cnkubyBpcnEubyBwbGF0Zm9ybS5vIHByb2Nlc3MubyBcXFxcXFxuYXJjaC94dGVuc2Eva2VybmVsL01ha2VmaWxlOjk6XFx0IHB0cmFjZS5vIHNldHVwLm8gc2lnbmFsLm8gc3RhY2t0cmFjZS5vIHN5c2NhbGwubyB0aW1lLm8gdHJhcHMubyBcXFxcXFxuYXJjaC94dGVuc2Eva2VybmVsL01ha2VmaWxlLTEwLVxcdCB2ZWN0b3JzLm9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmM9Mjk9X192bWFfbWF0Y2hlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jLTUzLSAqIHRvIGltcGxlbWVudCBEUk0gbW1hcCBzdXBwb3J0IGlzIHdpdGggYW4gbW1hcCBvZmZzZXQgaW9jdGwgKGxpa2VcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jOjU0OiAqIGk5MTVfZ2VtX21tYXBfZ3R0KSBhbmQgdGhlbiB1c2luZyB0aGUgbW1hcCBzeXNjYWxsIG9uIHRoZSBEUk0gZmQgZGlyZWN0bHkuXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYy01NS0gKiBUaGF0IHdheSBkZWJ1ZyB0b29saW5nIGxpa2UgdmFsZ3JpbmQgd2lsbCB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgaGlkaW5nXFxuLS1cXG5kcml2ZXJzL3BjaS9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfWDg2X0lOVEVMX01JRClcXHQrPSBwY2ktbWlkLm9cXG5kcml2ZXJzL3BjaS9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfUENJX1NZU0NBTEwpXFx0Kz0gc3lzY2FsbC5vXFxuZHJpdmVycy9wY2kvTWFrZWZpbGUtMzAtb2JqLSQoQ09ORklHX1BDSV9TVFVCKVxcdFxcdCs9IHBjaS1zdHViLm9cXG4tLVxcbmZzL2tlcm5mcy9kaXIuYz0xMDAzPXVuc2lnbmVkIGludCBrZXJuZnNfcm9vdF9mbGFncyhzdHJ1Y3Qga2VybmZzX25vZGUgKmtuKVxcbi0tXFxuZnMva2VybmZzL2Rpci5jLTEwMDktICoga2VybmZzX2NyZWF0ZV9yb290IC0gY3JlYXRlIGEgbmV3IGtlcm5mcyBoaWVyYXJjaHlcXG5mcy9rZXJuZnMvZGlyLmM6MTAxMDogKiBAc2NvcHM6IG9wdGlvbmFsIHN5c2NhbGwgb3BlcmF0aW9ucyBmb3IgdGhlIGhpZXJhcmNoeVxcbmZzL2tlcm5mcy9kaXIuYy0xMDExLSAqIEBmbGFnczogS0VSTkZTX1JPT1RfKiBmbGFnc1xcbi0tXFxuZnMva2VybmZzL2Rpci5jLTEwMTYtICovXFxuZnMva2VybmZzL2Rpci5jOjEwMTc6c3RydWN0IGtlcm5mc19yb290ICprZXJuZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMsXFxuZnMva2VybmZzL2Rpci5jLTEwMTgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdm9pZCAqcHJpdilcXG4tLVxcbmZzL2tlcm5mcy9kaXIuYy0xMDU3LVxcbmZzL2tlcm5mcy9kaXIuYzoxMDU4OlxcdHJvb3QtXFx1MDAzZXN5c2NhbGxfb3BzID0gc2NvcHM7XFxuZnMva2VybmZzL2Rpci5jLTEwNTktXFx0cm9vdC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4tLVxcbmZzL2tlcm5mcy9kaXIuYz0xMjkxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICprZXJuZnNfaW9wX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMva2VybmZzL2Rpci5jLTEyOTUtXFx0c3RydWN0IGtlcm5mc19ub2RlICpwYXJlbnQgPSBkaXItXFx1MDAzZWlfcHJpdmF0ZTtcXG5mcy9rZXJuZnMvZGlyLmM6MTI5NjpcXHRzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcyA9IGtlcm5mc19yb290KHBhcmVudCktXFx1MDAzZXN5c2NhbGxfb3BzO1xcbmZzL2tlcm5mcy9kaXIuYy0xMjk3LVxcdGludCByZXQ7XFxuLS1cXG5mcy9rZXJuZnMvZGlyLmM9MTMxMT1zdGF0aWMgaW50IGtlcm5mc19pb3Bfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2tlcm5mcy9kaXIuYy0xMzEzLVxcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa24gID0ga2VybmZzX2RlbnRyeV9ub2RlKGRlbnRyeSk7XFxuZnMva2VybmZzL2Rpci5jOjEzMTQ6XFx0c3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMgPSBrZXJuZnNfcm9vdChrbiktXFx1MDAzZXN5c2NhbGxfb3BzO1xcbmZzL2tlcm5mcy9kaXIuYy0xMzE1LVxcdGludCByZXQ7XFxuLS1cXG5mcy9rZXJuZnMvZGlyLmM9MTMyOT1zdGF0aWMgaW50IGtlcm5mc19pb3BfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMva2VybmZzL2Rpci5jLTEzMzUtXFx0c3RydWN0IGtlcm5mc19ub2RlICpuZXdfcGFyZW50ID0gbmV3X2Rpci1cXHUwMDNlaV9wcml2YXRlO1xcbmZzL2tlcm5mcy9kaXIuYzoxMzM2OlxcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0ga2VybmZzX3Jvb3Qoa24pLVxcdTAwM2VzeXNjYWxsX29wcztcXG5mcy9rZXJuZnMvZGlyLmMtMTMzNy1cXHRpbnQgcmV0O1xcbi0tXFxuZnMva2VybmZzL2tlcm5mcy1pbnRlcm5hbC5oPTMzPXN0cnVjdCBrZXJuZnNfcm9vdCB7XFxuLS1cXG5mcy9rZXJuZnMva2VybmZzLWludGVybmFsLmgtNDItXFx0dTMyXFx0XFx0XFx0aWRfaGlnaGJpdHM7XFxuZnMva2VybmZzL2tlcm5mcy1pbnRlcm5hbC5oOjQzOlxcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnN5c2NhbGxfb3BzO1xcbmZzL2tlcm5mcy9rZXJuZnMtaW50ZXJuYWwuaC00NC1cXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jPTI4PXN0YXRpYyBpbnQga2VybmZzX3NvcF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMva2VybmZzL21vdW50LmMtMzAtXFx0c3RydWN0IGtlcm5mc19yb290ICpyb290ID0ga2VybmZzX3Jvb3Qoa2VybmZzX2RlbnRyeV9ub2RlKGRlbnRyeSkpO1xcbmZzL2tlcm5mcy9tb3VudC5jOjMxOlxcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0gcm9vdC1cXHUwMDNlc3lzY2FsbF9vcHM7XFxuZnMva2VybmZzL21vdW50LmMtMzItXFxuLS1cXG5mcy9rZXJuZnMvbW91bnQuYz0zOD1zdGF0aWMgaW50IGtlcm5mc19zb3Bfc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jLTQxLVxcdHN0cnVjdCBrZXJuZnNfcm9vdCAqcm9vdCA9IGtlcm5mc19yb290KG5vZGUpO1xcbmZzL2tlcm5mcy9tb3VudC5jOjQyOlxcdHN0cnVjdCBrZXJuZnNfc3lzY2FsbF9vcHMgKnNjb3BzID0gcm9vdC1cXHUwMDNlc3lzY2FsbF9vcHM7XFxuZnMva2VybmZzL21vdW50LmMtNDMtXFxuLS1cXG5mcy9yZXNjdHJsL3JkdGdyb3VwLmM9NDI2MD1zdGF0aWMgaW50IHJkdGdyb3VwX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGtlcm5mc19yb290ICprZilcXG4tLVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy00Mjc2LVxcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYzo0Mjc3OnN0YXRpYyBzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzIHJkdGdyb3VwX2tmX3N5c2NhbGxfb3BzID0ge1xcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYy00Mjc4LVxcdC5ta2RpclxcdFxcdD0gcmR0Z3JvdXBfbWtkaXIsXFxuLS1cXG5mcy9yZXNjdHJsL3JkdGdyb3VwLmM9NDI4ND1zdGF0aWMgaW50IHJkdGdyb3VwX3NldHVwX3Jvb3Qoc3RydWN0IHJkdF9mc19jb250ZXh0ICpjdHgpXFxuZnMvcmVzY3RybC9yZHRncm91cC5jLTQyODUte1xcbmZzL3Jlc2N0cmwvcmR0Z3JvdXAuYzo0Mjg2OlxcdHJkdF9yb290ID0ga2VybmZzX2NyZWF0ZV9yb290KFxcdTAwMjZyZHRncm91cF9rZl9zeXNjYWxsX29wcyxcXG5mcy9yZXNjdHJsL3JkdGdyb3VwLmMtNDI4Ny1cXHRcXHRcXHRcXHQgICAgICBLRVJORlNfUk9PVF9DUkVBVEVfREVBQ1RJVkFURUQgfFxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaD0xOTk9c3RydWN0IGtlcm5mc19ub2RlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmZzLmgtMjM5LS8qXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaDoyNDA6ICoga2VybmZzX3N5c2NhbGxfb3BzIG1heSBiZSBzcGVjaWZpZWQgb24ga2VybmZzX2NyZWF0ZV9yb290KCkgdG8gc3VwcG9ydFxcbmluY2x1ZGUvbGludXgva2VybmZzLmgtMjQxLSAqIHN5c2NhbGxzLiAgVGhlc2Ugb3B0aW9uYWwgY2FsbGJhY2tzIGFyZSBpbnZva2VkIG9uIHRoZSBtYXRjaGluZyBzeXNjYWxsc1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC0yNDUtICovXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaDoyNDY6c3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyB7XFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC0yNDctXFx0aW50ICgqc2hvd19vcHRpb25zKShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3Qga2VybmZzX3Jvb3QgKnJvb3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaD00MjU9c3RydWN0IGRlbnRyeSAqa2VybmZzX25vZGVfZGVudHJ5KHN0cnVjdCBrZXJuZnNfbm9kZSAqa24sXFxuaW5jbHVkZS9saW51eC9rZXJuZnMuaC00MjYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oOjQyNzpzdHJ1Y3Qga2VybmZzX3Jvb3QgKmtlcm5mc19jcmVhdGVfcm9vdChzdHJ1Y3Qga2VybmZzX3N5c2NhbGxfb3BzICpzY29wcyxcXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oLTQyOC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB2b2lkICpwcml2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmZzLmg9NTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGtlcm5mc19yb290ICpcXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oOjUyNjprZXJuZnNfY3JlYXRlX3Jvb3Qoc3RydWN0IGtlcm5mc19zeXNjYWxsX29wcyAqc2NvcHMsIHVuc2lnbmVkIGludCBmbGFncyxcXG5pbmNsdWRlL2xpbnV4L2tlcm5mcy5oLTUyNy1cXHRcXHQgICB2b2lkICpwcml2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9yc2VxX2VudHJ5Lmg9NjUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX3JzZXFfZXhpdF90b191c2VyX21vZGVfcmVzdGFydChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmluY2x1ZGUvbGludXgvcnNlcV9lbnRyeS5oLTY1NS1cXHQgKiBJZiB0aGUgdGFzayBkaWQgbm90IGdvIHRocm91Z2ggc2NoZWR1bGUgb3IgZ290IHRoZSBmbGFnIGVuZm9yY2VkXFxuaW5jbHVkZS9saW51eC9yc2VxX2VudHJ5Lmg6NjU2OlxcdCAqIGJ5IHRoZSByc2VxIHN5c2NhbGwgb3IgZXhlY3ZlLCB0aGVuIG5vdGhpbmcgdG8gZG8gaGVyZS5cXG5pbmNsdWRlL2xpbnV4L3JzZXFfZW50cnkuaC02NTctXFx0ICpcXG4tLVxcbmluY2x1ZGUvbWVkaWEvbWVkaWEtZGV2bm9kZS5oPTI4PWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICptZWRpYV9kZWJ1Z2ZzX3Jvb3Q7XFxuLS1cXG5pbmNsdWRlL21lZGlhL21lZGlhLWRldm5vZGUuaC00NS0gKiBAY29tcGF0X2lvY3RsOiBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgaGFuZGxlIDMyIGJpdHMgdXNlcnNwYWNlXFxuaW5jbHVkZS9tZWRpYS9tZWRpYS1kZXZub2RlLmg6NDY6ICpcXHRjYWxscyB0byB0aGUgaW9jdGwoKSBzeXNjYWxsIG9uIGEgS2VybmVsIGNvbXBpbGVkIHdpdGggNjQgYml0cy5cXG5pbmNsdWRlL21lZGlhL21lZGlhLWRldm5vZGUuaC00Ny0gKiBAb3BlbjogcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIG9wZW4oKSBzeXNjYWxsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtMTktXFx0RU0oIE1SX01FTU9SWV9IT1RQTFVHLFxcdFxcXCJtZW1vcnlfaG90cGx1Z1xcXCIpXFx0XFx0XFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDoyMDpcXHRFTSggTVJfU1lTQ0FMTCxcXHRcXHRcXFwic3lzY2FsbF9vcl9jcHVzZXRcXFwiKVxcdFxcdFxcXFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtMjEtXFx0RU0oIE1SX01FTVBPTElDWV9NQklORCxcXHRcXFwibWVtcG9saWN5X21iaW5kXFxcIilcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaD0zNzM9c3RydWN0IGRybV92bXdfZmVuY2VfcmVwIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oLTM5Ni0gKlxcbmluY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oOjM5NzogKiBCdWZmZXIgb2JqZWN0cyBhcmUgbWFwcGVkIHVzaW5nIHRoZSBtbWFwKCkgc3lzY2FsbCBvbiB0aGUgZHJtIGRldmljZS5cXG5pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaC0zOTgtICovXFxuLS1cXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmg9NTQyPXN0cnVjdCBzaGFyZWRfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmgtNTgwLVxcdCAqIFdhbGxjbG9jayB0aW1lOiB1cGRhdGVkIG9ubHkgYnkgY29udHJvbCBzb2Z0d2FyZS4gR3Vlc3RzIHNob3VsZCBiYXNlXFxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oOjU4MTpcXHQgKiB0aGVpciBnZXR0aW1lb2ZkYXkoKSBzeXNjYWxsIG9uIHRoaXMgd2FsbGNsb2NrLWJhc2UgdmFsdWUuXFxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oLTU4Mi1cXHQgKi9cXG4tLVxcbmlwYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19TWVNWSVBDX0NPTVBBVCkgKz0gY29tcGF0Lm9cXG5pcGMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfU1lTVklQQykgKz0gdXRpbC5vIG1zZ3V0aWwubyBtc2cubyBzZW0ubyBzaG0ubyBzeXNjYWxsLm9cXG5pcGMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfU1lTVklQQ19TWVNDVEwpICs9IGlwY19zeXNjdGwub1xcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gKz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXFxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE2MT1zdGF0aWMgdm9pZCAqYXJyYXlfbWFwX2VsZW1fcHRyKHN0cnVjdCBicGZfYXJyYXkqIGFycmF5LCB1MzIgaW5kZXgpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTY1LVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzoxNjY6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNjctc3RhdGljIHZvaWQgKmFycmF5X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzQzPWludCBicGZfYXJyYXlfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzU5LVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzozNjA6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zNjEtc3RhdGljIGxvbmcgYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NDAwPWludCBicGZfcGVyY3B1X2FycmF5X3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ0OC1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDQ5Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDUwLXN0YXRpYyBsb25nIGFycmF5X21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz03MTI9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTcyOS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo3MzA6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSBkaXJlY3RseSwgc29cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy03MzEtICogYXJndW1lbnRzIGhhdmUgdG8gbWF0Y2ggYnBmX21hcF9sb29rdXBfZWxlbSgpIGV4YWN0bHkuXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMTU5PXN0YXRpYyBpbnQgY2hlY2tfZmxhZ3Moc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsX29sZCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExNzItXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTE3MzovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTE3NC1zdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MTQ5ND1zdGF0aWMgbG9uZyBodGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE1MDAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTUwMTovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTUwMi1zdGF0aWMgbG9uZyBodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9MjMwPXN0YXRpYyBzaXplX3QgbG9uZ2VzdF9wcmVmaXhfbWF0Y2goY29uc3Qgc3RydWN0IGxwbV90cmllICp0cmllLFxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTIzNi1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6MjM3Oi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMjM4LXN0YXRpYyB2b2lkICp0cmllX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKl9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9MzExPXN0YXRpYyBpbnQgdHJpZV9jaGVja19hZGRfZWxlbShzdHJ1Y3QgbHBtX3RyaWUgKnRyaWUsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy0zMjAtXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjMyMTovKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTMyMi1zdGF0aWMgbG9uZyB0cmllX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNDU1LVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo0NTY6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy00NTctc3RhdGljIGxvbmcgdHJpZV9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpfa2V5KVxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9MTI3PXN0YXRpYyBsb25nIF9fc3RhY2tfbWFwX2dldChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgYm9vbCBkZWxldGUpXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xNjAtXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM6MTYxOi8qIENhbGxlZCBmcm9tIHN5c2NhbGwgb3IgZnJvbSBlQlBGIHByb2dyYW0gKi9cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xNjItc3RhdGljIGxvbmcgcXVldWVfbWFwX3BlZWtfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG4tLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTE2Ni1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzoxNjc6LyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTE2OC1zdGF0aWMgbG9uZyBzdGFja19tYXBfcGVla19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAxOjE3OjIzLjc1OTAwNTk2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTAxOTU3Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgQXJyYXkgTWFwIExhenkgUGFnZSBGYXVsdGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgZW5hYmxpbmcgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcyB0aGF0IGFyZSBgbW1hcGAtZWQgaW50byB1c2VyIHNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY2hhbmdlLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgdGhhdCB0aGUgQlBGIHN1YnN5c3RlbSwgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGlzIHRoZSBlbnRyeSBwb2ludC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBhcnJheW1hcC5jYCBhbmQgYHN5c2NhbGwuY2Agd2l0aGluIHRoZSBga2VybmVsL2JwZmAgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSBmb2N1c2VzIG15IGF0dGVudGlvbiBvbiB0aG9zZSBmaWxlcy4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYm90aCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvbmx5IGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHNldCwgbWVhbmluZyB0aGF0IGl0IGlzIHRoZSAqb25seSogcmVxdWlyZWQgY29uZmlnLlxuXG5Ob3csIGhvdyBkb2VzIHRoaXMgYWN0dWFsbHkgd29yaz8gVGhlIHBhdGNoIG1vZGlmaWVzIGBhcnJheV9tYXBfbW1hcGAgdG8gc2V0IHRoZSBgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QYCBmbGFncyBvbiB0aGUgdmlydHVhbCBtZW1vcnkgYXJlYSBhbmQgcmV0dXJuIDAsIGluc3RlYWQgb2YgZWFnZXJseSBtYXBwaW5nIHRoZSBtZW1vcnkuIENyaXRpY2FsbHksIGl0IHRoZW4gYWRkcyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGJwZl9tYXBfbW1hcF9mYXVsdGAgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzLiBUaGlzIHNpZ25hbHMgdGhlICpsYXp5KiBuYXR1cmUgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbi5cblxuVGhlIGtleSB0byB2ZXJpZnlpbmcgdGhpcyBpcyB0aGUgc2VsZnRlc3QsIGBiZW5jaF9hcnJheW1hcF9tbWFwLmNgLiBUaGlzIGlzIGNydWNpYWwg4oCTIGl0IGNvbmZpcm1zIHRoZSBwYXRoIGlzIHZhbGlkISBUaGUgdGVzdCBjcmVhdGVzIGEgQlBGIGFycmF5IG1hcCB1c2luZyBgQlBGX0ZfTU1BUEFCTEVgLCBtYXBzIGl0IHVzaW5nIGBtbWFwYCwgYW5kIHN1YnNlcXVlbnRseSBhY2Nlc3NlcyB0aGUgbWVtb3J5LCBlZmZlY3RpdmVseSB0cmlnZ2VyaW5nIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGhpZ2hsaWdodHMgdGhlIHByYWN0aWNhbCByZWFjaGFiaWxpdHkgYW5kIHRoZSBpbnRlbmRlZCBmdW5jdGlvbiBvZiB0aGUgcGF0Y2guXG5cbkkndmUgZGV0ZXJtaW5lZCB0aGF0IHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYGJwZl9tYXBfbW1hcF9mYXVsdGAsIGFuZCBgYXJyYXlfbWFwX21tYXBgLiBUaGUgYGFycmF5X21hcF9tbWFwYCBmdW5jdGlvbiBpcyBpbXBhY3RlZCBieSBhIHNtYWxsIGNoYW5nZS5cblxuSSdtIGNvbWZvcnRhYmxlIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcm92aWRlcyBsYXp5IHBhZ2UgZmF1bHRpbmcgZm9yIEJQRiBhcnJheSBtYXBzLiBHaXZlbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCByZWFjaGFiaWxpdHkgdmlhIHVzZXIgc3BhY2UgYW5kIHdpdGggdGhpcyBzZWxmdGVzdCwgSSdtIG1hcmtpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgb2J2aW91c2x5IGBCUEZfU1lTQ0FMTGAgYW5kIEkgYW0gZ29pbmcgdG8gbG9nIHRoZSBmdW5jdGlvbiBzeW1ib2xzIHRvIHRoZSB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ3NSwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDE6MTc6MzIuODYwOTY1NzQ4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDMxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFycmF5X21hcF9tbWFwX2ZhdWx0XCIsXG4gICAgXCJicGZfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImFycmF5X21hcF9tbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBsYXp5IHBhZ2UgZmF1bHRpbmcgZm9yIEJQRiBhcnJheSBtYXBzIG1hcHBlZCB0byB1c2VyIHNwYWNlLiBJdCBtb2RpZmllcyBgYXJyYXlfbWFwX21tYXBgIHRvIG5vdCBlYWdlcmx5IG1hcCB0aGUgbWVtb3J5IGFuZCBhZGRzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgYW5kIGBicGZfbWFwX21tYXBfZmF1bHRgIHRvIGhhbmRsZSBwYWdlIGZhdWx0cyBvbiBkZW1hbmQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBtbWFwLWluZyBhIEJQRiBhcnJheSBtYXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcnJheV9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9tbWFwX2ZhdWx0XCIsXG4gICAgXCJhcnJheV9tYXBfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbGF6eSBwYWdlIGZhdWx0aW5nIGZvciBCUEYgYXJyYXkgbWFwcyBtYXBwZWQgdG8gdXNlciBzcGFjZS4gSXQgbW9kaWZpZXMgYGFycmF5X21hcF9tbWFwYCB0byBub3QgZWFnZXJseSBtYXAgdGhlIG1lbW9yeSBhbmQgYWRkcyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYnBmX21hcF9tbWFwX2ZhdWx0YCB0byBoYW5kbGUgcGFnZSBmYXVsdHMgb24gZGVtYW5kLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBieSBjcmVhdGluZyBhbmQgbW1hcC1pbmcgYSBCUEYgYXJyYXkgbWFwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowd2sw4[1] Phase: Succeeded StartedAt: 2026-07-23 01:17:56 +0000 UTC FinishedAt: 2026-07-23 01:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 01:17:56 +0000 UTC FinishedAt: 2026-07-23 01:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2] Phase: Succeeded StartedAt: 2026-07-23 01:17:56 +0000 UTC FinishedAt: 2026-07-23 05:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 01:17:56 +0000 UTC FinishedAt: 2026-07-23 05:34:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","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-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 01:17:56 +0000 UTC FinishedAt: 2026-07-23 01:18:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 01:17:56 +0000 UTC FinishedAt: 2026-07-23 01:18:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd2sw4/series-workflowd2sw4-convert-artifact-2173007284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 01:18:16 +0000 UTC FinishedAt: 2026-07-23 01:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 01:18:16 +0000 UTC FinishedAt: 2026-07-23 01:52:35 +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:*c1c3a2eb-4306-4b35-ad38-694a0f196e08,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-workflowd2sw4/series-workflowd2sw4-convert-artifact-2173007284/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": "afb89d20-915f-4be3-9190-7874210ea791", "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-workflowd2sw4/series-workflowd2sw4-build-action-3723045810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 01:18:16 +0000 UTC FinishedAt: 2026-07-23 01:52:14 +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:*c1c3a2eb-4306-4b35-ad38-694a0f196e08,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-workflowd2sw4/series-workflowd2sw4-convert-artifact-2173007284/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": "afb89d20-915f-4be3-9190-7874210ea791", "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-workflowd2sw4/series-workflowd2sw4-build-action-3723045810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-23 01:52:35 +0000 UTC FinishedAt: 2026-07-23 01:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-23 01:52:35 +0000 UTC FinishedAt: 2026-07-23 01:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-23 01:52:35 +0000 UTC FinishedAt: 2026-07-23 01:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-23 01:52:35 +0000 UTC FinishedAt: 2026-07-23 01:52:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","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-workflowd2sw4/series-workflowd2sw4-convert-artifact-1058153075/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-23 01:52:55 +0000 UTC FinishedAt: 2026-07-23 01:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-23 01:52:55 +0000 UTC FinishedAt: 2026-07-23 01:54:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afb89d20-915f-4be3-9190-7874210ea791,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-workflowd2sw4/series-workflowd2sw4-build-action-3723045810/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-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-23 01:55:03 +0000 UTC FinishedAt: 2026-07-23 01:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-23 01:55:03 +0000 UTC FinishedAt: 2026-07-23 01:55:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-23 01:55:03 +0000 UTC FinishedAt: 2026-07-23 02:31:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-23 01:55:03 +0000 UTC FinishedAt: 2026-07-23 02:31:23 +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:*c1c3a2eb-4306-4b35-ad38-694a0f196e08,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-workflowd2sw4/series-workflowd2sw4-convert-artifact-1058153075/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": "c03e81e6-8d16-427d-ba9b-c74af029cb91", "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-workflowd2sw4/series-workflowd2sw4-build-action-2755189287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-23 01:55:03 +0000 UTC FinishedAt: 2026-07-23 02:28:11 +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:*c1c3a2eb-4306-4b35-ad38-694a0f196e08,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-workflowd2sw4/series-workflowd2sw4-convert-artifact-1058153075/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": "c03e81e6-8d16-427d-ba9b-c74af029cb91", "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-workflowd2sw4/series-workflowd2sw4-build-action-2755189287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-23 02:31:23 +0000 UTC FinishedAt: 2026-07-23 02:31:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-23 02:31:23 +0000 UTC FinishedAt: 2026-07-23 02:31:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-23 02:31:23 +0000 UTC FinishedAt: 2026-07-23 02:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-23 02:31:23 +0000 UTC FinishedAt: 2026-07-23 02:33:16 +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:*c03e81e6-8d16-427d-ba9b-c74af029cb91,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-workflowd2sw4/series-workflowd2sw4-build-action-2755189287/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-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 02:33:26 +0000 UTC FinishedAt: 2026-07-23 05:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 02:33:26 +0000 UTC FinishedAt: 2026-07-23 05:34:47 +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":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"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:*afb89d20-915f-4be3-9190-7874210ea791,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c03e81e6-8d16-427d-ba9b-c74af029cb91,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-workflowd2sw4/series-workflowd2sw4-build-action-3723045810/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-workflowd2sw4/series-workflowd2sw4-build-action-2755189287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 02:33:26 +0000 UTC FinishedAt: 2026-07-23 02:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 02:33:26 +0000 UTC FinishedAt: 2026-07-23 02:33:33 +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":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"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-workflowd2sw4/series-workflowd2sw4-convert-artifact-3056804460/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 02:33:26 +0000 UTC FinishedAt: 2026-07-23 02:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 02:33:26 +0000 UTC FinishedAt: 2026-07-23 02:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-23 02:33:26 +0000 UTC FinishedAt: 2026-07-23 02:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 02:33:36 +0000 UTC FinishedAt: 2026-07-23 05:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2sw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","bpf_map_mmap_fault","array_map_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"4c8e9341-f04f-425f-92de-c71097a64fae","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 02:33:36 +0000 UTC FinishedAt: 2026-07-23 05:34:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afb89d20-915f-4be3-9190-7874210ea791,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c03e81e6-8d16-427d-ba9b-c74af029cb91,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-workflowd2sw4/series-workflowd2sw4-build-action-3723045810/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-workflowd2sw4/series-workflowd2sw4-build-action-2755189287/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-workflowd2sw4/series-workflowd2sw4-convert-artifact-3056804460/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,}