Name: series-workflowcjspc Phase: Succeeded StartedAt: 2026-07-02 01:34:48 +0000 UTC FinishedAt: 2026-07-02 02:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[0] Phase: Succeeded StartedAt: 2026-07-02 01:34:48 +0000 UTC FinishedAt: 2026-07-02 01:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 01:34:48 +0000 UTC FinishedAt: 2026-07-02 01:49:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "266984f2-b664-4afb-a82b-b064f675b4ed" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvmppc_run_core", "kvmppc_run_vcpu", "kvmhv_run_single_vcpu", "kvmppc_prepare_to_enter" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19ydW5fY29yZSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfcnVuX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtaHZfcnVuX3NpbmdsZV92Y3B1JiMzNDssCiAgICAmIzM0O2t2bXBwY19wcmVwYXJlX3RvX2VudGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSB2Q1BVIHJ1biBsb29wIG9uIFBvd2VyUEMgdG8gdXNlIHRoZSBnZW5lcmljIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBhbmQga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG9wZW4tY29kZWQgbmVlZF9yZXNjaGVkKCkgYW5kIHNpZ25hbF9wZW5kaW5nKCkgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBwZW5kaW5nIHdvcmsgKGxpa2Ugc2lnbmFscyBhbmQgcmVzY2hlZHVsaW5nKSBpcyBoYW5kbGVkIGJlZm9yZSBlbnRlcmluZyB0aGUgZ3Vlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NDU0OWU1MDUzMTU3MDNmZDNmMjc1MjVmZmU3YzdiYzM4OGY2NDU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMTo0ODoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcbmluZGV4IDlhMGQxYzFhY2E2YzgwLi5iNmJjMmZjODZkY2E2NyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEAgY29uZmlnIEtWTVxuIFx0c2VsZWN0IEtWTV9DT01NT05cbiBcdHNlbGVjdCBLVk1fVkZJT1xuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiYjNDM7XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiBcbiBjb25maWcgS1ZNX0JPT0szU19IQU5ETEVSXG4gXHRib29sXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbmluZGV4IDYxZGJlZWEzMTdmM2I3Li5hMWIyMDc3NTYxYmI1YSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbkBAIC0zODUwLDEwICYjNDM7Mzg1MCwyMCBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBrdm1wcGNfcnVuX2NvcmUoc3RydWN0IGt2bXBwY192Y29yZSAqdmMpXG4gXHQgKiBhbmQgcmV0dXJuIHdpdGhvdXQgZ29pbmcgaW50byB0aGUgZ3Vlc3QocykuXG4gXHQgKiBJZiB0aGUgbW11X3JlYWR5IGZsYWcgaGFzIGJlZW4gY2xlYXJlZCwgZG9uJiMzOTt0IGdvIGludG8gdGhlXG4gXHQgKiBndWVzdCBiZWNhdXNlIHRoYXQgbWVhbnMgYSBIUFQgcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBpcyB0aGUgSVJRcy1kaXNhYmxlZCByZWNoZWNrIGZvclxuJiM0MztcdCAqIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIChyZXNjaGVkdWxlLCBzaWduYWxzLCBhbmQgVElGX05PVElGWV9SRVNVTUVcbiYjNDM7XHQgKiB0YXNrX3dvcmsgc3VjaCBhcyB0aGUgZGVmZXJyZWQgQ0ZTIHRocm90dGxlKS4gSXQgaXMgdGhlIHByZS1QT1dFUjlcbiYjNDM7XHQgKiBhbmFsb2cgb2YgdGhlIGZpbmFsIGdhdGUgaW4ga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KCksIGFuZCBhIHN1cGVyc2V0XG4mIzQzO1x0ICogb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjazogaXQgY2F0Y2hlcyB3b3JrIHRoYXQgcmFjZWQgaW4gYWZ0ZXJcbiYjNDM7XHQgKiB0aGUgZHJhaW4gaW4ga3ZtcHBjX3J1bl92Y3B1KCksIHNvIGEgQ1BVLWJvdW5kIHZDUFUgaXMgdGhyb3R0bGVkIGhlcmVcbiYjNDM7XHQgKiBpbnN0ZWFkIG9mIHJ1bm5pbmcgb25lIG1vcmUgZ3Vlc3QgZGlzcGF0Y2ggcGFzdCBpdHMgcXVvdGEuIElSUXMgYXJlXG4mIzQzO1x0ICogaGFyZC1kaXNhYmxlZCBqdXN0IGFib3ZlLCBzbyB0aGUgbm9uLV9fIHZhcmlhbnQgKHdoaWNoIGFzc2VydHMgdGhhdClcbiYjNDM7XHQgKiBpcyB0aGUgY29ycmVjdCBvbmUuXG4gXHQgKi9cbiBcdGxvY2FsX2lycV9kaXNhYmxlKCk7XG4gXHRoYXJkX2lycV9kaXNhYmxlKCk7XG4tXHRpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IG5lZWRfcmVzY2hlZCgpIHx8XG4mIzQzO1x0aWYgKGxhenlfaXJxX3BlbmRpbmcoKSB8fCB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgfHxcbiBcdCAgICByZWNoZWNrX3NpZ25hbHNfYW5kX21tdShcdTAwMjZjb3JlX2luZm8pKSB7XG4gXHRcdGxvY2FsX2lycV9lbmFibGUoKTtcbiBcdFx0dmMtXHUwMDNldmNvcmVfc3RhdGUgPSBWQ09SRV9JTkFDVElWRTtcbkBAIC00ODI0LDEwICYjNDM7NDgzNCwyNCBAQCBzdGF0aWMgaW50IGt2bXBwY19ydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZjLVx1MDAzZXJ1bm5lciA9IHZjcHU7XG4gXHRcdGlmIChuX2NlZGVkID09IHZjLVx1MDAzZW5fcnVubmFibGUpIHtcbiBcdFx0XHRrdm1wcGNfdmNvcmVfYmxvY2tlZCh2Yyk7XG4tXHRcdH0gZWxzZSBpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcbiBcdFx0XHRrdm1wcGNfdmNvcmVfcHJlZW1wdCh2Yyk7XG4tXHRcdFx0LyogTGV0IHNvbWV0aGluZyBlbHNlIHJ1biAqL1xuLVx0XHRcdGNvbmRfcmVzY2hlZF9sb2NrKFx1MDAyNnZjLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBMZXQgc29tZXRoaW5nIGVsc2UgcnVuLCBhbmQgcnVuIHBlbmRpbmcgZ3Vlc3QtbW9kZVxuJiM0MztcdFx0XHQgKiB3b3JrIChyZXNjaGVkdWxlLCBhbmQgVElGX05PVElGWV9SRVNVTUUgdGFza193b3JrIHN1Y2hcbiYjNDM7XHRcdFx0ICogYXMgdGhlIGRlZmVycmVkIENGUyB0aHJvdHRsZSkgYmVmb3JlIHdlIHdvdWxkIHJlLWVudGVyXG4mIzQzO1x0XHRcdCAqIHRoZSBndWVzdCwgc28gYSBDUFUtYm91bmQgdkNQVSBpcyBhY3R1YWxseSB0aHJvdHRsZWRcbiYjNDM7XHRcdFx0ICogaGVyZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgcGFzdCBpdHMgcXVvdGEuIFRoaXMgaXMgYVxuJiM0MztcdFx0XHQgKiBzdXBlcnNldCBvZiB0aGUgb2xkIG5lZWRfcmVzY2hlZCgpIGNoZWNrLiBVc2UgdGhlIHJhd1xuJiM0MztcdFx0XHQgKiBoZWxwZXIsIG5vdCB0aGUga3ZtXyB3cmFwcGVyOiBzaWduYWxzIChLVk1fRVhJVF9JTlRSXG4mIzQzO1x0XHRcdCAqIGFuZCB0aGUgc2lnbmFsX2V4aXRzIHN0YXQpIGFyZSBhY2NvdW50ZWQgYnkgdGhpcyBwYXRoJiMzOTtzXG4mIzQzO1x0XHRcdCAqIGV4aXN0aW5nIGhhbmRsaW5nIGJlbG93LCBzbyBnb2luZyB0aHJvdWdoIHRoZSB3cmFwcGVyXG4mIzQzO1x0XHRcdCAqIGhlcmUgd291bGQgZG91YmxlLWNvdW50IHRoZW0uIFRoZSBoZWxwZXIgbWF5IHNjaGVkdWxlKCksXG4mIzQzO1x0XHRcdCAqIHNvIHRoZSB2Y29yZSBsb2NrIGlzIGRyb3BwZWQgYXJvdW5kIGl0LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmMtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdHhmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpO1xuJiM0MztcdFx0XHRzcGluX2xvY2soXHUwMDI2dmMtXHUwMDNlbG9jayk7XG4gXHRcdFx0aWYgKHZjLVx1MDAzZXZjb3JlX3N0YXRlID09IFZDT1JFX1BSRUVNUFQpXG4gXHRcdFx0XHRrdm1wcGNfdmNvcmVfZW5kX3ByZWVtcHQodmMpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTQ4OTksOCAmIzQzOzQ5MjMsMjEgQEAgaW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAobmVlZF9yZXNjaGVkKCkpXG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUnVuIHBlbmRpbmcgd29yayBiZWZvcmUgKHJlLSllbnRlcmluZyB0aGUgZ3Vlc3QsIG1vc3QgaW1wb3J0YW50bHlcbiYjNDM7XHQgKiB0YXNrX3dvcmsgcXVldWVkIHZpYSBUV0FfUkVTVU1FIChlLmcuIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoXG4mIzQzO1x0ICogdGhyb3R0bGUsIHdoaWNoIG9ubHkgc2V0cyBUSUZfTk9USUZZX1JFU1VNRSkuIFdpdGhvdXQgdGhpcyBhIENQVS1ib3VuZFxuJiM0MztcdCAqIHZDUFUgdGhhdCBrZWVwcyByZXR1cm5pbmcgUkVTVU1FX0dVRVNUIG5ldmVyIHJlYWNoZXMgYW4gZXhpdC10by11c2VyXG4mIzQzO1x0ICogcG9pbnQsIHNvIHRoZSB0aHJvdHRsZSBpcyBuZXZlciBlbmZvcmNlZCBhbmQgdGhlIHRhc2sgcnVucyBmYXIgYmV5b25kXG4mIzQzO1x0ICogaXRzIHF1b3RhLiBUaGUgaGVscGVyIGFsc28gaGFuZGxlcyByZXNjaGVkdWxlIGFuZCBzaWduYWxzLCByZXBsYWNpbmdcbiYjNDM7XHQgKiB0aGUgY29uZF9yZXNjaGVkKCkgdGhhdCB3YXMgaGVyZS4gSXQgbWF5IHNjaGVkdWxlKCksIHNvIGl0IHJ1bnMgYmVmb3JlXG4mIzQzO1x0ICogcHJlZW1wdGlvbiBhbmQgSVJRcyBhcmUgZGlzYWJsZWQsIHdpdGggbm8gdmNvcmUvS1ZNIGxvY2tzIGhlbGQuIFRoaXNcbiYjNDM7XHQgKiBpcyB0aGUgcGVyLXJlZW50cnkgc2l0ZSBzaGFyZWQgYnkgdGhlIGJhcmUtbWV0YWwgYW5kIHBzZXJpZXMgKG5lc3RlZClcbiYjNDM7XHQgKiBwYXRocywgc28gYm90aCBhcmUgY292ZXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyID0ga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yayh2Y3B1KTtcbiYjNDM7XHRpZiAocilcdC8qIC1FSU5UUjogc2lnbmFsIHBlbmRpbmcsIGV4aXQgdG8gdXNlcnNwYWNlIChLVk1fRVhJVF9JTlRSKSAqL1xuJiM0MztcdFx0cmV0dXJuIHI7XG4gXG4gXHRrdm1wcGNfdXBkYXRlX3ZwYXModmNwdSk7XG4gXG5AQCAtNDkxNCw5ICYjNDM7NDk1MSwxNCBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guc3RhdGUgPSBLVk1QUENfVkNQVV9SVU5OQUJMRTtcbiBcbi1cdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbi1cdFx0Z290byBzaWdwZW5kO1xuLVx0aWYgKG5lZWRfcmVzY2hlZCgpIHx8ICFrdm0tXHUwMDNlYXJjaC5tbXVfcmVhZHkpXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGaW5hbCBJUlFzLWRpc2FibGVkIGNoZWNrIGZvciBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayBvciBhbiBNTVUgdGhhdFxuJiM0MztcdCAqIGlzIG5vdCByZWFkeS4gSVJRcyBhcmUgZGlzYWJsZWQgaGVyZSwgc28gYmFpbCB0byB0aGUgb3V0ZXIgbG9vcCxcbiYjNDM7XHQgKiB3aGljaCByZS1lbnRlcnMgYW5kIGhhbmRsZXMgdGhlIHBlbmRpbmcgd29yayB2aWFcbiYjNDM7XHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgYWJvdmUgKGV4aXRpbmcgd2l0aCAtRUlOVFIgb24gYVxuJiM0MztcdCAqIHNpZ25hbCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fCAha3ZtLVx1MDAzZWFyY2gubW11X3JlYWR5KVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHZjcHUtXHUwMDNlY3B1ID0gcGNwdTtcbkBAIC01MDY4LDEwICYjNDM7NTExMCw2IEBAIGludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCxcbiBcbiBcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2gucmV0O1xuIFxuLSBzaWdwZW5kOlxuLVx0dmNwdS1cdTAwM2VzdGF0LnNpZ25hbF9leGl0cyYjNDM7JiM0Mzs7XG4tXHRydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnJldCA9IC1FSU5UUjtcbiAgb3V0OlxuIFx0dmNwdS1cdTAwM2VjcHUgPSAtMTtcbiBcdHZjcHUtXHUwMDNlYXJjaC50aHJlYWRfY3B1ID0gLTE7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuaW5kZXggMDAzMDIzOTlmYzM3YjQuLmZmMWE5YThkZTVlMGE0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5AQCAtODQsMjAgJiM0Mzs4NCwzNiBAQCBpbnQga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xuIFxuIFx0d2hpbGUgKHRydWUpIHtcbi1cdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4mIzQzO1x0XHRpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogSGFuZGxlIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIGJlZm9yZSBlbnRlcmluZyB0aGVcbiYjNDM7XHRcdFx0ICogZ3Vlc3Q6IHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRVxuJiM0MztcdFx0XHQgKiB0YXNrX3dvcmsgc3VjaCBhcyB0aGUgZGVmZXJyZWQgQ0ZTIGJhbmR3aWR0aCB0aHJvdHRsZS5cbiYjNDM7XHRcdFx0ICogVGhlIGhlbHBlciBtdXN0IHJ1biB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgbWF5XG4mIzQzO1x0XHRcdCAqIHNjaGVkdWxlKCkuIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgb3Blbi1jb2RlZFxuJiM0MztcdFx0XHQgKiBuZWVkX3Jlc2NoZWQoKS9zaWduYWxfcGVuZGluZygpIGNoZWNrcyBpdCByZXBsYWNlcy4gT25cbiYjNDM7XHRcdFx0ICogYSBwZW5kaW5nIHNpZ25hbCBpdCByZXR1cm5zIC1FSU5UUiBhZnRlclxuJiM0MztcdFx0XHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgaGFzIHNldFxuJiM0MztcdFx0XHQgKiBydW4tXHUwMDNlZXhpdF9yZWFzb24gKEtWTV9FWElUX0lOVFIpIGFuZCBidW1wZWRcbiYjNDM7XHRcdFx0ICogdmNwdS1cdTAwM2VzdGF0LnNpZ25hbF9leGl0cywgc28ganVzdCByZXR1cm4gdG8gdXNlcnNwYWNlLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0XHRcdHIgPSBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKHZjcHUpO1xuIFx0XHRcdGhhcmRfaXJxX2Rpc2FibGUoKTtcbiYjNDM7XHRcdFx0aWYgKHIpIHtcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIC1FSU5UUjogdGhlIGdlbmVyaWMgaGVscGVyIGRvZXMgbm90IHNldCB0aGVcbiYjNDM7XHRcdFx0XHQgKiBleGl0IHR5cGUsIHNvIHJlY29yZCBpdCBoZXJlIGZvciB0aGUgRTUwMFxuJiM0MztcdFx0XHRcdCAqIENPTkZJR19LVk1fRVhJVF9USU1JTkcgaGlzdG9ncmFtIChhIG5vLW9wXG4mIzQzO1x0XHRcdFx0ICogb3RoZXJ3aXNlKS4gT25seSB0aGUgZXhpdCB0eXBlIGlzIHNldDtcbiYjNDM7XHRcdFx0XHQgKiBzaWduYWxfZXhpdHMgd2FzIGFscmVhZHkgYWNjb3VudGVkIGFib3ZlLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIFNJR05BTF9FWElUUyk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbi1cdFx0XHRrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIFNJR05BTF9FWElUUyk7XG4tXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSO1xuLVx0XHRcdHIgPSAtRUlOVFI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbiBcdFx0dmNwdS1cdTAwM2Vtb2RlID0gSU5fR1VFU1RfTU9ERTtcbiBcbiBcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1wcGNfcnVuX2NvcmUmIzM0OywKICAgICYjMzQ7a3ZtcHBjX3J1bl92Y3B1JiMzNDssCiAgICAmIzM0O2t2bWh2X3J1bl9zaW5nbGVfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfcHJlcGFyZV90b19lbnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NDU0OWU1MDUzMTU3MDNmZDNmMjc1MjVmZmU3YzdiYzM4OGY2NDU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAwMTo0ODoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwppbmRleCA5YTBkMWMxYWNhNmM4MC4uYjZiYzJmYzg2ZGNhNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKQEAgLTIyLDYgJiM0MzsyMiw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgS1ZNX0NPTU1PTgogCXNlbGVjdCBLVk1fVkZJTwogCXNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTCiYjNDM7CXNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SSwogCiBjb25maWcgS1ZNX0JPT0szU19IQU5ETEVSCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKaW5kZXggNjFkYmVlYTMxN2YzYjcuLmExYjIwNzc1NjFiYjVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKQEAgLTM4NTAsMTAgJiM0MzszODUwLDIwIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGt2bXBwY19ydW5fY29yZShzdHJ1Y3Qga3ZtcHBjX3Zjb3JlICp2YykKIAkgKiBhbmQgcmV0dXJuIHdpdGhvdXQgZ29pbmcgaW50byB0aGUgZ3Vlc3QocykuCiAJICogSWYgdGhlIG1tdV9yZWFkeSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQsIGRvbiYjMzk7dCBnbyBpbnRvIHRoZQogCSAqIGd1ZXN0IGJlY2F1c2UgdGhhdCBtZWFucyBhIEhQVCByZXNpemUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLgomIzQzOwkgKgomIzQzOwkgKiB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgaXMgdGhlIElSUXMtZGlzYWJsZWQgcmVjaGVjayBmb3IKJiM0MzsJICogcGVuZGluZyBndWVzdC1tb2RlIHdvcmsgKHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRQomIzQzOwkgKiB0YXNrX3dvcmsgc3VjaCBhcyB0aGUgZGVmZXJyZWQgQ0ZTIHRocm90dGxlKS4gSXQgaXMgdGhlIHByZS1QT1dFUjkKJiM0MzsJICogYW5hbG9nIG9mIHRoZSBmaW5hbCBnYXRlIGluIGt2bWh2X3J1bl9zaW5nbGVfdmNwdSgpLCBhbmQgYSBzdXBlcnNldAomIzQzOwkgKiBvZiB0aGUgb2xkIG5lZWRfcmVzY2hlZCgpIGNoZWNrOiBpdCBjYXRjaGVzIHdvcmsgdGhhdCByYWNlZCBpbiBhZnRlcgomIzQzOwkgKiB0aGUgZHJhaW4gaW4ga3ZtcHBjX3J1bl92Y3B1KCksIHNvIGEgQ1BVLWJvdW5kIHZDUFUgaXMgdGhyb3R0bGVkIGhlcmUKJiM0MzsJICogaW5zdGVhZCBvZiBydW5uaW5nIG9uZSBtb3JlIGd1ZXN0IGRpc3BhdGNoIHBhc3QgaXRzIHF1b3RhLiBJUlFzIGFyZQomIzQzOwkgKiBoYXJkLWRpc2FibGVkIGp1c3QgYWJvdmUsIHNvIHRoZSBub24tX18gdmFyaWFudCAod2hpY2ggYXNzZXJ0cyB0aGF0KQomIzQzOwkgKiBpcyB0aGUgY29ycmVjdCBvbmUuCiAJICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAloYXJkX2lycV9kaXNhYmxlKCk7Ci0JaWYgKGxhenlfaXJxX3BlbmRpbmcoKSB8fCBuZWVkX3Jlc2NoZWQoKSB8fAomIzQzOwlpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fAogCSAgICByZWNoZWNrX3NpZ25hbHNfYW5kX21tdSgmYW1wO2NvcmVfaW5mbykpIHsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQl2Yy0mZ3Q7dmNvcmVfc3RhdGUgPSBWQ09SRV9JTkFDVElWRTsKQEAgLTQ4MjQsMTAgJiM0Mzs0ODM0LDI0IEBAIHN0YXRpYyBpbnQga3ZtcHBjX3J1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdmMtJmd0O3J1bm5lciA9IHZjcHU7CiAJCWlmIChuX2NlZGVkID09IHZjLSZndDtuX3J1bm5hYmxlKSB7CiAJCQlrdm1wcGNfdmNvcmVfYmxvY2tlZCh2Yyk7Ci0JCX0gZWxzZSBpZiAobmVlZF9yZXNjaGVkKCkpIHsKJiM0MzsJCX0gZWxzZSBpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHsKIAkJCWt2bXBwY192Y29yZV9wcmVlbXB0KHZjKTsKLQkJCS8qIExldCBzb21ldGhpbmcgZWxzZSBydW4gKi8KLQkJCWNvbmRfcmVzY2hlZF9sb2NrKCZhbXA7dmMtJmd0O2xvY2spOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTGV0IHNvbWV0aGluZyBlbHNlIHJ1biwgYW5kIHJ1biBwZW5kaW5nIGd1ZXN0LW1vZGUKJiM0MzsJCQkgKiB3b3JrIChyZXNjaGVkdWxlLCBhbmQgVElGX05PVElGWV9SRVNVTUUgdGFza193b3JrIHN1Y2gKJiM0MzsJCQkgKiBhcyB0aGUgZGVmZXJyZWQgQ0ZTIHRocm90dGxlKSBiZWZvcmUgd2Ugd291bGQgcmUtZW50ZXIKJiM0MzsJCQkgKiB0aGUgZ3Vlc3QsIHNvIGEgQ1BVLWJvdW5kIHZDUFUgaXMgYWN0dWFsbHkgdGhyb3R0bGVkCiYjNDM7CQkJICogaGVyZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgcGFzdCBpdHMgcXVvdGEuIFRoaXMgaXMgYQomIzQzOwkJCSAqIHN1cGVyc2V0IG9mIHRoZSBvbGQgbmVlZF9yZXNjaGVkKCkgY2hlY2suIFVzZSB0aGUgcmF3CiYjNDM7CQkJICogaGVscGVyLCBub3QgdGhlIGt2bV8gd3JhcHBlcjogc2lnbmFscyAoS1ZNX0VYSVRfSU5UUgomIzQzOwkJCSAqIGFuZCB0aGUgc2lnbmFsX2V4aXRzIHN0YXQpIGFyZSBhY2NvdW50ZWQgYnkgdGhpcyBwYXRoJiMzOTtzCiYjNDM7CQkJICogZXhpc3RpbmcgaGFuZGxpbmcgYmVsb3csIHNvIGdvaW5nIHRocm91Z2ggdGhlIHdyYXBwZXIKJiM0MzsJCQkgKiBoZXJlIHdvdWxkIGRvdWJsZS1jb3VudCB0aGVtLiBUaGUgaGVscGVyIG1heSBzY2hlZHVsZSgpLAomIzQzOwkJCSAqIHNvIHRoZSB2Y29yZSBsb2NrIGlzIGRyb3BwZWQgYXJvdW5kIGl0LgomIzQzOwkJCSAqLwomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7dmMtJmd0O2xvY2spOwomIzQzOwkJCXhmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpOwomIzQzOwkJCXNwaW5fbG9jaygmYW1wO3ZjLSZndDtsb2NrKTsKIAkJCWlmICh2Yy0mZ3Q7dmNvcmVfc3RhdGUgPT0gVkNPUkVfUFJFRU1QVCkKIAkJCQlrdm1wcGNfdmNvcmVfZW5kX3ByZWVtcHQodmMpOwogCQl9IGVsc2UgewpAQCAtNDg5OSw4ICYjNDM7NDkyMywyMSBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsCiAJCX0KIAl9CiAKLQlpZiAobmVlZF9yZXNjaGVkKCkpCi0JCWNvbmRfcmVzY2hlZCgpOwomIzQzOwkvKgomIzQzOwkgKiBSdW4gcGVuZGluZyB3b3JrIGJlZm9yZSAocmUtKWVudGVyaW5nIHRoZSBndWVzdCwgbW9zdCBpbXBvcnRhbnRseQomIzQzOwkgKiB0YXNrX3dvcmsgcXVldWVkIHZpYSBUV0FfUkVTVU1FIChlLmcuIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoCiYjNDM7CSAqIHRocm90dGxlLCB3aGljaCBvbmx5IHNldHMgVElGX05PVElGWV9SRVNVTUUpLiBXaXRob3V0IHRoaXMgYSBDUFUtYm91bmQKJiM0MzsJICogdkNQVSB0aGF0IGtlZXBzIHJldHVybmluZyBSRVNVTUVfR1VFU1QgbmV2ZXIgcmVhY2hlcyBhbiBleGl0LXRvLXVzZXIKJiM0MzsJICogcG9pbnQsIHNvIHRoZSB0aHJvdHRsZSBpcyBuZXZlciBlbmZvcmNlZCBhbmQgdGhlIHRhc2sgcnVucyBmYXIgYmV5b25kCiYjNDM7CSAqIGl0cyBxdW90YS4gVGhlIGhlbHBlciBhbHNvIGhhbmRsZXMgcmVzY2hlZHVsZSBhbmQgc2lnbmFscywgcmVwbGFjaW5nCiYjNDM7CSAqIHRoZSBjb25kX3Jlc2NoZWQoKSB0aGF0IHdhcyBoZXJlLiBJdCBtYXkgc2NoZWR1bGUoKSwgc28gaXQgcnVucyBiZWZvcmUKJiM0MzsJICogcHJlZW1wdGlvbiBhbmQgSVJRcyBhcmUgZGlzYWJsZWQsIHdpdGggbm8gdmNvcmUvS1ZNIGxvY2tzIGhlbGQuIFRoaXMKJiM0MzsJICogaXMgdGhlIHBlci1yZWVudHJ5IHNpdGUgc2hhcmVkIGJ5IHRoZSBiYXJlLW1ldGFsIGFuZCBwc2VyaWVzIChuZXN0ZWQpCiYjNDM7CSAqIHBhdGhzLCBzbyBib3RoIGFyZSBjb3ZlcmVkLgomIzQzOwkgKi8KJiM0MzsJciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7CiYjNDM7CWlmIChyKQkvKiAtRUlOVFI6IHNpZ25hbCBwZW5kaW5nLCBleGl0IHRvIHVzZXJzcGFjZSAoS1ZNX0VYSVRfSU5UUikgKi8KJiM0MzsJCXJldHVybiByOwogCiAJa3ZtcHBjX3VwZGF0ZV92cGFzKHZjcHUpOwogCkBAIC00OTE0LDkgJiM0Mzs0OTUxLDE0IEBAIGludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCwKIAogCXZjcHUtJmd0O2FyY2guc3RhdGUgPSBLVk1QUENfVkNQVV9SVU5OQUJMRTsKIAotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJZ290byBzaWdwZW5kOwotCWlmIChuZWVkX3Jlc2NoZWQoKSB8fCAha3ZtLSZndDthcmNoLm1tdV9yZWFkeSkKJiM0MzsJLyoKJiM0MzsJICogRmluYWwgSVJRcy1kaXNhYmxlZCBjaGVjayBmb3IgcGVuZGluZyBndWVzdC1tb2RlIHdvcmsgb3IgYW4gTU1VIHRoYXQKJiM0MzsJICogaXMgbm90IHJlYWR5LiBJUlFzIGFyZSBkaXNhYmxlZCBoZXJlLCBzbyBiYWlsIHRvIHRoZSBvdXRlciBsb29wLAomIzQzOwkgKiB3aGljaCByZS1lbnRlcnMgYW5kIGhhbmRsZXMgdGhlIHBlbmRpbmcgd29yayB2aWEKJiM0MzsJICoga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpIGFib3ZlIChleGl0aW5nIHdpdGggLUVJTlRSIG9uIGEKJiM0MzsJICogc2lnbmFsKS4KJiM0MzsJICovCiYjNDM7CWlmICh4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgfHwgIWt2bS0mZ3Q7YXJjaC5tbXVfcmVhZHkpCiAJCWdvdG8gb3V0OwogCiAJdmNwdS0mZ3Q7Y3B1ID0gcGNwdTsKQEAgLTUwNjgsMTAgJiM0Mzs1MTEwLDYgQEAgaW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LAogCiAJcmV0dXJuIHZjcHUtJmd0O2FyY2gucmV0OwogCi0gc2lncGVuZDoKLQl2Y3B1LSZndDtzdGF0LnNpZ25hbF9leGl0cyYjNDM7JiM0Mzs7Ci0JcnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7Ci0JdmNwdS0mZ3Q7YXJjaC5yZXQgPSAtRUlOVFI7CiAgb3V0OgogCXZjcHUtJmd0O2NwdSA9IC0xOwogCXZjcHUtJmd0O2FyY2gudGhyZWFkX2NwdSA9IC0xOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwppbmRleCAwMDMwMjM5OWZjMzdiNC4uZmYxYTlhOGRlNWUwYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC04NCwyMCAmIzQzOzg0LDM2IEBAIGludCBrdm1wcGNfcHJlcGFyZV90b19lbnRlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaGFyZF9pcnFfZGlzYWJsZSgpOwogCiAJd2hpbGUgKHRydWUpIHsKLQkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiYjNDM7CQlpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEhhbmRsZSBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayBiZWZvcmUgZW50ZXJpbmcgdGhlCiYjNDM7CQkJICogZ3Vlc3Q6IHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRQomIzQzOwkJCSAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoIHRocm90dGxlLgomIzQzOwkJCSAqIFRoZSBoZWxwZXIgbXVzdCBydW4gd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgYW5kIG1heQomIzQzOwkJCSAqIHNjaGVkdWxlKCkuIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgb3Blbi1jb2RlZAomIzQzOwkJCSAqIG5lZWRfcmVzY2hlZCgpL3NpZ25hbF9wZW5kaW5nKCkgY2hlY2tzIGl0IHJlcGxhY2VzLiBPbgomIzQzOwkJCSAqIGEgcGVuZGluZyBzaWduYWwgaXQgcmV0dXJucyAtRUlOVFIgYWZ0ZXIKJiM0MzsJCQkgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgaGFzIHNldAomIzQzOwkJCSAqIHJ1bi0mZ3Q7ZXhpdF9yZWFzb24gKEtWTV9FWElUX0lOVFIpIGFuZCBidW1wZWQKJiM0MzsJCQkgKiB2Y3B1LSZndDtzdGF0LnNpZ25hbF9leGl0cywgc28ganVzdCByZXR1cm4gdG8gdXNlcnNwYWNlLgomIzQzOwkJCSAqLwogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CQkJciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7CiAJCQloYXJkX2lycV9kaXNhYmxlKCk7CiYjNDM7CQkJaWYgKHIpIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogLUVJTlRSOiB0aGUgZ2VuZXJpYyBoZWxwZXIgZG9lcyBub3Qgc2V0IHRoZQomIzQzOwkJCQkgKiBleGl0IHR5cGUsIHNvIHJlY29yZCBpdCBoZXJlIGZvciB0aGUgRTUwMAomIzQzOwkJCQkgKiBDT05GSUdfS1ZNX0VYSVRfVElNSU5HIGhpc3RvZ3JhbSAoYSBuby1vcAomIzQzOwkJCQkgKiBvdGhlcndpc2UpLiBPbmx5IHRoZSBleGl0IHR5cGUgaXMgc2V0OwomIzQzOwkJCQkgKiBzaWduYWxfZXhpdHMgd2FzIGFscmVhZHkgYWNjb3VudGVkIGFib3ZlLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgU0lHTkFMX0VYSVRTKTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgU0lHTkFMX0VYSVRTKTsKLQkJCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSOwotCQkJciA9IC1FSU5UUjsKLQkJCWJyZWFrOwotCQl9Ci0KIAkJdmNwdS0mZ3Q7bW9kZSA9IElOX0dVRVNUX01PREU7CiAKIAkJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3dlclBDIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgS1ZNIG9uIFBvd2VyUEMsIHNwZWNpZmljYWxseSBpbiB0aG9zZSBgYm9vazNzX2h2LmNgIGFuZCBgcG93ZXJwYy5jYCBmaWxlcy4gSXQmIzM5O3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVmaW5pbmcgaG93IHRoZSBzeXN0ZW0gY2hlY2tzIGZvciBwZW5kaW5nIHdvcmsgYmVmb3JlIHRocm93aW5nIHRoZSBDUFUgaW50byBndWVzdCBtb2RlLiBUaGV5JiMzOTtyZSBkaXRjaGluZyB0aGUgdXN1YWwgYG5lZWRfcmVzY2hlZCgpYCBhbmQgYHNpZ25hbF9wZW5kaW5nKClgIGFuZCBicmluZ2luZyBpbiB0aGlzIGB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKClgIGFuZCBga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpYCBjb21iby4gSW50ZXJlc3RpbmcuLi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgbnVhbmNlcyBvZiB0aGlzIGFwcHJvYWNoIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZCBtZXRob2RzIHRvIHNlZSB3aHkgdGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gSXQmIzM5O3MgYWxzbyBhZGRpbmcgYHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS2AgdG8gdGhlIEtjb25maWcsIHNvIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyBlbmFibGluZyBuZXcgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmZpZyByZXF1aXJlbWVudHMgZm9yIHRoaXMgcGF0Y2guIEkgYWxyZWFkeSBrbm93IGl0IHJlcXVpcmVzIGBDT05GSUdfS1ZNYCwgYW5kIGl0JiMzOTtzIG1vc3QgbGlrZWx5IGRlcGVuZGVudCBvbiBlaXRoZXIgYENPTkZJR19LVk1fQk9PSzNTX0hWYCBvciBvbmUgb2YgdGhlIG90aGVyIEJPT0szUyBvciBFNTAwVjIgdmFyaWFudHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zLCBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgZ3JlcC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAgYW5kIGBrdm1wcGNfcnVuX2NvcmVgIHRocm91Z2hvdXQgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gVGhpcyB3aWxsIGhlbHAgY2xhcmlmeSB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBpbiBLVk0gYXJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlIGFuZCB3aGF0IHRoZWlyIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXJlLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUgLSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSByaXBwbGUgZWZmZWN0cyBiZWZvcmUgZ2V0dGluZyB0b28gZGVlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1odl9ydW5fc2luZ2xlX3ZjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTM3NzY9c3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg1Ni1cdCAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgdGhyb3R0bGUpLiBJdCBpcyB0aGUgcHJlLVBPV0VSOVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzozODU3Olx0ICogYW5hbG9nIG9mIHRoZSBmaW5hbCBnYXRlIGluIGt2bWh2X3J1bl9zaW5nbGVfdmNwdSgpLCBhbmQgYSBzdXBlcnNldFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODU4LVx0ICogb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjazogaXQgY2F0Y2hlcyB3b3JrIHRoYXQgcmFjZWQgaW4gYWZ0ZXJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ3NDc9c3RhdGljIGludCBrdm1wcGNfcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDg5MC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDg5MTppbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ4OTItXHRcdFx0ICB1bnNpZ25lZCBsb25nIGxwY3IpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz01MTIyPXN0YXRpYyBpbnQga3ZtcHBjX3ZjcHVfcnVuX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUxOTgtXHRcdGlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BUkNIXzMwMCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjUxOTk6XHRcdFx0ciA9IGt2bWh2X3J1bl9zaW5nbGVfdmNwdSh2Y3B1LCB+KHU2NCkwLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MjAwLVx0XHRcdFx0XHRcdCAgdmNwdS1cdTAwM2VhcmNoLnZjb3JlLVx1MDAzZWxwY3IpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTI5NT1sb25nIGt2bWh2X2VudGVyX25lc3RlZF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtMzgzLVx0ZG8ge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6Mzg0Olx0XHRyID0ga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHZjcHUsIGhkZWNfZXhwLCBscGNyKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTM4NS1cdH0gd2hpbGUgKGlzX2t2bXBwY19yZXN1bWVfZ3Vlc3QocikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFBvd2VyUEMgS1ZNIEJvb2szUyBIeXBlcnZpc29yIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBQb3dlclBDIEtWTSBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgaHlwZXJ2aXNvciBhc3BlY3RzLiBUaGUgZmlyc3QgcGxhY2UgdG8gY2hlY2ssIGFuZCBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlLCBpcyBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgaHlwZXJ2aXNvciBmdW5jdGlvbmFsaXR5IGZvciBCb29rM1Mgc3lzdGVtcyB0byByZXNpZGUuIE5vdywgYmVmb3JlIEkgZXZlbiBnZXQgdG9vIGRlZXAgaW50byB0aGUgY29kZSBpdHNlbGYsIEkgKmFsd2F5cyogZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYGJvb2szc19odi5jYC4gSSB3YW50IHRvIGtub3cgd2hlbiBhbmQgd2h5IHRoaXMgY29kZSBpcyBjb21waWxlZCBhbmQgd2hhdCBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0LiBLbm93aW5nIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gd2lsbCBzYXZlIG1lIGEgdG9uIG9mIHRpbWUgaW4gdGhlIGxvbmcgcnVuLCBoZWxwaW5nIG1lIHVuZGVyc3RhbmQgdGhlIHdpZGVyIHBpY3R1cmUgYW5kIGF2b2lkIGNoYXNpbmcgbXkgdGFpbCB3aXRoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheSBhYm91dCB0aGUgaHlwZXJ2aXNvciBzdXBwb3J0IGFuZCBob3cgaXQmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib29rM3NfaHYubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjI9a3ZtLWh2LXkgJiM0Mzs9IFxcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjYzOlx0Ym9vazNzX2h2Lm8gXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjQtXHRib29rM3NfaHZfaW50ZXJydXB0cy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBLVk0tSFYgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBlbmFibGVzIGBrdm0taHYteWAuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGRpcmVjdGx5IHRhcmdldGluZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgd2hlcmUgYW5kIGhvdyB0aGlzIGZsYWcgaXMgc2V0IG9yIGluZmx1ZW5jZWQuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS1ZNLCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGh5cGVydmlzb3IgYW5kIGhvc3QuIElzIGl0IGEga2VybmVsIG1vZHVsZSBwYXJhbWV0ZXI/IEEgYnVpbGQtdGltZSBvcHRpb24/IFBhcnQgb2YgYSBkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlPyBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IG5vdCBhIHNpbXBsZSB0b2dnbGUgd2l0aGluIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiYjMzk7cyBwcmVmZXJlbmNlcy4gSXQmIzM5O3MgbGlrZWx5IGRlZXBlciB0aGFuIHRoYXQsIGFuZCBhIHF1aWNrIGxvb2t1cCB3aWxsIHBpbnBvaW50IHRoZSBleGFjdCBzb3VyY2Ugb2YgdGhpcyBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm0taHYteSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjA9ZW5kaWZcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjEtXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjYyOmt2bS1odi15ICYjNDM7PSBcXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS02My1cdGJvb2szc19odi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBgYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZWAgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS1ZNIE1ha2VmaWxlIGZvciBQb3dlclBDKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGlzIGBNYWtlZmlsZWAgZm9yIHRoZSBQb3dlclBDIEtWTSBhcmNoaXRlY3R1cmUuIFRoaXMgbWVhbnMgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIG92ZXJhbGwgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBtb2R1bGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGZvciB0aGlzIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzLCBpbmNsdWRlIHBhdGhzLCBvciBzcGVjaWFsIGNvbXBpbGVyIGRlZmluaXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gUG93ZXJQQyYjMzk7cyB1bmlxdWUgY2hhcmFjdGVyaXN0aWNzLCBzdWNoIGFzIGl0cyBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQsIG1lbW9yeSBtb2RlbCwgb3Igb3RoZXIgaGFyZHdhcmUgcGVjdWxpYXJpdGllcyB0aGF0IGltcGFjdCB2aXJ0dWFsaXphdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRhcmdldHMgcmVsYXRlZCB0byB0aGUgS1ZNIGNvcmUsIHZDUFUgaGFuZGxpbmcsIE1NVSBlbXVsYXRpb24sIGRldmljZSBlbXVsYXRpb24sIGFuZCBhbnkgUG93ZXJQQy1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGlkZW50aWZ5IGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBvdmVyYWxsIEtWTSBmdW5jdGlvbmFsaXR5IG9uIFBvd2VyUEMgc3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSBtb2R1bGVcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL3Bvd2VycGMva3ZtXG4gICA3Olx0XG4gICA4Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgOTpcdFxuICAxMDpcdGNvbW1vbi1vYmpzLXkgJiM0Mzs9IHBvd2VycGMubyBlbXVsYXRlX2xvYWRzdG9yZS5vXG4gIDExOlx0b2JqLSQoQ09ORklHX0tWTV9FWElUX1RJTUlORykgJiM0Mzs9IHRpbWluZy5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfSEFORExFUikgJiM0Mzs9IGJvb2szc19leHBvcnRzLm9cbiAgMTM6XHRcbiAgMTQ6XHRBRkxBR1NfYm9va2VfaW50ZXJydXB0cy5vIDo9IC1JJChvYmp0cmVlKS8kKG9iailcbiAgMTU6XHRcbiAgMTY6XHRrdm0tZTUwMC1vYmpzIDo9IFxcXG4gIDE3Olx0XHQkKGNvbW1vbi1vYmpzLXkpIFxcXG4gIDE4Olx0XHRlbXVsYXRlLm8gXFxcbiAgMTk6XHRcdGJvb2tlLm8gXFxcbiAgMjA6XHRcdGJvb2tlX2VtdWxhdGUubyBcXFxuICAyMTpcdFx0Ym9va2VfaW50ZXJydXB0cy5vIFxcXG4gIDIyOlx0XHRlNTAwLm8gXFxcbiAgMjM6XHRcdGU1MDBfbW11Lm8gXFxcbiAgMjQ6XHRcdGU1MDBfbW11X2hvc3QubyBcXFxuICAyNTpcdFx0ZTUwMF9lbXVsYXRlLm9cbiAgMjY6XHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fRTUwMFYyKSA6PSAkKGt2bS1lNTAwLW9ianMpXG4gIDI3Olx0XG4gIDI4Olx0a3ZtLWU1MDBtYy1vYmpzIDo9IFxcXG4gIDI5Olx0XHQkKGNvbW1vbi1vYmpzLXkpIFxcXG4gIDMwOlx0XHRlbXVsYXRlLm8gXFxcbiAgMzE6XHRcdGJvb2tlLm8gXFxcbiAgMzI6XHRcdGJvb2tlX2VtdWxhdGUubyBcXFxuICAzMzpcdFx0Ym9va2Vodl9pbnRlcnJ1cHRzLm8gXFxcbiAgMzQ6XHRcdGU1MDBtYy5vIFxcXG4gIDM1Olx0XHRlNTAwX21tdS5vIFxcXG4gIDM2Olx0XHRlNTAwX21tdV9ob3N0Lm8gXFxcbiAgMzc6XHRcdGU1MDBfZW11bGF0ZS5vXG4gIDM4Olx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX0U1MDBNQykgOj0gJChrdm0tZTUwMG1jLW9ianMpXG4gIDM5Olx0XG4gIDQwOlx0a3ZtLXByLXkgOj0gXFxcbiAgNDE6XHRcdGZwdS5vIFxcXG4gIDQyOlx0XHRlbXVsYXRlLm8gXFxcbiAgNDM6XHRcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXG4gIDQ0Olx0XHRib29rM3NfcHIubyBcXFxuICA0NTpcdFx0Ym9vazNzX3ByX3BhcHIubyBcXFxuICA0NjpcdFx0Ym9vazNzX2VtdWxhdGUubyBcXFxuICA0NzpcdFx0Ym9vazNzX2ludGVycnVwdHMubyBcXFxuICA0ODpcdFx0Ym9vazNzX21tdV9ocHRlLm8gXFxcbiAgNDk6XHRcdGJvb2szc182NF9tbXVfaG9zdC5vIFxcXG4gIDUwOlx0XHRib29rM3NfNjRfbW11Lm8gXFxcbiAgNTE6XHRcdGJvb2szc18zMl9tbXUub1xuICA1MjpcdFxuICA1MzpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgJiM0Mzs9IFxcXG4gIDU0Olx0XHRib29rM3NfNjRfZW50cnkubyBcXFxuICA1NTpcdFx0dG0ub1xuICA1NjpcdFxuICA1NzpcdGlmZGVmIENPTkZJR19LVk1fQk9PSzNTX1BSX1BPU1NJQkxFXG4gIDU4Olx0a3ZtLWJvb2szc182NC1idWlsdGluLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSKSAmIzQzOz0gXFxcbiAgNTk6XHRcdGJvb2szc19ybWhhbmRsZXJzLm9cbiAgNjA6XHRlbmRpZlxuICA2MTpcdFxuICA2MjpcdGt2bS1odi15ICYjNDM7PSBcXFxuICA2MzpcdFx0Ym9vazNzX2h2Lm8gXFxcbiAgNjQ6XHRcdGJvb2szc19odl9pbnRlcnJ1cHRzLm8gXFxcbiAgNjU6XHRcdGJvb2szc182NF9tbXVfaHYubyBcXFxuICA2NjpcdFx0Ym9vazNzXzY0X21tdV9yYWRpeC5vIFxcXG4gIDY3Olx0XHRib29rM3NfaHZfbmVzdGVkLm9cbiAgNjg6XHRcbiAgNjk6XHRrdm0taHYtJChDT05GSUdfUFBDX1VWKSAmIzQzOz0gXFxcbiAgNzA6XHRcdGJvb2szc19odl91dm1lbS5vXG4gIDcxOlx0XG4gIDcyOlx0a3ZtLWh2LSQoQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTSkgJiM0Mzs9IFxcXG4gIDczOlx0XHRib29rM3NfaHZfdG0ub1xuICA3NDpcdFxuICA3NTpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi14aWNzLW9ianMtJChDT05GSUdfS1ZNX1hJQ1MpIDo9IFxcXG4gIDc2Olx0XHRib29rM3NfaHZfcm1feGljcy5vXG4gIDc3Olx0XG4gIDc4Olx0a3ZtLWJvb2szc182NC1idWlsdGluLXRtLW9ianMtJChDT05GSUdfUFBDX1RSQU5TQUNUSU9OQUxfTUVNKSAmIzQzOz0gXFxcbiAgNzk6XHRcdGJvb2szc19odl90bV9idWlsdGluLm9cbiAgODA6XHRcbiAgODE6XHRpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuICA4MjpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgJiM0Mzs9IFxcXG4gIDgzOlx0XHRib29rM3NfaHZfaG1pLm8gXFxcbiAgODQ6XHRcdGJvb2szc19odl9wOV9lbnRyeS5vIFxcXG4gIDg1Olx0XHRib29rM3NfaHZfcm1oYW5kbGVycy5vIFxcXG4gIDg2Olx0XHRib29rM3NfaHZfcm1fbW11Lm8gXFxcbiAgODc6XHRcdGJvb2szc19odl9yYXMubyBcXFxuICA4ODpcdFx0Ym9vazNzX2h2X2J1aWx0aW4ubyBcXFxuICA4OTpcdFx0Ym9vazNzX2h2X3A5X3BlcmYubyBcXFxuICA5MDpcdFx0Ym9vazNzX2h2X25lc3RlZHYyLm8gXFxcbiAgOTE6XHRcdGd1ZXN0LXN0YXRlLWJ1ZmZlci5vIFxcXG4gIDkyOlx0XHQkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi10bS1vYmpzLXkpIFxcXG4gIDkzOlx0XHQkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi14aWNzLW9ianMteSlcbiAgOTQ6XHRcbiAgOTU6XHRvYmotJChDT05GSUdfR1VFU1RfU1RBVEVfQlVGRkVSX1RFU1QpICYjNDM7PSB0ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5vXG4gIDk2Olx0ZW5kaWZcbiAgOTc6XHRcbiAgOTg6XHRrdm0tYm9vazNzXzY0LW9ianMtJChDT05GSUdfS1ZNX1hJQ1MpICYjNDM7PSBcXFxuICA5OTpcdFx0Ym9vazNzX3hpY3Mub1xuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLVk0gTWFrZWZpbGUgTWF6ZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEtWTSBidWlsZCBwcm9jZXNzLCBhbmQgSSYjMzk7dmUgZ290IGEgaHVuY2guIEl0IGxvb2tzIGxpa2UgdGhlIHBpZWNlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgc3BlY2lmaWNhbGx5IGBrdm0taHYteWAsIGlzIGxpa2VseSBnZXR0aW5nIGluY29ycG9yYXRlZCBpbnRvIHRoZSBidWlsZCBiYXNlZCBvbiB0aGF0IGBrdm0tYm9vazNzXzY0LW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IVilgIGNvbmRpdGlvbmFsLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBnaXZlbiB0aGUgaW50cmljYWNpZXMgb2YgdGhpcyBtYWtlZmlsZSBzdHJ1Y3R1cmUsIEkgbmVlZCB0byBjb25maXJtLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgTWFrZWZpbGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gYW5kIGV4YWN0bHkgaG93IGBDT05GSUdfS1ZNX0JPT0szU182NF9IVmAgYWZmZWN0cyB0aGUgaW5jbHVzaW9uIG9mIGBrdm0taHYteWAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc3Vic2VxdWVudCBydWxlcyBhbmQgdmFyaWFibGVzIHJldmVhbC4gVGhlcmUmIzM5O3MgdXN1YWxseSBtb3JlIHRvIHVucGFjayB3aGVuIGl0IGNvbWVzIHRvIEtWTSBidWlsZCBzeXN0ZW1zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRrdm0tYm9vazNzXzY0LW9ianMtJChDT05GSUdfS1ZNX1hJVkUpICYjNDM7PSBib29rM3NfeGl2ZS5vIGJvb2szc194aXZlX25hdGl2ZS5vXG4gMTAyOlx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX1NQQVBSX1RDRV9JT01NVSkgJiM0Mzs9IGJvb2szc182NF92aW8ub1xuIDEwMzpcdFxuIDEwNDpcdGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianMgOj0gXFxcbiAxMDU6XHRcdCQoY29tbW9uLW9ianMteSkgXFxcbiAxMDY6XHRcdGJvb2szcy5vIFxcXG4gMTA3Olx0XHRib29rM3NfcnRhcy5vIFxcXG4gMTA4Olx0XHQkKGt2bS1ib29rM3NfNjQtb2Jqcy15KVxuIDEwOTpcdFxuIDExMDpcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpIDo9ICQoa3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcylcbiAxMTE6XHRcbiAxMTI6XHRrdm0tYm9vazNzXzMyLW9ianMgOj0gXFxcbiAxMTM6XHRcdCQoY29tbW9uLW9ianMteSkgXFxcbiAxMTQ6XHRcdGVtdWxhdGUubyBcXFxuIDExNTpcdFx0ZnB1Lm8gXFxcbiAxMTY6XHRcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXG4gMTE3Olx0XHRib29rM3MubyBcXFxuIDExODpcdFx0Ym9vazNzX3ByLm8gXFxcbiAxMTk6XHRcdGJvb2szc19lbXVsYXRlLm8gXFxcbiAxMjA6XHRcdGJvb2szc19pbnRlcnJ1cHRzLm8gXFxcbiAxMjE6XHRcdGJvb2szc19tbXVfaHB0ZS5vIFxcXG4gMTIyOlx0XHRib29rM3NfMzJfbW11X2hvc3QubyBcXFxuIDEyMzpcdFx0Ym9vazNzXzMyX21tdS5vXG4gMTI0Olx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU18zMikgOj0gJChrdm0tYm9vazNzXzMyLW9ianMpXG4gMTI1Olx0XG4gMTI2Olx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX01QSUMpICYjNDM7PSBtcGljLm9cbiAxMjc6XHRcbiAxMjg6XHRrdm0teSAmIzQzOz0gJChrdm0tb2Jqcy1tKSAkKGt2bS1vYmpzLXkpXG4gMTI5Olx0XG4gMTMwOlx0b2JqLSQoQ09ORklHX0tWTV9FNTAwVjIpICYjNDM7PSBrdm0ub1xuIDEzMTpcdG9iai0kKENPTkZJR19LVk1fRTUwME1DKSAmIzQzOz0ga3ZtLm9cbiAxMzI6XHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NCkgJiM0Mzs9IGt2bS5vXG4gMTMzOlx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfMzIpICYjNDM7PSBrdm0ub1xuIDEzNDpcdFxuIDEzNTpcdG9iai0kKENPTkZJR19LVk1fQk9PSzNTXzY0X1BSKSAmIzQzOz0ga3ZtLXByLm9cbiAxMzY6XHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9IVikgJiM0Mzs9IGt2bS1odi5vXG4gMTM3Olx0XG4gMTM4Olx0b2JqLXkgJiM0Mzs9ICQoa3ZtLWJvb2szc182NC1idWlsdGluLW9ianMteSlcbiAxMzk6XHRcbiAxNDA6XHQjIEtWTSBkb2VzIGEgbG90IGluIHJlYWwtbW9kZSwgYW5kIDY0LWJpdCBCb29rM1MgS0FTQU4gZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGF0XG4gMTQxOlx0aWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjRcbiAxNDI6XHRLQVNBTl9TQU5JVElaRSA6PSBuXG4gMTQzOlx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgS1ZNIEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyBkb3duIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIGtlcm5lbCBtb2R1bGVzLiBJdCBzZWVtcyBsaWtlIGBrdm0taHYub2AgZ2V0cyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBkZWZpbmVkLiBUaGF0IG1ha2VzIHNlbnNlLCBwcmV0dHkgc3BlY2lmaWMuIEFuZCB0aGVuLCBJIHNlZSB0aGF0IGBwb3dlcnBjLm9gIGlzIGJ1aWx0IGlmIGBDT05GSUdfS1ZNYCBpcyBzZXQsIGFuZCBpdCBsb29rcyBsaWtlIGBjb21tb24tb2Jqcy15YCBpcyB0aGUgdHJpZ2dlciBmb3IgdGhhdC4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBJIHNob3VsZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBLVk1fQk9PSzNTXzY0X0hWYC4gVGhhdCBzaG91bGQgY2xhcmlmeSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciwgYW5kIEkgY2FuIGJlIG1vcmUgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X0hWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYzPWNvbmZpZyBLVk1fQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTczNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBLVk1fQk9PSzNTXzY0X0hWYCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgYm9vazNzX2h2LmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gQW5kIGBLVk1gLCBuYXR1cmFsbHksIGlzIHRoZSB1bWJyZWxsYSBjb25maWcgZm9yIGBwb3dlcnBjLmNgLiBSaWdodCwgc28gYHBvd2VycGMuY2AgaXMgcGFydCBvZiBgY29tbW9uLW9ianMteWAgd2hpY2ggdGhlbiBnZXRzIGluY2x1ZGVkIGluIHNldmVyYWwgb3RoZXJzIGxpa2UgYGt2bS1lNTAwLW9ianNgLCBga3ZtLWU1MDBtYy1vYmpzYCwgYGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianNgLCBhbmQgYGt2bS1ib29rM3NfMzItb2Jqc2AuIFNvLCBgQ09ORklHX0tWTWAgaXMgdGhlIHByaW1hcnksIG92ZXJhcmNoaW5nIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyByZS1leGFtaW5lIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGFkZGluZyBgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktgIHRvIHRoZSBgS1ZNYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgYWRkaXRpb24gaGVyZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYWRkaW5nIGEgbmV3IHNlbGVjdCBvcHRpb24uCgpUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgaW1wYWN0IG9uIHNwZWNpZmljIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGFmZmVjdHM6CgoqICAgYGt2bXBwY19ydW5fY29yZWAgaW4gYGJvb2szc19odi5jYAoqICAgYGt2bXBwY19ydW5fdmNwdWAgaW4gYGJvb2szc19odi5jYAoqICAgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAgaW4gYGJvb2szc19odi5jYAoKU28gdGhlIGNoYW5nZXMgc2VlbSBmb2N1c2VkIG9uIHRoZSBib29rM3NfaHYgc2lkZS4KCkFuZCBhbHNvOgoKKiAgIGBrdm1wcGNfcHJlcGFyZV90b19lbnRlcmAgaW4gYHBvd2VycGMuY2AKClRoaXMgbmVlZHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCwgdGhlIHdheSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRocm91Z2hvdXQgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgaW52b2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTExMzU9aW50IGt2bXBwY19oYW5kbGVfZXhpdF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTQzOC1cdFx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjE0Mzk6XHRcdHMgPSBrdm1wcGNfcHJlcGFyZV90b19lbnRlcih2Y3B1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTQ0MC1cdFx0aWYgKHMgXHUwMDNjPSAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9MTgwNz1zdGF0aWMgaW50IGt2bXBwY192Y3B1X3J1bl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xODI1LVx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjE4MjY6XHRyZXQgPSBrdm1wcGNfcHJlcGFyZV90b19lbnRlcih2Y3B1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTgyNy1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYz03NjA9aW50IGt2bXBwY192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jLTc2OS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYzo3NzA6XHRzID0ga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIodmNwdSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMtNzcxLVx0aWYgKHMgXHUwMDNjPSAwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jPTEwMTE9aW50IGt2bXBwY19oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYy0xNDAxLVx0aWYgKCEociBcdTAwMjYgUkVTVU1FX0hPU1QpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmM6MTQwMjpcdFx0cyA9IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHZjcHUpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jLTE0MDMtXHRcdGlmIChzIFx1MDAzYz0gMClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz02NT1pbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzgtICovXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3OTppbnQga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtODAte1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE1NC19XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoxNTU6RVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIpO1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTU2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0vUG93ZXJQQyBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gbG9va2luZyBhdCB0aGUgY29kZSwgYGt2bXBwY19wcmVwYXJlX3RvX2VudGVyYCBpcyBhIGtleSBmdW5jdGlvbiwgdXNlZCBpbiBib3RoIGBib29rM3NfcHIuY2AgYW5kIGBib29rZS5jYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvZGUgdGhhdCBpbXBhY3RzIHRoZSBgQ09ORklHX0tWTV9CT09LM1NfNjRfUFJgLCBgQ09ORklHX0tWTV9FNTAwVjJgLCBhbmQgYENPTkZJR19LVk1fRTUwME1DYCBjb25maWd1cmF0aW9ucy4gVGhlIGNoYW5nZXMgaW4gYGJvb2szc19odi5jYCBhcmUgb2J2aW91c2x5IHJlbGV2YW50IHRvIGBDT05GSUdfS1ZNX0JPT0szU182NF9IVmAuCgpTbywgdG8gZW5hYmxlIGV2ZXJ5dGhpbmcsIEkgc2hvdWxkIGZvY3VzIG9uIGBLVk1gIGFuZCBgS1ZNX0JPT0szU182NF9IVmAuIGBLVk1fQk9PSzNTXzY0X0hWYCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBQb3dlclBDIEJvb2szUyA2NC1iaXQgSFYsIGBLVk1fQk9PSzNTXzY0X1BSYCBpcyBmb3IgQm9vazNTIDY0LWJpdCBQUiwgYEtWTV9FNTAwVjJgIGlzIGZvciBFNTAwdjIsIGFuZCBgS1ZNX0U1MDBNQ2AgaXMgZm9yIEU1MDBNQy4KCkFscmlnaHQsIGRvdWJsZS1jaGVja2luZ+KApiB5ZXMsIGVuYWJsaW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBzZWVtcyBjb3JyZWN0OyBpdCBjb3ZlcnMgdGhlIGBib29rM3NfaHYuY2AgbW9kaWZpY2F0aW9ucy4gQW5kIGBLVk1gIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhlIGJhc2UgYHBvd2VycGMuY2AgY2hhbmdlcy4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgZm9jYWwgcG9pbnRzIG9mIHRoaXMgcGF0Y2g/IFRoZSBjb2RlIHNlZW1zIHRvIGJlIGNoYW5naW5nIHRoZSBleGVjdXRpb24gcGF0aCB0byB0aGUgZ3Vlc3QsIGFuZCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgS1ZNIHJ1biBsb29wLiBCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzIGFuZCB0aGUgbGlrZWx5IHBhdGgsIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoIGFyZToKCiogICBga3ZtcHBjX3J1bl9jb3JlYAoqICAgYGt2bXBwY19ydW5fdmNwdWAKKiAgIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgCiogICBga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJgCgpJIHNlZSB0aGF0IGBrdm1wcGNfcnVuX2NvcmVgLCBga3ZtcHBjX3J1bl92Y3B1YCwgYW5kIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgIGFyZSBleHRyZW1lbHkgaG90IHBhdGhzIOKAkyB0aGV5JiMzOTtyZSB0aGUgYWN0dWFsIHZDUFUgZXhlY3V0aW9uIGxvb3BzLiBCdXQsIGNydWNpYWxseSwgYGt2bXBwY19wcmVwYXJlX3RvX2VudGVyYCBpcyBhbHNvIGluIHRoZSBsb29wLCB3aGljaCBtZWFucyBpdOKAmXMgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXMgd2VsbC4gR2l2ZW4gdGhhdCB0aGUgbW9kaWZpY2F0aW9uIGlzIGZ1bmN0aW9uYWxseSBjaGFuZ2luZyB0aGUgY29yZSBLVk0gbG9naWMgYW5kIHRoZSBndWVzdCBlbnRyeSBwYXRoLCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7bGwgZm9jdXMgb24gdGhvc2UgZm91ciBmdW5jdGlvbnMgYXMgdGhlIHByaW1hcnkgZnV6emluZyB0YXJnZXRzLCBhcyB0aGV5IGFyZSB0aGUgb25seSBtb2RpZmllZCBmdW5jdGlvbnMuCgpKdXN0IG5lZWQgdG8gY29uZmlybSB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWUgdG8gd29yayB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9IViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mz1jb25maWcgS1ZNX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4MDpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzI3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIEtWTSBJZGVudGlmaWVyIENoZWNrKioKCkFscmlnaHQsIHllcCwgY29uZmlybWVkLiBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGNvcnJlY3QgaWRlbnRpZmllciBmb3IgdGhhdCBwYXJ0aWN1bGFyIGh5cGVydmlzb3IgY29uZmlndXJhdGlvbiwgbm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4uLiB3aGF0IGFib3V0IGBLVk1fQk9PSzNTXzY0X1BSYD8gTmVlZCB0byByZWNhbGwgd2hhdCB0aGF0IGRlc2lnbmF0aW9uIGlzIHVzZWQgZm9yIGFuZCBkb3VibGUtY2hlY2sgSSBoYXZlbiYjMzk7dCBtYWRlIGEgd3JvbmcgYXNzdW1wdGlvbiBiYXNlZCBvbiBpbmNvbXBsZXRlIGluZm9ybWF0aW9uLCBhbHdheXMgaGF2ZSB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy4gSnVzdCBhIG1lbnRhbCBjcm9zc2NoZWNrIHRvIG1ha2UgY2VydGFpbiBhbGwgdGhlIGJhc2VzIGFyZSBjb3ZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9QUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz04MD1jb25maWcgS1ZNX0JPT0szU182NF9IVlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDAtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAxOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAyLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFzc2Vzc2luZyBLVk0gQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY2hlY2sgY29uZmlybXMgaXQ6IGBLVk1fQk9PSzNTXzY0X1BSYCBpcyB0aGUgY29ycmVjdCBpZGVudGlmaWVyIGZvciB0aGF0IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjb25zaWRlciB0aGUgb3RoZXIgc2ltaWxhciBhcmNoaXRlY3R1cmVzLiBXaGF0IGFib3V0IHRoZSBudWFuY2VzIG9mIGBLVk1fRTUwMFYyYCBhbmQgYEtWTV9FNTAwTUNgPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiB0aGVpciBmZWF0dXJlcywgb3IgYXJlIHRoZXkgY29tcGF0aWJsZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbXBhdGliaWxpdHkgaWYgdGhleSB3ZXJlIHRvIGJlIGNvbXBhcmVkPyBUaG9zZSBhcmUgc29tZSBrZXkgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBmdXJ0aGVyIGludmVzdGlnYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9FNTAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE4OD1jb25maWcgS1ZNX0VYSVRfVElNSU5HXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTk6Y29uZmlnIEtWTV9FNTAwVjJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMDAtXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTQ6Y29uZmlnIEtWTV9FNTAwTUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTUtXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDg3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCB0aGV5JiMzOTtyZSByaWdodCwgdGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluaXRlbHkgdGhlIG9uZXMgdG8gZW5hYmxlLiBJbml0aWFsbHksIEkgdGhvdWdodCBJIG5lZWRlZCBhbGwgb2YgdGhlbSDigJMgYEtWTWAsIGBLVk1fQk9PSzNTXzY0X0hWYCwgYEtWTV9CT09LM1NfNjRfUFJgLCBgS1ZNX0U1MDBWMmAsIGFuZCBgS1ZNX0U1MDBNQ2AuIFdhaXQsIGBLVk1gIGlzIGFscmVhZHkgaW1wbGljaXRseSBzZWxlY3RlZCwgc28gdGhhdCYjMzk7cyByZWR1bmRhbnQuICBMZXQmIzM5O3MgcmVmaW5lIHRoYXQgbGlzdC4gYEtWTV9CT09LM1NfNjRfSFZgIGFuZCBgS1ZNX0JPT0szU182NF9QUmAgc2VlbSBsaWtlIHRoZSBlc3NlbnRpYWwgb25lcyB0byBmb2N1cyBvbi4gQWN0dWFsbHksIGNvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzLCBgS1ZNX0JPT0szU182NF9IVmAgaXMgcHJvYmFibHkgdGhlIG1vc3QgY3JpdGljYWwsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1ham9yaXR5IG9mIHRoZSBtb2RpZmljYXRpb25zIGFyZS4gU28sIGxldCYjMzk7cyBsZWFkIHdpdGggdGhhdCwgYW5kIGFkZCBgS1ZNX0JPT0szU182NF9QUmAgYXMgd2VsbC4KCk5vdywgZm9yIHRoZSBrZXkgZnVuY3Rpb25zLiBUaGUgcHJvbXB0IGxpc3RzIGBrdm1wcGNfcnVuX2NvcmVgLCBga3ZtcHBjX3J1bl92Y3B1YCwgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAsIGFuZCBga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJgLiBIbW0sIHRob3NlIGFyZSBkZWZpbml0ZWx5IGhvdCBwYXRocy4gQnV0LCB0aGV5IGFyZSAqdGhlIG9ubHkqIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4mIzM0OyBUaGUgcXVlc3Rpb24gaXMsIGFyZSAqdGhlc2UqIGdlbmVyaWM/IE5vLCBJIGRvbiYjMzk7dCB0aGluayBzby4gVGhleSBhcmUgS1ZNIGVudHJ5IGZ1bmN0aW9ucywgZXhlY3V0ZWQgb24gKmV2ZXJ5KiBWTSBlbnRyeSwgYnV0IHRoZXkmIzM5O3JlIHNwZWNpZmljIHRvIEtWTSBvbiBQb3dlclBDLiBUaGV5IGFyZW4mIzM5O3QgdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zIGxpa2UgYGttYWxsb2NgIG9yIGBzY2hlZHVsZWAuCgpJZiBJIGRvbiYjMzk7dCBsaXN0IHRoZW0sIHdoYXQgZWxzZSBpcyB0aGVyZT8gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBmdW5jdGlvbnMgY2hhbmdlZC4gSSBndWVzcyBJIGNvdWxkIGxlYXZlIHRoaXMgZnVuY3Rpb24gbGlzdCBibGFuayBpZiB0aGV5JiMzOTtyZSBjb25zaWRlcmVkIHRvbyBob3QuIEhvd2V2ZXIsIEkgdGhpbmsgdGhhdCB0aGUgcG9pbnQgb2YgdGhlIGRpcmVjdGlvbnMgYXJlIHRvIHByZXZlbnQgbGlzdGluZyB0cnVseSBnZW5lcmljIGZ1bmN0aW9ucyB3aGljaCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbi4gR2l2ZW4gdGhhdCB0aGVzZSBhcmUgc3BlY2lmaWMgS1ZNIGVudHJ5IGZ1bmN0aW9ucywgSSB0aGluayBpdCYjMzk7cyBmaW5lIHRvIGluY2x1ZGUgdGhlbS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlIG9uZSBtb3JlIHRpbWUgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwmIzQzOy4qeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgYHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmdgKioKCk9rYXksIGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyeSBhbmQgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbS4gSW5zdGVhZCBvZiBibGluZGx5IGRpdmluZyBpbiwgSSBzaG91bGQgcGF1c2UuIEkgbmVlZCBhIHJhcGlkIHdheSB0byBhc3Nlc3MgdGhlIHVzZSBvZiB0aGlzIHNwZWNpZmljIHRlcm06IGB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nYC4gV2hhdCYjMzk7cyB0aGUgYmVzdCBhcHByb2FjaD8gWWVwLCBhIGBncmVwYCBzaG91bGQgYmUgdGhlIG1vc3QgZWZmaWNpZW50IGluaXRpYWwgcHJvYmUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayBvdmVydmlldyBvZiAqd2hlcmUqIHRoaXMgdmFyaWFibGUgb3IgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLCB3aGljaCBpbiB0dXJuIHdpbGwgcHJvdmlkZSB2aXRhbCBjb250ZXh0LiBXaXRoIGdyZXAsIEkgY2FuIHF1aWNrbHkgc2NhbiB0aGUgc291cmNlIGZpbGVzIGFuZCBzZWUgdGhlIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBtZXRob2QgaXMgdGhlIHBlcmZlY3QgZmlyc3Qgc3RlcCB0byBnYWluIHRoZSBmdW5kYW1lbnRhbCBjb250ZXh0IG5lY2Vzc2FyeSB0byB0YWtlIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTM3NzY9c3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg1My1cdCAqXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjM4NTQ6XHQgKiB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgaXMgdGhlIElSUXMtZGlzYWJsZWQgcmVjaGVjayBmb3JcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg1NS1cdCAqIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIChyZXNjaGVkdWxlLCBzaWduYWxzLCBhbmQgVElGX05PVElGWV9SRVNVTUVcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTM4NjUtXHRoYXJkX2lycV9kaXNhYmxlKCk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjM4NjY6XHRpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODY3LVx0ICAgIHJlY2hlY2tfc2lnbmFsc19hbmRfbW11KFx1MDAyNmNvcmVfaW5mbykpIHtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ3NDc9c3RhdGljIGludCBrdm1wcGNfcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDgzNi1cdFx0XHRrdm1wcGNfdmNvcmVfYmxvY2tlZCh2Yyk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjQ4Mzc6XHRcdH0gZWxzZSBpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDgzOC1cdFx0XHRrdm1wcGNfdmNvcmVfcHJlZW1wdCh2Yyk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00ODkxPWludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ5NjAtXHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDk2MTpcdGlmICh4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgfHwgIWt2bS1cdTAwM2VhcmNoLm1tdV9yZWFkeSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDk2Mi1cdFx0Z290byBvdXQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9Nzk9aW50IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy04Ni1cdHdoaWxlICh0cnVlKSB7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo4NzpcdFx0aWYgKF9feGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy04OC1cdFx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQxMgoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1vZGlmaWVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIG15IGF0dGVudGlvbiBpcyBkcmF3biB0bzogYGt2bXBwY19ydW5fY29yZWAsIGBrdm1wcGNfcnVuX3ZjcHVgLCBga3ZtaHZfcnVuX3NpbmdsZV92Y3B1YCwgYW5kIGBrdm1wcGNfcHJlcGFyZV90b19lbnRlcmAuIFRoZXNlIGFyZSB0aGUgb25lcyBJIG5lZWQgdG8gemVybyBpbiBvbiBmb3IgdGhlIGFuYWx5c2lzLiBUaGV5IHdpbGwsIG9mIGNvdXJzZSwgYmUgbGlzdGVkIGluIGBGb2N1c1N5bWJvbHNgIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBmcm9udCBhbmQgY2VudGVyLgoKTm93LCBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zIC0gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYEtWTV9CT09LM1NfNjRfSFZgLCBgS1ZNX0JPT0szU182NF9QUmAsIGBLVk1fRTUwMFYyYCwgYW5kIGBLVk1fRTUwME1DYC4gVGhpcyBoZWxwcyBwdXQgdGhlIGZ1bmN0aW9ucyBpbnRvIGEgdXNlZnVsIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGVzZSB0YXJnZXRzIGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLgoKTmV4dCBzdGVwOiBsZXQmIzM5O3MgZ2V0IHJlYWR5IGZvciB0aGF0IGBzZXQtcmVzdWx0c2AgY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjaGFuZ2VkLCBhbmQgaG93IHRob3NlIGNoYW5nZXMgaW1wYWN0IHRoZSBwZXJmb3JtYW5jZSBvciBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X0hWLCBLVk1fQk9PSzNTXzY0X1BSLCBLVk1fRTUwMFYyLCBLVk1fRTUwME1DPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9CT09LM1NfNjRfSFYmIzM0OywKICAgICYjMzQ7S1ZNX0JPT0szU182NF9QUiYjMzQ7LAogICAgJiMzNDtLVk1fRTUwMFYyJiMzNDssCiAgICAmIzM0O0tWTV9FNTAwTUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1wcGNfcnVuX2NvcmUmIzM0OywKICAgICYjMzQ7a3ZtcHBjX3J1bl92Y3B1JiMzNDssCiAgICAmIzM0O2t2bWh2X3J1bl9zaW5nbGVfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfcHJlcGFyZV90b19lbnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjRfSFYsIEtWTV9CT09LM1NfNjRfUFIsIEtWTV9FNTAwVjIsIEtWTV9FNTAwTUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOgoKKipDb25maWcgVmVyaWZpY2F0aW9uIENvbmNlcm5zKioKClJpZ2h0LCBzb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgdGhlIHN5c3RlbSBzaG91bGQgYmUgb3BlcmF0aW9uYWwsIGJ1dCB0aGlzIHVuZXhwZWN0ZWQgc2l0dWF0aW9uIGluZGljYXRlcyBhIHBvdGVudGlhbCBpc3N1ZSBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJIGhhdmUgdG8gdmVyaWZ5IHNvbWV0aGluZyBiYXNpYy4gSSYjMzk7bSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBBcmUgdGhleSBub3Qgd2hlcmUgdGhleSBzaG91bGQgYmU/IFRoYXQmIzM5O3Mgd2hhdCBpdCBzb3VuZHMgbGlrZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIHByZWNpc2UgbmFtZXMgb2YgdGhvc2UgY29uZmlndXJhdGlvbiBmaWxlcyB0byBtYWtlIHN1cmUgdGhleSBhcmUgcHJlc2VudCwgYW5kIGFsc28gd2hlcmUgdGhleSBhcmUsIGJ5IHRoZWlyIHBhdGhzLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjaywgYnV0IGEgY3JpdGljYWwgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9IViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mz1jb25maWcgS1ZNX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4MDpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpPa2F5LCBzbyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGlzIGNvbXBsYWluaW5nIGFib3V0IG1pc3NpbmcgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FyZSB0aGUgY29uZmlnIG9wdGlvbnMgZXZlbiBwcmVzZW50IGluIHRoZSBjdXJyZW50IHRyZWU/JiMzNDsgU2VlbXMgbGlrZSBhIGJhc2ljIGNoZWNrLCBidXQgaXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuCgpXYWl0IGEgc2Vjb25k4oCmIEkganVzdCByYW4gYSBgZ3JlcGAgYW5kLCB5ZXMsIHRob3NlIGNvbmZpZ3VyYXRpb25zICphcmUqIGxpc3RlZCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBTbywgd2h5IGlzIHRoZSB0b29sIHJlcG9ydGluZyB0aGV5IGRvbiYjMzk7dCBleGlzdD8gVGltZSB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2Agb25lIG1vcmUgdGltZS4gR290dGEgYmUgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBvciBtaXNpbnRlcnByZXRpbmcgdGhlIG91dHB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYyOlx0XG4gIDYzOlx0Y29uZmlnIEtWTV9CT09LM1NfNjRcbiAgNjQ6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXCYjMzQ7XG4gIDY1Olx0XHRkZXBlbmRzIG9uIFBQQ19CT09LM1NfNjRcbiAgNjY6XHRcdHNlbGVjdCBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbiAgNjc6XHRcdHNlbGVjdCBLVk1cbiAgNjg6XHRcdHNlbGVjdCBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFIGlmICFLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG4gIDY5Olx0XHRzZWxlY3QgUFBDXzY0U19IQVNIX01NVVxuICA3MDpcdFx0c2VsZWN0IFNQQVBSX1RDRV9JT01NVSBpZiBJT01NVV9TVVBQT1JUIFx1MDAyNlx1MDAyNiAoUFBDX1BTRVJJRVMgfHwgUFBDX1BPV0VSTlYpXG4gIDcxOlx0XHRoZWxwXG4gIDcyOlx0XHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBhbmQgYm9vazNzXzMyIGd1ZXN0IGtlcm5lbHNcbiAgNzM6XHRcdCAgaW4gdmlydHVhbCBtYWNoaW5lcyBvbiBib29rM3NfNjQgaG9zdCBwcm9jZXNzb3JzLlxuICA3NDpcdFxuICA3NTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXG4gIDc2Olx0XHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxuICA3NzpcdFxuICA3ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA3OTpcdFxuICA4MDpcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4gIDgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiAgODI6XHRcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NCBcdTAwMjZcdTAwMjYgUFBDX1BPV0VSTlZcbiAgODM6XHRcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG4gIDg0Olx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QTVVcbiAgODU6XHRcdHNlbGVjdCBDTUFcbiAgODY6XHRcdGhlbHBcbiAgODc6XHRcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGd1ZXN0IGtlcm5lbHMgaW5cbiAgODg6XHRcdCAgdmlydHVhbCBtYWNoaW5lcyBvbiBQT1dFUjcgYW5kIG5ld2VyIHByb2Nlc3NvcnMgdGhhdCBoYXZlXG4gIDg5Olx0XHQgIGh5cGVydmlzb3IgbW9kZSBhdmFpbGFibGUgdG8gdGhlIGhvc3QuXG4gIDkwOlx0XG4gIDkxOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCBLVk0gd2lsbCB1c2UgdGhlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uXG4gIDkyOlx0XHQgIGZhY2lsaXRpZXMgb2YgUE9XRVI3IChhbmQgbGF0ZXIpIHByb2Nlc3NvcnMsIG1lYW5pbmcgdGhhdFxuICA5MzpcdFx0ICBndWVzdCBvcGVyYXRpbmcgc3lzdGVtcyB3aWxsIHJ1biBhdCBmdWxsIGhhcmR3YXJlIHNwZWVkXG4gIDk0Olx0XHQgIHVzaW5nIHN1cGVydmlzb3IgYW5kIHVzZXIgbW9kZXMuICBIb3dldmVyLCB0aGlzIGFsc28gbWVhbnNcbiAgOTU6XHRcdCAgdGhhdCBLVk0gaXMgbm90IHVzYWJsZSB1bmRlciBQb3dlclZNIChwSHlwKSwgaXMgb25seSB1c2FibGVcbiAgOTY6XHRcdCAgb24gUE9XRVI3IG9yIGxhdGVyIHByb2Nlc3NvcnMsIGFuZCBjYW5ub3QgZW11bGF0ZSBhXG4gIDk3Olx0XHQgIGRpZmZlcmVudCBwcm9jZXNzb3IgZnJvbSB0aGUgaG9zdCBwcm9jZXNzb3IuXG4gIDk4Olx0XG4gIDk5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTAwOlx0XG4gMTAxOlx0Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbiAxMDI6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiAxMDM6XHRcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NFxuIDEwNDpcdFx0ZGVwZW5kcyBvbiAhQ09OVEVYVF9UUkFDS0lOR19VU0VSXG4gMTA1Olx0XHRzZWxlY3QgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuIDEwNjpcdFx0aGVscFxuIDEwNzpcdFx0ICBTdXBwb3J0IHJ1bm5pbmcgZ3Vlc3Qga2VybmVscyBpbiB2aXJ0dWFsIG1hY2hpbmVzIG9uIHByb2Nlc3NvcnNcbiAxMDg6XHRcdCAgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gdGhlIGhvc3QsIGJ5IHJ1bm5pbmcgdGhlXG4gMTA5Olx0XHQgIGd1ZXN0IGluIHVzZXIgbW9kZSAocHJvYmxlbSBzdGF0ZSkgYW5kIGVtdWxhdGluZyBhbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NzYKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIENvbmZpZ3VyYXRpb24gSW5jb25zaXN0ZW5jaWVzKioKCk9rYXksIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzICpzaG91bGQqIGJlIHByZXNlbnQg4oCTIEkmIzM5O20gY2VydGFpbiBvZiBpdC4gU28sIHdoeSBkaWQgdGhpcyBkYXJuIHRvb2wgcmVwb3J0IHRoYXQgdGhleSYjMzk7cmUgbWlzc2luZz8gSG1tLCBjb3VsZCBpdCBiZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaXNzdWU/IE1heWJlIHRoZSB0b29sIGlzIHJ1bm5pbmcgY2hlY2tzIGFnYWluc3QgeDg2LCB3aGlsZSBteSBzZXR1cCBpcyBkaWZmZXJlbnQuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGhpbmtpbmcuIExldCYjMzk7cyBiYWNrdHJhY2suLi4gVGhlIHRvb2wgaXMgc2VhcmNoaW5nIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgaXRzZWxmLCByaWdodD8gT2theSwgZ290IGl0LgoKSW5zdGVhZCBvZiBmaWdodGluZyB3aXRoIHRoZSBleGlzdGluZyB0b29sLCBtYXliZSBJIGNhbiBzaW1wbGlmeSB0aGluZ3MuIENhbiBJIHNpbXBseSB1c2UgYEtWTV9CT09LM1NfNjRgIGRpcmVjdGx5PyBUaGF0IHdvdWxkIGJ5cGFzcyB0aGUgd2hvbGUgY29uZmlnIGV4aXN0ZW5jZSBjaGVjaywgYW5kIGZvY3VzIG9uIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBhZnRlci4gTGV0JiMzOTtzIHRyeSB0aGF0IGFwcHJvYWNoIGFuZCBzZWUgd2hhdCBoYXBwZW5zLiBUaGlzIGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHRyYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjQ8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0JPT0szU182NCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19ydW5fY29yZSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfcnVuX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtaHZfcnVuX3NpbmdsZV92Y3B1JiMzNDssCiAgICAmIzM0O2t2bXBwY19wcmVwYXJlX3RvX2VudGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSB2Q1BVIHJ1biBsb29wIG9uIFBvd2VyUEMgdG8gdXNlIHRoZSBnZW5lcmljIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBhbmQga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG9wZW4tY29kZWQgbmVlZF9yZXNjaGVkKCkgYW5kIHNpZ25hbF9wZW5kaW5nKCkgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBwZW5kaW5nIHdvcmsgKGxpa2Ugc2lnbmFscyBhbmQgcmVzY2hlZHVsaW5nKSBpcyBoYW5kbGVkIGJlZm9yZSBlbnRlcmluZyB0aGUgZ3Vlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MzEKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGV4cHJlc3NlZCBhcyB0aG91Z2ggdGhlc2Ugd2VyZSBteSBvd24gdGhvdWdodHM6CgoqKkRlYnVnZ2luZyBhIFN0dWJib3JuIEtWTSBJc3N1ZSoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoaXMgcmlnaHQ/IEkgd2FzIGp1c3QgdHJ5aW5nIHRvIHVzZSBgS1ZNX0JPT0szU182NGAsIGFuZCBub3cgSSYjMzk7bSBzZWVpbmcgdGhhdCBpdCAqYWxzbyogZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBkZWZpbmVkPyBUaGlzIGlzIHN0YXJ0aW5nIHRvIHNtZWxsIGxpa2UgYSBmdW5kYW1lbnRhbCBwcm9ibGVtIHdpdGggaG93IHRoZSBLVk0gZGVmaW5pdGlvbnMgYXJlIHNldCB1cC4gVGltZSB0byByZXRyYWNlIG15IHN0ZXBzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGlzIGdvaW5nIHdyb25nLiBNYXliZSBJJiMzOTt2ZSBnb3QgYSB0eXBvLCBvciBJJiMzOTttIHVzaW5nIGFuIG91dGRhdGVkIHZlcnNpb24gb2Ygc29tZXRoaW5nLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSB0b29sJiMzOTtzIHNvdXJjZSBjb2RlLCBqdXN0IHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgaW1wbGVtZW50ZWQgYWxpZ25zIHdpdGggcmVhbGl0eS4gQWx0ZXJuYXRpdmVseSwgaWYgdGhhdCB0YWtlcyB0b28gbG9uZywgaXQgbWlnaHQganVzdCBiZSBxdWlja2VyIHRvIGZhbGwgYmFjayB0byB0aGUgZ2VuZXJpYyBgS1ZNYCBkZWZpbml0aW9uIGZvciBub3csIGFzc3VtaW5nIGl0IHdpbGwgYWNjb21wbGlzaCB0aGUgdGFzayBhdCBoYW5kLiBOZWVkIHRvIGdldCB0aGlzIHJlc29sdmVkIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtcHBjX3J1bl9jb3JlJiMzNDssCiAgICAmIzM0O2t2bXBwY19ydW5fdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1odl9ydW5fc2luZ2xlX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIHZDUFUgcnVuIGxvb3Agb24gUG93ZXJQQyB0byB1c2UgdGhlIGdlbmVyaWMgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGFuZCBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygb3Blbi1jb2RlZCBuZWVkX3Jlc2NoZWQoKSBhbmQgc2lnbmFsX3BlbmRpbmcoKSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHBlbmRpbmcgd29yayAobGlrZSBzaWduYWxzIGFuZCByZXNjaGVkdWxpbmcpIGlzIGhhbmRsZWQgYmVmb3JlIGVudGVyaW5nIHRoZSBndWVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtcHBjX3J1bl9jb3JlJiMzNDssCiAgICAmIzM0O2t2bXBwY19ydW5fdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1odl9ydW5fc2luZ2xlX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIHZDUFUgcnVuIGxvb3Agb24gUG93ZXJQQyB0byB1c2UgdGhlIGdlbmVyaWMgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGFuZCBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygb3Blbi1jb2RlZCBuZWVkX3Jlc2NoZWQoKSBhbmQgc2lnbmFsX3BlbmRpbmcoKSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHBlbmRpbmcgd29yayAobGlrZSBzaWduYWxzIGFuZCByZXNjaGVkdWxpbmcpIGlzIGhhbmRsZWQgYmVmb3JlIGVudGVyaW5nIHRoZSBndWVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjE0LjM3MDM0NDg4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Nzc3NzY0Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19ydW5fY29yZVwiLFxuICAgIFwia3ZtcHBjX3J1bl92Y3B1XCIsXG4gICAgXCJrdm1odl9ydW5fc2luZ2xlX3ZjcHVcIixcbiAgICBcImt2bXBwY19wcmVwYXJlX3RvX2VudGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIHZDUFUgcnVuIGxvb3Agb24gUG93ZXJQQyB0byB1c2UgdGhlIGdlbmVyaWMgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGFuZCBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygb3Blbi1jb2RlZCBuZWVkX3Jlc2NoZWQoKSBhbmQgc2lnbmFsX3BlbmRpbmcoKSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHBlbmRpbmcgd29yayAobGlrZSBzaWduYWxzIGFuZCByZXNjaGVkdWxpbmcpIGlzIGhhbmRsZWQgYmVmb3JlIGVudGVyaW5nIHRoZSBndWVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDg6MTQuMzcwMzQ5MzcxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcxMTkzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDU0OWU1MDUzMTU3MDNmZDNmMjc1MjVmZmU3YzdiYzM4OGY2NDU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMDE6NDg6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXFxuaW5kZXggOWEwZDFjMWFjYTZjODAuLmI2YmMyZmM4NmRjYTY3IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1xcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1xcbkBAIC0yMiw2ICsyMiw3IEBAIGNvbmZpZyBLVk1cXG4gXFx0c2VsZWN0IEtWTV9DT01NT05cXG4gXFx0c2VsZWN0IEtWTV9WRklPXFxuIFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXFxuK1xcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiBcXG4gY29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxcbiBcXHRib29sXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXFxuaW5kZXggNjFkYmVlYTMxN2YzYjcuLmExYjIwNzc1NjFiYjVhIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXFxuQEAgLTM4NTAsMTAgKzM4NTAsMjAgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxcbiBcXHQgKiBhbmQgcmV0dXJuIHdpdGhvdXQgZ29pbmcgaW50byB0aGUgZ3Vlc3QocykuXFxuIFxcdCAqIElmIHRoZSBtbXVfcmVhZHkgZmxhZyBoYXMgYmVlbiBjbGVhcmVkLCBkb24ndCBnbyBpbnRvIHRoZVxcbiBcXHQgKiBndWVzdCBiZWNhdXNlIHRoYXQgbWVhbnMgYSBIUFQgcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcy5cXG4rXFx0ICpcXG4rXFx0ICogeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGlzIHRoZSBJUlFzLWRpc2FibGVkIHJlY2hlY2sgZm9yXFxuK1xcdCAqIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIChyZXNjaGVkdWxlLCBzaWduYWxzLCBhbmQgVElGX05PVElGWV9SRVNVTUVcXG4rXFx0ICogdGFza193b3JrIHN1Y2ggYXMgdGhlIGRlZmVycmVkIENGUyB0aHJvdHRsZSkuIEl0IGlzIHRoZSBwcmUtUE9XRVI5XFxuK1xcdCAqIGFuYWxvZyBvZiB0aGUgZmluYWwgZ2F0ZSBpbiBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoKSwgYW5kIGEgc3VwZXJzZXRcXG4rXFx0ICogb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjazogaXQgY2F0Y2hlcyB3b3JrIHRoYXQgcmFjZWQgaW4gYWZ0ZXJcXG4rXFx0ICogdGhlIGRyYWluIGluIGt2bXBwY19ydW5fdmNwdSgpLCBzbyBhIENQVS1ib3VuZCB2Q1BVIGlzIHRocm90dGxlZCBoZXJlXFxuK1xcdCAqIGluc3RlYWQgb2YgcnVubmluZyBvbmUgbW9yZSBndWVzdCBkaXNwYXRjaCBwYXN0IGl0cyBxdW90YS4gSVJRcyBhcmVcXG4rXFx0ICogaGFyZC1kaXNhYmxlZCBqdXN0IGFib3ZlLCBzbyB0aGUgbm9uLV9fIHZhcmlhbnQgKHdoaWNoIGFzc2VydHMgdGhhdClcXG4rXFx0ICogaXMgdGhlIGNvcnJlY3Qgb25lLlxcbiBcXHQgKi9cXG4gXFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcXG4gXFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xcbi1cXHRpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IG5lZWRfcmVzY2hlZCgpIHx8XFxuK1xcdGlmIChsYXp5X2lycV9wZW5kaW5nKCkgfHwgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIHx8XFxuIFxcdCAgICByZWNoZWNrX3NpZ25hbHNfYW5kX21tdShcXHUwMDI2Y29yZV9pbmZvKSkge1xcbiBcXHRcXHRsb2NhbF9pcnFfZW5hYmxlKCk7XFxuIFxcdFxcdHZjLVxcdTAwM2V2Y29yZV9zdGF0ZSA9IFZDT1JFX0lOQUNUSVZFO1xcbkBAIC00ODI0LDEwICs0ODM0LDI0IEBAIHN0YXRpYyBpbnQga3ZtcHBjX3J1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0dmMtXFx1MDAzZXJ1bm5lciA9IHZjcHU7XFxuIFxcdFxcdGlmIChuX2NlZGVkID09IHZjLVxcdTAwM2VuX3J1bm5hYmxlKSB7XFxuIFxcdFxcdFxcdGt2bXBwY192Y29yZV9ibG9ja2VkKHZjKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChuZWVkX3Jlc2NoZWQoKSkge1xcbitcXHRcXHR9IGVsc2UgaWYgKF9feGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpKSB7XFxuIFxcdFxcdFxcdGt2bXBwY192Y29yZV9wcmVlbXB0KHZjKTtcXG4tXFx0XFx0XFx0LyogTGV0IHNvbWV0aGluZyBlbHNlIHJ1biAqL1xcbi1cXHRcXHRcXHRjb25kX3Jlc2NoZWRfbG9jayhcXHUwMDI2dmMtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBMZXQgc29tZXRoaW5nIGVsc2UgcnVuLCBhbmQgcnVuIHBlbmRpbmcgZ3Vlc3QtbW9kZVxcbitcXHRcXHRcXHQgKiB3b3JrIChyZXNjaGVkdWxlLCBhbmQgVElGX05PVElGWV9SRVNVTUUgdGFza193b3JrIHN1Y2hcXG4rXFx0XFx0XFx0ICogYXMgdGhlIGRlZmVycmVkIENGUyB0aHJvdHRsZSkgYmVmb3JlIHdlIHdvdWxkIHJlLWVudGVyXFxuK1xcdFxcdFxcdCAqIHRoZSBndWVzdCwgc28gYSBDUFUtYm91bmQgdkNQVSBpcyBhY3R1YWxseSB0aHJvdHRsZWRcXG4rXFx0XFx0XFx0ICogaGVyZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgcGFzdCBpdHMgcXVvdGEuIFRoaXMgaXMgYVxcbitcXHRcXHRcXHQgKiBzdXBlcnNldCBvZiB0aGUgb2xkIG5lZWRfcmVzY2hlZCgpIGNoZWNrLiBVc2UgdGhlIHJhd1xcbitcXHRcXHRcXHQgKiBoZWxwZXIsIG5vdCB0aGUga3ZtXyB3cmFwcGVyOiBzaWduYWxzIChLVk1fRVhJVF9JTlRSXFxuK1xcdFxcdFxcdCAqIGFuZCB0aGUgc2lnbmFsX2V4aXRzIHN0YXQpIGFyZSBhY2NvdW50ZWQgYnkgdGhpcyBwYXRoJ3NcXG4rXFx0XFx0XFx0ICogZXhpc3RpbmcgaGFuZGxpbmcgYmVsb3csIHNvIGdvaW5nIHRocm91Z2ggdGhlIHdyYXBwZXJcXG4rXFx0XFx0XFx0ICogaGVyZSB3b3VsZCBkb3VibGUtY291bnQgdGhlbS4gVGhlIGhlbHBlciBtYXkgc2NoZWR1bGUoKSxcXG4rXFx0XFx0XFx0ICogc28gdGhlIHZjb3JlIGxvY2sgaXMgZHJvcHBlZCBhcm91bmQgaXQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dmMtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHR4ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ2Yy1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFxcdGlmICh2Yy1cXHUwMDNldmNvcmVfc3RhdGUgPT0gVkNPUkVfUFJFRU1QVClcXG4gXFx0XFx0XFx0XFx0a3ZtcHBjX3Zjb3JlX2VuZF9wcmVlbXB0KHZjKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtNDg5OSw4ICs0OTIzLDIxIEBAIGludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAobmVlZF9yZXNjaGVkKCkpXFxuLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHQvKlxcbitcXHQgKiBSdW4gcGVuZGluZyB3b3JrIGJlZm9yZSAocmUtKWVudGVyaW5nIHRoZSBndWVzdCwgbW9zdCBpbXBvcnRhbnRseVxcbitcXHQgKiB0YXNrX3dvcmsgcXVldWVkIHZpYSBUV0FfUkVTVU1FIChlLmcuIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoXFxuK1xcdCAqIHRocm90dGxlLCB3aGljaCBvbmx5IHNldHMgVElGX05PVElGWV9SRVNVTUUpLiBXaXRob3V0IHRoaXMgYSBDUFUtYm91bmRcXG4rXFx0ICogdkNQVSB0aGF0IGtlZXBzIHJldHVybmluZyBSRVNVTUVfR1VFU1QgbmV2ZXIgcmVhY2hlcyBhbiBleGl0LXRvLXVzZXJcXG4rXFx0ICogcG9pbnQsIHNvIHRoZSB0aHJvdHRsZSBpcyBuZXZlciBlbmZvcmNlZCBhbmQgdGhlIHRhc2sgcnVucyBmYXIgYmV5b25kXFxuK1xcdCAqIGl0cyBxdW90YS4gVGhlIGhlbHBlciBhbHNvIGhhbmRsZXMgcmVzY2hlZHVsZSBhbmQgc2lnbmFscywgcmVwbGFjaW5nXFxuK1xcdCAqIHRoZSBjb25kX3Jlc2NoZWQoKSB0aGF0IHdhcyBoZXJlLiBJdCBtYXkgc2NoZWR1bGUoKSwgc28gaXQgcnVucyBiZWZvcmVcXG4rXFx0ICogcHJlZW1wdGlvbiBhbmQgSVJRcyBhcmUgZGlzYWJsZWQsIHdpdGggbm8gdmNvcmUvS1ZNIGxvY2tzIGhlbGQuIFRoaXNcXG4rXFx0ICogaXMgdGhlIHBlci1yZWVudHJ5IHNpdGUgc2hhcmVkIGJ5IHRoZSBiYXJlLW1ldGFsIGFuZCBwc2VyaWVzIChuZXN0ZWQpXFxuK1xcdCAqIHBhdGhzLCBzbyBib3RoIGFyZSBjb3ZlcmVkLlxcbitcXHQgKi9cXG4rXFx0ciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7XFxuK1xcdGlmIChyKVxcdC8qIC1FSU5UUjogc2lnbmFsIHBlbmRpbmcsIGV4aXQgdG8gdXNlcnNwYWNlIChLVk1fRVhJVF9JTlRSKSAqL1xcbitcXHRcXHRyZXR1cm4gcjtcXG4gXFxuIFxcdGt2bXBwY191cGRhdGVfdnBhcyh2Y3B1KTtcXG4gXFxuQEAgLTQ5MTQsOSArNDk1MSwxNCBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YXRlID0gS1ZNUFBDX1ZDUFVfUlVOTkFCTEU7XFxuIFxcbi1cXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuLVxcdFxcdGdvdG8gc2lncGVuZDtcXG4tXFx0aWYgKG5lZWRfcmVzY2hlZCgpIHx8ICFrdm0tXFx1MDAzZWFyY2gubW11X3JlYWR5KVxcbitcXHQvKlxcbitcXHQgKiBGaW5hbCBJUlFzLWRpc2FibGVkIGNoZWNrIGZvciBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayBvciBhbiBNTVUgdGhhdFxcbitcXHQgKiBpcyBub3QgcmVhZHkuIElSUXMgYXJlIGRpc2FibGVkIGhlcmUsIHNvIGJhaWwgdG8gdGhlIG91dGVyIGxvb3AsXFxuK1xcdCAqIHdoaWNoIHJlLWVudGVycyBhbmQgaGFuZGxlcyB0aGUgcGVuZGluZyB3b3JrIHZpYVxcbitcXHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgYWJvdmUgKGV4aXRpbmcgd2l0aCAtRUlOVFIgb24gYVxcbitcXHQgKiBzaWduYWwpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fCAha3ZtLVxcdTAwM2VhcmNoLm1tdV9yZWFkeSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VjcHUgPSBwY3B1O1xcbkBAIC01MDY4LDEwICs1MTEwLDYgQEAgaW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxcbiBcXG4gXFx0cmV0dXJuIHZjcHUtXFx1MDAzZWFyY2gucmV0O1xcbiBcXG4tIHNpZ3BlbmQ6XFxuLVxcdHZjcHUtXFx1MDAzZXN0YXQuc2lnbmFsX2V4aXRzKys7XFxuLVxcdHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnJldCA9IC1FSU5UUjtcXG4gIG91dDpcXG4gXFx0dmNwdS1cXHUwMDNlY3B1ID0gLTE7XFxuIFxcdHZjcHUtXFx1MDAzZWFyY2gudGhyZWFkX2NwdSA9IC0xO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuaW5kZXggMDAzMDIzOTlmYzM3YjQuLmZmMWE5YThkZTVlMGE0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG5AQCAtODQsMjAgKzg0LDM2IEBAIGludCBrdm1wcGNfcHJlcGFyZV90b19lbnRlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGhhcmRfaXJxX2Rpc2FibGUoKTtcXG4gXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuLVxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xcbitcXHRcXHRpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogSGFuZGxlIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIGJlZm9yZSBlbnRlcmluZyB0aGVcXG4rXFx0XFx0XFx0ICogZ3Vlc3Q6IHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRVxcbitcXHRcXHRcXHQgKiB0YXNrX3dvcmsgc3VjaCBhcyB0aGUgZGVmZXJyZWQgQ0ZTIGJhbmR3aWR0aCB0aHJvdHRsZS5cXG4rXFx0XFx0XFx0ICogVGhlIGhlbHBlciBtdXN0IHJ1biB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgbWF5XFxuK1xcdFxcdFxcdCAqIHNjaGVkdWxlKCkuIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgb3Blbi1jb2RlZFxcbitcXHRcXHRcXHQgKiBuZWVkX3Jlc2NoZWQoKS9zaWduYWxfcGVuZGluZygpIGNoZWNrcyBpdCByZXBsYWNlcy4gT25cXG4rXFx0XFx0XFx0ICogYSBwZW5kaW5nIHNpZ25hbCBpdCByZXR1cm5zIC1FSU5UUiBhZnRlclxcbitcXHRcXHRcXHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgaGFzIHNldFxcbitcXHRcXHRcXHQgKiBydW4tXFx1MDAzZWV4aXRfcmVhc29uIChLVk1fRVhJVF9JTlRSKSBhbmQgYnVtcGVkXFxuK1xcdFxcdFxcdCAqIHZjcHUtXFx1MDAzZXN0YXQuc2lnbmFsX2V4aXRzLCBzbyBqdXN0IHJldHVybiB0byB1c2Vyc3BhY2UuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRsb2NhbF9pcnFfZW5hYmxlKCk7XFxuLVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHRcXHRcXHRyID0ga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yayh2Y3B1KTtcXG4gXFx0XFx0XFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRpZiAocikge1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiAtRUlOVFI6IHRoZSBnZW5lcmljIGhlbHBlciBkb2VzIG5vdCBzZXQgdGhlXFxuK1xcdFxcdFxcdFxcdCAqIGV4aXQgdHlwZSwgc28gcmVjb3JkIGl0IGhlcmUgZm9yIHRoZSBFNTAwXFxuK1xcdFxcdFxcdFxcdCAqIENPTkZJR19LVk1fRVhJVF9USU1JTkcgaGlzdG9ncmFtIChhIG5vLW9wXFxuK1xcdFxcdFxcdFxcdCAqIG90aGVyd2lzZSkuIE9ubHkgdGhlIGV4aXQgdHlwZSBpcyBzZXQ7XFxuK1xcdFxcdFxcdFxcdCAqIHNpZ25hbF9leGl0cyB3YXMgYWxyZWFkeSBhY2NvdW50ZWQgYWJvdmUuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBTSUdOQUxfRVhJVFMpO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuLVxcdFxcdFxcdGt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgU0lHTkFMX0VYSVRTKTtcXG4tXFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7XFxuLVxcdFxcdFxcdHIgPSAtRUlOVFI7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHR2Y3B1LVxcdTAwM2Vtb2RlID0gSU5fR1VFU1RfTU9ERTtcXG4gXFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjE0LjgzODE2MTYyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUzMDk5MzkwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX3J1bl9jb3JlXCIsXG4gICAgXCJrdm1wcGNfcnVuX3ZjcHVcIixcbiAgICBcImt2bWh2X3J1bl9zaW5nbGVfdmNwdVwiLFxuICAgIFwia3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0NTQ5ZTUwNTMxNTcwM2ZkM2YyNzUyNWZmZTdjN2JjMzg4ZjY0NTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDAxOjQ4OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXG5pbmRleCA5YTBkMWMxYWNhNmM4MC4uYjZiYzJmYzg2ZGNhNjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1xuQEAgLTIyLDYgKzIyLDcgQEAgY29uZmlnIEtWTVxuIFx0c2VsZWN0IEtWTV9DT01NT05cbiBcdHNlbGVjdCBLVk1fVkZJT1xuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbitcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFxuIGNvbmZpZyBLVk1fQk9PSzNTX0hBTkRMRVJcbiBcdGJvb2xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuaW5kZXggNjFkYmVlYTMxN2YzYjcuLmExYjIwNzc1NjFiYjVhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuQEAgLTM4NTAsMTAgKzM4NTAsMjAgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxuIFx0ICogYW5kIHJldHVybiB3aXRob3V0IGdvaW5nIGludG8gdGhlIGd1ZXN0KHMpLlxuIFx0ICogSWYgdGhlIG1tdV9yZWFkeSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQsIGRvbid0IGdvIGludG8gdGhlXG4gXHQgKiBndWVzdCBiZWNhdXNlIHRoYXQgbWVhbnMgYSBIUFQgcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcy5cbitcdCAqXG4rXHQgKiB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgaXMgdGhlIElSUXMtZGlzYWJsZWQgcmVjaGVjayBmb3JcbitcdCAqIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIChyZXNjaGVkdWxlLCBzaWduYWxzLCBhbmQgVElGX05PVElGWV9SRVNVTUVcbitcdCAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgdGhyb3R0bGUpLiBJdCBpcyB0aGUgcHJlLVBPV0VSOVxuK1x0ICogYW5hbG9nIG9mIHRoZSBmaW5hbCBnYXRlIGluIGt2bWh2X3J1bl9zaW5nbGVfdmNwdSgpLCBhbmQgYSBzdXBlcnNldFxuK1x0ICogb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjazogaXQgY2F0Y2hlcyB3b3JrIHRoYXQgcmFjZWQgaW4gYWZ0ZXJcbitcdCAqIHRoZSBkcmFpbiBpbiBrdm1wcGNfcnVuX3ZjcHUoKSwgc28gYSBDUFUtYm91bmQgdkNQVSBpcyB0aHJvdHRsZWQgaGVyZVxuK1x0ICogaW5zdGVhZCBvZiBydW5uaW5nIG9uZSBtb3JlIGd1ZXN0IGRpc3BhdGNoIHBhc3QgaXRzIHF1b3RhLiBJUlFzIGFyZVxuK1x0ICogaGFyZC1kaXNhYmxlZCBqdXN0IGFib3ZlLCBzbyB0aGUgbm9uLV9fIHZhcmlhbnQgKHdoaWNoIGFzc2VydHMgdGhhdClcbitcdCAqIGlzIHRoZSBjb3JyZWN0IG9uZS5cbiBcdCAqL1xuIFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcbiBcdGhhcmRfaXJxX2Rpc2FibGUoKTtcbi1cdGlmIChsYXp5X2lycV9wZW5kaW5nKCkgfHwgbmVlZF9yZXNjaGVkKCkgfHxcbitcdGlmIChsYXp5X2lycV9wZW5kaW5nKCkgfHwgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIHx8XG4gXHQgICAgcmVjaGVja19zaWduYWxzX2FuZF9tbXUoXHUwMDI2Y29yZV9pbmZvKSkge1xuIFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4gXHRcdHZjLVx1MDAzZXZjb3JlX3N0YXRlID0gVkNPUkVfSU5BQ1RJVkU7XG5AQCAtNDgyNCwxMCArNDgzNCwyNCBAQCBzdGF0aWMgaW50IGt2bXBwY19ydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZjLVx1MDAzZXJ1bm5lciA9IHZjcHU7XG4gXHRcdGlmIChuX2NlZGVkID09IHZjLVx1MDAzZW5fcnVubmFibGUpIHtcbiBcdFx0XHRrdm1wcGNfdmNvcmVfYmxvY2tlZCh2Yyk7XG4tXHRcdH0gZWxzZSBpZiAobmVlZF9yZXNjaGVkKCkpIHtcbitcdFx0fSBlbHNlIGlmIChfX3hmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSkge1xuIFx0XHRcdGt2bXBwY192Y29yZV9wcmVlbXB0KHZjKTtcbi1cdFx0XHQvKiBMZXQgc29tZXRoaW5nIGVsc2UgcnVuICovXG4tXHRcdFx0Y29uZF9yZXNjaGVkX2xvY2soXHUwMDI2dmMtXHUwMDNlbG9jayk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBMZXQgc29tZXRoaW5nIGVsc2UgcnVuLCBhbmQgcnVuIHBlbmRpbmcgZ3Vlc3QtbW9kZVxuK1x0XHRcdCAqIHdvcmsgKHJlc2NoZWR1bGUsIGFuZCBUSUZfTk9USUZZX1JFU1VNRSB0YXNrX3dvcmsgc3VjaFxuK1x0XHRcdCAqIGFzIHRoZSBkZWZlcnJlZCBDRlMgdGhyb3R0bGUpIGJlZm9yZSB3ZSB3b3VsZCByZS1lbnRlclxuK1x0XHRcdCAqIHRoZSBndWVzdCwgc28gYSBDUFUtYm91bmQgdkNQVSBpcyBhY3R1YWxseSB0aHJvdHRsZWRcbitcdFx0XHQgKiBoZXJlIGluc3RlYWQgb2YgcnVubmluZyBwYXN0IGl0cyBxdW90YS4gVGhpcyBpcyBhXG4rXHRcdFx0ICogc3VwZXJzZXQgb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjay4gVXNlIHRoZSByYXdcbitcdFx0XHQgKiBoZWxwZXIsIG5vdCB0aGUga3ZtXyB3cmFwcGVyOiBzaWduYWxzIChLVk1fRVhJVF9JTlRSXG4rXHRcdFx0ICogYW5kIHRoZSBzaWduYWxfZXhpdHMgc3RhdCkgYXJlIGFjY291bnRlZCBieSB0aGlzIHBhdGgnc1xuK1x0XHRcdCAqIGV4aXN0aW5nIGhhbmRsaW5nIGJlbG93LCBzbyBnb2luZyB0aHJvdWdoIHRoZSB3cmFwcGVyXG4rXHRcdFx0ICogaGVyZSB3b3VsZCBkb3VibGUtY291bnQgdGhlbS4gVGhlIGhlbHBlciBtYXkgc2NoZWR1bGUoKSxcbitcdFx0XHQgKiBzbyB0aGUgdmNvcmUgbG9jayBpcyBkcm9wcGVkIGFyb3VuZCBpdC5cbitcdFx0XHQgKi9cbitcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2Yy1cdTAwM2Vsb2NrKTtcbitcdFx0XHR4ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKTtcbitcdFx0XHRzcGluX2xvY2soXHUwMDI2dmMtXHUwMDNlbG9jayk7XG4gXHRcdFx0aWYgKHZjLVx1MDAzZXZjb3JlX3N0YXRlID09IFZDT1JFX1BSRUVNUFQpXG4gXHRcdFx0XHRrdm1wcGNfdmNvcmVfZW5kX3ByZWVtcHQodmMpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTQ4OTksOCArNDkyMywyMSBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChuZWVkX3Jlc2NoZWQoKSlcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHQvKlxuK1x0ICogUnVuIHBlbmRpbmcgd29yayBiZWZvcmUgKHJlLSllbnRlcmluZyB0aGUgZ3Vlc3QsIG1vc3QgaW1wb3J0YW50bHlcbitcdCAqIHRhc2tfd29yayBxdWV1ZWQgdmlhIFRXQV9SRVNVTUUgKGUuZy4gdGhlIGRlZmVycmVkIENGUyBiYW5kd2lkdGhcbitcdCAqIHRocm90dGxlLCB3aGljaCBvbmx5IHNldHMgVElGX05PVElGWV9SRVNVTUUpLiBXaXRob3V0IHRoaXMgYSBDUFUtYm91bmRcbitcdCAqIHZDUFUgdGhhdCBrZWVwcyByZXR1cm5pbmcgUkVTVU1FX0dVRVNUIG5ldmVyIHJlYWNoZXMgYW4gZXhpdC10by11c2VyXG4rXHQgKiBwb2ludCwgc28gdGhlIHRocm90dGxlIGlzIG5ldmVyIGVuZm9yY2VkIGFuZCB0aGUgdGFzayBydW5zIGZhciBiZXlvbmRcbitcdCAqIGl0cyBxdW90YS4gVGhlIGhlbHBlciBhbHNvIGhhbmRsZXMgcmVzY2hlZHVsZSBhbmQgc2lnbmFscywgcmVwbGFjaW5nXG4rXHQgKiB0aGUgY29uZF9yZXNjaGVkKCkgdGhhdCB3YXMgaGVyZS4gSXQgbWF5IHNjaGVkdWxlKCksIHNvIGl0IHJ1bnMgYmVmb3JlXG4rXHQgKiBwcmVlbXB0aW9uIGFuZCBJUlFzIGFyZSBkaXNhYmxlZCwgd2l0aCBubyB2Y29yZS9LVk0gbG9ja3MgaGVsZC4gVGhpc1xuK1x0ICogaXMgdGhlIHBlci1yZWVudHJ5IHNpdGUgc2hhcmVkIGJ5IHRoZSBiYXJlLW1ldGFsIGFuZCBwc2VyaWVzIChuZXN0ZWQpXG4rXHQgKiBwYXRocywgc28gYm90aCBhcmUgY292ZXJlZC5cbitcdCAqL1xuK1x0ciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7XG4rXHRpZiAocilcdC8qIC1FSU5UUjogc2lnbmFsIHBlbmRpbmcsIGV4aXQgdG8gdXNlcnNwYWNlIChLVk1fRVhJVF9JTlRSKSAqL1xuK1x0XHRyZXR1cm4gcjtcbiBcbiBcdGt2bXBwY191cGRhdGVfdnBhcyh2Y3B1KTtcbiBcbkBAIC00OTE0LDkgKzQ5NTEsMTQgQEAgaW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnN0YXRlID0gS1ZNUFBDX1ZDUFVfUlVOTkFCTEU7XG4gXG4tXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4tXHRcdGdvdG8gc2lncGVuZDtcbi1cdGlmIChuZWVkX3Jlc2NoZWQoKSB8fCAha3ZtLVx1MDAzZWFyY2gubW11X3JlYWR5KVxuK1x0LypcbitcdCAqIEZpbmFsIElSUXMtZGlzYWJsZWQgY2hlY2sgZm9yIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIG9yIGFuIE1NVSB0aGF0XG4rXHQgKiBpcyBub3QgcmVhZHkuIElSUXMgYXJlIGRpc2FibGVkIGhlcmUsIHNvIGJhaWwgdG8gdGhlIG91dGVyIGxvb3AsXG4rXHQgKiB3aGljaCByZS1lbnRlcnMgYW5kIGhhbmRsZXMgdGhlIHBlbmRpbmcgd29yayB2aWFcbitcdCAqIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBhYm92ZSAoZXhpdGluZyB3aXRoIC1FSU5UUiBvbiBhXG4rXHQgKiBzaWduYWwpLlxuK1x0ICovXG4rXHRpZiAoeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIHx8ICFrdm0tXHUwMDNlYXJjaC5tbXVfcmVhZHkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0dmNwdS1cdTAwM2VjcHUgPSBwY3B1O1xuQEAgLTUwNjgsMTAgKzUxMTAsNiBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG4gXG4gXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLnJldDtcbiBcbi0gc2lncGVuZDpcbi1cdHZjcHUtXHUwMDNlc3RhdC5zaWduYWxfZXhpdHMrKztcbi1cdHJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7XG4tXHR2Y3B1LVx1MDAzZWFyY2gucmV0ID0gLUVJTlRSO1xuICBvdXQ6XG4gXHR2Y3B1LVx1MDAzZWNwdSA9IC0xO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnRocmVhZF9jcHUgPSAtMTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5pbmRleCAwMDMwMjM5OWZjMzdiNC4uZmYxYTlhOGRlNWUwYTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbkBAIC04NCwyMCArODQsMzYgQEAgaW50IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGhhcmRfaXJxX2Rpc2FibGUoKTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4tXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuK1x0XHRpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEhhbmRsZSBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayBiZWZvcmUgZW50ZXJpbmcgdGhlXG4rXHRcdFx0ICogZ3Vlc3Q6IHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRVxuK1x0XHRcdCAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoIHRocm90dGxlLlxuK1x0XHRcdCAqIFRoZSBoZWxwZXIgbXVzdCBydW4gd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgYW5kIG1heVxuK1x0XHRcdCAqIHNjaGVkdWxlKCkuIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgb3Blbi1jb2RlZFxuK1x0XHRcdCAqIG5lZWRfcmVzY2hlZCgpL3NpZ25hbF9wZW5kaW5nKCkgY2hlY2tzIGl0IHJlcGxhY2VzLiBPblxuK1x0XHRcdCAqIGEgcGVuZGluZyBzaWduYWwgaXQgcmV0dXJucyAtRUlOVFIgYWZ0ZXJcbitcdFx0XHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgaGFzIHNldFxuK1x0XHRcdCAqIHJ1bi1cdTAwM2VleGl0X3JlYXNvbiAoS1ZNX0VYSVRfSU5UUikgYW5kIGJ1bXBlZFxuK1x0XHRcdCAqIHZjcHUtXHUwMDNlc3RhdC5zaWduYWxfZXhpdHMsIHNvIGp1c3QgcmV0dXJuIHRvIHVzZXJzcGFjZS5cbitcdFx0XHQgKi9cbiBcdFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdFx0ciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7XG4gXHRcdFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xuK1x0XHRcdGlmIChyKSB7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogLUVJTlRSOiB0aGUgZ2VuZXJpYyBoZWxwZXIgZG9lcyBub3Qgc2V0IHRoZVxuK1x0XHRcdFx0ICogZXhpdCB0eXBlLCBzbyByZWNvcmQgaXQgaGVyZSBmb3IgdGhlIEU1MDBcbitcdFx0XHRcdCAqIENPTkZJR19LVk1fRVhJVF9USU1JTkcgaGlzdG9ncmFtIChhIG5vLW9wXG4rXHRcdFx0XHQgKiBvdGhlcndpc2UpLiBPbmx5IHRoZSBleGl0IHR5cGUgaXMgc2V0O1xuK1x0XHRcdFx0ICogc2lnbmFsX2V4aXRzIHdhcyBhbHJlYWR5IGFjY291bnRlZCBhYm92ZS5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0a3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgU0lHTkFMX0VYSVRTKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbi1cdFx0XHRrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIFNJR05BTF9FWElUUyk7XG4tXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSO1xuLVx0XHRcdHIgPSAtRUlOVFI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbiBcdFx0dmNwdS1cdTAwM2Vtb2RlID0gSU5fR1VFU1RfTU9ERTtcbiBcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjE0LjgzODE2MjkwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjA5MDQ0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG93ZXJQQyBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIEtWTSBvbiBQb3dlclBDLCBzcGVjaWZpY2FsbHkgaW4gdGhvc2UgYGJvb2szc19odi5jYCBhbmQgYHBvd2VycGMuY2AgZmlsZXMuIEl0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZWZpbmluZyBob3cgdGhlIHN5c3RlbSBjaGVja3MgZm9yIHBlbmRpbmcgd29yayBiZWZvcmUgdGhyb3dpbmcgdGhlIENQVSBpbnRvIGd1ZXN0IG1vZGUuIFRoZXkncmUgZGl0Y2hpbmcgdGhlIHVzdWFsIGBuZWVkX3Jlc2NoZWQoKWAgYW5kIGBzaWduYWxfcGVuZGluZygpYCBhbmQgYnJpbmdpbmcgaW4gdGhpcyBgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpYCBhbmQgYGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKWAgY29tYm8uIEludGVyZXN0aW5nLi4uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgbnVhbmNlcyBvZiB0aGlzIGFwcHJvYWNoIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZCBtZXRob2RzIHRvIHNlZSB3aHkgdGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gSXQncyBhbHNvIGFkZGluZyBgc2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLYCB0byB0aGUgS2NvbmZpZywgc28gaXQgc2VlbXMgbGlrZSB0aGlzIGlzIGVuYWJsaW5nIG5ldyBiZWhhdmlvci5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmZpZyByZXF1aXJlbWVudHMgZm9yIHRoaXMgcGF0Y2guIEkgYWxyZWFkeSBrbm93IGl0IHJlcXVpcmVzIGBDT05GSUdfS1ZNYCwgYW5kIGl0J3MgbW9zdCBsaWtlbHkgZGVwZW5kZW50IG9uIGVpdGhlciBgQ09ORklHX0tWTV9CT09LM1NfSFZgIG9yIG9uZSBvZiB0aGUgb3RoZXIgQk9PSzNTIG9yIEU1MDBWMiB2YXJpYW50cy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zLCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBncmVwLiBJJ2xsIHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb25zIG9mIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgIGFuZCBga3ZtcHBjX3J1bl9jb3JlYCB0aHJvdWdob3V0IHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMgaW4gS1ZNIGFyZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSBhbmQgd2hhdCB0aGVpciBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFyZS4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIC0gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODoyMC4yNTkwNjkzMjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczMzc3NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWh2X3J1bl9zaW5nbGVfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTM3NzY9c3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODU2LVxcdCAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgdGhyb3R0bGUpLiBJdCBpcyB0aGUgcHJlLVBPV0VSOVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6Mzg1NzpcXHQgKiBhbmFsb2cgb2YgdGhlIGZpbmFsIGdhdGUgaW4ga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KCksIGFuZCBhIHN1cGVyc2V0XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODU4LVxcdCAqIG9mIHRoZSBvbGQgbmVlZF9yZXNjaGVkKCkgY2hlY2s6IGl0IGNhdGNoZXMgd29yayB0aGF0IHJhY2VkIGluIGFmdGVyXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ3NDc9c3RhdGljIGludCBrdm1wcGNfcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00ODkwLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDg5MTppbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00ODkyLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBscGNyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz01MTIyPXN0YXRpYyBpbnQga3ZtcHBjX3ZjcHVfcnVuX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTE5OC1cXHRcXHRpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQVJDSF8zMDApKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTE5OTpcXHRcXHRcXHRyID0ga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHZjcHUsIH4odTY0KTAsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MjAwLVxcdFxcdFxcdFxcdFxcdFxcdCAgdmNwdS1cXHUwMDNlYXJjaC52Y29yZS1cXHUwMDNlbHBjcik7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz0yOTU9bG9uZyBrdm1odl9lbnRlcl9uZXN0ZWRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtMzgzLVxcdGRvIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzozODQ6XFx0XFx0ciA9IGt2bWh2X3J1bl9zaW5nbGVfdmNwdSh2Y3B1LCBoZGVjX2V4cCwgbHBjcik7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtMzg1LVxcdH0gd2hpbGUgKGlzX2t2bXBwY19yZXN1bWVfZ3Vlc3QocikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODoyMC42MzI0NTEwNzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQwOTk5NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFBvd2VyUEMgS1ZNIEJvb2szUyBIeXBlcnZpc29yIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGUgUG93ZXJQQyBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGh5cGVydmlzb3IgYXNwZWN0cy4gVGhlIGZpcnN0IHBsYWNlIHRvIGNoZWNrLCBhbmQgaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSwgaXMgYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0aGUgY29yZSBoeXBlcnZpc29yIGZ1bmN0aW9uYWxpdHkgZm9yIEJvb2szUyBzeXN0ZW1zIHRvIHJlc2lkZS4gTm93LCBiZWZvcmUgSSBldmVuIGdldCB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSAqYWx3YXlzKiBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgYm9vazNzX2h2LmNgLiBJIHdhbnQgdG8ga25vdyB3aGVuIGFuZCB3aHkgdGhpcyBjb2RlIGlzIGNvbXBpbGVkIGFuZCB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQuIEtub3dpbmcgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiB3aWxsIHNhdmUgbWUgYSB0b24gb2YgdGltZSBpbiB0aGUgbG9uZyBydW4sIGhlbHBpbmcgbWUgdW5kZXJzdGFuZCB0aGUgd2lkZXIgcGljdHVyZSBhbmQgYXZvaWQgY2hhc2luZyBteSB0YWlsIHdpdGggY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBzYXkgYWJvdXQgdGhlIGh5cGVydmlzb3Igc3VwcG9ydCBhbmQgaG93IGl0J3MgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjI0LjA3MzQ1MjA0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODgyNTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib29rM3NfaHYub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlPTYyPWt2bS1odi15ICs9IFxcXFxcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjYzOlxcdGJvb2szc19odi5vIFxcXFxcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTY0LVxcdGJvb2szc19odl9pbnRlcnJ1cHRzLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODoyNC4xNDIyODI1MTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODUwNzU0MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNLUhWIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBlbmFibGVzIGBrdm0taHYteWAuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgZGlyZWN0bHkgdGFyZ2V0aW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGVyZSBhbmQgaG93IHRoaXMgZmxhZyBpcyBzZXQgb3IgaW5mbHVlbmNlZC4gV2UncmUgZGVhbGluZyB3aXRoIEtWTSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGh5cGVydmlzb3IgYW5kIGhvc3QuIElzIGl0IGEga2VybmVsIG1vZHVsZSBwYXJhbWV0ZXI/IEEgYnVpbGQtdGltZSBvcHRpb24/IFBhcnQgb2YgYSBkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlPyBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgbm90IGEgc2ltcGxlIHRvZ2dsZSB3aXRoaW4gYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uJ3MgcHJlZmVyZW5jZXMuIEl0J3MgbGlrZWx5IGRlZXBlciB0aGFuIHRoYXQsIGFuZCBhIHF1aWNrIGxvb2t1cCB3aWxsIHBpbnBvaW50IHRoZSBleGFjdCBzb3VyY2Ugb2YgdGhpcyBjb25maWd1cmF0aW9uLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODkzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDg6MjYuOTkzMDM4MTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDc1MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bS1odi15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjA9ZW5kaWZcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU6NjI6a3ZtLWh2LXkgKz0gXFxcXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjMtXFx0Ym9vazNzX2h2Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODoyNy4wNDcxMTg5NjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc3MzU2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgYGFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGVgIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIE1ha2VmaWxlIGZvciBQb3dlclBDKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgdGhpcyBgTWFrZWZpbGVgIGZvciB0aGUgUG93ZXJQQyBLVk0gYXJjaGl0ZWN0dXJlLiBUaGlzIG1lYW5zIEknbSBsb29raW5nIGZvciB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIG92ZXJhbGwgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBtb2R1bGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGZvciB0aGlzIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MsIGluY2x1ZGUgcGF0aHMsIG9yIHNwZWNpYWwgY29tcGlsZXIgZGVmaW5pdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byBQb3dlclBDJ3MgdW5pcXVlIGNoYXJhY3RlcmlzdGljcywgc3VjaCBhcyBpdHMgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2V0LCBtZW1vcnkgbW9kZWwsIG9yIG90aGVyIGhhcmR3YXJlIHBlY3VsaWFyaXRpZXMgdGhhdCBpbXBhY3QgdmlydHVhbGl6YXRpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRhcmdldHMgcmVsYXRlZCB0byB0aGUgS1ZNIGNvcmUsIHZDUFUgaGFuZGxpbmcsIE1NVSBlbXVsYXRpb24sIGRldmljZSBlbXVsYXRpb24sIGFuZCBhbnkgUG93ZXJQQy1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGlkZW50aWZ5IGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBvdmVyYWxsIEtWTSBmdW5jdGlvbmFsaXR5IG9uIFBvd2VyUEMgc3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjMwLjYyNDQ3NzY5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9wb3dlcnBjL2t2bVxcbiAgIDc6XFx0XFxuICAgODpcXHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbW1vbi1vYmpzLXkgKz0gcG93ZXJwYy5vIGVtdWxhdGVfbG9hZHN0b3JlLm9cXG4gIDExOlxcdG9iai0kKENPTkZJR19LVk1fRVhJVF9USU1JTkcpICs9IHRpbWluZy5vXFxuICAxMjpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU19IQU5ETEVSKSArPSBib29rM3NfZXhwb3J0cy5vXFxuICAxMzpcXHRcXG4gIDE0OlxcdEFGTEFHU19ib29rZV9pbnRlcnJ1cHRzLm8gOj0gLUkkKG9ianRyZWUpLyQob2JqKVxcbiAgMTU6XFx0XFxuICAxNjpcXHRrdm0tZTUwMC1vYmpzIDo9IFxcXFxcXG4gIDE3OlxcdFxcdCQoY29tbW9uLW9ianMteSkgXFxcXFxcbiAgMTg6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gIDE5OlxcdFxcdGJvb2tlLm8gXFxcXFxcbiAgMjA6XFx0XFx0Ym9va2VfZW11bGF0ZS5vIFxcXFxcXG4gIDIxOlxcdFxcdGJvb2tlX2ludGVycnVwdHMubyBcXFxcXFxuICAyMjpcXHRcXHRlNTAwLm8gXFxcXFxcbiAgMjM6XFx0XFx0ZTUwMF9tbXUubyBcXFxcXFxuICAyNDpcXHRcXHRlNTAwX21tdV9ob3N0Lm8gXFxcXFxcbiAgMjU6XFx0XFx0ZTUwMF9lbXVsYXRlLm9cXG4gIDI2OlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9FNTAwVjIpIDo9ICQoa3ZtLWU1MDAtb2JqcylcXG4gIDI3OlxcdFxcbiAgMjg6XFx0a3ZtLWU1MDBtYy1vYmpzIDo9IFxcXFxcXG4gIDI5OlxcdFxcdCQoY29tbW9uLW9ianMteSkgXFxcXFxcbiAgMzA6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gIDMxOlxcdFxcdGJvb2tlLm8gXFxcXFxcbiAgMzI6XFx0XFx0Ym9va2VfZW11bGF0ZS5vIFxcXFxcXG4gIDMzOlxcdFxcdGJvb2tlaHZfaW50ZXJydXB0cy5vIFxcXFxcXG4gIDM0OlxcdFxcdGU1MDBtYy5vIFxcXFxcXG4gIDM1OlxcdFxcdGU1MDBfbW11Lm8gXFxcXFxcbiAgMzY6XFx0XFx0ZTUwMF9tbXVfaG9zdC5vIFxcXFxcXG4gIDM3OlxcdFxcdGU1MDBfZW11bGF0ZS5vXFxuICAzODpcXHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fRTUwME1DKSA6PSAkKGt2bS1lNTAwbWMtb2JqcylcXG4gIDM5OlxcdFxcbiAgNDA6XFx0a3ZtLXByLXkgOj0gXFxcXFxcbiAgNDE6XFx0XFx0ZnB1Lm8gXFxcXFxcbiAgNDI6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gIDQzOlxcdFxcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXFxcXG4gIDQ0OlxcdFxcdGJvb2szc19wci5vIFxcXFxcXG4gIDQ1OlxcdFxcdGJvb2szc19wcl9wYXByLm8gXFxcXFxcbiAgNDY6XFx0XFx0Ym9vazNzX2VtdWxhdGUubyBcXFxcXFxuICA0NzpcXHRcXHRib29rM3NfaW50ZXJydXB0cy5vIFxcXFxcXG4gIDQ4OlxcdFxcdGJvb2szc19tbXVfaHB0ZS5vIFxcXFxcXG4gIDQ5OlxcdFxcdGJvb2szc182NF9tbXVfaG9zdC5vIFxcXFxcXG4gIDUwOlxcdFxcdGJvb2szc182NF9tbXUubyBcXFxcXFxuICA1MTpcXHRcXHRib29rM3NfMzJfbW11Lm9cXG4gIDUyOlxcdFxcbiAgNTM6XFx0a3ZtLWJvb2szc182NC1idWlsdGluLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSKSArPSBcXFxcXFxuICA1NDpcXHRcXHRib29rM3NfNjRfZW50cnkubyBcXFxcXFxuICA1NTpcXHRcXHR0bS5vXFxuICA1NjpcXHRcXG4gIDU3OlxcdGlmZGVmIENPTkZJR19LVk1fQk9PSzNTX1BSX1BPU1NJQkxFXFxuICA1ODpcXHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICs9IFxcXFxcXG4gIDU5OlxcdFxcdGJvb2szc19ybWhhbmRsZXJzLm9cXG4gIDYwOlxcdGVuZGlmXFxuICA2MTpcXHRcXG4gIDYyOlxcdGt2bS1odi15ICs9IFxcXFxcXG4gIDYzOlxcdFxcdGJvb2szc19odi5vIFxcXFxcXG4gIDY0OlxcdFxcdGJvb2szc19odl9pbnRlcnJ1cHRzLm8gXFxcXFxcbiAgNjU6XFx0XFx0Ym9vazNzXzY0X21tdV9odi5vIFxcXFxcXG4gIDY2OlxcdFxcdGJvb2szc182NF9tbXVfcmFkaXgubyBcXFxcXFxuICA2NzpcXHRcXHRib29rM3NfaHZfbmVzdGVkLm9cXG4gIDY4OlxcdFxcbiAgNjk6XFx0a3ZtLWh2LSQoQ09ORklHX1BQQ19VVikgKz0gXFxcXFxcbiAgNzA6XFx0XFx0Ym9vazNzX2h2X3V2bWVtLm9cXG4gIDcxOlxcdFxcbiAgNzI6XFx0a3ZtLWh2LSQoQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTSkgKz0gXFxcXFxcbiAgNzM6XFx0XFx0Ym9vazNzX2h2X3RtLm9cXG4gIDc0OlxcdFxcbiAgNzU6XFx0a3ZtLWJvb2szc182NC1idWlsdGluLXhpY3Mtb2Jqcy0kKENPTkZJR19LVk1fWElDUykgOj0gXFxcXFxcbiAgNzY6XFx0XFx0Ym9vazNzX2h2X3JtX3hpY3Mub1xcbiAgNzc6XFx0XFxuICA3ODpcXHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tdG0tb2Jqcy0kKENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU0pICs9IFxcXFxcXG4gIDc5OlxcdFxcdGJvb2szc19odl90bV9idWlsdGluLm9cXG4gIDgwOlxcdFxcbiAgODE6XFx0aWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG4gIDgyOlxcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgKz0gXFxcXFxcbiAgODM6XFx0XFx0Ym9vazNzX2h2X2htaS5vIFxcXFxcXG4gIDg0OlxcdFxcdGJvb2szc19odl9wOV9lbnRyeS5vIFxcXFxcXG4gIDg1OlxcdFxcdGJvb2szc19odl9ybWhhbmRsZXJzLm8gXFxcXFxcbiAgODY6XFx0XFx0Ym9vazNzX2h2X3JtX21tdS5vIFxcXFxcXG4gIDg3OlxcdFxcdGJvb2szc19odl9yYXMubyBcXFxcXFxuICA4ODpcXHRcXHRib29rM3NfaHZfYnVpbHRpbi5vIFxcXFxcXG4gIDg5OlxcdFxcdGJvb2szc19odl9wOV9wZXJmLm8gXFxcXFxcbiAgOTA6XFx0XFx0Ym9vazNzX2h2X25lc3RlZHYyLm8gXFxcXFxcbiAgOTE6XFx0XFx0Z3Vlc3Qtc3RhdGUtYnVmZmVyLm8gXFxcXFxcbiAgOTI6XFx0XFx0JChrdm0tYm9vazNzXzY0LWJ1aWx0aW4tdG0tb2Jqcy15KSBcXFxcXFxuICA5MzpcXHRcXHQkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi14aWNzLW9ianMteSlcXG4gIDk0OlxcdFxcbiAgOTU6XFx0b2JqLSQoQ09ORklHX0dVRVNUX1NUQVRFX0JVRkZFUl9URVNUKSArPSB0ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5vXFxuICA5NjpcXHRlbmRpZlxcbiAgOTc6XFx0XFxuICA5ODpcXHRrdm0tYm9vazNzXzY0LW9ianMtJChDT05GSUdfS1ZNX1hJQ1MpICs9IFxcXFxcXG4gIDk5OlxcdFxcdGJvb2szc194aWNzLm9cXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODozMC42MjQ1NDkxMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMTMwMDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLVk0gTWFrZWZpbGUgTWF6ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0gYnVpbGQgcHJvY2VzcywgYW5kIEkndmUgZ290IGEgaHVuY2guIEl0IGxvb2tzIGxpa2UgdGhlIHBpZWNlIEknbSBpbnRlcmVzdGVkIGluLCBzcGVjaWZpY2FsbHkgYGt2bS1odi15YCwgaXMgbGlrZWx5IGdldHRpbmcgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJ1aWxkIGJhc2VkIG9uIHRoYXQgYGt2bS1ib29rM3NfNjQtb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hWKWAgY29uZGl0aW9uYWwuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgYnV0IGdpdmVuIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIG1ha2VmaWxlIHN0cnVjdHVyZSwgSSBuZWVkIHRvIGNvbmZpcm0uIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIE1ha2VmaWxlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGNoYWluIGFuZCBleGFjdGx5IGhvdyBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgIGFmZmVjdHMgdGhlIGluY2x1c2lvbiBvZiBga3ZtLWh2LXlgLiBMZXQncyBzZWUgd2hhdCB0aGUgc3Vic2VxdWVudCBydWxlcyBhbmQgdmFyaWFibGVzIHJldmVhbC4gVGhlcmUncyB1c3VhbGx5IG1vcmUgdG8gdW5wYWNrIHdoZW4gaXQgY29tZXMgdG8gS1ZNIGJ1aWxkIHN5c3RlbXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjM0LjM0NTg1MjU4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdGt2bS1ib29rM3NfNjQtb2Jqcy0kKENPTkZJR19LVk1fWElWRSkgKz0gYm9vazNzX3hpdmUubyBib29rM3NfeGl2ZV9uYXRpdmUub1xcbiAxMDI6XFx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX1NQQVBSX1RDRV9JT01NVSkgKz0gYm9vazNzXzY0X3Zpby5vXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianMgOj0gXFxcXFxcbiAxMDU6XFx0XFx0JChjb21tb24tb2Jqcy15KSBcXFxcXFxuIDEwNjpcXHRcXHRib29rM3MubyBcXFxcXFxuIDEwNzpcXHRcXHRib29rM3NfcnRhcy5vIFxcXFxcXG4gMTA4OlxcdFxcdCQoa3ZtLWJvb2szc182NC1vYmpzLXkpXFxuIDEwOTpcXHRcXG4gMTEwOlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpIDo9ICQoa3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcylcXG4gMTExOlxcdFxcbiAxMTI6XFx0a3ZtLWJvb2szc18zMi1vYmpzIDo9IFxcXFxcXG4gMTEzOlxcdFxcdCQoY29tbW9uLW9ianMteSkgXFxcXFxcbiAxMTQ6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gMTE1OlxcdFxcdGZwdS5vIFxcXFxcXG4gMTE2OlxcdFxcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXFxcXG4gMTE3OlxcdFxcdGJvb2szcy5vIFxcXFxcXG4gMTE4OlxcdFxcdGJvb2szc19wci5vIFxcXFxcXG4gMTE5OlxcdFxcdGJvb2szc19lbXVsYXRlLm8gXFxcXFxcbiAxMjA6XFx0XFx0Ym9vazNzX2ludGVycnVwdHMubyBcXFxcXFxuIDEyMTpcXHRcXHRib29rM3NfbW11X2hwdGUubyBcXFxcXFxuIDEyMjpcXHRcXHRib29rM3NfMzJfbW11X2hvc3QubyBcXFxcXFxuIDEyMzpcXHRcXHRib29rM3NfMzJfbW11Lm9cXG4gMTI0OlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfMzIpIDo9ICQoa3ZtLWJvb2szc18zMi1vYmpzKVxcbiAxMjU6XFx0XFxuIDEyNjpcXHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fTVBJQykgKz0gbXBpYy5vXFxuIDEyNzpcXHRcXG4gMTI4OlxcdGt2bS15ICs9ICQoa3ZtLW9ianMtbSkgJChrdm0tb2Jqcy15KVxcbiAxMjk6XFx0XFxuIDEzMDpcXHRvYmotJChDT05GSUdfS1ZNX0U1MDBWMikgKz0ga3ZtLm9cXG4gMTMxOlxcdG9iai0kKENPTkZJR19LVk1fRTUwME1DKSArPSBrdm0ub1xcbiAxMzI6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpICs9IGt2bS5vXFxuIDEzMzpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU18zMikgKz0ga3ZtLm9cXG4gMTM0OlxcdFxcbiAxMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfUFIpICs9IGt2bS1wci5vXFxuIDEzNjpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9IVikgKz0ga3ZtLWh2Lm9cXG4gMTM3OlxcdFxcbiAxMzg6XFx0b2JqLXkgKz0gJChrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy15KVxcbiAxMzk6XFx0XFxuIDE0MDpcXHQjIEtWTSBkb2VzIGEgbG90IGluIHJlYWwtbW9kZSwgYW5kIDY0LWJpdCBCb29rM1MgS0FTQU4gZG9lc24ndCBzdXBwb3J0IHRoYXRcXG4gMTQxOlxcdGlmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0XFxuIDE0MjpcXHRLQVNBTl9TQU5JVElaRSA6PSBuXFxuIDE0MzpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODozNC4zNDU5ODI3ODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDYwNjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBLVk0gQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJhY2luZyBkb3duIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIGtlcm5lbCBtb2R1bGVzLiBJdCBzZWVtcyBsaWtlIGBrdm0taHYub2AgZ2V0cyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBkZWZpbmVkLiBUaGF0IG1ha2VzIHNlbnNlLCBwcmV0dHkgc3BlY2lmaWMuIEFuZCB0aGVuLCBJIHNlZSB0aGF0IGBwb3dlcnBjLm9gIGlzIGJ1aWx0IGlmIGBDT05GSUdfS1ZNYCBpcyBzZXQsIGFuZCBpdCBsb29rcyBsaWtlIGBjb21tb24tb2Jqcy15YCBpcyB0aGUgdHJpZ2dlciBmb3IgdGhhdC5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28sIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgS1ZNX0JPT0szU182NF9IVmAuIFRoYXQgc2hvdWxkIGNsYXJpZnkgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCBJIGNhbiBiZSBtb3JlIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjg5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODozNy41ODA1OTExNjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjE5NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mz1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4MDpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODozNy42MzUyMTQ1MTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0NTk3NjA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgS1ZNX0JPT0szU182NF9IVmAgc3BlY2lmaWNhbGx5IHRhcmdldHMgYGJvb2szc19odi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEFuZCBgS1ZNYCwgbmF0dXJhbGx5LCBpcyB0aGUgdW1icmVsbGEgY29uZmlnIGZvciBgcG93ZXJwYy5jYC4gUmlnaHQsIHNvIGBwb3dlcnBjLmNgIGlzIHBhcnQgb2YgYGNvbW1vbi1vYmpzLXlgIHdoaWNoIHRoZW4gZ2V0cyBpbmNsdWRlZCBpbiBzZXZlcmFsIG90aGVycyBsaWtlIGBrdm0tZTUwMC1vYmpzYCwgYGt2bS1lNTAwbWMtb2Jqc2AsIGBrdm0tYm9vazNzXzY0LW1vZHVsZS1vYmpzYCwgYW5kIGBrdm0tYm9vazNzXzMyLW9ianNgLiBTbywgYENPTkZJR19LVk1gIGlzIHRoZSBwcmltYXJ5LCBvdmVyYXJjaGluZyBjb25maWd1cmF0aW9uLlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgdGhpcyBwYXRjaC4gSXQncyBhZGRpbmcgYFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLYCB0byB0aGUgYEtWTWAgY29uZmlndXJhdGlvbi4gVGhhdCdzIHRoZSBrZXkgYWRkaXRpb24gaGVyZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYWRkaW5nIGEgbmV3IHNlbGVjdCBvcHRpb24uXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBpbXBhY3Qgb24gc3BlY2lmaWMgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggYWZmZWN0czpcblxuKiAgIGBrdm1wcGNfcnVuX2NvcmVgIGluIGBib29rM3NfaHYuY2BcbiogICBga3ZtcHBjX3J1bl92Y3B1YCBpbiBgYm9vazNzX2h2LmNgXG4qICAgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAgaW4gYGJvb2szc19odi5jYFxuXG5TbyB0aGUgY2hhbmdlcyBzZWVtIGZvY3VzZWQgb24gdGhlIGJvb2szc19odiBzaWRlLlxuXG5BbmQgYWxzbzpcblxuKiAgIGBrdm1wcGNfcHJlcGFyZV90b19lbnRlcmAgaW4gYHBvd2VycGMuY2BcblxuVGhpcyBuZWVkcyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkLCB0aGUgd2F5IHRoYXQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdGhyb3VnaG91dCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGNvZGUuIExldCdzIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDg6NDQuMjgxMTkyNDI3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU2Njg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1wcGNfcHJlcGFyZV90b19lbnRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTExMzU9aW50IGt2bXBwY19oYW5kbGVfZXhpdF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xNDM4LVxcdFxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTQzOTpcXHRcXHRzID0ga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIodmNwdSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xNDQwLVxcdFxcdGlmIChzIFxcdTAwM2M9IDApXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTE4MDc9c3RhdGljIGludCBrdm1wcGNfdmNwdV9ydW5fcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xODI1LVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTgyNjpcXHRyZXQgPSBrdm1wcGNfcHJlcGFyZV90b19lbnRlcih2Y3B1KTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTE4MjctXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jPTc2MD1pbnQga3ZtcHBjX3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYy03NjktXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jOjc3MDpcXHRzID0ga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIodmNwdSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jLTc3MS1cXHRpZiAocyBcXHUwMDNjPSAwKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmM9MTAxMT1pbnQga3ZtcHBjX2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV4aXRfbnIpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMtMTQwMS1cXHRpZiAoIShyIFxcdTAwMjYgUkVTVU1FX0hPU1QpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jOjE0MDI6XFx0XFx0cyA9IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHZjcHUpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYy0xNDAzLVxcdFxcdGlmIChzIFxcdTAwM2M9IDApXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz02NT1pbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03OC0gKi9cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3OTppbnQga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTgwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE1NC19XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MTU1OkVYUE9SVF9TWU1CT0xfR1BMKGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKTtcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xNTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjQ0LjM0MTc2NTc1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDIzMTY1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTS9Qb3dlclBDIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gbG9va2luZyBhdCB0aGUgY29kZSwgYGt2bXBwY19wcmVwYXJlX3RvX2VudGVyYCBpcyBhIGtleSBmdW5jdGlvbiwgdXNlZCBpbiBib3RoIGBib29rM3NfcHIuY2AgYW5kIGBib29rZS5jYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggY29kZSB0aGF0IGltcGFjdHMgdGhlIGBDT05GSUdfS1ZNX0JPT0szU182NF9QUmAsIGBDT05GSUdfS1ZNX0U1MDBWMmAsIGFuZCBgQ09ORklHX0tWTV9FNTAwTUNgIGNvbmZpZ3VyYXRpb25zLiBUaGUgY2hhbmdlcyBpbiBgYm9vazNzX2h2LmNgIGFyZSBvYnZpb3VzbHkgcmVsZXZhbnQgdG8gYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYC5cblxuU28sIHRvIGVuYWJsZSBldmVyeXRoaW5nLCBJIHNob3VsZCBmb2N1cyBvbiBgS1ZNYCBhbmQgYEtWTV9CT09LM1NfNjRfSFZgLiBgS1ZNX0JPT0szU182NF9IVmAgc3BlY2lmaWNhbGx5IHRhcmdldHMgUG93ZXJQQyBCb29rM1MgNjQtYml0IEhWLCBgS1ZNX0JPT0szU182NF9QUmAgaXMgZm9yIEJvb2szUyA2NC1iaXQgUFIsIGBLVk1fRTUwMFYyYCBpcyBmb3IgRTUwMHYyLCBhbmQgYEtWTV9FNTAwTUNgIGlzIGZvciBFNTAwTUMuXG5cbkFscmlnaHQsIGRvdWJsZS1jaGVja2luZ+KApiB5ZXMsIGVuYWJsaW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBzZWVtcyBjb3JyZWN0OyBpdCBjb3ZlcnMgdGhlIGBib29rM3NfaHYuY2AgbW9kaWZpY2F0aW9ucy4gQW5kIGBLVk1gIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhlIGJhc2UgYHBvd2VycGMuY2AgY2hhbmdlcy5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBmb2NhbCBwb2ludHMgb2YgdGhpcyBwYXRjaD8gVGhlIGNvZGUgc2VlbXMgdG8gYmUgY2hhbmdpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIHRvIHRoZSBndWVzdCwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgY29yZSBLVk0gcnVuIGxvb3AuIEJhc2VkIG9uIHRoZSBjb2RlIGNoYW5nZXMgYW5kIHRoZSBsaWtlbHkgcGF0aCwgdGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2ggYXJlOlxuXG4qICAgYGt2bXBwY19ydW5fY29yZWBcbiogICBga3ZtcHBjX3J1bl92Y3B1YFxuKiAgIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgXG4qICAgYGt2bXBwY19wcmVwYXJlX3RvX2VudGVyYFxuXG5JIHNlZSB0aGF0IGBrdm1wcGNfcnVuX2NvcmVgLCBga3ZtcHBjX3J1bl92Y3B1YCwgYW5kIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgIGFyZSBleHRyZW1lbHkgaG90IHBhdGhzIOKAkyB0aGV5J3JlIHRoZSBhY3R1YWwgdkNQVSBleGVjdXRpb24gbG9vcHMuIEJ1dCwgY3J1Y2lhbGx5LCBga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJgIGlzIGFsc28gaW4gdGhlIGxvb3AsIHdoaWNoIG1lYW5zIGl04oCZcyBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcyB3ZWxsLiBHaXZlbiB0aGF0IHRoZSBtb2RpZmljYXRpb24gaXMgZnVuY3Rpb25hbGx5IGNoYW5naW5nIHRoZSBjb3JlIEtWTSBsb2dpYyBhbmQgdGhlIGd1ZXN0IGVudHJ5IHBhdGgsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZvY3VzIG9uIHRob3NlIGZvdXIgZnVuY3Rpb25zIGFzIHRoZSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cywgYXMgdGhleSBhcmUgdGhlIG9ubHkgbW9kaWZpZWQgZnVuY3Rpb25zLlxuXG5KdXN0IG5lZWQgdG8gY29uZmlybSB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWUgdG8gd29yayB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODo1Mi4zNjQ5MzM1NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzEzMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mz1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4MDpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODo1Mi40MjAyNTI3MDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NzA2NzI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqUXVpY2sgS1ZNIElkZW50aWZpZXIgQ2hlY2sqKlxuXG5BbHJpZ2h0LCB5ZXAsIGNvbmZpcm1lZC4gYEtWTV9CT09LM1NfNjRfSFZgIGlzIHRoZSBjb3JyZWN0IGlkZW50aWZpZXIgZm9yIHRoYXQgcGFydGljdWxhciBoeXBlcnZpc29yIGNvbmZpZ3VyYXRpb24sIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBlZGdlIGNhc2VzLi4uIHdoYXQgYWJvdXQgYEtWTV9CT09LM1NfNjRfUFJgPyBOZWVkIHRvIHJlY2FsbCB3aGF0IHRoYXQgZGVzaWduYXRpb24gaXMgdXNlZCBmb3IgYW5kIGRvdWJsZS1jaGVjayBJIGhhdmVuJ3QgbWFkZSBhIHdyb25nIGFzc3VtcHRpb24gYmFzZWQgb24gaW5jb21wbGV0ZSBpbmZvcm1hdGlvbiwgYWx3YXlzIGhhdmUgdG8gbG9vayBhdCBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMuIEp1c3QgYSBtZW50YWwgY3Jvc3NjaGVjayB0byBtYWtlIGNlcnRhaW4gYWxsIHRoZSBiYXNlcyBhcmUgY292ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODo1NS42NjczMjMxODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTUyMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz04MD1jb25maWcgS1ZNX0JPT0szU182NF9IVlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAxOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMi1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDg6NTUuNzIxMjc5MzEyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTg0NDk0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFzc2Vzc2luZyBLVk0gQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjaGVjayBjb25maXJtcyBpdDogYEtWTV9CT09LM1NfNjRfUFJgIGlzIHRoZSBjb3JyZWN0IGlkZW50aWZpZXIgZm9yIHRoYXQgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBvdGhlciBzaW1pbGFyIGFyY2hpdGVjdHVyZXMuIFdoYXQgYWJvdXQgdGhlIG51YW5jZXMgb2YgYEtWTV9FNTAwVjJgIGFuZCBgS1ZNX0U1MDBNQ2A/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGRpZmZlcmVuY2VzIGluIHRoZWlyIGZlYXR1cmVzLCBvciBhcmUgdGhleSBjb21wYXRpYmxlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eSBpZiB0aGV5IHdlcmUgdG8gYmUgY29tcGFyZWQ/IFRob3NlIGFyZSBzb21lIGtleSB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGZ1cnRoZXIgaW52ZXN0aWdhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA2NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjU4LjQzOTczMTc1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4Mzc4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9FNTAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xODg9Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTk5OmNvbmZpZyBLVk1fRTUwMFYyXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIwMC1cXHRib29sIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBFNTAwdjIgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTMtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxNDpjb25maWcgS1ZNX0U1MDBNQ1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTUtXFx0Ym9vbCBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjU4LjQ5NjU3NDYwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDAyNzgzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHRoZXkncmUgcmlnaHQsIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbml0ZWx5IHRoZSBvbmVzIHRvIGVuYWJsZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBuZWVkZWQgYWxsIG9mIHRoZW0g4oCTIGBLVk1gLCBgS1ZNX0JPT0szU182NF9IVmAsIGBLVk1fQk9PSzNTXzY0X1BSYCwgYEtWTV9FNTAwVjJgLCBhbmQgYEtWTV9FNTAwTUNgLiBXYWl0LCBgS1ZNYCBpcyBhbHJlYWR5IGltcGxpY2l0bHkgc2VsZWN0ZWQsIHNvIHRoYXQncyByZWR1bmRhbnQuICBMZXQncyByZWZpbmUgdGhhdCBsaXN0LiBgS1ZNX0JPT0szU182NF9IVmAgYW5kIGBLVk1fQk9PSzNTXzY0X1BSYCBzZWVtIGxpa2UgdGhlIGVzc2VudGlhbCBvbmVzIHRvIGZvY3VzIG9uLiBBY3R1YWxseSwgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMsIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBwcm9iYWJseSB0aGUgbW9zdCBjcml0aWNhbCwgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBtYWpvcml0eSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUuIFNvLCBsZXQncyBsZWFkIHdpdGggdGhhdCwgYW5kIGFkZCBgS1ZNX0JPT0szU182NF9QUmAgYXMgd2VsbC5cblxuTm93LCBmb3IgdGhlIGtleSBmdW5jdGlvbnMuIFRoZSBwcm9tcHQgbGlzdHMgYGt2bXBwY19ydW5fY29yZWAsIGBrdm1wcGNfcnVuX3ZjcHVgLCBga3ZtaHZfcnVuX3NpbmdsZV92Y3B1YCwgYW5kIGBrdm1wcGNfcHJlcGFyZV90b19lbnRlcmAuIEhtbSwgdGhvc2UgYXJlIGRlZmluaXRlbHkgaG90IHBhdGhzLiBCdXQsIHRoZXkgYXJlICp0aGUgb25seSogZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlwiIFRoZSBxdWVzdGlvbiBpcywgYXJlICp0aGVzZSogZ2VuZXJpYz8gTm8sIEkgZG9uJ3QgdGhpbmsgc28uIFRoZXkgYXJlIEtWTSBlbnRyeSBmdW5jdGlvbnMsIGV4ZWN1dGVkIG9uICpldmVyeSogVk0gZW50cnksIGJ1dCB0aGV5J3JlIHNwZWNpZmljIHRvIEtWTSBvbiBQb3dlclBDLiBUaGV5IGFyZW4ndCB1YmlxdWl0b3VzIGtlcm5lbCBmdW5jdGlvbnMgbGlrZSBga21hbGxvY2Agb3IgYHNjaGVkdWxlYC5cblxuSWYgSSBkb24ndCBsaXN0IHRoZW0sIHdoYXQgZWxzZSBpcyB0aGVyZT8gSSBkb24ndCBzZWUgYW55IG90aGVyIGZ1bmN0aW9ucyBjaGFuZ2VkLiBJIGd1ZXNzIEkgY291bGQgbGVhdmUgdGhpcyBmdW5jdGlvbiBsaXN0IGJsYW5rIGlmIHRoZXkncmUgY29uc2lkZXJlZCB0b28gaG90LiBIb3dldmVyLCBJIHRoaW5rIHRoYXQgdGhlIHBvaW50IG9mIHRoZSBkaXJlY3Rpb25zIGFyZSB0byBwcmV2ZW50IGxpc3RpbmcgdHJ1bHkgZ2VuZXJpYyBmdW5jdGlvbnMgd2hpY2ggc2tldyB0aGUgdGVzdCBkaXN0cmlidXRpb24uIEdpdmVuIHRoYXQgdGhlc2UgYXJlIHNwZWNpZmljIEtWTSBlbnRyeSBmdW5jdGlvbnMsIEkgdGhpbmsgaXQncyBmaW5lIHRvIGluY2x1ZGUgdGhlbS5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgb25lIG1vcmUgdGltZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4NywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0OTowNS40OTkzNjA5MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTQyNTQwMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXCsuKnhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjA1LjkzODc5Mjc0N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk2Mzg5MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipBbmFseXppbmcgYHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmdgKipcblxuT2theSwgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJ5IGFuZCBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtLiBJbnN0ZWFkIG9mIGJsaW5kbHkgZGl2aW5nIGluLCBJIHNob3VsZCBwYXVzZS4gSSBuZWVkIGEgcmFwaWQgd2F5IHRvIGFzc2VzcyB0aGUgdXNlIG9mIHRoaXMgc3BlY2lmaWMgdGVybTogYHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmdgLiBXaGF0J3MgdGhlIGJlc3QgYXBwcm9hY2g/IFllcCwgYSBgZ3JlcGAgc2hvdWxkIGJlIHRoZSBtb3N0IGVmZmljaWVudCBpbml0aWFsIHByb2JlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgb3ZlcnZpZXcgb2YgKndoZXJlKiB0aGlzIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZSwgd2hpY2ggaW4gdHVybiB3aWxsIHByb3ZpZGUgdml0YWwgY29udGV4dC4gV2l0aCBncmVwLCBJIGNhbiBxdWlja2x5IHNjYW4gdGhlIHNvdXJjZSBmaWxlcyBhbmQgc2VlIHRoZSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIFRoaXMgbWV0aG9kIGlzIHRoZSBwZXJmZWN0IGZpcnN0IHN0ZXAgdG8gZ2FpbiB0aGUgZnVuZGFtZW50YWwgY29udGV4dCBuZWNlc3NhcnkgdG8gdGFrZSB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ0NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjA5LjIzNTE4MzUxNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQxMDM5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTM3NzY9c3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODUzLVxcdCAqXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzozODU0OlxcdCAqIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBpcyB0aGUgSVJRcy1kaXNhYmxlZCByZWNoZWNrIGZvclxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg1NS1cXHQgKiBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayAocmVzY2hlZHVsZSwgc2lnbmFscywgYW5kIFRJRl9OT1RJRllfUkVTVU1FXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTM4NjUtXFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6Mzg2NjpcXHRpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg2Ny1cXHQgICAgcmVjaGVja19zaWduYWxzX2FuZF9tbXUoXFx1MDAyNmNvcmVfaW5mbykpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDc0Nz1zdGF0aWMgaW50IGt2bXBwY19ydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ4MzYtXFx0XFx0XFx0a3ZtcHBjX3Zjb3JlX2Jsb2NrZWQodmMpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDgzNzpcXHRcXHR9IGVsc2UgaWYgKF9feGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00ODM4LVxcdFxcdFxcdGt2bXBwY192Y29yZV9wcmVlbXB0KHZjKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDg5MT1pbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ5NjAtXFx0ICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0OTYxOlxcdGlmICh4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgfHwgIWt2bS1cXHUwMDNlYXJjaC5tbXVfcmVhZHkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTYyLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9Nzk9aW50IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTg2LVxcdHdoaWxlICh0cnVlKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6ODc6XFx0XFx0aWYgKF9feGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtODgtXFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MDkuMzI5MjkyMDc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDgzMDE0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1vZGlmaWVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG86IGBrdm1wcGNfcnVuX2NvcmVgLCBga3ZtcHBjX3J1bl92Y3B1YCwgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAsIGFuZCBga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJgLiBUaGVzZSBhcmUgdGhlIG9uZXMgSSBuZWVkIHRvIHplcm8gaW4gb24gZm9yIHRoZSBhbmFseXNpcy4gVGhleSB3aWxsLCBvZiBjb3Vyc2UsIGJlIGxpc3RlZCBpbiBgRm9jdXNTeW1ib2xzYCB0byBtYWtlIHN1cmUgdGhleSBhcmUgZnJvbnQgYW5kIGNlbnRlci5cblxuTm93LCBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbnMgLSB3ZSdyZSBsb29raW5nIGF0IGBLVk1fQk9PSzNTXzY0X0hWYCwgYEtWTV9CT09LM1NfNjRfUFJgLCBgS1ZNX0U1MDBWMmAsIGFuZCBgS1ZNX0U1MDBNQ2AuIFRoaXMgaGVscHMgcHV0IHRoZSBmdW5jdGlvbnMgaW50byBhIHVzZWZ1bCBjb250ZXh0LiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGVzZSB0YXJnZXRzIGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5OZXh0IHN0ZXA6IGxldCdzIGdldCByZWFkeSBmb3IgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBjaGFuZ2VkLCBhbmQgaG93IHRob3NlIGNoYW5nZXMgaW1wYWN0IHRoZSBwZXJmb3JtYW5jZSBvciBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTIsIk91dHB1dFRva2VucyI6MjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjE0LjAzNzU5NjIyNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDU3NjkzOSwiRXJyb3IiOiJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NF9IViwgS1ZNX0JPT0szU182NF9QUiwgS1ZNX0U1MDBWMiwgS1ZNX0U1MDBNQyIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQk9PSzNTXzY0X0hWXCIsXG4gICAgXCJLVk1fQk9PSzNTXzY0X1BSXCIsXG4gICAgXCJLVk1fRTUwMFYyXCIsXG4gICAgXCJLVk1fRTUwME1DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX3J1bl9jb3JlXCIsXG4gICAgXCJrdm1wcGNfcnVuX3ZjcHVcIixcbiAgICBcImt2bWh2X3J1bl9zaW5nbGVfdmNwdVwiLFxuICAgIFwia3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X0hWLCBLVk1fQk9PSzNTXzY0X1BSLCBLVk1fRTUwMFYyLCBLVk1fRTUwME1DXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjE0LjE4ODE4NzI3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ1NTI4OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOlxuXG4qKkNvbmZpZyBWZXJpZmljYXRpb24gQ29uY2VybnMqKlxuXG5SaWdodCwgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgdGhlIHN5c3RlbSBzaG91bGQgYmUgb3BlcmF0aW9uYWwsIGJ1dCB0aGlzIHVuZXhwZWN0ZWQgc2l0dWF0aW9uIGluZGljYXRlcyBhIHBvdGVudGlhbCBpc3N1ZSBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJIGhhdmUgdG8gdmVyaWZ5IHNvbWV0aGluZyBiYXNpYy4gSSdtIGdldHRpbmcgYSBmZWVsaW5nIHRoYXQgdGhlcmUncyBhIHByb2JsZW0gd2l0aCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4gQXJlIHRoZXkgbm90IHdoZXJlIHRoZXkgc2hvdWxkIGJlPyBUaGF0J3Mgd2hhdCBpdCBzb3VuZHMgbGlrZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgcHJlY2lzZSBuYW1lcyBvZiB0aG9zZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBwcmVzZW50LCBhbmQgYWxzbyB3aGVyZSB0aGV5IGFyZSwgYnkgdGhlaXIgcGF0aHMuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2ssIGJ1dCBhIGNyaXRpY2FsIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MTcuOTMzNzE4NzY5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzNDcxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9CT09LM1NfNjRfSFZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYzPWNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjE4LjAzOTA3MTQ1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMyOTc4MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIENvbmZpZ3VyYXRpb24gSXNzdWUqKlxuXG5Pa2F5LCBzbyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGlzIGNvbXBsYWluaW5nIGFib3V0IG1pc3NpbmcgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFyZSB0aGUgY29uZmlnIG9wdGlvbnMgZXZlbiBwcmVzZW50IGluIHRoZSBjdXJyZW50IHRyZWU/XCIgU2VlbXMgbGlrZSBhIGJhc2ljIGNoZWNrLCBidXQgaXQncyB0aGUgZmlyc3Qgc3RlcC5cblxuV2FpdCBhIHNlY29uZOKApiBJIGp1c3QgcmFuIGEgYGdyZXBgIGFuZCwgeWVzLCB0aG9zZSBjb25maWd1cmF0aW9ucyAqYXJlKiBsaXN0ZWQgaW4gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AuIFRoYXQncyB1bmV4cGVjdGVkLiBTbywgd2h5IGlzIHRoZSB0b29sIHJlcG9ydGluZyB0aGV5IGRvbid0IGV4aXN0PyBUaW1lIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCBvbmUgbW9yZSB0aW1lLiBHb3R0YSBiZSBjZXJ0YWluIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cywgb3IgbWlzaW50ZXJwcmV0aW5nIHRoZSBvdXRwdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MjEuMzcyMDUzMDQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuICA2NDpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcXFwiXFxuICA2NTpcXHRcXHRkZXBlbmRzIG9uIFBQQ19CT09LM1NfNjRcXG4gIDY2OlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcXG4gIDY3OlxcdFxcdHNlbGVjdCBLVk1cXG4gIDY4OlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFIGlmICFLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuICA2OTpcXHRcXHRzZWxlY3QgUFBDXzY0U19IQVNIX01NVVxcbiAgNzA6XFx0XFx0c2VsZWN0IFNQQVBSX1RDRV9JT01NVSBpZiBJT01NVV9TVVBQT1JUIFxcdTAwMjZcXHUwMDI2IChQUENfUFNFUklFUyB8fCBQUENfUE9XRVJOVilcXG4gIDcxOlxcdFxcdGhlbHBcXG4gIDcyOlxcdFxcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGFuZCBib29rM3NfMzIgZ3Vlc3Qga2VybmVsc1xcbiAgNzM6XFx0XFx0ICBpbiB2aXJ0dWFsIG1hY2hpbmVzIG9uIGJvb2szc182NCBob3N0IHByb2Nlc3NvcnMuXFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNzY6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbiAgODE6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NCBcXHUwMDI2XFx1MDAyNiBQUENfUE9XRVJOVlxcbiAgODM6XFx0XFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG4gIDg0OlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BNVVxcbiAgODU6XFx0XFx0c2VsZWN0IENNQVxcbiAgODY6XFx0XFx0aGVscFxcbiAgODc6XFx0XFx0ICBTdXBwb3J0IHJ1bm5pbmcgdW5tb2RpZmllZCBib29rM3NfNjQgZ3Vlc3Qga2VybmVscyBpblxcbiAgODg6XFx0XFx0ICB2aXJ0dWFsIG1hY2hpbmVzIG9uIFBPV0VSNyBhbmQgbmV3ZXIgcHJvY2Vzc29ycyB0aGF0IGhhdmVcXG4gIDg5OlxcdFxcdCAgaHlwZXJ2aXNvciBtb2RlIGF2YWlsYWJsZSB0byB0aGUgaG9zdC5cXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgS1ZNIHdpbGwgdXNlIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvblxcbiAgOTI6XFx0XFx0ICBmYWNpbGl0aWVzIG9mIFBPV0VSNyAoYW5kIGxhdGVyKSBwcm9jZXNzb3JzLCBtZWFuaW5nIHRoYXRcXG4gIDkzOlxcdFxcdCAgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMgd2lsbCBydW4gYXQgZnVsbCBoYXJkd2FyZSBzcGVlZFxcbiAgOTQ6XFx0XFx0ICB1c2luZyBzdXBlcnZpc29yIGFuZCB1c2VyIG1vZGVzLiAgSG93ZXZlciwgdGhpcyBhbHNvIG1lYW5zXFxuICA5NTpcXHRcXHQgIHRoYXQgS1ZNIGlzIG5vdCB1c2FibGUgdW5kZXIgUG93ZXJWTSAocEh5cCksIGlzIG9ubHkgdXNhYmxlXFxuICA5NjpcXHRcXHQgIG9uIFBPV0VSNyBvciBsYXRlciBwcm9jZXNzb3JzLCBhbmQgY2Fubm90IGVtdWxhdGUgYVxcbiAgOTc6XFx0XFx0ICBkaWZmZXJlbnQgcHJvY2Vzc29yIGZyb20gdGhlIGhvc3QgcHJvY2Vzc29yLlxcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwMDpcXHRcXG4gMTAxOlxcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuIDEwMjpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4gMTAzOlxcdFxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NFxcbiAxMDQ6XFx0XFx0ZGVwZW5kcyBvbiAhQ09OVEVYVF9UUkFDS0lOR19VU0VSXFxuIDEwNTpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbiAxMDY6XFx0XFx0aGVscFxcbiAxMDc6XFx0XFx0ICBTdXBwb3J0IHJ1bm5pbmcgZ3Vlc3Qga2VybmVscyBpbiB2aXJ0dWFsIG1hY2hpbmVzIG9uIHByb2Nlc3NvcnNcXG4gMTA4OlxcdFxcdCAgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gdGhlIGhvc3QsIGJ5IHJ1bm5pbmcgdGhlXFxuIDEwOTpcXHRcXHQgIGd1ZXN0IGluIHVzZXIgbW9kZSAocHJvYmxlbSBzdGF0ZSkgYW5kIGVtdWxhdGluZyBhbGxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MjEuMzcyMjI3MTk3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mjc0MDg4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIENvbmZpZ3VyYXRpb24gSW5jb25zaXN0ZW5jaWVzKipcblxuT2theSwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgKnNob3VsZCogYmUgcHJlc2VudCDigJMgSSdtIGNlcnRhaW4gb2YgaXQuIFNvLCB3aHkgZGlkIHRoaXMgZGFybiB0b29sIHJlcG9ydCB0aGF0IHRoZXkncmUgbWlzc2luZz8gSG1tLCBjb3VsZCBpdCBiZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaXNzdWU/IE1heWJlIHRoZSB0b29sIGlzIHJ1bm5pbmcgY2hlY2tzIGFnYWluc3QgeDg2LCB3aGlsZSBteSBzZXR1cCBpcyBkaWZmZXJlbnQuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGhpbmtpbmcuIExldCdzIGJhY2t0cmFjay4uLiBUaGUgdG9vbCBpcyBzZWFyY2hpbmcgd2l0aGluIHRoZSBrZXJuZWwgdHJlZSBpdHNlbGYsIHJpZ2h0PyBPa2F5LCBnb3QgaXQuXG5cbkluc3RlYWQgb2YgZmlnaHRpbmcgd2l0aCB0aGUgZXhpc3RpbmcgdG9vbCwgbWF5YmUgSSBjYW4gc2ltcGxpZnkgdGhpbmdzLiBDYW4gSSBzaW1wbHkgdXNlIGBLVk1fQk9PSzNTXzY0YCBkaXJlY3RseT8gVGhhdCB3b3VsZCBieXBhc3MgdGhlIHdob2xlIGNvbmZpZyBleGlzdGVuY2UgY2hlY2ssIGFuZCBmb2N1cyBvbiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IEknbSBhZnRlci4gTGV0J3MgdHJ5IHRoYXQgYXBwcm9hY2ggYW5kIHNlZSB3aGF0IGhhcHBlbnMuIFRoaXMgZmVlbHMgbGlrZSB0aGUgcmlnaHQgdHJhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDc2LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MjUuODk5NjM4NDQzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTY0NjAzLCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0IiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9CT09LM1NfNjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfcnVuX2NvcmVcIixcbiAgICBcImt2bXBwY19ydW5fdmNwdVwiLFxuICAgIFwia3ZtaHZfcnVuX3NpbmdsZV92Y3B1XCIsXG4gICAgXCJrdm1wcGNfcHJlcGFyZV90b19lbnRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSB2Q1BVIHJ1biBsb29wIG9uIFBvd2VyUEMgdG8gdXNlIHRoZSBnZW5lcmljIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBhbmQga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG9wZW4tY29kZWQgbmVlZF9yZXNjaGVkKCkgYW5kIHNpZ25hbF9wZW5kaW5nKCkgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBwZW5kaW5nIHdvcmsgKGxpa2Ugc2lnbmFscyBhbmQgcmVzY2hlZHVsaW5nKSBpcyBoYW5kbGVkIGJlZm9yZSBlbnRlcmluZyB0aGUgZ3Vlc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjRcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MjYuMDMzODEzOTg2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTQ0OTU3MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCB0aGVzZSB3ZXJlIG15IG93biB0aG91Z2h0czpcblxuKipEZWJ1Z2dpbmcgYSBTdHViYm9ybiBLVk0gSXNzdWUqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoaXMgcmlnaHQ/IEkgd2FzIGp1c3QgdHJ5aW5nIHRvIHVzZSBgS1ZNX0JPT0szU182NGAsIGFuZCBub3cgSSdtIHNlZWluZyB0aGF0IGl0ICphbHNvKiBkb2Vzbid0IHNlZW0gdG8gYmUgZGVmaW5lZD8gVGhpcyBpcyBzdGFydGluZyB0byBzbWVsbCBsaWtlIGEgZnVuZGFtZW50YWwgcHJvYmxlbSB3aXRoIGhvdyB0aGUgS1ZNIGRlZmluaXRpb25zIGFyZSBzZXQgdXAuIFRpbWUgdG8gcmV0cmFjZSBteSBzdGVwcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBpcyBnb2luZyB3cm9uZy4gTWF5YmUgSSd2ZSBnb3QgYSB0eXBvLCBvciBJJ20gdXNpbmcgYW4gb3V0ZGF0ZWQgdmVyc2lvbiBvZiBzb21ldGhpbmcuXG5cbkdpdmVuIHRoaXMsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSB0b29sJ3Mgc291cmNlIGNvZGUsIGp1c3QgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGltcGxlbWVudGVkIGFsaWducyB3aXRoIHJlYWxpdHkuIEFsdGVybmF0aXZlbHksIGlmIHRoYXQgdGFrZXMgdG9vIGxvbmcsIGl0IG1pZ2h0IGp1c3QgYmUgcXVpY2tlciB0byBmYWxsIGJhY2sgdG8gdGhlIGdlbmVyaWMgYEtWTWAgZGVmaW5pdGlvbiBmb3Igbm93LCBhc3N1bWluZyBpdCB3aWxsIGFjY29tcGxpc2ggdGhlIHRhc2sgYXQgaGFuZC4gTmVlZCB0byBnZXQgdGhpcyByZXNvbHZlZCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzEsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjMwLjAyODMxMTg0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTc4MjgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX3J1bl9jb3JlXCIsXG4gICAgXCJrdm1wcGNfcnVuX3ZjcHVcIixcbiAgICBcImt2bWh2X3J1bl9zaW5nbGVfdmNwdVwiLFxuICAgIFwia3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19ydW5fY29yZVwiLFxuICAgIFwia3ZtcHBjX3J1bl92Y3B1XCIsXG4gICAgXCJrdm1odl9ydW5fc2luZ2xlX3ZjcHVcIixcbiAgICBcImt2bXBwY19wcmVwYXJlX3RvX2VudGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIHZDUFUgcnVuIGxvb3Agb24gUG93ZXJQQyB0byB1c2UgdGhlIGdlbmVyaWMgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGFuZCBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygb3Blbi1jb2RlZCBuZWVkX3Jlc2NoZWQoKSBhbmQgc2lnbmFsX3BlbmRpbmcoKSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHBlbmRpbmcgd29yayAobGlrZSBzaWduYWxzIGFuZCByZXNjaGVkdWxpbmcpIGlzIGhhbmRsZWQgYmVmb3JlIGVudGVyaW5nIHRoZSBndWVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjspc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 01:34:48 +0000 UTC FinishedAt: 2026-07-02 01:49:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "266984f2-b664-4afb-a82b-b064f675b4ed" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvmppc_run_core", "kvmppc_run_vcpu", "kvmhv_run_single_vcpu", "kvmppc_prepare_to_enter" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19ydW5fY29yZSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfcnVuX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtaHZfcnVuX3NpbmdsZV92Y3B1JiMzNDssCiAgICAmIzM0O2t2bXBwY19wcmVwYXJlX3RvX2VudGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSB2Q1BVIHJ1biBsb29wIG9uIFBvd2VyUEMgdG8gdXNlIHRoZSBnZW5lcmljIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBhbmQga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG9wZW4tY29kZWQgbmVlZF9yZXNjaGVkKCkgYW5kIHNpZ25hbF9wZW5kaW5nKCkgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBwZW5kaW5nIHdvcmsgKGxpa2Ugc2lnbmFscyBhbmQgcmVzY2hlZHVsaW5nKSBpcyBoYW5kbGVkIGJlZm9yZSBlbnRlcmluZyB0aGUgZ3Vlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NDU0OWU1MDUzMTU3MDNmZDNmMjc1MjVmZmU3YzdiYzM4OGY2NDU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMTo0ODoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcbmluZGV4IDlhMGQxYzFhY2E2YzgwLi5iNmJjMmZjODZkY2E2NyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEAgY29uZmlnIEtWTVxuIFx0c2VsZWN0IEtWTV9DT01NT05cbiBcdHNlbGVjdCBLVk1fVkZJT1xuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiYjNDM7XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiBcbiBjb25maWcgS1ZNX0JPT0szU19IQU5ETEVSXG4gXHRib29sXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbmluZGV4IDYxZGJlZWEzMTdmM2I3Li5hMWIyMDc3NTYxYmI1YSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcbkBAIC0zODUwLDEwICYjNDM7Mzg1MCwyMCBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBrdm1wcGNfcnVuX2NvcmUoc3RydWN0IGt2bXBwY192Y29yZSAqdmMpXG4gXHQgKiBhbmQgcmV0dXJuIHdpdGhvdXQgZ29pbmcgaW50byB0aGUgZ3Vlc3QocykuXG4gXHQgKiBJZiB0aGUgbW11X3JlYWR5IGZsYWcgaGFzIGJlZW4gY2xlYXJlZCwgZG9uJiMzOTt0IGdvIGludG8gdGhlXG4gXHQgKiBndWVzdCBiZWNhdXNlIHRoYXQgbWVhbnMgYSBIUFQgcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBpcyB0aGUgSVJRcy1kaXNhYmxlZCByZWNoZWNrIGZvclxuJiM0MztcdCAqIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIChyZXNjaGVkdWxlLCBzaWduYWxzLCBhbmQgVElGX05PVElGWV9SRVNVTUVcbiYjNDM7XHQgKiB0YXNrX3dvcmsgc3VjaCBhcyB0aGUgZGVmZXJyZWQgQ0ZTIHRocm90dGxlKS4gSXQgaXMgdGhlIHByZS1QT1dFUjlcbiYjNDM7XHQgKiBhbmFsb2cgb2YgdGhlIGZpbmFsIGdhdGUgaW4ga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KCksIGFuZCBhIHN1cGVyc2V0XG4mIzQzO1x0ICogb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjazogaXQgY2F0Y2hlcyB3b3JrIHRoYXQgcmFjZWQgaW4gYWZ0ZXJcbiYjNDM7XHQgKiB0aGUgZHJhaW4gaW4ga3ZtcHBjX3J1bl92Y3B1KCksIHNvIGEgQ1BVLWJvdW5kIHZDUFUgaXMgdGhyb3R0bGVkIGhlcmVcbiYjNDM7XHQgKiBpbnN0ZWFkIG9mIHJ1bm5pbmcgb25lIG1vcmUgZ3Vlc3QgZGlzcGF0Y2ggcGFzdCBpdHMgcXVvdGEuIElSUXMgYXJlXG4mIzQzO1x0ICogaGFyZC1kaXNhYmxlZCBqdXN0IGFib3ZlLCBzbyB0aGUgbm9uLV9fIHZhcmlhbnQgKHdoaWNoIGFzc2VydHMgdGhhdClcbiYjNDM7XHQgKiBpcyB0aGUgY29ycmVjdCBvbmUuXG4gXHQgKi9cbiBcdGxvY2FsX2lycV9kaXNhYmxlKCk7XG4gXHRoYXJkX2lycV9kaXNhYmxlKCk7XG4tXHRpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IG5lZWRfcmVzY2hlZCgpIHx8XG4mIzQzO1x0aWYgKGxhenlfaXJxX3BlbmRpbmcoKSB8fCB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgfHxcbiBcdCAgICByZWNoZWNrX3NpZ25hbHNfYW5kX21tdShcdTAwMjZjb3JlX2luZm8pKSB7XG4gXHRcdGxvY2FsX2lycV9lbmFibGUoKTtcbiBcdFx0dmMtXHUwMDNldmNvcmVfc3RhdGUgPSBWQ09SRV9JTkFDVElWRTtcbkBAIC00ODI0LDEwICYjNDM7NDgzNCwyNCBAQCBzdGF0aWMgaW50IGt2bXBwY19ydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZjLVx1MDAzZXJ1bm5lciA9IHZjcHU7XG4gXHRcdGlmIChuX2NlZGVkID09IHZjLVx1MDAzZW5fcnVubmFibGUpIHtcbiBcdFx0XHRrdm1wcGNfdmNvcmVfYmxvY2tlZCh2Yyk7XG4tXHRcdH0gZWxzZSBpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcbiBcdFx0XHRrdm1wcGNfdmNvcmVfcHJlZW1wdCh2Yyk7XG4tXHRcdFx0LyogTGV0IHNvbWV0aGluZyBlbHNlIHJ1biAqL1xuLVx0XHRcdGNvbmRfcmVzY2hlZF9sb2NrKFx1MDAyNnZjLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBMZXQgc29tZXRoaW5nIGVsc2UgcnVuLCBhbmQgcnVuIHBlbmRpbmcgZ3Vlc3QtbW9kZVxuJiM0MztcdFx0XHQgKiB3b3JrIChyZXNjaGVkdWxlLCBhbmQgVElGX05PVElGWV9SRVNVTUUgdGFza193b3JrIHN1Y2hcbiYjNDM7XHRcdFx0ICogYXMgdGhlIGRlZmVycmVkIENGUyB0aHJvdHRsZSkgYmVmb3JlIHdlIHdvdWxkIHJlLWVudGVyXG4mIzQzO1x0XHRcdCAqIHRoZSBndWVzdCwgc28gYSBDUFUtYm91bmQgdkNQVSBpcyBhY3R1YWxseSB0aHJvdHRsZWRcbiYjNDM7XHRcdFx0ICogaGVyZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgcGFzdCBpdHMgcXVvdGEuIFRoaXMgaXMgYVxuJiM0MztcdFx0XHQgKiBzdXBlcnNldCBvZiB0aGUgb2xkIG5lZWRfcmVzY2hlZCgpIGNoZWNrLiBVc2UgdGhlIHJhd1xuJiM0MztcdFx0XHQgKiBoZWxwZXIsIG5vdCB0aGUga3ZtXyB3cmFwcGVyOiBzaWduYWxzIChLVk1fRVhJVF9JTlRSXG4mIzQzO1x0XHRcdCAqIGFuZCB0aGUgc2lnbmFsX2V4aXRzIHN0YXQpIGFyZSBhY2NvdW50ZWQgYnkgdGhpcyBwYXRoJiMzOTtzXG4mIzQzO1x0XHRcdCAqIGV4aXN0aW5nIGhhbmRsaW5nIGJlbG93LCBzbyBnb2luZyB0aHJvdWdoIHRoZSB3cmFwcGVyXG4mIzQzO1x0XHRcdCAqIGhlcmUgd291bGQgZG91YmxlLWNvdW50IHRoZW0uIFRoZSBoZWxwZXIgbWF5IHNjaGVkdWxlKCksXG4mIzQzO1x0XHRcdCAqIHNvIHRoZSB2Y29yZSBsb2NrIGlzIGRyb3BwZWQgYXJvdW5kIGl0LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmMtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdHhmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpO1xuJiM0MztcdFx0XHRzcGluX2xvY2soXHUwMDI2dmMtXHUwMDNlbG9jayk7XG4gXHRcdFx0aWYgKHZjLVx1MDAzZXZjb3JlX3N0YXRlID09IFZDT1JFX1BSRUVNUFQpXG4gXHRcdFx0XHRrdm1wcGNfdmNvcmVfZW5kX3ByZWVtcHQodmMpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTQ4OTksOCAmIzQzOzQ5MjMsMjEgQEAgaW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAobmVlZF9yZXNjaGVkKCkpXG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUnVuIHBlbmRpbmcgd29yayBiZWZvcmUgKHJlLSllbnRlcmluZyB0aGUgZ3Vlc3QsIG1vc3QgaW1wb3J0YW50bHlcbiYjNDM7XHQgKiB0YXNrX3dvcmsgcXVldWVkIHZpYSBUV0FfUkVTVU1FIChlLmcuIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoXG4mIzQzO1x0ICogdGhyb3R0bGUsIHdoaWNoIG9ubHkgc2V0cyBUSUZfTk9USUZZX1JFU1VNRSkuIFdpdGhvdXQgdGhpcyBhIENQVS1ib3VuZFxuJiM0MztcdCAqIHZDUFUgdGhhdCBrZWVwcyByZXR1cm5pbmcgUkVTVU1FX0dVRVNUIG5ldmVyIHJlYWNoZXMgYW4gZXhpdC10by11c2VyXG4mIzQzO1x0ICogcG9pbnQsIHNvIHRoZSB0aHJvdHRsZSBpcyBuZXZlciBlbmZvcmNlZCBhbmQgdGhlIHRhc2sgcnVucyBmYXIgYmV5b25kXG4mIzQzO1x0ICogaXRzIHF1b3RhLiBUaGUgaGVscGVyIGFsc28gaGFuZGxlcyByZXNjaGVkdWxlIGFuZCBzaWduYWxzLCByZXBsYWNpbmdcbiYjNDM7XHQgKiB0aGUgY29uZF9yZXNjaGVkKCkgdGhhdCB3YXMgaGVyZS4gSXQgbWF5IHNjaGVkdWxlKCksIHNvIGl0IHJ1bnMgYmVmb3JlXG4mIzQzO1x0ICogcHJlZW1wdGlvbiBhbmQgSVJRcyBhcmUgZGlzYWJsZWQsIHdpdGggbm8gdmNvcmUvS1ZNIGxvY2tzIGhlbGQuIFRoaXNcbiYjNDM7XHQgKiBpcyB0aGUgcGVyLXJlZW50cnkgc2l0ZSBzaGFyZWQgYnkgdGhlIGJhcmUtbWV0YWwgYW5kIHBzZXJpZXMgKG5lc3RlZClcbiYjNDM7XHQgKiBwYXRocywgc28gYm90aCBhcmUgY292ZXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyID0ga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yayh2Y3B1KTtcbiYjNDM7XHRpZiAocilcdC8qIC1FSU5UUjogc2lnbmFsIHBlbmRpbmcsIGV4aXQgdG8gdXNlcnNwYWNlIChLVk1fRVhJVF9JTlRSKSAqL1xuJiM0MztcdFx0cmV0dXJuIHI7XG4gXG4gXHRrdm1wcGNfdXBkYXRlX3ZwYXModmNwdSk7XG4gXG5AQCAtNDkxNCw5ICYjNDM7NDk1MSwxNCBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guc3RhdGUgPSBLVk1QUENfVkNQVV9SVU5OQUJMRTtcbiBcbi1cdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbi1cdFx0Z290byBzaWdwZW5kO1xuLVx0aWYgKG5lZWRfcmVzY2hlZCgpIHx8ICFrdm0tXHUwMDNlYXJjaC5tbXVfcmVhZHkpXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGaW5hbCBJUlFzLWRpc2FibGVkIGNoZWNrIGZvciBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayBvciBhbiBNTVUgdGhhdFxuJiM0MztcdCAqIGlzIG5vdCByZWFkeS4gSVJRcyBhcmUgZGlzYWJsZWQgaGVyZSwgc28gYmFpbCB0byB0aGUgb3V0ZXIgbG9vcCxcbiYjNDM7XHQgKiB3aGljaCByZS1lbnRlcnMgYW5kIGhhbmRsZXMgdGhlIHBlbmRpbmcgd29yayB2aWFcbiYjNDM7XHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgYWJvdmUgKGV4aXRpbmcgd2l0aCAtRUlOVFIgb24gYVxuJiM0MztcdCAqIHNpZ25hbCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fCAha3ZtLVx1MDAzZWFyY2gubW11X3JlYWR5KVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHZjcHUtXHUwMDNlY3B1ID0gcGNwdTtcbkBAIC01MDY4LDEwICYjNDM7NTExMCw2IEBAIGludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCxcbiBcbiBcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2gucmV0O1xuIFxuLSBzaWdwZW5kOlxuLVx0dmNwdS1cdTAwM2VzdGF0LnNpZ25hbF9leGl0cyYjNDM7JiM0Mzs7XG4tXHRydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnJldCA9IC1FSU5UUjtcbiAgb3V0OlxuIFx0dmNwdS1cdTAwM2VjcHUgPSAtMTtcbiBcdHZjcHUtXHUwMDNlYXJjaC50aHJlYWRfY3B1ID0gLTE7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuaW5kZXggMDAzMDIzOTlmYzM3YjQuLmZmMWE5YThkZTVlMGE0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5AQCAtODQsMjAgJiM0Mzs4NCwzNiBAQCBpbnQga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xuIFxuIFx0d2hpbGUgKHRydWUpIHtcbi1cdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4mIzQzO1x0XHRpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogSGFuZGxlIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIGJlZm9yZSBlbnRlcmluZyB0aGVcbiYjNDM7XHRcdFx0ICogZ3Vlc3Q6IHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRVxuJiM0MztcdFx0XHQgKiB0YXNrX3dvcmsgc3VjaCBhcyB0aGUgZGVmZXJyZWQgQ0ZTIGJhbmR3aWR0aCB0aHJvdHRsZS5cbiYjNDM7XHRcdFx0ICogVGhlIGhlbHBlciBtdXN0IHJ1biB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgbWF5XG4mIzQzO1x0XHRcdCAqIHNjaGVkdWxlKCkuIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgb3Blbi1jb2RlZFxuJiM0MztcdFx0XHQgKiBuZWVkX3Jlc2NoZWQoKS9zaWduYWxfcGVuZGluZygpIGNoZWNrcyBpdCByZXBsYWNlcy4gT25cbiYjNDM7XHRcdFx0ICogYSBwZW5kaW5nIHNpZ25hbCBpdCByZXR1cm5zIC1FSU5UUiBhZnRlclxuJiM0MztcdFx0XHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgaGFzIHNldFxuJiM0MztcdFx0XHQgKiBydW4tXHUwMDNlZXhpdF9yZWFzb24gKEtWTV9FWElUX0lOVFIpIGFuZCBidW1wZWRcbiYjNDM7XHRcdFx0ICogdmNwdS1cdTAwM2VzdGF0LnNpZ25hbF9leGl0cywgc28ganVzdCByZXR1cm4gdG8gdXNlcnNwYWNlLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0XHRcdHIgPSBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKHZjcHUpO1xuIFx0XHRcdGhhcmRfaXJxX2Rpc2FibGUoKTtcbiYjNDM7XHRcdFx0aWYgKHIpIHtcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIC1FSU5UUjogdGhlIGdlbmVyaWMgaGVscGVyIGRvZXMgbm90IHNldCB0aGVcbiYjNDM7XHRcdFx0XHQgKiBleGl0IHR5cGUsIHNvIHJlY29yZCBpdCBoZXJlIGZvciB0aGUgRTUwMFxuJiM0MztcdFx0XHRcdCAqIENPTkZJR19LVk1fRVhJVF9USU1JTkcgaGlzdG9ncmFtIChhIG5vLW9wXG4mIzQzO1x0XHRcdFx0ICogb3RoZXJ3aXNlKS4gT25seSB0aGUgZXhpdCB0eXBlIGlzIHNldDtcbiYjNDM7XHRcdFx0XHQgKiBzaWduYWxfZXhpdHMgd2FzIGFscmVhZHkgYWNjb3VudGVkIGFib3ZlLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIFNJR05BTF9FWElUUyk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbi1cdFx0XHRrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIFNJR05BTF9FWElUUyk7XG4tXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSO1xuLVx0XHRcdHIgPSAtRUlOVFI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbiBcdFx0dmNwdS1cdTAwM2Vtb2RlID0gSU5fR1VFU1RfTU9ERTtcbiBcbiBcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1wcGNfcnVuX2NvcmUmIzM0OywKICAgICYjMzQ7a3ZtcHBjX3J1bl92Y3B1JiMzNDssCiAgICAmIzM0O2t2bWh2X3J1bl9zaW5nbGVfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfcHJlcGFyZV90b19lbnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NDU0OWU1MDUzMTU3MDNmZDNmMjc1MjVmZmU3YzdiYzM4OGY2NDU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAwMTo0ODoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwppbmRleCA5YTBkMWMxYWNhNmM4MC4uYjZiYzJmYzg2ZGNhNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKQEAgLTIyLDYgJiM0MzsyMiw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgS1ZNX0NPTU1PTgogCXNlbGVjdCBLVk1fVkZJTwogCXNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTCiYjNDM7CXNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SSwogCiBjb25maWcgS1ZNX0JPT0szU19IQU5ETEVSCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKaW5kZXggNjFkYmVlYTMxN2YzYjcuLmExYjIwNzc1NjFiYjVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKQEAgLTM4NTAsMTAgJiM0MzszODUwLDIwIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGt2bXBwY19ydW5fY29yZShzdHJ1Y3Qga3ZtcHBjX3Zjb3JlICp2YykKIAkgKiBhbmQgcmV0dXJuIHdpdGhvdXQgZ29pbmcgaW50byB0aGUgZ3Vlc3QocykuCiAJICogSWYgdGhlIG1tdV9yZWFkeSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQsIGRvbiYjMzk7dCBnbyBpbnRvIHRoZQogCSAqIGd1ZXN0IGJlY2F1c2UgdGhhdCBtZWFucyBhIEhQVCByZXNpemUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLgomIzQzOwkgKgomIzQzOwkgKiB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgaXMgdGhlIElSUXMtZGlzYWJsZWQgcmVjaGVjayBmb3IKJiM0MzsJICogcGVuZGluZyBndWVzdC1tb2RlIHdvcmsgKHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRQomIzQzOwkgKiB0YXNrX3dvcmsgc3VjaCBhcyB0aGUgZGVmZXJyZWQgQ0ZTIHRocm90dGxlKS4gSXQgaXMgdGhlIHByZS1QT1dFUjkKJiM0MzsJICogYW5hbG9nIG9mIHRoZSBmaW5hbCBnYXRlIGluIGt2bWh2X3J1bl9zaW5nbGVfdmNwdSgpLCBhbmQgYSBzdXBlcnNldAomIzQzOwkgKiBvZiB0aGUgb2xkIG5lZWRfcmVzY2hlZCgpIGNoZWNrOiBpdCBjYXRjaGVzIHdvcmsgdGhhdCByYWNlZCBpbiBhZnRlcgomIzQzOwkgKiB0aGUgZHJhaW4gaW4ga3ZtcHBjX3J1bl92Y3B1KCksIHNvIGEgQ1BVLWJvdW5kIHZDUFUgaXMgdGhyb3R0bGVkIGhlcmUKJiM0MzsJICogaW5zdGVhZCBvZiBydW5uaW5nIG9uZSBtb3JlIGd1ZXN0IGRpc3BhdGNoIHBhc3QgaXRzIHF1b3RhLiBJUlFzIGFyZQomIzQzOwkgKiBoYXJkLWRpc2FibGVkIGp1c3QgYWJvdmUsIHNvIHRoZSBub24tX18gdmFyaWFudCAod2hpY2ggYXNzZXJ0cyB0aGF0KQomIzQzOwkgKiBpcyB0aGUgY29ycmVjdCBvbmUuCiAJICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAloYXJkX2lycV9kaXNhYmxlKCk7Ci0JaWYgKGxhenlfaXJxX3BlbmRpbmcoKSB8fCBuZWVkX3Jlc2NoZWQoKSB8fAomIzQzOwlpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fAogCSAgICByZWNoZWNrX3NpZ25hbHNfYW5kX21tdSgmYW1wO2NvcmVfaW5mbykpIHsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQl2Yy0mZ3Q7dmNvcmVfc3RhdGUgPSBWQ09SRV9JTkFDVElWRTsKQEAgLTQ4MjQsMTAgJiM0Mzs0ODM0LDI0IEBAIHN0YXRpYyBpbnQga3ZtcHBjX3J1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdmMtJmd0O3J1bm5lciA9IHZjcHU7CiAJCWlmIChuX2NlZGVkID09IHZjLSZndDtuX3J1bm5hYmxlKSB7CiAJCQlrdm1wcGNfdmNvcmVfYmxvY2tlZCh2Yyk7Ci0JCX0gZWxzZSBpZiAobmVlZF9yZXNjaGVkKCkpIHsKJiM0MzsJCX0gZWxzZSBpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHsKIAkJCWt2bXBwY192Y29yZV9wcmVlbXB0KHZjKTsKLQkJCS8qIExldCBzb21ldGhpbmcgZWxzZSBydW4gKi8KLQkJCWNvbmRfcmVzY2hlZF9sb2NrKCZhbXA7dmMtJmd0O2xvY2spOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTGV0IHNvbWV0aGluZyBlbHNlIHJ1biwgYW5kIHJ1biBwZW5kaW5nIGd1ZXN0LW1vZGUKJiM0MzsJCQkgKiB3b3JrIChyZXNjaGVkdWxlLCBhbmQgVElGX05PVElGWV9SRVNVTUUgdGFza193b3JrIHN1Y2gKJiM0MzsJCQkgKiBhcyB0aGUgZGVmZXJyZWQgQ0ZTIHRocm90dGxlKSBiZWZvcmUgd2Ugd291bGQgcmUtZW50ZXIKJiM0MzsJCQkgKiB0aGUgZ3Vlc3QsIHNvIGEgQ1BVLWJvdW5kIHZDUFUgaXMgYWN0dWFsbHkgdGhyb3R0bGVkCiYjNDM7CQkJICogaGVyZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgcGFzdCBpdHMgcXVvdGEuIFRoaXMgaXMgYQomIzQzOwkJCSAqIHN1cGVyc2V0IG9mIHRoZSBvbGQgbmVlZF9yZXNjaGVkKCkgY2hlY2suIFVzZSB0aGUgcmF3CiYjNDM7CQkJICogaGVscGVyLCBub3QgdGhlIGt2bV8gd3JhcHBlcjogc2lnbmFscyAoS1ZNX0VYSVRfSU5UUgomIzQzOwkJCSAqIGFuZCB0aGUgc2lnbmFsX2V4aXRzIHN0YXQpIGFyZSBhY2NvdW50ZWQgYnkgdGhpcyBwYXRoJiMzOTtzCiYjNDM7CQkJICogZXhpc3RpbmcgaGFuZGxpbmcgYmVsb3csIHNvIGdvaW5nIHRocm91Z2ggdGhlIHdyYXBwZXIKJiM0MzsJCQkgKiBoZXJlIHdvdWxkIGRvdWJsZS1jb3VudCB0aGVtLiBUaGUgaGVscGVyIG1heSBzY2hlZHVsZSgpLAomIzQzOwkJCSAqIHNvIHRoZSB2Y29yZSBsb2NrIGlzIGRyb3BwZWQgYXJvdW5kIGl0LgomIzQzOwkJCSAqLwomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7dmMtJmd0O2xvY2spOwomIzQzOwkJCXhmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpOwomIzQzOwkJCXNwaW5fbG9jaygmYW1wO3ZjLSZndDtsb2NrKTsKIAkJCWlmICh2Yy0mZ3Q7dmNvcmVfc3RhdGUgPT0gVkNPUkVfUFJFRU1QVCkKIAkJCQlrdm1wcGNfdmNvcmVfZW5kX3ByZWVtcHQodmMpOwogCQl9IGVsc2UgewpAQCAtNDg5OSw4ICYjNDM7NDkyMywyMSBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsCiAJCX0KIAl9CiAKLQlpZiAobmVlZF9yZXNjaGVkKCkpCi0JCWNvbmRfcmVzY2hlZCgpOwomIzQzOwkvKgomIzQzOwkgKiBSdW4gcGVuZGluZyB3b3JrIGJlZm9yZSAocmUtKWVudGVyaW5nIHRoZSBndWVzdCwgbW9zdCBpbXBvcnRhbnRseQomIzQzOwkgKiB0YXNrX3dvcmsgcXVldWVkIHZpYSBUV0FfUkVTVU1FIChlLmcuIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoCiYjNDM7CSAqIHRocm90dGxlLCB3aGljaCBvbmx5IHNldHMgVElGX05PVElGWV9SRVNVTUUpLiBXaXRob3V0IHRoaXMgYSBDUFUtYm91bmQKJiM0MzsJICogdkNQVSB0aGF0IGtlZXBzIHJldHVybmluZyBSRVNVTUVfR1VFU1QgbmV2ZXIgcmVhY2hlcyBhbiBleGl0LXRvLXVzZXIKJiM0MzsJICogcG9pbnQsIHNvIHRoZSB0aHJvdHRsZSBpcyBuZXZlciBlbmZvcmNlZCBhbmQgdGhlIHRhc2sgcnVucyBmYXIgYmV5b25kCiYjNDM7CSAqIGl0cyBxdW90YS4gVGhlIGhlbHBlciBhbHNvIGhhbmRsZXMgcmVzY2hlZHVsZSBhbmQgc2lnbmFscywgcmVwbGFjaW5nCiYjNDM7CSAqIHRoZSBjb25kX3Jlc2NoZWQoKSB0aGF0IHdhcyBoZXJlLiBJdCBtYXkgc2NoZWR1bGUoKSwgc28gaXQgcnVucyBiZWZvcmUKJiM0MzsJICogcHJlZW1wdGlvbiBhbmQgSVJRcyBhcmUgZGlzYWJsZWQsIHdpdGggbm8gdmNvcmUvS1ZNIGxvY2tzIGhlbGQuIFRoaXMKJiM0MzsJICogaXMgdGhlIHBlci1yZWVudHJ5IHNpdGUgc2hhcmVkIGJ5IHRoZSBiYXJlLW1ldGFsIGFuZCBwc2VyaWVzIChuZXN0ZWQpCiYjNDM7CSAqIHBhdGhzLCBzbyBib3RoIGFyZSBjb3ZlcmVkLgomIzQzOwkgKi8KJiM0MzsJciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7CiYjNDM7CWlmIChyKQkvKiAtRUlOVFI6IHNpZ25hbCBwZW5kaW5nLCBleGl0IHRvIHVzZXJzcGFjZSAoS1ZNX0VYSVRfSU5UUikgKi8KJiM0MzsJCXJldHVybiByOwogCiAJa3ZtcHBjX3VwZGF0ZV92cGFzKHZjcHUpOwogCkBAIC00OTE0LDkgJiM0Mzs0OTUxLDE0IEBAIGludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCwKIAogCXZjcHUtJmd0O2FyY2guc3RhdGUgPSBLVk1QUENfVkNQVV9SVU5OQUJMRTsKIAotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJZ290byBzaWdwZW5kOwotCWlmIChuZWVkX3Jlc2NoZWQoKSB8fCAha3ZtLSZndDthcmNoLm1tdV9yZWFkeSkKJiM0MzsJLyoKJiM0MzsJICogRmluYWwgSVJRcy1kaXNhYmxlZCBjaGVjayBmb3IgcGVuZGluZyBndWVzdC1tb2RlIHdvcmsgb3IgYW4gTU1VIHRoYXQKJiM0MzsJICogaXMgbm90IHJlYWR5LiBJUlFzIGFyZSBkaXNhYmxlZCBoZXJlLCBzbyBiYWlsIHRvIHRoZSBvdXRlciBsb29wLAomIzQzOwkgKiB3aGljaCByZS1lbnRlcnMgYW5kIGhhbmRsZXMgdGhlIHBlbmRpbmcgd29yayB2aWEKJiM0MzsJICoga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpIGFib3ZlIChleGl0aW5nIHdpdGggLUVJTlRSIG9uIGEKJiM0MzsJICogc2lnbmFsKS4KJiM0MzsJICovCiYjNDM7CWlmICh4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgfHwgIWt2bS0mZ3Q7YXJjaC5tbXVfcmVhZHkpCiAJCWdvdG8gb3V0OwogCiAJdmNwdS0mZ3Q7Y3B1ID0gcGNwdTsKQEAgLTUwNjgsMTAgJiM0Mzs1MTEwLDYgQEAgaW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LAogCiAJcmV0dXJuIHZjcHUtJmd0O2FyY2gucmV0OwogCi0gc2lncGVuZDoKLQl2Y3B1LSZndDtzdGF0LnNpZ25hbF9leGl0cyYjNDM7JiM0Mzs7Ci0JcnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7Ci0JdmNwdS0mZ3Q7YXJjaC5yZXQgPSAtRUlOVFI7CiAgb3V0OgogCXZjcHUtJmd0O2NwdSA9IC0xOwogCXZjcHUtJmd0O2FyY2gudGhyZWFkX2NwdSA9IC0xOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwppbmRleCAwMDMwMjM5OWZjMzdiNC4uZmYxYTlhOGRlNWUwYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC04NCwyMCAmIzQzOzg0LDM2IEBAIGludCBrdm1wcGNfcHJlcGFyZV90b19lbnRlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaGFyZF9pcnFfZGlzYWJsZSgpOwogCiAJd2hpbGUgKHRydWUpIHsKLQkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiYjNDM7CQlpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEhhbmRsZSBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayBiZWZvcmUgZW50ZXJpbmcgdGhlCiYjNDM7CQkJICogZ3Vlc3Q6IHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRQomIzQzOwkJCSAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoIHRocm90dGxlLgomIzQzOwkJCSAqIFRoZSBoZWxwZXIgbXVzdCBydW4gd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgYW5kIG1heQomIzQzOwkJCSAqIHNjaGVkdWxlKCkuIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgb3Blbi1jb2RlZAomIzQzOwkJCSAqIG5lZWRfcmVzY2hlZCgpL3NpZ25hbF9wZW5kaW5nKCkgY2hlY2tzIGl0IHJlcGxhY2VzLiBPbgomIzQzOwkJCSAqIGEgcGVuZGluZyBzaWduYWwgaXQgcmV0dXJucyAtRUlOVFIgYWZ0ZXIKJiM0MzsJCQkgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgaGFzIHNldAomIzQzOwkJCSAqIHJ1bi0mZ3Q7ZXhpdF9yZWFzb24gKEtWTV9FWElUX0lOVFIpIGFuZCBidW1wZWQKJiM0MzsJCQkgKiB2Y3B1LSZndDtzdGF0LnNpZ25hbF9leGl0cywgc28ganVzdCByZXR1cm4gdG8gdXNlcnNwYWNlLgomIzQzOwkJCSAqLwogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CQkJciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7CiAJCQloYXJkX2lycV9kaXNhYmxlKCk7CiYjNDM7CQkJaWYgKHIpIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogLUVJTlRSOiB0aGUgZ2VuZXJpYyBoZWxwZXIgZG9lcyBub3Qgc2V0IHRoZQomIzQzOwkJCQkgKiBleGl0IHR5cGUsIHNvIHJlY29yZCBpdCBoZXJlIGZvciB0aGUgRTUwMAomIzQzOwkJCQkgKiBDT05GSUdfS1ZNX0VYSVRfVElNSU5HIGhpc3RvZ3JhbSAoYSBuby1vcAomIzQzOwkJCQkgKiBvdGhlcndpc2UpLiBPbmx5IHRoZSBleGl0IHR5cGUgaXMgc2V0OwomIzQzOwkJCQkgKiBzaWduYWxfZXhpdHMgd2FzIGFscmVhZHkgYWNjb3VudGVkIGFib3ZlLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgU0lHTkFMX0VYSVRTKTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgU0lHTkFMX0VYSVRTKTsKLQkJCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSOwotCQkJciA9IC1FSU5UUjsKLQkJCWJyZWFrOwotCQl9Ci0KIAkJdmNwdS0mZ3Q7bW9kZSA9IElOX0dVRVNUX01PREU7CiAKIAkJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3dlclBDIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgS1ZNIG9uIFBvd2VyUEMsIHNwZWNpZmljYWxseSBpbiB0aG9zZSBgYm9vazNzX2h2LmNgIGFuZCBgcG93ZXJwYy5jYCBmaWxlcy4gSXQmIzM5O3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVmaW5pbmcgaG93IHRoZSBzeXN0ZW0gY2hlY2tzIGZvciBwZW5kaW5nIHdvcmsgYmVmb3JlIHRocm93aW5nIHRoZSBDUFUgaW50byBndWVzdCBtb2RlLiBUaGV5JiMzOTtyZSBkaXRjaGluZyB0aGUgdXN1YWwgYG5lZWRfcmVzY2hlZCgpYCBhbmQgYHNpZ25hbF9wZW5kaW5nKClgIGFuZCBicmluZ2luZyBpbiB0aGlzIGB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKClgIGFuZCBga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpYCBjb21iby4gSW50ZXJlc3RpbmcuLi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgbnVhbmNlcyBvZiB0aGlzIGFwcHJvYWNoIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZCBtZXRob2RzIHRvIHNlZSB3aHkgdGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gSXQmIzM5O3MgYWxzbyBhZGRpbmcgYHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS2AgdG8gdGhlIEtjb25maWcsIHNvIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyBlbmFibGluZyBuZXcgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmZpZyByZXF1aXJlbWVudHMgZm9yIHRoaXMgcGF0Y2guIEkgYWxyZWFkeSBrbm93IGl0IHJlcXVpcmVzIGBDT05GSUdfS1ZNYCwgYW5kIGl0JiMzOTtzIG1vc3QgbGlrZWx5IGRlcGVuZGVudCBvbiBlaXRoZXIgYENPTkZJR19LVk1fQk9PSzNTX0hWYCBvciBvbmUgb2YgdGhlIG90aGVyIEJPT0szUyBvciBFNTAwVjIgdmFyaWFudHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zLCBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgZ3JlcC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAgYW5kIGBrdm1wcGNfcnVuX2NvcmVgIHRocm91Z2hvdXQgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gVGhpcyB3aWxsIGhlbHAgY2xhcmlmeSB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBpbiBLVk0gYXJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlIGFuZCB3aGF0IHRoZWlyIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXJlLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUgLSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSByaXBwbGUgZWZmZWN0cyBiZWZvcmUgZ2V0dGluZyB0b28gZGVlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1odl9ydW5fc2luZ2xlX3ZjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTM3NzY9c3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg1Ni1cdCAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgdGhyb3R0bGUpLiBJdCBpcyB0aGUgcHJlLVBPV0VSOVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzozODU3Olx0ICogYW5hbG9nIG9mIHRoZSBmaW5hbCBnYXRlIGluIGt2bWh2X3J1bl9zaW5nbGVfdmNwdSgpLCBhbmQgYSBzdXBlcnNldFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODU4LVx0ICogb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjazogaXQgY2F0Y2hlcyB3b3JrIHRoYXQgcmFjZWQgaW4gYWZ0ZXJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ3NDc9c3RhdGljIGludCBrdm1wcGNfcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDg5MC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDg5MTppbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ4OTItXHRcdFx0ICB1bnNpZ25lZCBsb25nIGxwY3IpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz01MTIyPXN0YXRpYyBpbnQga3ZtcHBjX3ZjcHVfcnVuX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUxOTgtXHRcdGlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BUkNIXzMwMCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjUxOTk6XHRcdFx0ciA9IGt2bWh2X3J1bl9zaW5nbGVfdmNwdSh2Y3B1LCB+KHU2NCkwLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MjAwLVx0XHRcdFx0XHRcdCAgdmNwdS1cdTAwM2VhcmNoLnZjb3JlLVx1MDAzZWxwY3IpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTI5NT1sb25nIGt2bWh2X2VudGVyX25lc3RlZF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtMzgzLVx0ZG8ge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6Mzg0Olx0XHRyID0ga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHZjcHUsIGhkZWNfZXhwLCBscGNyKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTM4NS1cdH0gd2hpbGUgKGlzX2t2bXBwY19yZXN1bWVfZ3Vlc3QocikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFBvd2VyUEMgS1ZNIEJvb2szUyBIeXBlcnZpc29yIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBQb3dlclBDIEtWTSBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgaHlwZXJ2aXNvciBhc3BlY3RzLiBUaGUgZmlyc3QgcGxhY2UgdG8gY2hlY2ssIGFuZCBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlLCBpcyBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgaHlwZXJ2aXNvciBmdW5jdGlvbmFsaXR5IGZvciBCb29rM1Mgc3lzdGVtcyB0byByZXNpZGUuIE5vdywgYmVmb3JlIEkgZXZlbiBnZXQgdG9vIGRlZXAgaW50byB0aGUgY29kZSBpdHNlbGYsIEkgKmFsd2F5cyogZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYGJvb2szc19odi5jYC4gSSB3YW50IHRvIGtub3cgd2hlbiBhbmQgd2h5IHRoaXMgY29kZSBpcyBjb21waWxlZCBhbmQgd2hhdCBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0LiBLbm93aW5nIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gd2lsbCBzYXZlIG1lIGEgdG9uIG9mIHRpbWUgaW4gdGhlIGxvbmcgcnVuLCBoZWxwaW5nIG1lIHVuZGVyc3RhbmQgdGhlIHdpZGVyIHBpY3R1cmUgYW5kIGF2b2lkIGNoYXNpbmcgbXkgdGFpbCB3aXRoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheSBhYm91dCB0aGUgaHlwZXJ2aXNvciBzdXBwb3J0IGFuZCBob3cgaXQmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib29rM3NfaHYubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjI9a3ZtLWh2LXkgJiM0Mzs9IFxcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjYzOlx0Ym9vazNzX2h2Lm8gXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjQtXHRib29rM3NfaHZfaW50ZXJydXB0cy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBLVk0tSFYgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBlbmFibGVzIGBrdm0taHYteWAuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGRpcmVjdGx5IHRhcmdldGluZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgd2hlcmUgYW5kIGhvdyB0aGlzIGZsYWcgaXMgc2V0IG9yIGluZmx1ZW5jZWQuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS1ZNLCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGh5cGVydmlzb3IgYW5kIGhvc3QuIElzIGl0IGEga2VybmVsIG1vZHVsZSBwYXJhbWV0ZXI/IEEgYnVpbGQtdGltZSBvcHRpb24/IFBhcnQgb2YgYSBkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlPyBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IG5vdCBhIHNpbXBsZSB0b2dnbGUgd2l0aGluIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiYjMzk7cyBwcmVmZXJlbmNlcy4gSXQmIzM5O3MgbGlrZWx5IGRlZXBlciB0aGFuIHRoYXQsIGFuZCBhIHF1aWNrIGxvb2t1cCB3aWxsIHBpbnBvaW50IHRoZSBleGFjdCBzb3VyY2Ugb2YgdGhpcyBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm0taHYteSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjA9ZW5kaWZcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjEtXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjYyOmt2bS1odi15ICYjNDM7PSBcXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS02My1cdGJvb2szc19odi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBgYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZWAgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS1ZNIE1ha2VmaWxlIGZvciBQb3dlclBDKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGlzIGBNYWtlZmlsZWAgZm9yIHRoZSBQb3dlclBDIEtWTSBhcmNoaXRlY3R1cmUuIFRoaXMgbWVhbnMgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIG92ZXJhbGwgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBtb2R1bGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGZvciB0aGlzIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzLCBpbmNsdWRlIHBhdGhzLCBvciBzcGVjaWFsIGNvbXBpbGVyIGRlZmluaXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gUG93ZXJQQyYjMzk7cyB1bmlxdWUgY2hhcmFjdGVyaXN0aWNzLCBzdWNoIGFzIGl0cyBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQsIG1lbW9yeSBtb2RlbCwgb3Igb3RoZXIgaGFyZHdhcmUgcGVjdWxpYXJpdGllcyB0aGF0IGltcGFjdCB2aXJ0dWFsaXphdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRhcmdldHMgcmVsYXRlZCB0byB0aGUgS1ZNIGNvcmUsIHZDUFUgaGFuZGxpbmcsIE1NVSBlbXVsYXRpb24sIGRldmljZSBlbXVsYXRpb24sIGFuZCBhbnkgUG93ZXJQQy1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGlkZW50aWZ5IGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBvdmVyYWxsIEtWTSBmdW5jdGlvbmFsaXR5IG9uIFBvd2VyUEMgc3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSBtb2R1bGVcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL3Bvd2VycGMva3ZtXG4gICA3Olx0XG4gICA4Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgOTpcdFxuICAxMDpcdGNvbW1vbi1vYmpzLXkgJiM0Mzs9IHBvd2VycGMubyBlbXVsYXRlX2xvYWRzdG9yZS5vXG4gIDExOlx0b2JqLSQoQ09ORklHX0tWTV9FWElUX1RJTUlORykgJiM0Mzs9IHRpbWluZy5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfSEFORExFUikgJiM0Mzs9IGJvb2szc19leHBvcnRzLm9cbiAgMTM6XHRcbiAgMTQ6XHRBRkxBR1NfYm9va2VfaW50ZXJydXB0cy5vIDo9IC1JJChvYmp0cmVlKS8kKG9iailcbiAgMTU6XHRcbiAgMTY6XHRrdm0tZTUwMC1vYmpzIDo9IFxcXG4gIDE3Olx0XHQkKGNvbW1vbi1vYmpzLXkpIFxcXG4gIDE4Olx0XHRlbXVsYXRlLm8gXFxcbiAgMTk6XHRcdGJvb2tlLm8gXFxcbiAgMjA6XHRcdGJvb2tlX2VtdWxhdGUubyBcXFxuICAyMTpcdFx0Ym9va2VfaW50ZXJydXB0cy5vIFxcXG4gIDIyOlx0XHRlNTAwLm8gXFxcbiAgMjM6XHRcdGU1MDBfbW11Lm8gXFxcbiAgMjQ6XHRcdGU1MDBfbW11X2hvc3QubyBcXFxuICAyNTpcdFx0ZTUwMF9lbXVsYXRlLm9cbiAgMjY6XHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fRTUwMFYyKSA6PSAkKGt2bS1lNTAwLW9ianMpXG4gIDI3Olx0XG4gIDI4Olx0a3ZtLWU1MDBtYy1vYmpzIDo9IFxcXG4gIDI5Olx0XHQkKGNvbW1vbi1vYmpzLXkpIFxcXG4gIDMwOlx0XHRlbXVsYXRlLm8gXFxcbiAgMzE6XHRcdGJvb2tlLm8gXFxcbiAgMzI6XHRcdGJvb2tlX2VtdWxhdGUubyBcXFxuICAzMzpcdFx0Ym9va2Vodl9pbnRlcnJ1cHRzLm8gXFxcbiAgMzQ6XHRcdGU1MDBtYy5vIFxcXG4gIDM1Olx0XHRlNTAwX21tdS5vIFxcXG4gIDM2Olx0XHRlNTAwX21tdV9ob3N0Lm8gXFxcbiAgMzc6XHRcdGU1MDBfZW11bGF0ZS5vXG4gIDM4Olx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX0U1MDBNQykgOj0gJChrdm0tZTUwMG1jLW9ianMpXG4gIDM5Olx0XG4gIDQwOlx0a3ZtLXByLXkgOj0gXFxcbiAgNDE6XHRcdGZwdS5vIFxcXG4gIDQyOlx0XHRlbXVsYXRlLm8gXFxcbiAgNDM6XHRcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXG4gIDQ0Olx0XHRib29rM3NfcHIubyBcXFxuICA0NTpcdFx0Ym9vazNzX3ByX3BhcHIubyBcXFxuICA0NjpcdFx0Ym9vazNzX2VtdWxhdGUubyBcXFxuICA0NzpcdFx0Ym9vazNzX2ludGVycnVwdHMubyBcXFxuICA0ODpcdFx0Ym9vazNzX21tdV9ocHRlLm8gXFxcbiAgNDk6XHRcdGJvb2szc182NF9tbXVfaG9zdC5vIFxcXG4gIDUwOlx0XHRib29rM3NfNjRfbW11Lm8gXFxcbiAgNTE6XHRcdGJvb2szc18zMl9tbXUub1xuICA1MjpcdFxuICA1MzpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgJiM0Mzs9IFxcXG4gIDU0Olx0XHRib29rM3NfNjRfZW50cnkubyBcXFxuICA1NTpcdFx0dG0ub1xuICA1NjpcdFxuICA1NzpcdGlmZGVmIENPTkZJR19LVk1fQk9PSzNTX1BSX1BPU1NJQkxFXG4gIDU4Olx0a3ZtLWJvb2szc182NC1idWlsdGluLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSKSAmIzQzOz0gXFxcbiAgNTk6XHRcdGJvb2szc19ybWhhbmRsZXJzLm9cbiAgNjA6XHRlbmRpZlxuICA2MTpcdFxuICA2MjpcdGt2bS1odi15ICYjNDM7PSBcXFxuICA2MzpcdFx0Ym9vazNzX2h2Lm8gXFxcbiAgNjQ6XHRcdGJvb2szc19odl9pbnRlcnJ1cHRzLm8gXFxcbiAgNjU6XHRcdGJvb2szc182NF9tbXVfaHYubyBcXFxuICA2NjpcdFx0Ym9vazNzXzY0X21tdV9yYWRpeC5vIFxcXG4gIDY3Olx0XHRib29rM3NfaHZfbmVzdGVkLm9cbiAgNjg6XHRcbiAgNjk6XHRrdm0taHYtJChDT05GSUdfUFBDX1VWKSAmIzQzOz0gXFxcbiAgNzA6XHRcdGJvb2szc19odl91dm1lbS5vXG4gIDcxOlx0XG4gIDcyOlx0a3ZtLWh2LSQoQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTSkgJiM0Mzs9IFxcXG4gIDczOlx0XHRib29rM3NfaHZfdG0ub1xuICA3NDpcdFxuICA3NTpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi14aWNzLW9ianMtJChDT05GSUdfS1ZNX1hJQ1MpIDo9IFxcXG4gIDc2Olx0XHRib29rM3NfaHZfcm1feGljcy5vXG4gIDc3Olx0XG4gIDc4Olx0a3ZtLWJvb2szc182NC1idWlsdGluLXRtLW9ianMtJChDT05GSUdfUFBDX1RSQU5TQUNUSU9OQUxfTUVNKSAmIzQzOz0gXFxcbiAgNzk6XHRcdGJvb2szc19odl90bV9idWlsdGluLm9cbiAgODA6XHRcbiAgODE6XHRpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuICA4MjpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgJiM0Mzs9IFxcXG4gIDgzOlx0XHRib29rM3NfaHZfaG1pLm8gXFxcbiAgODQ6XHRcdGJvb2szc19odl9wOV9lbnRyeS5vIFxcXG4gIDg1Olx0XHRib29rM3NfaHZfcm1oYW5kbGVycy5vIFxcXG4gIDg2Olx0XHRib29rM3NfaHZfcm1fbW11Lm8gXFxcbiAgODc6XHRcdGJvb2szc19odl9yYXMubyBcXFxuICA4ODpcdFx0Ym9vazNzX2h2X2J1aWx0aW4ubyBcXFxuICA4OTpcdFx0Ym9vazNzX2h2X3A5X3BlcmYubyBcXFxuICA5MDpcdFx0Ym9vazNzX2h2X25lc3RlZHYyLm8gXFxcbiAgOTE6XHRcdGd1ZXN0LXN0YXRlLWJ1ZmZlci5vIFxcXG4gIDkyOlx0XHQkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi10bS1vYmpzLXkpIFxcXG4gIDkzOlx0XHQkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi14aWNzLW9ianMteSlcbiAgOTQ6XHRcbiAgOTU6XHRvYmotJChDT05GSUdfR1VFU1RfU1RBVEVfQlVGRkVSX1RFU1QpICYjNDM7PSB0ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5vXG4gIDk2Olx0ZW5kaWZcbiAgOTc6XHRcbiAgOTg6XHRrdm0tYm9vazNzXzY0LW9ianMtJChDT05GSUdfS1ZNX1hJQ1MpICYjNDM7PSBcXFxuICA5OTpcdFx0Ym9vazNzX3hpY3Mub1xuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLVk0gTWFrZWZpbGUgTWF6ZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEtWTSBidWlsZCBwcm9jZXNzLCBhbmQgSSYjMzk7dmUgZ290IGEgaHVuY2guIEl0IGxvb2tzIGxpa2UgdGhlIHBpZWNlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgc3BlY2lmaWNhbGx5IGBrdm0taHYteWAsIGlzIGxpa2VseSBnZXR0aW5nIGluY29ycG9yYXRlZCBpbnRvIHRoZSBidWlsZCBiYXNlZCBvbiB0aGF0IGBrdm0tYm9vazNzXzY0LW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IVilgIGNvbmRpdGlvbmFsLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBnaXZlbiB0aGUgaW50cmljYWNpZXMgb2YgdGhpcyBtYWtlZmlsZSBzdHJ1Y3R1cmUsIEkgbmVlZCB0byBjb25maXJtLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgTWFrZWZpbGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gYW5kIGV4YWN0bHkgaG93IGBDT05GSUdfS1ZNX0JPT0szU182NF9IVmAgYWZmZWN0cyB0aGUgaW5jbHVzaW9uIG9mIGBrdm0taHYteWAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc3Vic2VxdWVudCBydWxlcyBhbmQgdmFyaWFibGVzIHJldmVhbC4gVGhlcmUmIzM5O3MgdXN1YWxseSBtb3JlIHRvIHVucGFjayB3aGVuIGl0IGNvbWVzIHRvIEtWTSBidWlsZCBzeXN0ZW1zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRrdm0tYm9vazNzXzY0LW9ianMtJChDT05GSUdfS1ZNX1hJVkUpICYjNDM7PSBib29rM3NfeGl2ZS5vIGJvb2szc194aXZlX25hdGl2ZS5vXG4gMTAyOlx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX1NQQVBSX1RDRV9JT01NVSkgJiM0Mzs9IGJvb2szc182NF92aW8ub1xuIDEwMzpcdFxuIDEwNDpcdGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianMgOj0gXFxcbiAxMDU6XHRcdCQoY29tbW9uLW9ianMteSkgXFxcbiAxMDY6XHRcdGJvb2szcy5vIFxcXG4gMTA3Olx0XHRib29rM3NfcnRhcy5vIFxcXG4gMTA4Olx0XHQkKGt2bS1ib29rM3NfNjQtb2Jqcy15KVxuIDEwOTpcdFxuIDExMDpcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpIDo9ICQoa3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcylcbiAxMTE6XHRcbiAxMTI6XHRrdm0tYm9vazNzXzMyLW9ianMgOj0gXFxcbiAxMTM6XHRcdCQoY29tbW9uLW9ianMteSkgXFxcbiAxMTQ6XHRcdGVtdWxhdGUubyBcXFxuIDExNTpcdFx0ZnB1Lm8gXFxcbiAxMTY6XHRcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXG4gMTE3Olx0XHRib29rM3MubyBcXFxuIDExODpcdFx0Ym9vazNzX3ByLm8gXFxcbiAxMTk6XHRcdGJvb2szc19lbXVsYXRlLm8gXFxcbiAxMjA6XHRcdGJvb2szc19pbnRlcnJ1cHRzLm8gXFxcbiAxMjE6XHRcdGJvb2szc19tbXVfaHB0ZS5vIFxcXG4gMTIyOlx0XHRib29rM3NfMzJfbW11X2hvc3QubyBcXFxuIDEyMzpcdFx0Ym9vazNzXzMyX21tdS5vXG4gMTI0Olx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU18zMikgOj0gJChrdm0tYm9vazNzXzMyLW9ianMpXG4gMTI1Olx0XG4gMTI2Olx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX01QSUMpICYjNDM7PSBtcGljLm9cbiAxMjc6XHRcbiAxMjg6XHRrdm0teSAmIzQzOz0gJChrdm0tb2Jqcy1tKSAkKGt2bS1vYmpzLXkpXG4gMTI5Olx0XG4gMTMwOlx0b2JqLSQoQ09ORklHX0tWTV9FNTAwVjIpICYjNDM7PSBrdm0ub1xuIDEzMTpcdG9iai0kKENPTkZJR19LVk1fRTUwME1DKSAmIzQzOz0ga3ZtLm9cbiAxMzI6XHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NCkgJiM0Mzs9IGt2bS5vXG4gMTMzOlx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfMzIpICYjNDM7PSBrdm0ub1xuIDEzNDpcdFxuIDEzNTpcdG9iai0kKENPTkZJR19LVk1fQk9PSzNTXzY0X1BSKSAmIzQzOz0ga3ZtLXByLm9cbiAxMzY6XHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9IVikgJiM0Mzs9IGt2bS1odi5vXG4gMTM3Olx0XG4gMTM4Olx0b2JqLXkgJiM0Mzs9ICQoa3ZtLWJvb2szc182NC1idWlsdGluLW9ianMteSlcbiAxMzk6XHRcbiAxNDA6XHQjIEtWTSBkb2VzIGEgbG90IGluIHJlYWwtbW9kZSwgYW5kIDY0LWJpdCBCb29rM1MgS0FTQU4gZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGF0XG4gMTQxOlx0aWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjRcbiAxNDI6XHRLQVNBTl9TQU5JVElaRSA6PSBuXG4gMTQzOlx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgS1ZNIEJ1aWxkIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyBkb3duIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIGtlcm5lbCBtb2R1bGVzLiBJdCBzZWVtcyBsaWtlIGBrdm0taHYub2AgZ2V0cyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBkZWZpbmVkLiBUaGF0IG1ha2VzIHNlbnNlLCBwcmV0dHkgc3BlY2lmaWMuIEFuZCB0aGVuLCBJIHNlZSB0aGF0IGBwb3dlcnBjLm9gIGlzIGJ1aWx0IGlmIGBDT05GSUdfS1ZNYCBpcyBzZXQsIGFuZCBpdCBsb29rcyBsaWtlIGBjb21tb24tb2Jqcy15YCBpcyB0aGUgdHJpZ2dlciBmb3IgdGhhdC4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBJIHNob3VsZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBLVk1fQk9PSzNTXzY0X0hWYC4gVGhhdCBzaG91bGQgY2xhcmlmeSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciwgYW5kIEkgY2FuIGJlIG1vcmUgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X0hWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYzPWNvbmZpZyBLVk1fQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTczNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBLVk1fQk9PSzNTXzY0X0hWYCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgYm9vazNzX2h2LmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gQW5kIGBLVk1gLCBuYXR1cmFsbHksIGlzIHRoZSB1bWJyZWxsYSBjb25maWcgZm9yIGBwb3dlcnBjLmNgLiBSaWdodCwgc28gYHBvd2VycGMuY2AgaXMgcGFydCBvZiBgY29tbW9uLW9ianMteWAgd2hpY2ggdGhlbiBnZXRzIGluY2x1ZGVkIGluIHNldmVyYWwgb3RoZXJzIGxpa2UgYGt2bS1lNTAwLW9ianNgLCBga3ZtLWU1MDBtYy1vYmpzYCwgYGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianNgLCBhbmQgYGt2bS1ib29rM3NfMzItb2Jqc2AuIFNvLCBgQ09ORklHX0tWTWAgaXMgdGhlIHByaW1hcnksIG92ZXJhcmNoaW5nIGNvbmZpZ3VyYXRpb24uCgpOb3csIGxldCYjMzk7cyByZS1leGFtaW5lIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGFkZGluZyBgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktgIHRvIHRoZSBgS1ZNYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgYWRkaXRpb24gaGVyZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYWRkaW5nIGEgbmV3IHNlbGVjdCBvcHRpb24uCgpUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgaW1wYWN0IG9uIHNwZWNpZmljIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGFmZmVjdHM6CgoqICAgYGt2bXBwY19ydW5fY29yZWAgaW4gYGJvb2szc19odi5jYAoqICAgYGt2bXBwY19ydW5fdmNwdWAgaW4gYGJvb2szc19odi5jYAoqICAgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAgaW4gYGJvb2szc19odi5jYAoKU28gdGhlIGNoYW5nZXMgc2VlbSBmb2N1c2VkIG9uIHRoZSBib29rM3NfaHYgc2lkZS4KCkFuZCBhbHNvOgoKKiAgIGBrdm1wcGNfcHJlcGFyZV90b19lbnRlcmAgaW4gYHBvd2VycGMuY2AKClRoaXMgbmVlZHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCwgdGhlIHdheSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRocm91Z2hvdXQgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgaW52b2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTExMzU9aW50IGt2bXBwY19oYW5kbGVfZXhpdF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTQzOC1cdFx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjE0Mzk6XHRcdHMgPSBrdm1wcGNfcHJlcGFyZV90b19lbnRlcih2Y3B1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTQ0MC1cdFx0aWYgKHMgXHUwMDNjPSAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9MTgwNz1zdGF0aWMgaW50IGt2bXBwY192Y3B1X3J1bl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xODI1LVx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjE4MjY6XHRyZXQgPSBrdm1wcGNfcHJlcGFyZV90b19lbnRlcih2Y3B1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTgyNy1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYz03NjA9aW50IGt2bXBwY192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jLTc2OS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYzo3NzA6XHRzID0ga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIodmNwdSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMtNzcxLVx0aWYgKHMgXHUwMDNjPSAwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jPTEwMTE9aW50IGt2bXBwY19oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYy0xNDAxLVx0aWYgKCEociBcdTAwMjYgUkVTVU1FX0hPU1QpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmM6MTQwMjpcdFx0cyA9IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHZjcHUpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jLTE0MDMtXHRcdGlmIChzIFx1MDAzYz0gMClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz02NT1pbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzgtICovXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3OTppbnQga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtODAte1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE1NC19XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoxNTU6RVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIpO1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTU2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0vUG93ZXJQQyBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gbG9va2luZyBhdCB0aGUgY29kZSwgYGt2bXBwY19wcmVwYXJlX3RvX2VudGVyYCBpcyBhIGtleSBmdW5jdGlvbiwgdXNlZCBpbiBib3RoIGBib29rM3NfcHIuY2AgYW5kIGBib29rZS5jYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvZGUgdGhhdCBpbXBhY3RzIHRoZSBgQ09ORklHX0tWTV9CT09LM1NfNjRfUFJgLCBgQ09ORklHX0tWTV9FNTAwVjJgLCBhbmQgYENPTkZJR19LVk1fRTUwME1DYCBjb25maWd1cmF0aW9ucy4gVGhlIGNoYW5nZXMgaW4gYGJvb2szc19odi5jYCBhcmUgb2J2aW91c2x5IHJlbGV2YW50IHRvIGBDT05GSUdfS1ZNX0JPT0szU182NF9IVmAuCgpTbywgdG8gZW5hYmxlIGV2ZXJ5dGhpbmcsIEkgc2hvdWxkIGZvY3VzIG9uIGBLVk1gIGFuZCBgS1ZNX0JPT0szU182NF9IVmAuIGBLVk1fQk9PSzNTXzY0X0hWYCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBQb3dlclBDIEJvb2szUyA2NC1iaXQgSFYsIGBLVk1fQk9PSzNTXzY0X1BSYCBpcyBmb3IgQm9vazNTIDY0LWJpdCBQUiwgYEtWTV9FNTAwVjJgIGlzIGZvciBFNTAwdjIsIGFuZCBgS1ZNX0U1MDBNQ2AgaXMgZm9yIEU1MDBNQy4KCkFscmlnaHQsIGRvdWJsZS1jaGVja2luZ+KApiB5ZXMsIGVuYWJsaW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBzZWVtcyBjb3JyZWN0OyBpdCBjb3ZlcnMgdGhlIGBib29rM3NfaHYuY2AgbW9kaWZpY2F0aW9ucy4gQW5kIGBLVk1gIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhlIGJhc2UgYHBvd2VycGMuY2AgY2hhbmdlcy4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgZm9jYWwgcG9pbnRzIG9mIHRoaXMgcGF0Y2g/IFRoZSBjb2RlIHNlZW1zIHRvIGJlIGNoYW5naW5nIHRoZSBleGVjdXRpb24gcGF0aCB0byB0aGUgZ3Vlc3QsIGFuZCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgS1ZNIHJ1biBsb29wLiBCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzIGFuZCB0aGUgbGlrZWx5IHBhdGgsIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoIGFyZToKCiogICBga3ZtcHBjX3J1bl9jb3JlYAoqICAgYGt2bXBwY19ydW5fdmNwdWAKKiAgIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgCiogICBga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJgCgpJIHNlZSB0aGF0IGBrdm1wcGNfcnVuX2NvcmVgLCBga3ZtcHBjX3J1bl92Y3B1YCwgYW5kIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgIGFyZSBleHRyZW1lbHkgaG90IHBhdGhzIOKAkyB0aGV5JiMzOTtyZSB0aGUgYWN0dWFsIHZDUFUgZXhlY3V0aW9uIGxvb3BzLiBCdXQsIGNydWNpYWxseSwgYGt2bXBwY19wcmVwYXJlX3RvX2VudGVyYCBpcyBhbHNvIGluIHRoZSBsb29wLCB3aGljaCBtZWFucyBpdOKAmXMgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXMgd2VsbC4gR2l2ZW4gdGhhdCB0aGUgbW9kaWZpY2F0aW9uIGlzIGZ1bmN0aW9uYWxseSBjaGFuZ2luZyB0aGUgY29yZSBLVk0gbG9naWMgYW5kIHRoZSBndWVzdCBlbnRyeSBwYXRoLCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7bGwgZm9jdXMgb24gdGhvc2UgZm91ciBmdW5jdGlvbnMgYXMgdGhlIHByaW1hcnkgZnV6emluZyB0YXJnZXRzLCBhcyB0aGV5IGFyZSB0aGUgb25seSBtb2RpZmllZCBmdW5jdGlvbnMuCgpKdXN0IG5lZWQgdG8gY29uZmlybSB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWUgdG8gd29yayB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9IViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mz1jb25maWcgS1ZNX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4MDpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzI3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIEtWTSBJZGVudGlmaWVyIENoZWNrKioKCkFscmlnaHQsIHllcCwgY29uZmlybWVkLiBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGNvcnJlY3QgaWRlbnRpZmllciBmb3IgdGhhdCBwYXJ0aWN1bGFyIGh5cGVydmlzb3IgY29uZmlndXJhdGlvbiwgbm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4uLiB3aGF0IGFib3V0IGBLVk1fQk9PSzNTXzY0X1BSYD8gTmVlZCB0byByZWNhbGwgd2hhdCB0aGF0IGRlc2lnbmF0aW9uIGlzIHVzZWQgZm9yIGFuZCBkb3VibGUtY2hlY2sgSSBoYXZlbiYjMzk7dCBtYWRlIGEgd3JvbmcgYXNzdW1wdGlvbiBiYXNlZCBvbiBpbmNvbXBsZXRlIGluZm9ybWF0aW9uLCBhbHdheXMgaGF2ZSB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy4gSnVzdCBhIG1lbnRhbCBjcm9zc2NoZWNrIHRvIG1ha2UgY2VydGFpbiBhbGwgdGhlIGJhc2VzIGFyZSBjb3ZlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9QUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz04MD1jb25maWcgS1ZNX0JPT0szU182NF9IVlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDAtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAxOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAyLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFzc2Vzc2luZyBLVk0gQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY2hlY2sgY29uZmlybXMgaXQ6IGBLVk1fQk9PSzNTXzY0X1BSYCBpcyB0aGUgY29ycmVjdCBpZGVudGlmaWVyIGZvciB0aGF0IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjb25zaWRlciB0aGUgb3RoZXIgc2ltaWxhciBhcmNoaXRlY3R1cmVzLiBXaGF0IGFib3V0IHRoZSBudWFuY2VzIG9mIGBLVk1fRTUwMFYyYCBhbmQgYEtWTV9FNTAwTUNgPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiB0aGVpciBmZWF0dXJlcywgb3IgYXJlIHRoZXkgY29tcGF0aWJsZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbXBhdGliaWxpdHkgaWYgdGhleSB3ZXJlIHRvIGJlIGNvbXBhcmVkPyBUaG9zZSBhcmUgc29tZSBrZXkgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBmdXJ0aGVyIGludmVzdGlnYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9FNTAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE4OD1jb25maWcgS1ZNX0VYSVRfVElNSU5HXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTk6Y29uZmlnIEtWTV9FNTAwVjJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMDAtXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMTQ6Y29uZmlnIEtWTV9FNTAwTUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTUtXHRib29sIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDBNQy9FNTUwMC9FNjUwMCBwcm9jZXNzb3JzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDg3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCB0aGV5JiMzOTtyZSByaWdodCwgdGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluaXRlbHkgdGhlIG9uZXMgdG8gZW5hYmxlLiBJbml0aWFsbHksIEkgdGhvdWdodCBJIG5lZWRlZCBhbGwgb2YgdGhlbSDigJMgYEtWTWAsIGBLVk1fQk9PSzNTXzY0X0hWYCwgYEtWTV9CT09LM1NfNjRfUFJgLCBgS1ZNX0U1MDBWMmAsIGFuZCBgS1ZNX0U1MDBNQ2AuIFdhaXQsIGBLVk1gIGlzIGFscmVhZHkgaW1wbGljaXRseSBzZWxlY3RlZCwgc28gdGhhdCYjMzk7cyByZWR1bmRhbnQuICBMZXQmIzM5O3MgcmVmaW5lIHRoYXQgbGlzdC4gYEtWTV9CT09LM1NfNjRfSFZgIGFuZCBgS1ZNX0JPT0szU182NF9QUmAgc2VlbSBsaWtlIHRoZSBlc3NlbnRpYWwgb25lcyB0byBmb2N1cyBvbi4gQWN0dWFsbHksIGNvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzLCBgS1ZNX0JPT0szU182NF9IVmAgaXMgcHJvYmFibHkgdGhlIG1vc3QgY3JpdGljYWwsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1ham9yaXR5IG9mIHRoZSBtb2RpZmljYXRpb25zIGFyZS4gU28sIGxldCYjMzk7cyBsZWFkIHdpdGggdGhhdCwgYW5kIGFkZCBgS1ZNX0JPT0szU182NF9QUmAgYXMgd2VsbC4KCk5vdywgZm9yIHRoZSBrZXkgZnVuY3Rpb25zLiBUaGUgcHJvbXB0IGxpc3RzIGBrdm1wcGNfcnVuX2NvcmVgLCBga3ZtcHBjX3J1bl92Y3B1YCwgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAsIGFuZCBga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJgLiBIbW0sIHRob3NlIGFyZSBkZWZpbml0ZWx5IGhvdCBwYXRocy4gQnV0LCB0aGV5IGFyZSAqdGhlIG9ubHkqIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4mIzM0OyBUaGUgcXVlc3Rpb24gaXMsIGFyZSAqdGhlc2UqIGdlbmVyaWM/IE5vLCBJIGRvbiYjMzk7dCB0aGluayBzby4gVGhleSBhcmUgS1ZNIGVudHJ5IGZ1bmN0aW9ucywgZXhlY3V0ZWQgb24gKmV2ZXJ5KiBWTSBlbnRyeSwgYnV0IHRoZXkmIzM5O3JlIHNwZWNpZmljIHRvIEtWTSBvbiBQb3dlclBDLiBUaGV5IGFyZW4mIzM5O3QgdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zIGxpa2UgYGttYWxsb2NgIG9yIGBzY2hlZHVsZWAuCgpJZiBJIGRvbiYjMzk7dCBsaXN0IHRoZW0sIHdoYXQgZWxzZSBpcyB0aGVyZT8gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBmdW5jdGlvbnMgY2hhbmdlZC4gSSBndWVzcyBJIGNvdWxkIGxlYXZlIHRoaXMgZnVuY3Rpb24gbGlzdCBibGFuayBpZiB0aGV5JiMzOTtyZSBjb25zaWRlcmVkIHRvbyBob3QuIEhvd2V2ZXIsIEkgdGhpbmsgdGhhdCB0aGUgcG9pbnQgb2YgdGhlIGRpcmVjdGlvbnMgYXJlIHRvIHByZXZlbnQgbGlzdGluZyB0cnVseSBnZW5lcmljIGZ1bmN0aW9ucyB3aGljaCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbi4gR2l2ZW4gdGhhdCB0aGVzZSBhcmUgc3BlY2lmaWMgS1ZNIGVudHJ5IGZ1bmN0aW9ucywgSSB0aGluayBpdCYjMzk7cyBmaW5lIHRvIGluY2x1ZGUgdGhlbS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlIG9uZSBtb3JlIHRpbWUgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwmIzQzOy4qeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgYHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmdgKioKCk9rYXksIGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyeSBhbmQgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbS4gSW5zdGVhZCBvZiBibGluZGx5IGRpdmluZyBpbiwgSSBzaG91bGQgcGF1c2UuIEkgbmVlZCBhIHJhcGlkIHdheSB0byBhc3Nlc3MgdGhlIHVzZSBvZiB0aGlzIHNwZWNpZmljIHRlcm06IGB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nYC4gV2hhdCYjMzk7cyB0aGUgYmVzdCBhcHByb2FjaD8gWWVwLCBhIGBncmVwYCBzaG91bGQgYmUgdGhlIG1vc3QgZWZmaWNpZW50IGluaXRpYWwgcHJvYmUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayBvdmVydmlldyBvZiAqd2hlcmUqIHRoaXMgdmFyaWFibGUgb3IgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLCB3aGljaCBpbiB0dXJuIHdpbGwgcHJvdmlkZSB2aXRhbCBjb250ZXh0LiBXaXRoIGdyZXAsIEkgY2FuIHF1aWNrbHkgc2NhbiB0aGUgc291cmNlIGZpbGVzIGFuZCBzZWUgdGhlIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBtZXRob2QgaXMgdGhlIHBlcmZlY3QgZmlyc3Qgc3RlcCB0byBnYWluIHRoZSBmdW5kYW1lbnRhbCBjb250ZXh0IG5lY2Vzc2FyeSB0byB0YWtlIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTM3NzY9c3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg1My1cdCAqXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjM4NTQ6XHQgKiB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgaXMgdGhlIElSUXMtZGlzYWJsZWQgcmVjaGVjayBmb3JcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg1NS1cdCAqIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIChyZXNjaGVkdWxlLCBzaWduYWxzLCBhbmQgVElGX05PVElGWV9SRVNVTUVcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTM4NjUtXHRoYXJkX2lycV9kaXNhYmxlKCk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjM4NjY6XHRpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODY3LVx0ICAgIHJlY2hlY2tfc2lnbmFsc19hbmRfbW11KFx1MDAyNmNvcmVfaW5mbykpIHtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ3NDc9c3RhdGljIGludCBrdm1wcGNfcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDgzNi1cdFx0XHRrdm1wcGNfdmNvcmVfYmxvY2tlZCh2Yyk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjQ4Mzc6XHRcdH0gZWxzZSBpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDgzOC1cdFx0XHRrdm1wcGNfdmNvcmVfcHJlZW1wdCh2Yyk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00ODkxPWludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ5NjAtXHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDk2MTpcdGlmICh4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgfHwgIWt2bS1cdTAwM2VhcmNoLm1tdV9yZWFkeSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDk2Mi1cdFx0Z290byBvdXQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9Nzk9aW50IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy04Ni1cdHdoaWxlICh0cnVlKSB7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo4NzpcdFx0aWYgKF9feGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy04OC1cdFx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQxMgoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1vZGlmaWVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIG15IGF0dGVudGlvbiBpcyBkcmF3biB0bzogYGt2bXBwY19ydW5fY29yZWAsIGBrdm1wcGNfcnVuX3ZjcHVgLCBga3ZtaHZfcnVuX3NpbmdsZV92Y3B1YCwgYW5kIGBrdm1wcGNfcHJlcGFyZV90b19lbnRlcmAuIFRoZXNlIGFyZSB0aGUgb25lcyBJIG5lZWQgdG8gemVybyBpbiBvbiBmb3IgdGhlIGFuYWx5c2lzLiBUaGV5IHdpbGwsIG9mIGNvdXJzZSwgYmUgbGlzdGVkIGluIGBGb2N1c1N5bWJvbHNgIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBmcm9udCBhbmQgY2VudGVyLgoKTm93LCBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zIC0gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYEtWTV9CT09LM1NfNjRfSFZgLCBgS1ZNX0JPT0szU182NF9QUmAsIGBLVk1fRTUwMFYyYCwgYW5kIGBLVk1fRTUwME1DYC4gVGhpcyBoZWxwcyBwdXQgdGhlIGZ1bmN0aW9ucyBpbnRvIGEgdXNlZnVsIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGVzZSB0YXJnZXRzIGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLgoKTmV4dCBzdGVwOiBsZXQmIzM5O3MgZ2V0IHJlYWR5IGZvciB0aGF0IGBzZXQtcmVzdWx0c2AgY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjaGFuZ2VkLCBhbmQgaG93IHRob3NlIGNoYW5nZXMgaW1wYWN0IHRoZSBwZXJmb3JtYW5jZSBvciBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X0hWLCBLVk1fQk9PSzNTXzY0X1BSLCBLVk1fRTUwMFYyLCBLVk1fRTUwME1DPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9CT09LM1NfNjRfSFYmIzM0OywKICAgICYjMzQ7S1ZNX0JPT0szU182NF9QUiYjMzQ7LAogICAgJiMzNDtLVk1fRTUwMFYyJiMzNDssCiAgICAmIzM0O0tWTV9FNTAwTUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1wcGNfcnVuX2NvcmUmIzM0OywKICAgICYjMzQ7a3ZtcHBjX3J1bl92Y3B1JiMzNDssCiAgICAmIzM0O2t2bWh2X3J1bl9zaW5nbGVfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfcHJlcGFyZV90b19lbnRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjRfSFYsIEtWTV9CT09LM1NfNjRfUFIsIEtWTV9FNTAwVjIsIEtWTV9FNTAwTUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOgoKKipDb25maWcgVmVyaWZpY2F0aW9uIENvbmNlcm5zKioKClJpZ2h0LCBzb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgdGhlIHN5c3RlbSBzaG91bGQgYmUgb3BlcmF0aW9uYWwsIGJ1dCB0aGlzIHVuZXhwZWN0ZWQgc2l0dWF0aW9uIGluZGljYXRlcyBhIHBvdGVudGlhbCBpc3N1ZSBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJIGhhdmUgdG8gdmVyaWZ5IHNvbWV0aGluZyBiYXNpYy4gSSYjMzk7bSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBBcmUgdGhleSBub3Qgd2hlcmUgdGhleSBzaG91bGQgYmU/IFRoYXQmIzM5O3Mgd2hhdCBpdCBzb3VuZHMgbGlrZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIHByZWNpc2UgbmFtZXMgb2YgdGhvc2UgY29uZmlndXJhdGlvbiBmaWxlcyB0byBtYWtlIHN1cmUgdGhleSBhcmUgcHJlc2VudCwgYW5kIGFsc28gd2hlcmUgdGhleSBhcmUsIGJ5IHRoZWlyIHBhdGhzLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjaywgYnV0IGEgY3JpdGljYWwgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9IViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mz1jb25maWcgS1ZNX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4MDpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpPa2F5LCBzbyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGlzIGNvbXBsYWluaW5nIGFib3V0IG1pc3NpbmcgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FyZSB0aGUgY29uZmlnIG9wdGlvbnMgZXZlbiBwcmVzZW50IGluIHRoZSBjdXJyZW50IHRyZWU/JiMzNDsgU2VlbXMgbGlrZSBhIGJhc2ljIGNoZWNrLCBidXQgaXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuCgpXYWl0IGEgc2Vjb25k4oCmIEkganVzdCByYW4gYSBgZ3JlcGAgYW5kLCB5ZXMsIHRob3NlIGNvbmZpZ3VyYXRpb25zICphcmUqIGxpc3RlZCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBTbywgd2h5IGlzIHRoZSB0b29sIHJlcG9ydGluZyB0aGV5IGRvbiYjMzk7dCBleGlzdD8gVGltZSB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2Agb25lIG1vcmUgdGltZS4gR290dGEgYmUgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBvciBtaXNpbnRlcnByZXRpbmcgdGhlIG91dHB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYyOlx0XG4gIDYzOlx0Y29uZmlnIEtWTV9CT09LM1NfNjRcbiAgNjQ6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc182NCBwcm9jZXNzb3JzXCYjMzQ7XG4gIDY1Olx0XHRkZXBlbmRzIG9uIFBQQ19CT09LM1NfNjRcbiAgNjY6XHRcdHNlbGVjdCBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbiAgNjc6XHRcdHNlbGVjdCBLVk1cbiAgNjg6XHRcdHNlbGVjdCBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFIGlmICFLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG4gIDY5Olx0XHRzZWxlY3QgUFBDXzY0U19IQVNIX01NVVxuICA3MDpcdFx0c2VsZWN0IFNQQVBSX1RDRV9JT01NVSBpZiBJT01NVV9TVVBQT1JUIFx1MDAyNlx1MDAyNiAoUFBDX1BTRVJJRVMgfHwgUFBDX1BPV0VSTlYpXG4gIDcxOlx0XHRoZWxwXG4gIDcyOlx0XHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBhbmQgYm9vazNzXzMyIGd1ZXN0IGtlcm5lbHNcbiAgNzM6XHRcdCAgaW4gdmlydHVhbCBtYWNoaW5lcyBvbiBib29rM3NfNjQgaG9zdCBwcm9jZXNzb3JzLlxuICA3NDpcdFxuICA3NTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXG4gIDc2Olx0XHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxuICA3NzpcdFxuICA3ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA3OTpcdFxuICA4MDpcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4gIDgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiAgODI6XHRcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NCBcdTAwMjZcdTAwMjYgUFBDX1BPV0VSTlZcbiAgODM6XHRcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG4gIDg0Olx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QTVVcbiAgODU6XHRcdHNlbGVjdCBDTUFcbiAgODY6XHRcdGhlbHBcbiAgODc6XHRcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGd1ZXN0IGtlcm5lbHMgaW5cbiAgODg6XHRcdCAgdmlydHVhbCBtYWNoaW5lcyBvbiBQT1dFUjcgYW5kIG5ld2VyIHByb2Nlc3NvcnMgdGhhdCBoYXZlXG4gIDg5Olx0XHQgIGh5cGVydmlzb3IgbW9kZSBhdmFpbGFibGUgdG8gdGhlIGhvc3QuXG4gIDkwOlx0XG4gIDkxOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCBLVk0gd2lsbCB1c2UgdGhlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uXG4gIDkyOlx0XHQgIGZhY2lsaXRpZXMgb2YgUE9XRVI3IChhbmQgbGF0ZXIpIHByb2Nlc3NvcnMsIG1lYW5pbmcgdGhhdFxuICA5MzpcdFx0ICBndWVzdCBvcGVyYXRpbmcgc3lzdGVtcyB3aWxsIHJ1biBhdCBmdWxsIGhhcmR3YXJlIHNwZWVkXG4gIDk0Olx0XHQgIHVzaW5nIHN1cGVydmlzb3IgYW5kIHVzZXIgbW9kZXMuICBIb3dldmVyLCB0aGlzIGFsc28gbWVhbnNcbiAgOTU6XHRcdCAgdGhhdCBLVk0gaXMgbm90IHVzYWJsZSB1bmRlciBQb3dlclZNIChwSHlwKSwgaXMgb25seSB1c2FibGVcbiAgOTY6XHRcdCAgb24gUE9XRVI3IG9yIGxhdGVyIHByb2Nlc3NvcnMsIGFuZCBjYW5ub3QgZW11bGF0ZSBhXG4gIDk3Olx0XHQgIGRpZmZlcmVudCBwcm9jZXNzb3IgZnJvbSB0aGUgaG9zdCBwcm9jZXNzb3IuXG4gIDk4Olx0XG4gIDk5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTAwOlx0XG4gMTAxOlx0Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbiAxMDI6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiAxMDM6XHRcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NFxuIDEwNDpcdFx0ZGVwZW5kcyBvbiAhQ09OVEVYVF9UUkFDS0lOR19VU0VSXG4gMTA1Olx0XHRzZWxlY3QgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuIDEwNjpcdFx0aGVscFxuIDEwNzpcdFx0ICBTdXBwb3J0IHJ1bm5pbmcgZ3Vlc3Qga2VybmVscyBpbiB2aXJ0dWFsIG1hY2hpbmVzIG9uIHByb2Nlc3NvcnNcbiAxMDg6XHRcdCAgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gdGhlIGhvc3QsIGJ5IHJ1bm5pbmcgdGhlXG4gMTA5Olx0XHQgIGd1ZXN0IGluIHVzZXIgbW9kZSAocHJvYmxlbSBzdGF0ZSkgYW5kIGVtdWxhdGluZyBhbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NzYKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIENvbmZpZ3VyYXRpb24gSW5jb25zaXN0ZW5jaWVzKioKCk9rYXksIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzICpzaG91bGQqIGJlIHByZXNlbnQg4oCTIEkmIzM5O20gY2VydGFpbiBvZiBpdC4gU28sIHdoeSBkaWQgdGhpcyBkYXJuIHRvb2wgcmVwb3J0IHRoYXQgdGhleSYjMzk7cmUgbWlzc2luZz8gSG1tLCBjb3VsZCBpdCBiZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaXNzdWU/IE1heWJlIHRoZSB0b29sIGlzIHJ1bm5pbmcgY2hlY2tzIGFnYWluc3QgeDg2LCB3aGlsZSBteSBzZXR1cCBpcyBkaWZmZXJlbnQuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGhpbmtpbmcuIExldCYjMzk7cyBiYWNrdHJhY2suLi4gVGhlIHRvb2wgaXMgc2VhcmNoaW5nIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgaXRzZWxmLCByaWdodD8gT2theSwgZ290IGl0LgoKSW5zdGVhZCBvZiBmaWdodGluZyB3aXRoIHRoZSBleGlzdGluZyB0b29sLCBtYXliZSBJIGNhbiBzaW1wbGlmeSB0aGluZ3MuIENhbiBJIHNpbXBseSB1c2UgYEtWTV9CT09LM1NfNjRgIGRpcmVjdGx5PyBUaGF0IHdvdWxkIGJ5cGFzcyB0aGUgd2hvbGUgY29uZmlnIGV4aXN0ZW5jZSBjaGVjaywgYW5kIGZvY3VzIG9uIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBhZnRlci4gTGV0JiMzOTtzIHRyeSB0aGF0IGFwcHJvYWNoIGFuZCBzZWUgd2hhdCBoYXBwZW5zLiBUaGlzIGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHRyYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjQ8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0JPT0szU182NCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19ydW5fY29yZSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfcnVuX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtaHZfcnVuX3NpbmdsZV92Y3B1JiMzNDssCiAgICAmIzM0O2t2bXBwY19wcmVwYXJlX3RvX2VudGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSB2Q1BVIHJ1biBsb29wIG9uIFBvd2VyUEMgdG8gdXNlIHRoZSBnZW5lcmljIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBhbmQga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG9wZW4tY29kZWQgbmVlZF9yZXNjaGVkKCkgYW5kIHNpZ25hbF9wZW5kaW5nKCkgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBwZW5kaW5nIHdvcmsgKGxpa2Ugc2lnbmFscyBhbmQgcmVzY2hlZHVsaW5nKSBpcyBoYW5kbGVkIGJlZm9yZSBlbnRlcmluZyB0aGUgZ3Vlc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MzEKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGV4cHJlc3NlZCBhcyB0aG91Z2ggdGhlc2Ugd2VyZSBteSBvd24gdGhvdWdodHM6CgoqKkRlYnVnZ2luZyBhIFN0dWJib3JuIEtWTSBJc3N1ZSoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoaXMgcmlnaHQ/IEkgd2FzIGp1c3QgdHJ5aW5nIHRvIHVzZSBgS1ZNX0JPT0szU182NGAsIGFuZCBub3cgSSYjMzk7bSBzZWVpbmcgdGhhdCBpdCAqYWxzbyogZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBkZWZpbmVkPyBUaGlzIGlzIHN0YXJ0aW5nIHRvIHNtZWxsIGxpa2UgYSBmdW5kYW1lbnRhbCBwcm9ibGVtIHdpdGggaG93IHRoZSBLVk0gZGVmaW5pdGlvbnMgYXJlIHNldCB1cC4gVGltZSB0byByZXRyYWNlIG15IHN0ZXBzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGlzIGdvaW5nIHdyb25nLiBNYXliZSBJJiMzOTt2ZSBnb3QgYSB0eXBvLCBvciBJJiMzOTttIHVzaW5nIGFuIG91dGRhdGVkIHZlcnNpb24gb2Ygc29tZXRoaW5nLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSB0b29sJiMzOTtzIHNvdXJjZSBjb2RlLCBqdXN0IHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgaW1wbGVtZW50ZWQgYWxpZ25zIHdpdGggcmVhbGl0eS4gQWx0ZXJuYXRpdmVseSwgaWYgdGhhdCB0YWtlcyB0b28gbG9uZywgaXQgbWlnaHQganVzdCBiZSBxdWlja2VyIHRvIGZhbGwgYmFjayB0byB0aGUgZ2VuZXJpYyBgS1ZNYCBkZWZpbml0aW9uIGZvciBub3csIGFzc3VtaW5nIGl0IHdpbGwgYWNjb21wbGlzaCB0aGUgdGFzayBhdCBoYW5kLiBOZWVkIHRvIGdldCB0aGlzIHJlc29sdmVkIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtcHBjX3J1bl9jb3JlJiMzNDssCiAgICAmIzM0O2t2bXBwY19ydW5fdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1odl9ydW5fc2luZ2xlX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIHZDUFUgcnVuIGxvb3Agb24gUG93ZXJQQyB0byB1c2UgdGhlIGdlbmVyaWMgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGFuZCBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygb3Blbi1jb2RlZCBuZWVkX3Jlc2NoZWQoKSBhbmQgc2lnbmFsX3BlbmRpbmcoKSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHBlbmRpbmcgd29yayAobGlrZSBzaWduYWxzIGFuZCByZXNjaGVkdWxpbmcpIGlzIGhhbmRsZWQgYmVmb3JlIGVudGVyaW5nIHRoZSBndWVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtcHBjX3J1bl9jb3JlJiMzNDssCiAgICAmIzM0O2t2bXBwY19ydW5fdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1odl9ydW5fc2luZ2xlX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIHZDUFUgcnVuIGxvb3Agb24gUG93ZXJQQyB0byB1c2UgdGhlIGdlbmVyaWMgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGFuZCBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygb3Blbi1jb2RlZCBuZWVkX3Jlc2NoZWQoKSBhbmQgc2lnbmFsX3BlbmRpbmcoKSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHBlbmRpbmcgd29yayAobGlrZSBzaWduYWxzIGFuZCByZXNjaGVkdWxpbmcpIGlzIGhhbmRsZWQgYmVmb3JlIGVudGVyaW5nIHRoZSBndWVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjE0LjM3MDM0NDg4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Nzc3NzY0Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19ydW5fY29yZVwiLFxuICAgIFwia3ZtcHBjX3J1bl92Y3B1XCIsXG4gICAgXCJrdm1odl9ydW5fc2luZ2xlX3ZjcHVcIixcbiAgICBcImt2bXBwY19wcmVwYXJlX3RvX2VudGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIHZDUFUgcnVuIGxvb3Agb24gUG93ZXJQQyB0byB1c2UgdGhlIGdlbmVyaWMgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGFuZCBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygb3Blbi1jb2RlZCBuZWVkX3Jlc2NoZWQoKSBhbmQgc2lnbmFsX3BlbmRpbmcoKSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHBlbmRpbmcgd29yayAobGlrZSBzaWduYWxzIGFuZCByZXNjaGVkdWxpbmcpIGlzIGhhbmRsZWQgYmVmb3JlIGVudGVyaW5nIHRoZSBndWVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDg6MTQuMzcwMzQ5MzcxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcxMTkzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDU0OWU1MDUzMTU3MDNmZDNmMjc1MjVmZmU3YzdiYzM4OGY2NDU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMDE6NDg6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXFxuaW5kZXggOWEwZDFjMWFjYTZjODAuLmI2YmMyZmM4NmRjYTY3IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1xcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1xcbkBAIC0yMiw2ICsyMiw3IEBAIGNvbmZpZyBLVk1cXG4gXFx0c2VsZWN0IEtWTV9DT01NT05cXG4gXFx0c2VsZWN0IEtWTV9WRklPXFxuIFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXFxuK1xcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiBcXG4gY29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxcbiBcXHRib29sXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXFxuaW5kZXggNjFkYmVlYTMxN2YzYjcuLmExYjIwNzc1NjFiYjVhIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXFxuQEAgLTM4NTAsMTAgKzM4NTAsMjAgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxcbiBcXHQgKiBhbmQgcmV0dXJuIHdpdGhvdXQgZ29pbmcgaW50byB0aGUgZ3Vlc3QocykuXFxuIFxcdCAqIElmIHRoZSBtbXVfcmVhZHkgZmxhZyBoYXMgYmVlbiBjbGVhcmVkLCBkb24ndCBnbyBpbnRvIHRoZVxcbiBcXHQgKiBndWVzdCBiZWNhdXNlIHRoYXQgbWVhbnMgYSBIUFQgcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcy5cXG4rXFx0ICpcXG4rXFx0ICogeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGlzIHRoZSBJUlFzLWRpc2FibGVkIHJlY2hlY2sgZm9yXFxuK1xcdCAqIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIChyZXNjaGVkdWxlLCBzaWduYWxzLCBhbmQgVElGX05PVElGWV9SRVNVTUVcXG4rXFx0ICogdGFza193b3JrIHN1Y2ggYXMgdGhlIGRlZmVycmVkIENGUyB0aHJvdHRsZSkuIEl0IGlzIHRoZSBwcmUtUE9XRVI5XFxuK1xcdCAqIGFuYWxvZyBvZiB0aGUgZmluYWwgZ2F0ZSBpbiBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoKSwgYW5kIGEgc3VwZXJzZXRcXG4rXFx0ICogb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjazogaXQgY2F0Y2hlcyB3b3JrIHRoYXQgcmFjZWQgaW4gYWZ0ZXJcXG4rXFx0ICogdGhlIGRyYWluIGluIGt2bXBwY19ydW5fdmNwdSgpLCBzbyBhIENQVS1ib3VuZCB2Q1BVIGlzIHRocm90dGxlZCBoZXJlXFxuK1xcdCAqIGluc3RlYWQgb2YgcnVubmluZyBvbmUgbW9yZSBndWVzdCBkaXNwYXRjaCBwYXN0IGl0cyBxdW90YS4gSVJRcyBhcmVcXG4rXFx0ICogaGFyZC1kaXNhYmxlZCBqdXN0IGFib3ZlLCBzbyB0aGUgbm9uLV9fIHZhcmlhbnQgKHdoaWNoIGFzc2VydHMgdGhhdClcXG4rXFx0ICogaXMgdGhlIGNvcnJlY3Qgb25lLlxcbiBcXHQgKi9cXG4gXFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcXG4gXFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xcbi1cXHRpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IG5lZWRfcmVzY2hlZCgpIHx8XFxuK1xcdGlmIChsYXp5X2lycV9wZW5kaW5nKCkgfHwgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIHx8XFxuIFxcdCAgICByZWNoZWNrX3NpZ25hbHNfYW5kX21tdShcXHUwMDI2Y29yZV9pbmZvKSkge1xcbiBcXHRcXHRsb2NhbF9pcnFfZW5hYmxlKCk7XFxuIFxcdFxcdHZjLVxcdTAwM2V2Y29yZV9zdGF0ZSA9IFZDT1JFX0lOQUNUSVZFO1xcbkBAIC00ODI0LDEwICs0ODM0LDI0IEBAIHN0YXRpYyBpbnQga3ZtcHBjX3J1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0dmMtXFx1MDAzZXJ1bm5lciA9IHZjcHU7XFxuIFxcdFxcdGlmIChuX2NlZGVkID09IHZjLVxcdTAwM2VuX3J1bm5hYmxlKSB7XFxuIFxcdFxcdFxcdGt2bXBwY192Y29yZV9ibG9ja2VkKHZjKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChuZWVkX3Jlc2NoZWQoKSkge1xcbitcXHRcXHR9IGVsc2UgaWYgKF9feGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpKSB7XFxuIFxcdFxcdFxcdGt2bXBwY192Y29yZV9wcmVlbXB0KHZjKTtcXG4tXFx0XFx0XFx0LyogTGV0IHNvbWV0aGluZyBlbHNlIHJ1biAqL1xcbi1cXHRcXHRcXHRjb25kX3Jlc2NoZWRfbG9jayhcXHUwMDI2dmMtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBMZXQgc29tZXRoaW5nIGVsc2UgcnVuLCBhbmQgcnVuIHBlbmRpbmcgZ3Vlc3QtbW9kZVxcbitcXHRcXHRcXHQgKiB3b3JrIChyZXNjaGVkdWxlLCBhbmQgVElGX05PVElGWV9SRVNVTUUgdGFza193b3JrIHN1Y2hcXG4rXFx0XFx0XFx0ICogYXMgdGhlIGRlZmVycmVkIENGUyB0aHJvdHRsZSkgYmVmb3JlIHdlIHdvdWxkIHJlLWVudGVyXFxuK1xcdFxcdFxcdCAqIHRoZSBndWVzdCwgc28gYSBDUFUtYm91bmQgdkNQVSBpcyBhY3R1YWxseSB0aHJvdHRsZWRcXG4rXFx0XFx0XFx0ICogaGVyZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgcGFzdCBpdHMgcXVvdGEuIFRoaXMgaXMgYVxcbitcXHRcXHRcXHQgKiBzdXBlcnNldCBvZiB0aGUgb2xkIG5lZWRfcmVzY2hlZCgpIGNoZWNrLiBVc2UgdGhlIHJhd1xcbitcXHRcXHRcXHQgKiBoZWxwZXIsIG5vdCB0aGUga3ZtXyB3cmFwcGVyOiBzaWduYWxzIChLVk1fRVhJVF9JTlRSXFxuK1xcdFxcdFxcdCAqIGFuZCB0aGUgc2lnbmFsX2V4aXRzIHN0YXQpIGFyZSBhY2NvdW50ZWQgYnkgdGhpcyBwYXRoJ3NcXG4rXFx0XFx0XFx0ICogZXhpc3RpbmcgaGFuZGxpbmcgYmVsb3csIHNvIGdvaW5nIHRocm91Z2ggdGhlIHdyYXBwZXJcXG4rXFx0XFx0XFx0ICogaGVyZSB3b3VsZCBkb3VibGUtY291bnQgdGhlbS4gVGhlIGhlbHBlciBtYXkgc2NoZWR1bGUoKSxcXG4rXFx0XFx0XFx0ICogc28gdGhlIHZjb3JlIGxvY2sgaXMgZHJvcHBlZCBhcm91bmQgaXQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dmMtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHR4ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ2Yy1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFxcdGlmICh2Yy1cXHUwMDNldmNvcmVfc3RhdGUgPT0gVkNPUkVfUFJFRU1QVClcXG4gXFx0XFx0XFx0XFx0a3ZtcHBjX3Zjb3JlX2VuZF9wcmVlbXB0KHZjKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtNDg5OSw4ICs0OTIzLDIxIEBAIGludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAobmVlZF9yZXNjaGVkKCkpXFxuLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHQvKlxcbitcXHQgKiBSdW4gcGVuZGluZyB3b3JrIGJlZm9yZSAocmUtKWVudGVyaW5nIHRoZSBndWVzdCwgbW9zdCBpbXBvcnRhbnRseVxcbitcXHQgKiB0YXNrX3dvcmsgcXVldWVkIHZpYSBUV0FfUkVTVU1FIChlLmcuIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoXFxuK1xcdCAqIHRocm90dGxlLCB3aGljaCBvbmx5IHNldHMgVElGX05PVElGWV9SRVNVTUUpLiBXaXRob3V0IHRoaXMgYSBDUFUtYm91bmRcXG4rXFx0ICogdkNQVSB0aGF0IGtlZXBzIHJldHVybmluZyBSRVNVTUVfR1VFU1QgbmV2ZXIgcmVhY2hlcyBhbiBleGl0LXRvLXVzZXJcXG4rXFx0ICogcG9pbnQsIHNvIHRoZSB0aHJvdHRsZSBpcyBuZXZlciBlbmZvcmNlZCBhbmQgdGhlIHRhc2sgcnVucyBmYXIgYmV5b25kXFxuK1xcdCAqIGl0cyBxdW90YS4gVGhlIGhlbHBlciBhbHNvIGhhbmRsZXMgcmVzY2hlZHVsZSBhbmQgc2lnbmFscywgcmVwbGFjaW5nXFxuK1xcdCAqIHRoZSBjb25kX3Jlc2NoZWQoKSB0aGF0IHdhcyBoZXJlLiBJdCBtYXkgc2NoZWR1bGUoKSwgc28gaXQgcnVucyBiZWZvcmVcXG4rXFx0ICogcHJlZW1wdGlvbiBhbmQgSVJRcyBhcmUgZGlzYWJsZWQsIHdpdGggbm8gdmNvcmUvS1ZNIGxvY2tzIGhlbGQuIFRoaXNcXG4rXFx0ICogaXMgdGhlIHBlci1yZWVudHJ5IHNpdGUgc2hhcmVkIGJ5IHRoZSBiYXJlLW1ldGFsIGFuZCBwc2VyaWVzIChuZXN0ZWQpXFxuK1xcdCAqIHBhdGhzLCBzbyBib3RoIGFyZSBjb3ZlcmVkLlxcbitcXHQgKi9cXG4rXFx0ciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7XFxuK1xcdGlmIChyKVxcdC8qIC1FSU5UUjogc2lnbmFsIHBlbmRpbmcsIGV4aXQgdG8gdXNlcnNwYWNlIChLVk1fRVhJVF9JTlRSKSAqL1xcbitcXHRcXHRyZXR1cm4gcjtcXG4gXFxuIFxcdGt2bXBwY191cGRhdGVfdnBhcyh2Y3B1KTtcXG4gXFxuQEAgLTQ5MTQsOSArNDk1MSwxNCBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnN0YXRlID0gS1ZNUFBDX1ZDUFVfUlVOTkFCTEU7XFxuIFxcbi1cXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuLVxcdFxcdGdvdG8gc2lncGVuZDtcXG4tXFx0aWYgKG5lZWRfcmVzY2hlZCgpIHx8ICFrdm0tXFx1MDAzZWFyY2gubW11X3JlYWR5KVxcbitcXHQvKlxcbitcXHQgKiBGaW5hbCBJUlFzLWRpc2FibGVkIGNoZWNrIGZvciBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayBvciBhbiBNTVUgdGhhdFxcbitcXHQgKiBpcyBub3QgcmVhZHkuIElSUXMgYXJlIGRpc2FibGVkIGhlcmUsIHNvIGJhaWwgdG8gdGhlIG91dGVyIGxvb3AsXFxuK1xcdCAqIHdoaWNoIHJlLWVudGVycyBhbmQgaGFuZGxlcyB0aGUgcGVuZGluZyB3b3JrIHZpYVxcbitcXHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgYWJvdmUgKGV4aXRpbmcgd2l0aCAtRUlOVFIgb24gYVxcbitcXHQgKiBzaWduYWwpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fCAha3ZtLVxcdTAwM2VhcmNoLm1tdV9yZWFkeSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VjcHUgPSBwY3B1O1xcbkBAIC01MDY4LDEwICs1MTEwLDYgQEAgaW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxcbiBcXG4gXFx0cmV0dXJuIHZjcHUtXFx1MDAzZWFyY2gucmV0O1xcbiBcXG4tIHNpZ3BlbmQ6XFxuLVxcdHZjcHUtXFx1MDAzZXN0YXQuc2lnbmFsX2V4aXRzKys7XFxuLVxcdHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnJldCA9IC1FSU5UUjtcXG4gIG91dDpcXG4gXFx0dmNwdS1cXHUwMDNlY3B1ID0gLTE7XFxuIFxcdHZjcHUtXFx1MDAzZWFyY2gudGhyZWFkX2NwdSA9IC0xO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuaW5kZXggMDAzMDIzOTlmYzM3YjQuLmZmMWE5YThkZTVlMGE0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG5AQCAtODQsMjAgKzg0LDM2IEBAIGludCBrdm1wcGNfcHJlcGFyZV90b19lbnRlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGhhcmRfaXJxX2Rpc2FibGUoKTtcXG4gXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuLVxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xcbitcXHRcXHRpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogSGFuZGxlIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIGJlZm9yZSBlbnRlcmluZyB0aGVcXG4rXFx0XFx0XFx0ICogZ3Vlc3Q6IHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRVxcbitcXHRcXHRcXHQgKiB0YXNrX3dvcmsgc3VjaCBhcyB0aGUgZGVmZXJyZWQgQ0ZTIGJhbmR3aWR0aCB0aHJvdHRsZS5cXG4rXFx0XFx0XFx0ICogVGhlIGhlbHBlciBtdXN0IHJ1biB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgbWF5XFxuK1xcdFxcdFxcdCAqIHNjaGVkdWxlKCkuIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgb3Blbi1jb2RlZFxcbitcXHRcXHRcXHQgKiBuZWVkX3Jlc2NoZWQoKS9zaWduYWxfcGVuZGluZygpIGNoZWNrcyBpdCByZXBsYWNlcy4gT25cXG4rXFx0XFx0XFx0ICogYSBwZW5kaW5nIHNpZ25hbCBpdCByZXR1cm5zIC1FSU5UUiBhZnRlclxcbitcXHRcXHRcXHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgaGFzIHNldFxcbitcXHRcXHRcXHQgKiBydW4tXFx1MDAzZWV4aXRfcmVhc29uIChLVk1fRVhJVF9JTlRSKSBhbmQgYnVtcGVkXFxuK1xcdFxcdFxcdCAqIHZjcHUtXFx1MDAzZXN0YXQuc2lnbmFsX2V4aXRzLCBzbyBqdXN0IHJldHVybiB0byB1c2Vyc3BhY2UuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRsb2NhbF9pcnFfZW5hYmxlKCk7XFxuLVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHRcXHRcXHRyID0ga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yayh2Y3B1KTtcXG4gXFx0XFx0XFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRpZiAocikge1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiAtRUlOVFI6IHRoZSBnZW5lcmljIGhlbHBlciBkb2VzIG5vdCBzZXQgdGhlXFxuK1xcdFxcdFxcdFxcdCAqIGV4aXQgdHlwZSwgc28gcmVjb3JkIGl0IGhlcmUgZm9yIHRoZSBFNTAwXFxuK1xcdFxcdFxcdFxcdCAqIENPTkZJR19LVk1fRVhJVF9USU1JTkcgaGlzdG9ncmFtIChhIG5vLW9wXFxuK1xcdFxcdFxcdFxcdCAqIG90aGVyd2lzZSkuIE9ubHkgdGhlIGV4aXQgdHlwZSBpcyBzZXQ7XFxuK1xcdFxcdFxcdFxcdCAqIHNpZ25hbF9leGl0cyB3YXMgYWxyZWFkeSBhY2NvdW50ZWQgYWJvdmUuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBTSUdOQUxfRVhJVFMpO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuLVxcdFxcdFxcdGt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgU0lHTkFMX0VYSVRTKTtcXG4tXFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7XFxuLVxcdFxcdFxcdHIgPSAtRUlOVFI7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHR2Y3B1LVxcdTAwM2Vtb2RlID0gSU5fR1VFU1RfTU9ERTtcXG4gXFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjE0LjgzODE2MTYyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUzMDk5MzkwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX3J1bl9jb3JlXCIsXG4gICAgXCJrdm1wcGNfcnVuX3ZjcHVcIixcbiAgICBcImt2bWh2X3J1bl9zaW5nbGVfdmNwdVwiLFxuICAgIFwia3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0NTQ5ZTUwNTMxNTcwM2ZkM2YyNzUyNWZmZTdjN2JjMzg4ZjY0NTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDAxOjQ4OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXG5pbmRleCA5YTBkMWMxYWNhNmM4MC4uYjZiYzJmYzg2ZGNhNjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1xuQEAgLTIyLDYgKzIyLDcgQEAgY29uZmlnIEtWTVxuIFx0c2VsZWN0IEtWTV9DT01NT05cbiBcdHNlbGVjdCBLVk1fVkZJT1xuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbitcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFxuIGNvbmZpZyBLVk1fQk9PSzNTX0hBTkRMRVJcbiBcdGJvb2xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuaW5kZXggNjFkYmVlYTMxN2YzYjcuLmExYjIwNzc1NjFiYjVhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xuQEAgLTM4NTAsMTAgKzM4NTAsMjAgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxuIFx0ICogYW5kIHJldHVybiB3aXRob3V0IGdvaW5nIGludG8gdGhlIGd1ZXN0KHMpLlxuIFx0ICogSWYgdGhlIG1tdV9yZWFkeSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQsIGRvbid0IGdvIGludG8gdGhlXG4gXHQgKiBndWVzdCBiZWNhdXNlIHRoYXQgbWVhbnMgYSBIUFQgcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcy5cbitcdCAqXG4rXHQgKiB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgaXMgdGhlIElSUXMtZGlzYWJsZWQgcmVjaGVjayBmb3JcbitcdCAqIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIChyZXNjaGVkdWxlLCBzaWduYWxzLCBhbmQgVElGX05PVElGWV9SRVNVTUVcbitcdCAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgdGhyb3R0bGUpLiBJdCBpcyB0aGUgcHJlLVBPV0VSOVxuK1x0ICogYW5hbG9nIG9mIHRoZSBmaW5hbCBnYXRlIGluIGt2bWh2X3J1bl9zaW5nbGVfdmNwdSgpLCBhbmQgYSBzdXBlcnNldFxuK1x0ICogb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjazogaXQgY2F0Y2hlcyB3b3JrIHRoYXQgcmFjZWQgaW4gYWZ0ZXJcbitcdCAqIHRoZSBkcmFpbiBpbiBrdm1wcGNfcnVuX3ZjcHUoKSwgc28gYSBDUFUtYm91bmQgdkNQVSBpcyB0aHJvdHRsZWQgaGVyZVxuK1x0ICogaW5zdGVhZCBvZiBydW5uaW5nIG9uZSBtb3JlIGd1ZXN0IGRpc3BhdGNoIHBhc3QgaXRzIHF1b3RhLiBJUlFzIGFyZVxuK1x0ICogaGFyZC1kaXNhYmxlZCBqdXN0IGFib3ZlLCBzbyB0aGUgbm9uLV9fIHZhcmlhbnQgKHdoaWNoIGFzc2VydHMgdGhhdClcbitcdCAqIGlzIHRoZSBjb3JyZWN0IG9uZS5cbiBcdCAqL1xuIFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcbiBcdGhhcmRfaXJxX2Rpc2FibGUoKTtcbi1cdGlmIChsYXp5X2lycV9wZW5kaW5nKCkgfHwgbmVlZF9yZXNjaGVkKCkgfHxcbitcdGlmIChsYXp5X2lycV9wZW5kaW5nKCkgfHwgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIHx8XG4gXHQgICAgcmVjaGVja19zaWduYWxzX2FuZF9tbXUoXHUwMDI2Y29yZV9pbmZvKSkge1xuIFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4gXHRcdHZjLVx1MDAzZXZjb3JlX3N0YXRlID0gVkNPUkVfSU5BQ1RJVkU7XG5AQCAtNDgyNCwxMCArNDgzNCwyNCBAQCBzdGF0aWMgaW50IGt2bXBwY19ydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHZjLVx1MDAzZXJ1bm5lciA9IHZjcHU7XG4gXHRcdGlmIChuX2NlZGVkID09IHZjLVx1MDAzZW5fcnVubmFibGUpIHtcbiBcdFx0XHRrdm1wcGNfdmNvcmVfYmxvY2tlZCh2Yyk7XG4tXHRcdH0gZWxzZSBpZiAobmVlZF9yZXNjaGVkKCkpIHtcbitcdFx0fSBlbHNlIGlmIChfX3hmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSkge1xuIFx0XHRcdGt2bXBwY192Y29yZV9wcmVlbXB0KHZjKTtcbi1cdFx0XHQvKiBMZXQgc29tZXRoaW5nIGVsc2UgcnVuICovXG4tXHRcdFx0Y29uZF9yZXNjaGVkX2xvY2soXHUwMDI2dmMtXHUwMDNlbG9jayk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBMZXQgc29tZXRoaW5nIGVsc2UgcnVuLCBhbmQgcnVuIHBlbmRpbmcgZ3Vlc3QtbW9kZVxuK1x0XHRcdCAqIHdvcmsgKHJlc2NoZWR1bGUsIGFuZCBUSUZfTk9USUZZX1JFU1VNRSB0YXNrX3dvcmsgc3VjaFxuK1x0XHRcdCAqIGFzIHRoZSBkZWZlcnJlZCBDRlMgdGhyb3R0bGUpIGJlZm9yZSB3ZSB3b3VsZCByZS1lbnRlclxuK1x0XHRcdCAqIHRoZSBndWVzdCwgc28gYSBDUFUtYm91bmQgdkNQVSBpcyBhY3R1YWxseSB0aHJvdHRsZWRcbitcdFx0XHQgKiBoZXJlIGluc3RlYWQgb2YgcnVubmluZyBwYXN0IGl0cyBxdW90YS4gVGhpcyBpcyBhXG4rXHRcdFx0ICogc3VwZXJzZXQgb2YgdGhlIG9sZCBuZWVkX3Jlc2NoZWQoKSBjaGVjay4gVXNlIHRoZSByYXdcbitcdFx0XHQgKiBoZWxwZXIsIG5vdCB0aGUga3ZtXyB3cmFwcGVyOiBzaWduYWxzIChLVk1fRVhJVF9JTlRSXG4rXHRcdFx0ICogYW5kIHRoZSBzaWduYWxfZXhpdHMgc3RhdCkgYXJlIGFjY291bnRlZCBieSB0aGlzIHBhdGgnc1xuK1x0XHRcdCAqIGV4aXN0aW5nIGhhbmRsaW5nIGJlbG93LCBzbyBnb2luZyB0aHJvdWdoIHRoZSB3cmFwcGVyXG4rXHRcdFx0ICogaGVyZSB3b3VsZCBkb3VibGUtY291bnQgdGhlbS4gVGhlIGhlbHBlciBtYXkgc2NoZWR1bGUoKSxcbitcdFx0XHQgKiBzbyB0aGUgdmNvcmUgbG9jayBpcyBkcm9wcGVkIGFyb3VuZCBpdC5cbitcdFx0XHQgKi9cbitcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2Yy1cdTAwM2Vsb2NrKTtcbitcdFx0XHR4ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKTtcbitcdFx0XHRzcGluX2xvY2soXHUwMDI2dmMtXHUwMDNlbG9jayk7XG4gXHRcdFx0aWYgKHZjLVx1MDAzZXZjb3JlX3N0YXRlID09IFZDT1JFX1BSRUVNUFQpXG4gXHRcdFx0XHRrdm1wcGNfdmNvcmVfZW5kX3ByZWVtcHQodmMpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTQ4OTksOCArNDkyMywyMSBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChuZWVkX3Jlc2NoZWQoKSlcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHQvKlxuK1x0ICogUnVuIHBlbmRpbmcgd29yayBiZWZvcmUgKHJlLSllbnRlcmluZyB0aGUgZ3Vlc3QsIG1vc3QgaW1wb3J0YW50bHlcbitcdCAqIHRhc2tfd29yayBxdWV1ZWQgdmlhIFRXQV9SRVNVTUUgKGUuZy4gdGhlIGRlZmVycmVkIENGUyBiYW5kd2lkdGhcbitcdCAqIHRocm90dGxlLCB3aGljaCBvbmx5IHNldHMgVElGX05PVElGWV9SRVNVTUUpLiBXaXRob3V0IHRoaXMgYSBDUFUtYm91bmRcbitcdCAqIHZDUFUgdGhhdCBrZWVwcyByZXR1cm5pbmcgUkVTVU1FX0dVRVNUIG5ldmVyIHJlYWNoZXMgYW4gZXhpdC10by11c2VyXG4rXHQgKiBwb2ludCwgc28gdGhlIHRocm90dGxlIGlzIG5ldmVyIGVuZm9yY2VkIGFuZCB0aGUgdGFzayBydW5zIGZhciBiZXlvbmRcbitcdCAqIGl0cyBxdW90YS4gVGhlIGhlbHBlciBhbHNvIGhhbmRsZXMgcmVzY2hlZHVsZSBhbmQgc2lnbmFscywgcmVwbGFjaW5nXG4rXHQgKiB0aGUgY29uZF9yZXNjaGVkKCkgdGhhdCB3YXMgaGVyZS4gSXQgbWF5IHNjaGVkdWxlKCksIHNvIGl0IHJ1bnMgYmVmb3JlXG4rXHQgKiBwcmVlbXB0aW9uIGFuZCBJUlFzIGFyZSBkaXNhYmxlZCwgd2l0aCBubyB2Y29yZS9LVk0gbG9ja3MgaGVsZC4gVGhpc1xuK1x0ICogaXMgdGhlIHBlci1yZWVudHJ5IHNpdGUgc2hhcmVkIGJ5IHRoZSBiYXJlLW1ldGFsIGFuZCBwc2VyaWVzIChuZXN0ZWQpXG4rXHQgKiBwYXRocywgc28gYm90aCBhcmUgY292ZXJlZC5cbitcdCAqL1xuK1x0ciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7XG4rXHRpZiAocilcdC8qIC1FSU5UUjogc2lnbmFsIHBlbmRpbmcsIGV4aXQgdG8gdXNlcnNwYWNlIChLVk1fRVhJVF9JTlRSKSAqL1xuK1x0XHRyZXR1cm4gcjtcbiBcbiBcdGt2bXBwY191cGRhdGVfdnBhcyh2Y3B1KTtcbiBcbkBAIC00OTE0LDkgKzQ5NTEsMTQgQEAgaW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnN0YXRlID0gS1ZNUFBDX1ZDUFVfUlVOTkFCTEU7XG4gXG4tXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4tXHRcdGdvdG8gc2lncGVuZDtcbi1cdGlmIChuZWVkX3Jlc2NoZWQoKSB8fCAha3ZtLVx1MDAzZWFyY2gubW11X3JlYWR5KVxuK1x0LypcbitcdCAqIEZpbmFsIElSUXMtZGlzYWJsZWQgY2hlY2sgZm9yIHBlbmRpbmcgZ3Vlc3QtbW9kZSB3b3JrIG9yIGFuIE1NVSB0aGF0XG4rXHQgKiBpcyBub3QgcmVhZHkuIElSUXMgYXJlIGRpc2FibGVkIGhlcmUsIHNvIGJhaWwgdG8gdGhlIG91dGVyIGxvb3AsXG4rXHQgKiB3aGljaCByZS1lbnRlcnMgYW5kIGhhbmRsZXMgdGhlIHBlbmRpbmcgd29yayB2aWFcbitcdCAqIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBhYm92ZSAoZXhpdGluZyB3aXRoIC1FSU5UUiBvbiBhXG4rXHQgKiBzaWduYWwpLlxuK1x0ICovXG4rXHRpZiAoeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIHx8ICFrdm0tXHUwMDNlYXJjaC5tbXVfcmVhZHkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0dmNwdS1cdTAwM2VjcHUgPSBwY3B1O1xuQEAgLTUwNjgsMTAgKzUxMTAsNiBAQCBpbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG4gXG4gXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLnJldDtcbiBcbi0gc2lncGVuZDpcbi1cdHZjcHUtXHUwMDNlc3RhdC5zaWduYWxfZXhpdHMrKztcbi1cdHJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7XG4tXHR2Y3B1LVx1MDAzZWFyY2gucmV0ID0gLUVJTlRSO1xuICBvdXQ6XG4gXHR2Y3B1LVx1MDAzZWNwdSA9IC0xO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnRocmVhZF9jcHUgPSAtMTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5pbmRleCAwMDMwMjM5OWZjMzdiNC4uZmYxYTlhOGRlNWUwYTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbkBAIC04NCwyMCArODQsMzYgQEAgaW50IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGhhcmRfaXJxX2Rpc2FibGUoKTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4tXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuK1x0XHRpZiAoX194ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEhhbmRsZSBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayBiZWZvcmUgZW50ZXJpbmcgdGhlXG4rXHRcdFx0ICogZ3Vlc3Q6IHJlc2NoZWR1bGUsIHNpZ25hbHMsIGFuZCBUSUZfTk9USUZZX1JFU1VNRVxuK1x0XHRcdCAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgYmFuZHdpZHRoIHRocm90dGxlLlxuK1x0XHRcdCAqIFRoZSBoZWxwZXIgbXVzdCBydW4gd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgYW5kIG1heVxuK1x0XHRcdCAqIHNjaGVkdWxlKCkuIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgb3Blbi1jb2RlZFxuK1x0XHRcdCAqIG5lZWRfcmVzY2hlZCgpL3NpZ25hbF9wZW5kaW5nKCkgY2hlY2tzIGl0IHJlcGxhY2VzLiBPblxuK1x0XHRcdCAqIGEgcGVuZGluZyBzaWduYWwgaXQgcmV0dXJucyAtRUlOVFIgYWZ0ZXJcbitcdFx0XHQgKiBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgaGFzIHNldFxuK1x0XHRcdCAqIHJ1bi1cdTAwM2VleGl0X3JlYXNvbiAoS1ZNX0VYSVRfSU5UUikgYW5kIGJ1bXBlZFxuK1x0XHRcdCAqIHZjcHUtXHUwMDNlc3RhdC5zaWduYWxfZXhpdHMsIHNvIGp1c3QgcmV0dXJuIHRvIHVzZXJzcGFjZS5cbitcdFx0XHQgKi9cbiBcdFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdFx0ciA9IGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsodmNwdSk7XG4gXHRcdFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xuK1x0XHRcdGlmIChyKSB7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogLUVJTlRSOiB0aGUgZ2VuZXJpYyBoZWxwZXIgZG9lcyBub3Qgc2V0IHRoZVxuK1x0XHRcdFx0ICogZXhpdCB0eXBlLCBzbyByZWNvcmQgaXQgaGVyZSBmb3IgdGhlIEU1MDBcbitcdFx0XHRcdCAqIENPTkZJR19LVk1fRVhJVF9USU1JTkcgaGlzdG9ncmFtIChhIG5vLW9wXG4rXHRcdFx0XHQgKiBvdGhlcndpc2UpLiBPbmx5IHRoZSBleGl0IHR5cGUgaXMgc2V0O1xuK1x0XHRcdFx0ICogc2lnbmFsX2V4aXRzIHdhcyBhbHJlYWR5IGFjY291bnRlZCBhYm92ZS5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0a3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgU0lHTkFMX0VYSVRTKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbi1cdFx0XHRrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIFNJR05BTF9FWElUUyk7XG4tXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSO1xuLVx0XHRcdHIgPSAtRUlOVFI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbiBcdFx0dmNwdS1cdTAwM2Vtb2RlID0gSU5fR1VFU1RfTU9ERTtcbiBcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjE0LjgzODE2MjkwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjA5MDQ0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG93ZXJQQyBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIEtWTSBvbiBQb3dlclBDLCBzcGVjaWZpY2FsbHkgaW4gdGhvc2UgYGJvb2szc19odi5jYCBhbmQgYHBvd2VycGMuY2AgZmlsZXMuIEl0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZWZpbmluZyBob3cgdGhlIHN5c3RlbSBjaGVja3MgZm9yIHBlbmRpbmcgd29yayBiZWZvcmUgdGhyb3dpbmcgdGhlIENQVSBpbnRvIGd1ZXN0IG1vZGUuIFRoZXkncmUgZGl0Y2hpbmcgdGhlIHVzdWFsIGBuZWVkX3Jlc2NoZWQoKWAgYW5kIGBzaWduYWxfcGVuZGluZygpYCBhbmQgYnJpbmdpbmcgaW4gdGhpcyBgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpYCBhbmQgYGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKWAgY29tYm8uIEludGVyZXN0aW5nLi4uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgbnVhbmNlcyBvZiB0aGlzIGFwcHJvYWNoIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZCBtZXRob2RzIHRvIHNlZSB3aHkgdGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gSXQncyBhbHNvIGFkZGluZyBgc2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLYCB0byB0aGUgS2NvbmZpZywgc28gaXQgc2VlbXMgbGlrZSB0aGlzIGlzIGVuYWJsaW5nIG5ldyBiZWhhdmlvci5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmZpZyByZXF1aXJlbWVudHMgZm9yIHRoaXMgcGF0Y2guIEkgYWxyZWFkeSBrbm93IGl0IHJlcXVpcmVzIGBDT05GSUdfS1ZNYCwgYW5kIGl0J3MgbW9zdCBsaWtlbHkgZGVwZW5kZW50IG9uIGVpdGhlciBgQ09ORklHX0tWTV9CT09LM1NfSFZgIG9yIG9uZSBvZiB0aGUgb3RoZXIgQk9PSzNTIG9yIEU1MDBWMiB2YXJpYW50cy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zLCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBncmVwLiBJJ2xsIHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb25zIG9mIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgIGFuZCBga3ZtcHBjX3J1bl9jb3JlYCB0aHJvdWdob3V0IHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMgaW4gS1ZNIGFyZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSBhbmQgd2hhdCB0aGVpciBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFyZS4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIC0gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODoyMC4yNTkwNjkzMjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczMzc3NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWh2X3J1bl9zaW5nbGVfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTM3NzY9c3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODU2LVxcdCAqIHRhc2tfd29yayBzdWNoIGFzIHRoZSBkZWZlcnJlZCBDRlMgdGhyb3R0bGUpLiBJdCBpcyB0aGUgcHJlLVBPV0VSOVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6Mzg1NzpcXHQgKiBhbmFsb2cgb2YgdGhlIGZpbmFsIGdhdGUgaW4ga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KCksIGFuZCBhIHN1cGVyc2V0XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODU4LVxcdCAqIG9mIHRoZSBvbGQgbmVlZF9yZXNjaGVkKCkgY2hlY2s6IGl0IGNhdGNoZXMgd29yayB0aGF0IHJhY2VkIGluIGFmdGVyXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ3NDc9c3RhdGljIGludCBrdm1wcGNfcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00ODkwLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDg5MTppbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00ODkyLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBscGNyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz01MTIyPXN0YXRpYyBpbnQga3ZtcHBjX3ZjcHVfcnVuX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTE5OC1cXHRcXHRpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQVJDSF8zMDApKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTE5OTpcXHRcXHRcXHRyID0ga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHZjcHUsIH4odTY0KTAsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MjAwLVxcdFxcdFxcdFxcdFxcdFxcdCAgdmNwdS1cXHUwMDNlYXJjaC52Y29yZS1cXHUwMDNlbHBjcik7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz0yOTU9bG9uZyBrdm1odl9lbnRlcl9uZXN0ZWRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtMzgzLVxcdGRvIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzozODQ6XFx0XFx0ciA9IGt2bWh2X3J1bl9zaW5nbGVfdmNwdSh2Y3B1LCBoZGVjX2V4cCwgbHBjcik7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtMzg1LVxcdH0gd2hpbGUgKGlzX2t2bXBwY19yZXN1bWVfZ3Vlc3QocikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODoyMC42MzI0NTEwNzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQwOTk5NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFBvd2VyUEMgS1ZNIEJvb2szUyBIeXBlcnZpc29yIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGUgUG93ZXJQQyBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGh5cGVydmlzb3IgYXNwZWN0cy4gVGhlIGZpcnN0IHBsYWNlIHRvIGNoZWNrLCBhbmQgaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSwgaXMgYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0aGUgY29yZSBoeXBlcnZpc29yIGZ1bmN0aW9uYWxpdHkgZm9yIEJvb2szUyBzeXN0ZW1zIHRvIHJlc2lkZS4gTm93LCBiZWZvcmUgSSBldmVuIGdldCB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSAqYWx3YXlzKiBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgYm9vazNzX2h2LmNgLiBJIHdhbnQgdG8ga25vdyB3aGVuIGFuZCB3aHkgdGhpcyBjb2RlIGlzIGNvbXBpbGVkIGFuZCB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQuIEtub3dpbmcgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiB3aWxsIHNhdmUgbWUgYSB0b24gb2YgdGltZSBpbiB0aGUgbG9uZyBydW4sIGhlbHBpbmcgbWUgdW5kZXJzdGFuZCB0aGUgd2lkZXIgcGljdHVyZSBhbmQgYXZvaWQgY2hhc2luZyBteSB0YWlsIHdpdGggY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBzYXkgYWJvdXQgdGhlIGh5cGVydmlzb3Igc3VwcG9ydCBhbmQgaG93IGl0J3MgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjI0LjA3MzQ1MjA0MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODgyNTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib29rM3NfaHYub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlPTYyPWt2bS1odi15ICs9IFxcXFxcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjYzOlxcdGJvb2szc19odi5vIFxcXFxcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTY0LVxcdGJvb2szc19odl9pbnRlcnJ1cHRzLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODoyNC4xNDIyODI1MTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODUwNzU0MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNLUhWIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBlbmFibGVzIGBrdm0taHYteWAuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgZGlyZWN0bHkgdGFyZ2V0aW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGVyZSBhbmQgaG93IHRoaXMgZmxhZyBpcyBzZXQgb3IgaW5mbHVlbmNlZC4gV2UncmUgZGVhbGluZyB3aXRoIEtWTSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGh5cGVydmlzb3IgYW5kIGhvc3QuIElzIGl0IGEga2VybmVsIG1vZHVsZSBwYXJhbWV0ZXI/IEEgYnVpbGQtdGltZSBvcHRpb24/IFBhcnQgb2YgYSBkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlPyBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgbm90IGEgc2ltcGxlIHRvZ2dsZSB3aXRoaW4gYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uJ3MgcHJlZmVyZW5jZXMuIEl0J3MgbGlrZWx5IGRlZXBlciB0aGFuIHRoYXQsIGFuZCBhIHF1aWNrIGxvb2t1cCB3aWxsIHBpbnBvaW50IHRoZSBleGFjdCBzb3VyY2Ugb2YgdGhpcyBjb25maWd1cmF0aW9uLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODkzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDg6MjYuOTkzMDM4MTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDc1MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bS1odi15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjA9ZW5kaWZcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU6NjI6a3ZtLWh2LXkgKz0gXFxcXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjMtXFx0Ym9vazNzX2h2Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODoyNy4wNDcxMTg5NjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc3MzU2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgYGFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGVgIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIE1ha2VmaWxlIGZvciBQb3dlclBDKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgdGhpcyBgTWFrZWZpbGVgIGZvciB0aGUgUG93ZXJQQyBLVk0gYXJjaGl0ZWN0dXJlLiBUaGlzIG1lYW5zIEknbSBsb29raW5nIGZvciB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIG92ZXJhbGwgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBtb2R1bGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGZvciB0aGlzIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MsIGluY2x1ZGUgcGF0aHMsIG9yIHNwZWNpYWwgY29tcGlsZXIgZGVmaW5pdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byBQb3dlclBDJ3MgdW5pcXVlIGNoYXJhY3RlcmlzdGljcywgc3VjaCBhcyBpdHMgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2V0LCBtZW1vcnkgbW9kZWwsIG9yIG90aGVyIGhhcmR3YXJlIHBlY3VsaWFyaXRpZXMgdGhhdCBpbXBhY3QgdmlydHVhbGl6YXRpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRhcmdldHMgcmVsYXRlZCB0byB0aGUgS1ZNIGNvcmUsIHZDUFUgaGFuZGxpbmcsIE1NVSBlbXVsYXRpb24sIGRldmljZSBlbXVsYXRpb24sIGFuZCBhbnkgUG93ZXJQQy1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGlkZW50aWZ5IGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBvdmVyYWxsIEtWTSBmdW5jdGlvbmFsaXR5IG9uIFBvd2VyUEMgc3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjMwLjYyNDQ3NzY5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9wb3dlcnBjL2t2bVxcbiAgIDc6XFx0XFxuICAgODpcXHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbW1vbi1vYmpzLXkgKz0gcG93ZXJwYy5vIGVtdWxhdGVfbG9hZHN0b3JlLm9cXG4gIDExOlxcdG9iai0kKENPTkZJR19LVk1fRVhJVF9USU1JTkcpICs9IHRpbWluZy5vXFxuICAxMjpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU19IQU5ETEVSKSArPSBib29rM3NfZXhwb3J0cy5vXFxuICAxMzpcXHRcXG4gIDE0OlxcdEFGTEFHU19ib29rZV9pbnRlcnJ1cHRzLm8gOj0gLUkkKG9ianRyZWUpLyQob2JqKVxcbiAgMTU6XFx0XFxuICAxNjpcXHRrdm0tZTUwMC1vYmpzIDo9IFxcXFxcXG4gIDE3OlxcdFxcdCQoY29tbW9uLW9ianMteSkgXFxcXFxcbiAgMTg6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gIDE5OlxcdFxcdGJvb2tlLm8gXFxcXFxcbiAgMjA6XFx0XFx0Ym9va2VfZW11bGF0ZS5vIFxcXFxcXG4gIDIxOlxcdFxcdGJvb2tlX2ludGVycnVwdHMubyBcXFxcXFxuICAyMjpcXHRcXHRlNTAwLm8gXFxcXFxcbiAgMjM6XFx0XFx0ZTUwMF9tbXUubyBcXFxcXFxuICAyNDpcXHRcXHRlNTAwX21tdV9ob3N0Lm8gXFxcXFxcbiAgMjU6XFx0XFx0ZTUwMF9lbXVsYXRlLm9cXG4gIDI2OlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9FNTAwVjIpIDo9ICQoa3ZtLWU1MDAtb2JqcylcXG4gIDI3OlxcdFxcbiAgMjg6XFx0a3ZtLWU1MDBtYy1vYmpzIDo9IFxcXFxcXG4gIDI5OlxcdFxcdCQoY29tbW9uLW9ianMteSkgXFxcXFxcbiAgMzA6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gIDMxOlxcdFxcdGJvb2tlLm8gXFxcXFxcbiAgMzI6XFx0XFx0Ym9va2VfZW11bGF0ZS5vIFxcXFxcXG4gIDMzOlxcdFxcdGJvb2tlaHZfaW50ZXJydXB0cy5vIFxcXFxcXG4gIDM0OlxcdFxcdGU1MDBtYy5vIFxcXFxcXG4gIDM1OlxcdFxcdGU1MDBfbW11Lm8gXFxcXFxcbiAgMzY6XFx0XFx0ZTUwMF9tbXVfaG9zdC5vIFxcXFxcXG4gIDM3OlxcdFxcdGU1MDBfZW11bGF0ZS5vXFxuICAzODpcXHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fRTUwME1DKSA6PSAkKGt2bS1lNTAwbWMtb2JqcylcXG4gIDM5OlxcdFxcbiAgNDA6XFx0a3ZtLXByLXkgOj0gXFxcXFxcbiAgNDE6XFx0XFx0ZnB1Lm8gXFxcXFxcbiAgNDI6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gIDQzOlxcdFxcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXFxcXG4gIDQ0OlxcdFxcdGJvb2szc19wci5vIFxcXFxcXG4gIDQ1OlxcdFxcdGJvb2szc19wcl9wYXByLm8gXFxcXFxcbiAgNDY6XFx0XFx0Ym9vazNzX2VtdWxhdGUubyBcXFxcXFxuICA0NzpcXHRcXHRib29rM3NfaW50ZXJydXB0cy5vIFxcXFxcXG4gIDQ4OlxcdFxcdGJvb2szc19tbXVfaHB0ZS5vIFxcXFxcXG4gIDQ5OlxcdFxcdGJvb2szc182NF9tbXVfaG9zdC5vIFxcXFxcXG4gIDUwOlxcdFxcdGJvb2szc182NF9tbXUubyBcXFxcXFxuICA1MTpcXHRcXHRib29rM3NfMzJfbW11Lm9cXG4gIDUyOlxcdFxcbiAgNTM6XFx0a3ZtLWJvb2szc182NC1idWlsdGluLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSKSArPSBcXFxcXFxuICA1NDpcXHRcXHRib29rM3NfNjRfZW50cnkubyBcXFxcXFxuICA1NTpcXHRcXHR0bS5vXFxuICA1NjpcXHRcXG4gIDU3OlxcdGlmZGVmIENPTkZJR19LVk1fQk9PSzNTX1BSX1BPU1NJQkxFXFxuICA1ODpcXHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICs9IFxcXFxcXG4gIDU5OlxcdFxcdGJvb2szc19ybWhhbmRsZXJzLm9cXG4gIDYwOlxcdGVuZGlmXFxuICA2MTpcXHRcXG4gIDYyOlxcdGt2bS1odi15ICs9IFxcXFxcXG4gIDYzOlxcdFxcdGJvb2szc19odi5vIFxcXFxcXG4gIDY0OlxcdFxcdGJvb2szc19odl9pbnRlcnJ1cHRzLm8gXFxcXFxcbiAgNjU6XFx0XFx0Ym9vazNzXzY0X21tdV9odi5vIFxcXFxcXG4gIDY2OlxcdFxcdGJvb2szc182NF9tbXVfcmFkaXgubyBcXFxcXFxuICA2NzpcXHRcXHRib29rM3NfaHZfbmVzdGVkLm9cXG4gIDY4OlxcdFxcbiAgNjk6XFx0a3ZtLWh2LSQoQ09ORklHX1BQQ19VVikgKz0gXFxcXFxcbiAgNzA6XFx0XFx0Ym9vazNzX2h2X3V2bWVtLm9cXG4gIDcxOlxcdFxcbiAgNzI6XFx0a3ZtLWh2LSQoQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTSkgKz0gXFxcXFxcbiAgNzM6XFx0XFx0Ym9vazNzX2h2X3RtLm9cXG4gIDc0OlxcdFxcbiAgNzU6XFx0a3ZtLWJvb2szc182NC1idWlsdGluLXhpY3Mtb2Jqcy0kKENPTkZJR19LVk1fWElDUykgOj0gXFxcXFxcbiAgNzY6XFx0XFx0Ym9vazNzX2h2X3JtX3hpY3Mub1xcbiAgNzc6XFx0XFxuICA3ODpcXHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tdG0tb2Jqcy0kKENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU0pICs9IFxcXFxcXG4gIDc5OlxcdFxcdGJvb2szc19odl90bV9idWlsdGluLm9cXG4gIDgwOlxcdFxcbiAgODE6XFx0aWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG4gIDgyOlxcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgKz0gXFxcXFxcbiAgODM6XFx0XFx0Ym9vazNzX2h2X2htaS5vIFxcXFxcXG4gIDg0OlxcdFxcdGJvb2szc19odl9wOV9lbnRyeS5vIFxcXFxcXG4gIDg1OlxcdFxcdGJvb2szc19odl9ybWhhbmRsZXJzLm8gXFxcXFxcbiAgODY6XFx0XFx0Ym9vazNzX2h2X3JtX21tdS5vIFxcXFxcXG4gIDg3OlxcdFxcdGJvb2szc19odl9yYXMubyBcXFxcXFxuICA4ODpcXHRcXHRib29rM3NfaHZfYnVpbHRpbi5vIFxcXFxcXG4gIDg5OlxcdFxcdGJvb2szc19odl9wOV9wZXJmLm8gXFxcXFxcbiAgOTA6XFx0XFx0Ym9vazNzX2h2X25lc3RlZHYyLm8gXFxcXFxcbiAgOTE6XFx0XFx0Z3Vlc3Qtc3RhdGUtYnVmZmVyLm8gXFxcXFxcbiAgOTI6XFx0XFx0JChrdm0tYm9vazNzXzY0LWJ1aWx0aW4tdG0tb2Jqcy15KSBcXFxcXFxuICA5MzpcXHRcXHQkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi14aWNzLW9ianMteSlcXG4gIDk0OlxcdFxcbiAgOTU6XFx0b2JqLSQoQ09ORklHX0dVRVNUX1NUQVRFX0JVRkZFUl9URVNUKSArPSB0ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5vXFxuICA5NjpcXHRlbmRpZlxcbiAgOTc6XFx0XFxuICA5ODpcXHRrdm0tYm9vazNzXzY0LW9ianMtJChDT05GSUdfS1ZNX1hJQ1MpICs9IFxcXFxcXG4gIDk5OlxcdFxcdGJvb2szc194aWNzLm9cXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODozMC42MjQ1NDkxMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMTMwMDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLVk0gTWFrZWZpbGUgTWF6ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0gYnVpbGQgcHJvY2VzcywgYW5kIEkndmUgZ290IGEgaHVuY2guIEl0IGxvb2tzIGxpa2UgdGhlIHBpZWNlIEknbSBpbnRlcmVzdGVkIGluLCBzcGVjaWZpY2FsbHkgYGt2bS1odi15YCwgaXMgbGlrZWx5IGdldHRpbmcgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJ1aWxkIGJhc2VkIG9uIHRoYXQgYGt2bS1ib29rM3NfNjQtb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hWKWAgY29uZGl0aW9uYWwuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgYnV0IGdpdmVuIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIG1ha2VmaWxlIHN0cnVjdHVyZSwgSSBuZWVkIHRvIGNvbmZpcm0uIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIE1ha2VmaWxlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGNoYWluIGFuZCBleGFjdGx5IGhvdyBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgIGFmZmVjdHMgdGhlIGluY2x1c2lvbiBvZiBga3ZtLWh2LXlgLiBMZXQncyBzZWUgd2hhdCB0aGUgc3Vic2VxdWVudCBydWxlcyBhbmQgdmFyaWFibGVzIHJldmVhbC4gVGhlcmUncyB1c3VhbGx5IG1vcmUgdG8gdW5wYWNrIHdoZW4gaXQgY29tZXMgdG8gS1ZNIGJ1aWxkIHN5c3RlbXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjM0LjM0NTg1MjU4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdGt2bS1ib29rM3NfNjQtb2Jqcy0kKENPTkZJR19LVk1fWElWRSkgKz0gYm9vazNzX3hpdmUubyBib29rM3NfeGl2ZV9uYXRpdmUub1xcbiAxMDI6XFx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX1NQQVBSX1RDRV9JT01NVSkgKz0gYm9vazNzXzY0X3Zpby5vXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianMgOj0gXFxcXFxcbiAxMDU6XFx0XFx0JChjb21tb24tb2Jqcy15KSBcXFxcXFxuIDEwNjpcXHRcXHRib29rM3MubyBcXFxcXFxuIDEwNzpcXHRcXHRib29rM3NfcnRhcy5vIFxcXFxcXG4gMTA4OlxcdFxcdCQoa3ZtLWJvb2szc182NC1vYmpzLXkpXFxuIDEwOTpcXHRcXG4gMTEwOlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpIDo9ICQoa3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcylcXG4gMTExOlxcdFxcbiAxMTI6XFx0a3ZtLWJvb2szc18zMi1vYmpzIDo9IFxcXFxcXG4gMTEzOlxcdFxcdCQoY29tbW9uLW9ianMteSkgXFxcXFxcbiAxMTQ6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gMTE1OlxcdFxcdGZwdS5vIFxcXFxcXG4gMTE2OlxcdFxcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXFxcXG4gMTE3OlxcdFxcdGJvb2szcy5vIFxcXFxcXG4gMTE4OlxcdFxcdGJvb2szc19wci5vIFxcXFxcXG4gMTE5OlxcdFxcdGJvb2szc19lbXVsYXRlLm8gXFxcXFxcbiAxMjA6XFx0XFx0Ym9vazNzX2ludGVycnVwdHMubyBcXFxcXFxuIDEyMTpcXHRcXHRib29rM3NfbW11X2hwdGUubyBcXFxcXFxuIDEyMjpcXHRcXHRib29rM3NfMzJfbW11X2hvc3QubyBcXFxcXFxuIDEyMzpcXHRcXHRib29rM3NfMzJfbW11Lm9cXG4gMTI0OlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfMzIpIDo9ICQoa3ZtLWJvb2szc18zMi1vYmpzKVxcbiAxMjU6XFx0XFxuIDEyNjpcXHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fTVBJQykgKz0gbXBpYy5vXFxuIDEyNzpcXHRcXG4gMTI4OlxcdGt2bS15ICs9ICQoa3ZtLW9ianMtbSkgJChrdm0tb2Jqcy15KVxcbiAxMjk6XFx0XFxuIDEzMDpcXHRvYmotJChDT05GSUdfS1ZNX0U1MDBWMikgKz0ga3ZtLm9cXG4gMTMxOlxcdG9iai0kKENPTkZJR19LVk1fRTUwME1DKSArPSBrdm0ub1xcbiAxMzI6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpICs9IGt2bS5vXFxuIDEzMzpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU18zMikgKz0ga3ZtLm9cXG4gMTM0OlxcdFxcbiAxMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfUFIpICs9IGt2bS1wci5vXFxuIDEzNjpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9IVikgKz0ga3ZtLWh2Lm9cXG4gMTM3OlxcdFxcbiAxMzg6XFx0b2JqLXkgKz0gJChrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy15KVxcbiAxMzk6XFx0XFxuIDE0MDpcXHQjIEtWTSBkb2VzIGEgbG90IGluIHJlYWwtbW9kZSwgYW5kIDY0LWJpdCBCb29rM1MgS0FTQU4gZG9lc24ndCBzdXBwb3J0IHRoYXRcXG4gMTQxOlxcdGlmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0XFxuIDE0MjpcXHRLQVNBTl9TQU5JVElaRSA6PSBuXFxuIDE0MzpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODozNC4zNDU5ODI3ODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDYwNjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UgaGF2ZSBoZXJlLlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBLVk0gQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJhY2luZyBkb3duIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIGtlcm5lbCBtb2R1bGVzLiBJdCBzZWVtcyBsaWtlIGBrdm0taHYub2AgZ2V0cyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBkZWZpbmVkLiBUaGF0IG1ha2VzIHNlbnNlLCBwcmV0dHkgc3BlY2lmaWMuIEFuZCB0aGVuLCBJIHNlZSB0aGF0IGBwb3dlcnBjLm9gIGlzIGJ1aWx0IGlmIGBDT05GSUdfS1ZNYCBpcyBzZXQsIGFuZCBpdCBsb29rcyBsaWtlIGBjb21tb24tb2Jqcy15YCBpcyB0aGUgdHJpZ2dlciBmb3IgdGhhdC5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28sIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgS1ZNX0JPT0szU182NF9IVmAuIFRoYXQgc2hvdWxkIGNsYXJpZnkgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCBJIGNhbiBiZSBtb3JlIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjg5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODozNy41ODA1OTExNjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjE5NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mz1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4MDpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODozNy42MzUyMTQ1MTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0NTk3NjA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgS1ZNX0JPT0szU182NF9IVmAgc3BlY2lmaWNhbGx5IHRhcmdldHMgYGJvb2szc19odi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEFuZCBgS1ZNYCwgbmF0dXJhbGx5LCBpcyB0aGUgdW1icmVsbGEgY29uZmlnIGZvciBgcG93ZXJwYy5jYC4gUmlnaHQsIHNvIGBwb3dlcnBjLmNgIGlzIHBhcnQgb2YgYGNvbW1vbi1vYmpzLXlgIHdoaWNoIHRoZW4gZ2V0cyBpbmNsdWRlZCBpbiBzZXZlcmFsIG90aGVycyBsaWtlIGBrdm0tZTUwMC1vYmpzYCwgYGt2bS1lNTAwbWMtb2Jqc2AsIGBrdm0tYm9vazNzXzY0LW1vZHVsZS1vYmpzYCwgYW5kIGBrdm0tYm9vazNzXzMyLW9ianNgLiBTbywgYENPTkZJR19LVk1gIGlzIHRoZSBwcmltYXJ5LCBvdmVyYXJjaGluZyBjb25maWd1cmF0aW9uLlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgdGhpcyBwYXRjaC4gSXQncyBhZGRpbmcgYFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLYCB0byB0aGUgYEtWTWAgY29uZmlndXJhdGlvbi4gVGhhdCdzIHRoZSBrZXkgYWRkaXRpb24gaGVyZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYWRkaW5nIGEgbmV3IHNlbGVjdCBvcHRpb24uXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBpbXBhY3Qgb24gc3BlY2lmaWMgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggYWZmZWN0czpcblxuKiAgIGBrdm1wcGNfcnVuX2NvcmVgIGluIGBib29rM3NfaHYuY2BcbiogICBga3ZtcHBjX3J1bl92Y3B1YCBpbiBgYm9vazNzX2h2LmNgXG4qICAgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAgaW4gYGJvb2szc19odi5jYFxuXG5TbyB0aGUgY2hhbmdlcyBzZWVtIGZvY3VzZWQgb24gdGhlIGJvb2szc19odiBzaWRlLlxuXG5BbmQgYWxzbzpcblxuKiAgIGBrdm1wcGNfcHJlcGFyZV90b19lbnRlcmAgaW4gYHBvd2VycGMuY2BcblxuVGhpcyBuZWVkcyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkLCB0aGUgd2F5IHRoYXQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdGhyb3VnaG91dCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGNvZGUuIExldCdzIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDg6NDQuMjgxMTkyNDI3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU2Njg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1wcGNfcHJlcGFyZV90b19lbnRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTExMzU9aW50IGt2bXBwY19oYW5kbGVfZXhpdF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xNDM4LVxcdFxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTQzOTpcXHRcXHRzID0ga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIodmNwdSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xNDQwLVxcdFxcdGlmIChzIFxcdTAwM2M9IDApXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTE4MDc9c3RhdGljIGludCBrdm1wcGNfdmNwdV9ydW5fcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xODI1LVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTgyNjpcXHRyZXQgPSBrdm1wcGNfcHJlcGFyZV90b19lbnRlcih2Y3B1KTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTE4MjctXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jPTc2MD1pbnQga3ZtcHBjX3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYy03NjktXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jOjc3MDpcXHRzID0ga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIodmNwdSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jLTc3MS1cXHRpZiAocyBcXHUwMDNjPSAwKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmM9MTAxMT1pbnQga3ZtcHBjX2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV4aXRfbnIpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMtMTQwMS1cXHRpZiAoIShyIFxcdTAwMjYgUkVTVU1FX0hPU1QpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jOjE0MDI6XFx0XFx0cyA9IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHZjcHUpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9va2UuYy0xNDAzLVxcdFxcdGlmIChzIFxcdTAwM2M9IDApXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz02NT1pbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03OC0gKi9cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3OTppbnQga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTgwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE1NC19XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MTU1OkVYUE9SVF9TWU1CT0xfR1BMKGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKTtcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xNTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjQ0LjM0MTc2NTc1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDIzMTY1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTS9Qb3dlclBDIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gbG9va2luZyBhdCB0aGUgY29kZSwgYGt2bXBwY19wcmVwYXJlX3RvX2VudGVyYCBpcyBhIGtleSBmdW5jdGlvbiwgdXNlZCBpbiBib3RoIGBib29rM3NfcHIuY2AgYW5kIGBib29rZS5jYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggY29kZSB0aGF0IGltcGFjdHMgdGhlIGBDT05GSUdfS1ZNX0JPT0szU182NF9QUmAsIGBDT05GSUdfS1ZNX0U1MDBWMmAsIGFuZCBgQ09ORklHX0tWTV9FNTAwTUNgIGNvbmZpZ3VyYXRpb25zLiBUaGUgY2hhbmdlcyBpbiBgYm9vazNzX2h2LmNgIGFyZSBvYnZpb3VzbHkgcmVsZXZhbnQgdG8gYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYC5cblxuU28sIHRvIGVuYWJsZSBldmVyeXRoaW5nLCBJIHNob3VsZCBmb2N1cyBvbiBgS1ZNYCBhbmQgYEtWTV9CT09LM1NfNjRfSFZgLiBgS1ZNX0JPT0szU182NF9IVmAgc3BlY2lmaWNhbGx5IHRhcmdldHMgUG93ZXJQQyBCb29rM1MgNjQtYml0IEhWLCBgS1ZNX0JPT0szU182NF9QUmAgaXMgZm9yIEJvb2szUyA2NC1iaXQgUFIsIGBLVk1fRTUwMFYyYCBpcyBmb3IgRTUwMHYyLCBhbmQgYEtWTV9FNTAwTUNgIGlzIGZvciBFNTAwTUMuXG5cbkFscmlnaHQsIGRvdWJsZS1jaGVja2luZ+KApiB5ZXMsIGVuYWJsaW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBzZWVtcyBjb3JyZWN0OyBpdCBjb3ZlcnMgdGhlIGBib29rM3NfaHYuY2AgbW9kaWZpY2F0aW9ucy4gQW5kIGBLVk1gIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhlIGJhc2UgYHBvd2VycGMuY2AgY2hhbmdlcy5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBmb2NhbCBwb2ludHMgb2YgdGhpcyBwYXRjaD8gVGhlIGNvZGUgc2VlbXMgdG8gYmUgY2hhbmdpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIHRvIHRoZSBndWVzdCwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgY29yZSBLVk0gcnVuIGxvb3AuIEJhc2VkIG9uIHRoZSBjb2RlIGNoYW5nZXMgYW5kIHRoZSBsaWtlbHkgcGF0aCwgdGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2ggYXJlOlxuXG4qICAgYGt2bXBwY19ydW5fY29yZWBcbiogICBga3ZtcHBjX3J1bl92Y3B1YFxuKiAgIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgXG4qICAgYGt2bXBwY19wcmVwYXJlX3RvX2VudGVyYFxuXG5JIHNlZSB0aGF0IGBrdm1wcGNfcnVuX2NvcmVgLCBga3ZtcHBjX3J1bl92Y3B1YCwgYW5kIGBrdm1odl9ydW5fc2luZ2xlX3ZjcHVgIGFyZSBleHRyZW1lbHkgaG90IHBhdGhzIOKAkyB0aGV5J3JlIHRoZSBhY3R1YWwgdkNQVSBleGVjdXRpb24gbG9vcHMuIEJ1dCwgY3J1Y2lhbGx5LCBga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJgIGlzIGFsc28gaW4gdGhlIGxvb3AsIHdoaWNoIG1lYW5zIGl04oCZcyBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcyB3ZWxsLiBHaXZlbiB0aGF0IHRoZSBtb2RpZmljYXRpb24gaXMgZnVuY3Rpb25hbGx5IGNoYW5naW5nIHRoZSBjb3JlIEtWTSBsb2dpYyBhbmQgdGhlIGd1ZXN0IGVudHJ5IHBhdGgsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZvY3VzIG9uIHRob3NlIGZvdXIgZnVuY3Rpb25zIGFzIHRoZSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cywgYXMgdGhleSBhcmUgdGhlIG9ubHkgbW9kaWZpZWQgZnVuY3Rpb25zLlxuXG5KdXN0IG5lZWQgdG8gY29uZmlybSB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlnIG5hbWUgdG8gd29yayB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODo1Mi4zNjQ5MzM1NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzEzMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mz1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo4MDpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODo1Mi40MjAyNTI3MDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NzA2NzI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqUXVpY2sgS1ZNIElkZW50aWZpZXIgQ2hlY2sqKlxuXG5BbHJpZ2h0LCB5ZXAsIGNvbmZpcm1lZC4gYEtWTV9CT09LM1NfNjRfSFZgIGlzIHRoZSBjb3JyZWN0IGlkZW50aWZpZXIgZm9yIHRoYXQgcGFydGljdWxhciBoeXBlcnZpc29yIGNvbmZpZ3VyYXRpb24sIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBlZGdlIGNhc2VzLi4uIHdoYXQgYWJvdXQgYEtWTV9CT09LM1NfNjRfUFJgPyBOZWVkIHRvIHJlY2FsbCB3aGF0IHRoYXQgZGVzaWduYXRpb24gaXMgdXNlZCBmb3IgYW5kIGRvdWJsZS1jaGVjayBJIGhhdmVuJ3QgbWFkZSBhIHdyb25nIGFzc3VtcHRpb24gYmFzZWQgb24gaW5jb21wbGV0ZSBpbmZvcm1hdGlvbiwgYWx3YXlzIGhhdmUgdG8gbG9vayBhdCBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMuIEp1c3QgYSBtZW50YWwgY3Jvc3NjaGVjayB0byBtYWtlIGNlcnRhaW4gYWxsIHRoZSBiYXNlcyBhcmUgY292ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0ODo1NS42NjczMjMxODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTUyMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz04MD1jb25maWcgS1ZNX0JPT0szU182NF9IVlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAxOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMi1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDg6NTUuNzIxMjc5MzEyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTg0NDk0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFzc2Vzc2luZyBLVk0gQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjaGVjayBjb25maXJtcyBpdDogYEtWTV9CT09LM1NfNjRfUFJgIGlzIHRoZSBjb3JyZWN0IGlkZW50aWZpZXIgZm9yIHRoYXQgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBCdXQsIGhvbGQgb24gYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBvdGhlciBzaW1pbGFyIGFyY2hpdGVjdHVyZXMuIFdoYXQgYWJvdXQgdGhlIG51YW5jZXMgb2YgYEtWTV9FNTAwVjJgIGFuZCBgS1ZNX0U1MDBNQ2A/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGRpZmZlcmVuY2VzIGluIHRoZWlyIGZlYXR1cmVzLCBvciBhcmUgdGhleSBjb21wYXRpYmxlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eSBpZiB0aGV5IHdlcmUgdG8gYmUgY29tcGFyZWQ/IFRob3NlIGFyZSBzb21lIGtleSB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGZ1cnRoZXIgaW52ZXN0aWdhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA2NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjU4LjQzOTczMTc1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4Mzc4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9FNTAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xODg9Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTk5OmNvbmZpZyBLVk1fRTUwMFYyXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIwMC1cXHRib29sIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBFNTAwdjIgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTMtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxNDpjb25maWcgS1ZNX0U1MDBNQ1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMTUtXFx0Ym9vbCBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ4OjU4LjQ5NjU3NDYwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDAyNzgzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHRoZXkncmUgcmlnaHQsIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbml0ZWx5IHRoZSBvbmVzIHRvIGVuYWJsZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBuZWVkZWQgYWxsIG9mIHRoZW0g4oCTIGBLVk1gLCBgS1ZNX0JPT0szU182NF9IVmAsIGBLVk1fQk9PSzNTXzY0X1BSYCwgYEtWTV9FNTAwVjJgLCBhbmQgYEtWTV9FNTAwTUNgLiBXYWl0LCBgS1ZNYCBpcyBhbHJlYWR5IGltcGxpY2l0bHkgc2VsZWN0ZWQsIHNvIHRoYXQncyByZWR1bmRhbnQuICBMZXQncyByZWZpbmUgdGhhdCBsaXN0LiBgS1ZNX0JPT0szU182NF9IVmAgYW5kIGBLVk1fQk9PSzNTXzY0X1BSYCBzZWVtIGxpa2UgdGhlIGVzc2VudGlhbCBvbmVzIHRvIGZvY3VzIG9uLiBBY3R1YWxseSwgY29uc2lkZXJpbmcgdGhlIGNoYW5nZXMsIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBwcm9iYWJseSB0aGUgbW9zdCBjcml0aWNhbCwgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBtYWpvcml0eSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUuIFNvLCBsZXQncyBsZWFkIHdpdGggdGhhdCwgYW5kIGFkZCBgS1ZNX0JPT0szU182NF9QUmAgYXMgd2VsbC5cblxuTm93LCBmb3IgdGhlIGtleSBmdW5jdGlvbnMuIFRoZSBwcm9tcHQgbGlzdHMgYGt2bXBwY19ydW5fY29yZWAsIGBrdm1wcGNfcnVuX3ZjcHVgLCBga3ZtaHZfcnVuX3NpbmdsZV92Y3B1YCwgYW5kIGBrdm1wcGNfcHJlcGFyZV90b19lbnRlcmAuIEhtbSwgdGhvc2UgYXJlIGRlZmluaXRlbHkgaG90IHBhdGhzLiBCdXQsIHRoZXkgYXJlICp0aGUgb25seSogZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlwiIFRoZSBxdWVzdGlvbiBpcywgYXJlICp0aGVzZSogZ2VuZXJpYz8gTm8sIEkgZG9uJ3QgdGhpbmsgc28uIFRoZXkgYXJlIEtWTSBlbnRyeSBmdW5jdGlvbnMsIGV4ZWN1dGVkIG9uICpldmVyeSogVk0gZW50cnksIGJ1dCB0aGV5J3JlIHNwZWNpZmljIHRvIEtWTSBvbiBQb3dlclBDLiBUaGV5IGFyZW4ndCB1YmlxdWl0b3VzIGtlcm5lbCBmdW5jdGlvbnMgbGlrZSBga21hbGxvY2Agb3IgYHNjaGVkdWxlYC5cblxuSWYgSSBkb24ndCBsaXN0IHRoZW0sIHdoYXQgZWxzZSBpcyB0aGVyZT8gSSBkb24ndCBzZWUgYW55IG90aGVyIGZ1bmN0aW9ucyBjaGFuZ2VkLiBJIGd1ZXNzIEkgY291bGQgbGVhdmUgdGhpcyBmdW5jdGlvbiBsaXN0IGJsYW5rIGlmIHRoZXkncmUgY29uc2lkZXJlZCB0b28gaG90LiBIb3dldmVyLCBJIHRoaW5rIHRoYXQgdGhlIHBvaW50IG9mIHRoZSBkaXJlY3Rpb25zIGFyZSB0byBwcmV2ZW50IGxpc3RpbmcgdHJ1bHkgZ2VuZXJpYyBmdW5jdGlvbnMgd2hpY2ggc2tldyB0aGUgdGVzdCBkaXN0cmlidXRpb24uIEdpdmVuIHRoYXQgdGhlc2UgYXJlIHNwZWNpZmljIEtWTSBlbnRyeSBmdW5jdGlvbnMsIEkgdGhpbmsgaXQncyBmaW5lIHRvIGluY2x1ZGUgdGhlbS5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvZGUgb25lIG1vcmUgdGltZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4NywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMTo0OTowNS40OTkzNjA5MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTQyNTQwMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXCsuKnhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjA1LjkzODc5Mjc0N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk2Mzg5MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipBbmFseXppbmcgYHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmdgKipcblxuT2theSwgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJ5IGFuZCBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtLiBJbnN0ZWFkIG9mIGJsaW5kbHkgZGl2aW5nIGluLCBJIHNob3VsZCBwYXVzZS4gSSBuZWVkIGEgcmFwaWQgd2F5IHRvIGFzc2VzcyB0aGUgdXNlIG9mIHRoaXMgc3BlY2lmaWMgdGVybTogYHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmdgLiBXaGF0J3MgdGhlIGJlc3QgYXBwcm9hY2g/IFllcCwgYSBgZ3JlcGAgc2hvdWxkIGJlIHRoZSBtb3N0IGVmZmljaWVudCBpbml0aWFsIHByb2JlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgb3ZlcnZpZXcgb2YgKndoZXJlKiB0aGlzIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZSwgd2hpY2ggaW4gdHVybiB3aWxsIHByb3ZpZGUgdml0YWwgY29udGV4dC4gV2l0aCBncmVwLCBJIGNhbiBxdWlja2x5IHNjYW4gdGhlIHNvdXJjZSBmaWxlcyBhbmQgc2VlIHRoZSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIFRoaXMgbWV0aG9kIGlzIHRoZSBwZXJmZWN0IGZpcnN0IHN0ZXAgdG8gZ2FpbiB0aGUgZnVuZGFtZW50YWwgY29udGV4dCBuZWNlc3NhcnkgdG8gdGFrZSB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ0NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjA5LjIzNTE4MzUxNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQxMDM5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTM3NzY9c3RhdGljIG5vaW5saW5lIHZvaWQga3ZtcHBjX3J1bl9jb3JlKHN0cnVjdCBrdm1wcGNfdmNvcmUgKnZjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zODUzLVxcdCAqXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzozODU0OlxcdCAqIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBpcyB0aGUgSVJRcy1kaXNhYmxlZCByZWNoZWNrIGZvclxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg1NS1cXHQgKiBwZW5kaW5nIGd1ZXN0LW1vZGUgd29yayAocmVzY2hlZHVsZSwgc2lnbmFscywgYW5kIFRJRl9OT1RJRllfUkVTVU1FXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTM4NjUtXFx0aGFyZF9pcnFfZGlzYWJsZSgpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6Mzg2NjpcXHRpZiAobGF6eV9pcnFfcGVuZGluZygpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSB8fFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzg2Ny1cXHQgICAgcmVjaGVja19zaWduYWxzX2FuZF9tbXUoXFx1MDAyNmNvcmVfaW5mbykpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDc0Nz1zdGF0aWMgaW50IGt2bXBwY19ydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ4MzYtXFx0XFx0XFx0a3ZtcHBjX3Zjb3JlX2Jsb2NrZWQodmMpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDgzNzpcXHRcXHR9IGVsc2UgaWYgKF9feGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00ODM4LVxcdFxcdFxcdGt2bXBwY192Y29yZV9wcmVlbXB0KHZjKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDg5MT1pbnQga3ZtaHZfcnVuX3NpbmdsZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ5NjAtXFx0ICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0OTYxOlxcdGlmICh4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgfHwgIWt2bS1cXHUwMDNlYXJjaC5tbXVfcmVhZHkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTYyLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9Nzk9aW50IGt2bXBwY19wcmVwYXJlX3RvX2VudGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTg2LVxcdHdoaWxlICh0cnVlKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6ODc6XFx0XFx0aWYgKF9feGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtODgtXFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MDkuMzI5MjkyMDc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDgzMDE0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1vZGlmaWVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG86IGBrdm1wcGNfcnVuX2NvcmVgLCBga3ZtcHBjX3J1bl92Y3B1YCwgYGt2bWh2X3J1bl9zaW5nbGVfdmNwdWAsIGFuZCBga3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJgLiBUaGVzZSBhcmUgdGhlIG9uZXMgSSBuZWVkIHRvIHplcm8gaW4gb24gZm9yIHRoZSBhbmFseXNpcy4gVGhleSB3aWxsLCBvZiBjb3Vyc2UsIGJlIGxpc3RlZCBpbiBgRm9jdXNTeW1ib2xzYCB0byBtYWtlIHN1cmUgdGhleSBhcmUgZnJvbnQgYW5kIGNlbnRlci5cblxuTm93LCBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbnMgLSB3ZSdyZSBsb29raW5nIGF0IGBLVk1fQk9PSzNTXzY0X0hWYCwgYEtWTV9CT09LM1NfNjRfUFJgLCBgS1ZNX0U1MDBWMmAsIGFuZCBgS1ZNX0U1MDBNQ2AuIFRoaXMgaGVscHMgcHV0IHRoZSBmdW5jdGlvbnMgaW50byBhIHVzZWZ1bCBjb250ZXh0LiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGVzZSB0YXJnZXRzIGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5OZXh0IHN0ZXA6IGxldCdzIGdldCByZWFkeSBmb3IgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBjaGFuZ2VkLCBhbmQgaG93IHRob3NlIGNoYW5nZXMgaW1wYWN0IHRoZSBwZXJmb3JtYW5jZSBvciBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTIsIk91dHB1dFRva2VucyI6MjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjE0LjAzNzU5NjIyNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDU3NjkzOSwiRXJyb3IiOiJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NF9IViwgS1ZNX0JPT0szU182NF9QUiwgS1ZNX0U1MDBWMiwgS1ZNX0U1MDBNQyIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQk9PSzNTXzY0X0hWXCIsXG4gICAgXCJLVk1fQk9PSzNTXzY0X1BSXCIsXG4gICAgXCJLVk1fRTUwMFYyXCIsXG4gICAgXCJLVk1fRTUwME1DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX3J1bl9jb3JlXCIsXG4gICAgXCJrdm1wcGNfcnVuX3ZjcHVcIixcbiAgICBcImt2bWh2X3J1bl9zaW5nbGVfdmNwdVwiLFxuICAgIFwia3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X0hWLCBLVk1fQk9PSzNTXzY0X1BSLCBLVk1fRTUwMFYyLCBLVk1fRTUwME1DXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjE0LjE4ODE4NzI3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ1NTI4OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOlxuXG4qKkNvbmZpZyBWZXJpZmljYXRpb24gQ29uY2VybnMqKlxuXG5SaWdodCwgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgdGhlIHN5c3RlbSBzaG91bGQgYmUgb3BlcmF0aW9uYWwsIGJ1dCB0aGlzIHVuZXhwZWN0ZWQgc2l0dWF0aW9uIGluZGljYXRlcyBhIHBvdGVudGlhbCBpc3N1ZSBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJIGhhdmUgdG8gdmVyaWZ5IHNvbWV0aGluZyBiYXNpYy4gSSdtIGdldHRpbmcgYSBmZWVsaW5nIHRoYXQgdGhlcmUncyBhIHByb2JsZW0gd2l0aCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4gQXJlIHRoZXkgbm90IHdoZXJlIHRoZXkgc2hvdWxkIGJlPyBUaGF0J3Mgd2hhdCBpdCBzb3VuZHMgbGlrZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgcHJlY2lzZSBuYW1lcyBvZiB0aG9zZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBwcmVzZW50LCBhbmQgYWxzbyB3aGVyZSB0aGV5IGFyZSwgYnkgdGhlaXIgcGF0aHMuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2ssIGJ1dCBhIGNyaXRpY2FsIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MTcuOTMzNzE4NzY5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzNDcxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9CT09LM1NfNjRfSFZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYzPWNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjE4LjAzOTA3MTQ1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMyOTc4MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIENvbmZpZ3VyYXRpb24gSXNzdWUqKlxuXG5Pa2F5LCBzbyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGlzIGNvbXBsYWluaW5nIGFib3V0IG1pc3NpbmcgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFyZSB0aGUgY29uZmlnIG9wdGlvbnMgZXZlbiBwcmVzZW50IGluIHRoZSBjdXJyZW50IHRyZWU/XCIgU2VlbXMgbGlrZSBhIGJhc2ljIGNoZWNrLCBidXQgaXQncyB0aGUgZmlyc3Qgc3RlcC5cblxuV2FpdCBhIHNlY29uZOKApiBJIGp1c3QgcmFuIGEgYGdyZXBgIGFuZCwgeWVzLCB0aG9zZSBjb25maWd1cmF0aW9ucyAqYXJlKiBsaXN0ZWQgaW4gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AuIFRoYXQncyB1bmV4cGVjdGVkLiBTbywgd2h5IGlzIHRoZSB0b29sIHJlcG9ydGluZyB0aGV5IGRvbid0IGV4aXN0PyBUaW1lIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCBvbmUgbW9yZSB0aW1lLiBHb3R0YSBiZSBjZXJ0YWluIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cywgb3IgbWlzaW50ZXJwcmV0aW5nIHRoZSBvdXRwdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MjEuMzcyMDUzMDQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBLVk1fQk9PSzNTXzY0XFxuICA2NDpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcXFwiXFxuICA2NTpcXHRcXHRkZXBlbmRzIG9uIFBQQ19CT09LM1NfNjRcXG4gIDY2OlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcXG4gIDY3OlxcdFxcdHNlbGVjdCBLVk1cXG4gIDY4OlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFIGlmICFLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuICA2OTpcXHRcXHRzZWxlY3QgUFBDXzY0U19IQVNIX01NVVxcbiAgNzA6XFx0XFx0c2VsZWN0IFNQQVBSX1RDRV9JT01NVSBpZiBJT01NVV9TVVBQT1JUIFxcdTAwMjZcXHUwMDI2IChQUENfUFNFUklFUyB8fCBQUENfUE9XRVJOVilcXG4gIDcxOlxcdFxcdGhlbHBcXG4gIDcyOlxcdFxcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGFuZCBib29rM3NfMzIgZ3Vlc3Qga2VybmVsc1xcbiAgNzM6XFx0XFx0ICBpbiB2aXJ0dWFsIG1hY2hpbmVzIG9uIGJvb2szc182NCBob3N0IHByb2Nlc3NvcnMuXFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNzY6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbiAgODE6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NCBcXHUwMDI2XFx1MDAyNiBQUENfUE9XRVJOVlxcbiAgODM6XFx0XFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG4gIDg0OlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BNVVxcbiAgODU6XFx0XFx0c2VsZWN0IENNQVxcbiAgODY6XFx0XFx0aGVscFxcbiAgODc6XFx0XFx0ICBTdXBwb3J0IHJ1bm5pbmcgdW5tb2RpZmllZCBib29rM3NfNjQgZ3Vlc3Qga2VybmVscyBpblxcbiAgODg6XFx0XFx0ICB2aXJ0dWFsIG1hY2hpbmVzIG9uIFBPV0VSNyBhbmQgbmV3ZXIgcHJvY2Vzc29ycyB0aGF0IGhhdmVcXG4gIDg5OlxcdFxcdCAgaHlwZXJ2aXNvciBtb2RlIGF2YWlsYWJsZSB0byB0aGUgaG9zdC5cXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgS1ZNIHdpbGwgdXNlIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvblxcbiAgOTI6XFx0XFx0ICBmYWNpbGl0aWVzIG9mIFBPV0VSNyAoYW5kIGxhdGVyKSBwcm9jZXNzb3JzLCBtZWFuaW5nIHRoYXRcXG4gIDkzOlxcdFxcdCAgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMgd2lsbCBydW4gYXQgZnVsbCBoYXJkd2FyZSBzcGVlZFxcbiAgOTQ6XFx0XFx0ICB1c2luZyBzdXBlcnZpc29yIGFuZCB1c2VyIG1vZGVzLiAgSG93ZXZlciwgdGhpcyBhbHNvIG1lYW5zXFxuICA5NTpcXHRcXHQgIHRoYXQgS1ZNIGlzIG5vdCB1c2FibGUgdW5kZXIgUG93ZXJWTSAocEh5cCksIGlzIG9ubHkgdXNhYmxlXFxuICA5NjpcXHRcXHQgIG9uIFBPV0VSNyBvciBsYXRlciBwcm9jZXNzb3JzLCBhbmQgY2Fubm90IGVtdWxhdGUgYVxcbiAgOTc6XFx0XFx0ICBkaWZmZXJlbnQgcHJvY2Vzc29yIGZyb20gdGhlIGhvc3QgcHJvY2Vzc29yLlxcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwMDpcXHRcXG4gMTAxOlxcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuIDEwMjpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG4gMTAzOlxcdFxcdGRlcGVuZHMgb24gS1ZNX0JPT0szU182NFxcbiAxMDQ6XFx0XFx0ZGVwZW5kcyBvbiAhQ09OVEVYVF9UUkFDS0lOR19VU0VSXFxuIDEwNTpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbiAxMDY6XFx0XFx0aGVscFxcbiAxMDc6XFx0XFx0ICBTdXBwb3J0IHJ1bm5pbmcgZ3Vlc3Qga2VybmVscyBpbiB2aXJ0dWFsIG1hY2hpbmVzIG9uIHByb2Nlc3NvcnNcXG4gMTA4OlxcdFxcdCAgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gdGhlIGhvc3QsIGJ5IHJ1bm5pbmcgdGhlXFxuIDEwOTpcXHRcXHQgIGd1ZXN0IGluIHVzZXIgbW9kZSAocHJvYmxlbSBzdGF0ZSkgYW5kIGVtdWxhdGluZyBhbGxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MjEuMzcyMjI3MTk3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mjc0MDg4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIENvbmZpZ3VyYXRpb24gSW5jb25zaXN0ZW5jaWVzKipcblxuT2theSwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgKnNob3VsZCogYmUgcHJlc2VudCDigJMgSSdtIGNlcnRhaW4gb2YgaXQuIFNvLCB3aHkgZGlkIHRoaXMgZGFybiB0b29sIHJlcG9ydCB0aGF0IHRoZXkncmUgbWlzc2luZz8gSG1tLCBjb3VsZCBpdCBiZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaXNzdWU/IE1heWJlIHRoZSB0b29sIGlzIHJ1bm5pbmcgY2hlY2tzIGFnYWluc3QgeDg2LCB3aGlsZSBteSBzZXR1cCBpcyBkaWZmZXJlbnQuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGhpbmtpbmcuIExldCdzIGJhY2t0cmFjay4uLiBUaGUgdG9vbCBpcyBzZWFyY2hpbmcgd2l0aGluIHRoZSBrZXJuZWwgdHJlZSBpdHNlbGYsIHJpZ2h0PyBPa2F5LCBnb3QgaXQuXG5cbkluc3RlYWQgb2YgZmlnaHRpbmcgd2l0aCB0aGUgZXhpc3RpbmcgdG9vbCwgbWF5YmUgSSBjYW4gc2ltcGxpZnkgdGhpbmdzLiBDYW4gSSBzaW1wbHkgdXNlIGBLVk1fQk9PSzNTXzY0YCBkaXJlY3RseT8gVGhhdCB3b3VsZCBieXBhc3MgdGhlIHdob2xlIGNvbmZpZyBleGlzdGVuY2UgY2hlY2ssIGFuZCBmb2N1cyBvbiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IEknbSBhZnRlci4gTGV0J3MgdHJ5IHRoYXQgYXBwcm9hY2ggYW5kIHNlZSB3aGF0IGhhcHBlbnMuIFRoaXMgZmVlbHMgbGlrZSB0aGUgcmlnaHQgdHJhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDc2LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MjUuODk5NjM4NDQzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTY0NjAzLCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0IiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9CT09LM1NfNjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfcnVuX2NvcmVcIixcbiAgICBcImt2bXBwY19ydW5fdmNwdVwiLFxuICAgIFwia3ZtaHZfcnVuX3NpbmdsZV92Y3B1XCIsXG4gICAgXCJrdm1wcGNfcHJlcGFyZV90b19lbnRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSB2Q1BVIHJ1biBsb29wIG9uIFBvd2VyUEMgdG8gdXNlIHRoZSBnZW5lcmljIHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKSBhbmQga3ZtX3hmZXJfdG9fZ3Vlc3RfbW9kZV9oYW5kbGVfd29yaygpIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG9wZW4tY29kZWQgbmVlZF9yZXNjaGVkKCkgYW5kIHNpZ25hbF9wZW5kaW5nKCkgY2hlY2tzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBwZW5kaW5nIHdvcmsgKGxpa2Ugc2lnbmFscyBhbmQgcmVzY2hlZHVsaW5nKSBpcyBoYW5kbGVkIGJlZm9yZSBlbnRlcmluZyB0aGUgZ3Vlc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjRcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDE6NDk6MjYuMDMzODEzOTg2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTQ0OTU3MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCB0aGVzZSB3ZXJlIG15IG93biB0aG91Z2h0czpcblxuKipEZWJ1Z2dpbmcgYSBTdHViYm9ybiBLVk0gSXNzdWUqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoaXMgcmlnaHQ/IEkgd2FzIGp1c3QgdHJ5aW5nIHRvIHVzZSBgS1ZNX0JPT0szU182NGAsIGFuZCBub3cgSSdtIHNlZWluZyB0aGF0IGl0ICphbHNvKiBkb2Vzbid0IHNlZW0gdG8gYmUgZGVmaW5lZD8gVGhpcyBpcyBzdGFydGluZyB0byBzbWVsbCBsaWtlIGEgZnVuZGFtZW50YWwgcHJvYmxlbSB3aXRoIGhvdyB0aGUgS1ZNIGRlZmluaXRpb25zIGFyZSBzZXQgdXAuIFRpbWUgdG8gcmV0cmFjZSBteSBzdGVwcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBpcyBnb2luZyB3cm9uZy4gTWF5YmUgSSd2ZSBnb3QgYSB0eXBvLCBvciBJJ20gdXNpbmcgYW4gb3V0ZGF0ZWQgdmVyc2lvbiBvZiBzb21ldGhpbmcuXG5cbkdpdmVuIHRoaXMsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSB0b29sJ3Mgc291cmNlIGNvZGUsIGp1c3QgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGltcGxlbWVudGVkIGFsaWducyB3aXRoIHJlYWxpdHkuIEFsdGVybmF0aXZlbHksIGlmIHRoYXQgdGFrZXMgdG9vIGxvbmcsIGl0IG1pZ2h0IGp1c3QgYmUgcXVpY2tlciB0byBmYWxsIGJhY2sgdG8gdGhlIGdlbmVyaWMgYEtWTWAgZGVmaW5pdGlvbiBmb3Igbm93LCBhc3N1bWluZyBpdCB3aWxsIGFjY29tcGxpc2ggdGhlIHRhc2sgYXQgaGFuZC4gTmVlZCB0byBnZXQgdGhpcyByZXNvbHZlZCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzEsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAxOjQ5OjMwLjAyODMxMTg0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTc4MjgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX3J1bl9jb3JlXCIsXG4gICAgXCJrdm1wcGNfcnVuX3ZjcHVcIixcbiAgICBcImt2bWh2X3J1bl9zaW5nbGVfdmNwdVwiLFxuICAgIFwia3ZtcHBjX3ByZXBhcmVfdG9fZW50ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gdkNQVSBydW4gbG9vcCBvbiBQb3dlclBDIHRvIHVzZSB0aGUgZ2VuZXJpYyB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCkgYW5kIGt2bV94ZmVyX3RvX2d1ZXN0X21vZGVfaGFuZGxlX3dvcmsoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBvcGVuLWNvZGVkIG5lZWRfcmVzY2hlZCgpIGFuZCBzaWduYWxfcGVuZGluZygpIGNoZWNrcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgcGVuZGluZyB3b3JrIChsaWtlIHNpZ25hbHMgYW5kIHJlc2NoZWR1bGluZykgaXMgaGFuZGxlZCBiZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19ydW5fY29yZVwiLFxuICAgIFwia3ZtcHBjX3J1bl92Y3B1XCIsXG4gICAgXCJrdm1odl9ydW5fc2luZ2xlX3ZjcHVcIixcbiAgICBcImt2bXBwY19wcmVwYXJlX3RvX2VudGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIHZDUFUgcnVuIGxvb3Agb24gUG93ZXJQQyB0byB1c2UgdGhlIGdlbmVyaWMgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpIGFuZCBrdm1feGZlcl90b19ndWVzdF9tb2RlX2hhbmRsZV93b3JrKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygb3Blbi1jb2RlZCBuZWVkX3Jlc2NoZWQoKSBhbmQgc2lnbmFsX3BlbmRpbmcoKSBjaGVja3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHBlbmRpbmcgd29yayAobGlrZSBzaWduYWxzIGFuZCByZXNjaGVkdWxpbmcpIGlzIGhhbmRsZWQgYmVmb3JlIGVudGVyaW5nIHRoZSBndWVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjspc[1] Phase: Succeeded StartedAt: 2026-07-02 01:49:42 +0000 UTC FinishedAt: 2026-07-02 01:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 01:49:42 +0000 UTC FinishedAt: 2026-07-02 01:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2] Phase: Succeeded StartedAt: 2026-07-02 01:49:42 +0000 UTC FinishedAt: 2026-07-02 02:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 01:49:42 +0000 UTC FinishedAt: 2026-07-02 02:49:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 01:49:42 +0000 UTC FinishedAt: 2026-07-02 01:51:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 01:49:42 +0000 UTC FinishedAt: 2026-07-02 01:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowcjspc/series-workflowcjspc-convert-artifact-953686551/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 01:51:01 +0000 UTC FinishedAt: 2026-07-02 02:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 01:51:01 +0000 UTC FinishedAt: 2026-07-02 02:16:57 +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:*74d386c7-2ff8-42db-9856-a0a184a470c7,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-workflowcjspc/series-workflowcjspc-convert-artifact-953686551/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": "daa43e07-d32f-4377-87ae-fc4c35a1e1b4", "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-workflowcjspc/series-workflowcjspc-build-action-17487725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 01:51:01 +0000 UTC FinishedAt: 2026-07-02 02:16:47 +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:*74d386c7-2ff8-42db-9856-a0a184a470c7,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-workflowcjspc/series-workflowcjspc-convert-artifact-953686551/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": "daa43e07-d32f-4377-87ae-fc4c35a1e1b4", "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-workflowcjspc/series-workflowcjspc-build-action-17487725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 02:16:57 +0000 UTC FinishedAt: 2026-07-02 02:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 02:16:57 +0000 UTC FinishedAt: 2026-07-02 02:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 02:16:57 +0000 UTC FinishedAt: 2026-07-02 02:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 02:16:57 +0000 UTC FinishedAt: 2026-07-02 02:17:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowcjspc/series-workflowcjspc-convert-artifact-767391046/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 02:17:07 +0000 UTC FinishedAt: 2026-07-02 02:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 02:17:07 +0000 UTC FinishedAt: 2026-07-02 02:19:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*daa43e07-d32f-4377-87ae-fc4c35a1e1b4,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-workflowcjspc/series-workflowcjspc-build-action-17487725/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-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 02:19:32 +0000 UTC FinishedAt: 2026-07-02 02:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 02:19:32 +0000 UTC FinishedAt: 2026-07-02 02:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 02:19:32 +0000 UTC FinishedAt: 2026-07-02 02:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 02:19:32 +0000 UTC FinishedAt: 2026-07-02 02:46:41 +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:*74d386c7-2ff8-42db-9856-a0a184a470c7,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-workflowcjspc/series-workflowcjspc-convert-artifact-767391046/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": "5bd99312-cdc1-42c3-b417-8b2f7a10427d", "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-workflowcjspc/series-workflowcjspc-build-action-1630140554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 02:19:32 +0000 UTC FinishedAt: 2026-07-02 02:46:31 +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:*74d386c7-2ff8-42db-9856-a0a184a470c7,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-workflowcjspc/series-workflowcjspc-convert-artifact-767391046/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": "5bd99312-cdc1-42c3-b417-8b2f7a10427d", "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-workflowcjspc/series-workflowcjspc-build-action-1630140554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 02:46:41 +0000 UTC FinishedAt: 2026-07-02 02:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 02:46:41 +0000 UTC FinishedAt: 2026-07-02 02:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 02:46:41 +0000 UTC FinishedAt: 2026-07-02 02:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 02:46:41 +0000 UTC FinishedAt: 2026-07-02 02:48:28 +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:*5bd99312-cdc1-42c3-b417-8b2f7a10427d,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-workflowcjspc/series-workflowcjspc-build-action-1630140554/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-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 02:48:38 +0000 UTC FinishedAt: 2026-07-02 02:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 02:48:38 +0000 UTC FinishedAt: 2026-07-02 02:49:59 +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":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"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:*daa43e07-d32f-4377-87ae-fc4c35a1e1b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5bd99312-cdc1-42c3-b417-8b2f7a10427d,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-workflowcjspc/series-workflowcjspc-build-action-17487725/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-workflowcjspc/series-workflowcjspc-build-action-1630140554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 02:48:38 +0000 UTC FinishedAt: 2026-07-02 02:48:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 02:48:38 +0000 UTC FinishedAt: 2026-07-02 02:48:45 +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":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"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-workflowcjspc/series-workflowcjspc-convert-artifact-1050657803/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 02:48:38 +0000 UTC FinishedAt: 2026-07-02 02:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 02:48:38 +0000 UTC FinishedAt: 2026-07-02 02:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 02:48:38 +0000 UTC FinishedAt: 2026-07-02 02:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 02:48:48 +0000 UTC FinishedAt: 2026-07-02 02:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcjspc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_run_core","kvmppc_run_vcpu","kvmhv_run_single_vcpu","kvmppc_prepare_to_enter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"266984f2-b664-4afb-a82b-b064f675b4ed","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 02:48:48 +0000 UTC FinishedAt: 2026-07-02 02:49:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*daa43e07-d32f-4377-87ae-fc4c35a1e1b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5bd99312-cdc1-42c3-b417-8b2f7a10427d,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-workflowcjspc/series-workflowcjspc-build-action-17487725/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-workflowcjspc/series-workflowcjspc-build-action-1630140554/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-workflowcjspc/series-workflowcjspc-convert-artifact-1050657803/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,}