Name: series-workflowktxvk Phase: Succeeded StartedAt: 2026-06-25 01:38:19 +0000 UTC FinishedAt: 2026-06-25 02:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[0] Phase: Succeeded StartedAt: 2026-06-25 01:38:19 +0000 UTC FinishedAt: 2026-06-25 01:48:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 01:38:19 +0000 UTC FinishedAt: 2026-06-25 01:48:14 +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": "52738352a6f29279e15285fcb7b50241ef867e27", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "SUSPEND", "CPU_IDLE" ], "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": "52738352a6f29279e15285fcb7b50241ef867e27", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "SUSPEND", "CPU_IDLE" ], "series_id": "50eafa02-8c4a-4160-a274-dac74e5dee8e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_aia_enable", "kvm_riscv_aia_disable", "kvm_riscv_cpu_pm_notifier" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNjc1NDgxNTNkZWVlODAzMjNhMzI1ZWIyNTg3YzNhYmYyZTY5ZWU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMDE6NDY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxuaW5kZXggYzY3ZWM1YWMwYTE0NmIuLjdjMWMzMjUwNTk4ZmIwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXG5AQCAtMTY1LDggJiM0MzsxNjUsMTkgQEAgaW50IGt2bV9yaXNjdl9haWFfYWxsb2NfaGdlaShpbnQgY3B1LCBzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyLFxuIFx0XHRcdCAgICAgdm9pZCBfX2lvbWVtICoqaGdlaV92YSwgcGh5c19hZGRyX3QgKmhnZWlfcGEpO1xuIHZvaWQga3ZtX3Jpc2N2X2FpYV9mcmVlX2hnZWkoaW50IGNwdSwgaW50IGhnZWkpO1xuIFxuLXZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCk7XG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZCk7XG4mIzQzOy8qKlxuJiM0MzsgKiBrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpIC0gRW5hYmxlIEFJQSBzdXBwb3J0IG9uIGN1cnJlbnQgQ1BVXG4mIzQzOyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGluaXQgKENQVSBob3RwbHVnL21vZHVsZSBsb2FkKSxcbiYjNDM7ICogICAgICAgICAgICAgICAgZmFsc2UgPSBsaWdodHdlaWdodCBDU1IgcmVzdG9yZSAoQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSByZXN1bWUpXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKSAtIERpc2FibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcbiYjNDM7ICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgY2xlYW51cCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGV4aXQpLFxuJiM0MzsgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiBzYXZlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIGVudHJ5KVxuJiM0MzsgKi9cbiYjNDM7dm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoYm9vbCBmdWxsX2NsZWFudXApO1xuIGludCBrdm1fcmlzY3ZfYWlhX2luaXQodm9pZCk7XG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2V4aXQodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuaW5kZXggYmFmYjAwOWM1Y2U1NTkuLjgyODEyNDkzYWM2ODRhIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5AQCAtNTMyLDUwICYjNDM7NTMyLDYxIEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbiBcdGZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsIFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbi1cdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xuIFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRpbnQgYWlhX25yX2hnZWk7XG4gXG4gXHRpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdjID0gaW1zaWNfZ2V0X2dsb2JhbF9jb25maWcoKTtcbi1cdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cdTAwM2Vsb2NhbCkgOiBOVUxMO1xuIFx0aGdjdHJsID0gdGhpc19jcHVfcHRyKFx1MDAyNmFpYV9oZ2VpKTtcbiBcbi1cdC8qIEZpZ3VyZS1vdXQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUgKi9cbi1cdGNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpO1xuLVx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcbi1cdGNzcl93cml0ZShDU1JfSEdFSUUsIDApO1xuLVx0aWYgKGhnY3RybC1cdTAwM2Vucl9oZ2VpKVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaS0tO1xuJiM0MztcdGlmIChmdWxsX2NsZWFudXApIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xuJiM0MztcdFx0aW50IGFpYV9ucl9oZ2VpO1xuIFxuLVx0Lypcbi1cdCAqIE51bWJlciBvZiB1c2FibGUgcGVyLUhBUlQgSEdFSSBsaW5lcyBzaG91bGQgYmUgbWluaW11bSBvZlxuLVx0ICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLlxuLVx0ICovXG4tXHRpZiAobGMpXG4tXHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gbWluKCh1bG9uZyloZ2N0cmwtXHUwMDNlbnJfaGdlaSwgbGMtXHUwMDNlbnJfZ3Vlc3RfZmlsZXMpO1xuLVx0ZWxzZVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IDA7XG4mIzQzO1x0XHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XG4mIzQzO1x0XHRsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtXHUwMDNlbG9jYWwpIDogTlVMTDtcbiBcbi1cdC8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIElNU0lDIGd1ZXN0IGZpbGVzIGFjcm9zcyBhbGwgSEFSVHMgKi9cbi1cdGFpYV9ucl9oZ2VpID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTtcbi1cdGRvIHtcbi1cdFx0aWYgKGFpYV9ucl9oZ2VpIFx1MDAzYz0gaGdjdHJsLVx1MDAzZW5yX2hnZWkpXG4tXHRcdFx0YnJlYWs7XG4tXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSwgXHUwMDI2YWlhX25yX2hnZWksIGhnY3RybC1cdTAwM2Vucl9oZ2VpKSk7XG4mIzQzO1x0XHQvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovXG4mIzQzO1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcbiYjNDM7XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gZmxzX2xvbmcoY3NyX3JlYWQoQ1NSX0hHRUlFKSk7XG4mIzQzO1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAwKTtcbiYjNDM7XHRcdGlmIChoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWktLTtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0aWYgKCFoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcbi1cdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/IEdFTk1BU0tfVUxMKGhnY3RybC1cdTAwM2Vucl9oZ2VpLCAxKSA6IDA7XG4tXHRcdGhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCA9IHRydWU7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXG4mIzQzO1x0XHQgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChsYylcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC1cdTAwM2Vucl9oZ2VpLCBsYy1cdTAwM2Vucl9ndWVzdF9maWxlcyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBJTVNJQyBndWVzdCBmaWxlcyBhY3Jvc3MgYWxsIEhBUlRzICovXG4mIzQzO1x0XHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdGlmIChhaWFfbnJfaGdlaSBcdTAwM2M9IGhnY3RybC1cdTAwM2Vucl9oZ2VpKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWksIFx1MDAyNmFpYV9ucl9oZ2VpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBoZ2N0cmwtXHUwMDNlbnJfaGdlaSkpO1xuJiM0MztcbiYjNDM7XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/XG4mIzQzO1x0XHRcdFx0XHQgICAgICBHRU5NQVNLX1VMTChoZ2N0cmwtXHUwMDNlbnJfaGdlaSwgMSkgOlxuJiM0MztcdFx0XHRcdFx0ICAgICAgMDtcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgfmhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcCk7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuLVx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8xLCAweDApO1xuQEAgLTU4Nyw2NSAmIzQzOzU5OCw3MyBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8ySCwgMHgwKTtcbiAjZW5kaWZcbiBcbi1cdC8qIEVuYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXG4tXHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXG4tXHRcdFx0ICBpcnFfZ2V0X3RyaWdnZXJfdHlwZShoZ2VpX3BhcmVudF9pcnEpKTtcbi1cdGNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbiYjNDM7XHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4mIzQzO1x0XHQvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuJiM0MztcdFx0ZW5hYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLFxuJiM0MztcdFx0XHRcdCAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7XG4mIzQzO1x0XHRjc3Jfc2V0KENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEVuYWJsZSBJUlEgZmlsdGVyaW5nIGZvciBvdmVyZmxvdyBpbnRlcnJ1cHQgb25seSBpZiBzc2NvZnBtZiBpcyBwcmVzZW50ICovXG4gXHRpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSlcbiBcdFx0Y3NyX3NldChDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpO1xuIH1cbiBcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKVxuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cClcbiB7XG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsO1xuIFxuIFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRyZXR1cm47XG4tXHRoZ2N0cmwgPSBnZXRfY3B1X3B0cihcdTAwMjZhaWFfaGdlaSk7XG4gXG4gXHRpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSlcbiBcdFx0Y3NyX2NsZWFyKENTUl9IVklFTiwgQklUKElSUV9QTVVfT1ZGKSk7XG4tXHQvKiBEaXNhYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cbi1cdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xuLVx0ZGlzYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSk7XG4tXG4tXHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFxuLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuJiM0MztcdFx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXG4mIzQzO1x0XHRjc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbiYjNDM7XHRcdGRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpO1xuJiM0MztcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dmNwdSA9IGhnY3RybC1cdTAwM2Vvd25lcnNbaV07XG4tXHRcdGlmICghdmNwdSlcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBXZSByZWxlYXNlIGhnY3RybC1cdTAwM2Vsb2NrIGJlZm9yZSBub3RpZnlpbmcgSU1TSUNcbi1cdFx0ICogc28gdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy5cbi1cdFx0ICovXG4tXHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuJiM0MztcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcbiBcbi1cdFx0LyogTm90aWZ5IElNU0lDICovXG4tXHRcdGt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpO1xuJiM0MztcdFx0aGdjdHJsID0gZ2V0X2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuJiM0MztcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4tXHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuLVx0XHQgKi9cbi1cdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuLVx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4tXHRcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dmNwdSA9IGhnY3RybC1cdTAwM2Vvd25lcnNbaV07XG4mIzQzO1x0XHRcdGlmICghdmNwdSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIHJlbGVhc2UgaGdjdHJsLVx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xuJiM0MztcdFx0XHQgKiBzbyB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vdGlmeSBJTVNJQyAqL1xuJiM0MztcdFx0XHRrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4mIzQzO1x0XHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuJiM0MztcdFx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4mIzQzO1x0XHRcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdH1cbiBcbi1cdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0cHV0X2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIFx0fVxuLVxuLVx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cbi1cdHB1dF9jcHVfcHRyKFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21haW4uYyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xuaW5kZXggMDkyNGM3NTEwMGEyZDAuLjQxZWY5MWVhMzkyMThjIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdV9wbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuQEAgLTMzLDE0ICYjNDM7MzQsOSBAQCBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBcbi1pbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuJiM0MzsvKiBJbml0aWFsaXplIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9ubGluZSBhbmQgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSAqL1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2VuYWJsZSh2b2lkKVxuIHtcbi1cdGludCByYztcbi1cbi1cdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XG4tXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbi1cbiBcdGNzcl93cml0ZShDU1JfSEVERUxFRywgMCk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xuIFxuQEAgLTQ4LDE2ICYjNDM7NDQsMTEgQEAgaW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiBcdGNzcl93cml0ZShDU1JfSENPVU5URVJFTiwgMHgwMik7XG4gXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVAsIDApO1xuLVxuLVx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoKTtcbi1cbi1cdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzOy8qIENsZWFyIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9mZmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSAqL1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2Rpc2FibGUodm9pZClcbiB7XG4tXHRrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKTtcbi1cbiBcdC8qXG4gXHQgKiBBZnRlciBjbGVhcmluZyB0aGUgaGlkZWxlZyBDU1IsIHRoZSBob3N0IGtlcm5lbCB3aWxsIHJlY2VpdmVcbiBcdCAqIHNwdXJpb3VzIGludGVycnVwdHMgaWYgaHZpcCBDU1IgaGFzIHBlbmRpbmcgaW50ZXJydXB0cyBhbmQgdGhlXG5AQCAtNjgsMTAgJiM0Mzs1OSw2MCBAQCB2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVAsIDApO1xuIFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcbiBcdGNzcl93cml0ZShDU1JfSElERUxFRywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmM7XG4gXG4mIzQzO1x0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XG4mIzQzO1x0a3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSk7XG4mIzQzO1x0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XG4gXHRrdm1fcmlzY3ZfbmFjbF9kaXNhYmxlKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSYjMzk7c1xuJiM0MztcdCAqIHN5c2NvcmUgb3BzIHdpbGwgaGFuZGxlIHRoZSBzdGF0ZSBkdXJpbmcgc3lzdGVtIHN1c3BlbmQpLFxuJiM0MztcdCAqIGlnbm9yZSBDUFVfUE0gZXZlbnRzIHdoZW4gYSBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUgaXMgaW5cbiYjNDM7XHQgKiBwcm9ncmVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9TVVNQRU5EKVxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNtZCkge1xuJiM0MztcdGNhc2UgQ1BVX1BNX0VYSVQ6XG4mIzQzO1x0XHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xuJiM0MztcdFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpO1xuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XHRjYXNlIENQVV9QTV9FTlRFUjpcbiYjNDM7XHRcdGt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSk7XG4mIzQzO1x0XHRrdm1fcmlzY3ZfY3NyX2Rpc2FibGUoKTtcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfT0s7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9yaXNjdl9jcHVfcG1fbmIgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdGVhcmRvd24odm9pZClcbiB7XG4gXHRrdm1fcmlzY3ZfYWlhX2V4aXQoKTtcbkBAIC0xNzIsMjIgJiM0MzsyMTMsMzYgQEAgc3RhdGljIGludCBfX2luaXQgcmlzY3Zfa3ZtX2luaXQodm9pZClcbiBcbiBcdGt2bV9yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcygpO1xuIFxuLVx0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuLVx0aWYgKHJjKSB7XG4tXHRcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xuLVx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0LyogUmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyIGZvciBDUFUgaWRsZSBub24tcmV0ZW50aW9uIHN0YXRlcyAqL1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKSB7XG4mIzQzO1x0XHRyYyA9IGNwdV9wbV9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRrdm1fZXJyKFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBDUFUgUE0gbm90aWZpZXI6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3RlYXJkb3duO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4tXHRcdGt2bV9pbmZvKFwmIzM0O0FJQSBhdmFpbGFibGUgd2l0aCAlZCBndWVzdCBleHRlcm5hbCBpbnRlcnJ1cHRzXFxuXCYjMzQ7LFxuLVx0XHRcdCBhdG9taWNfcmVhZChcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpKTtcbiYjNDM7XHRyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9jcHVfcG07XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl91bnJlZ2lzdGVyX2NwdV9wbTpcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcbiYjNDM7XHRcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xuJiM0MztlcnJfdGVhcmRvd246XG4mIzQzO1x0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuIH1cbiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHJpc2N2X2t2bV9leGl0KHZvaWQpXG4ge1xuJiM0MztcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXG4mIzQzO1x0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbiYjNDM7XG4gXHRrdm1fZXhpdCgpO1xuIFxuIFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1NVU1BFTkQmIzM0OywKICAgICYjMzQ7Q1BVX0lETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIEtWTSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIHN1cHBvcnQgdG8gaGFuZGxlIENQVSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGVzLiBJdCBpbnRyb2R1Y2VzIGEgQ1BVIFBNIG5vdGlmaWVyIHRoYXQgY2FsbHMgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAgd2l0aCBhIG5ldyBgZnVsbF9jbGVhbnVwYCBib29sZWFuIHBhcmFtZXRlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgYW5kIEtWTSBpbml0aWFsaXphdGlvbi90ZWFyZG93bi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzY3NTQ4MTUzZGVlZTgwMzIzYTMyNWViMjU4N2MzYWJmMmU2OWVlOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDAxOjQ2OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaAppbmRleCBjNjdlYzVhYzBhMTQ2Yi4uN2MxYzMyNTA1OThmYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oCkBAIC0xNjUsOCAmIzQzOzE2NSwxOSBAQCBpbnQga3ZtX3Jpc2N2X2FpYV9hbGxvY19oZ2VpKGludCBjcHUsIHN0cnVjdCBrdm1fdmNwdSAqb3duZXIsCiAJCQkgICAgIHZvaWQgX19pb21lbSAqKmhnZWlfdmEsIHBoeXNfYWRkcl90ICpoZ2VpX3BhKTsKIHZvaWQga3ZtX3Jpc2N2X2FpYV9mcmVlX2hnZWkoaW50IGNwdSwgaW50IGhnZWkpOwogCi12b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpOwotdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZCk7CiYjNDM7LyoqCiYjNDM7ICoga3ZtX3Jpc2N2X2FpYV9lbmFibGUoKSAtIEVuYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVQomIzQzOyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGluaXQgKENQVSBob3RwbHVnL21vZHVsZSBsb2FkKSwKJiM0MzsgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiByZXN0b3JlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSkKJiM0MzsgKi8KJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKSAtIERpc2FibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFUKJiM0MzsgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBjbGVhbnVwIChDUFUgaG90cGx1Zy9tb2R1bGUgZXhpdCksCiYjNDM7ICogICAgICAgICAgICAgICAgZmFsc2UgPSBsaWdodHdlaWdodCBDU1Igc2F2ZSAoQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSkKJiM0MzsgKi8KJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cCk7CiBpbnQga3ZtX3Jpc2N2X2FpYV9pbml0KHZvaWQpOwogdm9pZCBrdm1fcmlzY3ZfYWlhX2V4aXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmMKaW5kZXggYmFmYjAwOWM1Y2U1NTkuLjgyODEyNDkzYWM2ODRhIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9haWEuYwpAQCAtNTMyLDUwICYjNDM7NTMyLDYxIEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZCkKIAlmcmVlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLCAmYW1wO2FpYV9oZ2VpKTsKIH0KIAotdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKQomIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApCiB7Ci0JY29uc3Qgc3RydWN0IGltc2ljX2dsb2JhbF9jb25maWcgKmdjOwotCWNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjOwogCXN0cnVjdCBhaWFfaGdlaV9jb250cm9sICpoZ2N0cmw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgYWlhX25yX2hnZWk7CiAKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybjsKIAotCWdjID0gaW1zaWNfZ2V0X2dsb2JhbF9jb25maWcoKTsKLQlsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtJmd0O2xvY2FsKSA6IE5VTEw7CiAJaGdjdHJsID0gdGhpc19jcHVfcHRyKCZhbXA7YWlhX2hnZWkpOwogCi0JLyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqLwotCWNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpOwotCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpOwotCWNzcl93cml0ZShDU1JfSEdFSUUsIDApOwotCWlmIChoZ2N0cmwtJmd0O25yX2hnZWkpCi0JCWhnY3RybC0mZ3Q7bnJfaGdlaS0tOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaW1zaWNfZ2xvYmFsX2NvbmZpZyAqZ2M7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaW1zaWNfbG9jYWxfY29uZmlnICpsYzsKJiM0MzsJCWludCBhaWFfbnJfaGdlaTsKIAotCS8qCi0JICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mCi0JICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLgotCSAqLwotCWlmIChsYykKLQkJaGdjdHJsLSZndDtucl9oZ2VpID0gbWluKCh1bG9uZyloZ2N0cmwtJmd0O25yX2hnZWksIGxjLSZndDtucl9ndWVzdF9maWxlcyk7Ci0JZWxzZQotCQloZ2N0cmwtJmd0O25yX2hnZWkgPSAwOwomIzQzOwkJZ2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpOwomIzQzOwkJbGMgPSAoZ2MpID8gdGhpc19jcHVfcHRyKGdjLSZndDtsb2NhbCkgOiBOVUxMOwogCi0JLyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqLwotCWFpYV9ucl9oZ2VpID0gYXRvbWljX3JlYWQoJmFtcDtrdm1fcmlzY3ZfYWlhX25yX2hnZWkpOwotCWRvIHsKLQkJaWYgKGFpYV9ucl9oZ2VpICZsdDs9IGhnY3RybC0mZ3Q7bnJfaGdlaSkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoJmFtcDtrdm1fcmlzY3ZfYWlhX25yX2hnZWksICZhbXA7YWlhX25yX2hnZWksIGhnY3RybC0mZ3Q7bnJfaGdlaSkpOwomIzQzOwkJLyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqLwomIzQzOwkJY3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7CiYjNDM7CQloZ2N0cmwtJmd0O25yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTsKJiM0MzsJCWNzcl93cml0ZShDU1JfSEdFSUUsIDApOwomIzQzOwkJaWYgKGhnY3RybC0mZ3Q7bnJfaGdlaSkKJiM0MzsJCQloZ2N0cmwtJmd0O25yX2hnZWktLTsKIAotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwotCWlmICghaGdjdHJsLSZndDtmcmVlX2JpdG1hcF9pbml0aWFsaXplZCkgewotCQloZ2N0cmwtJmd0O2ZyZWVfYml0bWFwID0gKGhnY3RybC0mZ3Q7bnJfaGdlaSkgPyBHRU5NQVNLX1VMTChoZ2N0cmwtJmd0O25yX2hnZWksIDEpIDogMDsKLQkJaGdjdHJsLSZndDtmcmVlX2JpdG1hcF9pbml0aWFsaXplZCA9IHRydWU7CiYjNDM7CQkvKgomIzQzOwkJICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mCiYjNDM7CQkgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChsYykKJiM0MzsJCQloZ2N0cmwtJmd0O25yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC0mZ3Q7bnJfaGdlaSwgbGMtJmd0O25yX2d1ZXN0X2ZpbGVzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQloZ2N0cmwtJmd0O25yX2hnZWkgPSAwOwomIzQzOwomIzQzOwkJLyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqLwomIzQzOwkJYWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZCgmYW1wO2t2bV9yaXNjdl9haWFfbnJfaGdlaSk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJaWYgKGFpYV9ucl9oZ2VpICZsdDs9IGhnY3RybC0mZ3Q7bnJfaGdlaSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKCZhbXA7a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCAmYW1wO2FpYV9ucl9oZ2VpLAomIzQzOwkJCQkJICAgICBoZ2N0cmwtJmd0O25yX2hnZWkpKTsKJiM0MzsKJiM0MzsJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKCFoZ2N0cmwtJmd0O2ZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7CiYjNDM7CQkJaGdjdHJsLSZndDtmcmVlX2JpdG1hcCA9IChoZ2N0cmwtJmd0O25yX2hnZWkpID8KJiM0MzsJCQkJCSAgICAgIEdFTk1BU0tfVUxMKGhnY3RybC0mZ3Q7bnJfaGdlaSwgMSkgOgomIzQzOwkJCQkJICAgICAgMDsKJiM0MzsJCQloZ2N0cmwtJmd0O2ZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWNzcl93cml0ZShDU1JfSEdFSUUsIH5oZ2N0cmwtJmd0O2ZyZWVfYml0bWFwKTsKJiM0MzsJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiAJfQotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiAKIAljc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpOwogCWNzcl93cml0ZShDU1JfSFZJUFJJTzEsIDB4MCk7CkBAIC01ODcsNjUgJiM0Mzs1OTgsNzMgQEAgdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKQogCWNzcl93cml0ZShDU1JfSFZJUFJJTzJILCAweDApOwogI2VuZGlmCiAKLQkvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqLwotCWVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSwKLQkJCSAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7Ci0JY3NyX3NldChDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKSB7CiYjNDM7CQkvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqLwomIzQzOwkJZW5hYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLAomIzQzOwkJCQkgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpOwomIzQzOwkJY3NyX3NldChDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpOwomIzQzOwl9CiYjNDM7CiAJLyogRW5hYmxlIElSUSBmaWx0ZXJpbmcgZm9yIG92ZXJmbG93IGludGVycnVwdCBvbmx5IGlmIHNzY29mcG1mIGlzIHByZXNlbnQgKi8KIAlpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSkKIAkJY3NyX3NldChDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpOwogfQogCi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKQomIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGJvb2wgZnVsbF9jbGVhbnVwKQogewogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBhaWFfaGdlaV9jb250cm9sICpoZ2N0cmw7CiAKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybjsKLQloZ2N0cmwgPSBnZXRfY3B1X3B0cigmYW1wO2FpYV9oZ2VpKTsKIAogCWlmIChfX3Jpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFJJU0NWX0lTQV9FWFRfU1NDT0ZQTUYpKQogCQljc3JfY2xlYXIoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTsKLQkvKiBEaXNhYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi8KLQljc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTsKLQlkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTsKLQotCWNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKGZ1bGxfY2xlYW51cCkgewomIzQzOwkJLyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovCiYjNDM7CQljc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTsKJiM0MzsJCWRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpOwomIzQzOwl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDs9IGhnY3RybC0mZ3Q7bnJfaGdlaTsgaSYjNDM7JiM0MzspIHsKLQkJdmNwdSA9IGhnY3RybC0mZ3Q7b3duZXJzW2ldOwotCQlpZiAoIXZjcHUpCi0JCQljb250aW51ZTsKJiM0MzsJY3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTsKIAotCQkvKgotCQkgKiBXZSByZWxlYXNlIGhnY3RybC0mZ3Q7bG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDCi0JCSAqIHNvIHRoYXQgd2UgZG9uJiMzOTt0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuCi0JCSAqLwotCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKSB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CQlzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsOwogCi0JCS8qIE5vdGlmeSBJTVNJQyAqLwotCQlrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTsKJiM0MzsJCWhnY3RybCA9IGdldF9jcHVfcHRyKCZhbXA7YWlhX2hnZWkpOwomIzQzOwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiAKLQkJLyoKLQkJICogV2FrZXVwIFZDUFUgaWYgaXQgd2FzIGJsb2NrZWQgc28gdGhhdCBpdCBjYW4KLQkJICogcnVuIG9uIG90aGVyIEhBUlRzCi0JCSAqLwotCQlpZiAoY3NyX3JlYWQoQ1NSX0hHRUlFKSAmYW1wOyBCSVQoaSkpIHsKLQkJCWNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7Ci0JCQlrdm1fdmNwdV9raWNrKHZjcHUpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7PSBoZ2N0cmwtJmd0O25yX2hnZWk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdmNwdSA9IGhnY3RybC0mZ3Q7b3duZXJzW2ldOwomIzQzOwkJCWlmICghdmNwdSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXZSByZWxlYXNlIGhnY3RybC0mZ3Q7bG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDCiYjNDM7CQkJICogc28gdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkJCS8qIE5vdGlmeSBJTVNJQyAqLwomIzQzOwkJCWt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogV2FrZXVwIFZDUFUgaWYgaXQgd2FzIGJsb2NrZWQgc28gdGhhdCBpdCBjYW4KJiM0MzsJCQkgKiBydW4gb24gb3RoZXIgSEFSVHMKJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoY3NyX3JlYWQoQ1NSX0hHRUlFKSAmYW1wOyBCSVQoaSkpIHsKJiM0MzsJCQkJY3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTsKJiM0MzsJCQkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiAJCX0KIAotCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlwdXRfY3B1X3B0cigmYW1wO2FpYV9oZ2VpKTsKIAl9Ci0KLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwotCi0JcHV0X2NwdV9wdHIoJmFtcDthaWFfaGdlaSk7CiB9CiAKIGludCBrdm1fcmlzY3ZfYWlhX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21haW4uYyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uYwppbmRleCAwOTI0Yzc1MTAwYTJkMC4uNDFlZjkxZWEzOTIxOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tYWluLmMKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1X3BtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2NwdWZlYXR1cmUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbmFjbC5oJmd0OwpAQCAtMzMsMTQgJiM0MzszNCw5IEBAIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQomIzQzOy8qIEluaXRpYWxpemUgaHlwZXJ2aXNvciBDU1JzIC0gY2FsbGVkIGR1cmluZyBDUFUgb25saW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lICovCiYjNDM7c3RhdGljIHZvaWQga3ZtX3Jpc2N2X2Nzcl9lbmFibGUodm9pZCkKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IGt2bV9yaXNjdl9uYWNsX2VuYWJsZSgpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJY3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTsKIAljc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApOwogCkBAIC00OCwxNiAmIzQzOzQ0LDExIEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiAJY3NyX3dyaXRlKENTUl9IQ09VTlRFUkVOLCAweDAyKTsKIAogCWNzcl93cml0ZShDU1JfSFZJUCwgMCk7Ci0KLQlrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpOwotCi0JcmV0dXJuIDA7CiB9CiAKLXZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKJiM0MzsvKiBDbGVhciBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvZmZsaW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkgKi8KJiM0MztzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2Rpc2FibGUodm9pZCkKIHsKLQlrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKTsKLQogCS8qCiAJICogQWZ0ZXIgY2xlYXJpbmcgdGhlIGhpZGVsZWcgQ1NSLCB0aGUgaG9zdCBrZXJuZWwgd2lsbCByZWNlaXZlCiAJICogc3B1cmlvdXMgaW50ZXJydXB0cyBpZiBodmlwIENTUiBoYXMgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCB0aGUKQEAgLTY4LDEwICYjNDM7NTksNjAgQEAgdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQogCWNzcl93cml0ZShDU1JfSFZJUCwgMCk7CiAJY3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTsKIAljc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApOwomIzQzO30KJiM0MzsKJiM0MztpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQomIzQzO3sKJiM0MzsJaW50IHJjOwogCiYjNDM7CXJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJa3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTsKJiM0MzsJa3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSk7CiYjNDM7CWt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpOwogCWt2bV9yaXNjdl9uYWNsX2Rpc2FibGUoKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSYjMzk7cwomIzQzOwkgKiBzeXNjb3JlIG9wcyB3aWxsIGhhbmRsZSB0aGUgc3RhdGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kKSwKJiM0MzsJICogaWdub3JlIENQVV9QTSBldmVudHMgd2hlbiBhIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSBpcyBpbgomIzQzOwkgKiBwcm9ncmVzcy4KJiM0MzsJICovCiYjNDM7CWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1NVU1BFTkQpCiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoY21kKSB7CiYjNDM7CWNhc2UgQ1BVX1BNX0VYSVQ6CiYjNDM7CQlrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpOwomIzQzOwkJa3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJY2FzZSBDUFVfUE1fRU5URVI6CiYjNDM7CQlrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoZmFsc2UpOwomIzQzOwkJa3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9yaXNjdl9jcHVfcG1fbmIgPSB7CiYjNDM7CS5ub3RpZmllcl9jYWxsID0ga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllciwKJiM0Mzt9OwomIzQzOwogc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3RlYXJkb3duKHZvaWQpCiB7CiAJa3ZtX3Jpc2N2X2FpYV9leGl0KCk7CkBAIC0xNzIsMjIgJiM0MzsyMTMsMzYgQEAgc3RhdGljIGludCBfX2luaXQgcmlzY3Zfa3ZtX2luaXQodm9pZCkKIAogCWt2bV9yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcygpOwogCi0JcmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpOwotCWlmIChyYykgewotCQlrdm1fcmlzY3ZfdGVhcmRvd24oKTsKLQkJcmV0dXJuIHJjOwomIzQzOwkvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKSB7CiYjNDM7CQlyYyA9IGNwdV9wbV9yZWdpc3Rlcl9ub3RpZmllcigmYW1wO2t2bV9yaXNjdl9jcHVfcG1fbmIpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJa3ZtX2VycigmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBDUFUgUE0gbm90aWZpZXI6ICVkXG4mIzM0OywgcmMpOwomIzQzOwkJCWdvdG8gZXJyX3RlYXJkb3duOwomIzQzOwkJfQogCX0KIAotCWlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKQotCQlrdm1faW5mbygmIzM0O0FJQSBhdmFpbGFibGUgd2l0aCAlZCBndWVzdCBleHRlcm5hbCBpbnRlcnJ1cHRzXG4mIzM0OywKLQkJCSBhdG9taWNfcmVhZCgmYW1wO2t2bV9yaXNjdl9haWFfbnJfaGdlaSkpOwomIzQzOwlyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZXJyX3VucmVnaXN0ZXJfY3B1X3BtOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3VucmVnaXN0ZXJfY3B1X3BtOgomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkKJiM0MzsJCWNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKCZhbXA7a3ZtX3Jpc2N2X2NwdV9wbV9uYik7CiYjNDM7ZXJyX3RlYXJkb3duOgomIzQzOwlrdm1fcmlzY3ZfdGVhcmRvd24oKTsKJiM0MzsJcmV0dXJuIHJjOwogfQogbW9kdWxlX2luaXQocmlzY3Zfa3ZtX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmlzY3Zfa3ZtX2V4aXQodm9pZCkKIHsKJiM0MzsJLyogVW5yZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpCiYjNDM7CQljcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcigmYW1wO2t2bV9yaXNjdl9jcHVfcG1fbmIpOwomIzQzOwogCWt2bV9leGl0KCk7CiAKIAlrdm1fcmlzY3ZfdGVhcmRvd24oKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gQUlBIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgUklTQy1WIEtWTSBBSUEgc3VwcG9ydCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIG1vZGlmaWNhdGlvbnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgYGJvb2wgZnVsbF9jbGVhbnVwYCBwYXJhbWV0ZXIgdG8gYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIEl0JiMzOTtzIGFsc28gaW50cm9kdWNpbmcgYSBDUFUgUE0gbm90aWZpZXIsIGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYCwgZGVzaWduZWQgdG8gaGFuZGxlIENQVSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGVzLiBUaGlzIG5vdGlmaWVyIGNhbGxzIHRoZSBBSUEgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25zLCBidXQgKndpdGhvdXQqIHRoZSBmdWxsIGNsZWFudXAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCByZWdpc3RlcnMgdGhlIG5vdGlmaWVyIG9ubHkgaWYgYENPTkZJR19DUFVfUE1gIGlzIGVuYWJsZWQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWw/JiMzNDsgQW5kIHRoZSBhbnN3ZXIgaXMsIHllcywgaXQmIzM5O3MgZnVuY3Rpb25hbDsgaXQmIzM5O3MgZGVmaW5pdGVseSBtb2RpZnlpbmcgS1ZNIFJJU0MtViBDUFUgcG93ZXIgbWFuYWdlbWVudCBoYW5kbGluZy4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGZvciBtZSwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLCBpcywgY2FuIHdlIGZ1enogdGhpcyBlZmZpY2llbnRseT8KClRoZSBvYnZpb3VzIHRyaWdnZXIgaXMgQ1BVIFBNIGV2ZW50cyDigJMgc3BlY2lmaWNhbGx5LCBDUFUgaWRsZSBub24tcmV0ZW50aW9uIHN0YXRlcy4gTm93LCBDUFUgUE0gZXZlbnRzIGFyZSBhIHBvdGVudGlhbCBmdXp6IHRhcmdldCwgSUYgdGhlIGZ1enplciBjYW4gdHJpZ2dlciBDUFUgaWRsZSBvciBzdXNwZW5kLiBTeXprYWxsZXIsIGluIGl0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGRvZXNuJiMzOTt0IHR5cGljYWxseSBkaXJlY3RseSB0cmlnZ2VyIHRob3NlIGV2ZW50czsgSSYjMzk7ZCBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaWtlIENQVSBob3RwbHVnIG9yIHN1c3BlbmQvcmVzdW1lIHdlcmUgZW5hYmxlZCwgd2hpY2ggKmNvdWxkKiBpbmRpcmVjdGx5IGV4ZXJjaXNlIHRoaXMgY29kZS4KCkhvd2V2ZXIsIGhlcmUmIzM5O3MgYSB3cmlua2xlOiBJIHNlZSB0aGF0IGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhcmUgYWxzbyBtb2RpZmllZCB0byBwYXNzIGB0cnVlYCB0byBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCEgVGhpcyBpcyBrZXkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgZHVyaW5nIENQVSBob3RwbHVnIG9yIG1vZHVsZSBsb2FkL3VubG9hZC4gVGhpcyBtZWFucyB3ZSBoYXZlIGEgY291cGxlIG9mIGRpZmZlcmVudCBwYXRocyB0byB0aGUgY29kZSwgYW5kIHRoaXMgaXMgZ29vZCBmdXp6aW5nIGZvZGRlciwgc2luY2Ugb25lIG1pZ2h0IGJlIGVhc2llciB0byB0cmlnZ2VyIHRoYW4gdGhlIG90aGVyIQoKU28sIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIGFyZSBjbGVhcmx5IGZ1bmN0aW9uYWwgYW5kIG5vdyB0YWtlIGEgZmxhZyB0byBjb250cm9sIGNsZWFudXAuIEkgbm93IGhhdmUgdHdvIHBvc3NpYmxlIGF2ZW51ZXMgZm9yIGZ1enppbmc6IENQVSBQTSBldmVudHMgKGlkbGUvc3VzcGVuZC9yZXN1bWUpIGFuZCBDUFUgaG90cGx1Zy9tb2R1bGUgbG9hZC4KClRvIGJlIHRob3JvdWdoLCBsZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSYjMzk7bSBleHBlY3RpbmcgYENPTkZJR19LVk1gLCBgQ09ORklHX1JJU0NWYCwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfQ1BVX1BNYCBmb3IgdGhlIG5vdGlmaWVyIHRvIGJlIGVuYWJsZWQuIFRoZW4sIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBjYWxsZ3JhcGggZm9yIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHRvIHNlZSBob3cgZXh0ZW5zaXZlbHkgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl9haWFfZW5hYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oPTE2Nj12b2lkIGt2bV9yaXNjdl9haWFfZnJlZV9oZ2VpKGludCBjcHUsIGludCBoZ2VpKTtcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNjgtLyoqXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaDoxNjk6ICoga3ZtX3Jpc2N2X2FpYV9lbmFibGUoKSAtIEVuYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmgtMTcwLSAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGluaXQgKENQVSBob3RwbHVnL21vZHVsZSBsb2FkKSxcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNzItICovXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaDoxNzM6dm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNzQtXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhLmM9NTI5PXN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWEuYy01MzQtXG5hcmNoL3Jpc2N2L2t2bS9haWEuYzo1MzU6dm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZShib29sIGZ1bGxfY2xlYW51cClcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTUzNi17XG4tLVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jPTY0PWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTcyLVx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcbmFyY2gvcmlzY3Yva3ZtL21haW4uYzo3MzpcdGt2bV9yaXNjdl9haWFfZW5hYmxlKHRydWUpO1xuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTc0LVxuLS1cbmFyY2gvcmlzY3Yva3ZtL21haW4uYz04NT1zdGF0aWMgaW50IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdilcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtOTgtXHRcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM6OTk6XHRcdGt2bV9yaXNjdl9haWFfZW5hYmxlKGZhbHNlKTtcbmFyY2gvcmlzY3Yva3ZtL21haW4uYy0xMDAtXHRcdHJldHVybiBOT1RJRllfT0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTS1SSVNDViBBSUEgRW5hYmxlL0Rpc2FibGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgIGlzIGRyYXdpbmcgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHNvbWUgcG93ZXIgbWFuYWdlbWVudCBob29rdXAsIGFuZCBjcml0aWNhbGx5LCBpdCYjMzk7cyBjYWxsaW5nIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZShmYWxzZSlgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGZhbHNlKWAuIFRoYXQgbWFrZXMgc2Vuc2UgLSBsaWtlbHkgZGlzYWJsaW5nIHRoZSBBSUEgd2hlbiB0aGUgQ1BVIGlzIGdvaW5nIGludG8gYSBsb3dlciBwb3dlciBzdGF0ZS4gVGhlbiwgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSB2aXJ0dWFsaXphdGlvbiBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbnMgKGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCkgdG8gdG9nZ2xlIEFJQSB3aXRoIHRoZSBgZnVsbF9jbGVhbnVwYCBmbGFnLCBjYWxsaW5nIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSlgLiBSaWdodC4gU28gd2UmIzM5O3ZlIGdvdCBhbiBBSUEgc3RhdGUgY2hhbmdlIHRpZWQgdG8gYm90aCBDUFUgcG93ZXIgbWFuYWdlbWVudCBhbmQgZ2VuZXJhbCB2aXJ0dWFsaXphdGlvbi4KCk5vdywgbXkgbWluZCBzdGFydHMgdG8gd2FuZGVyLiBJcyB0aGlzIGltcGxlbWVudGF0aW9uICpzb3VuZCo/IERvZXMgdGhlIGxvZ2ljIGluIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIGhhbmRsZSB0aGUgZGlmZmVyZW50IGNsZWFudXAvc2V0dXAgYXBwcm9wcmlhdGVseT8gU2VlbXMgbGlrZSB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIHRoZSBgZnVsbF9jbGVhbnVwYCBmbGFnLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhpcyBmdXp6LWFibGU/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgdG91Y2hlcyBzb21lIGtleSBjb21wb25lbnRzLCBhbmQgaGFzIHNldmVyYWwgZW50cnkgcG9pbnRzLgoKSSYjMzk7bGwgZmxhZyBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYW5kIGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYCBhcyBteSBmb2N1cyBzeW1ib2xzLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gdGFyZ2V0IGR1cmluZyBmdXp6aW5nLgoKQmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBJIHNob3VsZCBjaGVjayB0aGUgY29uZmlncy4gU2VlbXMgbGlrZSB0aGUgcGF0Y2ggYWRkcyBgS1ZNYCBhbmQgYENQVV9QTWAgYXMgdGhlIGVuYWJsZSBjb25maWcuIEkmIzM5O2xsIHRha2UgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgYENQVV9QTWAgaXMgYSB2YWxpZCBjb25maWcuIFRoYXQmIzM5O3MgYSBzYW5pdHkgY2hlY2sgSSB3YW50IHRvIGRvIGJlZm9yZSBJIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENQVV9QTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2Nza3kvS2NvbmZpZz0yMzI9Y2hvaWNlXG4tLVxuYXJjaC9jc2t5L0tjb25maWctMjM3LVxuYXJjaC9jc2t5L0tjb25maWc6MjM4OmNvbmZpZyBDUFVfUE1VX05PTkVcbmFyY2gvY3NreS9LY29uZmlnLTIzOS1cdGJvb2wgXCYjMzQ7Tm9uZVwmIzM0O1xuLS1cbmFyY2gvY3NreS9LY29uZmlnPTI0Nj1jaG9pY2Vcbi0tXG5hcmNoL2Nza3kvS2NvbmZpZy0yNDktXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTA6Y29uZmlnIENQVV9QTV9OT05FXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O05vbmVcJiMzNDtcbmFyY2gvY3NreS9LY29uZmlnLTI1Mi1cbmFyY2gvY3NreS9LY29uZmlnOjI1Mzpjb25maWcgQ1BVX1BNX1dBSVRcbmFyY2gvY3NreS9LY29uZmlnLTI1NC1cdGJvb2wgXCYjMzQ7d2FpdFwmIzM0O1xuYXJjaC9jc2t5L0tjb25maWctMjU1LVxuYXJjaC9jc2t5L0tjb25maWc6MjU2OmNvbmZpZyBDUFVfUE1fRE9aRVxuYXJjaC9jc2t5L0tjb25maWctMjU3LVx0Ym9vbCBcJiMzNDtkb3plXCYjMzQ7XG5hcmNoL2Nza3kvS2NvbmZpZy0yNTgtXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTk6Y29uZmlnIENQVV9QTV9TVE9QXG5hcmNoL2Nza3kvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O3N0b3BcJiMzNDtcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zODU9Y29uZmlnIFBNX0dFTkVSSUNfRE9NQUlOU19PRlxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTM4OC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OTpjb25maWcgQ1BVX1BNXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zOTAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBDb25maWd1cmF0aW9uIFNhbml0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiAqQ1BVX1BNKiDigJMgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QuICpLVk0qLi4uIHllcCwgdGhhdCByaW5ncyBhIGJlbGwgdG9vLCB0b3RhbGx5IGxlZ2l0LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgZ2VuZXJpYyBLVk0gaGVyZSwgb3IgaXMgdGhlcmUgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlPyBXZSBuZWVkIHRvIGJlIHByZWNpc2UsIG9yIHdlJiMzOTtyZSBnb2luZyB0byBoYXZlIGlzc3VlcyBsYXRlci4gR290dGEgZG91YmxlLWNoZWNrIGlmIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIFJJU0MtViBLVk0gY29uZmlndXJhdGlvbiBmbG9hdGluZyBhcm91bmQgc29tZXdoZXJlLiBJdOKAmXMgZXNzZW50aWFsIHRvIGF2b2lkIGFtYmlndWl0eSBoZXJlIGFuZCBtYWtlIHN1cmUgd2XigJlyZSB1c2luZyB0aGUgcmlnaHQgc2V0dGluZ3MgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWc9MTY9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xNy1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzoxODpjb25maWcgS1ZNXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzAtXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MzE6Y29uZmlnIEtWTV9NSVBTX0RFQlVHX0NPUDBfQ09VTlRFUlNcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7TWFpbnRhaW4gY291bnRlcnMgZm9yIENPUDAgYWNjZXNzZXNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI2OmNvbmZpZyBLVk1fQk9PSzNTX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNy1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyOTpjb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzAtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00NC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0NTpjb25maWcgS1ZNX0JPT0szU18zMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzMyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTI2OmNvbmZpZyBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjk6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIHRoZSBQOSBlbnRyeSBwb2ludFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0My1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgdGltaW5nIGZvciBoeXBlcnZpc29yIHJlYWwtbW9kZSBjb2RlIChmb3IgUE9XRVI4KVwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTYtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTU3OmNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7TmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTcxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QTVVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtIeXBlcnZpc29yIFBlcmYgZXZlbnRzIGZvciBLVk0gQm9vazNzLUhWXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4My1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9CT09LRV9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4NS1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODYtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg3OmNvbmZpZyBLVk1fRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O0RldGFpbGVkIGV4aXQgdGltaW5nXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5Ny1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTg6Y29uZmlnIEtWTV9FNTAwVjJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTktXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMi1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTM6Y29uZmlnIEtWTV9FNTAwTUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTQtXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9NUElDXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjMwLVx0Ym9vbCBcJiMzNDtLVk0gaW4ta2VybmVsIE1QSUMgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0MC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNDE6Y29uZmlnIEtWTV9YSUNTXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQyLVx0Ym9vbCBcJiMzNDtLVk0gaW4ta2VybmVsIFhJQ1MgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1MC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTE6Y29uZmlnIEtWTV9YSVZFXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUyLVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZz0yMj1zb3VyY2UgXCYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1wmIzM0O1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTIzLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDUtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDY6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDctXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTgzOT1zb3VyY2UgXCYjMzQ7YXJjaC94ODYveGVuL0tjb25maWdcJiMzNDtcbmFyY2gveDg2L0tjb25maWctODQwLVxuYXJjaC94ODYvS2NvbmZpZzo4NDE6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy04NDItXHRib29sIFwmIzM0O0tWTSBHdWVzdCBzdXBwb3J0IChpbmNsdWRpbmcga3ZtY2xvY2spXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4tLVxudmlydC9rdm0vS2NvbmZpZy0zLVxudmlydC9rdm0vS2NvbmZpZzo0OmNvbmZpZyBLVk1fQ09NTU9OXG52aXJ0L2t2bS9LY29uZmlnLTUtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTM5PWNvbmZpZyBORUVEX0tWTV9ESVJUWV9SSU5HX1dJVEhfQklUTUFQXG4tLVxudmlydC9rdm0vS2NvbmZpZy00Mi1cbnZpcnQva3ZtL0tjb25maWc6NDM6Y29uZmlnIEtWTV9NTUlPXG52aXJ0L2t2bS9LY29uZmlnLTQ0LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTQ1LVxudmlydC9rdm0vS2NvbmZpZzo0Njpjb25maWcgS1ZNX0FTWU5DX1BGXG52aXJ0L2t2bS9LY29uZmlnLTQ3LSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZy00OS0jIFRvZ2dsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaXJlY3Qgbm90aWZpY2F0aW9uIGFuZCBiYXRjaCBqb2JcbnZpcnQva3ZtL0tjb25maWc6NTA6Y29uZmlnIEtWTV9BU1lOQ19QRl9TWU5DXG52aXJ0L2t2bS9LY29uZmlnLTUxLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz01OT1jb25maWcgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuLS1cbnZpcnQva3ZtL0tjb25maWctNjEtXG52aXJ0L2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fVkZJT1xudmlydC9rdm0vS2NvbmZpZy02My0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9NjU9Y29uZmlnIEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xuLS1cbnZpcnQva3ZtL0tjb25maWctNjctXG52aXJ0L2t2bS9LY29uZmlnOjY4OmNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbnZpcnQva3ZtL0tjb25maWctNjktICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzAtXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9LY29uZmlnLTcyLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTczLVxudmlydC9rdm0vS2NvbmZpZzo3NDpjb25maWcgS1ZNX0NPTVBBVFxudmlydC9rdm0vS2NvbmZpZy03NS0gICAgICAgZGVmX2Jvb2wgeVxuLS1cbnZpcnQva3ZtL0tjb25maWc9OTE9Y29uZmlnIEhBVkVfS1ZNX1BNX05PVElGSUVSXG4tLVxudmlydC9rdm0vS2NvbmZpZy05My1cbnZpcnQva3ZtL0tjb25maWc6OTQ6Y29uZmlnIEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG52aXJ0L2t2bS9LY29uZmlnLTk1LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk2LVxudmlydC9rdm0vS2NvbmZpZzo5Nzpjb25maWcgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xudmlydC9rdm0vS2NvbmZpZy05OC0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy05OS1cbnZpcnQva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG52aXJ0L2t2bS9LY29uZmlnLTEwMS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy0xMDItXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MjQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIENQVSBQb3dlciBNYW5hZ2VtZW50IG9uIFJJU0MtVioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBLVk1gIGFuZCBgQ1BVX1BNYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGNhbiB3ZSBldmVuIGVuYWJsZSBgQ1BVX1BNYCBvbiBhIFJJU0MtViBzeXN0ZW0/JiMzNDsgSSBuZWVkIHRvIHZlcmlmeSBpdHMgYXZhaWxhYmlsaXR5LiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgYENQVV9QTWAgaW4gYGtlcm5lbC9wb3dlci9LY29uZmlnYC4gRXhjZWxsZW50LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCAmIzM0O0lzIGBDUFVfUE1gIGFjdHVhbGx5ICpzZWxlY3RlZCogYnkgYW55dGhpbmcgd2l0aGluIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlPyYjMzQ7IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IGFuZCBjb25maXJtIGl0cyBwcmVzZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IENQVV9QTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnPTI9Y29uZmlnIEFSTVxuLS1cbmFyY2gvYXJtL0tjb25maWctNTgtXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTXG5hcmNoL2FybS9LY29uZmlnOjU5Olx0c2VsZWN0IENQVV9QTSBpZiBTVVNQRU5EIHx8IENQVV9JRExFXG5hcmNoL2FybS9LY29uZmlnLTYwLVx0c2VsZWN0IERDQUNIRV9XT1JEX0FDQ0VTUyBpZiBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXG4tLVxuYXJjaC9hcm0vS2NvbmZpZz05OTQ9Y29uZmlnIEJMX1NXSVRDSEVSXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy05OTYtXHRkZXBlbmRzIG9uIEJJR19MSVRUTEUgXHUwMDI2XHUwMDI2IE1DUE0gXHUwMDI2XHUwMDI2IEhPVFBMVUdfQ1BVIFx1MDAyNlx1MDAyNiBBUk1fR0lDXG5hcmNoL2FybS9LY29uZmlnOjk5NzpcdHNlbGVjdCBDUFVfUE1cbmFyY2gvYXJtL0tjb25maWctOTk4LVx0aGVscFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xMTEtXHRzZWxlY3QgQ09NTU9OX0NMS1xuYXJjaC9hcm02NC9LY29uZmlnOjExMjpcdHNlbGVjdCBDUFVfUE0gaWYgKFNVU1BFTkQgfHwgQ1BVX0lETEUpXG5hcmNoL2FybTY0L0tjb25maWctMTEzLVx0c2VsZWN0IENQVU1BU0tfT0ZGU1RBQ0sgaWYgTlJfQ1BVUyBcdTAwM2UgMjU2XG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTg3LVx0c2VsZWN0IENPTU1PTl9DTEtcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODg6XHRzZWxlY3QgQ1BVX1BNXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTg5LVx0c2VsZWN0IEVEQUNfU1VQUE9SVFxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0zNS1cdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGUyBpZiAoVEFSR0VUX0lTQV9SRVYgXHUwMDNjIDEpXG5hcmNoL21pcHMvS2NvbmZpZzozNjpcdHNlbGVjdCBDUFVfUE0gaWYgQ1BVX0lETEUgfHwgU1VTUEVORFxuYXJjaC9taXBzL0tjb25maWctMzctXHRzZWxlY3QgR0VORVJJQ19BVE9NSUM2NCBpZiAhNjRCSVRcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTk4LVx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFSSVNDVl9JU0FfWkJCXG5hcmNoL3Jpc2N2L0tjb25maWc6OTk6XHRzZWxlY3QgQ1BVX1BNIGlmIENQVV9JRExFIHx8IEhJQkVSTkFUSU9OIHx8IFNVU1BFTkRcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMDAtXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjIxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBBSUEgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB0b3VjaGluZyBgQ1BVX1BNYCBvbiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgYXV0b21hdGljYWxseSBzZWxlY3RlZCBpZiBgQ1BVX0lETEVgLCBgSElCRVJOQVRJT05gLCBvciBgU1VTUEVORGAgYXJlIGVuYWJsZWQsIG1lYW5pbmcgaXQmIzM5O3MgYXZhaWxhYmxlIGFuZCAqdXNlZCogd2l0aGluIHRoaXMgY29udGV4dC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIHBhdGNoOyBpdCBtb2RpZmllcyBSSVNDLVYgS1ZNIEFJQSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgYSBDUFUgUE0gbm90aWZpZXIuIFRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAsIHdoZXJlIGJvb2xlYW4gcGFyYW1ldGVycyBub3cgZGljdGF0ZSBlaXRoZXIgYSBmdWxsIGNsZWFudXAgb3IgYSBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBXZSBoYXZlIGNsZWFyIGZ1bmN0aW9ucyB0byB0YXJnZXQuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5OiBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYW5kIGFsc28gdGhlIG5ldyBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAuCgpGb3IgY29uZmlndXJhdGlvbiwgSSYjMzk7bGwgbmVlZCBgS1ZNYCBhbmQgYENQVV9QTWAgZW5hYmxlZC4gU2luY2UgYFJJU0NWYCBpcyBpbXBsaWVkLCBJJiMzOTttIGdvb2QgdGhlcmUuIEhvd2V2ZXIsIHNpbmNlIGBDUFVfUE1gIGlzIHNlbGVjdGVkLCBub3QgcHJvbXB0ZWQsIGJ5IGBDUFVfSURMRWAsIGBISUJFUk5BVElPTmAsIG9yIGBTVVNQRU5EYCwgSSBtaWdodCBuZWVkIHRvIG1ha2Ugc3VyZSBvbmUgb2YgdGhvc2UgaXMgZW5hYmxlZCB0byBnZXQgaXQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSSBtYXkgbmVlZCB0byBzcGVjaWZpY2FsbHkgZW5hYmxlIGBDUFVfSURMRWAgb3IgYFNVU1BFTkRgIHRvIGVuc3VyZSBgQ1BVX1BNYCBpcyBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVfUE0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9jc2t5L0tjb25maWc9MjMyPWNob2ljZVxuLS1cbmFyY2gvY3NreS9LY29uZmlnLTIzNy1cbmFyY2gvY3NreS9LY29uZmlnOjIzODpjb25maWcgQ1BVX1BNVV9OT05FXG5hcmNoL2Nza3kvS2NvbmZpZy0yMzktXHRib29sIFwmIzM0O05vbmVcJiMzNDtcbi0tXG5hcmNoL2Nza3kvS2NvbmZpZz0yNDY9Y2hvaWNlXG4tLVxuYXJjaC9jc2t5L0tjb25maWctMjQ5LVxuYXJjaC9jc2t5L0tjb25maWc6MjUwOmNvbmZpZyBDUFVfUE1fTk9ORVxuYXJjaC9jc2t5L0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtOb25lXCYjMzQ7XG5hcmNoL2Nza3kvS2NvbmZpZy0yNTItXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTM6Y29uZmlnIENQVV9QTV9XQUlUXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTQtXHRib29sIFwmIzM0O3dhaXRcJiMzNDtcbmFyY2gvY3NreS9LY29uZmlnLTI1NS1cbmFyY2gvY3NreS9LY29uZmlnOjI1Njpjb25maWcgQ1BVX1BNX0RPWkVcbmFyY2gvY3NreS9LY29uZmlnLTI1Ny1cdGJvb2wgXCYjMzQ7ZG96ZVwmIzM0O1xuYXJjaC9jc2t5L0tjb25maWctMjU4LVxuYXJjaC9jc2t5L0tjb25maWc6MjU5OmNvbmZpZyBDUFVfUE1fU1RPUFxuYXJjaC9jc2t5L0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtzdG9wXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWc9Mzg1PWNvbmZpZyBQTV9HRU5FUklDX0RPTUFJTlNfT0Zcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zODgtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozODk6Y29uZmlnIENQVV9QTVxua2VybmVsL3Bvd2VyL0tjb25maWctMzkwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY5MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEVuYWJsaW5nIExvZ2ljIGZvciBDUFUgUG93ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgQ1BVX1BNYCBpcyBvbmUgb2YgdGhvc2UgdGhhdCYjMzk7cyAqb25seSogYnJvdWdodCBpbiBieSBhIGBzZWxlY3RgIHN0YXRlbWVudCDigJMgaXQgZG9lc24mIzM5O3QgZ2V0IGEgZGlyZWN0IHByb21wdCBvZiBpdHMgb3duLiBUaGF0IG1lYW5zIGlmIEkgd2FudCB0byBhY3R1YWxseSAqdXNlKiBpdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBzb21ldGhpbmcgdGhhdCBzZWxlY3RzIGl0IGlzIGVuYWJsZWQuIFJpZ2h0LCBtYWtlcyBzZW5zZS4KClNvLCBob3cgZG8gSSBnbyBhYm91dCB0aGF0PyBXZWxsLCBsb29raW5nIGF0IGl0LCBpdCBzZWVtcyB0aGF0IGVpdGhlciBgU1VTUEVORGAgb3IgYENQVV9JRExFYCBzaG91bGQgZG8gdGhlIHRyaWNrLiBTaW5jZSBJIGFtIGRlYWxpbmcgd2l0aCBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgZWl0aGVyIG9mIHRoZW0gaXMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHdheSwgdGhlIGRlcGVuZGVuY3kgZm9yIGBDUFVfUE1gIGlzIG1ldCwgYW5kIEkgY2FuIGJlIHN1cmUgSSYjMzk7bSBnZXR0aW5nIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmVzIEkgd2FudC4gTm93IHRvIGRpZyBpbnRvIGBTVVNQRU5EYCBhbmQgYENQVV9JRExFYCB0byBjb25maXJtIHRoZXkgYXJlIHN1aXRhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1VTUEVORCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxua2VybmVsL3Bvd2VyL0tjb25maWc6Mjpjb25maWcgU1VTUEVORFxua2VybmVsL3Bvd2VyL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7U3VzcGVuZCB0byBSQU0gYW5kIHN0YW5kYnlcJiMzNDtcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjExOmNvbmZpZyBTVVNQRU5EX0ZSRUVaRVJcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEyLVx0Ym9vbCBcJiMzNDtFbmFibGUgZnJlZXplciBmb3Igc3VzcGVuZCB0byBSQU0vc3RhbmRieVwmIzM0OyBcXFxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTIxLVxua2VybmVsL3Bvd2VyL0tjb25maWc6MjI6Y29uZmlnIFNVU1BFTkRfU0tJUF9TWU5DXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7U2tpcCBrZXJuZWwmIzM5O3Mgc3lzX3N5bmMoKSBvbiBzdXNwZW5kIHRvIFJBTS9zdGFuZGJ5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQ2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIFN5c3RlbSBTdGF0ZXMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgc3lzdGVtIHN0YXRlcyBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHdoYXQmIzM5O3MgYXZhaWxhYmxlIHRvIGludGVycm9nYXRlLiBGaXJzdCwgdGhlIGBTVVNQRU5EYCBzdGF0ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBzaW5jZSB0aGVyZSYjMzk7cyBhIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIGxpc3QgaXQgYW5kIGV4dHJhY3QgcmVsZXZhbnQgaW5mb3JtYXRpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBOb3csIHNpbmNlIHdlJiMzOTtyZSBsb29raW5nIGF0IHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBDUFVfSURMRWAuIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGJlaGF2aW9yIGFuZCB3aGF0IG1ldHJpY3Mgd2UgaGF2ZSBhY2Nlc3MgdG8gcmVsYXRlZCB0byBDUFUgaWRsZW5lc3MsIGFzIHRoYXQgaXMgbGlrZWx5IHRoZSBuZXh0IGxvZ2ljYWwgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ1BVX0lETEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcHVpZGxlL0tjb25maWc9Mj1tZW51IFwmIzM0O0NQVSBJZGxlXCYjMzQ7XG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0zLVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6NDpjb25maWcgQ1BVX0lETEVcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTUtXHRib29sIFwmIzM0O0NQVSBpZGxlIFBNIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZz0xNj1pZiBDUFVfSURMRVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMTctXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZzoxODpjb25maWcgQ1BVX0lETEVfTVVMVElQTEVfRFJJVkVSU1xuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMTktXHRib29sXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yMC1cbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnOjIxOmNvbmZpZyBDUFVfSURMRV9HT1ZfTEFEREVSXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7TGFkZGVyIGdvdmVybm9yIChmb3IgcGVyaW9kaWMgdGltZXIgdGljaylcJiMzNDtcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTIzLVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MjQ6Y29uZmlnIENQVV9JRExFX0dPVl9NRU5VXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7TWVudSBnb3Zlcm5vciAoZm9yIHRpY2tsZXNzIHN5c3RlbSlcJiMzNDtcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTI2LVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6Mjc6Y29uZmlnIENQVV9JRExFX0dPVl9URU9cbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtUaW1lciBldmVudHMgb3JpZW50ZWQgKFRFTykgZ292ZXJub3IgKGZvciB0aWNrbGVzcyBzeXN0ZW1zKVwmIzM0O1xuLS1cbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTM1LVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MzY6Y29uZmlnIENQVV9JRExFX0dPVl9IQUxUUE9MTFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMzctXHRib29sIFwmIzM0O0hhbHRwb2xsIGdvdmVybm9yIChmb3IgdmlydHVhbGl6ZWQgc3lzdGVtcylcJiMzNDtcbi0tXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZz0xODc9Y29uZmlnIENQVV9GUkVRX1RIRVJNQUxcbi0tXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZy0xOTctXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZzoxOTg6Y29uZmlnIENQVV9JRExFX1RIRVJNQUxcbmRyaXZlcnMvdGhlcm1hbC9LY29uZmlnLTE5OS1cdGJvb2wgXCYjMzQ7Q1BVIGlkbGUgY29vbGluZyBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MjcKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCB0cmlnZ2VycyB3aGVuIGBDUFVfSURMRWAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgZ290IGEgcHJvbXB0LCBzbyBpdCYjMzk7cyBhIHZhbGlkIGNvbmZpZyBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYEtWTWAsIGBTVVNQRU5EYCwgYW5kIGBDUFVfSURMRWAgYXJlIGFsbCBlbmFibGVkIHRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLgoKV2FpdCwgaXQgYWxzbyB0b3VjaGVzIGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgdGhvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZHVyaW5nIEtWTSBpbml0aWFsaXphdGlvbiBhbmQgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gU28sIHRoZSBrZXkgaGVyZSBpcyBsaWtlbHkgZnV6emluZyB0aGUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gUklTQy1WLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBpcy4KCkhlcmUmIzM5O3MgbXkgZGlzdGlsbGVkIHVuZGVyc3RhbmRpbmc6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBpcyB0b3VjaGluZyBjcnVjaWFsIEtWTSBhbmQgcG93ZXIgbWFuYWdlbWVudCBjb2RlLgoqICAgKipGb2N1cyBTeW1ib2xzKio6IEkmIzM5O20gZ29pbmcgdG8gcHV0IG15IGZvY3VzIG9uIHRoZXNlOgogICAgKiAgIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAKICAgICogICBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYAogICAgKiAgIGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYAoKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlc2UgYXJlIGVuYWJsZWQgZHVyaW5nIHRlc3Rpbmc6CiAgICAqICAgYEtWTWAKICAgICogICBgU1VTUEVORGAKICAgICogICBgQ1BVX0lETEVgCgoqKlJlYXNvbmluZzoqKgoKVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgUklTQy1WIEtWTSBBSUEgdG8gbWFuYWdlIENQVSBpZGxlIHN0YXRlcyB3aGVuIHRoZSBDUFUgaXMgaW4gYSBub24tcmV0ZW50aW9uIHN0YXRlLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBhIENQVSBQTSBub3RpZmllci4gVGhhdCBub3RpZmllciBpcyBjcml0aWNhbCBhcyBpdCB0cmlnZ2VycyBjYWxscyB0byBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCB3aXRoIGEgbmV3IGBmdWxsX2NsZWFudXBgIGJvb2xlYW4gYXJndW1lbnQsIHdoaWNoIGlzIHZpdGFsIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYWxsIGxvb2tzIGxpa2UgZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljIHRoYXQmIzM5O3MgcmVhY2hhYmxlIGR1cmluZyBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgYW5kIEtWTSBpbml0aWFsaXphdGlvbiBvciB0ZWFyZG93bi4gVGhpcyBhcmVhIG5lZWRzIHNlcmlvdXMgYXR0ZW50aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgcmVzdWx0IGluIHRoZSBDUFUgZW50ZXJpbmcgYW5kIGxlYXZpbmcgYSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGUgdG8gY29uc3RydWN0IHN1aXRhYmxlIGZ1enppbmcgdGVzdCBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo0NS4wNzcyNDk5MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzMwOTE1Mjk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlNVU1BFTkRcIixcbiAgICBcIkNQVV9JRExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X2FpYV9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZGlzYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgc3VwcG9ydCB0byBoYW5kbGUgQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgdGhhdCBjYWxscyBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCB3aXRoIGEgbmV3IGBmdWxsX2NsZWFudXBgIGJvb2xlYW4gcGFyYW1ldGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZHVyaW5nIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyBhbmQgS1ZNIGluaXRpYWxpemF0aW9uL3RlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo0NS4wNzcyNTYwMTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODc5OTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM2NzU0ODE1M2RlZWU4MDMyM2EzMjVlYjI1ODdjM2FiZjJlNjllZTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMDE6NDY6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxcbmluZGV4IGM2N2VjNWFjMGExNDZiLi43YzFjMzI1MDU5OGZiMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXFxuQEAgLTE2NSw4ICsxNjUsMTkgQEAgaW50IGt2bV9yaXNjdl9haWFfYWxsb2NfaGdlaShpbnQgY3B1LCBzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyLFxcbiBcXHRcXHRcXHQgICAgIHZvaWQgX19pb21lbSAqKmhnZWlfdmEsIHBoeXNfYWRkcl90ICpoZ2VpX3BhKTtcXG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7XFxuIFxcbi12b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpO1xcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKTtcXG4rLyoqXFxuKyAqIGt2bV9yaXNjdl9haWFfZW5hYmxlKCkgLSBFbmFibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcXG4rICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLFxcbisgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiByZXN0b3JlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSlcXG4rICovXFxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApO1xcbitcXG4rLyoqXFxuKyAqIGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpIC0gRGlzYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxcbisgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBjbGVhbnVwIChDUFUgaG90cGx1Zy9tb2R1bGUgZXhpdCksXFxuKyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHNhdmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkpXFxuKyAqL1xcbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XFxuIGludCBrdm1fcmlzY3ZfYWlhX2luaXQodm9pZCk7XFxuIHZvaWQga3ZtX3Jpc2N2X2FpYV9leGl0KHZvaWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbmluZGV4IGJhZmIwMDljNWNlNTU5Li44MjgxMjQ5M2FjNjg0YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXFxuQEAgLTUzMiw1MCArNTMyLDYxIEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcXG4gXFx0ZnJlZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSwgXFx1MDAyNmFpYV9oZ2VpKTtcXG4gfVxcbiBcXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxcbit2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcXG4tXFx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XFxuIFxcdHN0cnVjdCBhaWFfaGdlaV9jb250cm9sICpoZ2N0cmw7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLVxcdGludCBhaWFfbnJfaGdlaTtcXG4gXFxuIFxcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0Z2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpO1xcbi1cXHRsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtXFx1MDAzZWxvY2FsKSA6IE5VTEw7XFxuIFxcdGhnY3RybCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2YWlhX2hnZWkpO1xcbiBcXG4tXFx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xcbi1cXHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcXG4tXFx0aGdjdHJsLVxcdTAwM2Vucl9oZ2VpID0gZmxzX2xvbmcoY3NyX3JlYWQoQ1NSX0hHRUlFKSk7XFxuLVxcdGNzcl93cml0ZShDU1JfSEdFSUUsIDApO1xcbi1cXHRpZiAoaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKVxcbi1cXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWktLTtcXG4rXFx0aWYgKGZ1bGxfY2xlYW51cCkge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaW1zaWNfZ2xvYmFsX2NvbmZpZyAqZ2M7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xcbitcXHRcXHRpbnQgYWlhX25yX2hnZWk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2ZcXG4tXFx0ICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGxjKVxcbi1cXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC1cXHUwMDNlbnJfaGdlaSwgbGMtXFx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSAwO1xcbitcXHRcXHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XFxuK1xcdFxcdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cXHUwMDNlbG9jYWwpIDogTlVMTDtcXG4gXFxuLVxcdC8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIElNU0lDIGd1ZXN0IGZpbGVzIGFjcm9zcyBhbGwgSEFSVHMgKi9cXG4tXFx0YWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTtcXG4tXFx0ZG8ge1xcbi1cXHRcXHRpZiAoYWlhX25yX2hnZWkgXFx1MDAzYz0gaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCBcXHUwMDI2YWlhX25yX2hnZWksIGhnY3RybC1cXHUwMDNlbnJfaGdlaSkpO1xcbitcXHRcXHQvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovXFxuK1xcdFxcdGNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpO1xcbitcXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcXG4rXFx0XFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XFxuK1xcdFxcdGlmIChoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpXFxuK1xcdFxcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaS0tO1xcbiBcXG4tXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0aWYgKCFoZ2N0cmwtXFx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7XFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXAgPSAoaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKSA/IEdFTk1BU0tfVUxMKGhnY3RybC1cXHUwMDNlbnJfaGdlaSwgMSkgOiAwO1xcbi1cXHRcXHRoZ2N0cmwtXFx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXFxuK1xcdFxcdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChsYylcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2Vucl9oZ2VpID0gbWluKCh1bG9uZyloZ2N0cmwtXFx1MDAzZW5yX2hnZWksIGxjLVxcdTAwM2Vucl9ndWVzdF9maWxlcyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2Vucl9oZ2VpID0gMDtcXG4rXFxuK1xcdFxcdC8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIElNU0lDIGd1ZXN0IGZpbGVzIGFjcm9zcyBhbGwgSEFSVHMgKi9cXG4rXFx0XFx0YWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTtcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRpZiAoYWlhX25yX2hnZWkgXFx1MDAzYz0gaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCBcXHUwMDI2YWlhX25yX2hnZWksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKSk7XFxuK1xcbitcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRpZiAoIWhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2VmcmVlX2JpdG1hcCA9IChoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgR0VOTUFTS19VTEwoaGdjdHJsLVxcdTAwM2Vucl9oZ2VpLCAxKSA6XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIDA7XFxuK1xcdFxcdFxcdGhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgfmhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXApO1xcbitcXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdH1cXG4tXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcXG4gXFx0Y3NyX3dyaXRlKENTUl9IVklQUklPMSwgMHgwKTtcXG5AQCAtNTg3LDY1ICs1OTgsNzMgQEAgdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8ySCwgMHgwKTtcXG4gI2VuZGlmXFxuIFxcbi1cXHQvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xcbi1cXHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXFxuLVxcdFxcdFxcdCAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7XFxuLVxcdGNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcXG4rXFx0aWYgKGZ1bGxfY2xlYW51cCkge1xcbitcXHRcXHQvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xcbitcXHRcXHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXFxuK1xcdFxcdFxcdFxcdCAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7XFxuK1xcdFxcdGNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogRW5hYmxlIElSUSBmaWx0ZXJpbmcgZm9yIG92ZXJmbG93IGludGVycnVwdCBvbmx5IGlmIHNzY29mcG1mIGlzIHByZXNlbnQgKi9cXG4gXFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXFxuIFxcdFxcdGNzcl9zZXQoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcXG4gfVxcbiBcXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcXG4rdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoYm9vbCBmdWxsX2NsZWFudXApXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4tXFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcXG4gXFxuIFxcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRoZ2N0cmwgPSBnZXRfY3B1X3B0cihcXHUwMDI2YWlhX2hnZWkpO1xcbiBcXG4gXFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXFxuIFxcdFxcdGNzcl9jbGVhcihDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpO1xcbi1cXHQvKiBEaXNhYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cXG4tXFx0Y3NyX2NsZWFyKENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XFxuLVxcdGRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpO1xcbi1cXG4tXFx0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcXG4gXFxuLVxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGlmIChmdWxsX2NsZWFudXApIHtcXG4rXFx0XFx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXFxuK1xcdFxcdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xcbitcXHRcXHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcXG4rXFx0fVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWk7IGkrKykge1xcbi1cXHRcXHR2Y3B1ID0gaGdjdHJsLVxcdTAwM2Vvd25lcnNbaV07XFxuLVxcdFxcdGlmICghdmNwdSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBXZSByZWxlYXNlIGhnY3RybC1cXHUwMDNlbG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDXFxuLVxcdFxcdCAqIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKGZ1bGxfY2xlYW51cCkge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdFxcdHN0cnVjdCBhaWFfaGdlaV9jb250cm9sICpoZ2N0cmw7XFxuIFxcbi1cXHRcXHQvKiBOb3RpZnkgSU1TSUMgKi9cXG4tXFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XFxuK1xcdFxcdGhnY3RybCA9IGdldF9jcHVfcHRyKFxcdTAwMjZhaWFfaGdlaSk7XFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhblxcbi1cXHRcXHQgKiBydW4gb24gb3RoZXIgSEFSVHNcXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChjc3JfcmVhZChDU1JfSEdFSUUpIFxcdTAwMjYgQklUKGkpKSB7XFxuLVxcdFxcdFxcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XFxuLVxcdFxcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gaGdjdHJsLVxcdTAwM2Vucl9oZ2VpOyBpKyspIHtcXG4rXFx0XFx0XFx0dmNwdSA9IGhnY3RybC1cXHUwMDNlb3duZXJzW2ldO1xcbitcXHRcXHRcXHRpZiAoIXZjcHUpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogV2UgcmVsZWFzZSBoZ2N0cmwtXFx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xcbitcXHRcXHRcXHQgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRcXHRcXHQvKiBOb3RpZnkgSU1TSUMgKi9cXG4rXFx0XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhblxcbitcXHRcXHRcXHQgKiBydW4gb24gb3RoZXIgSEFSVHNcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChjc3JfcmVhZChDU1JfSEdFSUUpIFxcdTAwMjYgQklUKGkpKSB7XFxuK1xcdFxcdFxcdFxcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XFxuK1xcdFxcdFxcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cHV0X2NwdV9wdHIoXFx1MDAyNmFpYV9oZ2VpKTtcXG4gXFx0fVxcbi1cXG4tXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXG4tXFx0cHV0X2NwdV9wdHIoXFx1MDAyNmFpYV9oZ2VpKTtcXG4gfVxcbiBcXG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKVxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tYWluLmMgYi9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcXG5pbmRleCAwOTI0Yzc1MTAwYTJkMC4uNDFlZjkxZWEzOTIxOGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1X3BtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbmFjbC5oXFx1MDAzZVxcbkBAIC0zMywxNCArMzQsOSBAQCBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4gXFxuLWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuKy8qIEluaXRpYWxpemUgaHlwZXJ2aXNvciBDU1JzIC0gY2FsbGVkIGR1cmluZyBDUFUgb25saW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lICovXFxuK3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZW5hYmxlKHZvaWQpXFxuIHtcXG4tXFx0aW50IHJjO1xcbi1cXG4tXFx0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcXG4tXFx0aWYgKHJjKVxcbi1cXHRcXHRyZXR1cm4gcmM7XFxuLVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xcbiBcXG5AQCAtNDgsMTYgKzQ0LDExIEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuIFxcdGNzcl93cml0ZShDU1JfSENPVU5URVJFTiwgMHgwMik7XFxuIFxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSVAsIDApO1xcbi1cXG4tXFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoKTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi12b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuKy8qIENsZWFyIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9mZmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSAqL1xcbitzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2Rpc2FibGUodm9pZClcXG4ge1xcbi1cXHRrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIEFmdGVyIGNsZWFyaW5nIHRoZSBoaWRlbGVnIENTUiwgdGhlIGhvc3Qga2VybmVsIHdpbGwgcmVjZWl2ZVxcbiBcXHQgKiBzcHVyaW91cyBpbnRlcnJ1cHRzIGlmIGh2aXAgQ1NSIGhhcyBwZW5kaW5nIGludGVycnVwdHMgYW5kIHRoZVxcbkBAIC02OCwxMCArNTksNjAgQEAgdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSVAsIDApO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xcbit9XFxuK1xcbitpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbit7XFxuK1xcdGludCByYztcXG4gXFxuK1xcdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcXG4rXFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbit7XFxuK1xcdGt2bV9yaXNjdl9haWFfZGlzYWJsZSh0cnVlKTtcXG4rXFx0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XFxuIFxcdGt2bV9yaXNjdl9uYWNsX2Rpc2FibGUoKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSdzXFxuK1xcdCAqIHN5c2NvcmUgb3BzIHdpbGwgaGFuZGxlIHRoZSBzdGF0ZSBkdXJpbmcgc3lzdGVtIHN1c3BlbmQpLFxcbitcXHQgKiBpZ25vcmUgQ1BVX1BNIGV2ZW50cyB3aGVuIGEgc3lzdGVtIHN1c3BlbmQvcmVzdW1lIGlzIGluXFxuK1xcdCAqIHByb2dyZXNzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fU1VTUEVORClcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXG4rXFx0c3dpdGNoIChjbWQpIHtcXG4rXFx0Y2FzZSBDUFVfUE1fRVhJVDpcXG4rXFx0XFx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcXG4rXFx0XFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpO1xcbitcXHRcXHRyZXR1cm4gTk9USUZZX09LO1xcbitcXHRjYXNlIENQVV9QTV9FTlRFUjpcXG4rXFx0XFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGZhbHNlKTtcXG4rXFx0XFx0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XFxuK1xcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX3Jpc2N2X2NwdV9wbV9uYiA9IHtcXG4rXFx0Lm5vdGlmaWVyX2NhbGwgPSBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyLFxcbit9O1xcbitcXG4gc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3RlYXJkb3duKHZvaWQpXFxuIHtcXG4gXFx0a3ZtX3Jpc2N2X2FpYV9leGl0KCk7XFxuQEAgLTE3MiwyMiArMjEzLDM2IEBAIHN0YXRpYyBpbnQgX19pbml0IHJpc2N2X2t2bV9pbml0KHZvaWQpXFxuIFxcbiBcXHRrdm1fcmVnaXN0ZXJfcGVyZl9jYWxsYmFja3MoKTtcXG4gXFxuLVxcdHJjID0ga3ZtX2luaXQoc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksIDAsIFRISVNfTU9EVUxFKTtcXG4tXFx0aWYgKHJjKSB7XFxuLVxcdFxcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xcbi1cXHRcXHRyZXR1cm4gcmM7XFxuK1xcdC8qIFJlZ2lzdGVyIENQVSBQTSBub3RpZmllciBmb3IgQ1BVIGlkbGUgbm9uLXJldGVudGlvbiBzdGF0ZXMgKi9cXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpIHtcXG4rXFx0XFx0cmMgPSBjcHVfcG1fcmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0a3ZtX2VycihcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIENQVSBQTSBub3RpZmllcjogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfdGVhcmRvd247XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXFxuLVxcdFxcdGt2bV9pbmZvKFxcXCJBSUEgYXZhaWxhYmxlIHdpdGggJWQgZ3Vlc3QgZXh0ZXJuYWwgaW50ZXJydXB0c1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGF0b21pY19yZWFkKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpKTtcXG4rXFx0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gZXJyX3VucmVnaXN0ZXJfY3B1X3BtO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfdW5yZWdpc3Rlcl9jcHVfcG06XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxcbitcXHRcXHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XFxuK2Vycl90ZWFyZG93bjpcXG4rXFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XFxuK1xcdHJldHVybiByYztcXG4gfVxcbiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgcmlzY3Zfa3ZtX2V4aXQodm9pZClcXG4ge1xcbitcXHQvKiBVbnJlZ2lzdGVyIENQVSBQTSBub3RpZmllciAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcXG4rXFx0XFx0Y3B1X3BtX3VucmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xcbitcXG4gXFx0a3ZtX2V4aXQoKTtcXG4gXFxuIFxcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo0NS43NjY4NTY5MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjE5NTM2MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiU1VTUEVORFwiLFxuICAgIFwiQ1BVX0lETEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfYWlhX2VuYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9kaXNhYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzY3NTQ4MTUzZGVlZTgwMzIzYTMyNWViMjU4N2MzYWJmMmU2OWVlOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDAxOjQ2OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxuaW5kZXggYzY3ZWM1YWMwYTE0NmIuLjdjMWMzMjUwNTk4ZmIwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXG5AQCAtMTY1LDggKzE2NSwxOSBAQCBpbnQga3ZtX3Jpc2N2X2FpYV9hbGxvY19oZ2VpKGludCBjcHUsIHN0cnVjdCBrdm1fdmNwdSAqb3duZXIsXG4gXHRcdFx0ICAgICB2b2lkIF9faW9tZW0gKipoZ2VpX3ZhLCBwaHlzX2FkZHJfdCAqaGdlaV9wYSk7XG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKTtcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKTtcbisvKipcbisgKiBrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpIC0gRW5hYmxlIEFJQSBzdXBwb3J0IG9uIGN1cnJlbnQgQ1BVXG4rICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLFxuKyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHJlc3RvcmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lKVxuKyAqL1xuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApO1xuK1xuKy8qKlxuKyAqIGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpIC0gRGlzYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxuKyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGNsZWFudXAgKENQVSBob3RwbHVnL21vZHVsZSBleGl0KSxcbisgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiBzYXZlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIGVudHJ5KVxuKyAqL1xuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcbiBpbnQga3ZtX3Jpc2N2X2FpYV9pbml0KHZvaWQpO1xuIHZvaWQga3ZtX3Jpc2N2X2FpYV9leGl0KHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbmluZGV4IGJhZmIwMDljNWNlNTU5Li44MjgxMjQ5M2FjNjg0YSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuQEAgLTUzMiw1MCArNTMyLDYxIEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbiBcdGZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsIFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApXG4ge1xuLVx0Y29uc3Qgc3RydWN0IGltc2ljX2dsb2JhbF9jb25maWcgKmdjO1xuLVx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XG4gXHRzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdGludCBhaWFfbnJfaGdlaTtcbiBcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpO1xuLVx0bGMgPSAoZ2MpID8gdGhpc19jcHVfcHRyKGdjLVx1MDAzZWxvY2FsKSA6IE5VTEw7XG4gXHRoZ2N0cmwgPSB0aGlzX2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIFxuLVx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xuLVx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7XG4tXHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpO1xuLVx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XG4tXHRpZiAoaGdjdHJsLVx1MDAzZW5yX2hnZWkpXG4tXHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpLS07XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbitcdFx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XG4rXHRcdGludCBhaWFfbnJfaGdlaTtcbiBcbi1cdC8qXG4tXHQgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2Zcbi1cdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cbi1cdCAqL1xuLVx0aWYgKGxjKVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVx1MDAzZW5yX2hnZWksIGxjLVx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcbi1cdGVsc2Vcbi1cdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSAwO1xuK1x0XHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XG4rXHRcdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cdTAwM2Vsb2NhbCkgOiBOVUxMO1xuIFxuLVx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xuLVx0YWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZChcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpO1xuLVx0ZG8ge1xuLVx0XHRpZiAoYWlhX25yX2hnZWkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbi1cdFx0XHRicmVhaztcbi1cdH0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCBcdTAwMjZhaWFfbnJfaGdlaSwgaGdjdHJsLVx1MDAzZW5yX2hnZWkpKTtcbitcdFx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xuK1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcbitcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcbitcdFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XG4rXHRcdGlmIChoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbitcdFx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaS0tO1xuIFxuLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRpZiAoIWhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCkge1xuLVx0XHRoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXAgPSAoaGdjdHJsLVx1MDAzZW5yX2hnZWkpID8gR0VOTUFTS19VTEwoaGdjdHJsLVx1MDAzZW5yX2hnZWksIDEpIDogMDtcbi1cdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0LypcbitcdFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXG4rXHRcdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cbitcdFx0ICovXG4rXHRcdGlmIChsYylcbitcdFx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVx1MDAzZW5yX2hnZWksIGxjLVx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gMDtcbitcbitcdFx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xuK1x0XHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSk7XG4rXHRcdGRvIHtcbitcdFx0XHRpZiAoYWlhX25yX2hnZWkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSwgXHUwMDI2YWlhX25yX2hnZWksXG4rXHRcdFx0XHRcdCAgICAgaGdjdHJsLVx1MDAzZW5yX2hnZWkpKTtcbitcbitcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGlmICghaGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7XG4rXHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/XG4rXHRcdFx0XHRcdCAgICAgIEdFTk1BU0tfVUxMKGhnY3RybC1cdTAwM2Vucl9oZ2VpLCAxKSA6XG4rXHRcdFx0XHRcdCAgICAgIDA7XG4rXHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0fSBlbHNlIHtcbitcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGNzcl93cml0ZShDU1JfSEdFSUUsIH5oZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXApO1xuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuLVx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8xLCAweDApO1xuQEAgLTU4Nyw2NSArNTk4LDczIEBAIHZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZClcbiBcdGNzcl93cml0ZShDU1JfSFZJUFJJTzJILCAweDApO1xuICNlbmRpZlxuIFxuLVx0LyogRW5hYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cbi1cdGVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSxcbi1cdFx0XHQgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpO1xuLVx0Y3NyX3NldChDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xuK1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuK1x0XHQvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuK1x0XHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXG4rXHRcdFx0XHQgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpO1xuK1x0XHRjc3Jfc2V0KENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4rXHR9XG4rXG4gXHQvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqL1xuIFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXG4gXHRcdGNzcl9zZXQoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cClcbiB7XG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsO1xuIFxuIFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRyZXR1cm47XG4tXHRoZ2N0cmwgPSBnZXRfY3B1X3B0cihcdTAwMjZhaWFfaGdlaSk7XG4gXG4gXHRpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSlcbiBcdFx0Y3NyX2NsZWFyKENTUl9IVklFTiwgQklUKElSUV9QTVVfT1ZGKSk7XG4tXHQvKiBEaXNhYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cbi1cdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xuLVx0ZGlzYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSk7XG4tXG4tXHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFxuLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdC8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuK1x0XHRjc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbitcdFx0ZGlzYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSk7XG4rXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gaGdjdHJsLVx1MDAzZW5yX2hnZWk7IGkrKykge1xuLVx0XHR2Y3B1ID0gaGdjdHJsLVx1MDAzZW93bmVyc1tpXTtcbi1cdFx0aWYgKCF2Y3B1KVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogV2UgcmVsZWFzZSBoZ2N0cmwtXHUwMDNlbG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDXG4tXHRcdCAqIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy5cbi1cdFx0ICovXG4tXHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcbiBcbi1cdFx0LyogTm90aWZ5IElNU0lDICovXG4tXHRcdGt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpO1xuK1x0XHRoZ2N0cmwgPSBnZXRfY3B1X3B0cihcdTAwMjZhaWFfaGdlaSk7XG4rXHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhblxuLVx0XHQgKiBydW4gb24gb3RoZXIgSEFSVHNcbi1cdFx0ICovXG4tXHRcdGlmIChjc3JfcmVhZChDU1JfSEdFSUUpIFx1MDAyNiBCSVQoaSkpIHtcbi1cdFx0XHRjc3JfY2xlYXIoQ1NSX0hHRUlFLCBCSVQoaSkpO1xuLVx0XHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSsrKSB7XG4rXHRcdFx0dmNwdSA9IGhnY3RybC1cdTAwM2Vvd25lcnNbaV07XG4rXHRcdFx0aWYgKCF2Y3B1KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBXZSByZWxlYXNlIGhnY3RybC1cdTAwM2Vsb2NrIGJlZm9yZSBub3RpZnlpbmcgSU1TSUNcbitcdFx0XHQgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuXG4rXHRcdFx0ICovXG4rXHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdFx0XHQvKiBOb3RpZnkgSU1TSUMgKi9cbitcdFx0XHRrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4rXHRcdFx0ICogcnVuIG9uIG90aGVyIEhBUlRzXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuK1x0XHRcdFx0Y3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTtcbitcdFx0XHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHR9XG4gXG4tXHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRwdXRfY3B1X3B0cihcdTAwMjZhaWFfaGdlaSk7XG4gXHR9XG4tXG4tXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuLVx0cHV0X2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIH1cbiBcbiBpbnQga3ZtX3Jpc2N2X2FpYV9pbml0KHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXG5pbmRleCAwOTI0Yzc1MTAwYTJkMC4uNDFlZjkxZWEzOTIxOGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdV9wbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuQEAgLTMzLDE0ICszNCw5IEBAIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuLWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4rLyogSW5pdGlhbGl6ZSBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvbmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSByZXN1bWUgKi9cbitzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2VuYWJsZSh2b2lkKVxuIHtcbi1cdGludCByYztcbi1cbi1cdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XG4tXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbi1cbiBcdGNzcl93cml0ZShDU1JfSEVERUxFRywgMCk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xuIFxuQEAgLTQ4LDE2ICs0NCwxMSBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFx0Y3NyX3dyaXRlKENTUl9IQ09VTlRFUkVOLCAweDAyKTtcbiBcbiBcdGNzcl93cml0ZShDU1JfSFZJUCwgMCk7XG4tXG4tXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpO1xuLVxuLVx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbisvKiBDbGVhciBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvZmZsaW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkgKi9cbitzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2Rpc2FibGUodm9pZClcbiB7XG4tXHRrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKTtcbi1cbiBcdC8qXG4gXHQgKiBBZnRlciBjbGVhcmluZyB0aGUgaGlkZWxlZyBDU1IsIHRoZSBob3N0IGtlcm5lbCB3aWxsIHJlY2VpdmVcbiBcdCAqIHNwdXJpb3VzIGludGVycnVwdHMgaWYgaHZpcCBDU1IgaGFzIHBlbmRpbmcgaW50ZXJydXB0cyBhbmQgdGhlXG5AQCAtNjgsMTAgKzU5LDYwIEBAIHZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiBcdGNzcl93cml0ZShDU1JfSFZJUCwgMCk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xuIFx0Y3NyX3dyaXRlKENTUl9ISURFTEVHLCAwKTtcbit9XG4rXG4raW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbit7XG4rXHRpbnQgcmM7XG4gXG4rXHRyYyA9IGt2bV9yaXNjdl9uYWNsX2VuYWJsZSgpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xuK1x0a3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuK3tcbitcdGt2bV9yaXNjdl9haWFfZGlzYWJsZSh0cnVlKTtcbitcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xuIFx0a3ZtX3Jpc2N2X25hY2xfZGlzYWJsZSgpO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdilcbit7XG4rXHQvKlxuK1x0ICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSdzXG4rXHQgKiBzeXNjb3JlIG9wcyB3aWxsIGhhbmRsZSB0aGUgc3RhdGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kKSxcbitcdCAqIGlnbm9yZSBDUFVfUE0gZXZlbnRzIHdoZW4gYSBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUgaXMgaW5cbitcdCAqIHByb2dyZXNzLlxuK1x0ICovXG4rXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9TVVNQRU5EKVxuK1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXG4rXHRzd2l0Y2ggKGNtZCkge1xuK1x0Y2FzZSBDUFVfUE1fRVhJVDpcbitcdFx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcbitcdFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpO1xuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1x0Y2FzZSBDUFVfUE1fRU5URVI6XG4rXHRcdGt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSk7XG4rXHRcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX3Jpc2N2X2NwdV9wbV9uYiA9IHtcbitcdC5ub3RpZmllcl9jYWxsID0ga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcixcbit9O1xuK1xuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl90ZWFyZG93bih2b2lkKVxuIHtcbiBcdGt2bV9yaXNjdl9haWFfZXhpdCgpO1xuQEAgLTE3MiwyMiArMjEzLDM2IEBAIHN0YXRpYyBpbnQgX19pbml0IHJpc2N2X2t2bV9pbml0KHZvaWQpXG4gXG4gXHRrdm1fcmVnaXN0ZXJfcGVyZl9jYWxsYmFja3MoKTtcbiBcbi1cdHJjID0ga3ZtX2luaXQoc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksIDAsIFRISVNfTU9EVUxFKTtcbi1cdGlmIChyYykge1xuLVx0XHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcbi1cdFx0cmV0dXJuIHJjO1xuK1x0LyogUmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyIGZvciBDUFUgaWRsZSBub24tcmV0ZW50aW9uIHN0YXRlcyAqL1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpIHtcbitcdFx0cmMgPSBjcHVfcG1fcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdGt2bV9lcnIoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyOiAlZFxcblwiLCByYyk7XG4rXHRcdFx0Z290byBlcnJfdGVhcmRvd247XG4rXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuLVx0XHRrdm1faW5mbyhcIkFJQSBhdmFpbGFibGUgd2l0aCAlZCBndWVzdCBleHRlcm5hbCBpbnRlcnJ1cHRzXFxuXCIsXG4tXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSkpO1xuK1x0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl91bnJlZ2lzdGVyX2NwdV9wbTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2Vycl91bnJlZ2lzdGVyX2NwdV9wbTpcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxuK1x0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbitlcnJfdGVhcmRvd246XG4rXHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcbitcdHJldHVybiByYztcbiB9XG4gbW9kdWxlX2luaXQocmlzY3Zfa3ZtX2luaXQpO1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCByaXNjdl9rdm1fZXhpdCh2b2lkKVxuIHtcbitcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcbitcdFx0Y3B1X3BtX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XG4rXG4gXHRrdm1fZXhpdCgpO1xuIFxuIFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo0NS43NjY4NTgzMjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjQyOTgyMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBBSUEgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgUklTQy1WIEtWTSBBSUEgc3VwcG9ydCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIGBib29sIGZ1bGxfY2xlYW51cGAgcGFyYW1ldGVyIHRvIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIEl0J3MgYWxzbyBpbnRyb2R1Y2luZyBhIENQVSBQTSBub3RpZmllciwgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLCBkZXNpZ25lZCB0byBoYW5kbGUgQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIFRoaXMgbm90aWZpZXIgY2FsbHMgdGhlIEFJQSBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbnMsIGJ1dCAqd2l0aG91dCogdGhlIGZ1bGwgY2xlYW51cCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHJlZ2lzdGVycyB0aGUgbm90aWZpZXIgb25seSBpZiBgQ09ORklHX0NQVV9QTWAgaXMgZW5hYmxlZC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsP1wiIEFuZCB0aGUgYW5zd2VyIGlzLCB5ZXMsIGl0J3MgZnVuY3Rpb25hbDsgaXQncyBkZWZpbml0ZWx5IG1vZGlmeWluZyBLVk0gUklTQy1WIENQVSBwb3dlciBtYW5hZ2VtZW50IGhhbmRsaW5nLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gZm9yIG1lLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzLCBjYW4gd2UgZnV6eiB0aGlzIGVmZmljaWVudGx5P1xuXG5UaGUgb2J2aW91cyB0cmlnZ2VyIGlzIENQVSBQTSBldmVudHMg4oCTIHNwZWNpZmljYWxseSwgQ1BVIGlkbGUgbm9uLXJldGVudGlvbiBzdGF0ZXMuIE5vdywgQ1BVIFBNIGV2ZW50cyBhcmUgYSBwb3RlbnRpYWwgZnV6eiB0YXJnZXQsIElGIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgQ1BVIGlkbGUgb3Igc3VzcGVuZC4gU3l6a2FsbGVyLCBpbiBpdHMgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBkb2Vzbid0IHR5cGljYWxseSBkaXJlY3RseSB0cmlnZ2VyIHRob3NlIGV2ZW50czsgSSdkIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGxpa2UgQ1BVIGhvdHBsdWcgb3Igc3VzcGVuZC9yZXN1bWUgd2VyZSBlbmFibGVkLCB3aGljaCAqY291bGQqIGluZGlyZWN0bHkgZXhlcmNpc2UgdGhpcyBjb2RlLlxuXG5Ib3dldmVyLCBoZXJlJ3MgYSB3cmlua2xlOiBJIHNlZSB0aGF0IGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhcmUgYWxzbyBtb2RpZmllZCB0byBwYXNzIGB0cnVlYCB0byBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCEgVGhpcyBpcyBrZXkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgZHVyaW5nIENQVSBob3RwbHVnIG9yIG1vZHVsZSBsb2FkL3VubG9hZC4gVGhpcyBtZWFucyB3ZSBoYXZlIGEgY291cGxlIG9mIGRpZmZlcmVudCBwYXRocyB0byB0aGUgY29kZSwgYW5kIHRoaXMgaXMgZ29vZCBmdXp6aW5nIGZvZGRlciwgc2luY2Ugb25lIG1pZ2h0IGJlIGVhc2llciB0byB0cmlnZ2VyIHRoYW4gdGhlIG90aGVyIVxuXG5TbywgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAgYXJlIGNsZWFybHkgZnVuY3Rpb25hbCBhbmQgbm93IHRha2UgYSBmbGFnIHRvIGNvbnRyb2wgY2xlYW51cC4gSSBub3cgaGF2ZSB0d28gcG9zc2libGUgYXZlbnVlcyBmb3IgZnV6emluZzogQ1BVIFBNIGV2ZW50cyAoaWRsZS9zdXNwZW5kL3Jlc3VtZSkgYW5kIENQVSBob3RwbHVnL21vZHVsZSBsb2FkLlxuXG5UbyBiZSB0aG9yb3VnaCwgbGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgYENPTkZJR19LVk1gLCBgQ09ORklHX1JJU0NWYCwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfQ1BVX1BNYCBmb3IgdGhlIG5vdGlmaWVyIHRvIGJlIGVuYWJsZWQuIFRoZW4sIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhlIGNhbGxncmFwaCBmb3IgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAgdG8gc2VlIGhvdyBleHRlbnNpdmVseSB0aGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo1NC40MDk4NDM0MzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NjMyMzk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfYWlhX2VuYWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaD0xNjY9dm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7XFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNjgtLyoqXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmg6MTY5OiAqIGt2bV9yaXNjdl9haWFfZW5hYmxlKCkgLSBFbmFibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNzAtICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLFxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmgtMTcyLSAqL1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oOjE3Mzp2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNzQtXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWEuYz01Mjk9c3RhdGljIHZvaWQgYWlhX2hnZWlfZXhpdCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtNTM0LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jOjUzNTp2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTUzNi17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM9NjQ9aW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21haW4uYy03Mi1cXHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xcbmFyY2gvcmlzY3Yva3ZtL21haW4uYzo3MzpcXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKTtcXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtNzQtXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM9ODU9c3RhdGljIGludCBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtOTgtXFx0XFx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM6OTk6XFx0XFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpO1xcbmFyY2gvcmlzY3Yva3ZtL21haW4uYy0xMDAtXFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDY6NTkuMzc2MTczNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDM4MzU3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0tUklTQ1YgQUlBIEVuYWJsZS9EaXNhYmxlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAgaXMgZHJhd2luZyBteSBhdHRlbnRpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3Igc29tZSBwb3dlciBtYW5hZ2VtZW50IGhvb2t1cCwgYW5kIGNyaXRpY2FsbHksIGl0J3MgY2FsbGluZyBga3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSlgLiBUaGF0IG1ha2VzIHNlbnNlIC0gbGlrZWx5IGRpc2FibGluZyB0aGUgQUlBIHdoZW4gdGhlIENQVSBpcyBnb2luZyBpbnRvIGEgbG93ZXIgcG93ZXIgc3RhdGUuIFRoZW4sIHRoZXkncmUgbW9kaWZ5aW5nIHRoZSB2aXJ0dWFsaXphdGlvbiBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbnMgKGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCkgdG8gdG9nZ2xlIEFJQSB3aXRoIHRoZSBgZnVsbF9jbGVhbnVwYCBmbGFnLCBjYWxsaW5nIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSlgLiBSaWdodC4gU28gd2UndmUgZ290IGFuIEFJQSBzdGF0ZSBjaGFuZ2UgdGllZCB0byBib3RoIENQVSBwb3dlciBtYW5hZ2VtZW50IGFuZCBnZW5lcmFsIHZpcnR1YWxpemF0aW9uLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIHRvIHdhbmRlci4gSXMgdGhpcyBpbXBsZW1lbnRhdGlvbiAqc291bmQqPyBEb2VzIHRoZSBsb2dpYyBpbiBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCBoYW5kbGUgdGhlIGRpZmZlcmVudCBjbGVhbnVwL3NldHVwIGFwcHJvcHJpYXRlbHk/IFNlZW1zIGxpa2UgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIHRoZSBgZnVsbF9jbGVhbnVwYCBmbGFnLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyB0aGlzIGZ1enotYWJsZT8gWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIGZ1bmN0aW9uYWwsIHRvdWNoZXMgc29tZSBrZXkgY29tcG9uZW50cywgYW5kIGhhcyBzZXZlcmFsIGVudHJ5IHBvaW50cy5cblxuSSdsbCBmbGFnIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAsIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLCBhbmQgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgIGFzIG15IGZvY3VzIHN5bWJvbHMuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkgd2FudCB0byB0YXJnZXQgZHVyaW5nIGZ1enppbmcuXG5cbkJlZm9yZSBJIGdldCB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbmZpZ3MuIFNlZW1zIGxpa2UgdGhlIHBhdGNoIGFkZHMgYEtWTWAgYW5kIGBDUFVfUE1gIGFzIHRoZSBlbmFibGUgY29uZmlnLiBJJ2xsIHRha2UgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgYENQVV9QTWAgaXMgYSB2YWxpZCBjb25maWcuIFRoYXQncyBhIHNhbml0eSBjaGVjayBJIHdhbnQgdG8gZG8gYmVmb3JlIEkgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0NzowNC42ODAwMTA5NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAyMjA1NjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1BVX1BNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvY3NreS9LY29uZmlnPTIzMj1jaG9pY2VcXG4tLVxcbmFyY2gvY3NreS9LY29uZmlnLTIzNy1cXG5hcmNoL2Nza3kvS2NvbmZpZzoyMzg6Y29uZmlnIENQVV9QTVVfTk9ORVxcbmFyY2gvY3NreS9LY29uZmlnLTIzOS1cXHRib29sIFxcXCJOb25lXFxcIlxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWc9MjQ2PWNob2ljZVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWctMjQ5LVxcbmFyY2gvY3NreS9LY29uZmlnOjI1MDpjb25maWcgQ1BVX1BNX05PTkVcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiTm9uZVxcXCJcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTItXFxuYXJjaC9jc2t5L0tjb25maWc6MjUzOmNvbmZpZyBDUFVfUE1fV0FJVFxcbmFyY2gvY3NreS9LY29uZmlnLTI1NC1cXHRib29sIFxcXCJ3YWl0XFxcIlxcbmFyY2gvY3NreS9LY29uZmlnLTI1NS1cXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTY6Y29uZmlnIENQVV9QTV9ET1pFXFxuYXJjaC9jc2t5L0tjb25maWctMjU3LVxcdGJvb2wgXFxcImRvemVcXFwiXFxuYXJjaC9jc2t5L0tjb25maWctMjU4LVxcbmFyY2gvY3NreS9LY29uZmlnOjI1OTpjb25maWcgQ1BVX1BNX1NUT1BcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwic3RvcFxcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnPTM4NT1jb25maWcgUE1fR0VORVJJQ19ET01BSU5TX09GXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zODgtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6Mzg5OmNvbmZpZyBDUFVfUE1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zOTAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0NzowNy43MDIwNzM4MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY1OTExMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBDb25maWd1cmF0aW9uIFNhbml0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gKkNQVV9QTSog4oCTIHRoYXQncyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QuICpLVk0qLi4uIHllcCwgdGhhdCByaW5ncyBhIGJlbGwgdG9vLCB0b3RhbGx5IGxlZ2l0LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgZ2VuZXJpYyBLVk0gaGVyZSwgb3IgaXMgdGhlcmUgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlPyBXZSBuZWVkIHRvIGJlIHByZWNpc2UsIG9yIHdlJ3JlIGdvaW5nIHRvIGhhdmUgaXNzdWVzIGxhdGVyLiBHb3R0YSBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBhIGRlZGljYXRlZCBSSVNDLVYgS1ZNIGNvbmZpZ3VyYXRpb24gZmxvYXRpbmcgYXJvdW5kIHNvbWV3aGVyZS4gSXTigJlzIGVzc2VudGlhbCB0byBhdm9pZCBhbWJpZ3VpdHkgaGVyZSBhbmQgbWFrZSBzdXJlIHdl4oCZcmUgdXNpbmcgdGhlIHJpZ2h0IHNldHRpbmdzIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzIzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MTEuMjY3OTg3NjIyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTk0NjUzMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cXHRib29sIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnPTE2PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzoxODpjb25maWcgS1ZNXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzAtXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjMxOmNvbmZpZyBLVk1fTUlQU19ERUJVR19DT1AwX0NPVU5URVJTXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIk1haW50YWluIGNvdW50ZXJzIGZvciBDT1AwIGFjY2Vzc2VzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNy1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyOTpjb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMwLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM4OmNvbmZpZyBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00NC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDU6Y29uZmlnIEtWTV9CT09LM1NfMzJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc18zMiBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI1LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI3LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjk6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJEZXRhaWxlZCB0aW1pbmcgZm9yIHRoZSBQOSBlbnRyeSBwb2ludFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QOF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVxcdGJvb2wgXFxcIkRldGFpbGVkIHRpbWluZyBmb3IgaHlwZXJ2aXNvciByZWFsLW1vZGUgY29kZSAoZm9yIFBPV0VSOClcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU2LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QTVVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJIeXBlcnZpc29yIFBlcmYgZXZlbnRzIGZvciBLVk0gQm9vazNzLUhWXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4My1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg0OmNvbmZpZyBLVk1fQk9PS0VfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg2LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgZXhpdCB0aW1pbmdcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTg6Y29uZmlnIEtWTV9FNTAwVjJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk5LVxcdGJvb2wgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMi1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjEzOmNvbmZpZyBLVk1fRTUwME1DXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cXHRib29sIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBFNTAwTUMvRTU1MDAvRTY1MDAgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjMwLVxcdGJvb2wgXFxcIktWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNDE6Y29uZmlnIEtWTV9YSUNTXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJLVk0gaW4ta2VybmVsIFhJQ1MgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1MC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjUxOmNvbmZpZyBLVk1fWElWRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcXFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1xcXCJcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiS1ZNIEd1ZXN0IHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00NS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDY6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTgzOT1zb3VyY2UgXFxcImFyY2gveDg2L3hlbi9LY29uZmlnXFxcIlxcbmFyY2gveDg2L0tjb25maWctODQwLVxcbmFyY2gveDg2L0tjb25maWc6ODQxOmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTg0Mi1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTMtXFxudmlydC9rdm0vS2NvbmZpZzo0OmNvbmZpZyBLVk1fQ09NTU9OXFxudmlydC9rdm0vS2NvbmZpZy01LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTM5PWNvbmZpZyBORUVEX0tWTV9ESVJUWV9SSU5HX1dJVEhfQklUTUFQXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxcbnZpcnQva3ZtL0tjb25maWc6NDM6Y29uZmlnIEtWTV9NTUlPXFxudmlydC9rdm0vS2NvbmZpZy00NC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNDUtXFxudmlydC9rdm0vS2NvbmZpZzo0Njpjb25maWcgS1ZNX0FTWU5DX1BGXFxudmlydC9rdm0vS2NvbmZpZy00Ny0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy00OS0jIFRvZ2dsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaXJlY3Qgbm90aWZpY2F0aW9uIGFuZCBiYXRjaCBqb2JcXG52aXJ0L2t2bS9LY29uZmlnOjUwOmNvbmZpZyBLVk1fQVNZTkNfUEZfU1lOQ1xcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9NTk9Y29uZmlnIEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjEtXFxudmlydC9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX1ZGSU9cXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTY1PWNvbmZpZyBIQVZFX0tWTV9JTlZBTElEX1dBS0VVUFNcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjctXFxudmlydC9rdm0vS2NvbmZpZzo2ODpjb25maWcgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNzAtXFxudmlydC9rdm0vS2NvbmZpZzo3MTpjb25maWcgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTczLVxcbnZpcnQva3ZtL0tjb25maWc6NzQ6Y29uZmlnIEtWTV9DT01QQVRcXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTkxPWNvbmZpZyBIQVZFX0tWTV9QTV9OT1RJRklFUlxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy05My1cXG52aXJ0L2t2bS9LY29uZmlnOjk0OmNvbmZpZyBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTk2LVxcbnZpcnQva3ZtL0tjb25maWc6OTc6Y29uZmlnIEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy05OS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy0xMDItXFxudmlydC9rdm0vS2NvbmZpZzoxMDM6Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MTQuMTg3NDU4MjQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MzU4ODg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIENQVSBQb3dlciBNYW5hZ2VtZW50IG9uIFJJU0MtVioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBgS1ZNYCBhbmQgYENQVV9QTWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBjYW4gd2UgZXZlbiBlbmFibGUgYENQVV9QTWAgb24gYSBSSVNDLVYgc3lzdGVtP1wiIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIGBDUFVfUE1gIGluIGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AuIEV4Y2VsbGVudC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgXCJJcyBgQ1BVX1BNYCBhY3R1YWxseSAqc2VsZWN0ZWQqIGJ5IGFueXRoaW5nIHdpdGhpbiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZT9cIiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdCBhbmQgY29uZmlybSBpdHMgcHJlc2VuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODI0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MTcuMjgxMDQ5NDAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg5NTE3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBDUFVfUE1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0yPWNvbmZpZyBBUk1cXG4tLVxcbmFyY2gvYXJtL0tjb25maWctNTgtXFx0c2VsZWN0IENMT05FX0JBQ0tXQVJEU1xcbmFyY2gvYXJtL0tjb25maWc6NTk6XFx0c2VsZWN0IENQVV9QTSBpZiBTVVNQRU5EIHx8IENQVV9JRExFXFxuYXJjaC9hcm0vS2NvbmZpZy02MC1cXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmIEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcXG4tLVxcbmFyY2gvYXJtL0tjb25maWc9OTk0PWNvbmZpZyBCTF9TV0lUQ0hFUlxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy05OTYtXFx0ZGVwZW5kcyBvbiBCSUdfTElUVExFIFxcdTAwMjZcXHUwMDI2IE1DUE0gXFx1MDAyNlxcdTAwMjYgSE9UUExVR19DUFUgXFx1MDAyNlxcdTAwMjYgQVJNX0dJQ1xcbmFyY2gvYXJtL0tjb25maWc6OTk3OlxcdHNlbGVjdCBDUFVfUE1cXG5hcmNoL2FybS9LY29uZmlnLTk5OC1cXHRoZWxwXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xMTEtXFx0c2VsZWN0IENPTU1PTl9DTEtcXG5hcmNoL2FybTY0L0tjb25maWc6MTEyOlxcdHNlbGVjdCBDUFVfUE0gaWYgKFNVU1BFTkQgfHwgQ1BVX0lETEUpXFxuYXJjaC9hcm02NC9LY29uZmlnLTExMy1cXHRzZWxlY3QgQ1BVTUFTS19PRkZTVEFDSyBpZiBOUl9DUFVTIFxcdTAwM2UgMjU2XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04Ny1cXHRzZWxlY3QgQ09NTU9OX0NMS1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODg6XFx0c2VsZWN0IENQVV9QTVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODktXFx0c2VsZWN0IEVEQUNfU1VQUE9SVFxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9Mj1jb25maWcgTUlQU1xcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMzUtXFx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmIChUQVJHRVRfSVNBX1JFViBcXHUwMDNjIDEpXFxuYXJjaC9taXBzL0tjb25maWc6MzY6XFx0c2VsZWN0IENQVV9QTSBpZiBDUFVfSURMRSB8fCBTVVNQRU5EXFxuYXJjaC9taXBzL0tjb25maWctMzctXFx0c2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQgaWYgITY0QklUXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctOTgtXFx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFSSVNDVl9JU0FfWkJCXFxuYXJjaC9yaXNjdi9LY29uZmlnOjk5OlxcdHNlbGVjdCBDUFVfUE0gaWYgQ1BVX0lETEUgfHwgSElCRVJOQVRJT04gfHwgU1VTUEVORFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMDAtXFx0c2VsZWN0IERZTkFNSUNfRlRSQUNFIGlmIEZVTkNUSU9OX1RSQUNFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0NzoyMC4wNzA1NzQ1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTY2MjQ4NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBBSUEgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGBDUFVfUE1gIG9uIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBJdCdzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYENQVV9JRExFYCwgYEhJQkVSTkFUSU9OYCwgb3IgYFNVU1BFTkRgIGFyZSBlbmFibGVkLCBtZWFuaW5nIGl0J3MgYXZhaWxhYmxlIGFuZCAqdXNlZCogd2l0aGluIHRoaXMgY29udGV4dC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaDsgaXQgbW9kaWZpZXMgUklTQy1WIEtWTSBBSUEgc3VwcG9ydCwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGEgQ1BVIFBNIG5vdGlmaWVyLiBUaGUgY2hhbmdlcyBjZW50ZXIgYXJvdW5kIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLCB3aGVyZSBib29sZWFuIHBhcmFtZXRlcnMgbm93IGRpY3RhdGUgZWl0aGVyIGEgZnVsbCBjbGVhbnVwIG9yIGEgbGlnaHR3ZWlnaHQgQ1NSIHNhdmUvcmVzdG9yZS4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBmb3IgZnV6emluZy4gV2UgaGF2ZSBjbGVhciBmdW5jdGlvbnMgdG8gdGFyZ2V0LlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5OiBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYW5kIGFsc28gdGhlIG5ldyBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAuXG5cbkZvciBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgYEtWTWAgYW5kIGBDUFVfUE1gIGVuYWJsZWQuIFNpbmNlIGBSSVNDVmAgaXMgaW1wbGllZCwgSSdtIGdvb2QgdGhlcmUuIEhvd2V2ZXIsIHNpbmNlIGBDUFVfUE1gIGlzIHNlbGVjdGVkLCBub3QgcHJvbXB0ZWQsIGJ5IGBDUFVfSURMRWAsIGBISUJFUk5BVElPTmAsIG9yIGBTVVNQRU5EYCwgSSBtaWdodCBuZWVkIHRvIG1ha2Ugc3VyZSBvbmUgb2YgdGhvc2UgaXMgZW5hYmxlZCB0byBnZXQgaXQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGtlcm5lbC9wb3dlci9LY29uZmlnYCB0byBiZSBzdXJlLiBJIG1heSBuZWVkIHRvIHNwZWNpZmljYWxseSBlbmFibGUgYENQVV9JRExFYCBvciBgU1VTUEVORGAgdG8gZW5zdXJlIGBDUFVfUE1gIGlzIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MjYuMDM2ODI1OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTYzODM1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVV9QTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2Nza3kvS2NvbmZpZz0yMzI9Y2hvaWNlXFxuLS1cXG5hcmNoL2Nza3kvS2NvbmZpZy0yMzctXFxuYXJjaC9jc2t5L0tjb25maWc6MjM4OmNvbmZpZyBDUFVfUE1VX05PTkVcXG5hcmNoL2Nza3kvS2NvbmZpZy0yMzktXFx0Ym9vbCBcXFwiTm9uZVxcXCJcXG4tLVxcbmFyY2gvY3NreS9LY29uZmlnPTI0Nj1jaG9pY2VcXG4tLVxcbmFyY2gvY3NreS9LY29uZmlnLTI0OS1cXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTA6Y29uZmlnIENQVV9QTV9OT05FXFxuYXJjaC9jc2t5L0tjb25maWctMjUxLVxcdGJvb2wgXFxcIk5vbmVcXFwiXFxuYXJjaC9jc2t5L0tjb25maWctMjUyLVxcbmFyY2gvY3NreS9LY29uZmlnOjI1Mzpjb25maWcgQ1BVX1BNX1dBSVRcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTQtXFx0Ym9vbCBcXFwid2FpdFxcXCJcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTUtXFxuYXJjaC9jc2t5L0tjb25maWc6MjU2OmNvbmZpZyBDUFVfUE1fRE9aRVxcbmFyY2gvY3NreS9LY29uZmlnLTI1Ny1cXHRib29sIFxcXCJkb3plXFxcIlxcbmFyY2gvY3NreS9LY29uZmlnLTI1OC1cXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTk6Y29uZmlnIENQVV9QTV9TVE9QXFxuYXJjaC9jc2t5L0tjb25maWctMjYwLVxcdGJvb2wgXFxcInN0b3BcXFwiXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zODU9Y29uZmlnIFBNX0dFTkVSSUNfRE9NQUlOU19PRlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzg4LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OTpjb25maWcgQ1BVX1BNXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzkwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MjguODkzMjI0NjU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzY1ODAwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRW5hYmxpbmcgTG9naWMgZm9yIENQVSBQb3dlciBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYENQVV9QTWAgaXMgb25lIG9mIHRob3NlIHRoYXQncyAqb25seSogYnJvdWdodCBpbiBieSBhIGBzZWxlY3RgIHN0YXRlbWVudCDigJMgaXQgZG9lc24ndCBnZXQgYSBkaXJlY3QgcHJvbXB0IG9mIGl0cyBvd24uIFRoYXQgbWVhbnMgaWYgSSB3YW50IHRvIGFjdHVhbGx5ICp1c2UqIGl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHNvbWV0aGluZyB0aGF0IHNlbGVjdHMgaXQgaXMgZW5hYmxlZC4gUmlnaHQsIG1ha2VzIHNlbnNlLlxuXG5TbywgaG93IGRvIEkgZ28gYWJvdXQgdGhhdD8gV2VsbCwgbG9va2luZyBhdCBpdCwgaXQgc2VlbXMgdGhhdCBlaXRoZXIgYFNVU1BFTkRgIG9yIGBDUFVfSURMRWAgc2hvdWxkIGRvIHRoZSB0cmljay4gU2luY2UgSSBhbSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGVpdGhlciBvZiB0aGVtIGlzIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCB3YXksIHRoZSBkZXBlbmRlbmN5IGZvciBgQ1BVX1BNYCBpcyBtZXQsIGFuZCBJIGNhbiBiZSBzdXJlIEknbSBnZXR0aW5nIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmVzIEkgd2FudC4gTm93IHRvIGRpZyBpbnRvIGBTVVNQRU5EYCBhbmQgYENQVV9JRExFYCB0byBjb25maXJtIHRoZXkgYXJlIHN1aXRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY5MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAxOjQ3OjMyLjM2OTgwNzA2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxODAyNTAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1VTUEVORFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcG93ZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjI6Y29uZmlnIFNVU1BFTkRcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlN1c3BlbmQgdG8gUkFNIGFuZCBzdGFuZGJ5XFxcIlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTAtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6MTE6Y29uZmlnIFNVU1BFTkRfRlJFRVpFUlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEyLVxcdGJvb2wgXFxcIkVuYWJsZSBmcmVlemVyIGZvciBzdXNwZW5kIHRvIFJBTS9zdGFuZGJ5XFxcIiBcXFxcXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0yMS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoyMjpjb25maWcgU1VTUEVORF9TS0lQX1NZTkNcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0yMy1cXHRib29sIFxcXCJTa2lwIGtlcm5lbCdzIHN5c19zeW5jKCkgb24gc3VzcGVuZCB0byBSQU0vc3RhbmRieVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MzUuMjg3ODM5MTIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjM3ODUwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyBTeXN0ZW0gU3RhdGVzKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBzeXN0ZW0gc3RhdGVzIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCdzIGF2YWlsYWJsZSB0byBpbnRlcnJvZ2F0ZS4gRmlyc3QsIHRoZSBgU1VTUEVORGAgc3RhdGUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgc2luY2UgdGhlcmUncyBhIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIGxpc3QgaXQgYW5kIGV4dHJhY3QgcmVsZXZhbnQgaW5mb3JtYXRpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBOb3csIHNpbmNlIHdlJ3JlIGxvb2tpbmcgYXQgc3lzdGVtIHBvd2VyIG1hbmFnZW1lbnQsIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgQ1BVX0lETEVgLiBJIG5lZWQgdG8gYXNzZXNzIGl0cyBiZWhhdmlvciBhbmQgd2hhdCBtZXRyaWNzIHdlIGhhdmUgYWNjZXNzIHRvIHJlbGF0ZWQgdG8gQ1BVIGlkbGVuZXNzLCBhcyB0aGF0IGlzIGxpa2VseSB0aGUgbmV4dCBsb2dpY2FsIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNDYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0NzozOC42MTE2MjY1NzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTI0OTIxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVV9JRExFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3B1aWRsZS9LY29uZmlnPTI9bWVudSBcXFwiQ1BVIElkbGVcXFwiXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMy1cXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZzo0OmNvbmZpZyBDUFVfSURMRVxcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTUtXFx0Ym9vbCBcXFwiQ1BVIGlkbGUgUE0gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnPTE2PWlmIENQVV9JRExFXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMTctXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MTg6Y29uZmlnIENQVV9JRExFX01VTFRJUExFX0RSSVZFUlNcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0xOS1cXHRib29sXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMjAtXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MjE6Y29uZmlnIENQVV9JRExFX0dPVl9MQURERVJcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJMYWRkZXIgZ292ZXJub3IgKGZvciBwZXJpb2RpYyB0aW1lciB0aWNrKVxcXCJcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yMy1cXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZzoyNDpjb25maWcgQ1BVX0lETEVfR09WX01FTlVcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJNZW51IGdvdmVybm9yIChmb3IgdGlja2xlc3Mgc3lzdGVtKVxcXCJcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yNi1cXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZzoyNzpjb25maWcgQ1BVX0lETEVfR09WX1RFT1xcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIlRpbWVyIGV2ZW50cyBvcmllbnRlZCAoVEVPKSBnb3Zlcm5vciAoZm9yIHRpY2tsZXNzIHN5c3RlbXMpXFxcIlxcbi0tXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMzUtXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MzY6Y29uZmlnIENQVV9JRExFX0dPVl9IQUxUUE9MTFxcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIkhhbHRwb2xsIGdvdmVybm9yIChmb3IgdmlydHVhbGl6ZWQgc3lzdGVtcylcXFwiXFxuLS1cXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZz0xODc9Y29uZmlnIENQVV9GUkVRX1RIRVJNQUxcXG4tLVxcbmRyaXZlcnMvdGhlcm1hbC9LY29uZmlnLTE5Ny1cXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZzoxOTg6Y29uZmlnIENQVV9JRExFX1RIRVJNQUxcXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZy0xOTktXFx0Ym9vbCBcXFwiQ1BVIGlkbGUgY29vbGluZyBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAxOjQ3OjQxLjQwNDE0MDc0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQzMzY0Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRyaWdnZXJzIHdoZW4gYENQVV9JRExFYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGdvdCBhIHByb21wdCwgc28gaXQncyBhIHZhbGlkIGNvbmZpZyBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYEtWTWAsIGBTVVNQRU5EYCwgYW5kIGBDUFVfSURMRWAgYXJlIGFsbCBlbmFibGVkIHRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLlxuXG5XYWl0LCBpdCBhbHNvIHRvdWNoZXMgYGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgIGFuZCBga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGR1cmluZyBLVk0gaW5pdGlhbGl6YXRpb24gYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIFNvLCB0aGUga2V5IGhlcmUgaXMgbGlrZWx5IGZ1enppbmcgdGhlIEtWTSBmdW5jdGlvbmFsaXR5IG9uIFJJU0MtVi4gVGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBpcy5cblxuSGVyZSdzIG15IGRpc3RpbGxlZCB1bmRlcnN0YW5kaW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBpcyB0b3VjaGluZyBjcnVjaWFsIEtWTSBhbmQgcG93ZXIgbWFuYWdlbWVudCBjb2RlLlxuKiAgICoqRm9jdXMgU3ltYm9scyoqOiBJJ20gZ29pbmcgdG8gcHV0IG15IGZvY3VzIG9uIHRoZXNlOlxuICAgICogICBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgXG4gICAgKiAgIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgXG4gICAgKiAgIGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYFxuXG4qICAgKipFbmFibGVDb25maWdzKio6IEknbGwgbWFrZSBzdXJlIHRoZXNlIGFyZSBlbmFibGVkIGR1cmluZyB0ZXN0aW5nOlxuICAgICogICBgS1ZNYFxuICAgICogICBgU1VTUEVORGBcbiAgICAqICAgYENQVV9JRExFYFxuXG4qKlJlYXNvbmluZzoqKlxuXG5UaGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBSSVNDLVYgS1ZNIEFJQSB0byBtYW5hZ2UgQ1BVIGlkbGUgc3RhdGVzIHdoZW4gdGhlIENQVSBpcyBpbiBhIG5vbi1yZXRlbnRpb24gc3RhdGUuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGEgQ1BVIFBNIG5vdGlmaWVyLiBUaGF0IG5vdGlmaWVyIGlzIGNyaXRpY2FsIGFzIGl0IHRyaWdnZXJzIGNhbGxzIHRvIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBhcmd1bWVudCwgd2hpY2ggaXMgdml0YWwgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhpcyBhbGwgbG9va3MgbGlrZSBmdW5kYW1lbnRhbCBrZXJuZWwgbG9naWMgdGhhdCdzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24gb3IgdGVhcmRvd24uIFRoaXMgYXJlYSBuZWVkcyBzZXJpb3VzIGF0dGVudGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgcmVzdWx0IGluIHRoZSBDUFUgZW50ZXJpbmcgYW5kIGxlYXZpbmcgYSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGUgdG8gY29uc3RydWN0IHN1aXRhYmxlIGZ1enppbmcgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MjcsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAxOjQ3OjQ4LjI0NzUwNzc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4ODgwMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlNVU1BFTkRcIixcbiAgICBcIkNQVV9JRExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X2FpYV9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZGlzYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgc3VwcG9ydCB0byBoYW5kbGUgQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgdGhhdCBjYWxscyBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCB3aXRoIGEgbmV3IGBmdWxsX2NsZWFudXBgIGJvb2xlYW4gcGFyYW1ldGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZHVyaW5nIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyBhbmQgS1ZNIGluaXRpYWxpemF0aW9uL3RlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiU1VTUEVORFwiLFxuICAgIFwiQ1BVX0lETEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfYWlhX2VuYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9kaXNhYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowktxvk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 01:38:19 +0000 UTC FinishedAt: 2026-06-25 01:47:50 +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": "52738352a6f29279e15285fcb7b50241ef867e27", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "SUSPEND", "CPU_IDLE" ], "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": "52738352a6f29279e15285fcb7b50241ef867e27", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "SUSPEND", "CPU_IDLE" ], "series_id": "50eafa02-8c4a-4160-a274-dac74e5dee8e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_aia_enable", "kvm_riscv_aia_disable", "kvm_riscv_cpu_pm_notifier" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNjc1NDgxNTNkZWVlODAzMjNhMzI1ZWIyNTg3YzNhYmYyZTY5ZWU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMDE6NDY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxuaW5kZXggYzY3ZWM1YWMwYTE0NmIuLjdjMWMzMjUwNTk4ZmIwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXG5AQCAtMTY1LDggJiM0MzsxNjUsMTkgQEAgaW50IGt2bV9yaXNjdl9haWFfYWxsb2NfaGdlaShpbnQgY3B1LCBzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyLFxuIFx0XHRcdCAgICAgdm9pZCBfX2lvbWVtICoqaGdlaV92YSwgcGh5c19hZGRyX3QgKmhnZWlfcGEpO1xuIHZvaWQga3ZtX3Jpc2N2X2FpYV9mcmVlX2hnZWkoaW50IGNwdSwgaW50IGhnZWkpO1xuIFxuLXZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCk7XG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZCk7XG4mIzQzOy8qKlxuJiM0MzsgKiBrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpIC0gRW5hYmxlIEFJQSBzdXBwb3J0IG9uIGN1cnJlbnQgQ1BVXG4mIzQzOyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGluaXQgKENQVSBob3RwbHVnL21vZHVsZSBsb2FkKSxcbiYjNDM7ICogICAgICAgICAgICAgICAgZmFsc2UgPSBsaWdodHdlaWdodCBDU1IgcmVzdG9yZSAoQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSByZXN1bWUpXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKSAtIERpc2FibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcbiYjNDM7ICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgY2xlYW51cCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGV4aXQpLFxuJiM0MzsgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiBzYXZlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIGVudHJ5KVxuJiM0MzsgKi9cbiYjNDM7dm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoYm9vbCBmdWxsX2NsZWFudXApO1xuIGludCBrdm1fcmlzY3ZfYWlhX2luaXQodm9pZCk7XG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2V4aXQodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuaW5kZXggYmFmYjAwOWM1Y2U1NTkuLjgyODEyNDkzYWM2ODRhIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5AQCAtNTMyLDUwICYjNDM7NTMyLDYxIEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbiBcdGZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsIFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbi1cdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xuIFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRpbnQgYWlhX25yX2hnZWk7XG4gXG4gXHRpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdjID0gaW1zaWNfZ2V0X2dsb2JhbF9jb25maWcoKTtcbi1cdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cdTAwM2Vsb2NhbCkgOiBOVUxMO1xuIFx0aGdjdHJsID0gdGhpc19jcHVfcHRyKFx1MDAyNmFpYV9oZ2VpKTtcbiBcbi1cdC8qIEZpZ3VyZS1vdXQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUgKi9cbi1cdGNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpO1xuLVx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcbi1cdGNzcl93cml0ZShDU1JfSEdFSUUsIDApO1xuLVx0aWYgKGhnY3RybC1cdTAwM2Vucl9oZ2VpKVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaS0tO1xuJiM0MztcdGlmIChmdWxsX2NsZWFudXApIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xuJiM0MztcdFx0aW50IGFpYV9ucl9oZ2VpO1xuIFxuLVx0Lypcbi1cdCAqIE51bWJlciBvZiB1c2FibGUgcGVyLUhBUlQgSEdFSSBsaW5lcyBzaG91bGQgYmUgbWluaW11bSBvZlxuLVx0ICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLlxuLVx0ICovXG4tXHRpZiAobGMpXG4tXHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gbWluKCh1bG9uZyloZ2N0cmwtXHUwMDNlbnJfaGdlaSwgbGMtXHUwMDNlbnJfZ3Vlc3RfZmlsZXMpO1xuLVx0ZWxzZVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IDA7XG4mIzQzO1x0XHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XG4mIzQzO1x0XHRsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtXHUwMDNlbG9jYWwpIDogTlVMTDtcbiBcbi1cdC8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIElNU0lDIGd1ZXN0IGZpbGVzIGFjcm9zcyBhbGwgSEFSVHMgKi9cbi1cdGFpYV9ucl9oZ2VpID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTtcbi1cdGRvIHtcbi1cdFx0aWYgKGFpYV9ucl9oZ2VpIFx1MDAzYz0gaGdjdHJsLVx1MDAzZW5yX2hnZWkpXG4tXHRcdFx0YnJlYWs7XG4tXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSwgXHUwMDI2YWlhX25yX2hnZWksIGhnY3RybC1cdTAwM2Vucl9oZ2VpKSk7XG4mIzQzO1x0XHQvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovXG4mIzQzO1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcbiYjNDM7XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gZmxzX2xvbmcoY3NyX3JlYWQoQ1NSX0hHRUlFKSk7XG4mIzQzO1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAwKTtcbiYjNDM7XHRcdGlmIChoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWktLTtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0aWYgKCFoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcbi1cdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/IEdFTk1BU0tfVUxMKGhnY3RybC1cdTAwM2Vucl9oZ2VpLCAxKSA6IDA7XG4tXHRcdGhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCA9IHRydWU7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXG4mIzQzO1x0XHQgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChsYylcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC1cdTAwM2Vucl9oZ2VpLCBsYy1cdTAwM2Vucl9ndWVzdF9maWxlcyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBJTVNJQyBndWVzdCBmaWxlcyBhY3Jvc3MgYWxsIEhBUlRzICovXG4mIzQzO1x0XHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdGlmIChhaWFfbnJfaGdlaSBcdTAwM2M9IGhnY3RybC1cdTAwM2Vucl9oZ2VpKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWksIFx1MDAyNmFpYV9ucl9oZ2VpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBoZ2N0cmwtXHUwMDNlbnJfaGdlaSkpO1xuJiM0MztcbiYjNDM7XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/XG4mIzQzO1x0XHRcdFx0XHQgICAgICBHRU5NQVNLX1VMTChoZ2N0cmwtXHUwMDNlbnJfaGdlaSwgMSkgOlxuJiM0MztcdFx0XHRcdFx0ICAgICAgMDtcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgfmhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcCk7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuLVx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8xLCAweDApO1xuQEAgLTU4Nyw2NSAmIzQzOzU5OCw3MyBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8ySCwgMHgwKTtcbiAjZW5kaWZcbiBcbi1cdC8qIEVuYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXG4tXHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXG4tXHRcdFx0ICBpcnFfZ2V0X3RyaWdnZXJfdHlwZShoZ2VpX3BhcmVudF9pcnEpKTtcbi1cdGNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbiYjNDM7XHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4mIzQzO1x0XHQvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuJiM0MztcdFx0ZW5hYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLFxuJiM0MztcdFx0XHRcdCAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7XG4mIzQzO1x0XHRjc3Jfc2V0KENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEVuYWJsZSBJUlEgZmlsdGVyaW5nIGZvciBvdmVyZmxvdyBpbnRlcnJ1cHQgb25seSBpZiBzc2NvZnBtZiBpcyBwcmVzZW50ICovXG4gXHRpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSlcbiBcdFx0Y3NyX3NldChDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpO1xuIH1cbiBcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKVxuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cClcbiB7XG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsO1xuIFxuIFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRyZXR1cm47XG4tXHRoZ2N0cmwgPSBnZXRfY3B1X3B0cihcdTAwMjZhaWFfaGdlaSk7XG4gXG4gXHRpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSlcbiBcdFx0Y3NyX2NsZWFyKENTUl9IVklFTiwgQklUKElSUV9QTVVfT1ZGKSk7XG4tXHQvKiBEaXNhYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cbi1cdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xuLVx0ZGlzYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSk7XG4tXG4tXHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFxuLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuJiM0MztcdFx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXG4mIzQzO1x0XHRjc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbiYjNDM7XHRcdGRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpO1xuJiM0MztcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dmNwdSA9IGhnY3RybC1cdTAwM2Vvd25lcnNbaV07XG4tXHRcdGlmICghdmNwdSlcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBXZSByZWxlYXNlIGhnY3RybC1cdTAwM2Vsb2NrIGJlZm9yZSBub3RpZnlpbmcgSU1TSUNcbi1cdFx0ICogc28gdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy5cbi1cdFx0ICovXG4tXHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuJiM0MztcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuJiM0MztcdFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcbiBcbi1cdFx0LyogTm90aWZ5IElNU0lDICovXG4tXHRcdGt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpO1xuJiM0MztcdFx0aGdjdHJsID0gZ2V0X2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuJiM0MztcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4tXHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuLVx0XHQgKi9cbi1cdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuLVx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4tXHRcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dmNwdSA9IGhnY3RybC1cdTAwM2Vvd25lcnNbaV07XG4mIzQzO1x0XHRcdGlmICghdmNwdSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIHJlbGVhc2UgaGdjdHJsLVx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xuJiM0MztcdFx0XHQgKiBzbyB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vdGlmeSBJTVNJQyAqL1xuJiM0MztcdFx0XHRrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4mIzQzO1x0XHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuJiM0MztcdFx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4mIzQzO1x0XHRcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdH1cbiBcbi1cdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0cHV0X2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIFx0fVxuLVxuLVx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cbi1cdHB1dF9jcHVfcHRyKFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21haW4uYyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xuaW5kZXggMDkyNGM3NTEwMGEyZDAuLjQxZWY5MWVhMzkyMThjIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdV9wbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuQEAgLTMzLDE0ICYjNDM7MzQsOSBAQCBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBcbi1pbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuJiM0MzsvKiBJbml0aWFsaXplIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9ubGluZSBhbmQgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSAqL1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2VuYWJsZSh2b2lkKVxuIHtcbi1cdGludCByYztcbi1cbi1cdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XG4tXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbi1cbiBcdGNzcl93cml0ZShDU1JfSEVERUxFRywgMCk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xuIFxuQEAgLTQ4LDE2ICYjNDM7NDQsMTEgQEAgaW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiBcdGNzcl93cml0ZShDU1JfSENPVU5URVJFTiwgMHgwMik7XG4gXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVAsIDApO1xuLVxuLVx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoKTtcbi1cbi1cdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzOy8qIENsZWFyIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9mZmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSAqL1xuJiM0MztzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2Rpc2FibGUodm9pZClcbiB7XG4tXHRrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKTtcbi1cbiBcdC8qXG4gXHQgKiBBZnRlciBjbGVhcmluZyB0aGUgaGlkZWxlZyBDU1IsIHRoZSBob3N0IGtlcm5lbCB3aWxsIHJlY2VpdmVcbiBcdCAqIHNwdXJpb3VzIGludGVycnVwdHMgaWYgaHZpcCBDU1IgaGFzIHBlbmRpbmcgaW50ZXJydXB0cyBhbmQgdGhlXG5AQCAtNjgsMTAgJiM0Mzs1OSw2MCBAQCB2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVAsIDApO1xuIFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcbiBcdGNzcl93cml0ZShDU1JfSElERUxFRywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmM7XG4gXG4mIzQzO1x0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XG4mIzQzO1x0a3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSk7XG4mIzQzO1x0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XG4gXHRrdm1fcmlzY3ZfbmFjbF9kaXNhYmxlKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSYjMzk7c1xuJiM0MztcdCAqIHN5c2NvcmUgb3BzIHdpbGwgaGFuZGxlIHRoZSBzdGF0ZSBkdXJpbmcgc3lzdGVtIHN1c3BlbmQpLFxuJiM0MztcdCAqIGlnbm9yZSBDUFVfUE0gZXZlbnRzIHdoZW4gYSBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUgaXMgaW5cbiYjNDM7XHQgKiBwcm9ncmVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9TVVNQRU5EKVxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNtZCkge1xuJiM0MztcdGNhc2UgQ1BVX1BNX0VYSVQ6XG4mIzQzO1x0XHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xuJiM0MztcdFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpO1xuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XHRjYXNlIENQVV9QTV9FTlRFUjpcbiYjNDM7XHRcdGt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSk7XG4mIzQzO1x0XHRrdm1fcmlzY3ZfY3NyX2Rpc2FibGUoKTtcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfT0s7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9yaXNjdl9jcHVfcG1fbmIgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdGVhcmRvd24odm9pZClcbiB7XG4gXHRrdm1fcmlzY3ZfYWlhX2V4aXQoKTtcbkBAIC0xNzIsMjIgJiM0MzsyMTMsMzYgQEAgc3RhdGljIGludCBfX2luaXQgcmlzY3Zfa3ZtX2luaXQodm9pZClcbiBcbiBcdGt2bV9yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcygpO1xuIFxuLVx0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuLVx0aWYgKHJjKSB7XG4tXHRcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xuLVx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0LyogUmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyIGZvciBDUFUgaWRsZSBub24tcmV0ZW50aW9uIHN0YXRlcyAqL1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKSB7XG4mIzQzO1x0XHRyYyA9IGNwdV9wbV9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRrdm1fZXJyKFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBDUFUgUE0gbm90aWZpZXI6ICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3RlYXJkb3duO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4tXHRcdGt2bV9pbmZvKFwmIzM0O0FJQSBhdmFpbGFibGUgd2l0aCAlZCBndWVzdCBleHRlcm5hbCBpbnRlcnJ1cHRzXFxuXCYjMzQ7LFxuLVx0XHRcdCBhdG9taWNfcmVhZChcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpKTtcbiYjNDM7XHRyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9jcHVfcG07XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl91bnJlZ2lzdGVyX2NwdV9wbTpcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcbiYjNDM7XHRcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xuJiM0MztlcnJfdGVhcmRvd246XG4mIzQzO1x0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuIH1cbiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHJpc2N2X2t2bV9leGl0KHZvaWQpXG4ge1xuJiM0MztcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXG4mIzQzO1x0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbiYjNDM7XG4gXHRrdm1fZXhpdCgpO1xuIFxuIFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1NVU1BFTkQmIzM0OywKICAgICYjMzQ7Q1BVX0lETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUklTQy1WIEtWTSBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIHN1cHBvcnQgdG8gaGFuZGxlIENQVSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGVzLiBJdCBpbnRyb2R1Y2VzIGEgQ1BVIFBNIG5vdGlmaWVyIHRoYXQgY2FsbHMgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAgd2l0aCBhIG5ldyBgZnVsbF9jbGVhbnVwYCBib29sZWFuIHBhcmFtZXRlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgYW5kIEtWTSBpbml0aWFsaXphdGlvbi90ZWFyZG93bi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzY3NTQ4MTUzZGVlZTgwMzIzYTMyNWViMjU4N2MzYWJmMmU2OWVlOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDAxOjQ2OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaAppbmRleCBjNjdlYzVhYzBhMTQ2Yi4uN2MxYzMyNTA1OThmYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oCkBAIC0xNjUsOCAmIzQzOzE2NSwxOSBAQCBpbnQga3ZtX3Jpc2N2X2FpYV9hbGxvY19oZ2VpKGludCBjcHUsIHN0cnVjdCBrdm1fdmNwdSAqb3duZXIsCiAJCQkgICAgIHZvaWQgX19pb21lbSAqKmhnZWlfdmEsIHBoeXNfYWRkcl90ICpoZ2VpX3BhKTsKIHZvaWQga3ZtX3Jpc2N2X2FpYV9mcmVlX2hnZWkoaW50IGNwdSwgaW50IGhnZWkpOwogCi12b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpOwotdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZCk7CiYjNDM7LyoqCiYjNDM7ICoga3ZtX3Jpc2N2X2FpYV9lbmFibGUoKSAtIEVuYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVQomIzQzOyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGluaXQgKENQVSBob3RwbHVnL21vZHVsZSBsb2FkKSwKJiM0MzsgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiByZXN0b3JlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSkKJiM0MzsgKi8KJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKSAtIERpc2FibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFUKJiM0MzsgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBjbGVhbnVwIChDUFUgaG90cGx1Zy9tb2R1bGUgZXhpdCksCiYjNDM7ICogICAgICAgICAgICAgICAgZmFsc2UgPSBsaWdodHdlaWdodCBDU1Igc2F2ZSAoQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSkKJiM0MzsgKi8KJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cCk7CiBpbnQga3ZtX3Jpc2N2X2FpYV9pbml0KHZvaWQpOwogdm9pZCBrdm1fcmlzY3ZfYWlhX2V4aXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmMKaW5kZXggYmFmYjAwOWM1Y2U1NTkuLjgyODEyNDkzYWM2ODRhIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9haWEuYwpAQCAtNTMyLDUwICYjNDM7NTMyLDYxIEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZCkKIAlmcmVlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLCAmYW1wO2FpYV9oZ2VpKTsKIH0KIAotdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKQomIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApCiB7Ci0JY29uc3Qgc3RydWN0IGltc2ljX2dsb2JhbF9jb25maWcgKmdjOwotCWNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjOwogCXN0cnVjdCBhaWFfaGdlaV9jb250cm9sICpoZ2N0cmw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgYWlhX25yX2hnZWk7CiAKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybjsKIAotCWdjID0gaW1zaWNfZ2V0X2dsb2JhbF9jb25maWcoKTsKLQlsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtJmd0O2xvY2FsKSA6IE5VTEw7CiAJaGdjdHJsID0gdGhpc19jcHVfcHRyKCZhbXA7YWlhX2hnZWkpOwogCi0JLyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqLwotCWNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpOwotCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpOwotCWNzcl93cml0ZShDU1JfSEdFSUUsIDApOwotCWlmIChoZ2N0cmwtJmd0O25yX2hnZWkpCi0JCWhnY3RybC0mZ3Q7bnJfaGdlaS0tOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaW1zaWNfZ2xvYmFsX2NvbmZpZyAqZ2M7CiYjNDM7CQljb25zdCBzdHJ1Y3QgaW1zaWNfbG9jYWxfY29uZmlnICpsYzsKJiM0MzsJCWludCBhaWFfbnJfaGdlaTsKIAotCS8qCi0JICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mCi0JICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLgotCSAqLwotCWlmIChsYykKLQkJaGdjdHJsLSZndDtucl9oZ2VpID0gbWluKCh1bG9uZyloZ2N0cmwtJmd0O25yX2hnZWksIGxjLSZndDtucl9ndWVzdF9maWxlcyk7Ci0JZWxzZQotCQloZ2N0cmwtJmd0O25yX2hnZWkgPSAwOwomIzQzOwkJZ2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpOwomIzQzOwkJbGMgPSAoZ2MpID8gdGhpc19jcHVfcHRyKGdjLSZndDtsb2NhbCkgOiBOVUxMOwogCi0JLyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqLwotCWFpYV9ucl9oZ2VpID0gYXRvbWljX3JlYWQoJmFtcDtrdm1fcmlzY3ZfYWlhX25yX2hnZWkpOwotCWRvIHsKLQkJaWYgKGFpYV9ucl9oZ2VpICZsdDs9IGhnY3RybC0mZ3Q7bnJfaGdlaSkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoJmFtcDtrdm1fcmlzY3ZfYWlhX25yX2hnZWksICZhbXA7YWlhX25yX2hnZWksIGhnY3RybC0mZ3Q7bnJfaGdlaSkpOwomIzQzOwkJLyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqLwomIzQzOwkJY3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7CiYjNDM7CQloZ2N0cmwtJmd0O25yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTsKJiM0MzsJCWNzcl93cml0ZShDU1JfSEdFSUUsIDApOwomIzQzOwkJaWYgKGhnY3RybC0mZ3Q7bnJfaGdlaSkKJiM0MzsJCQloZ2N0cmwtJmd0O25yX2hnZWktLTsKIAotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwotCWlmICghaGdjdHJsLSZndDtmcmVlX2JpdG1hcF9pbml0aWFsaXplZCkgewotCQloZ2N0cmwtJmd0O2ZyZWVfYml0bWFwID0gKGhnY3RybC0mZ3Q7bnJfaGdlaSkgPyBHRU5NQVNLX1VMTChoZ2N0cmwtJmd0O25yX2hnZWksIDEpIDogMDsKLQkJaGdjdHJsLSZndDtmcmVlX2JpdG1hcF9pbml0aWFsaXplZCA9IHRydWU7CiYjNDM7CQkvKgomIzQzOwkJICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mCiYjNDM7CQkgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChsYykKJiM0MzsJCQloZ2N0cmwtJmd0O25yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC0mZ3Q7bnJfaGdlaSwgbGMtJmd0O25yX2d1ZXN0X2ZpbGVzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQloZ2N0cmwtJmd0O25yX2hnZWkgPSAwOwomIzQzOwomIzQzOwkJLyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqLwomIzQzOwkJYWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZCgmYW1wO2t2bV9yaXNjdl9haWFfbnJfaGdlaSk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJaWYgKGFpYV9ucl9oZ2VpICZsdDs9IGhnY3RybC0mZ3Q7bnJfaGdlaSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKCZhbXA7a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCAmYW1wO2FpYV9ucl9oZ2VpLAomIzQzOwkJCQkJICAgICBoZ2N0cmwtJmd0O25yX2hnZWkpKTsKJiM0MzsKJiM0MzsJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKCFoZ2N0cmwtJmd0O2ZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7CiYjNDM7CQkJaGdjdHJsLSZndDtmcmVlX2JpdG1hcCA9IChoZ2N0cmwtJmd0O25yX2hnZWkpID8KJiM0MzsJCQkJCSAgICAgIEdFTk1BU0tfVUxMKGhnY3RybC0mZ3Q7bnJfaGdlaSwgMSkgOgomIzQzOwkJCQkJICAgICAgMDsKJiM0MzsJCQloZ2N0cmwtJmd0O2ZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWNzcl93cml0ZShDU1JfSEdFSUUsIH5oZ2N0cmwtJmd0O2ZyZWVfYml0bWFwKTsKJiM0MzsJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiAJfQotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiAKIAljc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpOwogCWNzcl93cml0ZShDU1JfSFZJUFJJTzEsIDB4MCk7CkBAIC01ODcsNjUgJiM0Mzs1OTgsNzMgQEAgdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKQogCWNzcl93cml0ZShDU1JfSFZJUFJJTzJILCAweDApOwogI2VuZGlmCiAKLQkvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqLwotCWVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSwKLQkJCSAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7Ci0JY3NyX3NldChDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKSB7CiYjNDM7CQkvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqLwomIzQzOwkJZW5hYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLAomIzQzOwkJCQkgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpOwomIzQzOwkJY3NyX3NldChDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpOwomIzQzOwl9CiYjNDM7CiAJLyogRW5hYmxlIElSUSBmaWx0ZXJpbmcgZm9yIG92ZXJmbG93IGludGVycnVwdCBvbmx5IGlmIHNzY29mcG1mIGlzIHByZXNlbnQgKi8KIAlpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSkKIAkJY3NyX3NldChDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpOwogfQogCi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKQomIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGJvb2wgZnVsbF9jbGVhbnVwKQogewogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBhaWFfaGdlaV9jb250cm9sICpoZ2N0cmw7CiAKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybjsKLQloZ2N0cmwgPSBnZXRfY3B1X3B0cigmYW1wO2FpYV9oZ2VpKTsKIAogCWlmIChfX3Jpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFJJU0NWX0lTQV9FWFRfU1NDT0ZQTUYpKQogCQljc3JfY2xlYXIoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTsKLQkvKiBEaXNhYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi8KLQljc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTsKLQlkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTsKLQotCWNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKGZ1bGxfY2xlYW51cCkgewomIzQzOwkJLyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovCiYjNDM7CQljc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTsKJiM0MzsJCWRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpOwomIzQzOwl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDs9IGhnY3RybC0mZ3Q7bnJfaGdlaTsgaSYjNDM7JiM0MzspIHsKLQkJdmNwdSA9IGhnY3RybC0mZ3Q7b3duZXJzW2ldOwotCQlpZiAoIXZjcHUpCi0JCQljb250aW51ZTsKJiM0MzsJY3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTsKIAotCQkvKgotCQkgKiBXZSByZWxlYXNlIGhnY3RybC0mZ3Q7bG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDCi0JCSAqIHNvIHRoYXQgd2UgZG9uJiMzOTt0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuCi0JCSAqLwotCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKSB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CQlzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsOwogCi0JCS8qIE5vdGlmeSBJTVNJQyAqLwotCQlrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTsKJiM0MzsJCWhnY3RybCA9IGdldF9jcHVfcHRyKCZhbXA7YWlhX2hnZWkpOwomIzQzOwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiAKLQkJLyoKLQkJICogV2FrZXVwIFZDUFUgaWYgaXQgd2FzIGJsb2NrZWQgc28gdGhhdCBpdCBjYW4KLQkJICogcnVuIG9uIG90aGVyIEhBUlRzCi0JCSAqLwotCQlpZiAoY3NyX3JlYWQoQ1NSX0hHRUlFKSAmYW1wOyBCSVQoaSkpIHsKLQkJCWNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7Ci0JCQlrdm1fdmNwdV9raWNrKHZjcHUpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7PSBoZ2N0cmwtJmd0O25yX2hnZWk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdmNwdSA9IGhnY3RybC0mZ3Q7b3duZXJzW2ldOwomIzQzOwkJCWlmICghdmNwdSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXZSByZWxlYXNlIGhnY3RybC0mZ3Q7bG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDCiYjNDM7CQkJICogc28gdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkJCS8qIE5vdGlmeSBJTVNJQyAqLwomIzQzOwkJCWt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogV2FrZXVwIFZDUFUgaWYgaXQgd2FzIGJsb2NrZWQgc28gdGhhdCBpdCBjYW4KJiM0MzsJCQkgKiBydW4gb24gb3RoZXIgSEFSVHMKJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoY3NyX3JlYWQoQ1NSX0hHRUlFKSAmYW1wOyBCSVQoaSkpIHsKJiM0MzsJCQkJY3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTsKJiM0MzsJCQkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiAJCX0KIAotCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlwdXRfY3B1X3B0cigmYW1wO2FpYV9oZ2VpKTsKIAl9Ci0KLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwotCi0JcHV0X2NwdV9wdHIoJmFtcDthaWFfaGdlaSk7CiB9CiAKIGludCBrdm1fcmlzY3ZfYWlhX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21haW4uYyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uYwppbmRleCAwOTI0Yzc1MTAwYTJkMC4uNDFlZjkxZWEzOTIxOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tYWluLmMKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1X3BtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2NwdWZlYXR1cmUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbmFjbC5oJmd0OwpAQCAtMzMsMTQgJiM0MzszNCw5IEBAIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQomIzQzOy8qIEluaXRpYWxpemUgaHlwZXJ2aXNvciBDU1JzIC0gY2FsbGVkIGR1cmluZyBDUFUgb25saW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lICovCiYjNDM7c3RhdGljIHZvaWQga3ZtX3Jpc2N2X2Nzcl9lbmFibGUodm9pZCkKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IGt2bV9yaXNjdl9uYWNsX2VuYWJsZSgpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJY3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTsKIAljc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApOwogCkBAIC00OCwxNiAmIzQzOzQ0LDExIEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiAJY3NyX3dyaXRlKENTUl9IQ09VTlRFUkVOLCAweDAyKTsKIAogCWNzcl93cml0ZShDU1JfSFZJUCwgMCk7Ci0KLQlrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpOwotCi0JcmV0dXJuIDA7CiB9CiAKLXZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKJiM0MzsvKiBDbGVhciBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvZmZsaW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkgKi8KJiM0MztzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2Rpc2FibGUodm9pZCkKIHsKLQlrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKTsKLQogCS8qCiAJICogQWZ0ZXIgY2xlYXJpbmcgdGhlIGhpZGVsZWcgQ1NSLCB0aGUgaG9zdCBrZXJuZWwgd2lsbCByZWNlaXZlCiAJICogc3B1cmlvdXMgaW50ZXJydXB0cyBpZiBodmlwIENTUiBoYXMgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCB0aGUKQEAgLTY4LDEwICYjNDM7NTksNjAgQEAgdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQogCWNzcl93cml0ZShDU1JfSFZJUCwgMCk7CiAJY3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTsKIAljc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApOwomIzQzO30KJiM0MzsKJiM0MztpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQomIzQzO3sKJiM0MzsJaW50IHJjOwogCiYjNDM7CXJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJa3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTsKJiM0MzsJa3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSk7CiYjNDM7CWt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpOwogCWt2bV9yaXNjdl9uYWNsX2Rpc2FibGUoKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSYjMzk7cwomIzQzOwkgKiBzeXNjb3JlIG9wcyB3aWxsIGhhbmRsZSB0aGUgc3RhdGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kKSwKJiM0MzsJICogaWdub3JlIENQVV9QTSBldmVudHMgd2hlbiBhIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSBpcyBpbgomIzQzOwkgKiBwcm9ncmVzcy4KJiM0MzsJICovCiYjNDM7CWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1NVU1BFTkQpCiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoY21kKSB7CiYjNDM7CWNhc2UgQ1BVX1BNX0VYSVQ6CiYjNDM7CQlrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpOwomIzQzOwkJa3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJY2FzZSBDUFVfUE1fRU5URVI6CiYjNDM7CQlrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoZmFsc2UpOwomIzQzOwkJa3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9yaXNjdl9jcHVfcG1fbmIgPSB7CiYjNDM7CS5ub3RpZmllcl9jYWxsID0ga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllciwKJiM0Mzt9OwomIzQzOwogc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3RlYXJkb3duKHZvaWQpCiB7CiAJa3ZtX3Jpc2N2X2FpYV9leGl0KCk7CkBAIC0xNzIsMjIgJiM0MzsyMTMsMzYgQEAgc3RhdGljIGludCBfX2luaXQgcmlzY3Zfa3ZtX2luaXQodm9pZCkKIAogCWt2bV9yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcygpOwogCi0JcmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpOwotCWlmIChyYykgewotCQlrdm1fcmlzY3ZfdGVhcmRvd24oKTsKLQkJcmV0dXJuIHJjOwomIzQzOwkvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKSB7CiYjNDM7CQlyYyA9IGNwdV9wbV9yZWdpc3Rlcl9ub3RpZmllcigmYW1wO2t2bV9yaXNjdl9jcHVfcG1fbmIpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJa3ZtX2VycigmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBDUFUgUE0gbm90aWZpZXI6ICVkXG4mIzM0OywgcmMpOwomIzQzOwkJCWdvdG8gZXJyX3RlYXJkb3duOwomIzQzOwkJfQogCX0KIAotCWlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKQotCQlrdm1faW5mbygmIzM0O0FJQSBhdmFpbGFibGUgd2l0aCAlZCBndWVzdCBleHRlcm5hbCBpbnRlcnJ1cHRzXG4mIzM0OywKLQkJCSBhdG9taWNfcmVhZCgmYW1wO2t2bV9yaXNjdl9haWFfbnJfaGdlaSkpOwomIzQzOwlyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZXJyX3VucmVnaXN0ZXJfY3B1X3BtOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3VucmVnaXN0ZXJfY3B1X3BtOgomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkKJiM0MzsJCWNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKCZhbXA7a3ZtX3Jpc2N2X2NwdV9wbV9uYik7CiYjNDM7ZXJyX3RlYXJkb3duOgomIzQzOwlrdm1fcmlzY3ZfdGVhcmRvd24oKTsKJiM0MzsJcmV0dXJuIHJjOwogfQogbW9kdWxlX2luaXQocmlzY3Zfa3ZtX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmlzY3Zfa3ZtX2V4aXQodm9pZCkKIHsKJiM0MzsJLyogVW5yZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpCiYjNDM7CQljcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcigmYW1wO2t2bV9yaXNjdl9jcHVfcG1fbmIpOwomIzQzOwogCWt2bV9leGl0KCk7CiAKIAlrdm1fcmlzY3ZfdGVhcmRvd24oKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gQUlBIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgUklTQy1WIEtWTSBBSUEgc3VwcG9ydCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIG1vZGlmaWNhdGlvbnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgYGJvb2wgZnVsbF9jbGVhbnVwYCBwYXJhbWV0ZXIgdG8gYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIEl0JiMzOTtzIGFsc28gaW50cm9kdWNpbmcgYSBDUFUgUE0gbm90aWZpZXIsIGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYCwgZGVzaWduZWQgdG8gaGFuZGxlIENQVSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGVzLiBUaGlzIG5vdGlmaWVyIGNhbGxzIHRoZSBBSUEgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25zLCBidXQgKndpdGhvdXQqIHRoZSBmdWxsIGNsZWFudXAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCByZWdpc3RlcnMgdGhlIG5vdGlmaWVyIG9ubHkgaWYgYENPTkZJR19DUFVfUE1gIGlzIGVuYWJsZWQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWw/JiMzNDsgQW5kIHRoZSBhbnN3ZXIgaXMsIHllcywgaXQmIzM5O3MgZnVuY3Rpb25hbDsgaXQmIzM5O3MgZGVmaW5pdGVseSBtb2RpZnlpbmcgS1ZNIFJJU0MtViBDUFUgcG93ZXIgbWFuYWdlbWVudCBoYW5kbGluZy4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGZvciBtZSwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLCBpcywgY2FuIHdlIGZ1enogdGhpcyBlZmZpY2llbnRseT8KClRoZSBvYnZpb3VzIHRyaWdnZXIgaXMgQ1BVIFBNIGV2ZW50cyDigJMgc3BlY2lmaWNhbGx5LCBDUFUgaWRsZSBub24tcmV0ZW50aW9uIHN0YXRlcy4gTm93LCBDUFUgUE0gZXZlbnRzIGFyZSBhIHBvdGVudGlhbCBmdXp6IHRhcmdldCwgSUYgdGhlIGZ1enplciBjYW4gdHJpZ2dlciBDUFUgaWRsZSBvciBzdXNwZW5kLiBTeXprYWxsZXIsIGluIGl0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGRvZXNuJiMzOTt0IHR5cGljYWxseSBkaXJlY3RseSB0cmlnZ2VyIHRob3NlIGV2ZW50czsgSSYjMzk7ZCBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBsaWtlIENQVSBob3RwbHVnIG9yIHN1c3BlbmQvcmVzdW1lIHdlcmUgZW5hYmxlZCwgd2hpY2ggKmNvdWxkKiBpbmRpcmVjdGx5IGV4ZXJjaXNlIHRoaXMgY29kZS4KCkhvd2V2ZXIsIGhlcmUmIzM5O3MgYSB3cmlua2xlOiBJIHNlZSB0aGF0IGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhcmUgYWxzbyBtb2RpZmllZCB0byBwYXNzIGB0cnVlYCB0byBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCEgVGhpcyBpcyBrZXkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgZHVyaW5nIENQVSBob3RwbHVnIG9yIG1vZHVsZSBsb2FkL3VubG9hZC4gVGhpcyBtZWFucyB3ZSBoYXZlIGEgY291cGxlIG9mIGRpZmZlcmVudCBwYXRocyB0byB0aGUgY29kZSwgYW5kIHRoaXMgaXMgZ29vZCBmdXp6aW5nIGZvZGRlciwgc2luY2Ugb25lIG1pZ2h0IGJlIGVhc2llciB0byB0cmlnZ2VyIHRoYW4gdGhlIG90aGVyIQoKU28sIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIGFyZSBjbGVhcmx5IGZ1bmN0aW9uYWwgYW5kIG5vdyB0YWtlIGEgZmxhZyB0byBjb250cm9sIGNsZWFudXAuIEkgbm93IGhhdmUgdHdvIHBvc3NpYmxlIGF2ZW51ZXMgZm9yIGZ1enppbmc6IENQVSBQTSBldmVudHMgKGlkbGUvc3VzcGVuZC9yZXN1bWUpIGFuZCBDUFUgaG90cGx1Zy9tb2R1bGUgbG9hZC4KClRvIGJlIHRob3JvdWdoLCBsZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSYjMzk7bSBleHBlY3RpbmcgYENPTkZJR19LVk1gLCBgQ09ORklHX1JJU0NWYCwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfQ1BVX1BNYCBmb3IgdGhlIG5vdGlmaWVyIHRvIGJlIGVuYWJsZWQuIFRoZW4sIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBjYWxsZ3JhcGggZm9yIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHRvIHNlZSBob3cgZXh0ZW5zaXZlbHkgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl9haWFfZW5hYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oPTE2Nj12b2lkIGt2bV9yaXNjdl9haWFfZnJlZV9oZ2VpKGludCBjcHUsIGludCBoZ2VpKTtcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNjgtLyoqXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaDoxNjk6ICoga3ZtX3Jpc2N2X2FpYV9lbmFibGUoKSAtIEVuYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmgtMTcwLSAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGluaXQgKENQVSBob3RwbHVnL21vZHVsZSBsb2FkKSxcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNzItICovXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaDoxNzM6dm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNzQtXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhLmM9NTI5PXN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWEuYy01MzQtXG5hcmNoL3Jpc2N2L2t2bS9haWEuYzo1MzU6dm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZShib29sIGZ1bGxfY2xlYW51cClcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTUzNi17XG4tLVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jPTY0PWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTcyLVx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcbmFyY2gvcmlzY3Yva3ZtL21haW4uYzo3MzpcdGt2bV9yaXNjdl9haWFfZW5hYmxlKHRydWUpO1xuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTc0LVxuLS1cbmFyY2gvcmlzY3Yva3ZtL21haW4uYz04NT1zdGF0aWMgaW50IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdilcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtOTgtXHRcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM6OTk6XHRcdGt2bV9yaXNjdl9haWFfZW5hYmxlKGZhbHNlKTtcbmFyY2gvcmlzY3Yva3ZtL21haW4uYy0xMDAtXHRcdHJldHVybiBOT1RJRllfT0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTS1SSVNDViBBSUEgRW5hYmxlL0Rpc2FibGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgIGlzIGRyYXdpbmcgbXkgYXR0ZW50aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHNvbWUgcG93ZXIgbWFuYWdlbWVudCBob29rdXAsIGFuZCBjcml0aWNhbGx5LCBpdCYjMzk7cyBjYWxsaW5nIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZShmYWxzZSlgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGZhbHNlKWAuIFRoYXQgbWFrZXMgc2Vuc2UgLSBsaWtlbHkgZGlzYWJsaW5nIHRoZSBBSUEgd2hlbiB0aGUgQ1BVIGlzIGdvaW5nIGludG8gYSBsb3dlciBwb3dlciBzdGF0ZS4gVGhlbiwgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSB2aXJ0dWFsaXphdGlvbiBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbnMgKGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCkgdG8gdG9nZ2xlIEFJQSB3aXRoIHRoZSBgZnVsbF9jbGVhbnVwYCBmbGFnLCBjYWxsaW5nIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSlgLiBSaWdodC4gU28gd2UmIzM5O3ZlIGdvdCBhbiBBSUEgc3RhdGUgY2hhbmdlIHRpZWQgdG8gYm90aCBDUFUgcG93ZXIgbWFuYWdlbWVudCBhbmQgZ2VuZXJhbCB2aXJ0dWFsaXphdGlvbi4KCk5vdywgbXkgbWluZCBzdGFydHMgdG8gd2FuZGVyLiBJcyB0aGlzIGltcGxlbWVudGF0aW9uICpzb3VuZCo/IERvZXMgdGhlIGxvZ2ljIGluIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIGhhbmRsZSB0aGUgZGlmZmVyZW50IGNsZWFudXAvc2V0dXAgYXBwcm9wcmlhdGVseT8gU2VlbXMgbGlrZSB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIHRoZSBgZnVsbF9jbGVhbnVwYCBmbGFnLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhpcyBmdXp6LWFibGU/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgdG91Y2hlcyBzb21lIGtleSBjb21wb25lbnRzLCBhbmQgaGFzIHNldmVyYWwgZW50cnkgcG9pbnRzLgoKSSYjMzk7bGwgZmxhZyBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYW5kIGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYCBhcyBteSBmb2N1cyBzeW1ib2xzLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gdGFyZ2V0IGR1cmluZyBmdXp6aW5nLgoKQmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBJIHNob3VsZCBjaGVjayB0aGUgY29uZmlncy4gU2VlbXMgbGlrZSB0aGUgcGF0Y2ggYWRkcyBgS1ZNYCBhbmQgYENQVV9QTWAgYXMgdGhlIGVuYWJsZSBjb25maWcuIEkmIzM5O2xsIHRha2UgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgYENQVV9QTWAgaXMgYSB2YWxpZCBjb25maWcuIFRoYXQmIzM5O3MgYSBzYW5pdHkgY2hlY2sgSSB3YW50IHRvIGRvIGJlZm9yZSBJIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENQVV9QTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2Nza3kvS2NvbmZpZz0yMzI9Y2hvaWNlXG4tLVxuYXJjaC9jc2t5L0tjb25maWctMjM3LVxuYXJjaC9jc2t5L0tjb25maWc6MjM4OmNvbmZpZyBDUFVfUE1VX05PTkVcbmFyY2gvY3NreS9LY29uZmlnLTIzOS1cdGJvb2wgXCYjMzQ7Tm9uZVwmIzM0O1xuLS1cbmFyY2gvY3NreS9LY29uZmlnPTI0Nj1jaG9pY2Vcbi0tXG5hcmNoL2Nza3kvS2NvbmZpZy0yNDktXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTA6Y29uZmlnIENQVV9QTV9OT05FXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O05vbmVcJiMzNDtcbmFyY2gvY3NreS9LY29uZmlnLTI1Mi1cbmFyY2gvY3NreS9LY29uZmlnOjI1Mzpjb25maWcgQ1BVX1BNX1dBSVRcbmFyY2gvY3NreS9LY29uZmlnLTI1NC1cdGJvb2wgXCYjMzQ7d2FpdFwmIzM0O1xuYXJjaC9jc2t5L0tjb25maWctMjU1LVxuYXJjaC9jc2t5L0tjb25maWc6MjU2OmNvbmZpZyBDUFVfUE1fRE9aRVxuYXJjaC9jc2t5L0tjb25maWctMjU3LVx0Ym9vbCBcJiMzNDtkb3plXCYjMzQ7XG5hcmNoL2Nza3kvS2NvbmZpZy0yNTgtXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTk6Y29uZmlnIENQVV9QTV9TVE9QXG5hcmNoL2Nza3kvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O3N0b3BcJiMzNDtcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zODU9Y29uZmlnIFBNX0dFTkVSSUNfRE9NQUlOU19PRlxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTM4OC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OTpjb25maWcgQ1BVX1BNXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zOTAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBDb25maWd1cmF0aW9uIFNhbml0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiAqQ1BVX1BNKiDigJMgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QuICpLVk0qLi4uIHllcCwgdGhhdCByaW5ncyBhIGJlbGwgdG9vLCB0b3RhbGx5IGxlZ2l0LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgZ2VuZXJpYyBLVk0gaGVyZSwgb3IgaXMgdGhlcmUgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlPyBXZSBuZWVkIHRvIGJlIHByZWNpc2UsIG9yIHdlJiMzOTtyZSBnb2luZyB0byBoYXZlIGlzc3VlcyBsYXRlci4gR290dGEgZG91YmxlLWNoZWNrIGlmIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIFJJU0MtViBLVk0gY29uZmlndXJhdGlvbiBmbG9hdGluZyBhcm91bmQgc29tZXdoZXJlLiBJdOKAmXMgZXNzZW50aWFsIHRvIGF2b2lkIGFtYmlndWl0eSBoZXJlIGFuZCBtYWtlIHN1cmUgd2XigJlyZSB1c2luZyB0aGUgcmlnaHQgc2V0dGluZ3MgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWc9MTY9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xNy1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzoxODpjb25maWcgS1ZNXG5hcmNoL21pcHMva3ZtL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzAtXG5hcmNoL21pcHMva3ZtL0tjb25maWc6MzE6Y29uZmlnIEtWTV9NSVBTX0RFQlVHX0NPUDBfQ09VTlRFUlNcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7TWFpbnRhaW4gY291bnRlcnMgZm9yIENPUDAgYWNjZXNzZXNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI2OmNvbmZpZyBLVk1fQk9PSzNTX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNy1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyOTpjb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzAtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM0OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00NC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0NTpjb25maWcgS1ZNX0JPT0szU18zMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzMyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNjEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9CT09LM1NfNjRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTI2OmNvbmZpZyBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjk6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIHRoZSBQOSBlbnRyeSBwb2ludFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0My1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgdGltaW5nIGZvciBoeXBlcnZpc29yIHJlYWwtbW9kZSBjb2RlIChmb3IgUE9XRVI4KVwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNTYtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTU3OmNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7TmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTcxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QTVVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtIeXBlcnZpc29yIFBlcmYgZXZlbnRzIGZvciBLVk0gQm9vazNzLUhWXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4My1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODQ6Y29uZmlnIEtWTV9CT09LRV9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4NS1cdGJvb2xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODYtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg3OmNvbmZpZyBLVk1fRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O0RldGFpbGVkIGV4aXQgdGltaW5nXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5Ny1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTg6Y29uZmlnIEtWTV9FNTAwVjJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xOTktXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMi1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTM6Y29uZmlnIEtWTV9FNTAwTUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTQtXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyOC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9NUElDXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjMwLVx0Ym9vbCBcJiMzNDtLVk0gaW4ta2VybmVsIE1QSUMgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0MC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNDE6Y29uZmlnIEtWTV9YSUNTXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQyLVx0Ym9vbCBcJiMzNDtLVk0gaW4ta2VybmVsIFhJQ1MgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1MC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTE6Y29uZmlnIEtWTV9YSVZFXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUyLVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZz0yMj1zb3VyY2UgXCYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1wmIzM0O1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTIzLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDUtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDY6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDctXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTgzOT1zb3VyY2UgXCYjMzQ7YXJjaC94ODYveGVuL0tjb25maWdcJiMzNDtcbmFyY2gveDg2L0tjb25maWctODQwLVxuYXJjaC94ODYvS2NvbmZpZzo4NDE6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy04NDItXHRib29sIFwmIzM0O0tWTSBHdWVzdCBzdXBwb3J0IChpbmNsdWRpbmcga3ZtY2xvY2spXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4tLVxudmlydC9rdm0vS2NvbmZpZy0zLVxudmlydC9rdm0vS2NvbmZpZzo0OmNvbmZpZyBLVk1fQ09NTU9OXG52aXJ0L2t2bS9LY29uZmlnLTUtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTM5PWNvbmZpZyBORUVEX0tWTV9ESVJUWV9SSU5HX1dJVEhfQklUTUFQXG4tLVxudmlydC9rdm0vS2NvbmZpZy00Mi1cbnZpcnQva3ZtL0tjb25maWc6NDM6Y29uZmlnIEtWTV9NTUlPXG52aXJ0L2t2bS9LY29uZmlnLTQ0LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTQ1LVxudmlydC9rdm0vS2NvbmZpZzo0Njpjb25maWcgS1ZNX0FTWU5DX1BGXG52aXJ0L2t2bS9LY29uZmlnLTQ3LSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZy00OS0jIFRvZ2dsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaXJlY3Qgbm90aWZpY2F0aW9uIGFuZCBiYXRjaCBqb2JcbnZpcnQva3ZtL0tjb25maWc6NTA6Y29uZmlnIEtWTV9BU1lOQ19QRl9TWU5DXG52aXJ0L2t2bS9LY29uZmlnLTUxLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz01OT1jb25maWcgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuLS1cbnZpcnQva3ZtL0tjb25maWctNjEtXG52aXJ0L2t2bS9LY29uZmlnOjYyOmNvbmZpZyBLVk1fVkZJT1xudmlydC9rdm0vS2NvbmZpZy02My0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9NjU9Y29uZmlnIEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xuLS1cbnZpcnQva3ZtL0tjb25maWctNjctXG52aXJ0L2t2bS9LY29uZmlnOjY4OmNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbnZpcnQva3ZtL0tjb25maWctNjktICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzAtXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9LY29uZmlnLTcyLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTczLVxudmlydC9rdm0vS2NvbmZpZzo3NDpjb25maWcgS1ZNX0NPTVBBVFxudmlydC9rdm0vS2NvbmZpZy03NS0gICAgICAgZGVmX2Jvb2wgeVxuLS1cbnZpcnQva3ZtL0tjb25maWc9OTE9Y29uZmlnIEhBVkVfS1ZNX1BNX05PVElGSUVSXG4tLVxudmlydC9rdm0vS2NvbmZpZy05My1cbnZpcnQva3ZtL0tjb25maWc6OTQ6Y29uZmlnIEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG52aXJ0L2t2bS9LY29uZmlnLTk1LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk2LVxudmlydC9rdm0vS2NvbmZpZzo5Nzpjb25maWcgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xudmlydC9rdm0vS2NvbmZpZy05OC0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy05OS1cbnZpcnQva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG52aXJ0L2t2bS9LY29uZmlnLTEwMS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy0xMDItXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MjQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIENQVSBQb3dlciBNYW5hZ2VtZW50IG9uIFJJU0MtVioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBLVk1gIGFuZCBgQ1BVX1BNYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGNhbiB3ZSBldmVuIGVuYWJsZSBgQ1BVX1BNYCBvbiBhIFJJU0MtViBzeXN0ZW0/JiMzNDsgSSBuZWVkIHRvIHZlcmlmeSBpdHMgYXZhaWxhYmlsaXR5LiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgYENQVV9QTWAgaW4gYGtlcm5lbC9wb3dlci9LY29uZmlnYC4gRXhjZWxsZW50LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCAmIzM0O0lzIGBDUFVfUE1gIGFjdHVhbGx5ICpzZWxlY3RlZCogYnkgYW55dGhpbmcgd2l0aGluIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlPyYjMzQ7IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IGFuZCBjb25maXJtIGl0cyBwcmVzZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IENQVV9QTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnPTI9Y29uZmlnIEFSTVxuLS1cbmFyY2gvYXJtL0tjb25maWctNTgtXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTXG5hcmNoL2FybS9LY29uZmlnOjU5Olx0c2VsZWN0IENQVV9QTSBpZiBTVVNQRU5EIHx8IENQVV9JRExFXG5hcmNoL2FybS9LY29uZmlnLTYwLVx0c2VsZWN0IERDQUNIRV9XT1JEX0FDQ0VTUyBpZiBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXG4tLVxuYXJjaC9hcm0vS2NvbmZpZz05OTQ9Y29uZmlnIEJMX1NXSVRDSEVSXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy05OTYtXHRkZXBlbmRzIG9uIEJJR19MSVRUTEUgXHUwMDI2XHUwMDI2IE1DUE0gXHUwMDI2XHUwMDI2IEhPVFBMVUdfQ1BVIFx1MDAyNlx1MDAyNiBBUk1fR0lDXG5hcmNoL2FybS9LY29uZmlnOjk5NzpcdHNlbGVjdCBDUFVfUE1cbmFyY2gvYXJtL0tjb25maWctOTk4LVx0aGVscFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xMTEtXHRzZWxlY3QgQ09NTU9OX0NMS1xuYXJjaC9hcm02NC9LY29uZmlnOjExMjpcdHNlbGVjdCBDUFVfUE0gaWYgKFNVU1BFTkQgfHwgQ1BVX0lETEUpXG5hcmNoL2FybTY0L0tjb25maWctMTEzLVx0c2VsZWN0IENQVU1BU0tfT0ZGU1RBQ0sgaWYgTlJfQ1BVUyBcdTAwM2UgMjU2XG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTg3LVx0c2VsZWN0IENPTU1PTl9DTEtcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODg6XHRzZWxlY3QgQ1BVX1BNXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTg5LVx0c2VsZWN0IEVEQUNfU1VQUE9SVFxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0zNS1cdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGUyBpZiAoVEFSR0VUX0lTQV9SRVYgXHUwMDNjIDEpXG5hcmNoL21pcHMvS2NvbmZpZzozNjpcdHNlbGVjdCBDUFVfUE0gaWYgQ1BVX0lETEUgfHwgU1VTUEVORFxuYXJjaC9taXBzL0tjb25maWctMzctXHRzZWxlY3QgR0VORVJJQ19BVE9NSUM2NCBpZiAhNjRCSVRcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTk4LVx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFSSVNDVl9JU0FfWkJCXG5hcmNoL3Jpc2N2L0tjb25maWc6OTk6XHRzZWxlY3QgQ1BVX1BNIGlmIENQVV9JRExFIHx8IEhJQkVSTkFUSU9OIHx8IFNVU1BFTkRcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMDAtXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjIxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBBSUEgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB0b3VjaGluZyBgQ1BVX1BNYCBvbiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgYXV0b21hdGljYWxseSBzZWxlY3RlZCBpZiBgQ1BVX0lETEVgLCBgSElCRVJOQVRJT05gLCBvciBgU1VTUEVORGAgYXJlIGVuYWJsZWQsIG1lYW5pbmcgaXQmIzM5O3MgYXZhaWxhYmxlIGFuZCAqdXNlZCogd2l0aGluIHRoaXMgY29udGV4dC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIHBhdGNoOyBpdCBtb2RpZmllcyBSSVNDLVYgS1ZNIEFJQSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgYSBDUFUgUE0gbm90aWZpZXIuIFRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAsIHdoZXJlIGJvb2xlYW4gcGFyYW1ldGVycyBub3cgZGljdGF0ZSBlaXRoZXIgYSBmdWxsIGNsZWFudXAgb3IgYSBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBXZSBoYXZlIGNsZWFyIGZ1bmN0aW9ucyB0byB0YXJnZXQuCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5OiBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYW5kIGFsc28gdGhlIG5ldyBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAuCgpGb3IgY29uZmlndXJhdGlvbiwgSSYjMzk7bGwgbmVlZCBgS1ZNYCBhbmQgYENQVV9QTWAgZW5hYmxlZC4gU2luY2UgYFJJU0NWYCBpcyBpbXBsaWVkLCBJJiMzOTttIGdvb2QgdGhlcmUuIEhvd2V2ZXIsIHNpbmNlIGBDUFVfUE1gIGlzIHNlbGVjdGVkLCBub3QgcHJvbXB0ZWQsIGJ5IGBDUFVfSURMRWAsIGBISUJFUk5BVElPTmAsIG9yIGBTVVNQRU5EYCwgSSBtaWdodCBuZWVkIHRvIG1ha2Ugc3VyZSBvbmUgb2YgdGhvc2UgaXMgZW5hYmxlZCB0byBnZXQgaXQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSSBtYXkgbmVlZCB0byBzcGVjaWZpY2FsbHkgZW5hYmxlIGBDUFVfSURMRWAgb3IgYFNVU1BFTkRgIHRvIGVuc3VyZSBgQ1BVX1BNYCBpcyBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVfUE0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9jc2t5L0tjb25maWc9MjMyPWNob2ljZVxuLS1cbmFyY2gvY3NreS9LY29uZmlnLTIzNy1cbmFyY2gvY3NreS9LY29uZmlnOjIzODpjb25maWcgQ1BVX1BNVV9OT05FXG5hcmNoL2Nza3kvS2NvbmZpZy0yMzktXHRib29sIFwmIzM0O05vbmVcJiMzNDtcbi0tXG5hcmNoL2Nza3kvS2NvbmZpZz0yNDY9Y2hvaWNlXG4tLVxuYXJjaC9jc2t5L0tjb25maWctMjQ5LVxuYXJjaC9jc2t5L0tjb25maWc6MjUwOmNvbmZpZyBDUFVfUE1fTk9ORVxuYXJjaC9jc2t5L0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtOb25lXCYjMzQ7XG5hcmNoL2Nza3kvS2NvbmZpZy0yNTItXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTM6Y29uZmlnIENQVV9QTV9XQUlUXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTQtXHRib29sIFwmIzM0O3dhaXRcJiMzNDtcbmFyY2gvY3NreS9LY29uZmlnLTI1NS1cbmFyY2gvY3NreS9LY29uZmlnOjI1Njpjb25maWcgQ1BVX1BNX0RPWkVcbmFyY2gvY3NreS9LY29uZmlnLTI1Ny1cdGJvb2wgXCYjMzQ7ZG96ZVwmIzM0O1xuYXJjaC9jc2t5L0tjb25maWctMjU4LVxuYXJjaC9jc2t5L0tjb25maWc6MjU5OmNvbmZpZyBDUFVfUE1fU1RPUFxuYXJjaC9jc2t5L0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtzdG9wXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWc9Mzg1PWNvbmZpZyBQTV9HRU5FUklDX0RPTUFJTlNfT0Zcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zODgtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozODk6Y29uZmlnIENQVV9QTVxua2VybmVsL3Bvd2VyL0tjb25maWctMzkwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY5MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEVuYWJsaW5nIExvZ2ljIGZvciBDUFUgUG93ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgQ1BVX1BNYCBpcyBvbmUgb2YgdGhvc2UgdGhhdCYjMzk7cyAqb25seSogYnJvdWdodCBpbiBieSBhIGBzZWxlY3RgIHN0YXRlbWVudCDigJMgaXQgZG9lc24mIzM5O3QgZ2V0IGEgZGlyZWN0IHByb21wdCBvZiBpdHMgb3duLiBUaGF0IG1lYW5zIGlmIEkgd2FudCB0byBhY3R1YWxseSAqdXNlKiBpdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBzb21ldGhpbmcgdGhhdCBzZWxlY3RzIGl0IGlzIGVuYWJsZWQuIFJpZ2h0LCBtYWtlcyBzZW5zZS4KClNvLCBob3cgZG8gSSBnbyBhYm91dCB0aGF0PyBXZWxsLCBsb29raW5nIGF0IGl0LCBpdCBzZWVtcyB0aGF0IGVpdGhlciBgU1VTUEVORGAgb3IgYENQVV9JRExFYCBzaG91bGQgZG8gdGhlIHRyaWNrLiBTaW5jZSBJIGFtIGRlYWxpbmcgd2l0aCBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgZWl0aGVyIG9mIHRoZW0gaXMgYXZhaWxhYmxlIHdpdGhpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHdheSwgdGhlIGRlcGVuZGVuY3kgZm9yIGBDUFVfUE1gIGlzIG1ldCwgYW5kIEkgY2FuIGJlIHN1cmUgSSYjMzk7bSBnZXR0aW5nIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmVzIEkgd2FudC4gTm93IHRvIGRpZyBpbnRvIGBTVVNQRU5EYCBhbmQgYENQVV9JRExFYCB0byBjb25maXJtIHRoZXkgYXJlIHN1aXRhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1VTUEVORCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxua2VybmVsL3Bvd2VyL0tjb25maWc6Mjpjb25maWcgU1VTUEVORFxua2VybmVsL3Bvd2VyL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7U3VzcGVuZCB0byBSQU0gYW5kIHN0YW5kYnlcJiMzNDtcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjExOmNvbmZpZyBTVVNQRU5EX0ZSRUVaRVJcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEyLVx0Ym9vbCBcJiMzNDtFbmFibGUgZnJlZXplciBmb3Igc3VzcGVuZCB0byBSQU0vc3RhbmRieVwmIzM0OyBcXFxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTIxLVxua2VybmVsL3Bvd2VyL0tjb25maWc6MjI6Y29uZmlnIFNVU1BFTkRfU0tJUF9TWU5DXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7U2tpcCBrZXJuZWwmIzM5O3Mgc3lzX3N5bmMoKSBvbiBzdXNwZW5kIHRvIFJBTS9zdGFuZGJ5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQ2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIFN5c3RlbSBTdGF0ZXMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgc3lzdGVtIHN0YXRlcyBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHdoYXQmIzM5O3MgYXZhaWxhYmxlIHRvIGludGVycm9nYXRlLiBGaXJzdCwgdGhlIGBTVVNQRU5EYCBzdGF0ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBzaW5jZSB0aGVyZSYjMzk7cyBhIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIGxpc3QgaXQgYW5kIGV4dHJhY3QgcmVsZXZhbnQgaW5mb3JtYXRpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBOb3csIHNpbmNlIHdlJiMzOTtyZSBsb29raW5nIGF0IHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBDUFVfSURMRWAuIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGJlaGF2aW9yIGFuZCB3aGF0IG1ldHJpY3Mgd2UgaGF2ZSBhY2Nlc3MgdG8gcmVsYXRlZCB0byBDUFUgaWRsZW5lc3MsIGFzIHRoYXQgaXMgbGlrZWx5IHRoZSBuZXh0IGxvZ2ljYWwgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ1BVX0lETEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcHVpZGxlL0tjb25maWc9Mj1tZW51IFwmIzM0O0NQVSBJZGxlXCYjMzQ7XG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0zLVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6NDpjb25maWcgQ1BVX0lETEVcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTUtXHRib29sIFwmIzM0O0NQVSBpZGxlIFBNIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZz0xNj1pZiBDUFVfSURMRVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMTctXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZzoxODpjb25maWcgQ1BVX0lETEVfTVVMVElQTEVfRFJJVkVSU1xuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMTktXHRib29sXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yMC1cbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnOjIxOmNvbmZpZyBDUFVfSURMRV9HT1ZfTEFEREVSXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7TGFkZGVyIGdvdmVybm9yIChmb3IgcGVyaW9kaWMgdGltZXIgdGljaylcJiMzNDtcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTIzLVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MjQ6Y29uZmlnIENQVV9JRExFX0dPVl9NRU5VXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7TWVudSBnb3Zlcm5vciAoZm9yIHRpY2tsZXNzIHN5c3RlbSlcJiMzNDtcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTI2LVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6Mjc6Y29uZmlnIENQVV9JRExFX0dPVl9URU9cbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtUaW1lciBldmVudHMgb3JpZW50ZWQgKFRFTykgZ292ZXJub3IgKGZvciB0aWNrbGVzcyBzeXN0ZW1zKVwmIzM0O1xuLS1cbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTM1LVxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MzY6Y29uZmlnIENQVV9JRExFX0dPVl9IQUxUUE9MTFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMzctXHRib29sIFwmIzM0O0hhbHRwb2xsIGdvdmVybm9yIChmb3IgdmlydHVhbGl6ZWQgc3lzdGVtcylcJiMzNDtcbi0tXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZz0xODc9Y29uZmlnIENQVV9GUkVRX1RIRVJNQUxcbi0tXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZy0xOTctXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZzoxOTg6Y29uZmlnIENQVV9JRExFX1RIRVJNQUxcbmRyaXZlcnMvdGhlcm1hbC9LY29uZmlnLTE5OS1cdGJvb2wgXCYjMzQ7Q1BVIGlkbGUgY29vbGluZyBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MjcKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCB0cmlnZ2VycyB3aGVuIGBDUFVfSURMRWAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgZ290IGEgcHJvbXB0LCBzbyBpdCYjMzk7cyBhIHZhbGlkIGNvbmZpZyBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYEtWTWAsIGBTVVNQRU5EYCwgYW5kIGBDUFVfSURMRWAgYXJlIGFsbCBlbmFibGVkIHRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLgoKV2FpdCwgaXQgYWxzbyB0b3VjaGVzIGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgdGhvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZHVyaW5nIEtWTSBpbml0aWFsaXphdGlvbiBhbmQgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gU28sIHRoZSBrZXkgaGVyZSBpcyBsaWtlbHkgZnV6emluZyB0aGUgS1ZNIGZ1bmN0aW9uYWxpdHkgb24gUklTQy1WLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBpcy4KCkhlcmUmIzM5O3MgbXkgZGlzdGlsbGVkIHVuZGVyc3RhbmRpbmc6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBpcyB0b3VjaGluZyBjcnVjaWFsIEtWTSBhbmQgcG93ZXIgbWFuYWdlbWVudCBjb2RlLgoqICAgKipGb2N1cyBTeW1ib2xzKio6IEkmIzM5O20gZ29pbmcgdG8gcHV0IG15IGZvY3VzIG9uIHRoZXNlOgogICAgKiAgIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAKICAgICogICBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYAogICAgKiAgIGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYAoKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlc2UgYXJlIGVuYWJsZWQgZHVyaW5nIHRlc3Rpbmc6CiAgICAqICAgYEtWTWAKICAgICogICBgU1VTUEVORGAKICAgICogICBgQ1BVX0lETEVgCgoqKlJlYXNvbmluZzoqKgoKVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgUklTQy1WIEtWTSBBSUEgdG8gbWFuYWdlIENQVSBpZGxlIHN0YXRlcyB3aGVuIHRoZSBDUFUgaXMgaW4gYSBub24tcmV0ZW50aW9uIHN0YXRlLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBhIENQVSBQTSBub3RpZmllci4gVGhhdCBub3RpZmllciBpcyBjcml0aWNhbCBhcyBpdCB0cmlnZ2VycyBjYWxscyB0byBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCB3aXRoIGEgbmV3IGBmdWxsX2NsZWFudXBgIGJvb2xlYW4gYXJndW1lbnQsIHdoaWNoIGlzIHZpdGFsIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYWxsIGxvb2tzIGxpa2UgZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljIHRoYXQmIzM5O3MgcmVhY2hhYmxlIGR1cmluZyBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgYW5kIEtWTSBpbml0aWFsaXphdGlvbiBvciB0ZWFyZG93bi4gVGhpcyBhcmVhIG5lZWRzIHNlcmlvdXMgYXR0ZW50aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgcmVzdWx0IGluIHRoZSBDUFUgZW50ZXJpbmcgYW5kIGxlYXZpbmcgYSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGUgdG8gY29uc3RydWN0IHN1aXRhYmxlIGZ1enppbmcgdGVzdCBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo0NS4wNzcyNDk5MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzMwOTE1Mjk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlNVU1BFTkRcIixcbiAgICBcIkNQVV9JRExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X2FpYV9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZGlzYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgc3VwcG9ydCB0byBoYW5kbGUgQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgdGhhdCBjYWxscyBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCB3aXRoIGEgbmV3IGBmdWxsX2NsZWFudXBgIGJvb2xlYW4gcGFyYW1ldGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZHVyaW5nIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyBhbmQgS1ZNIGluaXRpYWxpemF0aW9uL3RlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo0NS4wNzcyNTYwMTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODc5OTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM2NzU0ODE1M2RlZWU4MDMyM2EzMjVlYjI1ODdjM2FiZjJlNjllZTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMDE6NDY6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxcbmluZGV4IGM2N2VjNWFjMGExNDZiLi43YzFjMzI1MDU5OGZiMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXFxuQEAgLTE2NSw4ICsxNjUsMTkgQEAgaW50IGt2bV9yaXNjdl9haWFfYWxsb2NfaGdlaShpbnQgY3B1LCBzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyLFxcbiBcXHRcXHRcXHQgICAgIHZvaWQgX19pb21lbSAqKmhnZWlfdmEsIHBoeXNfYWRkcl90ICpoZ2VpX3BhKTtcXG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7XFxuIFxcbi12b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpO1xcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKTtcXG4rLyoqXFxuKyAqIGt2bV9yaXNjdl9haWFfZW5hYmxlKCkgLSBFbmFibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcXG4rICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLFxcbisgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiByZXN0b3JlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSlcXG4rICovXFxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApO1xcbitcXG4rLyoqXFxuKyAqIGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpIC0gRGlzYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxcbisgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBjbGVhbnVwIChDUFUgaG90cGx1Zy9tb2R1bGUgZXhpdCksXFxuKyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHNhdmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkpXFxuKyAqL1xcbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XFxuIGludCBrdm1fcmlzY3ZfYWlhX2luaXQodm9pZCk7XFxuIHZvaWQga3ZtX3Jpc2N2X2FpYV9leGl0KHZvaWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbmluZGV4IGJhZmIwMDljNWNlNTU5Li44MjgxMjQ5M2FjNjg0YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXFxuQEAgLTUzMiw1MCArNTMyLDYxIEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcXG4gXFx0ZnJlZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSwgXFx1MDAyNmFpYV9oZ2VpKTtcXG4gfVxcbiBcXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxcbit2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcXG4tXFx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XFxuIFxcdHN0cnVjdCBhaWFfaGdlaV9jb250cm9sICpoZ2N0cmw7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLVxcdGludCBhaWFfbnJfaGdlaTtcXG4gXFxuIFxcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0Z2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpO1xcbi1cXHRsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtXFx1MDAzZWxvY2FsKSA6IE5VTEw7XFxuIFxcdGhnY3RybCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2YWlhX2hnZWkpO1xcbiBcXG4tXFx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xcbi1cXHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcXG4tXFx0aGdjdHJsLVxcdTAwM2Vucl9oZ2VpID0gZmxzX2xvbmcoY3NyX3JlYWQoQ1NSX0hHRUlFKSk7XFxuLVxcdGNzcl93cml0ZShDU1JfSEdFSUUsIDApO1xcbi1cXHRpZiAoaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKVxcbi1cXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWktLTtcXG4rXFx0aWYgKGZ1bGxfY2xlYW51cCkge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgaW1zaWNfZ2xvYmFsX2NvbmZpZyAqZ2M7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xcbitcXHRcXHRpbnQgYWlhX25yX2hnZWk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2ZcXG4tXFx0ICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGxjKVxcbi1cXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC1cXHUwMDNlbnJfaGdlaSwgbGMtXFx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSAwO1xcbitcXHRcXHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XFxuK1xcdFxcdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cXHUwMDNlbG9jYWwpIDogTlVMTDtcXG4gXFxuLVxcdC8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIElNU0lDIGd1ZXN0IGZpbGVzIGFjcm9zcyBhbGwgSEFSVHMgKi9cXG4tXFx0YWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTtcXG4tXFx0ZG8ge1xcbi1cXHRcXHRpZiAoYWlhX25yX2hnZWkgXFx1MDAzYz0gaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCBcXHUwMDI2YWlhX25yX2hnZWksIGhnY3RybC1cXHUwMDNlbnJfaGdlaSkpO1xcbitcXHRcXHQvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovXFxuK1xcdFxcdGNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpO1xcbitcXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcXG4rXFx0XFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XFxuK1xcdFxcdGlmIChoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpXFxuK1xcdFxcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaS0tO1xcbiBcXG4tXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0aWYgKCFoZ2N0cmwtXFx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7XFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXAgPSAoaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKSA/IEdFTk1BU0tfVUxMKGhnY3RybC1cXHUwMDNlbnJfaGdlaSwgMSkgOiAwO1xcbi1cXHRcXHRoZ2N0cmwtXFx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXFxuK1xcdFxcdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChsYylcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2Vucl9oZ2VpID0gbWluKCh1bG9uZyloZ2N0cmwtXFx1MDAzZW5yX2hnZWksIGxjLVxcdTAwM2Vucl9ndWVzdF9maWxlcyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2Vucl9oZ2VpID0gMDtcXG4rXFxuK1xcdFxcdC8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIElNU0lDIGd1ZXN0IGZpbGVzIGFjcm9zcyBhbGwgSEFSVHMgKi9cXG4rXFx0XFx0YWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTtcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRpZiAoYWlhX25yX2hnZWkgXFx1MDAzYz0gaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCBcXHUwMDI2YWlhX25yX2hnZWksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKSk7XFxuK1xcbitcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRpZiAoIWhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2VmcmVlX2JpdG1hcCA9IChoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgR0VOTUFTS19VTEwoaGdjdHJsLVxcdTAwM2Vucl9oZ2VpLCAxKSA6XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIDA7XFxuK1xcdFxcdFxcdGhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgfmhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXApO1xcbitcXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdH1cXG4tXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcXG4gXFx0Y3NyX3dyaXRlKENTUl9IVklQUklPMSwgMHgwKTtcXG5AQCAtNTg3LDY1ICs1OTgsNzMgQEAgdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8ySCwgMHgwKTtcXG4gI2VuZGlmXFxuIFxcbi1cXHQvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xcbi1cXHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXFxuLVxcdFxcdFxcdCAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7XFxuLVxcdGNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcXG4rXFx0aWYgKGZ1bGxfY2xlYW51cCkge1xcbitcXHRcXHQvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xcbitcXHRcXHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXFxuK1xcdFxcdFxcdFxcdCAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7XFxuK1xcdFxcdGNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogRW5hYmxlIElSUSBmaWx0ZXJpbmcgZm9yIG92ZXJmbG93IGludGVycnVwdCBvbmx5IGlmIHNzY29mcG1mIGlzIHByZXNlbnQgKi9cXG4gXFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXFxuIFxcdFxcdGNzcl9zZXQoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcXG4gfVxcbiBcXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcXG4rdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoYm9vbCBmdWxsX2NsZWFudXApXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4tXFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcXG4gXFxuIFxcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRoZ2N0cmwgPSBnZXRfY3B1X3B0cihcXHUwMDI2YWlhX2hnZWkpO1xcbiBcXG4gXFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXFxuIFxcdFxcdGNzcl9jbGVhcihDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpO1xcbi1cXHQvKiBEaXNhYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cXG4tXFx0Y3NyX2NsZWFyKENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XFxuLVxcdGRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpO1xcbi1cXG4tXFx0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcXG4gXFxuLVxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGlmIChmdWxsX2NsZWFudXApIHtcXG4rXFx0XFx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXFxuK1xcdFxcdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xcbitcXHRcXHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcXG4rXFx0fVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWk7IGkrKykge1xcbi1cXHRcXHR2Y3B1ID0gaGdjdHJsLVxcdTAwM2Vvd25lcnNbaV07XFxuLVxcdFxcdGlmICghdmNwdSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBXZSByZWxlYXNlIGhnY3RybC1cXHUwMDNlbG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDXFxuLVxcdFxcdCAqIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKGZ1bGxfY2xlYW51cCkge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdFxcdHN0cnVjdCBhaWFfaGdlaV9jb250cm9sICpoZ2N0cmw7XFxuIFxcbi1cXHRcXHQvKiBOb3RpZnkgSU1TSUMgKi9cXG4tXFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XFxuK1xcdFxcdGhnY3RybCA9IGdldF9jcHVfcHRyKFxcdTAwMjZhaWFfaGdlaSk7XFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhblxcbi1cXHRcXHQgKiBydW4gb24gb3RoZXIgSEFSVHNcXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChjc3JfcmVhZChDU1JfSEdFSUUpIFxcdTAwMjYgQklUKGkpKSB7XFxuLVxcdFxcdFxcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XFxuLVxcdFxcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gaGdjdHJsLVxcdTAwM2Vucl9oZ2VpOyBpKyspIHtcXG4rXFx0XFx0XFx0dmNwdSA9IGhnY3RybC1cXHUwMDNlb3duZXJzW2ldO1xcbitcXHRcXHRcXHRpZiAoIXZjcHUpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogV2UgcmVsZWFzZSBoZ2N0cmwtXFx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xcbitcXHRcXHRcXHQgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRcXHRcXHQvKiBOb3RpZnkgSU1TSUMgKi9cXG4rXFx0XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhblxcbitcXHRcXHRcXHQgKiBydW4gb24gb3RoZXIgSEFSVHNcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChjc3JfcmVhZChDU1JfSEdFSUUpIFxcdTAwMjYgQklUKGkpKSB7XFxuK1xcdFxcdFxcdFxcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XFxuK1xcdFxcdFxcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cHV0X2NwdV9wdHIoXFx1MDAyNmFpYV9oZ2VpKTtcXG4gXFx0fVxcbi1cXG4tXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXG4tXFx0cHV0X2NwdV9wdHIoXFx1MDAyNmFpYV9oZ2VpKTtcXG4gfVxcbiBcXG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKVxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tYWluLmMgYi9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcXG5pbmRleCAwOTI0Yzc1MTAwYTJkMC4uNDFlZjkxZWEzOTIxOGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1X3BtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbmFjbC5oXFx1MDAzZVxcbkBAIC0zMywxNCArMzQsOSBAQCBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4gXFxuLWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuKy8qIEluaXRpYWxpemUgaHlwZXJ2aXNvciBDU1JzIC0gY2FsbGVkIGR1cmluZyBDUFUgb25saW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lICovXFxuK3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZW5hYmxlKHZvaWQpXFxuIHtcXG4tXFx0aW50IHJjO1xcbi1cXG4tXFx0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcXG4tXFx0aWYgKHJjKVxcbi1cXHRcXHRyZXR1cm4gcmM7XFxuLVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xcbiBcXG5AQCAtNDgsMTYgKzQ0LDExIEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuIFxcdGNzcl93cml0ZShDU1JfSENPVU5URVJFTiwgMHgwMik7XFxuIFxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSVAsIDApO1xcbi1cXG4tXFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoKTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi12b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuKy8qIENsZWFyIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9mZmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSAqL1xcbitzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2Rpc2FibGUodm9pZClcXG4ge1xcbi1cXHRrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIEFmdGVyIGNsZWFyaW5nIHRoZSBoaWRlbGVnIENTUiwgdGhlIGhvc3Qga2VybmVsIHdpbGwgcmVjZWl2ZVxcbiBcXHQgKiBzcHVyaW91cyBpbnRlcnJ1cHRzIGlmIGh2aXAgQ1NSIGhhcyBwZW5kaW5nIGludGVycnVwdHMgYW5kIHRoZVxcbkBAIC02OCwxMCArNTksNjAgQEAgdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSVAsIDApO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xcbit9XFxuK1xcbitpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbit7XFxuK1xcdGludCByYztcXG4gXFxuK1xcdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcXG4rXFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbit7XFxuK1xcdGt2bV9yaXNjdl9haWFfZGlzYWJsZSh0cnVlKTtcXG4rXFx0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XFxuIFxcdGt2bV9yaXNjdl9uYWNsX2Rpc2FibGUoKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSdzXFxuK1xcdCAqIHN5c2NvcmUgb3BzIHdpbGwgaGFuZGxlIHRoZSBzdGF0ZSBkdXJpbmcgc3lzdGVtIHN1c3BlbmQpLFxcbitcXHQgKiBpZ25vcmUgQ1BVX1BNIGV2ZW50cyB3aGVuIGEgc3lzdGVtIHN1c3BlbmQvcmVzdW1lIGlzIGluXFxuK1xcdCAqIHByb2dyZXNzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fU1VTUEVORClcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXG4rXFx0c3dpdGNoIChjbWQpIHtcXG4rXFx0Y2FzZSBDUFVfUE1fRVhJVDpcXG4rXFx0XFx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcXG4rXFx0XFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpO1xcbitcXHRcXHRyZXR1cm4gTk9USUZZX09LO1xcbitcXHRjYXNlIENQVV9QTV9FTlRFUjpcXG4rXFx0XFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGZhbHNlKTtcXG4rXFx0XFx0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XFxuK1xcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX3Jpc2N2X2NwdV9wbV9uYiA9IHtcXG4rXFx0Lm5vdGlmaWVyX2NhbGwgPSBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyLFxcbit9O1xcbitcXG4gc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3RlYXJkb3duKHZvaWQpXFxuIHtcXG4gXFx0a3ZtX3Jpc2N2X2FpYV9leGl0KCk7XFxuQEAgLTE3MiwyMiArMjEzLDM2IEBAIHN0YXRpYyBpbnQgX19pbml0IHJpc2N2X2t2bV9pbml0KHZvaWQpXFxuIFxcbiBcXHRrdm1fcmVnaXN0ZXJfcGVyZl9jYWxsYmFja3MoKTtcXG4gXFxuLVxcdHJjID0ga3ZtX2luaXQoc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksIDAsIFRISVNfTU9EVUxFKTtcXG4tXFx0aWYgKHJjKSB7XFxuLVxcdFxcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xcbi1cXHRcXHRyZXR1cm4gcmM7XFxuK1xcdC8qIFJlZ2lzdGVyIENQVSBQTSBub3RpZmllciBmb3IgQ1BVIGlkbGUgbm9uLXJldGVudGlvbiBzdGF0ZXMgKi9cXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpIHtcXG4rXFx0XFx0cmMgPSBjcHVfcG1fcmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0a3ZtX2VycihcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIENQVSBQTSBub3RpZmllcjogJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfdGVhcmRvd247XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXFxuLVxcdFxcdGt2bV9pbmZvKFxcXCJBSUEgYXZhaWxhYmxlIHdpdGggJWQgZ3Vlc3QgZXh0ZXJuYWwgaW50ZXJydXB0c1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGF0b21pY19yZWFkKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpKTtcXG4rXFx0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gZXJyX3VucmVnaXN0ZXJfY3B1X3BtO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfdW5yZWdpc3Rlcl9jcHVfcG06XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxcbitcXHRcXHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XFxuK2Vycl90ZWFyZG93bjpcXG4rXFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XFxuK1xcdHJldHVybiByYztcXG4gfVxcbiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgcmlzY3Zfa3ZtX2V4aXQodm9pZClcXG4ge1xcbitcXHQvKiBVbnJlZ2lzdGVyIENQVSBQTSBub3RpZmllciAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcXG4rXFx0XFx0Y3B1X3BtX3VucmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xcbitcXG4gXFx0a3ZtX2V4aXQoKTtcXG4gXFxuIFxcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo0NS43NjY4NTY5MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjE5NTM2MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiU1VTUEVORFwiLFxuICAgIFwiQ1BVX0lETEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfYWlhX2VuYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9kaXNhYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzY3NTQ4MTUzZGVlZTgwMzIzYTMyNWViMjU4N2MzYWJmMmU2OWVlOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDAxOjQ2OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxuaW5kZXggYzY3ZWM1YWMwYTE0NmIuLjdjMWMzMjUwNTk4ZmIwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXG5AQCAtMTY1LDggKzE2NSwxOSBAQCBpbnQga3ZtX3Jpc2N2X2FpYV9hbGxvY19oZ2VpKGludCBjcHUsIHN0cnVjdCBrdm1fdmNwdSAqb3duZXIsXG4gXHRcdFx0ICAgICB2b2lkIF9faW9tZW0gKipoZ2VpX3ZhLCBwaHlzX2FkZHJfdCAqaGdlaV9wYSk7XG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKTtcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKTtcbisvKipcbisgKiBrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpIC0gRW5hYmxlIEFJQSBzdXBwb3J0IG9uIGN1cnJlbnQgQ1BVXG4rICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLFxuKyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHJlc3RvcmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lKVxuKyAqL1xuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApO1xuK1xuKy8qKlxuKyAqIGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpIC0gRGlzYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxuKyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGNsZWFudXAgKENQVSBob3RwbHVnL21vZHVsZSBleGl0KSxcbisgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiBzYXZlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIGVudHJ5KVxuKyAqL1xuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcbiBpbnQga3ZtX3Jpc2N2X2FpYV9pbml0KHZvaWQpO1xuIHZvaWQga3ZtX3Jpc2N2X2FpYV9leGl0KHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbmluZGV4IGJhZmIwMDljNWNlNTU5Li44MjgxMjQ5M2FjNjg0YSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuQEAgLTUzMiw1MCArNTMyLDYxIEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbiBcdGZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsIFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApXG4ge1xuLVx0Y29uc3Qgc3RydWN0IGltc2ljX2dsb2JhbF9jb25maWcgKmdjO1xuLVx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XG4gXHRzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdGludCBhaWFfbnJfaGdlaTtcbiBcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpO1xuLVx0bGMgPSAoZ2MpID8gdGhpc19jcHVfcHRyKGdjLVx1MDAzZWxvY2FsKSA6IE5VTEw7XG4gXHRoZ2N0cmwgPSB0aGlzX2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIFxuLVx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xuLVx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7XG4tXHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpO1xuLVx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XG4tXHRpZiAoaGdjdHJsLVx1MDAzZW5yX2hnZWkpXG4tXHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpLS07XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbitcdFx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XG4rXHRcdGludCBhaWFfbnJfaGdlaTtcbiBcbi1cdC8qXG4tXHQgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2Zcbi1cdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cbi1cdCAqL1xuLVx0aWYgKGxjKVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVx1MDAzZW5yX2hnZWksIGxjLVx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcbi1cdGVsc2Vcbi1cdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSAwO1xuK1x0XHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XG4rXHRcdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cdTAwM2Vsb2NhbCkgOiBOVUxMO1xuIFxuLVx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xuLVx0YWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZChcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpO1xuLVx0ZG8ge1xuLVx0XHRpZiAoYWlhX25yX2hnZWkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbi1cdFx0XHRicmVhaztcbi1cdH0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCBcdTAwMjZhaWFfbnJfaGdlaSwgaGdjdHJsLVx1MDAzZW5yX2hnZWkpKTtcbitcdFx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xuK1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcbitcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcbitcdFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XG4rXHRcdGlmIChoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbitcdFx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaS0tO1xuIFxuLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRpZiAoIWhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCkge1xuLVx0XHRoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXAgPSAoaGdjdHJsLVx1MDAzZW5yX2hnZWkpID8gR0VOTUFTS19VTEwoaGdjdHJsLVx1MDAzZW5yX2hnZWksIDEpIDogMDtcbi1cdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0LypcbitcdFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXG4rXHRcdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cbitcdFx0ICovXG4rXHRcdGlmIChsYylcbitcdFx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVx1MDAzZW5yX2hnZWksIGxjLVx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gMDtcbitcbitcdFx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xuK1x0XHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSk7XG4rXHRcdGRvIHtcbitcdFx0XHRpZiAoYWlhX25yX2hnZWkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSwgXHUwMDI2YWlhX25yX2hnZWksXG4rXHRcdFx0XHRcdCAgICAgaGdjdHJsLVx1MDAzZW5yX2hnZWkpKTtcbitcbitcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGlmICghaGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7XG4rXHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/XG4rXHRcdFx0XHRcdCAgICAgIEdFTk1BU0tfVUxMKGhnY3RybC1cdTAwM2Vucl9oZ2VpLCAxKSA6XG4rXHRcdFx0XHRcdCAgICAgIDA7XG4rXHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0fSBlbHNlIHtcbitcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGNzcl93cml0ZShDU1JfSEdFSUUsIH5oZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXApO1xuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuLVx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8xLCAweDApO1xuQEAgLTU4Nyw2NSArNTk4LDczIEBAIHZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZClcbiBcdGNzcl93cml0ZShDU1JfSFZJUFJJTzJILCAweDApO1xuICNlbmRpZlxuIFxuLVx0LyogRW5hYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cbi1cdGVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSxcbi1cdFx0XHQgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpO1xuLVx0Y3NyX3NldChDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xuK1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuK1x0XHQvKiBFbmFibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuK1x0XHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXG4rXHRcdFx0XHQgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpO1xuK1x0XHRjc3Jfc2V0KENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4rXHR9XG4rXG4gXHQvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqL1xuIFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXG4gXHRcdGNzcl9zZXQoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cClcbiB7XG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsO1xuIFxuIFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRyZXR1cm47XG4tXHRoZ2N0cmwgPSBnZXRfY3B1X3B0cihcdTAwMjZhaWFfaGdlaSk7XG4gXG4gXHRpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSlcbiBcdFx0Y3NyX2NsZWFyKENTUl9IVklFTiwgQklUKElSUV9QTVVfT1ZGKSk7XG4tXHQvKiBEaXNhYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cbi1cdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xuLVx0ZGlzYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSk7XG4tXG4tXHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFxuLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdC8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuK1x0XHRjc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbitcdFx0ZGlzYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSk7XG4rXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gaGdjdHJsLVx1MDAzZW5yX2hnZWk7IGkrKykge1xuLVx0XHR2Y3B1ID0gaGdjdHJsLVx1MDAzZW93bmVyc1tpXTtcbi1cdFx0aWYgKCF2Y3B1KVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogV2UgcmVsZWFzZSBoZ2N0cmwtXHUwMDNlbG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDXG4tXHRcdCAqIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy5cbi1cdFx0ICovXG4tXHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcbiBcbi1cdFx0LyogTm90aWZ5IElNU0lDICovXG4tXHRcdGt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpO1xuK1x0XHRoZ2N0cmwgPSBnZXRfY3B1X3B0cihcdTAwMjZhaWFfaGdlaSk7XG4rXHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhblxuLVx0XHQgKiBydW4gb24gb3RoZXIgSEFSVHNcbi1cdFx0ICovXG4tXHRcdGlmIChjc3JfcmVhZChDU1JfSEdFSUUpIFx1MDAyNiBCSVQoaSkpIHtcbi1cdFx0XHRjc3JfY2xlYXIoQ1NSX0hHRUlFLCBCSVQoaSkpO1xuLVx0XHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSsrKSB7XG4rXHRcdFx0dmNwdSA9IGhnY3RybC1cdTAwM2Vvd25lcnNbaV07XG4rXHRcdFx0aWYgKCF2Y3B1KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBXZSByZWxlYXNlIGhnY3RybC1cdTAwM2Vsb2NrIGJlZm9yZSBub3RpZnlpbmcgSU1TSUNcbitcdFx0XHQgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuXG4rXHRcdFx0ICovXG4rXHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdFx0XHQvKiBOb3RpZnkgSU1TSUMgKi9cbitcdFx0XHRrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4rXHRcdFx0ICogcnVuIG9uIG90aGVyIEhBUlRzXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuK1x0XHRcdFx0Y3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTtcbitcdFx0XHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHR9XG4gXG4tXHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRwdXRfY3B1X3B0cihcdTAwMjZhaWFfaGdlaSk7XG4gXHR9XG4tXG4tXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuLVx0cHV0X2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIH1cbiBcbiBpbnQga3ZtX3Jpc2N2X2FpYV9pbml0KHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXG5pbmRleCAwOTI0Yzc1MTAwYTJkMC4uNDFlZjkxZWEzOTIxOGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdV9wbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuQEAgLTMzLDE0ICszNCw5IEBAIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuLWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4rLyogSW5pdGlhbGl6ZSBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvbmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSByZXN1bWUgKi9cbitzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2VuYWJsZSh2b2lkKVxuIHtcbi1cdGludCByYztcbi1cbi1cdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XG4tXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbi1cbiBcdGNzcl93cml0ZShDU1JfSEVERUxFRywgMCk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xuIFxuQEAgLTQ4LDE2ICs0NCwxMSBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFx0Y3NyX3dyaXRlKENTUl9IQ09VTlRFUkVOLCAweDAyKTtcbiBcbiBcdGNzcl93cml0ZShDU1JfSFZJUCwgMCk7XG4tXG4tXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpO1xuLVxuLVx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbisvKiBDbGVhciBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvZmZsaW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkgKi9cbitzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2Rpc2FibGUodm9pZClcbiB7XG4tXHRrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKTtcbi1cbiBcdC8qXG4gXHQgKiBBZnRlciBjbGVhcmluZyB0aGUgaGlkZWxlZyBDU1IsIHRoZSBob3N0IGtlcm5lbCB3aWxsIHJlY2VpdmVcbiBcdCAqIHNwdXJpb3VzIGludGVycnVwdHMgaWYgaHZpcCBDU1IgaGFzIHBlbmRpbmcgaW50ZXJydXB0cyBhbmQgdGhlXG5AQCAtNjgsMTAgKzU5LDYwIEBAIHZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiBcdGNzcl93cml0ZShDU1JfSFZJUCwgMCk7XG4gXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xuIFx0Y3NyX3dyaXRlKENTUl9ISURFTEVHLCAwKTtcbit9XG4rXG4raW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbit7XG4rXHRpbnQgcmM7XG4gXG4rXHRyYyA9IGt2bV9yaXNjdl9uYWNsX2VuYWJsZSgpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xuK1x0a3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuK3tcbitcdGt2bV9yaXNjdl9haWFfZGlzYWJsZSh0cnVlKTtcbitcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xuIFx0a3ZtX3Jpc2N2X25hY2xfZGlzYWJsZSgpO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdilcbit7XG4rXHQvKlxuK1x0ICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSdzXG4rXHQgKiBzeXNjb3JlIG9wcyB3aWxsIGhhbmRsZSB0aGUgc3RhdGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kKSxcbitcdCAqIGlnbm9yZSBDUFVfUE0gZXZlbnRzIHdoZW4gYSBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUgaXMgaW5cbitcdCAqIHByb2dyZXNzLlxuK1x0ICovXG4rXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9TVVNQRU5EKVxuK1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXG4rXHRzd2l0Y2ggKGNtZCkge1xuK1x0Y2FzZSBDUFVfUE1fRVhJVDpcbitcdFx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcbitcdFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpO1xuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1x0Y2FzZSBDUFVfUE1fRU5URVI6XG4rXHRcdGt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSk7XG4rXHRcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX3Jpc2N2X2NwdV9wbV9uYiA9IHtcbitcdC5ub3RpZmllcl9jYWxsID0ga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcixcbit9O1xuK1xuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl90ZWFyZG93bih2b2lkKVxuIHtcbiBcdGt2bV9yaXNjdl9haWFfZXhpdCgpO1xuQEAgLTE3MiwyMiArMjEzLDM2IEBAIHN0YXRpYyBpbnQgX19pbml0IHJpc2N2X2t2bV9pbml0KHZvaWQpXG4gXG4gXHRrdm1fcmVnaXN0ZXJfcGVyZl9jYWxsYmFja3MoKTtcbiBcbi1cdHJjID0ga3ZtX2luaXQoc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksIDAsIFRISVNfTU9EVUxFKTtcbi1cdGlmIChyYykge1xuLVx0XHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcbi1cdFx0cmV0dXJuIHJjO1xuK1x0LyogUmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyIGZvciBDUFUgaWRsZSBub24tcmV0ZW50aW9uIHN0YXRlcyAqL1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpIHtcbitcdFx0cmMgPSBjcHVfcG1fcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdGt2bV9lcnIoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyOiAlZFxcblwiLCByYyk7XG4rXHRcdFx0Z290byBlcnJfdGVhcmRvd247XG4rXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuLVx0XHRrdm1faW5mbyhcIkFJQSBhdmFpbGFibGUgd2l0aCAlZCBndWVzdCBleHRlcm5hbCBpbnRlcnJ1cHRzXFxuXCIsXG4tXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSkpO1xuK1x0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl91bnJlZ2lzdGVyX2NwdV9wbTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2Vycl91bnJlZ2lzdGVyX2NwdV9wbTpcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxuK1x0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbitlcnJfdGVhcmRvd246XG4rXHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcbitcdHJldHVybiByYztcbiB9XG4gbW9kdWxlX2luaXQocmlzY3Zfa3ZtX2luaXQpO1xuIFxuIHN0YXRpYyB2b2lkIF9fZXhpdCByaXNjdl9rdm1fZXhpdCh2b2lkKVxuIHtcbitcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcbitcdFx0Y3B1X3BtX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XG4rXG4gXHRrdm1fZXhpdCgpO1xuIFxuIFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo0NS43NjY4NTgzMjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjQyOTgyMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBBSUEgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgUklTQy1WIEtWTSBBSUEgc3VwcG9ydCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIGBib29sIGZ1bGxfY2xlYW51cGAgcGFyYW1ldGVyIHRvIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIEl0J3MgYWxzbyBpbnRyb2R1Y2luZyBhIENQVSBQTSBub3RpZmllciwgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLCBkZXNpZ25lZCB0byBoYW5kbGUgQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIFRoaXMgbm90aWZpZXIgY2FsbHMgdGhlIEFJQSBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbnMsIGJ1dCAqd2l0aG91dCogdGhlIGZ1bGwgY2xlYW51cCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHJlZ2lzdGVycyB0aGUgbm90aWZpZXIgb25seSBpZiBgQ09ORklHX0NQVV9QTWAgaXMgZW5hYmxlZC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsP1wiIEFuZCB0aGUgYW5zd2VyIGlzLCB5ZXMsIGl0J3MgZnVuY3Rpb25hbDsgaXQncyBkZWZpbml0ZWx5IG1vZGlmeWluZyBLVk0gUklTQy1WIENQVSBwb3dlciBtYW5hZ2VtZW50IGhhbmRsaW5nLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gZm9yIG1lLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzLCBjYW4gd2UgZnV6eiB0aGlzIGVmZmljaWVudGx5P1xuXG5UaGUgb2J2aW91cyB0cmlnZ2VyIGlzIENQVSBQTSBldmVudHMg4oCTIHNwZWNpZmljYWxseSwgQ1BVIGlkbGUgbm9uLXJldGVudGlvbiBzdGF0ZXMuIE5vdywgQ1BVIFBNIGV2ZW50cyBhcmUgYSBwb3RlbnRpYWwgZnV6eiB0YXJnZXQsIElGIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgQ1BVIGlkbGUgb3Igc3VzcGVuZC4gU3l6a2FsbGVyLCBpbiBpdHMgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBkb2Vzbid0IHR5cGljYWxseSBkaXJlY3RseSB0cmlnZ2VyIHRob3NlIGV2ZW50czsgSSdkIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGxpa2UgQ1BVIGhvdHBsdWcgb3Igc3VzcGVuZC9yZXN1bWUgd2VyZSBlbmFibGVkLCB3aGljaCAqY291bGQqIGluZGlyZWN0bHkgZXhlcmNpc2UgdGhpcyBjb2RlLlxuXG5Ib3dldmVyLCBoZXJlJ3MgYSB3cmlua2xlOiBJIHNlZSB0aGF0IGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhcmUgYWxzbyBtb2RpZmllZCB0byBwYXNzIGB0cnVlYCB0byBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCEgVGhpcyBpcyBrZXkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgZHVyaW5nIENQVSBob3RwbHVnIG9yIG1vZHVsZSBsb2FkL3VubG9hZC4gVGhpcyBtZWFucyB3ZSBoYXZlIGEgY291cGxlIG9mIGRpZmZlcmVudCBwYXRocyB0byB0aGUgY29kZSwgYW5kIHRoaXMgaXMgZ29vZCBmdXp6aW5nIGZvZGRlciwgc2luY2Ugb25lIG1pZ2h0IGJlIGVhc2llciB0byB0cmlnZ2VyIHRoYW4gdGhlIG90aGVyIVxuXG5TbywgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAgYXJlIGNsZWFybHkgZnVuY3Rpb25hbCBhbmQgbm93IHRha2UgYSBmbGFnIHRvIGNvbnRyb2wgY2xlYW51cC4gSSBub3cgaGF2ZSB0d28gcG9zc2libGUgYXZlbnVlcyBmb3IgZnV6emluZzogQ1BVIFBNIGV2ZW50cyAoaWRsZS9zdXNwZW5kL3Jlc3VtZSkgYW5kIENQVSBob3RwbHVnL21vZHVsZSBsb2FkLlxuXG5UbyBiZSB0aG9yb3VnaCwgbGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgYENPTkZJR19LVk1gLCBgQ09ORklHX1JJU0NWYCwgYW5kLCBjcnVjaWFsbHksIGBDT05GSUdfQ1BVX1BNYCBmb3IgdGhlIG5vdGlmaWVyIHRvIGJlIGVuYWJsZWQuIFRoZW4sIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhlIGNhbGxncmFwaCBmb3IgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAgdG8gc2VlIGhvdyBleHRlbnNpdmVseSB0aGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0Njo1NC40MDk4NDM0MzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NjMyMzk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfYWlhX2VuYWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaD0xNjY9dm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7XFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNjgtLyoqXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmg6MTY5OiAqIGt2bV9yaXNjdl9haWFfZW5hYmxlKCkgLSBFbmFibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNzAtICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLFxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmgtMTcyLSAqL1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oOjE3Mzp2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaC0xNzQtXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWEuYz01Mjk9c3RhdGljIHZvaWQgYWlhX2hnZWlfZXhpdCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtNTM0LVxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jOjUzNTp2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKVxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTUzNi17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM9NjQ9aW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21haW4uYy03Mi1cXHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xcbmFyY2gvcmlzY3Yva3ZtL21haW4uYzo3MzpcXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKTtcXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtNzQtXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM9ODU9c3RhdGljIGludCBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtOTgtXFx0XFx0a3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTtcXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM6OTk6XFx0XFx0a3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpO1xcbmFyY2gvcmlzY3Yva3ZtL21haW4uYy0xMDAtXFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDY6NTkuMzc2MTczNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDM4MzU3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0tUklTQ1YgQUlBIEVuYWJsZS9EaXNhYmxlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAgaXMgZHJhd2luZyBteSBhdHRlbnRpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3Igc29tZSBwb3dlciBtYW5hZ2VtZW50IGhvb2t1cCwgYW5kIGNyaXRpY2FsbHksIGl0J3MgY2FsbGluZyBga3ZtX3Jpc2N2X2FpYV9lbmFibGUoZmFsc2UpYCBhbmQgYGt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSlgLiBUaGF0IG1ha2VzIHNlbnNlIC0gbGlrZWx5IGRpc2FibGluZyB0aGUgQUlBIHdoZW4gdGhlIENQVSBpcyBnb2luZyBpbnRvIGEgbG93ZXIgcG93ZXIgc3RhdGUuIFRoZW4sIHRoZXkncmUgbW9kaWZ5aW5nIHRoZSB2aXJ0dWFsaXphdGlvbiBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbnMgKGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCkgdG8gdG9nZ2xlIEFJQSB3aXRoIHRoZSBgZnVsbF9jbGVhbnVwYCBmbGFnLCBjYWxsaW5nIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSlgLiBSaWdodC4gU28gd2UndmUgZ290IGFuIEFJQSBzdGF0ZSBjaGFuZ2UgdGllZCB0byBib3RoIENQVSBwb3dlciBtYW5hZ2VtZW50IGFuZCBnZW5lcmFsIHZpcnR1YWxpemF0aW9uLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIHRvIHdhbmRlci4gSXMgdGhpcyBpbXBsZW1lbnRhdGlvbiAqc291bmQqPyBEb2VzIHRoZSBsb2dpYyBpbiBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCBoYW5kbGUgdGhlIGRpZmZlcmVudCBjbGVhbnVwL3NldHVwIGFwcHJvcHJpYXRlbHk/IFNlZW1zIGxpa2UgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIHRoZSBgZnVsbF9jbGVhbnVwYCBmbGFnLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyB0aGlzIGZ1enotYWJsZT8gWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIGZ1bmN0aW9uYWwsIHRvdWNoZXMgc29tZSBrZXkgY29tcG9uZW50cywgYW5kIGhhcyBzZXZlcmFsIGVudHJ5IHBvaW50cy5cblxuSSdsbCBmbGFnIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAsIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLCBhbmQgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgIGFzIG15IGZvY3VzIHN5bWJvbHMuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkgd2FudCB0byB0YXJnZXQgZHVyaW5nIGZ1enppbmcuXG5cbkJlZm9yZSBJIGdldCB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbmZpZ3MuIFNlZW1zIGxpa2UgdGhlIHBhdGNoIGFkZHMgYEtWTWAgYW5kIGBDUFVfUE1gIGFzIHRoZSBlbmFibGUgY29uZmlnLiBJJ2xsIHRha2UgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgYENQVV9QTWAgaXMgYSB2YWxpZCBjb25maWcuIFRoYXQncyBhIHNhbml0eSBjaGVjayBJIHdhbnQgdG8gZG8gYmVmb3JlIEkgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0NzowNC42ODAwMTA5NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAyMjA1NjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1BVX1BNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvY3NreS9LY29uZmlnPTIzMj1jaG9pY2VcXG4tLVxcbmFyY2gvY3NreS9LY29uZmlnLTIzNy1cXG5hcmNoL2Nza3kvS2NvbmZpZzoyMzg6Y29uZmlnIENQVV9QTVVfTk9ORVxcbmFyY2gvY3NreS9LY29uZmlnLTIzOS1cXHRib29sIFxcXCJOb25lXFxcIlxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWc9MjQ2PWNob2ljZVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWctMjQ5LVxcbmFyY2gvY3NreS9LY29uZmlnOjI1MDpjb25maWcgQ1BVX1BNX05PTkVcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiTm9uZVxcXCJcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTItXFxuYXJjaC9jc2t5L0tjb25maWc6MjUzOmNvbmZpZyBDUFVfUE1fV0FJVFxcbmFyY2gvY3NreS9LY29uZmlnLTI1NC1cXHRib29sIFxcXCJ3YWl0XFxcIlxcbmFyY2gvY3NreS9LY29uZmlnLTI1NS1cXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTY6Y29uZmlnIENQVV9QTV9ET1pFXFxuYXJjaC9jc2t5L0tjb25maWctMjU3LVxcdGJvb2wgXFxcImRvemVcXFwiXFxuYXJjaC9jc2t5L0tjb25maWctMjU4LVxcbmFyY2gvY3NreS9LY29uZmlnOjI1OTpjb25maWcgQ1BVX1BNX1NUT1BcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwic3RvcFxcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnPTM4NT1jb25maWcgUE1fR0VORVJJQ19ET01BSU5TX09GXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zODgtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6Mzg5OmNvbmZpZyBDUFVfUE1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zOTAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0NzowNy43MDIwNzM4MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY1OTExMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBDb25maWd1cmF0aW9uIFNhbml0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gKkNQVV9QTSog4oCTIHRoYXQncyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QuICpLVk0qLi4uIHllcCwgdGhhdCByaW5ncyBhIGJlbGwgdG9vLCB0b3RhbGx5IGxlZ2l0LiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgZ2VuZXJpYyBLVk0gaGVyZSwgb3IgaXMgdGhlcmUgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlPyBXZSBuZWVkIHRvIGJlIHByZWNpc2UsIG9yIHdlJ3JlIGdvaW5nIHRvIGhhdmUgaXNzdWVzIGxhdGVyLiBHb3R0YSBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBhIGRlZGljYXRlZCBSSVNDLVYgS1ZNIGNvbmZpZ3VyYXRpb24gZmxvYXRpbmcgYXJvdW5kIHNvbWV3aGVyZS4gSXTigJlzIGVzc2VudGlhbCB0byBhdm9pZCBhbWJpZ3VpdHkgaGVyZSBhbmQgbWFrZSBzdXJlIHdl4oCZcmUgdXNpbmcgdGhlIHJpZ2h0IHNldHRpbmdzIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzIzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MTEuMjY3OTg3NjIyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTk0NjUzMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cXHRib29sIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnPTE2PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzoxODpjb25maWcgS1ZNXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzAtXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjMxOmNvbmZpZyBLVk1fTUlQU19ERUJVR19DT1AwX0NPVU5URVJTXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIk1haW50YWluIGNvdW50ZXJzIGZvciBDT1AwIGFjY2Vzc2VzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNy1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyOTpjb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMwLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM4OmNvbmZpZyBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00NC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDU6Y29uZmlnIEtWTV9CT09LM1NfMzJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc18zMiBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI1LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI3LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjk6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJEZXRhaWxlZCB0aW1pbmcgZm9yIHRoZSBQOSBlbnRyeSBwb2ludFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QOF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVxcdGJvb2wgXFxcIkRldGFpbGVkIHRpbWluZyBmb3IgaHlwZXJ2aXNvciByZWFsLW1vZGUgY29kZSAoZm9yIFBPV0VSOClcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU2LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QTVVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJIeXBlcnZpc29yIFBlcmYgZXZlbnRzIGZvciBLVk0gQm9vazNzLUhWXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4My1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg0OmNvbmZpZyBLVk1fQk9PS0VfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg2LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgZXhpdCB0aW1pbmdcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTg6Y29uZmlnIEtWTV9FNTAwVjJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk5LVxcdGJvb2wgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMi1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjEzOmNvbmZpZyBLVk1fRTUwME1DXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cXHRib29sIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBFNTAwTUMvRTU1MDAvRTY1MDAgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjMwLVxcdGJvb2wgXFxcIktWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNDE6Y29uZmlnIEtWTV9YSUNTXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJLVk0gaW4ta2VybmVsIFhJQ1MgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1MC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjUxOmNvbmZpZyBLVk1fWElWRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcXFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1xcXCJcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiS1ZNIEd1ZXN0IHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00NS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDY6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTgzOT1zb3VyY2UgXFxcImFyY2gveDg2L3hlbi9LY29uZmlnXFxcIlxcbmFyY2gveDg2L0tjb25maWctODQwLVxcbmFyY2gveDg2L0tjb25maWc6ODQxOmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTg0Mi1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTMtXFxudmlydC9rdm0vS2NvbmZpZzo0OmNvbmZpZyBLVk1fQ09NTU9OXFxudmlydC9rdm0vS2NvbmZpZy01LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTM5PWNvbmZpZyBORUVEX0tWTV9ESVJUWV9SSU5HX1dJVEhfQklUTUFQXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxcbnZpcnQva3ZtL0tjb25maWc6NDM6Y29uZmlnIEtWTV9NTUlPXFxudmlydC9rdm0vS2NvbmZpZy00NC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNDUtXFxudmlydC9rdm0vS2NvbmZpZzo0Njpjb25maWcgS1ZNX0FTWU5DX1BGXFxudmlydC9rdm0vS2NvbmZpZy00Ny0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy00OS0jIFRvZ2dsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaXJlY3Qgbm90aWZpY2F0aW9uIGFuZCBiYXRjaCBqb2JcXG52aXJ0L2t2bS9LY29uZmlnOjUwOmNvbmZpZyBLVk1fQVNZTkNfUEZfU1lOQ1xcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9NTk9Y29uZmlnIEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjEtXFxudmlydC9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX1ZGSU9cXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTY1PWNvbmZpZyBIQVZFX0tWTV9JTlZBTElEX1dBS0VVUFNcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjctXFxudmlydC9rdm0vS2NvbmZpZzo2ODpjb25maWcgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNzAtXFxudmlydC9rdm0vS2NvbmZpZzo3MTpjb25maWcgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTczLVxcbnZpcnQva3ZtL0tjb25maWc6NzQ6Y29uZmlnIEtWTV9DT01QQVRcXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTkxPWNvbmZpZyBIQVZFX0tWTV9QTV9OT1RJRklFUlxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy05My1cXG52aXJ0L2t2bS9LY29uZmlnOjk0OmNvbmZpZyBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTk2LVxcbnZpcnQva3ZtL0tjb25maWc6OTc6Y29uZmlnIEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy05OS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy0xMDItXFxudmlydC9rdm0vS2NvbmZpZzoxMDM6Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MTQuMTg3NDU4MjQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MzU4ODg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIENQVSBQb3dlciBNYW5hZ2VtZW50IG9uIFJJU0MtVioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBgS1ZNYCBhbmQgYENQVV9QTWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBjYW4gd2UgZXZlbiBlbmFibGUgYENQVV9QTWAgb24gYSBSSVNDLVYgc3lzdGVtP1wiIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIGBDUFVfUE1gIGluIGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AuIEV4Y2VsbGVudC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgXCJJcyBgQ1BVX1BNYCBhY3R1YWxseSAqc2VsZWN0ZWQqIGJ5IGFueXRoaW5nIHdpdGhpbiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZT9cIiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdCBhbmQgY29uZmlybSBpdHMgcHJlc2VuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODI0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MTcuMjgxMDQ5NDAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg5NTE3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBDUFVfUE1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0yPWNvbmZpZyBBUk1cXG4tLVxcbmFyY2gvYXJtL0tjb25maWctNTgtXFx0c2VsZWN0IENMT05FX0JBQ0tXQVJEU1xcbmFyY2gvYXJtL0tjb25maWc6NTk6XFx0c2VsZWN0IENQVV9QTSBpZiBTVVNQRU5EIHx8IENQVV9JRExFXFxuYXJjaC9hcm0vS2NvbmZpZy02MC1cXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmIEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcXG4tLVxcbmFyY2gvYXJtL0tjb25maWc9OTk0PWNvbmZpZyBCTF9TV0lUQ0hFUlxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy05OTYtXFx0ZGVwZW5kcyBvbiBCSUdfTElUVExFIFxcdTAwMjZcXHUwMDI2IE1DUE0gXFx1MDAyNlxcdTAwMjYgSE9UUExVR19DUFUgXFx1MDAyNlxcdTAwMjYgQVJNX0dJQ1xcbmFyY2gvYXJtL0tjb25maWc6OTk3OlxcdHNlbGVjdCBDUFVfUE1cXG5hcmNoL2FybS9LY29uZmlnLTk5OC1cXHRoZWxwXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xMTEtXFx0c2VsZWN0IENPTU1PTl9DTEtcXG5hcmNoL2FybTY0L0tjb25maWc6MTEyOlxcdHNlbGVjdCBDUFVfUE0gaWYgKFNVU1BFTkQgfHwgQ1BVX0lETEUpXFxuYXJjaC9hcm02NC9LY29uZmlnLTExMy1cXHRzZWxlY3QgQ1BVTUFTS19PRkZTVEFDSyBpZiBOUl9DUFVTIFxcdTAwM2UgMjU2XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04Ny1cXHRzZWxlY3QgQ09NTU9OX0NMS1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODg6XFx0c2VsZWN0IENQVV9QTVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODktXFx0c2VsZWN0IEVEQUNfU1VQUE9SVFxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9Mj1jb25maWcgTUlQU1xcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMzUtXFx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmIChUQVJHRVRfSVNBX1JFViBcXHUwMDNjIDEpXFxuYXJjaC9taXBzL0tjb25maWc6MzY6XFx0c2VsZWN0IENQVV9QTSBpZiBDUFVfSURMRSB8fCBTVVNQRU5EXFxuYXJjaC9taXBzL0tjb25maWctMzctXFx0c2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQgaWYgITY0QklUXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctOTgtXFx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFSSVNDVl9JU0FfWkJCXFxuYXJjaC9yaXNjdi9LY29uZmlnOjk5OlxcdHNlbGVjdCBDUFVfUE0gaWYgQ1BVX0lETEUgfHwgSElCRVJOQVRJT04gfHwgU1VTUEVORFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMDAtXFx0c2VsZWN0IERZTkFNSUNfRlRSQUNFIGlmIEZVTkNUSU9OX1RSQUNFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0NzoyMC4wNzA1NzQ1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTY2MjQ4NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBBSUEgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGBDUFVfUE1gIG9uIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBJdCdzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYENQVV9JRExFYCwgYEhJQkVSTkFUSU9OYCwgb3IgYFNVU1BFTkRgIGFyZSBlbmFibGVkLCBtZWFuaW5nIGl0J3MgYXZhaWxhYmxlIGFuZCAqdXNlZCogd2l0aGluIHRoaXMgY29udGV4dC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaDsgaXQgbW9kaWZpZXMgUklTQy1WIEtWTSBBSUEgc3VwcG9ydCwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGEgQ1BVIFBNIG5vdGlmaWVyLiBUaGUgY2hhbmdlcyBjZW50ZXIgYXJvdW5kIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLCB3aGVyZSBib29sZWFuIHBhcmFtZXRlcnMgbm93IGRpY3RhdGUgZWl0aGVyIGEgZnVsbCBjbGVhbnVwIG9yIGEgbGlnaHR3ZWlnaHQgQ1NSIHNhdmUvcmVzdG9yZS4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBmb3IgZnV6emluZy4gV2UgaGF2ZSBjbGVhciBmdW5jdGlvbnMgdG8gdGFyZ2V0LlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5OiBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYW5kIGFsc28gdGhlIG5ldyBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAuXG5cbkZvciBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgYEtWTWAgYW5kIGBDUFVfUE1gIGVuYWJsZWQuIFNpbmNlIGBSSVNDVmAgaXMgaW1wbGllZCwgSSdtIGdvb2QgdGhlcmUuIEhvd2V2ZXIsIHNpbmNlIGBDUFVfUE1gIGlzIHNlbGVjdGVkLCBub3QgcHJvbXB0ZWQsIGJ5IGBDUFVfSURMRWAsIGBISUJFUk5BVElPTmAsIG9yIGBTVVNQRU5EYCwgSSBtaWdodCBuZWVkIHRvIG1ha2Ugc3VyZSBvbmUgb2YgdGhvc2UgaXMgZW5hYmxlZCB0byBnZXQgaXQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGtlcm5lbC9wb3dlci9LY29uZmlnYCB0byBiZSBzdXJlLiBJIG1heSBuZWVkIHRvIHNwZWNpZmljYWxseSBlbmFibGUgYENQVV9JRExFYCBvciBgU1VTUEVORGAgdG8gZW5zdXJlIGBDUFVfUE1gIGlzIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MjYuMDM2ODI1OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTYzODM1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVV9QTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2Nza3kvS2NvbmZpZz0yMzI9Y2hvaWNlXFxuLS1cXG5hcmNoL2Nza3kvS2NvbmZpZy0yMzctXFxuYXJjaC9jc2t5L0tjb25maWc6MjM4OmNvbmZpZyBDUFVfUE1VX05PTkVcXG5hcmNoL2Nza3kvS2NvbmZpZy0yMzktXFx0Ym9vbCBcXFwiTm9uZVxcXCJcXG4tLVxcbmFyY2gvY3NreS9LY29uZmlnPTI0Nj1jaG9pY2VcXG4tLVxcbmFyY2gvY3NreS9LY29uZmlnLTI0OS1cXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTA6Y29uZmlnIENQVV9QTV9OT05FXFxuYXJjaC9jc2t5L0tjb25maWctMjUxLVxcdGJvb2wgXFxcIk5vbmVcXFwiXFxuYXJjaC9jc2t5L0tjb25maWctMjUyLVxcbmFyY2gvY3NreS9LY29uZmlnOjI1Mzpjb25maWcgQ1BVX1BNX1dBSVRcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTQtXFx0Ym9vbCBcXFwid2FpdFxcXCJcXG5hcmNoL2Nza3kvS2NvbmZpZy0yNTUtXFxuYXJjaC9jc2t5L0tjb25maWc6MjU2OmNvbmZpZyBDUFVfUE1fRE9aRVxcbmFyY2gvY3NreS9LY29uZmlnLTI1Ny1cXHRib29sIFxcXCJkb3plXFxcIlxcbmFyY2gvY3NreS9LY29uZmlnLTI1OC1cXG5hcmNoL2Nza3kvS2NvbmZpZzoyNTk6Y29uZmlnIENQVV9QTV9TVE9QXFxuYXJjaC9jc2t5L0tjb25maWctMjYwLVxcdGJvb2wgXFxcInN0b3BcXFwiXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zODU9Y29uZmlnIFBNX0dFTkVSSUNfRE9NQUlOU19PRlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzg4LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OTpjb25maWcgQ1BVX1BNXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzkwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MjguODkzMjI0NjU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzY1ODAwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRW5hYmxpbmcgTG9naWMgZm9yIENQVSBQb3dlciBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYENQVV9QTWAgaXMgb25lIG9mIHRob3NlIHRoYXQncyAqb25seSogYnJvdWdodCBpbiBieSBhIGBzZWxlY3RgIHN0YXRlbWVudCDigJMgaXQgZG9lc24ndCBnZXQgYSBkaXJlY3QgcHJvbXB0IG9mIGl0cyBvd24uIFRoYXQgbWVhbnMgaWYgSSB3YW50IHRvIGFjdHVhbGx5ICp1c2UqIGl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHNvbWV0aGluZyB0aGF0IHNlbGVjdHMgaXQgaXMgZW5hYmxlZC4gUmlnaHQsIG1ha2VzIHNlbnNlLlxuXG5TbywgaG93IGRvIEkgZ28gYWJvdXQgdGhhdD8gV2VsbCwgbG9va2luZyBhdCBpdCwgaXQgc2VlbXMgdGhhdCBlaXRoZXIgYFNVU1BFTkRgIG9yIGBDUFVfSURMRWAgc2hvdWxkIGRvIHRoZSB0cmljay4gU2luY2UgSSBhbSBkZWFsaW5nIHdpdGggY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGVpdGhlciBvZiB0aGVtIGlzIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCB3YXksIHRoZSBkZXBlbmRlbmN5IGZvciBgQ1BVX1BNYCBpcyBtZXQsIGFuZCBJIGNhbiBiZSBzdXJlIEknbSBnZXR0aW5nIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmVzIEkgd2FudC4gTm93IHRvIGRpZyBpbnRvIGBTVVNQRU5EYCBhbmQgYENQVV9JRExFYCB0byBjb25maXJtIHRoZXkgYXJlIHN1aXRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY5MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAxOjQ3OjMyLjM2OTgwNzA2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxODAyNTAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1VTUEVORFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcG93ZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjI6Y29uZmlnIFNVU1BFTkRcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlN1c3BlbmQgdG8gUkFNIGFuZCBzdGFuZGJ5XFxcIlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTAtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6MTE6Y29uZmlnIFNVU1BFTkRfRlJFRVpFUlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEyLVxcdGJvb2wgXFxcIkVuYWJsZSBmcmVlemVyIGZvciBzdXNwZW5kIHRvIFJBTS9zdGFuZGJ5XFxcIiBcXFxcXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0yMS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoyMjpjb25maWcgU1VTUEVORF9TS0lQX1NZTkNcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0yMy1cXHRib29sIFxcXCJTa2lwIGtlcm5lbCdzIHN5c19zeW5jKCkgb24gc3VzcGVuZCB0byBSQU0vc3RhbmRieVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDE6NDc6MzUuMjg3ODM5MTIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjM3ODUwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyBTeXN0ZW0gU3RhdGVzKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBzeXN0ZW0gc3RhdGVzIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCdzIGF2YWlsYWJsZSB0byBpbnRlcnJvZ2F0ZS4gRmlyc3QsIHRoZSBgU1VTUEVORGAgc3RhdGUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgc2luY2UgdGhlcmUncyBhIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIGxpc3QgaXQgYW5kIGV4dHJhY3QgcmVsZXZhbnQgaW5mb3JtYXRpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBOb3csIHNpbmNlIHdlJ3JlIGxvb2tpbmcgYXQgc3lzdGVtIHBvd2VyIG1hbmFnZW1lbnQsIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgQ1BVX0lETEVgLiBJIG5lZWQgdG8gYXNzZXNzIGl0cyBiZWhhdmlvciBhbmQgd2hhdCBtZXRyaWNzIHdlIGhhdmUgYWNjZXNzIHRvIHJlbGF0ZWQgdG8gQ1BVIGlkbGVuZXNzLCBhcyB0aGF0IGlzIGxpa2VseSB0aGUgbmV4dCBsb2dpY2FsIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNDYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMTo0NzozOC42MTE2MjY1NzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTI0OTIxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVV9JRExFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3B1aWRsZS9LY29uZmlnPTI9bWVudSBcXFwiQ1BVIElkbGVcXFwiXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMy1cXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZzo0OmNvbmZpZyBDUFVfSURMRVxcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTUtXFx0Ym9vbCBcXFwiQ1BVIGlkbGUgUE0gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnPTE2PWlmIENQVV9JRExFXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMTctXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MTg6Y29uZmlnIENQVV9JRExFX01VTFRJUExFX0RSSVZFUlNcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0xOS1cXHRib29sXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMjAtXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MjE6Y29uZmlnIENQVV9JRExFX0dPVl9MQURERVJcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJMYWRkZXIgZ292ZXJub3IgKGZvciBwZXJpb2RpYyB0aW1lciB0aWNrKVxcXCJcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yMy1cXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZzoyNDpjb25maWcgQ1BVX0lETEVfR09WX01FTlVcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJNZW51IGdvdmVybm9yIChmb3IgdGlja2xlc3Mgc3lzdGVtKVxcXCJcXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy0yNi1cXG5kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZzoyNzpjb25maWcgQ1BVX0lETEVfR09WX1RFT1xcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIlRpbWVyIGV2ZW50cyBvcmllbnRlZCAoVEVPKSBnb3Zlcm5vciAoZm9yIHRpY2tsZXNzIHN5c3RlbXMpXFxcIlxcbi0tXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWctMzUtXFxuZHJpdmVycy9jcHVpZGxlL0tjb25maWc6MzY6Y29uZmlnIENQVV9JRExFX0dPVl9IQUxUUE9MTFxcbmRyaXZlcnMvY3B1aWRsZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIkhhbHRwb2xsIGdvdmVybm9yIChmb3IgdmlydHVhbGl6ZWQgc3lzdGVtcylcXFwiXFxuLS1cXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZz0xODc9Y29uZmlnIENQVV9GUkVRX1RIRVJNQUxcXG4tLVxcbmRyaXZlcnMvdGhlcm1hbC9LY29uZmlnLTE5Ny1cXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZzoxOTg6Y29uZmlnIENQVV9JRExFX1RIRVJNQUxcXG5kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZy0xOTktXFx0Ym9vbCBcXFwiQ1BVIGlkbGUgY29vbGluZyBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAxOjQ3OjQxLjQwNDE0MDc0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQzMzY0Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRyaWdnZXJzIHdoZW4gYENQVV9JRExFYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGdvdCBhIHByb21wdCwgc28gaXQncyBhIHZhbGlkIGNvbmZpZyBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYEtWTWAsIGBTVVNQRU5EYCwgYW5kIGBDUFVfSURMRWAgYXJlIGFsbCBlbmFibGVkIHRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLlxuXG5XYWl0LCBpdCBhbHNvIHRvdWNoZXMgYGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgIGFuZCBga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGR1cmluZyBLVk0gaW5pdGlhbGl6YXRpb24gYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIFNvLCB0aGUga2V5IGhlcmUgaXMgbGlrZWx5IGZ1enppbmcgdGhlIEtWTSBmdW5jdGlvbmFsaXR5IG9uIFJJU0MtVi4gVGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBpcy5cblxuSGVyZSdzIG15IGRpc3RpbGxlZCB1bmRlcnN0YW5kaW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBpcyB0b3VjaGluZyBjcnVjaWFsIEtWTSBhbmQgcG93ZXIgbWFuYWdlbWVudCBjb2RlLlxuKiAgICoqRm9jdXMgU3ltYm9scyoqOiBJJ20gZ29pbmcgdG8gcHV0IG15IGZvY3VzIG9uIHRoZXNlOlxuICAgICogICBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgXG4gICAgKiAgIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgXG4gICAgKiAgIGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYFxuXG4qICAgKipFbmFibGVDb25maWdzKio6IEknbGwgbWFrZSBzdXJlIHRoZXNlIGFyZSBlbmFibGVkIGR1cmluZyB0ZXN0aW5nOlxuICAgICogICBgS1ZNYFxuICAgICogICBgU1VTUEVORGBcbiAgICAqICAgYENQVV9JRExFYFxuXG4qKlJlYXNvbmluZzoqKlxuXG5UaGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBSSVNDLVYgS1ZNIEFJQSB0byBtYW5hZ2UgQ1BVIGlkbGUgc3RhdGVzIHdoZW4gdGhlIENQVSBpcyBpbiBhIG5vbi1yZXRlbnRpb24gc3RhdGUuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGEgQ1BVIFBNIG5vdGlmaWVyLiBUaGF0IG5vdGlmaWVyIGlzIGNyaXRpY2FsIGFzIGl0IHRyaWdnZXJzIGNhbGxzIHRvIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBhcmd1bWVudCwgd2hpY2ggaXMgdml0YWwgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhpcyBhbGwgbG9va3MgbGlrZSBmdW5kYW1lbnRhbCBrZXJuZWwgbG9naWMgdGhhdCdzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24gb3IgdGVhcmRvd24uIFRoaXMgYXJlYSBuZWVkcyBzZXJpb3VzIGF0dGVudGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgcmVzdWx0IGluIHRoZSBDUFUgZW50ZXJpbmcgYW5kIGxlYXZpbmcgYSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGUgdG8gY29uc3RydWN0IHN1aXRhYmxlIGZ1enppbmcgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MjcsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAxOjQ3OjQ4LjI0NzUwNzc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4ODgwMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlNVU1BFTkRcIixcbiAgICBcIkNQVV9JRExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X2FpYV9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZGlzYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgc3VwcG9ydCB0byBoYW5kbGUgQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgdGhhdCBjYWxscyBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCB3aXRoIGEgbmV3IGBmdWxsX2NsZWFudXBgIGJvb2xlYW4gcGFyYW1ldGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZHVyaW5nIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyBhbmQgS1ZNIGluaXRpYWxpemF0aW9uL3RlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiU1VTUEVORFwiLFxuICAgIFwiQ1BVX0lETEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfYWlhX2VuYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9kaXNhYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBzdXBwb3J0IHRvIGhhbmRsZSBDUFUgbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciB0aGF0IGNhbGxzIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIHdpdGggYSBuZXcgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBwYXJhbWV0ZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIGFuZCBLVk0gaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowktxvk[1] Phase: Succeeded StartedAt: 2026-06-25 01:48:14 +0000 UTC FinishedAt: 2026-06-25 01:48:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 01:48:14 +0000 UTC FinishedAt: 2026-06-25 01:48:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2] Phase: Succeeded StartedAt: 2026-06-25 01:48:14 +0000 UTC FinishedAt: 2026-06-25 02:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 01:48:14 +0000 UTC FinishedAt: 2026-06-25 02:53:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 01:48:14 +0000 UTC FinishedAt: 2026-06-25 01:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 01:48:14 +0000 UTC FinishedAt: 2026-06-25 01:48:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-workflowktxvk/series-workflowktxvk-convert-artifact-1392743763/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 01:48:47 +0000 UTC FinishedAt: 2026-06-25 02:17:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 01:48:47 +0000 UTC FinishedAt: 2026-06-25 02:17:19 +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:*fe43d1b6-d3ec-41f3-b509-1322f897e2ef,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-workflowktxvk/series-workflowktxvk-convert-artifact-1392743763/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": "4d18def8-3e5e-4ad2-ad1f-eae33b82f568", "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-workflowktxvk/series-workflowktxvk-build-action-586340481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 01:48:47 +0000 UTC FinishedAt: 2026-06-25 02:15:53 +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:*fe43d1b6-d3ec-41f3-b509-1322f897e2ef,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-workflowktxvk/series-workflowktxvk-convert-artifact-1392743763/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": "4d18def8-3e5e-4ad2-ad1f-eae33b82f568", "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-workflowktxvk/series-workflowktxvk-build-action-586340481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:17:19 +0000 UTC FinishedAt: 2026-06-25 02:17:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:17:19 +0000 UTC FinishedAt: 2026-06-25 02:17:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:17:19 +0000 UTC FinishedAt: 2026-06-25 02:17:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:17:19 +0000 UTC FinishedAt: 2026-06-25 02:17:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-workflowktxvk/series-workflowktxvk-convert-artifact-749650762/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:17:39 +0000 UTC FinishedAt: 2026-06-25 02:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:17:39 +0000 UTC FinishedAt: 2026-06-25 02:19:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d18def8-3e5e-4ad2-ad1f-eae33b82f568,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-workflowktxvk/series-workflowktxvk-build-action-586340481/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-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:19:41 +0000 UTC FinishedAt: 2026-06-25 02:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:19:41 +0000 UTC FinishedAt: 2026-06-25 02:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:19:41 +0000 UTC FinishedAt: 2026-06-25 02:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:19:41 +0000 UTC FinishedAt: 2026-06-25 02:48:21 +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:*fe43d1b6-d3ec-41f3-b509-1322f897e2ef,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-workflowktxvk/series-workflowktxvk-convert-artifact-749650762/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": "be439de0-e190-471a-aee0-bdc80de49b04", "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-workflowktxvk/series-workflowktxvk-build-action-1577527150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:19:41 +0000 UTC FinishedAt: 2026-06-25 02:48: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:*fe43d1b6-d3ec-41f3-b509-1322f897e2ef,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-workflowktxvk/series-workflowktxvk-convert-artifact-749650762/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": "be439de0-e190-471a-aee0-bdc80de49b04", "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-workflowktxvk/series-workflowktxvk-build-action-1577527150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:48:21 +0000 UTC FinishedAt: 2026-06-25 02:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:48:21 +0000 UTC FinishedAt: 2026-06-25 02:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:48:21 +0000 UTC FinishedAt: 2026-06-25 02:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:48:21 +0000 UTC FinishedAt: 2026-06-25 02:50:09 +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:*be439de0-e190-471a-aee0-bdc80de49b04,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-workflowktxvk/series-workflowktxvk-build-action-1577527150/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-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:50:18 +0000 UTC FinishedAt: 2026-06-25 02:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:50:18 +0000 UTC FinishedAt: 2026-06-25 02:53:06 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"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:*4d18def8-3e5e-4ad2-ad1f-eae33b82f568,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be439de0-e190-471a-aee0-bdc80de49b04,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-workflowktxvk/series-workflowktxvk-build-action-586340481/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-workflowktxvk/series-workflowktxvk-build-action-1577527150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:50:18 +0000 UTC FinishedAt: 2026-06-25 02:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:50:18 +0000 UTC FinishedAt: 2026-06-25 02:50:23 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"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-workflowktxvk/series-workflowktxvk-convert-artifact-508478687/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:50:18 +0000 UTC FinishedAt: 2026-06-25 02:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:50:18 +0000 UTC FinishedAt: 2026-06-25 02:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:50:18 +0000 UTC FinishedAt: 2026-06-25 02:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:50:28 +0000 UTC FinishedAt: 2026-06-25 02:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowktxvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_cpu_pm_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","SUSPEND","CPU_IDLE"],"series_id":"50eafa02-8c4a-4160-a274-dac74e5dee8e","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-06-25 02:50:28 +0000 UTC FinishedAt: 2026-06-25 02:52:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d18def8-3e5e-4ad2-ad1f-eae33b82f568,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be439de0-e190-471a-aee0-bdc80de49b04,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-workflowktxvk/series-workflowktxvk-build-action-586340481/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-workflowktxvk/series-workflowktxvk-build-action-1577527150/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-workflowktxvk/series-workflowktxvk-convert-artifact-508478687/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,}