Name: series-workflow5pgkg Phase: Succeeded StartedAt: 2026-06-26 05:50:53 +0000 UTC FinishedAt: 2026-06-26 06:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[0] Phase: Succeeded StartedAt: 2026-06-26 05:50:53 +0000 UTC FinishedAt: 2026-06-26 06:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 05:50:53 +0000 UTC FinishedAt: 2026-06-26 06:01:28 +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", "RISCV_PMU_SBI" ], "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", "RISCV_PMU_SBI" ], "series_id": "76bfd74a-c012-44d8-90cc-2b2a0a290e8e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_vcpu_pmu_ctr_start", "kvm_riscv_vcpu_pmu_ctr_stop" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtSSVNDVl9QTVVfU0JJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBlYjY3YzFhZWY2NGViYjk3MGExOTFiMTA3MjM4MTk1ZGJlMjhhMmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAwNjowMDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuY1xuaW5kZXggYmI0NmRjYmZiMjRkYTcuLjIwMjViNjY0OTYxYzgwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuY1xuQEAgLTU4Niw3ICYjNDM7NTg2LDcgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLFxuIFx0XHR9XG4gXHR9XG4gXHQvKiBTdGFydCB0aGUgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBhbmQgcmVxdWVzdGVkIGJ5IHRoZSBndWVzdCAqL1xuLVx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZjdHJfbWFzaywgUklTQ1ZfTUFYX0NPVU5URVJTKSB7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZjdHJfbWFzaywgQklUU19QRVJfTE9ORykge1xuIFx0XHRwbWNfaW5kZXggPSBhcnJheV9pbmRleF9ub3NwZWMoaSAmIzQzOyBjdHJfYmFzZSxcbiBcdFx0XHRcdFx0ICAgICAgIFJJU0NWX0tWTV9NQVhfQ09VTlRFUlMpO1xuIFx0XHRpZiAoIXRlc3RfYml0KHBtY19pbmRleCwga3ZwbXUtXHUwMDNlcG1jX2luX3VzZSkpXG5AQCAtNjU4LDcgJiM0Mzs2NTgsNyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcbiBcdH1cbiBcbiBcdC8qIFN0b3AgdGhlIGNvdW50ZXJzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgYW5kIHJlcXVlc3RlZCBieSB0aGUgZ3Vlc3QgKi9cbi1cdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2Y3RyX21hc2ssIFJJU0NWX01BWF9DT1VOVEVSUykge1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2Y3RyX21hc2ssIEJJVFNfUEVSX0xPTkcpIHtcbiBcdFx0cG1jX2luZGV4ID0gYXJyYXlfaW5kZXhfbm9zcGVjKGkgJiM0MzsgY3RyX2Jhc2UsXG4gXHRcdFx0XHRcdCAgICAgICBSSVNDVl9LVk1fTUFYX0NPVU5URVJTKTtcbiBcdFx0aWYgKCF0ZXN0X2JpdChwbWNfaW5kZXgsIGt2cG11LVx1MDAzZXBtY19pbl91c2UpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtSSVNDVl9QTVVfU0JJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGViNjdjMWFlZjY0ZWJiOTcwYTE5MWIxMDcyMzgxOTVkYmUyOGEyZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDA2OjAwOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMKaW5kZXggYmI0NmRjYmZiMjRkYTcuLjIwMjViNjY0OTYxYzgwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMKQEAgLTU4Niw3ICYjNDM7NTg2LDcgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLAogCQl9CiAJfQogCS8qIFN0YXJ0IHRoZSBjb3VudGVycyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGFuZCByZXF1ZXN0ZWQgYnkgdGhlIGd1ZXN0ICovCi0JZm9yX2VhY2hfc2V0X2JpdChpLCAmYW1wO2N0cl9tYXNrLCBSSVNDVl9NQVhfQ09VTlRFUlMpIHsKJiM0MzsJZm9yX2VhY2hfc2V0X2JpdChpLCAmYW1wO2N0cl9tYXNrLCBCSVRTX1BFUl9MT05HKSB7CiAJCXBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICYjNDM7IGN0cl9iYXNlLAogCQkJCQkgICAgICAgUklTQ1ZfS1ZNX01BWF9DT1VOVEVSUyk7CiAJCWlmICghdGVzdF9iaXQocG1jX2luZGV4LCBrdnBtdS0mZ3Q7cG1jX2luX3VzZSkpCkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLAogCX0KIAogCS8qIFN0b3AgdGhlIGNvdW50ZXJzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgYW5kIHJlcXVlc3RlZCBieSB0aGUgZ3Vlc3QgKi8KLQlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7Y3RyX21hc2ssIFJJU0NWX01BWF9DT1VOVEVSUykgewomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7Y3RyX21hc2ssIEJJVFNfUEVSX0xPTkcpIHsKIAkJcG1jX2luZGV4ID0gYXJyYXlfaW5kZXhfbm9zcGVjKGkgJiM0MzsgY3RyX2Jhc2UsCiAJCQkJCSAgICAgICBSSVNDVl9LVk1fTUFYX0NPVU5URVJTKTsKIAkJaWYgKCF0ZXN0X2JpdChwbWNfaW5kZXgsIGt2cG11LSZndDtwbWNfaW5fdXNlKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFJJU0MtViBLVk0gUE1VIENvdW50ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFsdGVyaW5nIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHN1YnN0aXR1dGluZyBgUklTQ1ZfTUFYX0NPVU5URVJTYCB3aXRoIGBCSVRTX1BFUl9MT05HYCB3aXRoaW4gdGhlIGBmb3JfZWFjaF9zZXRfYml0YCBsb29wIGluIHRoZSBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3BgIGZ1bmN0aW9ucy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSwgYXMgaXQgY2hhbmdlcyB0aGUgdXBwZXIgYm91bmQgb2YgdGhlIGxvb3AsIHdoaWNoIGRpY3RhdGVzIGhvdyB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlIGNvdW50ZXIgbWFzay4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc2NlcnRhaW4gd2h5IHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBzd2l0Y2hpbmcgZnJvbSBhIGhhcmR3YXJlLWRlZmluZWQgbGltaXQgKGBSSVNDVl9NQVhfQ09VTlRFUlNgKSB0byBhIGRhdGEtdHlwZSBkZXBlbmRlbnQgbGltaXQgKGBCSVRTX1BFUl9MT05HYCkuIElzIHRoaXMgYSBwbGF0Zm9ybSBhZGFwdGF0aW9uPyBQZXJoYXBzIHdlIGFyZSB0cnlpbmcgdG8gZ2VuZXJhbGl6ZSB0aGUgY29kZSB0byBoYW5kbGUgdmFyaWFibGUgbnVtYmVycyBvZiBwZXJmb3JtYW5jZSBjb3VudGVycyBhY3Jvc3MgZGlmZmVyZW50IFJJU0MtViBpbXBsZW1lbnRhdGlvbnM/IE9yLCBtYXliZSB0aGlzIGlzIGEgYnVnIGZpeCDigJMgcGVyaGFwcyB0aGUgb3JpZ2luYWwgYFJJU0NWX01BWF9DT1VOVEVSU2Agd2FzIGluY29ycmVjdC4gV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGlzIGNoYW5nZSBpcyBzYWZlLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQuIEkgd2FudCB0byBzZWUgaG93IGBjdHJfbWFza2AgaXMgZGVmaW5lZCBhbmQgbWFuaXB1bGF0ZWQuIElzIGBSSVNDVl9NQVhfQ09VTlRFUlNgIHVzZWQgZWxzZXdoZXJlIGluIHRoaXMgZmlsZSwgYW5kIGlmIHNvLCBob3cgaXMgaXQgYmVpbmcgaGFuZGxlZCBub3c/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgYEJJVFNfUEVSX0xPTkdgIGlzIHNtYWxsZXIgdGhhbiwgb3IgbGFyZ2VyIHRoYW4sIGBSSVNDVl9NQVhfQ09VTlRFUlNgIGluIGRpZmZlcmVudCBSSVNDLVYgaW1wbGVtZW50YXRpb25zPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG9mZi1ieS1vbmUgZXJyb3JzIG9yIHVuaW50ZW5kZWQgYmVoYXZpb3IgcmVsYXRlZCB0byBjb3VudGVyIGluaXRpYWxpemF0aW9uIG9yIHN0YXRlIG1hbmFnZW1lbnQuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvcnJlY3RseSBpdGVyYXRlcyB0aHJvdWdoIGFuZCBhY3RpdmF0ZXMvZGVhY3RpdmF0ZXMgdGhlIGludGVuZGVkIHBlcmZvcm1hbmNlIGNvdW50ZXJzLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1lbW9yeSBsYXlvdXQgb2YgdGhlIGNvdW50ZXJzIGlzIGtleSB0byBteSBldmFsdWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM9NTQ1PWludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNpZHgsXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYy01NjAtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jOjU2MTppbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3RyX2Jhc2UsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTU2Mi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGN0cl9tYXNrLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1NjQgaXZhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgdmNwdV9wbXUuY2AgZm9yIEFuYWx5c2lzKioKCk9rYXksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBSSVNDLVYgS1ZNIGhhbmRsZXMgdmlydHVhbCBDUFUgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0cy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGNvZGUgYmV0d2VlbiBsaW5lcyA1NjAgYW5kIDY4MC4gVGhhdCByYW5nZSBsaWtlbHkgY29udGFpbnMga2V5IGxvZ2ljIHJlbGF0ZWQgdG8sIGhvcGVmdWxseSwgZWl0aGVyIGV2ZW50IGhhbmRsaW5nLCBjb3VudGVyIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSB2aXJ0dWFsIFBNVSBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIFRoaXMgc3VnZ2VzdHMgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhdmUgaW1wbGVtZW50ZWQgYW4gZWxlZ2FudCBzb2x1dGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgd29ydGggZXhhbWluaW5nIHRob3JvdWdobHkuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBndWVzdCBQTVUgZXZlbnRzIG1hcCB0byB0aGUgaG9zdCBoYXJkd2FyZSwgaWYgdGhlIGRlc2lnbiBpbnZvbHZlcyBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMsIG9yIGhvdyB0aGVzZSBldmVudHMgYXJlIGVtdWxhdGVkIHdpdGhpbiB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTYwOlx0XG4gNTYxOlx0aW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLFxuIDU2MjpcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY3RyX21hc2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHU2NCBpdmFsLFxuIDU2MzpcdFx0XHRcdFx0IHN0cnVjdCBrdm1fdmNwdV9zYmlfcmV0dXJuICpyZXRkYXRhKVxuIDU2NDpcdHtcbiA1NjU6XHRcdHN0cnVjdCBrdm1fcG11ICprdnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDU2NjpcdFx0aW50IGksIHBtY19pbmRleCwgc2JpcmV0ID0gMDtcbiA1Njc6XHRcdHN0cnVjdCBrdm1fcG1jICpwbWM7XG4gNTY4Olx0XHRpbnQgZmV2ZW50X2NvZGU7XG4gNTY5Olx0XHRib29sIHNuYXBfZmxhZ19zZXQgPSBmbGFncyBcdTAwMjYgU0JJX1BNVV9TVEFSVF9GTEFHX0lOSVRfU05BUFNIT1Q7XG4gNTcwOlx0XG4gNTcxOlx0XHRpZiAoa3ZtX3BtdV92YWxpZGF0ZV9jb3VudGVyX21hc2soa3ZwbXUsIGN0cl9iYXNlLCBjdHJfbWFzaykgXHUwMDNjIDApIHtcbiA1NzI6XHRcdFx0c2JpcmV0ID0gU0JJX0VSUl9JTlZBTElEX1BBUkFNO1xuIDU3MzpcdFx0XHRnb3RvIG91dDtcbiA1NzQ6XHRcdH1cbiA1NzU6XHRcbiA1NzY6XHRcdGlmIChzbmFwX2ZsYWdfc2V0KSB7XG4gNTc3Olx0XHRcdGlmIChrdnBtdS1cdTAwM2VzbmFwc2hvdF9hZGRyID09IElOVkFMSURfR1BBKSB7XG4gNTc4Olx0XHRcdFx0c2JpcmV0ID0gU0JJX0VSUl9OT19TSE1FTTtcbiA1Nzk6XHRcdFx0XHRnb3RvIG91dDtcbiA1ODA6XHRcdFx0fVxuIDU4MTpcdFx0XHRpZiAoa3ZtX3ZjcHVfcmVhZF9ndWVzdCh2Y3B1LCBrdnBtdS1cdTAwM2VzbmFwc2hvdF9hZGRyLCBrdnBtdS1cdTAwM2VzZGF0YSxcbiA1ODI6XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCByaXNjdl9wbXVfc25hcHNob3RfZGF0YSkpKSB7XG4gNTgzOlx0XHRcdFx0cHJfd2FybihcJiMzNDtVbmFibGUgdG8gcmVhZCBzbmFwc2hvdCBzaGFyZWQgbWVtb3J5IHdoaWxlIHN0YXJ0aW5nIGNvdW50ZXJzXFxuXCYjMzQ7KTtcbiA1ODQ6XHRcdFx0XHRzYmlyZXQgPSBTQklfRVJSX0ZBSUxVUkU7XG4gNTg1Olx0XHRcdFx0Z290byBvdXQ7XG4gNTg2Olx0XHRcdH1cbiA1ODc6XHRcdH1cbiA1ODg6XHRcdC8qIFN0YXJ0IHRoZSBjb3VudGVycyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGFuZCByZXF1ZXN0ZWQgYnkgdGhlIGd1ZXN0ICovXG4gNTg5Olx0XHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmN0cl9tYXNrLCBCSVRTX1BFUl9MT05HKSB7XG4gNTkwOlx0XHRcdHBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICYjNDM7IGN0cl9iYXNlLFxuIDU5MTpcdFx0XHRcdFx0XHQgICAgICAgUklTQ1ZfS1ZNX01BWF9DT1VOVEVSUyk7XG4gNTkyOlx0XHRcdGlmICghdGVzdF9iaXQocG1jX2luZGV4LCBrdnBtdS1cdTAwM2VwbWNfaW5fdXNlKSlcbiA1OTM6XHRcdFx0XHRjb250aW51ZTtcbiA1OTQ6XHRcdFx0LyogVGhlIGd1ZXN0IHN0YXJ0ZWQgdGhlIGNvdW50ZXIgYWdhaW4uIFJlc2V0IHRoZSBvdmVyZmxvdyBzdGF0dXMgKi9cbiA1OTU6XHRcdFx0Y2xlYXJfYml0KHBtY19pbmRleCwga3ZwbXUtXHUwMDNlcG1jX292ZXJmbG93bik7XG4gNTk2Olx0XHRcdHBtYyA9IFx1MDAyNmt2cG11LVx1MDAzZXBtY1twbWNfaW5kZXhdO1xuIDU5NzpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IFNCSV9QTVVfU1RBUlRfRkxBR19TRVRfSU5JVF9WQUxVRSkge1xuIDU5ODpcdFx0XHRcdHBtYy1cdTAwM2Vjb3VudGVyX3ZhbCA9IGl2YWw7XG4gNTk5Olx0XHRcdH0gZWxzZSBpZiAoc25hcF9mbGFnX3NldCkge1xuIDYwMDpcdFx0XHRcdC8qIFRoZSBjb3VudGVyIGluZGV4IGluIHRoZSBzbmFwc2hvdCBhcmUgcmVsYXRpdmUgdG8gdGhlIGNvdW50ZXIgYmFzZSAqL1xuIDYwMTpcdFx0XHRcdHBtYy1cdTAwM2Vjb3VudGVyX3ZhbCA9IGt2cG11LVx1MDAzZXNkYXRhLVx1MDAzZWN0cl92YWx1ZXNbaV07XG4gNjAyOlx0XHRcdH1cbiA2MDM6XHRcbiA2MDQ6XHRcdFx0aWYgKHBtYy1cdTAwM2VjaW5mby50eXBlID09IFNCSV9QTVVfQ1RSX1RZUEVfRlcpIHtcbiA2MDU6XHRcdFx0XHRmZXZlbnRfY29kZSA9IGdldF9ldmVudF9jb2RlKHBtYy1cdTAwM2VldmVudF9pZHgpO1xuIDYwNjpcdFx0XHRcdGlmIChmZXZlbnRfY29kZSBcdTAwM2U9IFNCSV9QTVVfRldfTUFYKSB7XG4gNjA3Olx0XHRcdFx0XHRzYmlyZXQgPSBTQklfRVJSX0lOVkFMSURfUEFSQU07XG4gNjA4Olx0XHRcdFx0XHRnb3RvIG91dDtcbiA2MDk6XHRcdFx0XHR9XG4gNjEwOlx0XG4gNjExOlx0XHRcdFx0LyogQ2hlY2sgaWYgdGhlIGNvdW50ZXIgd2FzIGFscmVhZHkgc3RhcnRlZCBmb3Igc29tZSByZWFzb24gKi9cbiA2MTI6XHRcdFx0XHRpZiAoa3ZwbXUtXHUwMDNlZndfZXZlbnRbZmV2ZW50X2NvZGVdLnN0YXJ0ZWQpIHtcbiA2MTM6XHRcdFx0XHRcdHNiaXJldCA9IFNCSV9FUlJfQUxSRUFEWV9TVEFSVEVEO1xuIDYxNDpcdFx0XHRcdFx0Y29udGludWU7XG4gNjE1Olx0XHRcdFx0fVxuIDYxNjpcdFxuIDYxNzpcdFx0XHRcdGt2cG11LVx1MDAzZWZ3X2V2ZW50W2ZldmVudF9jb2RlXS5zdGFydGVkID0gdHJ1ZTtcbiA2MTg6XHRcdFx0XHRrdnBtdS1cdTAwM2Vmd19ldmVudFtmZXZlbnRfY29kZV0udmFsdWUgPSBwbWMtXHUwMDNlY291bnRlcl92YWw7XG4gNjE5Olx0XHRcdH0gZWxzZSBpZiAocG1jLVx1MDAzZXBlcmZfZXZlbnQpIHtcbiA2MjA6XHRcdFx0XHRpZiAodW5saWtlbHkocG1jLVx1MDAzZXN0YXJ0ZWQpKSB7XG4gNjIxOlx0XHRcdFx0XHRzYmlyZXQgPSBTQklfRVJSX0FMUkVBRFlfU1RBUlRFRDtcbiA2MjI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDYyMzpcdFx0XHRcdH1cbiA2MjQ6XHRcdFx0XHRwZXJmX2V2ZW50X3BlcmlvZChwbWMtXHUwMDNlcGVyZl9ldmVudCwga3ZtX3BtdV9nZXRfc2FtcGxlX3BlcmlvZChwbWMpKTtcbiA2MjU6XHRcdFx0XHRwZXJmX2V2ZW50X2VuYWJsZShwbWMtXHUwMDNlcGVyZl9ldmVudCk7XG4gNjI2Olx0XHRcdFx0cG1jLVx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xuIDYyNzpcdFx0XHR9IGVsc2Uge1xuIDYyODpcdFx0XHRcdHNiaXJldCA9IFNCSV9FUlJfSU5WQUxJRF9QQVJBTTtcbiA2Mjk6XHRcdFx0fVxuIDYzMDpcdFx0fVxuIDYzMTpcdFxuIDYzMjpcdG91dDpcbiA2MzM6XHRcdHJldGRhdGEtXHUwMDNlZXJyX3ZhbCA9IHNiaXJldDtcbiA2MzQ6XHRcbiA2MzU6XHRcdHJldHVybiAwO1xuIDYzNjpcdH1cbiA2Mzc6XHRcbiA2Mzg6XHRpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcbiA2Mzk6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgY3RyX21hc2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4gNjQwOlx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX3JldHVybiAqcmV0ZGF0YSlcbiA2NDE6XHR7XG4gNjQyOlx0XHRzdHJ1Y3Qga3ZtX3BtdSAqa3ZwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiA2NDM6XHRcdGludCBpLCBwbWNfaW5kZXgsIHNiaXJldCA9IDA7XG4gNjQ0Olx0XHR1NjQgZW5hYmxlZCwgcnVubmluZztcbiA2NDU6XHRcdHN0cnVjdCBrdm1fcG1jICpwbWM7XG4gNjQ2Olx0XHRpbnQgZmV2ZW50X2NvZGU7XG4gNjQ3Olx0XHRib29sIHNuYXBfZmxhZ19zZXQgPSBmbGFncyBcdTAwMjYgU0JJX1BNVV9TVE9QX0ZMQUdfVEFLRV9TTkFQU0hPVDtcbiA2NDg6XHRcdGJvb2wgc2htZW1fbmVlZHNfdXBkYXRlID0gZmFsc2U7XG4gNjQ5Olx0XG4gNjUwOlx0XHRpZiAoa3ZtX3BtdV92YWxpZGF0ZV9jb3VudGVyX21hc2soa3ZwbXUsIGN0cl9iYXNlLCBjdHJfbWFzaykgXHUwMDNjIDApIHtcbiA2NTE6XHRcdFx0c2JpcmV0ID0gU0JJX0VSUl9JTlZBTElEX1BBUkFNO1xuIDY1MjpcdFx0XHRnb3RvIG91dDtcbiA2NTM6XHRcdH1cbiA2NTQ6XHRcbiA2NTU6XHRcdGlmIChzbmFwX2ZsYWdfc2V0IFx1MDAyNlx1MDAyNiBrdnBtdS1cdTAwM2VzbmFwc2hvdF9hZGRyID09IElOVkFMSURfR1BBKSB7XG4gNjU2Olx0XHRcdHNiaXJldCA9IFNCSV9FUlJfTk9fU0hNRU07XG4gNjU3Olx0XHRcdGdvdG8gb3V0O1xuIDY1ODpcdFx0fVxuIDY1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBLVk0gUklTQy1WIFBNVSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhlIHBvdGVudGlhbCBmb3IgYSBuYXN0eSBidWcgaW4gdGhlIEtWTSBSSVNDLVYgUE1VIGNvZGUuIFRoZSBmaXggdGFyZ2V0cyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aXRoaW4gYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyB3aXRoIGhvdyB0aGUgYGN0cl9tYXNrYCBpcyB1c2VkIHdpdGggYGZvcl9lYWNoX3NldF9iaXRgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGN0cl9tYXNrYCwgYW4gYHVuc2lnbmVkIGxvbmdgLCBpcyBiZWluZyBpdGVyYXRlZCBvdmVyIGluY29ycmVjdGx5LiBgZm9yX2VhY2hfc2V0X2JpdGAgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYW4gdW5zaWduZWQgbG9uZyBhbmQgYSBudW1iZXIgb2YgYml0cyB0byBpdGVyYXRlIHRocm91Z2guIFByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYFJJU0NWX01BWF9DT1VOVEVSU2AsIHdoaWNoIGlzIDY0LiBCdXQgdGhlbiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgY3RyX21hc2tgIGl0c2VsZiBpcyAqanVzdCogYSBzaW5nbGUgYHVuc2lnbmVkIGxvbmdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWQgZmxhZyBnb2VzIHVwLgoKT24gYSAzMi1iaXQgc3lzdGVtIChSVjMyKSwgYW4gYHVuc2lnbmVkIGxvbmdgIGlzIDMyIGJpdHMsIGFuZCBvbiBhIDY0LWJpdCBzeXN0ZW0gKFJWNjQpLCBpdCYjMzk7cyA2NCBiaXRzLiBJZiBgUklTQ1ZfTUFYX0NPVU5URVJTYCBpcyAqYWx3YXlzKiA2NCwgZXZlbiBvbiBSVjMyLCBgZm9yX2VhY2hfc2V0X2JpdGAgaXMgdmVyeSBsaWtlbHkgdG8gcmVhZCBiZXlvbmQgdGhlIGFjdHVhbCBib3VuZHMgb2YgYGN0cl9tYXNrYCBvbiBhIDMyIGJpdCBzeXN0ZW0uIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgY3JlYXRlIGEgc3RhY2sgb3V0LW9mLWJvdW5kcyByZWFkIG9uIFJWMzIsIGFuZCBvbiBSVjY0IGl0IHdpbGwgc3RpbGwgYmUgaXRlcmF0aW5nIG92ZXIgYW4gb3V0IG9mIGJvdW5kcyBhcmVhIHRoYXQgaXMgbm90IG9mIGNvbnNlcXVlbmNlLCBidXQgd2FzdGVmdWwuCgpIYW5nIG9u4oCmIGxvb2tpbmcgY2xvc2VyLiBgY3RyX21hc2tgIGlzIHBhc3NlZCAqYnkgdmFsdWUqIHRvIHRoZSBmdW5jdGlvbiwgYnV0IHRoZSBhZGRyZXNzIGlzIHRoZW4gdGFrZW4gKGAmYW1wO2N0cl9tYXNrYCkgYW5kIHBhc3NlZCB0byBgZm9yX2VhY2hfc2V0X2JpdGAuIFRoYXQmIzM5O3MgYW4gZXZlbiBiaWdnZXIgcHJvYmxlbS4gQmVjYXVzZSBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIChwYXJhbWV0ZXIpIGFuZCBpcyBwYXNzZWQgYnkgdmFsdWUsIGFuZCB0aGUgYWRkcmVzcyBpcyB0YWtlbiwgYSByZWFkIHBhc3QgdGhlIGVuZCBvbiB0aGUgc3RhY2sgaXMgYSAqdmVyeSogYmFkIHRoaW5nLgoKVGhpcyBwYXRjaCBtYWtlcyBhIGxvdCBvZiBzZW5zZS4gQnkgY2hhbmdpbmcgdGhlIHVwcGVyIGJvdW5kIHRvIGBCSVRTX1BFUl9MT05HYCwgdGhlIGl0ZXJhdGlvbiBpcyBjb3JyZWN0bHkgbGltaXRlZCB0byB0aGUgYWN0dWFsIHNpemUgb2YgYGN0cl9tYXNrYCwgcHJldmVudGluZyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBzdGFjayBjb3JydXB0aW9uLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguIEl0IHRhcmdldHMgS1ZNIFJJU0MtViBQTVUgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmdW5jdGlvbnMgY2FsbGVkIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcGAsIHdoaWNoIGFyZSByZWFjaGVkIHZpYSB0aGUgU0JJIFBNVSBleHRlbnNpb24uIE5vdywgSSBoYXZlIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZCBmb3IgdGhpcyBjaGFuZ2UgdG8gYmUgZnVsbHkgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM9NTQ1PWludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNpZHgsXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYy01NjAtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jOjU2MTppbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3RyX2Jhc2UsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTU2Mi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGN0cl9tYXNrLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1NjQgaXZhbCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3BtdV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYy01Ny0jZW5kaWZcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3BtdS5jOjU4Olx0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0KHZjcHUsIGNwLVx1MDAzZWEwLCBjcC1cdTAwM2VhMSwgY3AtXHUwMDNlYTIsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYy01OS1cdFx0XHRcdFx0XHQgICB0ZW1wLCByZXRkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIFJJU0MtViBLVk0gUE1VIEhhbmRsZXIqKgoKUmlnaHQsIHNvIHRoZSB0cmFjZSBsZWFkcyBtZSB0byBga3ZtX3NiaV9leHRfcG11X2hhbmRsZXJgIGluIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIGhvdyB0aGlzIGlzIHdpcmVkIHVwOyBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludC4gTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFBNVSBjb25maWd1cmF0aW9uIGl0c2VsZiwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jYCB0byBzZWUgaG93IHRoZSBQTVUgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBtaWdodCBiZSBhdCBwbGF5LiBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjcHVfcG11Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vTWFrZWZpbGU9Mjg9a3ZtLXkgJiM0Mzs9IHZjcHVfb25lcmVnLm9cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlOjI5Omt2bS0kKENPTkZJR19SSVNDVl9QTVVfU0JJKSAmIzQzOz0gdmNwdV9wbXUub1xuYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUtMzAta3ZtLXkgJiM0Mzs9IHZjcHVfc2JpLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFJJU0MtViBLVk0gYW5kIFNCSSBTdXBwb3J0KioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGZvY3VzIGlzIG9uIGdldHRpbmcgYENPTkZJR19SSVNDVl9QTVVfU0JJYCB3b3JraW5nIOKAkyB0aGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LCBJIGtub3cuIEJ1dCB3YWl0LCB0aGVuIHRoZSB0aG91Z2h0IHNoaWZ0cyB0byBgQ09ORklHX0tWTWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBLVk0gc3VwcG9ydCBpcyBlbmFibGVkLiBHaXZlbiB0aGUgbGlrZWx5IGludGVyYWN0aW9ucywgbXkgbWVudGFsIGNoZWNrbGlzdCBub3cgaW5jbHVkZXMgYSBkZWVwZXIgZGl2ZS4gVGhlIG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgLiBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNIGZvciBSSVNDLVYsIHdoaWNoIHdpbGwgdGVsbCBtZSBwcmVjaXNlbHkgaG93IHRoZSBQTVUgU0JJIHN1cHBvcnQgaW50ZXJhY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSSVNDVl9QTVVfU0JJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTE0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKlRyYWNpbmcgRG93biBgUklTQ1ZfUE1VX1NCSWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyBgUklTQ1ZfUE1VX1NCSWAgZGVmaW5lZCBpbiB0aGlzIGNvZGViYXNlPyYjMzQ7IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbiwgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24gdG8gcmVhbGx5IGdyYXNwIGl0cyBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGdldCBzZWFyY2hpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSSVNDVl9QTVVfU0JJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9LY29uZmlnPTg4PWNvbmZpZyBSSVNDVl9QTVVfTEVHQUNZXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWctOTctXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo5ODpjb25maWcgUklTQ1ZfUE1VX1NCSVxuZHJpdmVycy9wZXJmL0tjb25maWctOTktXHRkZXBlbmRzIG9uIFJJU0NWX1BNVSBcdTAwMjZcdTAwMjYgUklTQ1ZfU0JJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgUklTQy1WIEtWTSBQTVUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBpc3N1ZSBhbmQgaXQgc2VlbXMgdGhlIHJlbGV2YW50IGNvZGUgZm9yIHRoZSBgUklTQ1ZfUE1VX1NCSWAgZmVhdHVyZSBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL3BlcmYvS2NvbmZpZ2AuIFJpZ2h0LCBmaXJzdCBzdGVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYEtWTWAgYW5kIGBSSVNDVl9QTVVfU0JJYCBhcmUgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UuCgpBaCwgaGFuZyBvbiBhIG1vbWVudCwgdGhlIHNwZWNpZmljIGJ1ZyBzZWVtcyB0byBiZSB3aXRoaW4gYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgUklTQy1WIHNwZWNpZmljLCB3aGljaCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIHF1aXRlIGEgYml0LiBDb25zaWRlcmluZyB0aGF0IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIEtWTSBmb3IgUklTQy1WLCB0aGlzICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLiBJdCYjMzk7cyBhIGtleSBhcmVhLgoKSSBzaG91bGQgZm9jdXMgb24gdGhlIGZ1bmN0aW9uIHN5bWJvbHMgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wYC4gVGhvc2UgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMgZm9yIHRoZSBmdXp6ZXIuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgdGhhdCBgUklTQ1ZfUE1VX1NCSWAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gaW52b2x2ZWQuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzMyCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBLVk0gYW5kIFJJU0NWX1BNVV9TQkkgTW9kaWZpY2F0aW9ucyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYEtWTWAgYW5kIGBSSVNDVl9QTVVfU0JJYC4gR290IGl0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgYWNjb3VudGVkIGZvciAqZXZlcnl0aGluZyogdGhhdCYjMzk7cyBiZWVuIGFmZmVjdGVkLiBObyBzdG9uZSB1bnR1cm5lZC4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzPyBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnl0aGluZyBlbHNlIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW55IHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cy4gQWgsIGl0IGxvb2tzIGxpa2Ugb25seSBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3BgIGFyZSB0aGUgbW9kaWZpZWQgb25lcy4gRXhjZWxsZW50LCB0aGF04oCZcyBjbGVhbiBhbmQgbWFuYWdlYWJsZS4gT2theSwgSSYjMzk7dmUgZ290IGEgY29tcGxldGUgcGljdHVyZSBub3cuIFRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtSSVNDVl9QTVVfU0JJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1JJU0NWX1BNVV9TQkkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHN0YWNrIHJlYWQgaW4gUklTQy1WIEtWTSBQTVUgaGFuZGxpbmcgYnkgbGltaXRpbmcgdGhlIGJpdCBpdGVyYXRpb24gdG8gdGhlIHNpemUgb2YgdGhlIGBjdHJfbWFza2AgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIEtWTSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDA6NDAuNzg0MTgyNzExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0NzI3NDg2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJSSVNDVl9QTVVfU0JJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydFwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDA6NDAuNzg0MTg2ODkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUxMjY4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZWI2N2MxYWVmNjRlYmI5NzBhMTkxYjEwNzIzODE5NWRiZTI4YTJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDA2OjAwOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jXFxuaW5kZXggYmI0NmRjYmZiMjRkYTcuLjIwMjViNjY0OTYxYzgwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jXFxuQEAgLTU4Niw3ICs1ODYsNyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3RyX2Jhc2UsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHQvKiBTdGFydCB0aGUgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBhbmQgcmVxdWVzdGVkIGJ5IHRoZSBndWVzdCAqL1xcbi1cXHRmb3JfZWFjaF9zZXRfYml0KGksIFxcdTAwMjZjdHJfbWFzaywgUklTQ1ZfTUFYX0NPVU5URVJTKSB7XFxuK1xcdGZvcl9lYWNoX3NldF9iaXQoaSwgXFx1MDAyNmN0cl9tYXNrLCBCSVRTX1BFUl9MT05HKSB7XFxuIFxcdFxcdHBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICsgY3RyX2Jhc2UsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBSSVNDVl9LVk1fTUFYX0NPVU5URVJTKTtcXG4gXFx0XFx0aWYgKCF0ZXN0X2JpdChwbWNfaW5kZXgsIGt2cG11LVxcdTAwM2VwbWNfaW5fdXNlKSlcXG5AQCAtNjU4LDcgKzY1OCw3IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTdG9wIHRoZSBjb3VudGVycyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGFuZCByZXF1ZXN0ZWQgYnkgdGhlIGd1ZXN0ICovXFxuLVxcdGZvcl9lYWNoX3NldF9iaXQoaSwgXFx1MDAyNmN0cl9tYXNrLCBSSVNDVl9NQVhfQ09VTlRFUlMpIHtcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2Y3RyX21hc2ssIEJJVFNfUEVSX0xPTkcpIHtcXG4gXFx0XFx0cG1jX2luZGV4ID0gYXJyYXlfaW5kZXhfbm9zcGVjKGkgKyBjdHJfYmFzZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIFJJU0NWX0tWTV9NQVhfQ09VTlRFUlMpO1xcbiBcXHRcXHRpZiAoIXRlc3RfYml0KHBtY19pbmRleCwga3ZwbXUtXFx1MDAzZXBtY19pbl91c2UpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjowMDo0MS4yMDk5ODE1NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDQ2OTQxOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUklTQ1ZfUE1VX1NCSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgc3RhY2sgcmVhZCBpbiBSSVNDLVYgS1ZNIFBNVSBoYW5kbGluZyBieSBsaW1pdGluZyB0aGUgYml0IGl0ZXJhdGlvbiB0byB0aGUgc2l6ZSBvZiB0aGUgYGN0cl9tYXNrYCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgS1ZNIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGViNjdjMWFlZjY0ZWJiOTcwYTE5MWIxMDcyMzgxOTVkYmUyOGEyZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDA2OjAwOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcbmluZGV4IGJiNDZkY2JmYjI0ZGE3Li4yMDI1YjY2NDk2MWM4MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcbkBAIC01ODYsNyArNTg2LDcgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLFxuIFx0XHR9XG4gXHR9XG4gXHQvKiBTdGFydCB0aGUgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBhbmQgcmVxdWVzdGVkIGJ5IHRoZSBndWVzdCAqL1xuLVx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZjdHJfbWFzaywgUklTQ1ZfTUFYX0NPVU5URVJTKSB7XG4rXHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmN0cl9tYXNrLCBCSVRTX1BFUl9MT05HKSB7XG4gXHRcdHBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICsgY3RyX2Jhc2UsXG4gXHRcdFx0XHRcdCAgICAgICBSSVNDVl9LVk1fTUFYX0NPVU5URVJTKTtcbiBcdFx0aWYgKCF0ZXN0X2JpdChwbWNfaW5kZXgsIGt2cG11LVx1MDAzZXBtY19pbl91c2UpKVxuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcbiBcdH1cbiBcbiBcdC8qIFN0b3AgdGhlIGNvdW50ZXJzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgYW5kIHJlcXVlc3RlZCBieSB0aGUgZ3Vlc3QgKi9cbi1cdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2Y3RyX21hc2ssIFJJU0NWX01BWF9DT1VOVEVSUykge1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZjdHJfbWFzaywgQklUU19QRVJfTE9ORykge1xuIFx0XHRwbWNfaW5kZXggPSBhcnJheV9pbmRleF9ub3NwZWMoaSArIGN0cl9iYXNlLFxuIFx0XHRcdFx0XHQgICAgICAgUklTQ1ZfS1ZNX01BWF9DT1VOVEVSUyk7XG4gXHRcdGlmICghdGVzdF9iaXQocG1jX2luZGV4LCBrdnBtdS1cdTAwM2VwbWNfaW5fdXNlKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQxLjIwOTk4Mjg4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjEyOTgyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBSSVNDLVYgS1ZNIFBNVSBDb3VudGVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYWx0ZXJpbmcgYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgc3Vic3RpdHV0aW5nIGBSSVNDVl9NQVhfQ09VTlRFUlNgIHdpdGggYEJJVFNfUEVSX0xPTkdgIHdpdGhpbiB0aGUgYGZvcl9lYWNoX3NldF9iaXRgIGxvb3AgaW4gdGhlIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcGAgZnVuY3Rpb25zLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlLCBhcyBpdCBjaGFuZ2VzIHRoZSB1cHBlciBib3VuZCBvZiB0aGUgbG9vcCwgd2hpY2ggZGljdGF0ZXMgaG93IHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY291bnRlciBtYXNrLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNjZXJ0YWluIHdoeSB0aGlzIGNoYW5nZSB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2Ygc3dpdGNoaW5nIGZyb20gYSBoYXJkd2FyZS1kZWZpbmVkIGxpbWl0IChgUklTQ1ZfTUFYX0NPVU5URVJTYCkgdG8gYSBkYXRhLXR5cGUgZGVwZW5kZW50IGxpbWl0IChgQklUU19QRVJfTE9OR2ApLiBJcyB0aGlzIGEgcGxhdGZvcm0gYWRhcHRhdGlvbj8gUGVyaGFwcyB3ZSBhcmUgdHJ5aW5nIHRvIGdlbmVyYWxpemUgdGhlIGNvZGUgdG8gaGFuZGxlIHZhcmlhYmxlIG51bWJlcnMgb2YgcGVyZm9ybWFuY2UgY291bnRlcnMgYWNyb3NzIGRpZmZlcmVudCBSSVNDLVYgaW1wbGVtZW50YXRpb25zPyBPciwgbWF5YmUgdGhpcyBpcyBhIGJ1ZyBmaXgg4oCTIHBlcmhhcHMgdGhlIG9yaWdpbmFsIGBSSVNDVl9NQVhfQ09VTlRFUlNgIHdhcyBpbmNvcnJlY3QuIFdlIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhpcyBjaGFuZ2UgaXMgc2FmZS5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSB3YW50IHRvIHNlZSBob3cgYGN0cl9tYXNrYCBpcyBkZWZpbmVkIGFuZCBtYW5pcHVsYXRlZC4gSXMgYFJJU0NWX01BWF9DT1VOVEVSU2AgdXNlZCBlbHNld2hlcmUgaW4gdGhpcyBmaWxlLCBhbmQgaWYgc28sIGhvdyBpcyBpdCBiZWluZyBoYW5kbGVkIG5vdz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBgQklUU19QRVJfTE9OR2AgaXMgc21hbGxlciB0aGFuLCBvciBsYXJnZXIgdGhhbiwgYFJJU0NWX01BWF9DT1VOVEVSU2AgaW4gZGlmZmVyZW50IFJJU0MtViBpbXBsZW1lbnRhdGlvbnM/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGJlaGF2aW9yIHJlbGF0ZWQgdG8gY291bnRlciBpbml0aWFsaXphdGlvbiBvciBzdGF0ZSBtYW5hZ2VtZW50LiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBjb3JyZWN0bHkgaXRlcmF0ZXMgdGhyb3VnaCBhbmQgYWN0aXZhdGVzL2RlYWN0aXZhdGVzIHRoZSBpbnRlbmRlZCBwZXJmb3JtYW5jZSBjb3VudGVycy4gQSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtZW1vcnkgbGF5b3V0IG9mIHRoZSBjb3VudGVycyBpcyBrZXkgdG8gbXkgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQ1LjgzMTI4MzE1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTgzOTgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYz01NDU9aW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY2lkeCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtNTYwLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM6NTYxOmludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTU2Mi1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjdHJfbWFzaywgdW5zaWduZWQgbG9uZyBmbGFncywgdTY0IGl2YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQ1Ljg4NzEyODc2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODkxNjUwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHZjcHVfcG11LmNgIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBSSVNDLVYgS1ZNIGhhbmRsZXMgdmlydHVhbCBDUFUgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0cy4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDU2MCBhbmQgNjgwLiBUaGF0IHJhbmdlIGxpa2VseSBjb250YWlucyBrZXkgbG9naWMgcmVsYXRlZCB0bywgaG9wZWZ1bGx5LCBlaXRoZXIgZXZlbnQgaGFuZGxpbmcsIGNvdW50ZXIgbWFuYWdlbWVudCwgb3IgcGVyaGFwcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHZpcnR1YWwgUE1VIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gVGhpcyBzdWdnZXN0cyB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBpbXBsZW1lbnRlZCBhbiBlbGVnYW50IHNvbHV0aW9uLCBzbyBpdCdzIHByb2JhYmx5IHdvcnRoIGV4YW1pbmluZyB0aG9yb3VnaGx5LiBJJ20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBndWVzdCBQTVUgZXZlbnRzIG1hcCB0byB0aGUgaG9zdCBoYXJkd2FyZSwgaWYgdGhlIGRlc2lnbiBpbnZvbHZlcyBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMsIG9yIGhvdyB0aGVzZSBldmVudHMgYXJlIGVtdWxhdGVkIHdpdGhpbiB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQ5LjE3NjI5NTQyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjA6XFx0XFxuIDU2MTpcXHRpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3RyX2Jhc2UsXFxuIDU2MjpcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjdHJfbWFzaywgdW5zaWduZWQgbG9uZyBmbGFncywgdTY0IGl2YWwsXFxuIDU2MzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGt2bV92Y3B1X3NiaV9yZXR1cm4gKnJldGRhdGEpXFxuIDU2NDpcXHR7XFxuIDU2NTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqa3ZwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG4gNTY2OlxcdFxcdGludCBpLCBwbWNfaW5kZXgsIHNiaXJldCA9IDA7XFxuIDU2NzpcXHRcXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xcbiA1Njg6XFx0XFx0aW50IGZldmVudF9jb2RlO1xcbiA1Njk6XFx0XFx0Ym9vbCBzbmFwX2ZsYWdfc2V0ID0gZmxhZ3MgXFx1MDAyNiBTQklfUE1VX1NUQVJUX0ZMQUdfSU5JVF9TTkFQU0hPVDtcXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0aWYgKGt2bV9wbXVfdmFsaWRhdGVfY291bnRlcl9tYXNrKGt2cG11LCBjdHJfYmFzZSwgY3RyX21hc2spIFxcdTAwM2MgMCkge1xcbiA1NzI6XFx0XFx0XFx0c2JpcmV0ID0gU0JJX0VSUl9JTlZBTElEX1BBUkFNO1xcbiA1NzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU3NDpcXHRcXHR9XFxuIDU3NTpcXHRcXG4gNTc2OlxcdFxcdGlmIChzbmFwX2ZsYWdfc2V0KSB7XFxuIDU3NzpcXHRcXHRcXHRpZiAoa3ZwbXUtXFx1MDAzZXNuYXBzaG90X2FkZHIgPT0gSU5WQUxJRF9HUEEpIHtcXG4gNTc4OlxcdFxcdFxcdFxcdHNiaXJldCA9IFNCSV9FUlJfTk9fU0hNRU07XFxuIDU3OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTgwOlxcdFxcdFxcdH1cXG4gNTgxOlxcdFxcdFxcdGlmIChrdm1fdmNwdV9yZWFkX2d1ZXN0KHZjcHUsIGt2cG11LVxcdTAwM2VzbmFwc2hvdF9hZGRyLCBrdnBtdS1cXHUwMDNlc2RhdGEsXFxuIDU4MjpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHJpc2N2X3BtdV9zbmFwc2hvdF9kYXRhKSkpIHtcXG4gNTgzOlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIlVuYWJsZSB0byByZWFkIHNuYXBzaG90IHNoYXJlZCBtZW1vcnkgd2hpbGUgc3RhcnRpbmcgY291bnRlcnNcXFxcblxcXCIpO1xcbiA1ODQ6XFx0XFx0XFx0XFx0c2JpcmV0ID0gU0JJX0VSUl9GQUlMVVJFO1xcbiA1ODU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU4NjpcXHRcXHRcXHR9XFxuIDU4NzpcXHRcXHR9XFxuIDU4ODpcXHRcXHQvKiBTdGFydCB0aGUgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBhbmQgcmVxdWVzdGVkIGJ5IHRoZSBndWVzdCAqL1xcbiA1ODk6XFx0XFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2Y3RyX21hc2ssIEJJVFNfUEVSX0xPTkcpIHtcXG4gNTkwOlxcdFxcdFxcdHBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICsgY3RyX2Jhc2UsXFxuIDU5MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUklTQ1ZfS1ZNX01BWF9DT1VOVEVSUyk7XFxuIDU5MjpcXHRcXHRcXHRpZiAoIXRlc3RfYml0KHBtY19pbmRleCwga3ZwbXUtXFx1MDAzZXBtY19pbl91c2UpKVxcbiA1OTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDU5NDpcXHRcXHRcXHQvKiBUaGUgZ3Vlc3Qgc3RhcnRlZCB0aGUgY291bnRlciBhZ2Fpbi4gUmVzZXQgdGhlIG92ZXJmbG93IHN0YXR1cyAqL1xcbiA1OTU6XFx0XFx0XFx0Y2xlYXJfYml0KHBtY19pbmRleCwga3ZwbXUtXFx1MDAzZXBtY19vdmVyZmxvd24pO1xcbiA1OTY6XFx0XFx0XFx0cG1jID0gXFx1MDAyNmt2cG11LVxcdTAwM2VwbWNbcG1jX2luZGV4XTtcXG4gNTk3OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNCSV9QTVVfU1RBUlRfRkxBR19TRVRfSU5JVF9WQUxVRSkge1xcbiA1OTg6XFx0XFx0XFx0XFx0cG1jLVxcdTAwM2Vjb3VudGVyX3ZhbCA9IGl2YWw7XFxuIDU5OTpcXHRcXHRcXHR9IGVsc2UgaWYgKHNuYXBfZmxhZ19zZXQpIHtcXG4gNjAwOlxcdFxcdFxcdFxcdC8qIFRoZSBjb3VudGVyIGluZGV4IGluIHRoZSBzbmFwc2hvdCBhcmUgcmVsYXRpdmUgdG8gdGhlIGNvdW50ZXIgYmFzZSAqL1xcbiA2MDE6XFx0XFx0XFx0XFx0cG1jLVxcdTAwM2Vjb3VudGVyX3ZhbCA9IGt2cG11LVxcdTAwM2VzZGF0YS1cXHUwMDNlY3RyX3ZhbHVlc1tpXTtcXG4gNjAyOlxcdFxcdFxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0XFx0aWYgKHBtYy1cXHUwMDNlY2luZm8udHlwZSA9PSBTQklfUE1VX0NUUl9UWVBFX0ZXKSB7XFxuIDYwNTpcXHRcXHRcXHRcXHRmZXZlbnRfY29kZSA9IGdldF9ldmVudF9jb2RlKHBtYy1cXHUwMDNlZXZlbnRfaWR4KTtcXG4gNjA2OlxcdFxcdFxcdFxcdGlmIChmZXZlbnRfY29kZSBcXHUwMDNlPSBTQklfUE1VX0ZXX01BWCkge1xcbiA2MDc6XFx0XFx0XFx0XFx0XFx0c2JpcmV0ID0gU0JJX0VSUl9JTlZBTElEX1BBUkFNO1xcbiA2MDg6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYwOTpcXHRcXHRcXHRcXHR9XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdFxcdFxcdC8qIENoZWNrIGlmIHRoZSBjb3VudGVyIHdhcyBhbHJlYWR5IHN0YXJ0ZWQgZm9yIHNvbWUgcmVhc29uICovXFxuIDYxMjpcXHRcXHRcXHRcXHRpZiAoa3ZwbXUtXFx1MDAzZWZ3X2V2ZW50W2ZldmVudF9jb2RlXS5zdGFydGVkKSB7XFxuIDYxMzpcXHRcXHRcXHRcXHRcXHRzYmlyZXQgPSBTQklfRVJSX0FMUkVBRFlfU1RBUlRFRDtcXG4gNjE0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA2MTU6XFx0XFx0XFx0XFx0fVxcbiA2MTY6XFx0XFxuIDYxNzpcXHRcXHRcXHRcXHRrdnBtdS1cXHUwMDNlZndfZXZlbnRbZmV2ZW50X2NvZGVdLnN0YXJ0ZWQgPSB0cnVlO1xcbiA2MTg6XFx0XFx0XFx0XFx0a3ZwbXUtXFx1MDAzZWZ3X2V2ZW50W2ZldmVudF9jb2RlXS52YWx1ZSA9IHBtYy1cXHUwMDNlY291bnRlcl92YWw7XFxuIDYxOTpcXHRcXHRcXHR9IGVsc2UgaWYgKHBtYy1cXHUwMDNlcGVyZl9ldmVudCkge1xcbiA2MjA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHBtYy1cXHUwMDNlc3RhcnRlZCkpIHtcXG4gNjIxOlxcdFxcdFxcdFxcdFxcdHNiaXJldCA9IFNCSV9FUlJfQUxSRUFEWV9TVEFSVEVEO1xcbiA2MjI6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDYyMzpcXHRcXHRcXHRcXHR9XFxuIDYyNDpcXHRcXHRcXHRcXHRwZXJmX2V2ZW50X3BlcmlvZChwbWMtXFx1MDAzZXBlcmZfZXZlbnQsIGt2bV9wbXVfZ2V0X3NhbXBsZV9wZXJpb2QocG1jKSk7XFxuIDYyNTpcXHRcXHRcXHRcXHRwZXJmX2V2ZW50X2VuYWJsZShwbWMtXFx1MDAzZXBlcmZfZXZlbnQpO1xcbiA2MjY6XFx0XFx0XFx0XFx0cG1jLVxcdTAwM2VzdGFydGVkID0gdHJ1ZTtcXG4gNjI3OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDYyODpcXHRcXHRcXHRcXHRzYmlyZXQgPSBTQklfRVJSX0lOVkFMSURfUEFSQU07XFxuIDYyOTpcXHRcXHRcXHR9XFxuIDYzMDpcXHRcXHR9XFxuIDYzMTpcXHRcXG4gNjMyOlxcdG91dDpcXG4gNjMzOlxcdFxcdHJldGRhdGEtXFx1MDAzZWVycl92YWwgPSBzYmlyZXQ7XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdHJldHVybiAwO1xcbiA2MzY6XFx0fVxcbiA2Mzc6XFx0XFxuIDYzODpcXHRpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcXG4gNjM5OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3RyX21hc2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuIDY0MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX3JldHVybiAqcmV0ZGF0YSlcXG4gNjQxOlxcdHtcXG4gNjQyOlxcdFxcdHN0cnVjdCBrdm1fcG11ICprdnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xcbiA2NDM6XFx0XFx0aW50IGksIHBtY19pbmRleCwgc2JpcmV0ID0gMDtcXG4gNjQ0OlxcdFxcdHU2NCBlbmFibGVkLCBydW5uaW5nO1xcbiA2NDU6XFx0XFx0c3RydWN0IGt2bV9wbWMgKnBtYztcXG4gNjQ2OlxcdFxcdGludCBmZXZlbnRfY29kZTtcXG4gNjQ3OlxcdFxcdGJvb2wgc25hcF9mbGFnX3NldCA9IGZsYWdzIFxcdTAwMjYgU0JJX1BNVV9TVE9QX0ZMQUdfVEFLRV9TTkFQU0hPVDtcXG4gNjQ4OlxcdFxcdGJvb2wgc2htZW1fbmVlZHNfdXBkYXRlID0gZmFsc2U7XFxuIDY0OTpcXHRcXG4gNjUwOlxcdFxcdGlmIChrdm1fcG11X3ZhbGlkYXRlX2NvdW50ZXJfbWFzayhrdnBtdSwgY3RyX2Jhc2UsIGN0cl9tYXNrKSBcXHUwMDNjIDApIHtcXG4gNjUxOlxcdFxcdFxcdHNiaXJldCA9IFNCSV9FUlJfSU5WQUxJRF9QQVJBTTtcXG4gNjUyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2NTM6XFx0XFx0fVxcbiA2NTQ6XFx0XFxuIDY1NTpcXHRcXHRpZiAoc25hcF9mbGFnX3NldCBcXHUwMDI2XFx1MDAyNiBrdnBtdS1cXHUwMDNlc25hcHNob3RfYWRkciA9PSBJTlZBTElEX0dQQSkge1xcbiA2NTY6XFx0XFx0XFx0c2JpcmV0ID0gU0JJX0VSUl9OT19TSE1FTTtcXG4gNjU3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2NTg6XFx0XFx0fVxcbiA2NTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQ5LjE3NjQwMDU0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDQ3NDU3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBLVk0gUklTQy1WIFBNVSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIGEgbmFzdHkgYnVnIGluIHRoZSBLVk0gUklTQy1WIFBNVSBjb2RlLiBUaGUgZml4IHRhcmdldHMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2l0aGluIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgd2l0aCBob3cgdGhlIGBjdHJfbWFza2AgaXMgdXNlZCB3aXRoIGBmb3JfZWFjaF9zZXRfYml0YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGN0cl9tYXNrYCwgYW4gYHVuc2lnbmVkIGxvbmdgLCBpcyBiZWluZyBpdGVyYXRlZCBvdmVyIGluY29ycmVjdGx5LiBgZm9yX2VhY2hfc2V0X2JpdGAgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYW4gdW5zaWduZWQgbG9uZyBhbmQgYSBudW1iZXIgb2YgYml0cyB0byBpdGVyYXRlIHRocm91Z2guIFByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYFJJU0NWX01BWF9DT1VOVEVSU2AsIHdoaWNoIGlzIDY0LiBCdXQgdGhlbiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgY3RyX21hc2tgIGl0c2VsZiBpcyAqanVzdCogYSBzaW5nbGUgYHVuc2lnbmVkIGxvbmdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWQgZmxhZyBnb2VzIHVwLlxuXG5PbiBhIDMyLWJpdCBzeXN0ZW0gKFJWMzIpLCBhbiBgdW5zaWduZWQgbG9uZ2AgaXMgMzIgYml0cywgYW5kIG9uIGEgNjQtYml0IHN5c3RlbSAoUlY2NCksIGl0J3MgNjQgYml0cy4gSWYgYFJJU0NWX01BWF9DT1VOVEVSU2AgaXMgKmFsd2F5cyogNjQsIGV2ZW4gb24gUlYzMiwgYGZvcl9lYWNoX3NldF9iaXRgIGlzIHZlcnkgbGlrZWx5IHRvIHJlYWQgYmV5b25kIHRoZSBhY3R1YWwgYm91bmRzIG9mIGBjdHJfbWFza2Agb24gYSAzMiBiaXQgc3lzdGVtLiBJdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGNyZWF0ZSBhIHN0YWNrIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBSVjMyLCBhbmQgb24gUlY2NCBpdCB3aWxsIHN0aWxsIGJlIGl0ZXJhdGluZyBvdmVyIGFuIG91dCBvZiBib3VuZHMgYXJlYSB0aGF0IGlzIG5vdCBvZiBjb25zZXF1ZW5jZSwgYnV0IHdhc3RlZnVsLlxuXG5IYW5nIG9u4oCmIGxvb2tpbmcgY2xvc2VyLiBgY3RyX21hc2tgIGlzIHBhc3NlZCAqYnkgdmFsdWUqIHRvIHRoZSBmdW5jdGlvbiwgYnV0IHRoZSBhZGRyZXNzIGlzIHRoZW4gdGFrZW4gKGBcdTAwMjZjdHJfbWFza2ApIGFuZCBwYXNzZWQgdG8gYGZvcl9lYWNoX3NldF9iaXRgLiBUaGF0J3MgYW4gZXZlbiBiaWdnZXIgcHJvYmxlbS4gQmVjYXVzZSBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIChwYXJhbWV0ZXIpIGFuZCBpcyBwYXNzZWQgYnkgdmFsdWUsIGFuZCB0aGUgYWRkcmVzcyBpcyB0YWtlbiwgYSByZWFkIHBhc3QgdGhlIGVuZCBvbiB0aGUgc3RhY2sgaXMgYSAqdmVyeSogYmFkIHRoaW5nLlxuXG5UaGlzIHBhdGNoIG1ha2VzIGEgbG90IG9mIHNlbnNlLiBCeSBjaGFuZ2luZyB0aGUgdXBwZXIgYm91bmQgdG8gYEJJVFNfUEVSX0xPTkdgLCB0aGUgaXRlcmF0aW9uIGlzIGNvcnJlY3RseSBsaW1pdGVkIHRvIHRoZSBhY3R1YWwgc2l6ZSBvZiBgY3RyX21hc2tgLCBwcmV2ZW50aW5nIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHN0YWNrIGNvcnJ1cHRpb24uXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBidWcgZml4LiBJdCB0YXJnZXRzIEtWTSBSSVNDLVYgUE1VIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZnVuY3Rpb25zIGNhbGxlZCBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3BgLCB3aGljaCBhcmUgcmVhY2hlZCB2aWEgdGhlIFNCSSBQTVUgZXh0ZW5zaW9uLiBOb3csIEkgaGF2ZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQgZm9yIHRoaXMgY2hhbmdlIHRvIGJlIGZ1bGx5IGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjowMDo1Ni45MjExNDc5OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3ODMwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYz01NDU9aW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY2lkeCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtNTYwLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM6NTYxOmludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTU2Mi1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjdHJfbWFzaywgdW5zaWduZWQgbG9uZyBmbGFncywgdTY0IGl2YWwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3BtdV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3BtdS5jLTU3LSNlbmRpZlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3BtdS5jOjU4OlxcdFxcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQodmNwdSwgY3AtXFx1MDAzZWEwLCBjcC1cXHUwMDNlYTEsIGNwLVxcdTAwM2VhMixcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYy01OS1cXHRcXHRcXHRcXHRcXHRcXHQgICB0ZW1wLCByZXRkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDA6NTYuOTc5OTM4NjI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMDgzOTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJJU0MtViBLVk0gUE1VIEhhbmRsZXIqKlxuXG5SaWdodCwgc28gdGhlIHRyYWNlIGxlYWRzIG1lIHRvIGBrdm1fc2JpX2V4dF9wbXVfaGFuZGxlcmAgaW4gYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3BtdS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gaG93IHRoaXMgaXMgd2lyZWQgdXA7IGl0J3MgYWx3YXlzIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQuIE5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBQTVUgY29uZmlndXJhdGlvbiBpdHNlbGYsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYXNzb2NpYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jYCB0byBzZWUgaG93IHRoZSBQTVUgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBtaWdodCBiZSBhdCBwbGF5LiBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb21wb25lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjowMTowMC4wMTA3Nzk2NjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzI4ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjcHVfcG11Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlPTI4PWt2bS15ICs9IHZjcHVfb25lcmVnLm9cXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZToyOTprdm0tJChDT05GSUdfUklTQ1ZfUE1VX1NCSSkgKz0gdmNwdV9wbXUub1xcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTMwLWt2bS15ICs9IHZjcHVfc2JpLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDE6MDAuMDY3NTE0NzA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTEzMjQ2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFJJU0MtViBLVk0gYW5kIFNCSSBTdXBwb3J0KipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gZ2V0dGluZyBgQ09ORklHX1JJU0NWX1BNVV9TQklgIHdvcmtpbmcg4oCTIHRoYXQncyBhIGtleSByZXF1aXJlbWVudCwgSSBrbm93LiBCdXQgd2FpdCwgdGhlbiB0aGUgdGhvdWdodCBzaGlmdHMgdG8gYENPTkZJR19LVk1gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgS1ZNIHN1cHBvcnQgaXMgZW5hYmxlZC4gR2l2ZW4gdGhlIGxpa2VseSBpbnRlcmFjdGlvbnMsIG15IG1lbnRhbCBjaGVja2xpc3Qgbm93IGluY2x1ZGVzIGEgZGVlcGVyIGRpdmUuIFRoZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYC4gVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgd2lsbCBwcm92aWRlIHRoZSBkZWZpbml0aXZlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyByZWxhdGVkIHRvIEtWTSBmb3IgUklTQy1WLCB3aGljaCB3aWxsIHRlbGwgbWUgcHJlY2lzZWx5IGhvdyB0aGUgUE1VIFNCSSBzdXBwb3J0IGludGVyYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAxOjAyLjkxODg0MTU0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MTY3MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSSVNDVl9QTVVfU0JJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjowMTowMi45ODE2NjUwODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5MDQ0ODA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKlRyYWNpbmcgRG93biBgUklTQ1ZfUE1VX1NCSWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoZXJlIGV4YWN0bHkgaXMgYFJJU0NWX1BNVV9TQklgIGRlZmluZWQgaW4gdGhpcyBjb2RlYmFzZT9cIiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiwgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBwaW5wb2ludCBpdHMgZGVmaW5pdGlvbiB0byByZWFsbHkgZ3Jhc3AgaXRzIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gZ2V0IHNlYXJjaGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjkxNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAxOjA1Ljc3MjExNTI0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODU0NDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUklTQ1ZfUE1VX1NCSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wZXJmL0tjb25maWc9ODg9Y29uZmlnIFJJU0NWX1BNVV9MRUdBQ1lcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTk3LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjk4OmNvbmZpZyBSSVNDVl9QTVVfU0JJXFxuZHJpdmVycy9wZXJmL0tjb25maWctOTktXFx0ZGVwZW5kcyBvbiBSSVNDVl9QTVUgXFx1MDAyNlxcdTAwMjYgUklTQ1ZfU0JJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAxOjA4LjAyMDY3MDA1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE1MDY4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFJJU0MtViBLVk0gUE1VIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGlzc3VlIGFuZCBpdCBzZWVtcyB0aGUgcmVsZXZhbnQgY29kZSBmb3IgdGhlIGBSSVNDVl9QTVVfU0JJYCBmZWF0dXJlIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvcGVyZi9LY29uZmlnYC4gUmlnaHQsIGZpcnN0IHN0ZXAsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgS1ZNYCBhbmQgYFJJU0NWX1BNVV9TQklgIGFyZSBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlLlxuXG5BaCwgaGFuZyBvbiBhIG1vbWVudCwgdGhlIHNwZWNpZmljIGJ1ZyBzZWVtcyB0byBiZSB3aXRoaW4gYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgUklTQy1WIHNwZWNpZmljLCB3aGljaCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIHF1aXRlIGEgYml0LiBDb25zaWRlcmluZyB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gS1ZNIGZvciBSSVNDLVYsIHRoaXMgKmFic29sdXRlbHkqIHdhcnJhbnRzIGZ1enppbmcuIEl0J3MgYSBrZXkgYXJlYS5cblxuSSBzaG91bGQgZm9jdXMgb24gdGhlIGZ1bmN0aW9uIHN5bWJvbHMgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wYC4gVGhvc2UgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMgZm9yIHRoZSBmdXp6ZXIuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGF0IGBSSVNDVl9QTVVfU0JJYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBpbnZvbHZlZC4gSXQncyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAxOjEyLjQzNTc0MDIxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc0NDkzNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDE6MTIuODEwMjQyNTA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzA0NjM5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBLVk0gYW5kIFJJU0NWX1BNVV9TQkkgTW9kaWZpY2F0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBLVk1gIGFuZCBgUklTQ1ZfUE1VX1NCSWAuIEdvdCBpdC4gTGV0J3Mgc2VlLi4uIHRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBhY2NvdW50ZWQgZm9yICpldmVyeXRoaW5nKiB0aGF0J3MgYmVlbiBhZmZlY3RlZC4gTm8gc3RvbmUgdW50dXJuZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhlc2UgY2hhbmdlcz8gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnl0aGluZyBlbHNlIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLiBBaCwgaXQgbG9va3MgbGlrZSBvbmx5IGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcGAgYXJlIHRoZSBtb2RpZmllZCBvbmVzLiBFeGNlbGxlbnQsIHRoYXTigJlzIGNsZWFuIGFuZCBtYW5hZ2VhYmxlLiBPa2F5LCBJJ3ZlIGdvdCBhIGNvbXBsZXRlIHBpY3R1cmUgbm93LiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzIsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDE6MTcuMTgwNzA4MzA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxOTk5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUklTQ1ZfUE1VX1NCSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgc3RhY2sgcmVhZCBpbiBSSVNDLVYgS1ZNIFBNVSBoYW5kbGluZyBieSBsaW1pdGluZyB0aGUgYml0IGl0ZXJhdGlvbiB0byB0aGUgc2l6ZSBvZiB0aGUgYGN0cl9tYXNrYCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgS1ZNIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJSSVNDVl9QTVVfU0JJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydFwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5pgkg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 05:50:53 +0000 UTC FinishedAt: 2026-06-26 06:01:18 +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", "RISCV_PMU_SBI" ], "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", "RISCV_PMU_SBI" ], "series_id": "76bfd74a-c012-44d8-90cc-2b2a0a290e8e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_vcpu_pmu_ctr_start", "kvm_riscv_vcpu_pmu_ctr_stop" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtSSVNDVl9QTVVfU0JJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBlYjY3YzFhZWY2NGViYjk3MGExOTFiMTA3MjM4MTk1ZGJlMjhhMmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAwNjowMDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuY1xuaW5kZXggYmI0NmRjYmZiMjRkYTcuLjIwMjViNjY0OTYxYzgwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuY1xuQEAgLTU4Niw3ICYjNDM7NTg2LDcgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLFxuIFx0XHR9XG4gXHR9XG4gXHQvKiBTdGFydCB0aGUgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBhbmQgcmVxdWVzdGVkIGJ5IHRoZSBndWVzdCAqL1xuLVx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZjdHJfbWFzaywgUklTQ1ZfTUFYX0NPVU5URVJTKSB7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZjdHJfbWFzaywgQklUU19QRVJfTE9ORykge1xuIFx0XHRwbWNfaW5kZXggPSBhcnJheV9pbmRleF9ub3NwZWMoaSAmIzQzOyBjdHJfYmFzZSxcbiBcdFx0XHRcdFx0ICAgICAgIFJJU0NWX0tWTV9NQVhfQ09VTlRFUlMpO1xuIFx0XHRpZiAoIXRlc3RfYml0KHBtY19pbmRleCwga3ZwbXUtXHUwMDNlcG1jX2luX3VzZSkpXG5AQCAtNjU4LDcgJiM0Mzs2NTgsNyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcbiBcdH1cbiBcbiBcdC8qIFN0b3AgdGhlIGNvdW50ZXJzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgYW5kIHJlcXVlc3RlZCBieSB0aGUgZ3Vlc3QgKi9cbi1cdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2Y3RyX21hc2ssIFJJU0NWX01BWF9DT1VOVEVSUykge1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2Y3RyX21hc2ssIEJJVFNfUEVSX0xPTkcpIHtcbiBcdFx0cG1jX2luZGV4ID0gYXJyYXlfaW5kZXhfbm9zcGVjKGkgJiM0MzsgY3RyX2Jhc2UsXG4gXHRcdFx0XHRcdCAgICAgICBSSVNDVl9LVk1fTUFYX0NPVU5URVJTKTtcbiBcdFx0aWYgKCF0ZXN0X2JpdChwbWNfaW5kZXgsIGt2cG11LVx1MDAzZXBtY19pbl91c2UpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtSSVNDVl9QTVVfU0JJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGViNjdjMWFlZjY0ZWJiOTcwYTE5MWIxMDcyMzgxOTVkYmUyOGEyZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDA2OjAwOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMKaW5kZXggYmI0NmRjYmZiMjRkYTcuLjIwMjViNjY0OTYxYzgwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMKQEAgLTU4Niw3ICYjNDM7NTg2LDcgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLAogCQl9CiAJfQogCS8qIFN0YXJ0IHRoZSBjb3VudGVycyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGFuZCByZXF1ZXN0ZWQgYnkgdGhlIGd1ZXN0ICovCi0JZm9yX2VhY2hfc2V0X2JpdChpLCAmYW1wO2N0cl9tYXNrLCBSSVNDVl9NQVhfQ09VTlRFUlMpIHsKJiM0MzsJZm9yX2VhY2hfc2V0X2JpdChpLCAmYW1wO2N0cl9tYXNrLCBCSVRTX1BFUl9MT05HKSB7CiAJCXBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICYjNDM7IGN0cl9iYXNlLAogCQkJCQkgICAgICAgUklTQ1ZfS1ZNX01BWF9DT1VOVEVSUyk7CiAJCWlmICghdGVzdF9iaXQocG1jX2luZGV4LCBrdnBtdS0mZ3Q7cG1jX2luX3VzZSkpCkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLAogCX0KIAogCS8qIFN0b3AgdGhlIGNvdW50ZXJzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgYW5kIHJlcXVlc3RlZCBieSB0aGUgZ3Vlc3QgKi8KLQlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7Y3RyX21hc2ssIFJJU0NWX01BWF9DT1VOVEVSUykgewomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7Y3RyX21hc2ssIEJJVFNfUEVSX0xPTkcpIHsKIAkJcG1jX2luZGV4ID0gYXJyYXlfaW5kZXhfbm9zcGVjKGkgJiM0MzsgY3RyX2Jhc2UsCiAJCQkJCSAgICAgICBSSVNDVl9LVk1fTUFYX0NPVU5URVJTKTsKIAkJaWYgKCF0ZXN0X2JpdChwbWNfaW5kZXgsIGt2cG11LSZndDtwbWNfaW5fdXNlKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFJJU0MtViBLVk0gUE1VIENvdW50ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFsdGVyaW5nIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHN1YnN0aXR1dGluZyBgUklTQ1ZfTUFYX0NPVU5URVJTYCB3aXRoIGBCSVRTX1BFUl9MT05HYCB3aXRoaW4gdGhlIGBmb3JfZWFjaF9zZXRfYml0YCBsb29wIGluIHRoZSBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3BgIGZ1bmN0aW9ucy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSwgYXMgaXQgY2hhbmdlcyB0aGUgdXBwZXIgYm91bmQgb2YgdGhlIGxvb3AsIHdoaWNoIGRpY3RhdGVzIGhvdyB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlIGNvdW50ZXIgbWFzay4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc2NlcnRhaW4gd2h5IHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBzd2l0Y2hpbmcgZnJvbSBhIGhhcmR3YXJlLWRlZmluZWQgbGltaXQgKGBSSVNDVl9NQVhfQ09VTlRFUlNgKSB0byBhIGRhdGEtdHlwZSBkZXBlbmRlbnQgbGltaXQgKGBCSVRTX1BFUl9MT05HYCkuIElzIHRoaXMgYSBwbGF0Zm9ybSBhZGFwdGF0aW9uPyBQZXJoYXBzIHdlIGFyZSB0cnlpbmcgdG8gZ2VuZXJhbGl6ZSB0aGUgY29kZSB0byBoYW5kbGUgdmFyaWFibGUgbnVtYmVycyBvZiBwZXJmb3JtYW5jZSBjb3VudGVycyBhY3Jvc3MgZGlmZmVyZW50IFJJU0MtViBpbXBsZW1lbnRhdGlvbnM/IE9yLCBtYXliZSB0aGlzIGlzIGEgYnVnIGZpeCDigJMgcGVyaGFwcyB0aGUgb3JpZ2luYWwgYFJJU0NWX01BWF9DT1VOVEVSU2Agd2FzIGluY29ycmVjdC4gV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGlzIGNoYW5nZSBpcyBzYWZlLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQuIEkgd2FudCB0byBzZWUgaG93IGBjdHJfbWFza2AgaXMgZGVmaW5lZCBhbmQgbWFuaXB1bGF0ZWQuIElzIGBSSVNDVl9NQVhfQ09VTlRFUlNgIHVzZWQgZWxzZXdoZXJlIGluIHRoaXMgZmlsZSwgYW5kIGlmIHNvLCBob3cgaXMgaXQgYmVpbmcgaGFuZGxlZCBub3c/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgYEJJVFNfUEVSX0xPTkdgIGlzIHNtYWxsZXIgdGhhbiwgb3IgbGFyZ2VyIHRoYW4sIGBSSVNDVl9NQVhfQ09VTlRFUlNgIGluIGRpZmZlcmVudCBSSVNDLVYgaW1wbGVtZW50YXRpb25zPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG9mZi1ieS1vbmUgZXJyb3JzIG9yIHVuaW50ZW5kZWQgYmVoYXZpb3IgcmVsYXRlZCB0byBjb3VudGVyIGluaXRpYWxpemF0aW9uIG9yIHN0YXRlIG1hbmFnZW1lbnQuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvcnJlY3RseSBpdGVyYXRlcyB0aHJvdWdoIGFuZCBhY3RpdmF0ZXMvZGVhY3RpdmF0ZXMgdGhlIGludGVuZGVkIHBlcmZvcm1hbmNlIGNvdW50ZXJzLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1lbW9yeSBsYXlvdXQgb2YgdGhlIGNvdW50ZXJzIGlzIGtleSB0byBteSBldmFsdWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM9NTQ1PWludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNpZHgsXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYy01NjAtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jOjU2MTppbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3RyX2Jhc2UsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTU2Mi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGN0cl9tYXNrLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1NjQgaXZhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgdmNwdV9wbXUuY2AgZm9yIEFuYWx5c2lzKioKCk9rYXksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBSSVNDLVYgS1ZNIGhhbmRsZXMgdmlydHVhbCBDUFUgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0cy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGNvZGUgYmV0d2VlbiBsaW5lcyA1NjAgYW5kIDY4MC4gVGhhdCByYW5nZSBsaWtlbHkgY29udGFpbnMga2V5IGxvZ2ljIHJlbGF0ZWQgdG8sIGhvcGVmdWxseSwgZWl0aGVyIGV2ZW50IGhhbmRsaW5nLCBjb3VudGVyIG1hbmFnZW1lbnQsIG9yIHBlcmhhcHMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSB2aXJ0dWFsIFBNVSBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIFRoaXMgc3VnZ2VzdHMgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhdmUgaW1wbGVtZW50ZWQgYW4gZWxlZ2FudCBzb2x1dGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgd29ydGggZXhhbWluaW5nIHRob3JvdWdobHkuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBndWVzdCBQTVUgZXZlbnRzIG1hcCB0byB0aGUgaG9zdCBoYXJkd2FyZSwgaWYgdGhlIGRlc2lnbiBpbnZvbHZlcyBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMsIG9yIGhvdyB0aGVzZSBldmVudHMgYXJlIGVtdWxhdGVkIHdpdGhpbiB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTYwOlx0XG4gNTYxOlx0aW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLFxuIDU2MjpcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY3RyX21hc2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHU2NCBpdmFsLFxuIDU2MzpcdFx0XHRcdFx0IHN0cnVjdCBrdm1fdmNwdV9zYmlfcmV0dXJuICpyZXRkYXRhKVxuIDU2NDpcdHtcbiA1NjU6XHRcdHN0cnVjdCBrdm1fcG11ICprdnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xuIDU2NjpcdFx0aW50IGksIHBtY19pbmRleCwgc2JpcmV0ID0gMDtcbiA1Njc6XHRcdHN0cnVjdCBrdm1fcG1jICpwbWM7XG4gNTY4Olx0XHRpbnQgZmV2ZW50X2NvZGU7XG4gNTY5Olx0XHRib29sIHNuYXBfZmxhZ19zZXQgPSBmbGFncyBcdTAwMjYgU0JJX1BNVV9TVEFSVF9GTEFHX0lOSVRfU05BUFNIT1Q7XG4gNTcwOlx0XG4gNTcxOlx0XHRpZiAoa3ZtX3BtdV92YWxpZGF0ZV9jb3VudGVyX21hc2soa3ZwbXUsIGN0cl9iYXNlLCBjdHJfbWFzaykgXHUwMDNjIDApIHtcbiA1NzI6XHRcdFx0c2JpcmV0ID0gU0JJX0VSUl9JTlZBTElEX1BBUkFNO1xuIDU3MzpcdFx0XHRnb3RvIG91dDtcbiA1NzQ6XHRcdH1cbiA1NzU6XHRcbiA1NzY6XHRcdGlmIChzbmFwX2ZsYWdfc2V0KSB7XG4gNTc3Olx0XHRcdGlmIChrdnBtdS1cdTAwM2VzbmFwc2hvdF9hZGRyID09IElOVkFMSURfR1BBKSB7XG4gNTc4Olx0XHRcdFx0c2JpcmV0ID0gU0JJX0VSUl9OT19TSE1FTTtcbiA1Nzk6XHRcdFx0XHRnb3RvIG91dDtcbiA1ODA6XHRcdFx0fVxuIDU4MTpcdFx0XHRpZiAoa3ZtX3ZjcHVfcmVhZF9ndWVzdCh2Y3B1LCBrdnBtdS1cdTAwM2VzbmFwc2hvdF9hZGRyLCBrdnBtdS1cdTAwM2VzZGF0YSxcbiA1ODI6XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCByaXNjdl9wbXVfc25hcHNob3RfZGF0YSkpKSB7XG4gNTgzOlx0XHRcdFx0cHJfd2FybihcJiMzNDtVbmFibGUgdG8gcmVhZCBzbmFwc2hvdCBzaGFyZWQgbWVtb3J5IHdoaWxlIHN0YXJ0aW5nIGNvdW50ZXJzXFxuXCYjMzQ7KTtcbiA1ODQ6XHRcdFx0XHRzYmlyZXQgPSBTQklfRVJSX0ZBSUxVUkU7XG4gNTg1Olx0XHRcdFx0Z290byBvdXQ7XG4gNTg2Olx0XHRcdH1cbiA1ODc6XHRcdH1cbiA1ODg6XHRcdC8qIFN0YXJ0IHRoZSBjb3VudGVycyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGFuZCByZXF1ZXN0ZWQgYnkgdGhlIGd1ZXN0ICovXG4gNTg5Olx0XHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmN0cl9tYXNrLCBCSVRTX1BFUl9MT05HKSB7XG4gNTkwOlx0XHRcdHBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICYjNDM7IGN0cl9iYXNlLFxuIDU5MTpcdFx0XHRcdFx0XHQgICAgICAgUklTQ1ZfS1ZNX01BWF9DT1VOVEVSUyk7XG4gNTkyOlx0XHRcdGlmICghdGVzdF9iaXQocG1jX2luZGV4LCBrdnBtdS1cdTAwM2VwbWNfaW5fdXNlKSlcbiA1OTM6XHRcdFx0XHRjb250aW51ZTtcbiA1OTQ6XHRcdFx0LyogVGhlIGd1ZXN0IHN0YXJ0ZWQgdGhlIGNvdW50ZXIgYWdhaW4uIFJlc2V0IHRoZSBvdmVyZmxvdyBzdGF0dXMgKi9cbiA1OTU6XHRcdFx0Y2xlYXJfYml0KHBtY19pbmRleCwga3ZwbXUtXHUwMDNlcG1jX292ZXJmbG93bik7XG4gNTk2Olx0XHRcdHBtYyA9IFx1MDAyNmt2cG11LVx1MDAzZXBtY1twbWNfaW5kZXhdO1xuIDU5NzpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IFNCSV9QTVVfU1RBUlRfRkxBR19TRVRfSU5JVF9WQUxVRSkge1xuIDU5ODpcdFx0XHRcdHBtYy1cdTAwM2Vjb3VudGVyX3ZhbCA9IGl2YWw7XG4gNTk5Olx0XHRcdH0gZWxzZSBpZiAoc25hcF9mbGFnX3NldCkge1xuIDYwMDpcdFx0XHRcdC8qIFRoZSBjb3VudGVyIGluZGV4IGluIHRoZSBzbmFwc2hvdCBhcmUgcmVsYXRpdmUgdG8gdGhlIGNvdW50ZXIgYmFzZSAqL1xuIDYwMTpcdFx0XHRcdHBtYy1cdTAwM2Vjb3VudGVyX3ZhbCA9IGt2cG11LVx1MDAzZXNkYXRhLVx1MDAzZWN0cl92YWx1ZXNbaV07XG4gNjAyOlx0XHRcdH1cbiA2MDM6XHRcbiA2MDQ6XHRcdFx0aWYgKHBtYy1cdTAwM2VjaW5mby50eXBlID09IFNCSV9QTVVfQ1RSX1RZUEVfRlcpIHtcbiA2MDU6XHRcdFx0XHRmZXZlbnRfY29kZSA9IGdldF9ldmVudF9jb2RlKHBtYy1cdTAwM2VldmVudF9pZHgpO1xuIDYwNjpcdFx0XHRcdGlmIChmZXZlbnRfY29kZSBcdTAwM2U9IFNCSV9QTVVfRldfTUFYKSB7XG4gNjA3Olx0XHRcdFx0XHRzYmlyZXQgPSBTQklfRVJSX0lOVkFMSURfUEFSQU07XG4gNjA4Olx0XHRcdFx0XHRnb3RvIG91dDtcbiA2MDk6XHRcdFx0XHR9XG4gNjEwOlx0XG4gNjExOlx0XHRcdFx0LyogQ2hlY2sgaWYgdGhlIGNvdW50ZXIgd2FzIGFscmVhZHkgc3RhcnRlZCBmb3Igc29tZSByZWFzb24gKi9cbiA2MTI6XHRcdFx0XHRpZiAoa3ZwbXUtXHUwMDNlZndfZXZlbnRbZmV2ZW50X2NvZGVdLnN0YXJ0ZWQpIHtcbiA2MTM6XHRcdFx0XHRcdHNiaXJldCA9IFNCSV9FUlJfQUxSRUFEWV9TVEFSVEVEO1xuIDYxNDpcdFx0XHRcdFx0Y29udGludWU7XG4gNjE1Olx0XHRcdFx0fVxuIDYxNjpcdFxuIDYxNzpcdFx0XHRcdGt2cG11LVx1MDAzZWZ3X2V2ZW50W2ZldmVudF9jb2RlXS5zdGFydGVkID0gdHJ1ZTtcbiA2MTg6XHRcdFx0XHRrdnBtdS1cdTAwM2Vmd19ldmVudFtmZXZlbnRfY29kZV0udmFsdWUgPSBwbWMtXHUwMDNlY291bnRlcl92YWw7XG4gNjE5Olx0XHRcdH0gZWxzZSBpZiAocG1jLVx1MDAzZXBlcmZfZXZlbnQpIHtcbiA2MjA6XHRcdFx0XHRpZiAodW5saWtlbHkocG1jLVx1MDAzZXN0YXJ0ZWQpKSB7XG4gNjIxOlx0XHRcdFx0XHRzYmlyZXQgPSBTQklfRVJSX0FMUkVBRFlfU1RBUlRFRDtcbiA2MjI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDYyMzpcdFx0XHRcdH1cbiA2MjQ6XHRcdFx0XHRwZXJmX2V2ZW50X3BlcmlvZChwbWMtXHUwMDNlcGVyZl9ldmVudCwga3ZtX3BtdV9nZXRfc2FtcGxlX3BlcmlvZChwbWMpKTtcbiA2MjU6XHRcdFx0XHRwZXJmX2V2ZW50X2VuYWJsZShwbWMtXHUwMDNlcGVyZl9ldmVudCk7XG4gNjI2Olx0XHRcdFx0cG1jLVx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xuIDYyNzpcdFx0XHR9IGVsc2Uge1xuIDYyODpcdFx0XHRcdHNiaXJldCA9IFNCSV9FUlJfSU5WQUxJRF9QQVJBTTtcbiA2Mjk6XHRcdFx0fVxuIDYzMDpcdFx0fVxuIDYzMTpcdFxuIDYzMjpcdG91dDpcbiA2MzM6XHRcdHJldGRhdGEtXHUwMDNlZXJyX3ZhbCA9IHNiaXJldDtcbiA2MzQ6XHRcbiA2MzU6XHRcdHJldHVybiAwO1xuIDYzNjpcdH1cbiA2Mzc6XHRcbiA2Mzg6XHRpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcbiA2Mzk6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgY3RyX21hc2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4gNjQwOlx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX3JldHVybiAqcmV0ZGF0YSlcbiA2NDE6XHR7XG4gNjQyOlx0XHRzdHJ1Y3Qga3ZtX3BtdSAqa3ZwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiA2NDM6XHRcdGludCBpLCBwbWNfaW5kZXgsIHNiaXJldCA9IDA7XG4gNjQ0Olx0XHR1NjQgZW5hYmxlZCwgcnVubmluZztcbiA2NDU6XHRcdHN0cnVjdCBrdm1fcG1jICpwbWM7XG4gNjQ2Olx0XHRpbnQgZmV2ZW50X2NvZGU7XG4gNjQ3Olx0XHRib29sIHNuYXBfZmxhZ19zZXQgPSBmbGFncyBcdTAwMjYgU0JJX1BNVV9TVE9QX0ZMQUdfVEFLRV9TTkFQU0hPVDtcbiA2NDg6XHRcdGJvb2wgc2htZW1fbmVlZHNfdXBkYXRlID0gZmFsc2U7XG4gNjQ5Olx0XG4gNjUwOlx0XHRpZiAoa3ZtX3BtdV92YWxpZGF0ZV9jb3VudGVyX21hc2soa3ZwbXUsIGN0cl9iYXNlLCBjdHJfbWFzaykgXHUwMDNjIDApIHtcbiA2NTE6XHRcdFx0c2JpcmV0ID0gU0JJX0VSUl9JTlZBTElEX1BBUkFNO1xuIDY1MjpcdFx0XHRnb3RvIG91dDtcbiA2NTM6XHRcdH1cbiA2NTQ6XHRcbiA2NTU6XHRcdGlmIChzbmFwX2ZsYWdfc2V0IFx1MDAyNlx1MDAyNiBrdnBtdS1cdTAwM2VzbmFwc2hvdF9hZGRyID09IElOVkFMSURfR1BBKSB7XG4gNjU2Olx0XHRcdHNiaXJldCA9IFNCSV9FUlJfTk9fU0hNRU07XG4gNjU3Olx0XHRcdGdvdG8gb3V0O1xuIDY1ODpcdFx0fVxuIDY1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBLVk0gUklTQy1WIFBNVSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhlIHBvdGVudGlhbCBmb3IgYSBuYXN0eSBidWcgaW4gdGhlIEtWTSBSSVNDLVYgUE1VIGNvZGUuIFRoZSBmaXggdGFyZ2V0cyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aXRoaW4gYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wYC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyB3aXRoIGhvdyB0aGUgYGN0cl9tYXNrYCBpcyB1c2VkIHdpdGggYGZvcl9lYWNoX3NldF9iaXRgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGN0cl9tYXNrYCwgYW4gYHVuc2lnbmVkIGxvbmdgLCBpcyBiZWluZyBpdGVyYXRlZCBvdmVyIGluY29ycmVjdGx5LiBgZm9yX2VhY2hfc2V0X2JpdGAgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYW4gdW5zaWduZWQgbG9uZyBhbmQgYSBudW1iZXIgb2YgYml0cyB0byBpdGVyYXRlIHRocm91Z2guIFByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYFJJU0NWX01BWF9DT1VOVEVSU2AsIHdoaWNoIGlzIDY0LiBCdXQgdGhlbiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgY3RyX21hc2tgIGl0c2VsZiBpcyAqanVzdCogYSBzaW5nbGUgYHVuc2lnbmVkIGxvbmdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWQgZmxhZyBnb2VzIHVwLgoKT24gYSAzMi1iaXQgc3lzdGVtIChSVjMyKSwgYW4gYHVuc2lnbmVkIGxvbmdgIGlzIDMyIGJpdHMsIGFuZCBvbiBhIDY0LWJpdCBzeXN0ZW0gKFJWNjQpLCBpdCYjMzk7cyA2NCBiaXRzLiBJZiBgUklTQ1ZfTUFYX0NPVU5URVJTYCBpcyAqYWx3YXlzKiA2NCwgZXZlbiBvbiBSVjMyLCBgZm9yX2VhY2hfc2V0X2JpdGAgaXMgdmVyeSBsaWtlbHkgdG8gcmVhZCBiZXlvbmQgdGhlIGFjdHVhbCBib3VuZHMgb2YgYGN0cl9tYXNrYCBvbiBhIDMyIGJpdCBzeXN0ZW0uIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgY3JlYXRlIGEgc3RhY2sgb3V0LW9mLWJvdW5kcyByZWFkIG9uIFJWMzIsIGFuZCBvbiBSVjY0IGl0IHdpbGwgc3RpbGwgYmUgaXRlcmF0aW5nIG92ZXIgYW4gb3V0IG9mIGJvdW5kcyBhcmVhIHRoYXQgaXMgbm90IG9mIGNvbnNlcXVlbmNlLCBidXQgd2FzdGVmdWwuCgpIYW5nIG9u4oCmIGxvb2tpbmcgY2xvc2VyLiBgY3RyX21hc2tgIGlzIHBhc3NlZCAqYnkgdmFsdWUqIHRvIHRoZSBmdW5jdGlvbiwgYnV0IHRoZSBhZGRyZXNzIGlzIHRoZW4gdGFrZW4gKGAmYW1wO2N0cl9tYXNrYCkgYW5kIHBhc3NlZCB0byBgZm9yX2VhY2hfc2V0X2JpdGAuIFRoYXQmIzM5O3MgYW4gZXZlbiBiaWdnZXIgcHJvYmxlbS4gQmVjYXVzZSBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIChwYXJhbWV0ZXIpIGFuZCBpcyBwYXNzZWQgYnkgdmFsdWUsIGFuZCB0aGUgYWRkcmVzcyBpcyB0YWtlbiwgYSByZWFkIHBhc3QgdGhlIGVuZCBvbiB0aGUgc3RhY2sgaXMgYSAqdmVyeSogYmFkIHRoaW5nLgoKVGhpcyBwYXRjaCBtYWtlcyBhIGxvdCBvZiBzZW5zZS4gQnkgY2hhbmdpbmcgdGhlIHVwcGVyIGJvdW5kIHRvIGBCSVRTX1BFUl9MT05HYCwgdGhlIGl0ZXJhdGlvbiBpcyBjb3JyZWN0bHkgbGltaXRlZCB0byB0aGUgYWN0dWFsIHNpemUgb2YgYGN0cl9tYXNrYCwgcHJldmVudGluZyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBzdGFjayBjb3JydXB0aW9uLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguIEl0IHRhcmdldHMgS1ZNIFJJU0MtViBQTVUgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmdW5jdGlvbnMgY2FsbGVkIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcGAsIHdoaWNoIGFyZSByZWFjaGVkIHZpYSB0aGUgU0JJIFBNVSBleHRlbnNpb24uIE5vdywgSSBoYXZlIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZCBmb3IgdGhpcyBjaGFuZ2UgdG8gYmUgZnVsbHkgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM9NTQ1PWludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNpZHgsXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYy01NjAtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jOjU2MTppbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3RyX2Jhc2UsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTU2Mi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGN0cl9tYXNrLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1NjQgaXZhbCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3BtdV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYy01Ny0jZW5kaWZcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3BtdS5jOjU4Olx0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0KHZjcHUsIGNwLVx1MDAzZWEwLCBjcC1cdTAwM2VhMSwgY3AtXHUwMDNlYTIsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYy01OS1cdFx0XHRcdFx0XHQgICB0ZW1wLCByZXRkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIFJJU0MtViBLVk0gUE1VIEhhbmRsZXIqKgoKUmlnaHQsIHNvIHRoZSB0cmFjZSBsZWFkcyBtZSB0byBga3ZtX3NiaV9leHRfcG11X2hhbmRsZXJgIGluIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIGhvdyB0aGlzIGlzIHdpcmVkIHVwOyBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludC4gTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFBNVSBjb25maWd1cmF0aW9uIGl0c2VsZiwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jYCB0byBzZWUgaG93IHRoZSBQTVUgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBtaWdodCBiZSBhdCBwbGF5LiBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjcHVfcG11Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vTWFrZWZpbGU9Mjg9a3ZtLXkgJiM0Mzs9IHZjcHVfb25lcmVnLm9cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlOjI5Omt2bS0kKENPTkZJR19SSVNDVl9QTVVfU0JJKSAmIzQzOz0gdmNwdV9wbXUub1xuYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGUtMzAta3ZtLXkgJiM0Mzs9IHZjcHVfc2JpLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFJJU0MtViBLVk0gYW5kIFNCSSBTdXBwb3J0KioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGZvY3VzIGlzIG9uIGdldHRpbmcgYENPTkZJR19SSVNDVl9QTVVfU0JJYCB3b3JraW5nIOKAkyB0aGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LCBJIGtub3cuIEJ1dCB3YWl0LCB0aGVuIHRoZSB0aG91Z2h0IHNoaWZ0cyB0byBgQ09ORklHX0tWTWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBLVk0gc3VwcG9ydCBpcyBlbmFibGVkLiBHaXZlbiB0aGUgbGlrZWx5IGludGVyYWN0aW9ucywgbXkgbWVudGFsIGNoZWNrbGlzdCBub3cgaW5jbHVkZXMgYSBkZWVwZXIgZGl2ZS4gVGhlIG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgLiBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNIGZvciBSSVNDLVYsIHdoaWNoIHdpbGwgdGVsbCBtZSBwcmVjaXNlbHkgaG93IHRoZSBQTVUgU0JJIHN1cHBvcnQgaW50ZXJhY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSSVNDVl9QTVVfU0JJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTE0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKlRyYWNpbmcgRG93biBgUklTQ1ZfUE1VX1NCSWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyBgUklTQ1ZfUE1VX1NCSWAgZGVmaW5lZCBpbiB0aGlzIGNvZGViYXNlPyYjMzQ7IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbiwgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24gdG8gcmVhbGx5IGdyYXNwIGl0cyBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGdldCBzZWFyY2hpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSSVNDVl9QTVVfU0JJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGVyZi9LY29uZmlnPTg4PWNvbmZpZyBSSVNDVl9QTVVfTEVHQUNZXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWctOTctXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzo5ODpjb25maWcgUklTQ1ZfUE1VX1NCSVxuZHJpdmVycy9wZXJmL0tjb25maWctOTktXHRkZXBlbmRzIG9uIFJJU0NWX1BNVSBcdTAwMjZcdTAwMjYgUklTQ1ZfU0JJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgUklTQy1WIEtWTSBQTVUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBpc3N1ZSBhbmQgaXQgc2VlbXMgdGhlIHJlbGV2YW50IGNvZGUgZm9yIHRoZSBgUklTQ1ZfUE1VX1NCSWAgZmVhdHVyZSBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL3BlcmYvS2NvbmZpZ2AuIFJpZ2h0LCBmaXJzdCBzdGVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYEtWTWAgYW5kIGBSSVNDVl9QTVVfU0JJYCBhcmUgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UuCgpBaCwgaGFuZyBvbiBhIG1vbWVudCwgdGhlIHNwZWNpZmljIGJ1ZyBzZWVtcyB0byBiZSB3aXRoaW4gYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgUklTQy1WIHNwZWNpZmljLCB3aGljaCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIHF1aXRlIGEgYml0LiBDb25zaWRlcmluZyB0aGF0IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIEtWTSBmb3IgUklTQy1WLCB0aGlzICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLiBJdCYjMzk7cyBhIGtleSBhcmVhLgoKSSBzaG91bGQgZm9jdXMgb24gdGhlIGZ1bmN0aW9uIHN5bWJvbHMgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wYC4gVGhvc2UgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMgZm9yIHRoZSBmdXp6ZXIuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgdGhhdCBgUklTQ1ZfUE1VX1NCSWAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gaW52b2x2ZWQuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzMyCgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBLVk0gYW5kIFJJU0NWX1BNVV9TQkkgTW9kaWZpY2F0aW9ucyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYEtWTWAgYW5kIGBSSVNDVl9QTVVfU0JJYC4gR290IGl0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgYWNjb3VudGVkIGZvciAqZXZlcnl0aGluZyogdGhhdCYjMzk7cyBiZWVuIGFmZmVjdGVkLiBObyBzdG9uZSB1bnR1cm5lZC4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzPyBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnl0aGluZyBlbHNlIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW55IHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cy4gQWgsIGl0IGxvb2tzIGxpa2Ugb25seSBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3BgIGFyZSB0aGUgbW9kaWZpZWQgb25lcy4gRXhjZWxsZW50LCB0aGF04oCZcyBjbGVhbiBhbmQgbWFuYWdlYWJsZS4gT2theSwgSSYjMzk7dmUgZ290IGEgY29tcGxldGUgcGljdHVyZSBub3cuIFRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtSSVNDVl9QTVVfU0JJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1JJU0NWX1BNVV9TQkkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHN0YWNrIHJlYWQgaW4gUklTQy1WIEtWTSBQTVUgaGFuZGxpbmcgYnkgbGltaXRpbmcgdGhlIGJpdCBpdGVyYXRpb24gdG8gdGhlIHNpemUgb2YgdGhlIGBjdHJfbWFza2AgcGFyYW1ldGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIEtWTSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDA6NDAuNzg0MTgyNzExWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0NzI3NDg2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJSSVNDVl9QTVVfU0JJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydFwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDA6NDAuNzg0MTg2ODkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUxMjY4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZWI2N2MxYWVmNjRlYmI5NzBhMTkxYjEwNzIzODE5NWRiZTI4YTJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDA2OjAwOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jXFxuaW5kZXggYmI0NmRjYmZiMjRkYTcuLjIwMjViNjY0OTYxYzgwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jXFxuQEAgLTU4Niw3ICs1ODYsNyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3RyX2Jhc2UsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHQvKiBTdGFydCB0aGUgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBhbmQgcmVxdWVzdGVkIGJ5IHRoZSBndWVzdCAqL1xcbi1cXHRmb3JfZWFjaF9zZXRfYml0KGksIFxcdTAwMjZjdHJfbWFzaywgUklTQ1ZfTUFYX0NPVU5URVJTKSB7XFxuK1xcdGZvcl9lYWNoX3NldF9iaXQoaSwgXFx1MDAyNmN0cl9tYXNrLCBCSVRTX1BFUl9MT05HKSB7XFxuIFxcdFxcdHBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICsgY3RyX2Jhc2UsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBSSVNDVl9LVk1fTUFYX0NPVU5URVJTKTtcXG4gXFx0XFx0aWYgKCF0ZXN0X2JpdChwbWNfaW5kZXgsIGt2cG11LVxcdTAwM2VwbWNfaW5fdXNlKSlcXG5AQCAtNjU4LDcgKzY1OCw3IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTdG9wIHRoZSBjb3VudGVycyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGFuZCByZXF1ZXN0ZWQgYnkgdGhlIGd1ZXN0ICovXFxuLVxcdGZvcl9lYWNoX3NldF9iaXQoaSwgXFx1MDAyNmN0cl9tYXNrLCBSSVNDVl9NQVhfQ09VTlRFUlMpIHtcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2Y3RyX21hc2ssIEJJVFNfUEVSX0xPTkcpIHtcXG4gXFx0XFx0cG1jX2luZGV4ID0gYXJyYXlfaW5kZXhfbm9zcGVjKGkgKyBjdHJfYmFzZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIFJJU0NWX0tWTV9NQVhfQ09VTlRFUlMpO1xcbiBcXHRcXHRpZiAoIXRlc3RfYml0KHBtY19pbmRleCwga3ZwbXUtXFx1MDAzZXBtY19pbl91c2UpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjowMDo0MS4yMDk5ODE1NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDQ2OTQxOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUklTQ1ZfUE1VX1NCSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgc3RhY2sgcmVhZCBpbiBSSVNDLVYgS1ZNIFBNVSBoYW5kbGluZyBieSBsaW1pdGluZyB0aGUgYml0IGl0ZXJhdGlvbiB0byB0aGUgc2l6ZSBvZiB0aGUgYGN0cl9tYXNrYCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgS1ZNIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGViNjdjMWFlZjY0ZWJiOTcwYTE5MWIxMDcyMzgxOTVkYmUyOGEyZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDA2OjAwOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcbmluZGV4IGJiNDZkY2JmYjI0ZGE3Li4yMDI1YjY2NDk2MWM4MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcbkBAIC01ODYsNyArNTg2LDcgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGN0cl9iYXNlLFxuIFx0XHR9XG4gXHR9XG4gXHQvKiBTdGFydCB0aGUgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBhbmQgcmVxdWVzdGVkIGJ5IHRoZSBndWVzdCAqL1xuLVx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZjdHJfbWFzaywgUklTQ1ZfTUFYX0NPVU5URVJTKSB7XG4rXHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmN0cl9tYXNrLCBCSVRTX1BFUl9MT05HKSB7XG4gXHRcdHBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICsgY3RyX2Jhc2UsXG4gXHRcdFx0XHRcdCAgICAgICBSSVNDVl9LVk1fTUFYX0NPVU5URVJTKTtcbiBcdFx0aWYgKCF0ZXN0X2JpdChwbWNfaW5kZXgsIGt2cG11LVx1MDAzZXBtY19pbl91c2UpKVxuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcbiBcdH1cbiBcbiBcdC8qIFN0b3AgdGhlIGNvdW50ZXJzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgYW5kIHJlcXVlc3RlZCBieSB0aGUgZ3Vlc3QgKi9cbi1cdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2Y3RyX21hc2ssIFJJU0NWX01BWF9DT1VOVEVSUykge1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZjdHJfbWFzaywgQklUU19QRVJfTE9ORykge1xuIFx0XHRwbWNfaW5kZXggPSBhcnJheV9pbmRleF9ub3NwZWMoaSArIGN0cl9iYXNlLFxuIFx0XHRcdFx0XHQgICAgICAgUklTQ1ZfS1ZNX01BWF9DT1VOVEVSUyk7XG4gXHRcdGlmICghdGVzdF9iaXQocG1jX2luZGV4LCBrdnBtdS1cdTAwM2VwbWNfaW5fdXNlKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQxLjIwOTk4Mjg4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjEyOTgyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBSSVNDLVYgS1ZNIFBNVSBDb3VudGVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYWx0ZXJpbmcgYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgc3Vic3RpdHV0aW5nIGBSSVNDVl9NQVhfQ09VTlRFUlNgIHdpdGggYEJJVFNfUEVSX0xPTkdgIHdpdGhpbiB0aGUgYGZvcl9lYWNoX3NldF9iaXRgIGxvb3AgaW4gdGhlIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcGAgZnVuY3Rpb25zLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlLCBhcyBpdCBjaGFuZ2VzIHRoZSB1cHBlciBib3VuZCBvZiB0aGUgbG9vcCwgd2hpY2ggZGljdGF0ZXMgaG93IHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY291bnRlciBtYXNrLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNjZXJ0YWluIHdoeSB0aGlzIGNoYW5nZSB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2Ygc3dpdGNoaW5nIGZyb20gYSBoYXJkd2FyZS1kZWZpbmVkIGxpbWl0IChgUklTQ1ZfTUFYX0NPVU5URVJTYCkgdG8gYSBkYXRhLXR5cGUgZGVwZW5kZW50IGxpbWl0IChgQklUU19QRVJfTE9OR2ApLiBJcyB0aGlzIGEgcGxhdGZvcm0gYWRhcHRhdGlvbj8gUGVyaGFwcyB3ZSBhcmUgdHJ5aW5nIHRvIGdlbmVyYWxpemUgdGhlIGNvZGUgdG8gaGFuZGxlIHZhcmlhYmxlIG51bWJlcnMgb2YgcGVyZm9ybWFuY2UgY291bnRlcnMgYWNyb3NzIGRpZmZlcmVudCBSSVNDLVYgaW1wbGVtZW50YXRpb25zPyBPciwgbWF5YmUgdGhpcyBpcyBhIGJ1ZyBmaXgg4oCTIHBlcmhhcHMgdGhlIG9yaWdpbmFsIGBSSVNDVl9NQVhfQ09VTlRFUlNgIHdhcyBpbmNvcnJlY3QuIFdlIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhpcyBjaGFuZ2UgaXMgc2FmZS5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dC4gSSB3YW50IHRvIHNlZSBob3cgYGN0cl9tYXNrYCBpcyBkZWZpbmVkIGFuZCBtYW5pcHVsYXRlZC4gSXMgYFJJU0NWX01BWF9DT1VOVEVSU2AgdXNlZCBlbHNld2hlcmUgaW4gdGhpcyBmaWxlLCBhbmQgaWYgc28sIGhvdyBpcyBpdCBiZWluZyBoYW5kbGVkIG5vdz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBgQklUU19QRVJfTE9OR2AgaXMgc21hbGxlciB0aGFuLCBvciBsYXJnZXIgdGhhbiwgYFJJU0NWX01BWF9DT1VOVEVSU2AgaW4gZGlmZmVyZW50IFJJU0MtViBpbXBsZW1lbnRhdGlvbnM/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZmYtYnktb25lIGVycm9ycyBvciB1bmludGVuZGVkIGJlaGF2aW9yIHJlbGF0ZWQgdG8gY291bnRlciBpbml0aWFsaXphdGlvbiBvciBzdGF0ZSBtYW5hZ2VtZW50LiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBjb3JyZWN0bHkgaXRlcmF0ZXMgdGhyb3VnaCBhbmQgYWN0aXZhdGVzL2RlYWN0aXZhdGVzIHRoZSBpbnRlbmRlZCBwZXJmb3JtYW5jZSBjb3VudGVycy4gQSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtZW1vcnkgbGF5b3V0IG9mIHRoZSBjb3VudGVycyBpcyBrZXkgdG8gbXkgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQ1LjgzMTI4MzE1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTgzOTgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYz01NDU9aW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY2lkeCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtNTYwLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM6NTYxOmludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTU2Mi1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjdHJfbWFzaywgdW5zaWduZWQgbG9uZyBmbGFncywgdTY0IGl2YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQ1Ljg4NzEyODc2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODkxNjUwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHZjcHVfcG11LmNgIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBSSVNDLVYgS1ZNIGhhbmRsZXMgdmlydHVhbCBDUFUgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0cy4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDU2MCBhbmQgNjgwLiBUaGF0IHJhbmdlIGxpa2VseSBjb250YWlucyBrZXkgbG9naWMgcmVsYXRlZCB0bywgaG9wZWZ1bGx5LCBlaXRoZXIgZXZlbnQgaGFuZGxpbmcsIGNvdW50ZXIgbWFuYWdlbWVudCwgb3IgcGVyaGFwcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHZpcnR1YWwgUE1VIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gVGhpcyBzdWdnZXN0cyB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBpbXBsZW1lbnRlZCBhbiBlbGVnYW50IHNvbHV0aW9uLCBzbyBpdCdzIHByb2JhYmx5IHdvcnRoIGV4YW1pbmluZyB0aG9yb3VnaGx5LiBJJ20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBndWVzdCBQTVUgZXZlbnRzIG1hcCB0byB0aGUgaG9zdCBoYXJkd2FyZSwgaWYgdGhlIGRlc2lnbiBpbnZvbHZlcyBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMsIG9yIGhvdyB0aGVzZSBldmVudHMgYXJlIGVtdWxhdGVkIHdpdGhpbiB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQ5LjE3NjI5NTQyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjA6XFx0XFxuIDU2MTpcXHRpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3RyX2Jhc2UsXFxuIDU2MjpcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjdHJfbWFzaywgdW5zaWduZWQgbG9uZyBmbGFncywgdTY0IGl2YWwsXFxuIDU2MzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGt2bV92Y3B1X3NiaV9yZXR1cm4gKnJldGRhdGEpXFxuIDU2NDpcXHR7XFxuIDU2NTpcXHRcXHRzdHJ1Y3Qga3ZtX3BtdSAqa3ZwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcXG4gNTY2OlxcdFxcdGludCBpLCBwbWNfaW5kZXgsIHNiaXJldCA9IDA7XFxuIDU2NzpcXHRcXHRzdHJ1Y3Qga3ZtX3BtYyAqcG1jO1xcbiA1Njg6XFx0XFx0aW50IGZldmVudF9jb2RlO1xcbiA1Njk6XFx0XFx0Ym9vbCBzbmFwX2ZsYWdfc2V0ID0gZmxhZ3MgXFx1MDAyNiBTQklfUE1VX1NUQVJUX0ZMQUdfSU5JVF9TTkFQU0hPVDtcXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0aWYgKGt2bV9wbXVfdmFsaWRhdGVfY291bnRlcl9tYXNrKGt2cG11LCBjdHJfYmFzZSwgY3RyX21hc2spIFxcdTAwM2MgMCkge1xcbiA1NzI6XFx0XFx0XFx0c2JpcmV0ID0gU0JJX0VSUl9JTlZBTElEX1BBUkFNO1xcbiA1NzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU3NDpcXHRcXHR9XFxuIDU3NTpcXHRcXG4gNTc2OlxcdFxcdGlmIChzbmFwX2ZsYWdfc2V0KSB7XFxuIDU3NzpcXHRcXHRcXHRpZiAoa3ZwbXUtXFx1MDAzZXNuYXBzaG90X2FkZHIgPT0gSU5WQUxJRF9HUEEpIHtcXG4gNTc4OlxcdFxcdFxcdFxcdHNiaXJldCA9IFNCSV9FUlJfTk9fU0hNRU07XFxuIDU3OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTgwOlxcdFxcdFxcdH1cXG4gNTgxOlxcdFxcdFxcdGlmIChrdm1fdmNwdV9yZWFkX2d1ZXN0KHZjcHUsIGt2cG11LVxcdTAwM2VzbmFwc2hvdF9hZGRyLCBrdnBtdS1cXHUwMDNlc2RhdGEsXFxuIDU4MjpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHJpc2N2X3BtdV9zbmFwc2hvdF9kYXRhKSkpIHtcXG4gNTgzOlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIlVuYWJsZSB0byByZWFkIHNuYXBzaG90IHNoYXJlZCBtZW1vcnkgd2hpbGUgc3RhcnRpbmcgY291bnRlcnNcXFxcblxcXCIpO1xcbiA1ODQ6XFx0XFx0XFx0XFx0c2JpcmV0ID0gU0JJX0VSUl9GQUlMVVJFO1xcbiA1ODU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU4NjpcXHRcXHRcXHR9XFxuIDU4NzpcXHRcXHR9XFxuIDU4ODpcXHRcXHQvKiBTdGFydCB0aGUgY291bnRlcnMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBhbmQgcmVxdWVzdGVkIGJ5IHRoZSBndWVzdCAqL1xcbiA1ODk6XFx0XFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2Y3RyX21hc2ssIEJJVFNfUEVSX0xPTkcpIHtcXG4gNTkwOlxcdFxcdFxcdHBtY19pbmRleCA9IGFycmF5X2luZGV4X25vc3BlYyhpICsgY3RyX2Jhc2UsXFxuIDU5MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUklTQ1ZfS1ZNX01BWF9DT1VOVEVSUyk7XFxuIDU5MjpcXHRcXHRcXHRpZiAoIXRlc3RfYml0KHBtY19pbmRleCwga3ZwbXUtXFx1MDAzZXBtY19pbl91c2UpKVxcbiA1OTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDU5NDpcXHRcXHRcXHQvKiBUaGUgZ3Vlc3Qgc3RhcnRlZCB0aGUgY291bnRlciBhZ2Fpbi4gUmVzZXQgdGhlIG92ZXJmbG93IHN0YXR1cyAqL1xcbiA1OTU6XFx0XFx0XFx0Y2xlYXJfYml0KHBtY19pbmRleCwga3ZwbXUtXFx1MDAzZXBtY19vdmVyZmxvd24pO1xcbiA1OTY6XFx0XFx0XFx0cG1jID0gXFx1MDAyNmt2cG11LVxcdTAwM2VwbWNbcG1jX2luZGV4XTtcXG4gNTk3OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNCSV9QTVVfU1RBUlRfRkxBR19TRVRfSU5JVF9WQUxVRSkge1xcbiA1OTg6XFx0XFx0XFx0XFx0cG1jLVxcdTAwM2Vjb3VudGVyX3ZhbCA9IGl2YWw7XFxuIDU5OTpcXHRcXHRcXHR9IGVsc2UgaWYgKHNuYXBfZmxhZ19zZXQpIHtcXG4gNjAwOlxcdFxcdFxcdFxcdC8qIFRoZSBjb3VudGVyIGluZGV4IGluIHRoZSBzbmFwc2hvdCBhcmUgcmVsYXRpdmUgdG8gdGhlIGNvdW50ZXIgYmFzZSAqL1xcbiA2MDE6XFx0XFx0XFx0XFx0cG1jLVxcdTAwM2Vjb3VudGVyX3ZhbCA9IGt2cG11LVxcdTAwM2VzZGF0YS1cXHUwMDNlY3RyX3ZhbHVlc1tpXTtcXG4gNjAyOlxcdFxcdFxcdH1cXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0XFx0aWYgKHBtYy1cXHUwMDNlY2luZm8udHlwZSA9PSBTQklfUE1VX0NUUl9UWVBFX0ZXKSB7XFxuIDYwNTpcXHRcXHRcXHRcXHRmZXZlbnRfY29kZSA9IGdldF9ldmVudF9jb2RlKHBtYy1cXHUwMDNlZXZlbnRfaWR4KTtcXG4gNjA2OlxcdFxcdFxcdFxcdGlmIChmZXZlbnRfY29kZSBcXHUwMDNlPSBTQklfUE1VX0ZXX01BWCkge1xcbiA2MDc6XFx0XFx0XFx0XFx0XFx0c2JpcmV0ID0gU0JJX0VSUl9JTlZBTElEX1BBUkFNO1xcbiA2MDg6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYwOTpcXHRcXHRcXHRcXHR9XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdFxcdFxcdC8qIENoZWNrIGlmIHRoZSBjb3VudGVyIHdhcyBhbHJlYWR5IHN0YXJ0ZWQgZm9yIHNvbWUgcmVhc29uICovXFxuIDYxMjpcXHRcXHRcXHRcXHRpZiAoa3ZwbXUtXFx1MDAzZWZ3X2V2ZW50W2ZldmVudF9jb2RlXS5zdGFydGVkKSB7XFxuIDYxMzpcXHRcXHRcXHRcXHRcXHRzYmlyZXQgPSBTQklfRVJSX0FMUkVBRFlfU1RBUlRFRDtcXG4gNjE0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA2MTU6XFx0XFx0XFx0XFx0fVxcbiA2MTY6XFx0XFxuIDYxNzpcXHRcXHRcXHRcXHRrdnBtdS1cXHUwMDNlZndfZXZlbnRbZmV2ZW50X2NvZGVdLnN0YXJ0ZWQgPSB0cnVlO1xcbiA2MTg6XFx0XFx0XFx0XFx0a3ZwbXUtXFx1MDAzZWZ3X2V2ZW50W2ZldmVudF9jb2RlXS52YWx1ZSA9IHBtYy1cXHUwMDNlY291bnRlcl92YWw7XFxuIDYxOTpcXHRcXHRcXHR9IGVsc2UgaWYgKHBtYy1cXHUwMDNlcGVyZl9ldmVudCkge1xcbiA2MjA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHBtYy1cXHUwMDNlc3RhcnRlZCkpIHtcXG4gNjIxOlxcdFxcdFxcdFxcdFxcdHNiaXJldCA9IFNCSV9FUlJfQUxSRUFEWV9TVEFSVEVEO1xcbiA2MjI6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDYyMzpcXHRcXHRcXHRcXHR9XFxuIDYyNDpcXHRcXHRcXHRcXHRwZXJmX2V2ZW50X3BlcmlvZChwbWMtXFx1MDAzZXBlcmZfZXZlbnQsIGt2bV9wbXVfZ2V0X3NhbXBsZV9wZXJpb2QocG1jKSk7XFxuIDYyNTpcXHRcXHRcXHRcXHRwZXJmX2V2ZW50X2VuYWJsZShwbWMtXFx1MDAzZXBlcmZfZXZlbnQpO1xcbiA2MjY6XFx0XFx0XFx0XFx0cG1jLVxcdTAwM2VzdGFydGVkID0gdHJ1ZTtcXG4gNjI3OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDYyODpcXHRcXHRcXHRcXHRzYmlyZXQgPSBTQklfRVJSX0lOVkFMSURfUEFSQU07XFxuIDYyOTpcXHRcXHRcXHR9XFxuIDYzMDpcXHRcXHR9XFxuIDYzMTpcXHRcXG4gNjMyOlxcdG91dDpcXG4gNjMzOlxcdFxcdHJldGRhdGEtXFx1MDAzZWVycl92YWwgPSBzYmlyZXQ7XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdHJldHVybiAwO1xcbiA2MzY6XFx0fVxcbiA2Mzc6XFx0XFxuIDYzODpcXHRpbnQga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcXG4gNjM5OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3RyX21hc2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuIDY0MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHVfc2JpX3JldHVybiAqcmV0ZGF0YSlcXG4gNjQxOlxcdHtcXG4gNjQyOlxcdFxcdHN0cnVjdCBrdm1fcG11ICprdnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xcbiA2NDM6XFx0XFx0aW50IGksIHBtY19pbmRleCwgc2JpcmV0ID0gMDtcXG4gNjQ0OlxcdFxcdHU2NCBlbmFibGVkLCBydW5uaW5nO1xcbiA2NDU6XFx0XFx0c3RydWN0IGt2bV9wbWMgKnBtYztcXG4gNjQ2OlxcdFxcdGludCBmZXZlbnRfY29kZTtcXG4gNjQ3OlxcdFxcdGJvb2wgc25hcF9mbGFnX3NldCA9IGZsYWdzIFxcdTAwMjYgU0JJX1BNVV9TVE9QX0ZMQUdfVEFLRV9TTkFQU0hPVDtcXG4gNjQ4OlxcdFxcdGJvb2wgc2htZW1fbmVlZHNfdXBkYXRlID0gZmFsc2U7XFxuIDY0OTpcXHRcXG4gNjUwOlxcdFxcdGlmIChrdm1fcG11X3ZhbGlkYXRlX2NvdW50ZXJfbWFzayhrdnBtdSwgY3RyX2Jhc2UsIGN0cl9tYXNrKSBcXHUwMDNjIDApIHtcXG4gNjUxOlxcdFxcdFxcdHNiaXJldCA9IFNCSV9FUlJfSU5WQUxJRF9QQVJBTTtcXG4gNjUyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2NTM6XFx0XFx0fVxcbiA2NTQ6XFx0XFxuIDY1NTpcXHRcXHRpZiAoc25hcF9mbGFnX3NldCBcXHUwMDI2XFx1MDAyNiBrdnBtdS1cXHUwMDNlc25hcHNob3RfYWRkciA9PSBJTlZBTElEX0dQQSkge1xcbiA2NTY6XFx0XFx0XFx0c2JpcmV0ID0gU0JJX0VSUl9OT19TSE1FTTtcXG4gNjU3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2NTg6XFx0XFx0fVxcbiA2NTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAwOjQ5LjE3NjQwMDU0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDQ3NDU3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBLVk0gUklTQy1WIFBNVSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIGEgbmFzdHkgYnVnIGluIHRoZSBLVk0gUklTQy1WIFBNVSBjb2RlLiBUaGUgZml4IHRhcmdldHMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2l0aGluIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGxpZXMgd2l0aCBob3cgdGhlIGBjdHJfbWFza2AgaXMgdXNlZCB3aXRoIGBmb3JfZWFjaF9zZXRfYml0YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGN0cl9tYXNrYCwgYW4gYHVuc2lnbmVkIGxvbmdgLCBpcyBiZWluZyBpdGVyYXRlZCBvdmVyIGluY29ycmVjdGx5LiBgZm9yX2VhY2hfc2V0X2JpdGAgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYW4gdW5zaWduZWQgbG9uZyBhbmQgYSBudW1iZXIgb2YgYml0cyB0byBpdGVyYXRlIHRocm91Z2guIFByZXZpb3VzbHksIHRoZSBjb2RlIHVzZWQgYFJJU0NWX01BWF9DT1VOVEVSU2AsIHdoaWNoIGlzIDY0LiBCdXQgdGhlbiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgY3RyX21hc2tgIGl0c2VsZiBpcyAqanVzdCogYSBzaW5nbGUgYHVuc2lnbmVkIGxvbmdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWQgZmxhZyBnb2VzIHVwLlxuXG5PbiBhIDMyLWJpdCBzeXN0ZW0gKFJWMzIpLCBhbiBgdW5zaWduZWQgbG9uZ2AgaXMgMzIgYml0cywgYW5kIG9uIGEgNjQtYml0IHN5c3RlbSAoUlY2NCksIGl0J3MgNjQgYml0cy4gSWYgYFJJU0NWX01BWF9DT1VOVEVSU2AgaXMgKmFsd2F5cyogNjQsIGV2ZW4gb24gUlYzMiwgYGZvcl9lYWNoX3NldF9iaXRgIGlzIHZlcnkgbGlrZWx5IHRvIHJlYWQgYmV5b25kIHRoZSBhY3R1YWwgYm91bmRzIG9mIGBjdHJfbWFza2Agb24gYSAzMiBiaXQgc3lzdGVtLiBJdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGNyZWF0ZSBhIHN0YWNrIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBSVjMyLCBhbmQgb24gUlY2NCBpdCB3aWxsIHN0aWxsIGJlIGl0ZXJhdGluZyBvdmVyIGFuIG91dCBvZiBib3VuZHMgYXJlYSB0aGF0IGlzIG5vdCBvZiBjb25zZXF1ZW5jZSwgYnV0IHdhc3RlZnVsLlxuXG5IYW5nIG9u4oCmIGxvb2tpbmcgY2xvc2VyLiBgY3RyX21hc2tgIGlzIHBhc3NlZCAqYnkgdmFsdWUqIHRvIHRoZSBmdW5jdGlvbiwgYnV0IHRoZSBhZGRyZXNzIGlzIHRoZW4gdGFrZW4gKGBcdTAwMjZjdHJfbWFza2ApIGFuZCBwYXNzZWQgdG8gYGZvcl9lYWNoX3NldF9iaXRgLiBUaGF0J3MgYW4gZXZlbiBiaWdnZXIgcHJvYmxlbS4gQmVjYXVzZSBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIChwYXJhbWV0ZXIpIGFuZCBpcyBwYXNzZWQgYnkgdmFsdWUsIGFuZCB0aGUgYWRkcmVzcyBpcyB0YWtlbiwgYSByZWFkIHBhc3QgdGhlIGVuZCBvbiB0aGUgc3RhY2sgaXMgYSAqdmVyeSogYmFkIHRoaW5nLlxuXG5UaGlzIHBhdGNoIG1ha2VzIGEgbG90IG9mIHNlbnNlLiBCeSBjaGFuZ2luZyB0aGUgdXBwZXIgYm91bmQgdG8gYEJJVFNfUEVSX0xPTkdgLCB0aGUgaXRlcmF0aW9uIGlzIGNvcnJlY3RseSBsaW1pdGVkIHRvIHRoZSBhY3R1YWwgc2l6ZSBvZiBgY3RyX21hc2tgLCBwcmV2ZW50aW5nIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHN0YWNrIGNvcnJ1cHRpb24uXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBidWcgZml4LiBJdCB0YXJnZXRzIEtWTSBSSVNDLVYgUE1VIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZnVuY3Rpb25zIGNhbGxlZCBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydGAgYW5kIGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0b3BgLCB3aGljaCBhcmUgcmVhY2hlZCB2aWEgdGhlIFNCSSBQTVUgZXh0ZW5zaW9uLiBOb3csIEkgaGF2ZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQgZm9yIHRoaXMgY2hhbmdlIHRvIGJlIGZ1bGx5IGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjowMDo1Ni45MjExNDc5OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3ODMwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYz01NDU9aW50IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY2lkeCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtNTYwLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM6NTYxOmludCBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjdHJfYmFzZSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTU2Mi1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjdHJfbWFzaywgdW5zaWduZWQgbG9uZyBmbGFncywgdTY0IGl2YWwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3BtdV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3BtdS5jLTU3LSNlbmRpZlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3BtdS5jOjU4OlxcdFxcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnQodmNwdSwgY3AtXFx1MDAzZWEwLCBjcC1cXHUwMDNlYTEsIGNwLVxcdTAwM2VhMixcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9wbXUuYy01OS1cXHRcXHRcXHRcXHRcXHRcXHQgICB0ZW1wLCByZXRkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDA6NTYuOTc5OTM4NjI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMDgzOTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJJU0MtViBLVk0gUE1VIEhhbmRsZXIqKlxuXG5SaWdodCwgc28gdGhlIHRyYWNlIGxlYWRzIG1lIHRvIGBrdm1fc2JpX2V4dF9wbXVfaGFuZGxlcmAgaW4gYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3BtdS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gaG93IHRoaXMgaXMgd2lyZWQgdXA7IGl0J3MgYWx3YXlzIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQuIE5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBQTVUgY29uZmlndXJhdGlvbiBpdHNlbGYsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYXNzb2NpYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jYCB0byBzZWUgaG93IHRoZSBQTVUgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBtaWdodCBiZSBhdCBwbGF5LiBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb21wb25lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjowMTowMC4wMTA3Nzk2NjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzI4ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjcHVfcG11Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlPTI4PWt2bS15ICs9IHZjcHVfb25lcmVnLm9cXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZToyOTprdm0tJChDT05GSUdfUklTQ1ZfUE1VX1NCSSkgKz0gdmNwdV9wbXUub1xcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTMwLWt2bS15ICs9IHZjcHVfc2JpLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDE6MDAuMDY3NTE0NzA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTEzMjQ2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFJJU0MtViBLVk0gYW5kIFNCSSBTdXBwb3J0KipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gZ2V0dGluZyBgQ09ORklHX1JJU0NWX1BNVV9TQklgIHdvcmtpbmcg4oCTIHRoYXQncyBhIGtleSByZXF1aXJlbWVudCwgSSBrbm93LiBCdXQgd2FpdCwgdGhlbiB0aGUgdGhvdWdodCBzaGlmdHMgdG8gYENPTkZJR19LVk1gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgS1ZNIHN1cHBvcnQgaXMgZW5hYmxlZC4gR2l2ZW4gdGhlIGxpa2VseSBpbnRlcmFjdGlvbnMsIG15IG1lbnRhbCBjaGVja2xpc3Qgbm93IGluY2x1ZGVzIGEgZGVlcGVyIGRpdmUuIFRoZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYC4gVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgd2lsbCBwcm92aWRlIHRoZSBkZWZpbml0aXZlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyByZWxhdGVkIHRvIEtWTSBmb3IgUklTQy1WLCB3aGljaCB3aWxsIHRlbGwgbWUgcHJlY2lzZWx5IGhvdyB0aGUgUE1VIFNCSSBzdXBwb3J0IGludGVyYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAxOjAyLjkxODg0MTU0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MTY3MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSSVNDVl9QTVVfU0JJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjowMTowMi45ODE2NjUwODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5MDQ0ODA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKlRyYWNpbmcgRG93biBgUklTQ1ZfUE1VX1NCSWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoZXJlIGV4YWN0bHkgaXMgYFJJU0NWX1BNVV9TQklgIGRlZmluZWQgaW4gdGhpcyBjb2RlYmFzZT9cIiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiwgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBwaW5wb2ludCBpdHMgZGVmaW5pdGlvbiB0byByZWFsbHkgZ3Jhc3AgaXRzIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gZ2V0IHNlYXJjaGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjkxNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAxOjA1Ljc3MjExNTI0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0ODU0NDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUklTQ1ZfUE1VX1NCSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wZXJmL0tjb25maWc9ODg9Y29uZmlnIFJJU0NWX1BNVV9MRUdBQ1lcXG4tLVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTk3LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjk4OmNvbmZpZyBSSVNDVl9QTVVfU0JJXFxuZHJpdmVycy9wZXJmL0tjb25maWctOTktXFx0ZGVwZW5kcyBvbiBSSVNDVl9QTVUgXFx1MDAyNlxcdTAwMjYgUklTQ1ZfU0JJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAxOjA4LjAyMDY3MDA1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE1MDY4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFJJU0MtViBLVk0gUE1VIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGlzc3VlIGFuZCBpdCBzZWVtcyB0aGUgcmVsZXZhbnQgY29kZSBmb3IgdGhlIGBSSVNDVl9QTVVfU0JJYCBmZWF0dXJlIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvcGVyZi9LY29uZmlnYC4gUmlnaHQsIGZpcnN0IHN0ZXAsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgS1ZNYCBhbmQgYFJJU0NWX1BNVV9TQklgIGFyZSBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlLlxuXG5BaCwgaGFuZyBvbiBhIG1vbWVudCwgdGhlIHNwZWNpZmljIGJ1ZyBzZWVtcyB0byBiZSB3aXRoaW4gYGFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgUklTQy1WIHNwZWNpZmljLCB3aGljaCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIHF1aXRlIGEgYml0LiBDb25zaWRlcmluZyB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gS1ZNIGZvciBSSVNDLVYsIHRoaXMgKmFic29sdXRlbHkqIHdhcnJhbnRzIGZ1enppbmcuIEl0J3MgYSBrZXkgYXJlYS5cblxuSSBzaG91bGQgZm9jdXMgb24gdGhlIGZ1bmN0aW9uIHN5bWJvbHMgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wYC4gVGhvc2UgYXJlIHRoZSBvYnZpb3VzIHRhcmdldHMgZm9yIHRoZSBmdXp6ZXIuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGF0IGBSSVNDVl9QTVVfU0JJYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBpbnZvbHZlZC4gSXQncyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjAxOjEyLjQzNTc0MDIxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc0NDkzNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDE6MTIuODEwMjQyNTA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzA0NjM5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBLVk0gYW5kIFJJU0NWX1BNVV9TQkkgTW9kaWZpY2F0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBLVk1gIGFuZCBgUklTQ1ZfUE1VX1NCSWAuIEdvdCBpdC4gTGV0J3Mgc2VlLi4uIHRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBhY2NvdW50ZWQgZm9yICpldmVyeXRoaW5nKiB0aGF0J3MgYmVlbiBhZmZlY3RlZC4gTm8gc3RvbmUgdW50dXJuZWQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhlc2UgY2hhbmdlcz8gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnl0aGluZyBlbHNlIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLiBBaCwgaXQgbG9va3MgbGlrZSBvbmx5IGBrdm1fcmlzY3ZfdmNwdV9wbXVfY3RyX3N0YXJ0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcGAgYXJlIHRoZSBtb2RpZmllZCBvbmVzLiBFeGNlbGxlbnQsIHRoYXTigJlzIGNsZWFuIGFuZCBtYW5hZ2VhYmxlLiBPa2F5LCBJJ3ZlIGdvdCBhIGNvbXBsZXRlIHBpY3R1cmUgbm93LiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzIsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MDE6MTcuMTgwNzA4MzA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxOTk5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiUklTQ1ZfUE1VX1NCSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RhcnRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3BtdV9jdHJfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgc3RhY2sgcmVhZCBpbiBSSVNDLVYgS1ZNIFBNVSBoYW5kbGluZyBieSBsaW1pdGluZyB0aGUgYml0IGl0ZXJhdGlvbiB0byB0aGUgc2l6ZSBvZiB0aGUgYGN0cl9tYXNrYCBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgS1ZNIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJSSVNDVl9QTVVfU0JJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdGFydFwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfcG11X2N0cl9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBzdGFjayByZWFkIGluIFJJU0MtViBLVk0gUE1VIGhhbmRsaW5nIGJ5IGxpbWl0aW5nIHRoZSBiaXQgaXRlcmF0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBgY3RyX21hc2tgIHBhcmFtZXRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5pgkg[1] Phase: Succeeded StartedAt: 2026-06-26 06:01:28 +0000 UTC FinishedAt: 2026-06-26 06:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 06:01:28 +0000 UTC FinishedAt: 2026-06-26 06:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2] Phase: Succeeded StartedAt: 2026-06-26 06:01:28 +0000 UTC FinishedAt: 2026-06-26 06:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-26 06:01:28 +0000 UTC FinishedAt: 2026-06-26 06:51:55 +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","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 06:01:28 +0000 UTC FinishedAt: 2026-06-26 06:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:01:28 +0000 UTC FinishedAt: 2026-06-26 06:01:33 +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","RISCV_PMU_SBI"],"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-workflow5pgkg/series-workflow5pgkg-convert-artifact-1202509748/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 06:01:38 +0000 UTC FinishedAt: 2026-06-26 06:22:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:01:38 +0000 UTC FinishedAt: 2026-06-26 06:22:34 +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:*054bf571-2ce7-4765-ae93-ec2e909062bc,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-workflow5pgkg/series-workflow5pgkg-convert-artifact-1202509748/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": "a6c3e8a1-a25c-4134-9fa1-5556d1003f3d", "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-workflow5pgkg/series-workflow5pgkg-build-action-2752548274/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:01:38 +0000 UTC FinishedAt: 2026-06-26 06:22:24 +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:*054bf571-2ce7-4765-ae93-ec2e909062bc,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-workflow5pgkg/series-workflow5pgkg-convert-artifact-1202509748/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": "a6c3e8a1-a25c-4134-9fa1-5556d1003f3d", "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-workflow5pgkg/series-workflow5pgkg-build-action-2752548274/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 06:22:34 +0000 UTC FinishedAt: 2026-06-26 06:22:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:22:34 +0000 UTC FinishedAt: 2026-06-26 06:22:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 06:22:34 +0000 UTC FinishedAt: 2026-06-26 06:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:22:34 +0000 UTC FinishedAt: 2026-06-26 06:22:41 +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","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-workflow5pgkg/series-workflow5pgkg-convert-artifact-3793868915/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 06:22:44 +0000 UTC FinishedAt: 2026-06-26 06:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:22:44 +0000 UTC FinishedAt: 2026-06-26 06:24:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a6c3e8a1-a25c-4134-9fa1-5556d1003f3d,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-workflow5pgkg/series-workflow5pgkg-build-action-2752548274/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-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 06:25:07 +0000 UTC FinishedAt: 2026-06-26 06:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:25:07 +0000 UTC FinishedAt: 2026-06-26 06:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 06:25:07 +0000 UTC FinishedAt: 2026-06-26 06:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:25:07 +0000 UTC FinishedAt: 2026-06-26 06:46:53 +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:*054bf571-2ce7-4765-ae93-ec2e909062bc,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-workflow5pgkg/series-workflow5pgkg-convert-artifact-3793868915/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": "31c85f78-cb0e-4a92-9e08-bb5ac6b3638e", "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-workflow5pgkg/series-workflow5pgkg-build-action-1195937831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:25:07 +0000 UTC FinishedAt: 2026-06-26 06:46:45 +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:*054bf571-2ce7-4765-ae93-ec2e909062bc,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-workflow5pgkg/series-workflow5pgkg-convert-artifact-3793868915/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": "31c85f78-cb0e-4a92-9e08-bb5ac6b3638e", "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-workflow5pgkg/series-workflow5pgkg-build-action-1195937831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-26 06:46:53 +0000 UTC FinishedAt: 2026-06-26 06:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:46:53 +0000 UTC FinishedAt: 2026-06-26 06:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-26 06:46:53 +0000 UTC FinishedAt: 2026-06-26 06:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:46:53 +0000 UTC FinishedAt: 2026-06-26 06:48:51 +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:*31c85f78-cb0e-4a92-9e08-bb5ac6b3638e,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-workflow5pgkg/series-workflow5pgkg-build-action-1195937831/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-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-26 06:49:01 +0000 UTC FinishedAt: 2026-06-26 06:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:49:01 +0000 UTC FinishedAt: 2026-06-26 06:51:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"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:*a6c3e8a1-a25c-4134-9fa1-5556d1003f3d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*31c85f78-cb0e-4a92-9e08-bb5ac6b3638e,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-workflow5pgkg/series-workflow5pgkg-build-action-2752548274/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-workflow5pgkg/series-workflow5pgkg-build-action-1195937831/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:49:01 +0000 UTC FinishedAt: 2026-06-26 06:49:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:49:01 +0000 UTC FinishedAt: 2026-06-26 06:49:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"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-workflow5pgkg/series-workflow5pgkg-convert-artifact-3690398828/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:49:01 +0000 UTC FinishedAt: 2026-06-26 06:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-26 06:49:01 +0000 UTC FinishedAt: 2026-06-26 06:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:49:01 +0000 UTC FinishedAt: 2026-06-26 06:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:49:11 +0000 UTC FinishedAt: 2026-06-26 06:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5pgkg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"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":["kvm_riscv_vcpu_pmu_ctr_start","kvm_riscv_vcpu_pmu_ctr_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","RISCV_PMU_SBI"],"series_id":"76bfd74a-c012-44d8-90cc-2b2a0a290e8e","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-06-26 06:49:11 +0000 UTC FinishedAt: 2026-06-26 06:51:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a6c3e8a1-a25c-4134-9fa1-5556d1003f3d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*31c85f78-cb0e-4a92-9e08-bb5ac6b3638e,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-workflow5pgkg/series-workflow5pgkg-build-action-2752548274/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-workflow5pgkg/series-workflow5pgkg-build-action-1195937831/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-workflow5pgkg/series-workflow5pgkg-convert-artifact-3690398828/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,}