Name: series-workflow4z4rq Phase: Succeeded StartedAt: 2026-08-12 00:05:40 +0000 UTC FinishedAt: 2026-08-12 04:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[0] Phase: Succeeded StartedAt: 2026-08-12 00:05:40 +0000 UTC FinishedAt: 2026-08-12 00:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 00:05:40 +0000 UTC FinishedAt: 2026-08-12 00:56:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PERF_EVENTS", "BPF_SYSCALL", "KPROBES", "KPROBE_EVENTS", "BPF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PERF_EVENTS", "BPF_SYSCALL", "KPROBES", "KPROBE_EVENTS", "BPF_EVENTS" ], "series_id": "6ab9263c-7142-4ecc-b0bb-5233a3846bad" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "perf_event_overflow", "perf_event_detach_bpf_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVyZl9ldmVudF9vdmVyZmxvdyYjMzQ7LAogICAgJiMzNDtwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChkYXRhIHJhY2UpIHRoYXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZS4gU3BlY2lmaWNhbGx5LCBgZXZlbnQtXHUwMDNlcHJvZ2Agd2FzIGJlaW5nIGNoZWNrZWQgZm9yIG5vbi1OVUxMIGFuZCB0aGVuIGRlcmVmZXJlbmNlZCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93KClgLCB3aGlsZSBpdCBjb3VsZCBiZSBjb25jdXJyZW50bHkgc2V0IHRvIE5VTEwgaW4gYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKClgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBSRUFEX09OQ0UoKWAgYW5kIGBXUklURV9PTkNFKClgIGVuc3VyZXMgdGhlIHBvaW50ZXIgaXMgZmV0Y2hlZCBvbmx5IG9uY2UsIHByZXZlbnRpbmcgdGhlIHJhY2UuXG5cblRoaXMgdHlwZSBvZiBidWcgKGRhdGEgcmFjZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlKSBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgZ2VuZXJhbCBrZXJuZWwgY3Jhc2ggcmVwb3J0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYXMgS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIG9uIGBldmVudC1cdTAwM2Vwcm9nYCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYCBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVnIGluIHRoZSBjb3JlIHBlcmYvYnBmIHN1YnN5c3RlbS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTllODhmOTFiNjk1ZjRmYzA0ZWQ5ODZiZjQ2Zjg5ZWZkZTg0M2RlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAwOjU0OjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvY29yZS5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmNcbmluZGV4IGJhNWJkNmE3OGZlN2IuLjlkOWM1NDc3NzcyZTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V2ZW50cy9jb3JlLmNcbkBAIC0xMDc1Myw2ICYjNDM7MTA3NTMsNyBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4ge1xuIFx0aW50IGV2ZW50cyA9IGF0b21pY19yZWFkKFx1MDAyNmV2ZW50LVx1MDAzZWV2ZW50X2xpbWl0KTtcbiBcdGludCByZXQgPSAwO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcbiBcdC8qXG4gXHQgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydFxuQEAgLTEwNzY2LDcgJiM0MzsxMDc2Nyw4IEBAIHN0YXRpYyBpbnQgX19wZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbiBcdGlmIChldmVudC1cdTAwM2VhdHRyLmF1eF9wYXVzZSlcbiBcdFx0cGVyZl9ldmVudF9hdXhfcGF1c2UoZXZlbnQtXHUwMDNlYXV4X2V2ZW50LCB0cnVlKTtcbiBcbi1cdGlmIChldmVudC1cdTAwM2Vwcm9nIFx1MDAyNlx1MDAyNiBldmVudC1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UIFx1MDAyNlx1MDAyNlxuJiM0MztcdHByb2cgPSBSRUFEX09OQ0UoZXZlbnQtXHUwMDNlcHJvZyk7XG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWJwZl9vdmVyZmxvd19oYW5kbGVyKGV2ZW50LCBkYXRhLCByZWdzKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5pbmRleCA3NTQ5NWE1YzM1MDc5Li5lZTYxZGM3NjAwNDUzIDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbkBAIC0yMDE4LDcgJiM0MzsyMDE4LDcgQEAgdm9pZCBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4gXG4gcHV0OlxuIFx0cHJvZyA9IGV2ZW50LVx1MDAzZXByb2c7XG4tXHRldmVudC1cdTAwM2Vwcm9nID0gTlVMTDtcbiYjNDM7XHRXUklURV9PTkNFKGV2ZW50LVx1MDAzZXByb2csIE5VTEwpO1xuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZicGZfZXZlbnRfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O0tQUk9CRV9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BlcmZfZXZlbnRfb3ZlcmZsb3cmIzM0OywKICAgICYjMzQ7cGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYGV2ZW50LVx1MDAzZXByb2dgIGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGJ5IHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgaW4gdGhlIGNvcmUgcGVyZi9icGYgc3Vic3lzdGVtLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOWU4OGY5MWI2OTVmNGZjMDRlZDk4NmJmNDZmODllZmRlODQzZGU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDA6NTQ6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IGJhNWJkNmE3OGZlN2IuLjlkOWM1NDc3NzcyZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC0xMDc1Myw2ICYjNDM7MTA3NTMsNyBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiB7CiAJaW50IGV2ZW50cyA9IGF0b21pY19yZWFkKCZhbXA7ZXZlbnQtJmd0O2V2ZW50X2xpbWl0KTsKIAlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IGJwZl9wcm9nICpwcm9nOwogCiAJLyoKIAkgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydApAQCAtMTA3NjYsNyAmIzQzOzEwNzY3LDggQEAgc3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCWlmIChldmVudC0mZ3Q7YXR0ci5hdXhfcGF1c2UpCiAJCXBlcmZfZXZlbnRfYXV4X3BhdXNlKGV2ZW50LSZndDthdXhfZXZlbnQsIHRydWUpOwogCi0JaWYgKGV2ZW50LSZndDtwcm9nICZhbXA7JmFtcDsgZXZlbnQtJmd0O3Byb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UICZhbXA7JmFtcDsKJiM0MzsJcHJvZyA9IFJFQURfT05DRShldmVudC0mZ3Q7cHJvZyk7CiYjNDM7CWlmIChwcm9nICZhbXA7JmFtcDsgcHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgJmFtcDsmYW1wOwogCSAgICAhYnBmX292ZXJmbG93X2hhbmRsZXIoZXZlbnQsIGRhdGEsIHJlZ3MpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDc1NDk1YTVjMzUwNzkuLmVlNjFkYzc2MDA0NTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTIwMTgsNyAmIzQzOzIwMTgsNyBAQCB2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIAogcHV0OgogCXByb2cgPSBldmVudC0mZ3Q7cHJvZzsKLQlldmVudC0mZ3Q7cHJvZyA9IE5VTEw7CiYjNDM7CVdSSVRFX09OQ0UoZXZlbnQtJmd0O3Byb2csIE5VTEwpOwogCiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7YnBmX2V2ZW50X211dGV4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYW5kIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgYWNjZXNzLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGRpcmVjdCBhY2Nlc3NlcyB0byBgZXZlbnQtJmd0O3Byb2dgIHdpdGggYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBkZWZpbml0ZWx5IHNtZWxscyBsaWtlIGEgcmFjZSBjb25kaXRpb24gZml4LiBHb29kLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2Agd2l0aGluIHRoZSBjb3JlIHBlcmYgZXZlbnQgaGFuZGxpbmcsIGFuZCB0aGVuIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AsIHdoaWNoIGhhbmRsZXMgQlBGIHByb2dyYW0gZGV0YWNobWVudCwgc28gd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIGZ1bmN0aW9ucy4gQm90aCBvZiB0aGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIENoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uLCBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGlzIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGlmIGBDT05GSUdfUEVSRl9FVkVOVFNgIGlzIGVuYWJsZWQsIGFzIGV4cGVjdGVkLiBBbmQsIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgJiMzOTtzIHByZXNlbmNlIGRlcGVuZHMgb24gYENPTkZJR19CUEZfRVZFTlRTYC4gTm93LCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIGFnYWluc3QgdGhlaXIgcmVzcGVjdGl2ZSBNYWtlZmlsZXMgdG8gYmUgc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE5NTE9aW50IHBlcmZfZXZlbnRfYXR0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5NC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxOTk1OnZvaWQgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE5OTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipMb29raW5nIGZvciB0aGUgQlBGIFRyYWNlIE9iamVjdCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgYnBmX3RyYWNlLm9gIGlzIGJ1aWx0LiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBga2VybmVsL3RyYWNlYCBkaXJlY3RvcnksIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdHJhY2luZyBmdW5jdGlvbmFsaXR5IHR5cGljYWxseSByZXNpZGVzLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGtlcm5lbC90cmFjZS9NYWtlZmlsZWAgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBjb21tYW5kIGNlbnRlciBmb3IgYnVpbGRpbmcgdHJhY2UtcmVsYXRlZCBvYmplY3QgZmlsZXMsIGFuZCB0aGlzIHNob3VsZCBnaXZlIG1lIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgSSBuZWVkLiBIb3BlZnVsbHksIHRoaXMgTWFrZWZpbGUgaGFzIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBpZGVudGlmeSBvciBidWlsZCBgYnBmX3RyYWNlLm9gIHdpdGhpbiB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSAmIzQzOz0gdHJhY2VfZXZlbnRzX3VzZXIub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgJiM0Mzs9IGJwZl90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSAmIzQzOz0gdHJhY2Vfa3Byb2JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzExCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIEV2ZW50IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGIGV2ZW50cy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGF0IGBDT05GSUdfQlBGX0VWRU5UU2AgaXMgZ29pbmcgdG8gYmUgYSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIG9iamVjdCBmaWxlIHJlbGF0ZWQgdG8gdGhlIGNvcmUgb2YgdGhpcyBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlIGBrZXJuZWwvZXZlbnRzL01ha2VmaWxlYC4gSSYjMzk7bGwgZ28gdGFrZSBhIGxvb2sgdGhlcmUgdG8gc2VlIGlmIEkgY2FuIGZpbmQgYGNvcmUub2AuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29yZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9ldmVudHMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5rZXJuZWwvZXZlbnRzL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vIHJpbmdfYnVmZmVyLm8gY2FsbGNoYWluLm9cbmtlcm5lbC9ldmVudHMvTWFrZWZpbGUtMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBga2VybmVsL2V2ZW50cy9NYWtlZmlsZWAgSW5jbHVzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYnVpbGQgc3lzdGVtLCBhbmQgdGhlIGBrZXJuZWwvZXZlbnRzL01ha2VmaWxlYCBpcyBvbmx5IGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzIGlmIGBDT05GSUdfUEVSRl9FVkVOVFNgIGlzIHNldC4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHN0YW5kYXJkIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBiYXNlZCBvbiBhIEtjb25maWcgdmFyaWFibGUuIFRoaXMgdGVsbHMgbWUgdGhhdCB0aGUgZW50aXJlIHByb2ZpbGluZyBzdWJzeXN0ZW0gaXMgbW9kdWxhcml6ZWQuIElmIHBlcmZvcm1hbmNlIGV2ZW50IGNvbGxlY3Rpb24gaXNuJiMzOTt0IGRlc2lyZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgYXNzb2NpYXRlZCBjb2RlIGFuZCBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIHNpbXBseSBza2lwcGVkLiBUaGlzIGtlZXBzIHRoZSBrZXJuZWwgbGVhbiBhbmQgYXZvaWRzIHVubmVjZXNzYXJ5IGJsb2F0IGZvciBzeXN0ZW1zIHdoZXJlIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBpc24mIzM5O3QgYSBwcmlvcml0eS4gSXQmIzM5O3MgYSBjbGVhbiB3YXkgdG8gbWFuYWdlIGZlYXR1cmUgZW5hYmxlbWVudCBhbmQgaXMgZXhhY3RseSB3aGF0IEkgd291bGQgZXhwZWN0IGluIGEgd2VsbC1kZXNpZ25lZCBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTtkIG5lZWQgdG8gZGl2ZSBkZWVwZXIsIG9mIGNvdXJzZSwgdG8gc2VlIGhvdyB0aGUgaW5jbHVzaW9uIGFmZmVjdHMgZGVwZW5kZW5jaWVzIGFuZCBsaW5rIG9yZGVyLCBidXQgdGhlIGJhc2ljIHByaW5jaXBsZSBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIHRoZSBhdWRpZW5jZSBpcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3Mg4oCTIHRoZSBga2VybmVsL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBjb21tYW5kIGNlbnRlciwgdGhlIGNlbnRyYWwgb3JjaGVzdHJhdG9yIGZvciBob3cgZXZlcnl0aGluZyBnZXRzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBhc3NlbWJsZWQuIEl0JiMzOTtzIHdoZXJlIEkgY2FuIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIHJ1bGVzLCBhbmQgdWx0aW1hdGVseSwgdGhlIGZsb3cgb2YgdGhlIGVudGlyZSBrZXJuZWwgYnVpbGQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcHJvamVjdCYjMzk7cyBvcmdhbml6ZWQgYW5kIGNvbnRyb2xsZWQuIEkga25vdyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmNsdWRlIHBhdGhzLCBjb21waWxlciBmbGFncywgb2JqZWN0IGZpbGUgbG9jYXRpb25zLCBsaW5raW5nIGNvbW1hbmRzLCBhbmQgdGFyZ2V0IGRlZmluaXRpb25zLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkaWFnbm9zaW5nIGFueSBidWlsZC1yZWxhdGVkIGlzc3VlcyBvciB1bmRlcnN0YW5kaW5nIHRoZSBwcm9qZWN0JiMzOTtzIHN0cnVjdHVyZSBmcm9tIGEgaGlnaCBsZXZlbC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmVudHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL01ha2VmaWxlPTI2PWVuZGlmXG5rZXJuZWwvTWFrZWZpbGUtMjctXG5rZXJuZWwvTWFrZWZpbGU6Mjg6IyBQcmV2ZW50cyBmbGlja2VyIG9mIHVuaW50ZXJlc3RpbmcgX19kb19zb2Z0aXJxKCkvX19sb2NhbF9iaF9kaXNhYmxlX2lwKClcbmtlcm5lbC9NYWtlZmlsZS0yOS0jIGluIGNvdmVyYWdlIHRyYWNlcy5cbi0tXG5rZXJuZWwvTWFrZWZpbGU9MTI4PW9iai0kKENPTkZJR19DRkkpICYjNDM7PSBjZmkub1xua2VybmVsL01ha2VmaWxlLTEyOS1cbmtlcm5lbC9NYWtlZmlsZToxMzA6b2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKSAmIzQzOz0gZXZlbnRzL1xua2VybmVsL01ha2VmaWxlLTEzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgUGVyZm9ybWFuY2UgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgdGhpcyBkb3duLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBhaW1pbmcgZm9yIHJvYnVzdCBwZXJmb3JtYW5jZSBhbmFseXNpcyBjYXBhYmlsaXRpZXMgaGVyZSwgc28gdGhlIGltbWVkaWF0ZSBuZWVkIGlzIGZvciBgQ09ORklHX1BFUkZfRVZFTlRTYC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIHdpdGggdGhlIGluY3JlYXNpbmcgdXNlIG9mIEJQRiwgSSYjMzk7bSB0aGlua2luZyB3ZSBhbHNvIHdhbnQgYENPTkZJR19CUEZfRVZFTlRTYC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYW5kIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfQlBGX0VWRU5UU2AuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgZ3JvdW5kd29yayBsYWlkIGJlZm9yZSBlbmFibGluZyBpdC4gR290dGEgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBuZWVkZWQgZnVuY3Rpb25hbGl0eSB0byBnZXQgdGhpcyB3b3JraW5nIHJpZ2h0LCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBmb2N1cyBteSBhdHRlbnRpb24gcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0VWRU5UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz04Mzk9Y29uZmlnIEVQUk9CRV9FVkVOVFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4NTM6Y29uZmlnIEJQRl9FVkVOVFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRl9FVkVOVFMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIGhvdyBgQlBGX0VWRU5UU2AgaXMgY29uZmlndXJlZCwgd2hpY2ggdW5kb3VidGVkbHkgbWVhbnMgbG9va2luZyBpbnRvIGl0cyBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlOiBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHR5cGljYWxseSBkZWZpbmVkLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdHJhY2luZyBhbmQgaW5zdHJ1bWVudGF0aW9uLCBhbmQgYEJQRl9FVkVOVFNgIHNjcmVhbXMgb2YgZUJQRi4gSSYjMzk7ZCBiZSB3aWxsaW5nIHRvIGJldCBpdCYjMzk7cyBpbiB0aGVyZSwgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgc2VhcmNoLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBpbW1lZGlhdGVseSByZXZlYWwgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGlmIGl0IGhhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG9wdGlvbnMsIGFuZCBtYXliZSBldmVuIGEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCBpdCBkb2VzLiBUaW1lIHRvIGdvIGh1bnRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxuIDg1MTpcdFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXG4gODUyOlx0XG4gODUzOlx0Y29uZmlnIEJQRl9FVkVOVFNcbiA4NTQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiA4NTU6XHRcdGRlcGVuZHMgb24gKEtQUk9CRV9FVkVOVFMgfHwgVVBST0JFX0VWRU5UUykgXHUwMDI2XHUwMDI2IFBFUkZfRVZFTlRTXG4gODU2Olx0XHRib29sXG4gODU3Olx0XHRkZWZhdWx0IHlcbiA4NTg6XHRcdGhlbHBcbiA4NTk6XHRcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXG4gODYwOlx0XHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxuIDg2MTpcdFxuIDg2MjpcdGNvbmZpZyBEWU5BTUlDX0VWRU5UU1xuIDg2MzpcdFx0ZGVmX2Jvb2wgblxuIDg2NDpcdFxuIDg2NTpcdGNvbmZpZyBQUk9CRV9FVkVOVFNcbiA4NjY6XHRcdGRlZl9ib29sIG5cbiA4Njc6XHRcbiA4Njg6XHRjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxuIDg2OTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIHByb2dyYW1zIHRvIG92ZXJyaWRlIGEga3Byb2JlZCBmdW5jdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBFdmVudHMgQ29uZmlndXJhdGlvbiBhbmQgYSBDcml0aWNhbCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBkZXBlbmRlbmN5OiBgQlBGX0VWRU5UU2AgaXMgZGVwZW5kZW50IG9uIGBCUEZfU1lTQ0FMTGAsIGVpdGhlciBgS1BST0JFX0VWRU5UU2Agb3IgYFVQUk9CRV9FVkVOVFNgLCBhbmQgYFBFUkZfRVZFTlRTYC4gU2luY2UgYEJQRl9FVkVOVFNgIGlzIHNldCB0byAmIzM0O3kmIzM0OyBieSBkZWZhdWx0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIG90aGVyIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLCBhcmUgYWxzbyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSBjb25maWd1cmF0aW9uIGNoZWNrLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXguIEl0IGFkZHJlc3NlcyBhIGRhdGEgcmFjZSBpc3N1ZSByZWxhdGVkIHRvIGBldmVudC0mZ3Q7cHJvZ2Agd2l0aGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBUaGlzIGlzIGEgbm9uLXRyaXZpYWwgZml4OyBmaXhpbmcgZGF0YSByYWNlcyBpcyBhbHdheXMgaW1wb3J0YW50IGZvciBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBJdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBCUEYgY29kZSBwYXRoLgoKJiMzNDtXb3J0aEZ1enppbmc6IHRydWUmIzM0OyAtIEkgY29uY3VyLiBUaGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZyBhZnRlciB0aGlzIGZpeCBpcyBhcHBsaWVkLiBUaG9zZSBmdW5jdGlvbnMgYXJlIG5vdyBsZXNzIHByb25lIHRvIGRhdGEgcmFjZXMsIGFuZCBhcmUgbm93IHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBoZXJlIGFyZSBjbGVhcmx5IGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhvc2Ugcm91dGluZXMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHJhY2UgY29uZGl0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGFmZmVjdHMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgY29uZmxpY3QsIHNvIGl0JiMzOTtzIGEgZGV0YWlsIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19wZXJmX2V2ZW50X292ZXJmbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmM9MTA3NDE9c3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfZnJlZV9icGZfaGFuZGxlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA3NDktXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDc1MDpzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDc1MS1cdFx0XHRcdCBpbnQgdGhyb3R0bGUsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jPTEwODQ0PWludCBwZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDg1NC1cbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwODU1Olx0cmV0dXJuIF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgZGF0YSwgcmVncyk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDg1Ni19XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4OTk9c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG92ZXJmbG93LFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTEyLVx0Zm9yICg7IG92ZXJmbG93OyBvdmVyZmxvdy0tKSB7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDkxMzpcdFx0aWYgKF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgdGhyb3R0bGUsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDkxNC1cdFx0XHRcdFx0ICAgIGRhdGEsIHJlZ3MpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4OTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIE92ZXJmbG93IEhhbmRsZXIgU2NvcGUqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgb3ZlcmZsb3cgc2l0dWF0aW9uLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgZnVuY3Rpb24sIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBvdXIgZm9jdXMuIFNpbmNlIHRoYXQmIzM5O3MgdGhlIGJhc2Ugb2YgaXQsIHdlIHNob3VsZCBkaXJlY3Qgb3VyIGF0dGVudGlvbiB0byBpdHMgbm9uLXN0YXRpYyBjb3VudGVycGFydHMsIHRoZSBsaWtlbHkgcHVibGljIGVudHJ5IHBvaW50cy4gU28sIGxldCYjMzk7cyBwcmlvcml0aXplIGludmVzdGlnYXRpbmcgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9zd2V2ZW50X292ZXJmbG93YCBhcyB0aG9zZSBhcmUgdGhlIGV4dGVybmFsIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGdldCBjYWxsZWQuIEJ1dCBob2xkIG9uLCBiZWZvcmUgd2UgZ28gdG9vIGZhciBkb3duIHRoYXQgcGF0aC4uLml0IHdvdWxkIGJlIHBydWRlbnQgdG8gcXVpY2tseSBjb25maXJtIGlmIGBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3dgIGlzIGFsc28gc3RhdGljLiBJZiBpdCBpcywgdGhhdCB3aWxsIHNpZ25pZmljYW50bHkgYWx0ZXIgb3VyIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX3N3ZXZlbnRfb3ZlcmZsb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYz0xMDg3Nj11NjQgcGVyZl9zd2V2ZW50X3NldF9wZXJpb2Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODk4LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4OTk6c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG92ZXJmbG93LFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MDAtXHRcdFx0XHQgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA5MjU9c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5yLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTYzLVx0XHRkYXRhLVx1MDAzZXBlcmlvZCA9IG5yO1xua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5NjQ6XHRcdHJldHVybiBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsIGRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5NjUtXHR9IGVsc2Vcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk2OC1cdGlmIChuciA9PSAxIFx1MDAyNlx1MDAyNiBod2MtXHUwMDNlc2FtcGxlX3BlcmlvZCA9PSAxIFx1MDAyNlx1MDAyNiAhZXZlbnQtXHUwMDNlYXR0ci5mcmVxKVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5Njk6XHRcdHJldHVybiBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsIGRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5NzAtXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5NzMtXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDk3NDpcdHBlcmZfc3dldmVudF9vdmVyZmxvdyhldmVudCwgMCwgZGF0YSwgcmVncyk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk3NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBhIFNvZnR3YXJlIEV2ZW50IE92ZXJmbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3dgIHZhcmlhYmxlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGltcG9ydGFudCBjb250ZXh0LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIG92ZXJmbG93LiBTaW5jZSBpdCYjMzk7cyByZWxhdGVkIHRvIHNvZnR3YXJlIGV2ZW50cywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhhbWluZSBgcGVyZl9zd2V2ZW50X2V2ZW50YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0IGluIHRoaXMgc2NlbmFyaW8sIGlmIGl0JiMzOTtzIG92ZXJmbG93aW5nLiBJdCBzaG91bGQgdGVsbCBtZSB3aGVyZSB0aGluZ3MgYXJlIGdvaW5nIHNpZGV3YXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX3N3ZXZlbnRfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYz0xMDg5OT1zdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgb3ZlcmZsb3csXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MjQtXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDkyNTpzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgbnIsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDkyNi1cdFx0XHQgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTEwNjA9c3RhdGljIHZvaWQgZG9fcGVyZl9zd19ldmVudChlbnVtIHBlcmZfdHlwZV9pZCB0eXBlLCB1MzIgZXZlbnRfaWQsXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTEwNzUtXHRcdGlmIChwZXJmX3N3ZXZlbnRfbWF0Y2goZXZlbnQsIHR5cGUsIGV2ZW50X2lkLCBkYXRhLCByZWdzKSlcbmtlcm5lbC9ldmVudHMvY29yZS5jOjExMDc2Olx0XHRcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgbnIsIGRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTEwNzctXHR9XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTE0MTA9c3RhdGljIHZvaWQgX19wZXJmX3RwX2V2ZW50X3RhcmdldF90YXNrKHU2NCBjb3VudCwgdm9pZCAqcmVjb3JkLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTExNDI1LVx0XHRwZXJmX3NhbXBsZV9zYXZlX3Jhd19kYXRhKGRhdGEsIGV2ZW50LCByYXcpO1xua2VybmVsL2V2ZW50cy9jb3JlLmM6MTE0MjY6XHRcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgY291bnQsIGRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE0MjctXHR9XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTE0NTM9dm9pZCBwZXJmX3RwX2V2ZW50KHUxNiBldmVudF90eXBlLCB1NjQgY291bnQsIHZvaWQgKnJlY29yZCwgaW50IGVudHJ5X3NpemUsXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE0ODUtXHRcdFx0cGVyZl9zYW1wbGVfc2F2ZV9yYXdfZGF0YShcdTAwMjZkYXRhLCBldmVudCwgXHUwMDI2cmF3KTtcbmtlcm5lbC9ldmVudHMvY29yZS5jOjExNDg2Olx0XHRcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgY291bnQsIFx1MDAyNmRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE0ODctXHRcdH1cbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMTgwMT12b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTExODEzLVx0aWYgKCFicC1cdTAwM2Vody5zdGF0ZSBcdTAwMjZcdTAwMjYgIXBlcmZfZXhjbHVkZV9ldmVudChicCwgcmVncykpXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMTgxNDpcdFx0cGVyZl9zd2V2ZW50X2V2ZW50KGJwLCAxLCBcdTAwMjZzYW1wbGUsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE4MTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzczCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyBQZXJmIEV2ZW50IEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHBlcmZfc3dldmVudF9ldmVudGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbWVhbnMgdGhpcyBmdW5jdGlvbiBpcyAqb25seSogdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbi4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJpdmF0ZSwgYW5kIEkgd291bGRuJiMzOTt0IGV4cGVjdCB0byBpbnRlcmFjdCB3aXRoIGl0IGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlLgoKTm93LCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uOiBpZiBgcGVyZl9ldmVudF9vdmVyZmxvd2AgKmlzbiYjMzk7dCogc3RhdGljLCB0aGVuIGl0JiMzOTtzIGNsZWFybHkgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLiBUaGlzIG1ha2VzIHNlbnNlOyBhbiBvdmVyZmxvdyBoYW5kbGVyIG5lZWRzIHRvIGJlIHNvbWV0aGluZyB0aGF0IHRoZSBzeXN0ZW0gY2FuIGNhbGwgaW50byBpbiByZXNwb25zZSB0byBldmVudHMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGV4cG9ydGVkIHRvIGRlYWwgd2l0aCB0aGUgYWN0dWFsIG92ZXJmbG93IGl0c2VsZi4KCkZpbmFsbHksIEkmIzM5O20gbm90aW5nIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgdGhhdCBmdW5jdGlvbiBpcyBkZWNsYXJlZC4gSXMgaXQgYWxzbyBleHBvcnRlZD8gR2l2ZW4gdGhlIG5hdHVyZSBvZiBCUEYgcHJvZ3JhbSBkZXRhY2htZW50LCB3aGljaCBjb3VsZCBoYXBwZW4gZnJvbSBhIHZhcmlldHkgb2YgcGxhY2VzLCBJIHdvdWxkIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGFsc28gYmUgbm9uLXN0YXRpYyBhbmQgYXZhaWxhYmxlIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRvIGNhbGwuIEl0IG1pZ2h0IGV2ZW4gYmUgcGFydCBvZiB0aGUgYHBlcmZfZXZlbnRfb3BlbmAgaW5mcmFzdHJ1Y3R1cmUsIGFzIGEgcHJvZ3JhbSB3b3VsZCBuZWVkIHRvIGJlIGRldGFjaGVkIGFzIHBhcnQgb2YgYSBjbG9zdXJlIG9wZXJhdGlvbiwgYSBwcm9ncmFtIGNvdWxkIGJlIHJlbW92ZWQgYXQgd2lsbCBieSBhIHByaXZpbGVnZWQgb3BlcmF0aW9uLCBvciBtYXliZSBiZSBhdXRvbWF0aWNhbGx5IGRldGFjaGVkIGZvciBzZWN1cml0eSByZWFzb25zLgoKRXNzZW50aWFsbHksIEkmIzM5O20gbWFwcGluZyBvdXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcGVyZiBzdWJzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyIGFuZCB0aGUga2VybmVsIGF0IGxhcmdlLiBUaGUgc3RhdGljL25vbi1zdGF0aWMgZGlzdGluY3Rpb24gaXMgYSBrZXkgaW5kaWNhdG9yIG9mIGRlc2lnbiBpbnRlbnQgYW5kIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTk1MT1pbnQgcGVyZl9ldmVudF9hdHRhY2hfYnBmX3Byb2coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xOTk0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE5OTU6dm9pZCBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MzQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gUGVyZiBFdmVudCBEZXRhY2htZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBJdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IGNoZWNrIGBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZ2AganVzdCBpbiBjYXNlLCBidXQgdGhlIGFjdHVhbCBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBkZXRhY2ggZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzLgoKRm9yIHN5bWJvbCB0YXJnZXRpbmcsIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwga2V5IGluIG9uOgoKKiAgIGBwZXJmX2V2ZW50X292ZXJmbG93YAoqICAgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYAoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMuIFRoZSBkb2N1bWVudCBtZW50aW9ucyBhIGZldzoKCiogICBgUEVSRl9FVkVOVFNgCiogICBgQlBGX0VWRU5UU2AKKiAgIGBCUEZfU1lTQ0FMTGAKKiAgIGBLUFJPQkVfRVZFTlRTYAoKSSByZWNhbGwgc2VlaW5nIGBCUEZfRVZFTlRTYCBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgLCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGEgdmFsaWQgY29uZmlnIG9wdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgUEVSRl9FVkVOVFNgIGlzIGFsc28gY29uZmlndXJlZC4gVGhhdCBpcyBhbiBpbXBvcnRhbnQgb25lLgoKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUkZfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9LY29uZmlnPTI9bWVudSBcJiMzNDtQZXJmb3JtYW5jZSBtb25pdG9yaW5nXCYjMzQ7XG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTExLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6MTI6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1JBUExcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwvQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTktXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyMDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yNy1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjI4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI5LVx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9BTURcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zNi1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjM3OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfVU5DT1JFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O0FNRCBVbmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDctXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0ODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX0JSU1xuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmluaXQvS2NvbmZpZz0yMTQxPW1lbnUgXCYjMzQ7S2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnNcJiMzNDtcbmluaXQvS2NvbmZpZy0yMTQyLVxuaW5pdC9LY29uZmlnOjIxNDM6Y29uZmlnIFBFUkZfRVZFTlRTXG5pbml0L0tjb25maWctMjE0NC1cdGJvb2wgXCYjMzQ7S2VybmVsIHBlcmZvcm1hbmNlIGV2ZW50cyBhbmQgY291bnRlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKgoKUmlnaHQsIHNvIGBQRVJGX0VWRU5UU2AsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBoYW5naW5nIG91dCBpbiBgaW5pdC9LY29uZmlnYCwganVzdCBhcyBJIHN1c3BlY3RlZC4gTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHF1aWNrbHkgY29uZmlybSB0aGUgbG9jYXRpb25zIG9mIGEgY291cGxlIG9mIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGVyZSBgQlBGX1NZU0NBTExgIGFuZCBgS1BST0JFX0VWRU5UU2AgYXJlIHNpdHVhdGVkIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIGVuc3VyZSBhIGhvbGlzdGljIHZpZXcgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBnaXZlbiB0aGVzZSBhcmUgcmVsYXRlZCBzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE3NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLUFJPQkVfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTc3MD1jb25maWcgUFJPQkVfRVZFTlRTX0JURl9BUkdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNzgxLVxua2VybmVsL3RyYWNlL0tjb25maWc6NzgyOmNvbmZpZyBLUFJPQkVfRVZFTlRTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03ODMtXHRkZXBlbmRzIG9uIEtQUk9CRVNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04MDAtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4MDE6Y29uZmlnIEtQUk9CRV9FVkVOVFNfT05fTk9UUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctODAyLVx0Ym9vbCBcJiMzNDtEbyBOT1QgcHJvdGVjdCBub3RyYWNlIGZ1bmN0aW9uIGZyb20ga3Byb2JlIGV2ZW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQ4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZXBlbmRlbmNpZXMgYW5kIEltcGxpY2F0aW9ucyBvZiBLUFJPQkVfRVZFTlRTKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogYEtQUk9CRV9FVkVOVFNgIGlzIGluaGVyZW50bHkgcmVsaWFudCBvbiBgS1BST0JFU2AuIFRoaXMgaXNuJiMzOTt0IGdyb3VuZGJyZWFraW5nLCBidXQgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UgaGF2ZSB0byBjb25zdGFudGx5IGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYEtQUk9CRV9FVkVOVFNgIGlzIGJ1aWx0ICpvbiB0b3AqIG9mIHRoZSBLUFJPQkVTIGluZnJhc3RydWN0dXJlLCBhbmQgdW5kZXJzdGFuZGluZyB0aGF0IGJhc2UgbGF5ZXIgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBkZXZlbG9wbWVudCwgYW5kIG9wdGltaXphdGlvbi4gSXQgZGljdGF0ZXMgaG93IGZhciB3ZSBjYW4gcHVzaCB0aGluZ3MsIGFueSBsaW1pdGF0aW9ucywgYW5kIHBvc3NpYmxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBBbnkgZGlzY3Vzc2lvbiBhYm91dCBgS1BST0JFX0VWRU5UU2AgaGFzIHRvIGNpcmNsZSBiYWNrIHRvIHdoYXQgdGhlIGBLUFJPQkVTYCBmb3VuZGF0aW9uIHByb3ZpZGVzIChhbmQgcGVyaGFwcyAqZG9lc24mIzM5O3QqIHByb3ZpZGUpLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBzaGFwZXMgbXkgc3RyYXRlZ3kgZm9yIHByYWN0aWNhbGx5IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0byBob3cgSSYjMzk7ZCBhcHByb2FjaCB0cm91Ymxlc2hvb3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLUFJPQkVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMTI9Y29uZmlnIEdFTkVSSUNfRU5UUllcbi0tXG5hcmNoL0tjb25maWctMTE2LVxuYXJjaC9LY29uZmlnOjExNzpjb25maWcgS1BST0JFU1xuYXJjaC9LY29uZmlnLTExOC1cdGJvb2wgXCYjMzQ7S3Byb2Jlc1wmIzM0O1xuLS1cbmFyY2gvS2NvbmZpZz0xNjg9Y29uZmlnIE9QVFBST0JFU1xuLS1cbmFyY2gvS2NvbmZpZy0xNzItXG5hcmNoL0tjb25maWc6MTczOmNvbmZpZyBLUFJPQkVTX09OX0ZUUkFDRVxuYXJjaC9LY29uZmlnLTE3NC1cdGRlZl9ib29sIHlcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0yMzcxPWNvbmZpZyBURVNUX0lPVl9JVEVSXG4tLVxubGliL0tjb25maWcuZGVidWctMjM4Mi1cbmxpYi9LY29uZmlnLmRlYnVnOjIzODM6Y29uZmlnIEtQUk9CRVNfU0FOSVRZX1RFU1RcbmxpYi9LY29uZmlnLmRlYnVnLTIzODQtXHR0cmlzdGF0ZSBcJiMzNDtLcHJvYmVzIHNhbml0eSB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBlcmYvQlBGIERhdGEgUmFjZSBGaXgqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmaXggdGhhdCBjZW50ZXJzIGFyb3VuZCBgS1BST0JFU2AuIFJpZ2h0LCBnb3QgaXQuIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgUEVSRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgS1BST0JFU2AsIGBLUFJPQkVfRVZFTlRTYCwgYW5kIGBCUEZfRVZFTlRTYC4gU3RhbmRhcmQgc3R1ZmYgZm9yIHBlcmYgYW5kIEJQRi4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhcm91bmQgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYSBkYXRhIHJhY2Ugb24gYGV2ZW50LSZndDtwcm9nYCB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLCBmaXhlZCBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIHNvdW5kcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeCBkZWVwIGluIHRoZSBwZXJmL2JwZiBjb3JlLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IHNpbmNlIHRoZXNlIGFyZSByZWFjaGFibGUgYW5kIGxpa2VseSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZy4gSXQgbWVudGlvbnMgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgaXMgd2hlcmUgdGhlIGRhdGEgcmFjZSBleGlzdHMgYW5kIHRoZSBwcmltYXJ5IGZvY3VzIG9mIHRoZSBmaXguIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWUgdGhhdCBpcyB0aGUgdGFyZ2V0LCBpZiB0aGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGFuZCBleHBvc2VkIHRvIHRoZSB1c2VyLiBHaXZlbiB0aGF0IGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGlzIHN0YXRpYywgd2UmIzM5O3JlIGxpa2VseSB0YXJnZXRpbmcgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgLiBUaGF0IHNlZW1zIHJpZ2h0LiBBbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYCBpcyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBkaXJlY3RseSBtb2RpZmllZCwgbWFraW5nIGl0IGFub3RoZXIgdmFsaWQgZm9jdXMuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGNyaXRpY2FsIGZvciBkZXRlcm1pbmluZyBpZiBpdCBpcyBhIHRhcmdldCBmb3IgdGVzdGluZyBvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBjb25zaWRlcmF0aW9uczoKCioqRm9jdXNpbmcgb24gU2NvcGUgYW5kIEFjY2Vzc2liaWxpdHkqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlIGFuZCBpdHMgc3RydWN0dXJlLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGluZ3MgYXJlIGJlaW5nIHV0aWxpemVkLiBUaGUgaW5pdGlhbCBpbmNsaW5hdGlvbiwgdGhlIGZpcnN0IG1lbnRhbCBibGlwLCBpcyB0aGF0IGl0ICpkb2VzbiYjMzk7dCogbmVjZXNzYXJpbHkgbmVlZCB0byBiZSBleHBvcnRlZCBhcyBhIG1vZHVsZS4gVGhhdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgY29uY2VybiBhdCB0aGlzIGp1bmN0dXJlLiBNeSBmb2N1cyBpcyBtb3JlIGdyYW51bGFyIHRoYW4gdGhhdC4gV2hhdCYjMzk7cyBjcnVjaWFsIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBiZSAqbm9uLXN0YXRpYyouIFRoaXMgc2lnbmFscyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHNoaWZ0IGluIGRlc2lnbiBwaGlsb3NvcGh5LiBXZSYjMzk7cmUgc3RlZXJpbmcgYXdheSBmcm9tIGdsb2JhbCwgc2hhcmVkIHN0YXRlIGluIGZhdm9yIG9mIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBtb3JlIGVhc2lseSBtYW5hZ2VkLCB0ZXN0ZWQsIGFuZCBwb3RlbnRpYWxseSBjb21wb3NlZCB3aXRoIG90aGVyIHBpZWNlcyBvZiBmdW5jdGlvbmFsaXR5LiBTdGF0aWMgbWV0aG9kcywgd2hpbGUgc29tZXRpbWVzIGNvbnZlbmllbnQsIG9mdGVuIGludHJvZHVjZSBjb3VwbGluZyBhbmQgaGlkZGVuIGRlcGVuZGVuY2llcywgd2hpY2ggYmVjb21lIGEgbmlnaHRtYXJlIHRvIHJlZmFjdG9yIGxhdGVyLiBTbywgbWFraW5nIGl0IG5vbi1zdGF0aWMgc3VnZ2VzdHMgYSBjbGVhbmVyLCBtb3JlIG9iamVjdC1vcmllbnRlZCBhcHByb2FjaCwgZXZlbiBpZiBpdCYjMzk7cyBub3QgYmVpbmcgZXhwbGljaXRseSBtb2R1bGFyaXplZC4gVGhlIGltbWVkaWF0ZSBhZHZhbnRhZ2UgaXMgY29udHJvbCBhbmQgdGhlIGFiaWxpdHkgdG8gaW5zdGFudGlhdGUsIG1vZGlmeSwgYW5kIHBhc3MgYXJvdW5kIHRoZSByZWxldmFudCBvYmplY3RzLiBUaGlzIG9wZW5zIHVwIHBvc3NpYmlsaXRpZXMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFuZCBvdGhlciBpbXBvcnRhbnQgdGVjaG5pcXVlcyB0byByZWR1Y2UgYW55IGtpbmQgb2YgdGlnaHQgY291cGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xOTUxPWludCBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE5OTQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTk5NTp2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xOTk2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEJlaGF2aW9yKioKCkFscmlnaHQsIHRoZSBrZXkgaXMgdGhhdCB0aGlzIGlzbiYjMzk7dCBzdGF0aWMuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIFNpbmNlIHRoZSBiZWhhdmlvciBpcyBsaW5rZWQgdG8gcGVyZm9ybWFuY2UgZXZlbnRzLCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIHBlcmZvcm1hbmNlIGV2ZW50IGluZnJhc3RydWN0dXJlLiBUaGUgbW9zdCBsaWtlbHkgYXJlYSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUsIGlzIHRoZSBvdmVyZmxvdyBoYW5kbGluZy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBqdW1wIHJpZ2h0IGludG8gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBwZXJmX2V2ZW50X292ZXJmbG93YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgcGxhY2Ugd2hlcmUgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHlpZWxkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyZl9ldmVudF9vdmVyZmxvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9ldmVudHMvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9ldmVudHMvY29yZS5jPTEwNzQxPXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfYnBmX2hhbmRsZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwNzQ5LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA3NTA6c3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA3NTEtXHRcdFx0XHQgaW50IHRocm90dGxlLCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDg0My1cbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwODQ0OmludCBwZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODQ1LVx0XHRcdHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODU0LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4NTU6XHRyZXR1cm4gX19wZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCBkYXRhLCByZWdzKTtcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODU2LX1cbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMDg5OT1zdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgb3ZlcmZsb3csXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTItXHRmb3IgKDsgb3ZlcmZsb3c7IG92ZXJmbG93LS0pIHtcbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwOTEzOlx0XHRpZiAoX19wZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCB0aHJvdHRsZSxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTE0LVx0XHRcdFx0XHQgICAgZGF0YSwgcmVncykpIHtcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMjI1ND1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGVyZl9zd2V2ZW50X2hydGltZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTIyNzQtXHRcdGlmICghKGV2ZW50LVx1MDAzZWF0dHIuZXhjbHVkZV9pZGxlIFx1MDAyNlx1MDAyNiBpc19pZGxlX3Rhc2soY3VycmVudCkpKVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTIyNzU6XHRcdFx0aWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIFx1MDAyNmRhdGEsIHJlZ3MpKVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTIyNzYtXHRcdFx0XHRyZXQgPSBIUlRJTUVSX05PUkVTVEFSVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjYKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRoaW5raW5nIFRocm91Z2ggYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBSZXN1bHQgU2V0dGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgLiBIbW0sIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCB3aGF0IGRvZXMgdGhhdCBpbXBseSBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gSXQgc3VnZ2VzdHMgaXQgaGFzIGJyb2FkZXIgdmlzaWJpbGl0eSwgd2hpY2ggbWlnaHQgaW1wYWN0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCwgcG90ZW50aWFsbHksIHRocmVhZCBzYWZldHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgbm9uLXN0YXRpYyBuYXR1cmUgZmlybWx5IGluIG1pbmQgYXMgSSBkZWx2ZSBkZWVwZXIuCgpSaWdodCwgc28gd2hlcmUgZG9lcyB0aGlzIGxlYWQgbWU/IEkgdGhpbmsgaXQmIzM5O3MgdGltZSB0byBjb25zaWRlciB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIHRoZSByZXN1bHRzLiBMZXQmIzM5O3MgY2FsbCB0aGlzICYjMzQ7c2V0LXJlc3VsdHMuJiMzNDsgVGhlIG5vbi1zdGF0aWMgY2hhcmFjdGVyaXN0aWMgb2YgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIHBvdGVudGlhbGx5IGluZmx1ZW5jZXMgdGhlIG1lY2hhbmlzbSBieSB3aGljaCByZXN1bHRzIGFyZSBzZXQgb3IgYWNjZXNzZWQuIFdlIGNhbiYjMzk7dCBpbW1lZGlhdGVseSBhc3N1bWUgdGhlIHNjb3BlIG9yIGFjY2VzcyBwYXR0ZXJucywgd2UgbXVzdCBrZWVwIHRoaXMgaW4gbWluZCBhcyB3ZSBldmFsdWF0ZSB0aGUgY29kZSBwYXRoLiBJIG5lZWQgdG8gdHJhY2UgaG93IHRoZSByZXN1bHQtc2V0dGluZyBwcm9jZXNzIHVzZXMgb3IgaW50ZXJhY3RzIHdpdGggYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyB0byB1bnBhY2suIFRoaXMgaXMgbXkgbmV4dCBjcnVjaWFsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O0tQUk9CRV9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BlcmZfZXZlbnRfb3ZlcmZsb3cmIzM0OywKICAgICYjMzQ7cGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYGV2ZW50LVx1MDAzZXByb2dgIGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGJ5IHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgaW4gdGhlIGNvcmUgcGVyZi9icGYgc3Vic3lzdGVtLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVyZl9ldmVudF9vdmVyZmxvdyYjMzQ7LAogICAgJiMzNDtwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgZXZlbnQtXHUwMDNlcHJvZ2AgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBpbiB0aGUgY29yZSBwZXJmL2JwZiBzdWJzeXN0ZW0uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAoZGF0YSByYWNlKSB0aGF0IGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUuIFNwZWNpZmljYWxseSwgYGV2ZW50LVx1MDAzZXByb2dgIHdhcyBiZWluZyBjaGVja2VkIGZvciBub24tTlVMTCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvdygpYCwgd2hpbGUgaXQgY291bGQgYmUgY29uY3VycmVudGx5IHNldCB0byBOVUxMIGluIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZygpYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFKClgIGFuZCBgV1JJVEVfT05DRSgpYCBlbnN1cmVzIHRoZSBwb2ludGVyIGlzIGZldGNoZWQgb25seSBvbmNlLCBwcmV2ZW50aW5nIHRoZSByYWNlLlxuXG5UaGlzIHR5cGUgb2YgYnVnIChkYXRhIHJhY2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSkgaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBLQ1NBTiwgYW5kIGdlbmVyYWwga2VybmVsIGNyYXNoIHJlcG9ydHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGFzIEtNU0FOIHNwZWNpZmljYWxseSB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOWU4OGY5MWI2OTVmNGZjMDRlZDk4NmJmNDZmODllZmRlODQzZGU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDA6NTQ6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IGJhNWJkNmE3OGZlN2IuLjlkOWM1NDc3NzcyZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC0xMDc1Myw2ICYjNDM7MTA3NTMsNyBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiB7CiAJaW50IGV2ZW50cyA9IGF0b21pY19yZWFkKCZhbXA7ZXZlbnQtJmd0O2V2ZW50X2xpbWl0KTsKIAlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IGJwZl9wcm9nICpwcm9nOwogCiAJLyoKIAkgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydApAQCAtMTA3NjYsNyAmIzQzOzEwNzY3LDggQEAgc3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCWlmIChldmVudC0mZ3Q7YXR0ci5hdXhfcGF1c2UpCiAJCXBlcmZfZXZlbnRfYXV4X3BhdXNlKGV2ZW50LSZndDthdXhfZXZlbnQsIHRydWUpOwogCi0JaWYgKGV2ZW50LSZndDtwcm9nICZhbXA7JmFtcDsgZXZlbnQtJmd0O3Byb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UICZhbXA7JmFtcDsKJiM0MzsJcHJvZyA9IFJFQURfT05DRShldmVudC0mZ3Q7cHJvZyk7CiYjNDM7CWlmIChwcm9nICZhbXA7JmFtcDsgcHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgJmFtcDsmYW1wOwogCSAgICAhYnBmX292ZXJmbG93X2hhbmRsZXIoZXZlbnQsIGRhdGEsIHJlZ3MpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDc1NDk1YTVjMzUwNzkuLmVlNjFkYzc2MDA0NTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTIwMTgsNyAmIzQzOzIwMTgsNyBAQCB2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIAogcHV0OgogCXByb2cgPSBldmVudC0mZ3Q7cHJvZzsKLQlldmVudC0mZ3Q7cHJvZyA9IE5VTEw7CiYjNDM7CVdSSVRFX09OQ0UoZXZlbnQtJmd0O3Byb2csIE5VTEwpOwogCiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7YnBmX2V2ZW50X211dGV4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTAKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4IGZvciBgZXZlbnQtJmd0O3Byb2dgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYWNjZXNzZXMgdG8gYGV2ZW50LSZndDtwcm9nYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCwgbGlrZWx5IGFkZHJlc3NpbmcgYSBkYXRhIHJhY2UuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0JiMzOTtzIHRoZSBjYXNlLiBJdCYjMzk7cyBhYm91dCBwcm90ZWN0aW5nIHRoZSByZWFkL3dyaXRlIG9mIGBldmVudC0mZ3Q7cHJvZ2AgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi4KCk15IGZpcnN0IGd1dCBjaGVjayBpcyB0byB0aGluayBhYm91dCB3aGF0IG1lbW9yeSBzYW5pdGl6ZXIgd291bGQgY2F0Y2ggdGhpcy4gS01TQU4gaXMgZ3JlYXQsIGJ1dCBpdCBwcmltYXJpbHkgZm9jdXNlcyBvbiBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIElzIHRoaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU/IE5vLCBpdCYjMzk7cyBhYm91dCBhIHJhY2UgY29uZGl0aW9uLiBEYXRhIHJhY2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgYXJlbiYjMzk7dCByZWFsbHkgS01TQU4mIzM5O3MgZG9tYWluLiBLQVNBTiwgZXNwZWNpYWxseSBLQ1NBTiBmb3IgZGF0YSByYWNlcyBvciB0aGUgZ2VuZXJhbCBLQVNBTiBmb3IgVXNlLUFmdGVyLUZyZWUsIGFyZSBtdWNoIGJldHRlciBzdWl0ZWQgaGVyZS4KCkJ1dCwgSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gRG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgZXZlbiBpbmRpcmVjdGx5PyBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBjb2RlLgoKQWxyaWdodCwgdGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBsb29rcyBsaWtlIHRoaXMgbm93OgoKYGBgYwotCWlmIChldmVudC0mZ3Q7cHJvZyAmYW1wOyZhbXA7IGV2ZW50LSZndDtwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCAmYW1wOyZhbXA7CiYjNDM7CXByb2cgPSBSRUFEX09OQ0UoZXZlbnQtJmd0O3Byb2cpOwomIzQzOwlpZiAocHJvZyAmYW1wOyZhbXA7IHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UICZhbXA7JmFtcDsKYGBgCgpZZXMsIHRoaXMgY29uZmlybXMgdGhlIGluaXRpYWwgaHlwb3RoZXNpcy4gVGhlIG9sZCBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIGEgVE9DVE9VIChUaW1lLW9mLUNoZWNrLXRvLVRpbWUtb2YtVXNlKSByYWNlLiBUaGUgY29kZSBjaGVja2VkIGlmIGBldmVudC0mZ3Q7cHJvZ2Agd2FzIG5vbi1OVUxMLCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaXQuIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBzZXQgdGhlIGBldmVudC0mZ3Q7cHJvZ2AgcG9pbnRlciB0byBOVUxMICpiZXR3ZWVuKiB0aGUgY2hlY2sgYW5kIHRoZSBkZXJlZmVyZW5jZSwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBldmVuIGEgdXNlLWFmdGVyLWZyZWUsIGlmIGFub3RoZXIgdGhyZWFkIHdhcyBxdWljayBlbm91Z2guIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGJ1ZywgYW5kIGBSRUFEX09OQ0VgIGVuc3VyZXMgYSBzaW5nbGUgYXRvbWljIHJlYWQgb2YgdGhlIHZhbHVlLgoKTXkgdW5kZXJzdGFuZGluZyBpcyByb2NrIHNvbGlkLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZWxldmFudCBoZXJlLiBUaGlzIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3kuIEtBU0FOIG9yIHBvdGVudGlhbGx5IGEgc3RhbmRhcmQgY3Jhc2ggd2lsbCBjYXRjaCB0aGlzLgoKT2theSwgbGV0JiMzOTtzIGRvY3VtZW50IHRoZSByZWFzb25pbmcgY2xlYXJseS4gVGhlIHBhdGNoIHJlc29sdmVzIGEgZGF0YSByYWNlL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIG9uIGBldmVudC0mZ3Q7cHJvZ2AuIFRoaXMgcHJvdGVjdHMgdGhlIHJlYWQvd3JpdGUgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi4gVGhlIHByb2JsZW0gaXMgYSBjbGFzc2ljIHJhY2UgYW5kIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIHRoZSBjb3JyZWN0IG1lbW9yeSBzYW5pdGl6ZXJzIGFyZSBLQVNBTiBhbmQvb3IgS0NTQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChkYXRhIHJhY2UpIHRoYXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZS4gU3BlY2lmaWNhbGx5LCBgZXZlbnQtXHUwMDNlcHJvZ2Agd2FzIGJlaW5nIGNoZWNrZWQgZm9yIG5vbi1OVUxMIGFuZCB0aGVuIGRlcmVmZXJlbmNlZCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93KClgLCB3aGlsZSBpdCBjb3VsZCBiZSBjb25jdXJyZW50bHkgc2V0IHRvIE5VTEwgaW4gYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKClgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBSRUFEX09OQ0UoKWAgYW5kIGBXUklURV9PTkNFKClgIGVuc3VyZXMgdGhlIHBvaW50ZXIgaXMgZmV0Y2hlZCBvbmx5IG9uY2UsIHByZXZlbnRpbmcgdGhlIHJhY2UuXG5cblRoaXMgdHlwZSBvZiBidWcgKGRhdGEgcmFjZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlKSBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgZ2VuZXJhbCBrZXJuZWwgY3Jhc2ggcmVwb3J0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYXMgS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAoZGF0YSByYWNlKSB0aGF0IGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUuIFNwZWNpZmljYWxseSwgYGV2ZW50LVx1MDAzZXByb2dgIHdhcyBiZWluZyBjaGVja2VkIGZvciBub24tTlVMTCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvdygpYCwgd2hpbGUgaXQgY291bGQgYmUgY29uY3VycmVudGx5IHNldCB0byBOVUxMIGluIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZygpYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFKClgIGFuZCBgV1JJVEVfT05DRSgpYCBlbnN1cmVzIHRoZSBwb2ludGVyIGlzIGZldGNoZWQgb25seSBvbmNlLCBwcmV2ZW50aW5nIHRoZSByYWNlLlxuXG5UaGlzIHR5cGUgb2YgYnVnIChkYXRhIHJhY2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSkgaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBLQ1NBTiwgYW5kIGdlbmVyYWwga2VybmVsIGNyYXNoIHJlcG9ydHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGFzIEtNU0FOIHNwZWNpZmljYWxseSB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NDoyMS45Njk0MDQ4NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTA5NTk1NzE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIktQUk9CRV9FVkVOVFNcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gICAgXCJwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGRhdGEgcmFjZSkgdGhhdCBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlLiBTcGVjaWZpY2FsbHksIGBldmVudC1cXHUwMDNlcHJvZ2Agd2FzIGJlaW5nIGNoZWNrZWQgZm9yIG5vbi1OVUxMIGFuZCB0aGVuIGRlcmVmZXJlbmNlZCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93KClgLCB3aGlsZSBpdCBjb3VsZCBiZSBjb25jdXJyZW50bHkgc2V0IHRvIE5VTEwgaW4gYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKClgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBSRUFEX09OQ0UoKWAgYW5kIGBXUklURV9PTkNFKClgIGVuc3VyZXMgdGhlIHBvaW50ZXIgaXMgZmV0Y2hlZCBvbmx5IG9uY2UsIHByZXZlbnRpbmcgdGhlIHJhY2UuXFxuXFxuVGhpcyB0eXBlIG9mIGJ1ZyAoZGF0YSByYWNlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUpIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiwgS0NTQU4sIGFuZCBnZW5lcmFsIGtlcm5lbCBjcmFzaCByZXBvcnRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBhcyBLTVNBTiBzcGVjaWZpY2FsbHkgdGFyZ2V0cyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgZXZlbnQtXFx1MDAzZXByb2dgIGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGJ5IHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgaW4gdGhlIGNvcmUgcGVyZi9icGYgc3Vic3lzdGVtLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjIxLjk2OTQxMDQwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4NzkxODU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE5ZTg4ZjkxYjY5NWY0ZmMwNGVkOTg2YmY0NmY4OWVmZGU4NDNkZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDA6NTQ6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xcbmluZGV4IGJhNWJkNmE3OGZlN2IuLjlkOWM1NDc3NzcyZTMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcXG4rKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xcbkBAIC0xMDc1Myw2ICsxMDc1Myw3IEBAIHN0YXRpYyBpbnQgX19wZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4ge1xcbiBcXHRpbnQgZXZlbnRzID0gYXRvbWljX3JlYWQoXFx1MDAyNmV2ZW50LVxcdTAwM2VldmVudF9saW1pdCk7XFxuIFxcdGludCByZXQgPSAwO1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydFxcbkBAIC0xMDc2Niw3ICsxMDc2Nyw4IEBAIHN0YXRpYyBpbnQgX19wZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4gXFx0aWYgKGV2ZW50LVxcdTAwM2VhdHRyLmF1eF9wYXVzZSlcXG4gXFx0XFx0cGVyZl9ldmVudF9hdXhfcGF1c2UoZXZlbnQtXFx1MDAzZWF1eF9ldmVudCwgdHJ1ZSk7XFxuIFxcbi1cXHRpZiAoZXZlbnQtXFx1MDAzZXByb2cgXFx1MDAyNlxcdTAwMjYgZXZlbnQtXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdHByb2cgPSBSRUFEX09OQ0UoZXZlbnQtXFx1MDAzZXByb2cpO1xcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIWJwZl9vdmVyZmxvd19oYW5kbGVyKGV2ZW50LCBkYXRhLCByZWdzKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG5pbmRleCA3NTQ5NWE1YzM1MDc5Li5lZTYxZGM3NjAwNDUzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbkBAIC0yMDE4LDcgKzIwMTgsNyBAQCB2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG4gXFxuIHB1dDpcXG4gXFx0cHJvZyA9IGV2ZW50LVxcdTAwM2Vwcm9nO1xcbi1cXHRldmVudC1cXHUwMDNlcHJvZyA9IE5VTEw7XFxuK1xcdFdSSVRFX09OQ0UoZXZlbnQtXFx1MDAzZXByb2csIE5VTEwpO1xcbiBcXG4gdW5sb2NrOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmJwZl9ldmVudF9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjIzLjI1ODEyMTMzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgzOTUyMDM3NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiS1BST0JFU1wiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlcmZfZXZlbnRfb3ZlcmZsb3dcIixcbiAgICBcInBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYGV2ZW50LVxcdTAwM2Vwcm9nYCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYCBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVnIGluIHRoZSBjb3JlIHBlcmYvYnBmIHN1YnN5c3RlbS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOWU4OGY5MWI2OTVmNGZjMDRlZDk4NmJmNDZmODllZmRlODQzZGU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDA6NTQ6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5pbmRleCBiYTViZDZhNzhmZTdiLi45ZDljNTQ3Nzc3MmUzIDEwMDY0NFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcbisrKyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5AQCAtMTA3NTMsNiArMTA3NTMsNyBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4ge1xuIFx0aW50IGV2ZW50cyA9IGF0b21pY19yZWFkKFx1MDAyNmV2ZW50LVx1MDAzZWV2ZW50X2xpbWl0KTtcbiBcdGludCByZXQgPSAwO1xuK1x0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIFxuIFx0LypcbiBcdCAqIE5vbi1zYW1wbGluZyBjb3VudGVycyBtaWdodCBzdGlsbCB1c2UgdGhlIFBNSSB0byBmb2xkIHNob3J0XG5AQCAtMTA3NjYsNyArMTA3NjcsOCBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4gXHRpZiAoZXZlbnQtXHUwMDNlYXR0ci5hdXhfcGF1c2UpXG4gXHRcdHBlcmZfZXZlbnRfYXV4X3BhdXNlKGV2ZW50LVx1MDAzZWF1eF9ldmVudCwgdHJ1ZSk7XG4gXG4tXHRpZiAoZXZlbnQtXHUwMDNlcHJvZyBcdTAwMjZcdTAwMjYgZXZlbnQtXHUwMDNlcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcdTAwMjZcdTAwMjZcbitcdHByb2cgPSBSRUFEX09OQ0UoZXZlbnQtXHUwMDNlcHJvZyk7XG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcdTAwMjZcdTAwMjZcbiBcdCAgICAhYnBmX292ZXJmbG93X2hhbmRsZXIoZXZlbnQsIGRhdGEsIHJlZ3MpKVxuIFx0XHRnb3RvIG91dDtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDc1NDk1YTVjMzUwNzkuLmVlNjFkYzc2MDA0NTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTIwMTgsNyArMjAxOCw3IEBAIHZvaWQgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuIFxuIHB1dDpcbiBcdHByb2cgPSBldmVudC1cdTAwM2Vwcm9nO1xuLVx0ZXZlbnQtXHUwMDNlcHJvZyA9IE5VTEw7XG4rXHRXUklURV9PTkNFKGV2ZW50LVx1MDAzZXByb2csIE5VTEwpO1xuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZicGZfZXZlbnRfbXV0ZXgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6MjMuMjU4MTIyMzkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3MDQ3MDY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYW5kIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgYWNjZXNzLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGRpcmVjdCBhY2Nlc3NlcyB0byBgZXZlbnQtXHUwMDNlcHJvZ2Agd2l0aCBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIGRlZmluaXRlbHkgc21lbGxzIGxpa2UgYSByYWNlIGNvbmRpdGlvbiBmaXguIEdvb2QuIExldCdzIGRpZyBpbi5cblxuVGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2Agd2l0aGluIHRoZSBjb3JlIHBlcmYgZXZlbnQgaGFuZGxpbmcsIGFuZCB0aGVuIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AsIHdoaWNoIGhhbmRsZXMgQlBGIHByb2dyYW0gZGV0YWNobWVudCwgc28gd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIGZ1bmN0aW9ucy4gQm90aCBvZiB0aGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gQ2hlY2tpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgaXMgZ29pbmcgdG8gYmUgY29tcGlsZWQgaWYgYENPTkZJR19QRVJGX0VWRU5UU2AgaXMgZW5hYmxlZCwgYXMgZXhwZWN0ZWQuIEFuZCwgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AncyBwcmVzZW5jZSBkZXBlbmRzIG9uIGBDT05GSUdfQlBGX0VWRU5UU2AuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcyBhZ2FpbnN0IHRoZWlyIHJlc3BlY3RpdmUgTWFrZWZpbGVzIHRvIGJlIHN1cmUgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NDoyOC4xMjg1OTY5NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3NDU5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xOTUxPWludCBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTk5NTp2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjI4LjE4MTM0Nzc0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDcwNTI1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkxvb2tpbmcgZm9yIHRoZSBCUEYgVHJhY2UgT2JqZWN0KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGJwZl90cmFjZS5vYCBpcyBidWlsdC4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSB0aGUgYGtlcm5lbC90cmFjZWAgZGlyZWN0b3J5LCBzaW5jZSB0aGF0J3Mgd2hlcmUgdHJhY2luZyBmdW5jdGlvbmFsaXR5IHR5cGljYWxseSByZXNpZGVzLiBTbywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBga2VybmVsL3RyYWNlL01ha2VmaWxlYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgY29tbWFuZCBjZW50ZXIgZm9yIGJ1aWxkaW5nIHRyYWNlLXJlbGF0ZWQgb2JqZWN0IGZpbGVzLCBhbmQgdGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIEkgbmVlZC4gSG9wZWZ1bGx5LCB0aGlzIE1ha2VmaWxlIGhhcyBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gaWRlbnRpZnkgb3IgYnVpbGQgYGJwZl90cmFjZS5vYCB3aXRoaW4gdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6MzEuMTg4NDAzMTQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MjM5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjMxLjI0MzY1MTQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMzU1MDAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgRXZlbnQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGIGV2ZW50cy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGF0IGBDT05GSUdfQlBGX0VWRU5UU2AgaXMgZ29pbmcgdG8gYmUgYSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYnVpbGQgc3lzdGVtIHRvIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgb2JqZWN0IGZpbGUgcmVsYXRlZCB0byB0aGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgYGtlcm5lbC9ldmVudHMvTWFrZWZpbGVgLiBJJ2xsIGdvIHRha2UgYSBsb29rIHRoZXJlIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGBjb3JlLm9gLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzExLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6MzQuNTQ3MjA1MDUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mjg1ODAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3JlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2V2ZW50cy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5rZXJuZWwvZXZlbnRzL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vIHJpbmdfYnVmZmVyLm8gY2FsbGNoYWluLm9cXG5rZXJuZWwvZXZlbnRzL01ha2VmaWxlLTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjM0LjczMDA2ODU1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTA5NzAxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgYGtlcm5lbC9ldmVudHMvTWFrZWZpbGVgIEluY2x1c2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBidWlsZCBzeXN0ZW0sIGFuZCB0aGUgYGtlcm5lbC9ldmVudHMvTWFrZWZpbGVgIGlzIG9ubHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgaWYgYENPTkZJR19QRVJGX0VWRU5UU2AgaXMgc2V0LiBUaGF0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYSBzdGFuZGFyZCBjb25kaXRpb25hbCBpbmNsdXNpb24gYmFzZWQgb24gYSBLY29uZmlnIHZhcmlhYmxlLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIGVudGlyZSBwcm9maWxpbmcgc3Vic3lzdGVtIGlzIG1vZHVsYXJpemVkLiBJZiBwZXJmb3JtYW5jZSBldmVudCBjb2xsZWN0aW9uIGlzbid0IGRlc2lyZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgYXNzb2NpYXRlZCBjb2RlIGFuZCBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIHNpbXBseSBza2lwcGVkLiBUaGlzIGtlZXBzIHRoZSBrZXJuZWwgbGVhbiBhbmQgYXZvaWRzIHVubmVjZXNzYXJ5IGJsb2F0IGZvciBzeXN0ZW1zIHdoZXJlIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBpc24ndCBhIHByaW9yaXR5LiBJdCdzIGEgY2xlYW4gd2F5IHRvIG1hbmFnZSBmZWF0dXJlIGVuYWJsZW1lbnQgYW5kIGlzIGV4YWN0bHkgd2hhdCBJIHdvdWxkIGV4cGVjdCBpbiBhIHdlbGwtZGVzaWduZWQga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdkIG5lZWQgdG8gZGl2ZSBkZWVwZXIsIG9mIGNvdXJzZSwgdG8gc2VlIGhvdyB0aGUgaW5jbHVzaW9uIGFmZmVjdHMgZGVwZW5kZW5jaWVzIGFuZCBsaW5rIG9yZGVyLCBidXQgdGhlIGJhc2ljIHByaW5jaXBsZSBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjM3Ljk0MTA0MTE0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1NTQ3MTgxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZXJuZWwvZXZlbnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6MzguNDc2NjAwMDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNzM3MTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgYXVkaWVuY2UgaXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNzIOKAkyB0aGUgYGtlcm5lbC9NYWtlZmlsZWAuIFRoYXQncyB1c3VhbGx5IHRoZSBjb21tYW5kIGNlbnRlciwgdGhlIGNlbnRyYWwgb3JjaGVzdHJhdG9yIGZvciBob3cgZXZlcnl0aGluZyBnZXRzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBhc3NlbWJsZWQuIEl0J3Mgd2hlcmUgSSBjYW4gZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgcnVsZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgZmxvdyBvZiB0aGUgZW50aXJlIGtlcm5lbCBidWlsZC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwcm9qZWN0J3Mgb3JnYW5pemVkIGFuZCBjb250cm9sbGVkLiBJIGtub3cgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmNsdWRlIHBhdGhzLCBjb21waWxlciBmbGFncywgb2JqZWN0IGZpbGUgbG9jYXRpb25zLCBsaW5raW5nIGNvbW1hbmRzLCBhbmQgdGFyZ2V0IGRlZmluaXRpb25zLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkaWFnbm9zaW5nIGFueSBidWlsZC1yZWxhdGVkIGlzc3VlcyBvciB1bmRlcnN0YW5kaW5nIHRoZSBwcm9qZWN0J3Mgc3RydWN0dXJlIGZyb20gYSBoaWdoIGxldmVsLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NDo0MS4xMTM5NzM1NDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzE3MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2ZW50c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL01ha2VmaWxlPTI2PWVuZGlmXFxua2VybmVsL01ha2VmaWxlLTI3LVxcbmtlcm5lbC9NYWtlZmlsZToyODojIFByZXZlbnRzIGZsaWNrZXIgb2YgdW5pbnRlcmVzdGluZyBfX2RvX3NvZnRpcnEoKS9fX2xvY2FsX2JoX2Rpc2FibGVfaXAoKVxcbmtlcm5lbC9NYWtlZmlsZS0yOS0jIGluIGNvdmVyYWdlIHRyYWNlcy5cXG4tLVxcbmtlcm5lbC9NYWtlZmlsZT0xMjg9b2JqLSQoQ09ORklHX0NGSSkgKz0gY2ZpLm9cXG5rZXJuZWwvTWFrZWZpbGUtMTI5LVxcbmtlcm5lbC9NYWtlZmlsZToxMzA6b2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKSArPSBldmVudHMvXFxua2VybmVsL01ha2VmaWxlLTEzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6NDEuMTYxNjk1MzIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTYyOTYyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgUGVyZm9ybWFuY2UgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIHRoaXMgZG93bi4gSSdtIGFzc3VtaW5nIHdlJ3JlIGFpbWluZyBmb3Igcm9idXN0IHBlcmZvcm1hbmNlIGFuYWx5c2lzIGNhcGFiaWxpdGllcyBoZXJlLCBzbyB0aGUgaW1tZWRpYXRlIG5lZWQgaXMgZm9yIGBDT05GSUdfUEVSRl9FVkVOVFNgLiBUaGF0J3MgYSBnaXZlbi4gTm93LCB3aXRoIHRoZSBpbmNyZWFzaW5nIHVzZSBvZiBCUEYsIEknbSB0aGlua2luZyB3ZSBhbHNvIHdhbnQgYENPTkZJR19CUEZfRVZFTlRTYC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYW5kIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfQlBGX0VWRU5UU2AuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgZ3JvdW5kd29yayBsYWlkIGJlZm9yZSBlbmFibGluZyBpdC4gR290dGEgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBuZWVkZWQgZnVuY3Rpb25hbGl0eSB0byBnZXQgdGhpcyB3b3JraW5nIHJpZ2h0LCBzbyB0aGF0J3Mgd2hlcmUgSSB3aWxsIGZvY3VzIG15IGF0dGVudGlvbiByaWdodCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NDo0My45MTc5OTQzMjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODcwNDQxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjQ1LjcwNTA0NDY2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxNjU5NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJQRl9FVkVOVFMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IGBCUEZfRVZFTlRTYCBpcyBjb25maWd1cmVkLCB3aGljaCB1bmRvdWJ0ZWRseSBtZWFucyBsb29raW5nIGludG8gaXRzIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIG1vc3QgbG9naWNhbCBwbGFjZTogYGtlcm5lbC90cmFjZS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHR5cGljYWxseSBkZWZpbmVkLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdHJhY2luZyBhbmQgaW5zdHJ1bWVudGF0aW9uLCBhbmQgYEJQRl9FVkVOVFNgIHNjcmVhbXMgb2YgZUJQRi4gSSdkIGJlIHdpbGxpbmcgdG8gYmV0IGl0J3MgaW4gdGhlcmUsIGFuZCB0aGF0J3Mgd2hlcmUgSSdsbCBiZWdpbiBteSBzZWFyY2guIEhvcGVmdWxseSwgdGhhdCB3aWxsIGltbWVkaWF0ZWx5IHJldmVhbCB3aGV0aGVyIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBpZiBpdCBoYXMgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXQgZG9lcy4gVGltZSB0byBnbyBodW50aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDk3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6NDkuMTM2NzA2MTY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXFxuIDg1MTpcXHRcXHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cXG4gODUyOlxcdFxcbiA4NTM6XFx0Y29uZmlnIEJQRl9FVkVOVFNcXG4gODU0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gODU1OlxcdFxcdGRlcGVuZHMgb24gKEtQUk9CRV9FVkVOVFMgfHwgVVBST0JFX0VWRU5UUykgXFx1MDAyNlxcdTAwMjYgUEVSRl9FVkVOVFNcXG4gODU2OlxcdFxcdGJvb2xcXG4gODU3OlxcdFxcdGRlZmF1bHQgeVxcbiA4NTg6XFx0XFx0aGVscFxcbiA4NTk6XFx0XFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcXG4gODYwOlxcdFxcdCAgdHJhY2Vwb2ludCBldmVudHMuXFxuIDg2MTpcXHRcXG4gODYyOlxcdGNvbmZpZyBEWU5BTUlDX0VWRU5UU1xcbiA4NjM6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4NjQ6XFx0XFxuIDg2NTpcXHRjb25maWcgUFJPQkVfRVZFTlRTXFxuIDg2NjpcXHRcXHRkZWZfYm9vbCBuXFxuIDg2NzpcXHRcXG4gODY4OlxcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXFxuIDg2OTpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIHByb2dyYW1zIHRvIG92ZXJyaWRlIGEga3Byb2JlZCBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6NDkuMTM2ODAxOTA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTAwMDA4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEV2ZW50cyBDb25maWd1cmF0aW9uIGFuZCBhIENyaXRpY2FsIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBkZXBlbmRlbmN5OiBgQlBGX0VWRU5UU2AgaXMgZGVwZW5kZW50IG9uIGBCUEZfU1lTQ0FMTGAsIGVpdGhlciBgS1BST0JFX0VWRU5UU2Agb3IgYFVQUk9CRV9FVkVOVFNgLCBhbmQgYFBFUkZfRVZFTlRTYC4gU2luY2UgYEJQRl9FVkVOVFNgIGlzIHNldCB0byBcInlcIiBieSBkZWZhdWx0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIG90aGVyIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLCBhcmUgYWxzbyBlbmFibGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lIGNvbmZpZ3VyYXRpb24gY2hlY2suXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGhvd2V2ZXIsIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4LiBJdCBhZGRyZXNzZXMgYSBkYXRhIHJhY2UgaXNzdWUgcmVsYXRlZCB0byBgZXZlbnQtXHUwMDNlcHJvZ2Agd2l0aGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBUaGlzIGlzIGEgbm9uLXRyaXZpYWwgZml4OyBmaXhpbmcgZGF0YSByYWNlcyBpcyBhbHdheXMgaW1wb3J0YW50IGZvciBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBJdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBCUEYgY29kZSBwYXRoLlxuXG5cIldvcnRoRnV6emluZzogdHJ1ZVwiIC0gSSBjb25jdXIuIFRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nIGFmdGVyIHRoaXMgZml4IGlzIGFwcGxpZWQuIFRob3NlIGZ1bmN0aW9ucyBhcmUgbm93IGxlc3MgcHJvbmUgdG8gZGF0YSByYWNlcywgYW5kIGFyZSBub3cgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgaGVyZSBhcmUgY2xlYXJseSBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRob3NlIHJvdXRpbmVzIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSByYWNlIGNvbmRpdGlvbi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGFmZmVjdHMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgY29uZmxpY3QsIHNvIGl0J3MgYSBkZXRhaWwgSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6NTMuOTQ2ODA0ODExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxMDU1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTEwNzQxPXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfYnBmX2hhbmRsZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA3NDktXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA3NTA6c3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwNzUxLVxcdFxcdFxcdFxcdCBpbnQgdGhyb3R0bGUsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4NDQ9aW50IHBlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NTQtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4NTU6XFx0cmV0dXJuIF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgZGF0YSwgcmVncyk7XFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NTYtfVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4OTk9c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG92ZXJmbG93LFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTItXFx0Zm9yICg7IG92ZXJmbG93OyBvdmVyZmxvdy0tKSB7XFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5MTM6XFx0XFx0aWYgKF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgdGhyb3R0bGUsXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTQtXFx0XFx0XFx0XFx0XFx0ICAgIGRhdGEsIHJlZ3MpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjU0LjA2MzkxNjg0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExNjc2NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIE92ZXJmbG93IEhhbmRsZXIgU2NvcGUqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGlzIG92ZXJmbG93IHNpdHVhdGlvbi4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGZ1bmN0aW9uLCBpdCdzIHN0YXRpYywgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBvdXIgZm9jdXMuIFNpbmNlIHRoYXQncyB0aGUgYmFzZSBvZiBpdCwgd2Ugc2hvdWxkIGRpcmVjdCBvdXIgYXR0ZW50aW9uIHRvIGl0cyBub24tc3RhdGljIGNvdW50ZXJwYXJ0cywgdGhlIGxpa2VseSBwdWJsaWMgZW50cnkgcG9pbnRzLiBTbywgbGV0J3MgcHJpb3JpdGl6ZSBpbnZlc3RpZ2F0aW5nIGBwZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfc3dldmVudF9vdmVyZmxvd2AgYXMgdGhvc2UgYXJlIHRoZSBleHRlcm5hbCBmdW5jdGlvbnMgdGhhdCB3b3VsZCBnZXQgY2FsbGVkLiBCdXQgaG9sZCBvbiwgYmVmb3JlIHdlIGdvIHRvbyBmYXIgZG93biB0aGF0IHBhdGguLi5pdCB3b3VsZCBiZSBwcnVkZW50IHRvIHF1aWNrbHkgY29uZmlybSBpZiBgcGVyZl9zd2V2ZW50X292ZXJmbG93YCBpcyBhbHNvIHN0YXRpYy4gSWYgaXQgaXMsIHRoYXQgd2lsbCBzaWduaWZpY2FudGx5IGFsdGVyIG91ciBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjU3LjM3NTU5NjA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU0MDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX3N3ZXZlbnRfb3ZlcmZsb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2V2ZW50cy9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4NzY9dTY0IHBlcmZfc3dldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODk4LVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwODk5OnN0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBvdmVyZmxvdyxcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDkwMC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMDkyNT1zdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgbnIsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk2My1cXHRcXHRkYXRhLVxcdTAwM2VwZXJpb2QgPSBucjtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDk2NDpcXHRcXHRyZXR1cm4gcGVyZl9zd2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCBkYXRhLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk2NS1cXHR9IGVsc2VcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTY4LVxcdGlmIChuciA9PSAxIFxcdTAwMjZcXHUwMDI2IGh3Yy1cXHUwMDNlc2FtcGxlX3BlcmlvZCA9PSAxIFxcdTAwMjZcXHUwMDI2ICFldmVudC1cXHUwMDNlYXR0ci5mcmVxKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwOTY5OlxcdFxcdHJldHVybiBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsIGRhdGEsIHJlZ3MpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTcwLVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5NzMtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5NzQ6XFx0cGVyZl9zd2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCBkYXRhLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk3NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjU3LjQyMjE1MDg2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjYzNjg4NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBhIFNvZnR3YXJlIEV2ZW50IE92ZXJmbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcGVyZl9zd2V2ZW50X292ZXJmbG93YCB2YXJpYWJsZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0J3MgaW1wb3J0YW50IGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBvdmVyZmxvdy4gU2luY2UgaXQncyByZWxhdGVkIHRvIHNvZnR3YXJlIGV2ZW50cywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhhbWluZSBgcGVyZl9zd2V2ZW50X2V2ZW50YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0IGluIHRoaXMgc2NlbmFyaW8sIGlmIGl0J3Mgb3ZlcmZsb3dpbmcuIEl0IHNob3VsZCB0ZWxsIG1lIHdoZXJlIHRoaW5ncyBhcmUgZ29pbmcgc2lkZXdheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NTowNC4wODU4NDE3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5NjA5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyZl9zd2V2ZW50X2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTEwODk5PXN0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBvdmVyZmxvdyxcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTI0LVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwOTI1OnN0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBucixcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDkyNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMTA2MD1zdGF0aWMgdm9pZCBkb19wZXJmX3N3X2V2ZW50KGVudW0gcGVyZl90eXBlX2lkIHR5cGUsIHUzMiBldmVudF9pZCxcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTExMDc1LVxcdFxcdGlmIChwZXJmX3N3ZXZlbnRfbWF0Y2goZXZlbnQsIHR5cGUsIGV2ZW50X2lkLCBkYXRhLCByZWdzKSlcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMTA3NjpcXHRcXHRcXHRwZXJmX3N3ZXZlbnRfZXZlbnQoZXZlbnQsIG5yLCBkYXRhLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMTA3Ny1cXHR9XFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMTQxMD1zdGF0aWMgdm9pZCBfX3BlcmZfdHBfZXZlbnRfdGFyZ2V0X3Rhc2sodTY0IGNvdW50LCB2b2lkICpyZWNvcmQsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMTQyNS1cXHRcXHRwZXJmX3NhbXBsZV9zYXZlX3Jhd19kYXRhKGRhdGEsIGV2ZW50LCByYXcpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jOjExNDI2OlxcdFxcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgY291bnQsIGRhdGEsIHJlZ3MpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTExNDI3LVxcdH1cXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTExNDUzPXZvaWQgcGVyZl90cF9ldmVudCh1MTYgZXZlbnRfdHlwZSwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplLFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE0ODUtXFx0XFx0XFx0cGVyZl9zYW1wbGVfc2F2ZV9yYXdfZGF0YShcXHUwMDI2ZGF0YSwgZXZlbnQsIFxcdTAwMjZyYXcpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jOjExNDg2OlxcdFxcdFxcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgY291bnQsIFxcdTAwMjZkYXRhLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMTQ4Ny1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMTgwMT12b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE4MTMtXFx0aWYgKCFicC1cXHUwMDNlaHcuc3RhdGUgXFx1MDAyNlxcdTAwMjYgIXBlcmZfZXhjbHVkZV9ldmVudChicCwgcmVncykpXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTE4MTQ6XFx0XFx0cGVyZl9zd2V2ZW50X2V2ZW50KGJwLCAxLCBcXHUwMDI2c2FtcGxlLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMTgxNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjA0LjE2NDgwNzgyOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE2MzE5ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIFBlcmYgRXZlbnQgRnVuY3Rpb24gVmlzaWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHBlcmZfc3dldmVudF9ldmVudGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbWVhbnMgdGhpcyBmdW5jdGlvbiBpcyAqb25seSogdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBJdCdzIGVzc2VudGlhbGx5IHByaXZhdGUsIGFuZCBJIHdvdWxkbid0IGV4cGVjdCB0byBpbnRlcmFjdCB3aXRoIGl0IGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlLlxuXG5Ob3csIHRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGlmIGBwZXJmX2V2ZW50X292ZXJmbG93YCAqaXNuJ3QqIHN0YXRpYywgdGhlbiBpdCdzIGNsZWFybHkgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLiBUaGlzIG1ha2VzIHNlbnNlOyBhbiBvdmVyZmxvdyBoYW5kbGVyIG5lZWRzIHRvIGJlIHNvbWV0aGluZyB0aGF0IHRoZSBzeXN0ZW0gY2FuIGNhbGwgaW50byBpbiByZXNwb25zZSB0byBldmVudHMsIHNvIGl0J3MgcHJvYmFibHkgZXhwb3J0ZWQgdG8gZGVhbCB3aXRoIHRoZSBhY3R1YWwgb3ZlcmZsb3cgaXRzZWxmLlxuXG5GaW5hbGx5LCBJJ20gbm90aW5nIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGRlY2xhcmVkLiBJcyBpdCBhbHNvIGV4cG9ydGVkPyBHaXZlbiB0aGUgbmF0dXJlIG9mIEJQRiBwcm9ncmFtIGRldGFjaG1lbnQsIHdoaWNoIGNvdWxkIGhhcHBlbiBmcm9tIGEgdmFyaWV0eSBvZiBwbGFjZXMsIEkgd291bGQgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYWxzbyBiZSBub24tc3RhdGljIGFuZCBhdmFpbGFibGUgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdG8gY2FsbC4gSXQgbWlnaHQgZXZlbiBiZSBwYXJ0IG9mIHRoZSBgcGVyZl9ldmVudF9vcGVuYCBpbmZyYXN0cnVjdHVyZSwgYXMgYSBwcm9ncmFtIHdvdWxkIG5lZWQgdG8gYmUgZGV0YWNoZWQgYXMgcGFydCBvZiBhIGNsb3N1cmUgb3BlcmF0aW9uLCBhIHByb2dyYW0gY291bGQgYmUgcmVtb3ZlZCBhdCB3aWxsIGJ5IGEgcHJpdmlsZWdlZCBvcGVyYXRpb24sIG9yIG1heWJlIGJlIGF1dG9tYXRpY2FsbHkgZGV0YWNoZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG5cbkVzc2VudGlhbGx5LCBJJ20gbWFwcGluZyBvdXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcGVyZiBzdWJzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyIGFuZCB0aGUga2VybmVsIGF0IGxhcmdlLiBUaGUgc3RhdGljL25vbi1zdGF0aWMgZGlzdGluY3Rpb24gaXMgYSBrZXkgaW5kaWNhdG9yIG9mIGRlc2lnbiBpbnRlbnQgYW5kIHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MDguMzgxMTMwNTg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI2MjI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE5NTE9aW50IHBlcmZfZXZlbnRfYXR0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xOTk0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxOTk1OnZvaWQgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xOTk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MDguNDM0Mzk3ODAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDQ1MTY0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gUGVyZiBFdmVudCBEZXRhY2htZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYC4gSXQncyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IGNoZWNrIGBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZ2AganVzdCBpbiBjYXNlLCBidXQgdGhlIGFjdHVhbCBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBkZXRhY2ggZnVuY3Rpb24sIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGZvY3VzIG15IGluaXRpYWwgZWZmb3J0cy5cblxuRm9yIHN5bWJvbCB0YXJnZXRpbmcsIEknbSB0aGlua2luZyBJJ2xsIGtleSBpbiBvbjpcblxuKiAgIGBwZXJmX2V2ZW50X292ZXJmbG93YFxuKiAgIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2BcblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIGRvY3VtZW50IG1lbnRpb25zIGEgZmV3OlxuXG4qICAgYFBFUkZfRVZFTlRTYFxuKiAgIGBCUEZfRVZFTlRTYFxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgS1BST0JFX0VWRU5UU2BcblxuSSByZWNhbGwgc2VlaW5nIGBCUEZfRVZFTlRTYCBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgLCBzbyBJJ20gcHJldHR5IHN1cmUgaXQncyBhIHZhbGlkIGNvbmZpZyBvcHRpb24uIExldCdzIG1ha2Ugc3VyZSBgUEVSRl9FVkVOVFNgIGlzIGFsc28gY29uZmlndXJlZC4gVGhhdCBpcyBhbiBpbXBvcnRhbnQgb25lLlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MzQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MTIuNDM4OTE2NjMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYzNTY3OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJGX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFxcXCJQZXJmb3JtYW5jZSBtb25pdG9yaW5nXFxcIlxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTExLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjEyOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9SQVBMXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcIkludGVsL0FNRCByYXBsIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjI4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yOS1cXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFxcdTAwMjZcXHUwMDI2IENQVV9TVVBfQU1EXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zNi1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzozNzpjb25maWcgUEVSRl9FVkVOVFNfQU1EX1VOQ09SRVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJBTUQgVW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcbi0tXFxuaW5pdC9LY29uZmlnPTIxNDE9bWVudSBcXFwiS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnNcXFwiXFxuaW5pdC9LY29uZmlnLTIxNDItXFxuaW5pdC9LY29uZmlnOjIxNDM6Y29uZmlnIFBFUkZfRVZFTlRTXFxuaW5pdC9LY29uZmlnLTIxNDQtXFx0Ym9vbCBcXFwiS2VybmVsIHBlcmZvcm1hbmNlIGV2ZW50cyBhbmQgY291bnRlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjE0LjIwMjQ4OTY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTYwOTY5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKlxuXG5SaWdodCwgc28gYFBFUkZfRVZFTlRTYCwgdGhhdCdzIGRlZmluaXRlbHkgaGFuZ2luZyBvdXQgaW4gYGluaXQvS2NvbmZpZ2AsIGp1c3QgYXMgSSBzdXNwZWN0ZWQuIE5vdywgbGV0J3MgcGl2b3QgYW5kIHF1aWNrbHkgY29uZmlybSB0aGUgbG9jYXRpb25zIG9mIGEgY291cGxlIG9mIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGVyZSBgQlBGX1NZU0NBTExgIGFuZCBgS1BST0JFX0VWRU5UU2AgYXJlIHNpdHVhdGVkIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIGVuc3VyZSBhIGhvbGlzdGljIHZpZXcgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBnaXZlbiB0aGVzZSBhcmUgcmVsYXRlZCBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MTcuODk4NTg5NDU1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM2ODAzNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NToxOS45MzU0MDIzNThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA0NjkwNDI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjkxNzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjIxLjk4MjMwOTM1MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjU2MDUyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9NzcwPWNvbmZpZyBQUk9CRV9FVkVOVFNfQlRGX0FSR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTc4MS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo3ODI6Y29uZmlnIEtQUk9CRV9FVkVOVFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03ODMtXFx0ZGVwZW5kcyBvbiBLUFJPQkVTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04MDAtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODAxOmNvbmZpZyBLUFJPQkVfRVZFTlRTX09OX05PVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04MDItXFx0Ym9vbCBcXFwiRG8gTk9UIHByb3RlY3Qgbm90cmFjZSBmdW5jdGlvbiBmcm9tIGtwcm9iZSBldmVudHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjIzLjU1NDg3Njk5MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc2ODQxNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgSW1wbGljYXRpb25zIG9mIEtQUk9CRV9FVkVOVFMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogYEtQUk9CRV9FVkVOVFNgIGlzIGluaGVyZW50bHkgcmVsaWFudCBvbiBgS1BST0JFU2AuIFRoaXMgaXNuJ3QgZ3JvdW5kYnJlYWtpbmcsIGJ1dCBpdCdzIHRoZSBmb3VuZGF0aW9uIHdlIGhhdmUgdG8gY29uc3RhbnRseSBrZWVwIGluIG1pbmQuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBLUFJPQkVfRVZFTlRTYCBpcyBidWlsdCAqb24gdG9wKiBvZiB0aGUgS1BST0JFUyBpbmZyYXN0cnVjdHVyZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhhdCBiYXNlIGxheWVyIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgZGV2ZWxvcG1lbnQsIGFuZCBvcHRpbWl6YXRpb24uIEl0IGRpY3RhdGVzIGhvdyBmYXIgd2UgY2FuIHB1c2ggdGhpbmdzLCBhbnkgbGltaXRhdGlvbnMsIGFuZCBwb3NzaWJsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gQW55IGRpc2N1c3Npb24gYWJvdXQgYEtQUk9CRV9FVkVOVFNgIGhhcyB0byBjaXJjbGUgYmFjayB0byB3aGF0IHRoZSBgS1BST0JFU2AgZm91bmRhdGlvbiBwcm92aWRlcyAoYW5kIHBlcmhhcHMgKmRvZXNuJ3QqIHByb3ZpZGUpLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBzaGFwZXMgbXkgc3RyYXRlZ3kgZm9yIHByYWN0aWNhbGx5IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0byBob3cgSSdkIGFwcHJvYWNoIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjI2LjkzMTcyMTE5MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTQyNjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTExMj1jb25maWcgR0VORVJJQ19FTlRSWVxcbi0tXFxuYXJjaC9LY29uZmlnLTExNi1cXG5hcmNoL0tjb25maWc6MTE3OmNvbmZpZyBLUFJPQkVTXFxuYXJjaC9LY29uZmlnLTExOC1cXHRib29sIFxcXCJLcHJvYmVzXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnPTE2OD1jb25maWcgT1BUUFJPQkVTXFxuLS1cXG5hcmNoL0tjb25maWctMTcyLVxcbmFyY2gvS2NvbmZpZzoxNzM6Y29uZmlnIEtQUk9CRVNfT05fRlRSQUNFXFxuYXJjaC9LY29uZmlnLTE3NC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0yMzcxPWNvbmZpZyBURVNUX0lPVl9JVEVSXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMzgyLVxcbmxpYi9LY29uZmlnLmRlYnVnOjIzODM6Y29uZmlnIEtQUk9CRVNfU0FOSVRZX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMzg0LVxcdHRyaXN0YXRlIFxcXCJLcHJvYmVzIHNhbml0eSB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NToyOC41MTcxNTI1ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5NDY1MDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGVyZi9CUEYgRGF0YSBSYWNlIEZpeCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBmaXggdGhhdCBjZW50ZXJzIGFyb3VuZCBgS1BST0JFU2AuIFJpZ2h0LCBnb3QgaXQuIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyDigJMgd2UncmUgZGVhbGluZyB3aXRoIGBQRVJGX0VWRU5UU2AsIGBCUEZfU1lTQ0FMTGAsIGBLUFJPQkVTYCwgYEtQUk9CRV9FVkVOVFNgLCBhbmQgYEJQRl9FVkVOVFNgLiBTdGFuZGFyZCBzdHVmZiBmb3IgcGVyZiBhbmQgQlBGLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYXJvdW5kIGBwZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIGEgZGF0YSByYWNlIG9uIGBldmVudC1cdTAwM2Vwcm9nYCB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLCBmaXhlZCBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIHNvdW5kcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeCBkZWVwIGluIHRoZSBwZXJmL2JwZiBjb3JlLiBUaGF0J3MgYSBnb29kIHNpZ24sIGVzcGVjaWFsbHkgc2luY2UgdGhlc2UgYXJlIHJlYWNoYWJsZSBhbmQgbGlrZWx5IHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEl0IG1lbnRpb25zIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGlzIHdoZXJlIHRoZSBkYXRhIHJhY2UgZXhpc3RzIGFuZCB0aGUgcHJpbWFyeSBmb2N1cyBvZiB0aGUgZml4LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWUgdGhhdCBpcyB0aGUgdGFyZ2V0LCBpZiB0aGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGFuZCBleHBvc2VkIHRvIHRoZSB1c2VyLiBHaXZlbiB0aGF0IGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGlzIHN0YXRpYywgd2UncmUgbGlrZWx5IHRhcmdldGluZyBgcGVyZl9ldmVudF9vdmVyZmxvd2AuIFRoYXQgc2VlbXMgcmlnaHQuIEFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGlzIG5vbi1zdGF0aWMsIHNvIGl0J3MgZGlyZWN0bHkgbW9kaWZpZWQsIG1ha2luZyBpdCBhbm90aGVyIHZhbGlkIGZvY3VzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGlzIGV4cG9ydGVkLiBUaGF0J3MgY3JpdGljYWwgZm9yIGRldGVybWluaW5nIGlmIGl0IGlzIGEgdGFyZ2V0IGZvciB0ZXN0aW5nIG9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MzQuNjExODA1NjU1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDEwNjg5MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MzQuODEyODg0MjkyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDczMTU4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBjb25zaWRlcmF0aW9uczpcblxuKipGb2N1c2luZyBvbiBTY29wZSBhbmQgQWNjZXNzaWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlIGFuZCBpdHMgc3RydWN0dXJlLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaW5ncyBhcmUgYmVpbmcgdXRpbGl6ZWQuIFRoZSBpbml0aWFsIGluY2xpbmF0aW9uLCB0aGUgZmlyc3QgbWVudGFsIGJsaXAsIGlzIHRoYXQgaXQgKmRvZXNuJ3QqIG5lY2Vzc2FyaWx5IG5lZWQgdG8gYmUgZXhwb3J0ZWQgYXMgYSBtb2R1bGUuIFRoYXQncyBub3QgdGhlIHByaW1hcnkgY29uY2VybiBhdCB0aGlzIGp1bmN0dXJlLiBNeSBmb2N1cyBpcyBtb3JlIGdyYW51bGFyIHRoYW4gdGhhdC4gV2hhdCdzIGNydWNpYWwgaGVyZSBpcyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGJlICpub24tc3RhdGljKi4gVGhpcyBzaWduYWxzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgc2hpZnQgaW4gZGVzaWduIHBoaWxvc29waHkuIFdlJ3JlIHN0ZWVyaW5nIGF3YXkgZnJvbSBnbG9iYWwsIHNoYXJlZCBzdGF0ZSBpbiBmYXZvciBvZiBzb21ldGhpbmcgdGhhdCBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuYWdlZCwgdGVzdGVkLCBhbmQgcG90ZW50aWFsbHkgY29tcG9zZWQgd2l0aCBvdGhlciBwaWVjZXMgb2YgZnVuY3Rpb25hbGl0eS4gU3RhdGljIG1ldGhvZHMsIHdoaWxlIHNvbWV0aW1lcyBjb252ZW5pZW50LCBvZnRlbiBpbnRyb2R1Y2UgY291cGxpbmcgYW5kIGhpZGRlbiBkZXBlbmRlbmNpZXMsIHdoaWNoIGJlY29tZSBhIG5pZ2h0bWFyZSB0byByZWZhY3RvciBsYXRlci4gU28sIG1ha2luZyBpdCBub24tc3RhdGljIHN1Z2dlc3RzIGEgY2xlYW5lciwgbW9yZSBvYmplY3Qtb3JpZW50ZWQgYXBwcm9hY2gsIGV2ZW4gaWYgaXQncyBub3QgYmVpbmcgZXhwbGljaXRseSBtb2R1bGFyaXplZC4gVGhlIGltbWVkaWF0ZSBhZHZhbnRhZ2UgaXMgY29udHJvbCBhbmQgdGhlIGFiaWxpdHkgdG8gaW5zdGFudGlhdGUsIG1vZGlmeSwgYW5kIHBhc3MgYXJvdW5kIHRoZSByZWxldmFudCBvYmplY3RzLiBUaGlzIG9wZW5zIHVwIHBvc3NpYmlsaXRpZXMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFuZCBvdGhlciBpbXBvcnRhbnQgdGVjaG5pcXVlcyB0byByZWR1Y2UgYW55IGtpbmQgb2YgdGlnaHQgY291cGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDc2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MzkuMDYwMjAyNDY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI1MjQ2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xOTUxPWludCBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTk5NTp2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjM5LjYxMjczMzI5OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDEzNTMzNzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5vbi1TdGF0aWMgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCB0aGUga2V5IGlzIHRoYXQgdGhpcyBpc24ndCBzdGF0aWMuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIFNpbmNlIHRoZSBiZWhhdmlvciBpcyBsaW5rZWQgdG8gcGVyZm9ybWFuY2UgZXZlbnRzLCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgcGVyZm9ybWFuY2UgZXZlbnQgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBtb3N0IGxpa2VseSBhcmVhIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgaXMgdGhlIG92ZXJmbG93IGhhbmRsaW5nLiBMZXQncyBzZWUuLi4gSSdsbCBqdW1wIHJpZ2h0IGludG8gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBwZXJmX2V2ZW50X292ZXJmbG93YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBwbGFjZSB3aGVyZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhhdCB5aWVsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTExLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6NDIuNjI2MjY5Mzc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg1NTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTEwNzQxPXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfYnBmX2hhbmRsZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA3NDktXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA3NTA6c3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwNzUxLVxcdFxcdFxcdFxcdCBpbnQgdGhyb3R0bGUsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NDMtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4NDQ6aW50IHBlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODQ1LVxcdFxcdFxcdHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NTQtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4NTU6XFx0cmV0dXJuIF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgZGF0YSwgcmVncyk7XFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NTYtfVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4OTk9c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG92ZXJmbG93LFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTItXFx0Zm9yICg7IG92ZXJmbG93OyBvdmVyZmxvdy0tKSB7XFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5MTM6XFx0XFx0aWYgKF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgdGhyb3R0bGUsXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTQtXFx0XFx0XFx0XFx0XFx0ICAgIGRhdGEsIHJlZ3MpKSB7XFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMjI1ND1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGVyZl9zd2V2ZW50X2hydGltZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMjI3NC1cXHRcXHRpZiAoIShldmVudC1cXHUwMDNlYXR0ci5leGNsdWRlX2lkbGUgXFx1MDAyNlxcdTAwMjYgaXNfaWRsZV90YXNrKGN1cnJlbnQpKSlcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMjI3NTpcXHRcXHRcXHRpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgXFx1MDAyNmRhdGEsIHJlZ3MpKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEyMjc2LVxcdFxcdFxcdFxcdHJldCA9IEhSVElNRVJfTk9SRVNUQVJUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NTo0Mi42NzgxMzEwMTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1NzUxODQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBgcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIFJlc3VsdCBTZXR0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgLiBIbW0sIGl0J3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdywgd2hhdCBkb2VzIHRoYXQgaW1wbHkgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IEl0IHN1Z2dlc3RzIGl0IGhhcyBicm9hZGVyIHZpc2liaWxpdHksIHdoaWNoIG1pZ2h0IGltcGFjdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhbmQsIHBvdGVudGlhbGx5LCB0aHJlYWQgc2FmZXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IG5vbi1zdGF0aWMgbmF0dXJlIGZpcm1seSBpbiBtaW5kIGFzIEkgZGVsdmUgZGVlcGVyLlxuXG5SaWdodCwgc28gd2hlcmUgZG9lcyB0aGlzIGxlYWQgbWU/IEkgdGhpbmsgaXQncyB0aW1lIHRvIGNvbnNpZGVyIHRoZSBwcm9jZXNzIG9mIHNldHRpbmcgdGhlIHJlc3VsdHMuIExldCdzIGNhbGwgdGhpcyBcInNldC1yZXN1bHRzLlwiIFRoZSBub24tc3RhdGljIGNoYXJhY3RlcmlzdGljIG9mIGBwZXJmX2V2ZW50X292ZXJmbG93YCBwb3RlbnRpYWxseSBpbmZsdWVuY2VzIHRoZSBtZWNoYW5pc20gYnkgd2hpY2ggcmVzdWx0cyBhcmUgc2V0IG9yIGFjY2Vzc2VkLiBXZSBjYW4ndCBpbW1lZGlhdGVseSBhc3N1bWUgdGhlIHNjb3BlIG9yIGFjY2VzcyBwYXR0ZXJucywgd2UgbXVzdCBrZWVwIHRoaXMgaW4gbWluZCBhcyB3ZSBldmFsdWF0ZSB0aGUgY29kZSBwYXRoLiBJIG5lZWQgdG8gdHJhY2UgaG93IHRoZSByZXN1bHQtc2V0dGluZyBwcm9jZXNzIHVzZXMgb3IgaW50ZXJhY3RzIHdpdGggYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyB0byB1bnBhY2suIFRoaXMgaXMgbXkgbmV4dCBjcnVjaWFsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjI2LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjQ3LjEzNTY1MzEwOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NTAzMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIktQUk9CRV9FVkVOVFNcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gICAgXCJwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIG9uIGBldmVudC1cXHUwMDNlcHJvZ2AgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBpbiB0aGUgY29yZSBwZXJmL2JwZiBzdWJzeXN0ZW0uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIktQUk9CRV9FVkVOVFNcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gICAgXCJwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIG9uIGBldmVudC1cXHUwMDNlcHJvZ2AgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBpbiB0aGUgY29yZSBwZXJmL2JwZiBzdWJzeXN0ZW0uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6NDcuMjEwMTYyNzg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODU1MTg5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6NDcuMjEwNzA1MzQ3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4NTQ2NDI5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChkYXRhIHJhY2UpIHRoYXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZS4gU3BlY2lmaWNhbGx5LCBgZXZlbnQtXFx1MDAzZXByb2dgIHdhcyBiZWluZyBjaGVja2VkIGZvciBub24tTlVMTCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvdygpYCwgd2hpbGUgaXQgY291bGQgYmUgY29uY3VycmVudGx5IHNldCB0byBOVUxMIGluIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZygpYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFKClgIGFuZCBgV1JJVEVfT05DRSgpYCBlbnN1cmVzIHRoZSBwb2ludGVyIGlzIGZldGNoZWQgb25seSBvbmNlLCBwcmV2ZW50aW5nIHRoZSByYWNlLlxcblxcblRoaXMgdHlwZSBvZiBidWcgKGRhdGEgcmFjZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlKSBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgZ2VuZXJhbCBrZXJuZWwgY3Jhc2ggcmVwb3J0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYXMgS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTllODhmOTFiNjk1ZjRmYzA0ZWQ5ODZiZjQ2Zjg5ZWZkZTg0M2RlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAwOjU0OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuaW5kZXggYmE1YmQ2YTc4ZmU3Yi4uOWQ5YzU0Nzc3NzJlMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jXG4rKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuQEAgLTEwNzUzLDYgKzEwNzUzLDcgQEAgc3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuIHtcbiBcdGludCBldmVudHMgPSBhdG9taWNfcmVhZChcdTAwMjZldmVudC1cdTAwM2VldmVudF9saW1pdCk7XG4gXHRpbnQgcmV0ID0gMDtcbitcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcbiBcdC8qXG4gXHQgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydFxuQEAgLTEwNzY2LDcgKzEwNzY3LDggQEAgc3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuIFx0aWYgKGV2ZW50LVx1MDAzZWF0dHIuYXV4X3BhdXNlKVxuIFx0XHRwZXJmX2V2ZW50X2F1eF9wYXVzZShldmVudC1cdTAwM2VhdXhfZXZlbnQsIHRydWUpO1xuIFxuLVx0aWYgKGV2ZW50LVx1MDAzZXByb2cgXHUwMDI2XHUwMDI2IGV2ZW50LVx1MDAzZXByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgXHUwMDI2XHUwMDI2XG4rXHRwcm9nID0gUkVBRF9PTkNFKGV2ZW50LVx1MDAzZXByb2cpO1xuK1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWJwZl9vdmVyZmxvd19oYW5kbGVyKGV2ZW50LCBkYXRhLCByZWdzKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5pbmRleCA3NTQ5NWE1YzM1MDc5Li5lZTYxZGM3NjAwNDUzIDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG4rKysgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbkBAIC0yMDE4LDcgKzIwMTgsNyBAQCB2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcbiBcbiBwdXQ6XG4gXHRwcm9nID0gZXZlbnQtXHUwMDNlcHJvZztcbi1cdGV2ZW50LVx1MDAzZXByb2cgPSBOVUxMO1xuK1x0V1JJVEVfT05DRShldmVudC1cdTAwM2Vwcm9nLCBOVUxMKTtcbiBcbiB1bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YnBmX2V2ZW50X211dGV4KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjQ3LjIxMDcwNjMwN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODU0NjIxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4IGZvciBgZXZlbnQtXHUwMDNlcHJvZ2AqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGFjY2Vzc2VzIHRvIGBldmVudC1cdTAwM2Vwcm9nYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCwgbGlrZWx5IGFkZHJlc3NpbmcgYSBkYXRhIHJhY2UuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0J3MgdGhlIGNhc2UuIEl0J3MgYWJvdXQgcHJvdGVjdGluZyB0aGUgcmVhZC93cml0ZSBvZiBgZXZlbnQtXHUwMDNlcHJvZ2AgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi5cblxuTXkgZmlyc3QgZ3V0IGNoZWNrIGlzIHRvIHRoaW5rIGFib3V0IHdoYXQgbWVtb3J5IHNhbml0aXplciB3b3VsZCBjYXRjaCB0aGlzLiBLTVNBTiBpcyBncmVhdCwgYnV0IGl0IHByaW1hcmlseSBmb2N1c2VzIG9uIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZT8gTm8sIGl0J3MgYWJvdXQgYSByYWNlIGNvbmRpdGlvbi4gRGF0YSByYWNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIGFyZW4ndCByZWFsbHkgS01TQU4ncyBkb21haW4uIEtBU0FOLCBlc3BlY2lhbGx5IEtDU0FOIGZvciBkYXRhIHJhY2VzIG9yIHRoZSBnZW5lcmFsIEtBU0FOIGZvciBVc2UtQWZ0ZXItRnJlZSwgYXJlIG11Y2ggYmV0dGVyIHN1aXRlZCBoZXJlLlxuXG5CdXQsIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIERvZXMgdGhpcyBwYXRjaCAqaW50cm9kdWNlKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMsIGV2ZW4gaW5kaXJlY3RseT8gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgY29kZS5cblxuQWxyaWdodCwgdGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBsb29rcyBsaWtlIHRoaXMgbm93OlxuXG5gYGBjXG4tXHRpZiAoZXZlbnQtXHUwMDNlcHJvZyBcdTAwMjZcdTAwMjYgZXZlbnQtXHUwMDNlcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcdTAwMjZcdTAwMjZcbitcdHByb2cgPSBSRUFEX09OQ0UoZXZlbnQtXHUwMDNlcHJvZyk7XG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcdTAwMjZcdTAwMjZcbmBgYFxuXG5ZZXMsIHRoaXMgY29uZmlybXMgdGhlIGluaXRpYWwgaHlwb3RoZXNpcy4gVGhlIG9sZCBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIGEgVE9DVE9VIChUaW1lLW9mLUNoZWNrLXRvLVRpbWUtb2YtVXNlKSByYWNlLiBUaGUgY29kZSBjaGVja2VkIGlmIGBldmVudC1cdTAwM2Vwcm9nYCB3YXMgbm9uLU5VTEwsIGFuZCB0aGVuIGRlcmVmZXJlbmNlZCBpdC4gYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYCBjb3VsZCBoYXZlIHBvdGVudGlhbGx5IHNldCB0aGUgYGV2ZW50LVx1MDAzZXByb2dgIHBvaW50ZXIgdG8gTlVMTCAqYmV0d2VlbiogdGhlIGNoZWNrIGFuZCB0aGUgZGVyZWZlcmVuY2UsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgZXZlbiBhIHVzZS1hZnRlci1mcmVlLCBpZiBhbm90aGVyIHRocmVhZCB3YXMgcXVpY2sgZW5vdWdoLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWcsIGFuZCBgUkVBRF9PTkNFYCBlbnN1cmVzIGEgc2luZ2xlIGF0b21pYyByZWFkIG9mIHRoZSB2YWx1ZS5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyByb2NrIHNvbGlkLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZWxldmFudCBoZXJlLiBUaGlzIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3kuIEtBU0FOIG9yIHBvdGVudGlhbGx5IGEgc3RhbmRhcmQgY3Jhc2ggd2lsbCBjYXRjaCB0aGlzLlxuXG5Pa2F5LCBsZXQncyBkb2N1bWVudCB0aGUgcmVhc29uaW5nIGNsZWFybHkuIFRoZSBwYXRjaCByZXNvbHZlcyBhIGRhdGEgcmFjZS9OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBvbiBgZXZlbnQtXHUwMDNlcHJvZ2AuIFRoaXMgcHJvdGVjdHMgdGhlIHJlYWQvd3JpdGUgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi4gVGhlIHByb2JsZW0gaXMgYSBjbGFzc2ljIHJhY2UgYW5kIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIHRoZSBjb3JyZWN0IG1lbW9yeSBzYW5pdGl6ZXJzIGFyZSBLQVNBTiBhbmQvb3IgS0NTQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTAsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6NTcuMDY1MzMwMjU3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAoZGF0YSByYWNlKSB0aGF0IGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUuIFNwZWNpZmljYWxseSwgYGV2ZW50LVxcdTAwM2Vwcm9nYCB3YXMgYmVpbmcgY2hlY2tlZCBmb3Igbm9uLU5VTEwgYW5kIHRoZW4gZGVyZWZlcmVuY2VkIGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coKWAsIHdoaWxlIGl0IGNvdWxkIGJlIGNvbmN1cnJlbnRseSBzZXQgdG8gTlVMTCBpbiBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2coKWAuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFJFQURfT05DRSgpYCBhbmQgYFdSSVRFX09OQ0UoKWAgZW5zdXJlcyB0aGUgcG9pbnRlciBpcyBmZXRjaGVkIG9ubHkgb25jZSwgcHJldmVudGluZyB0aGUgcmFjZS5cXG5cXG5UaGlzIHR5cGUgb2YgYnVnIChkYXRhIHJhY2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSkgaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBLQ1NBTiwgYW5kIGdlbmVyYWwga2VybmVsIGNyYXNoIHJlcG9ydHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGFzIEtNU0FOIHNwZWNpZmljYWxseSB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChkYXRhIHJhY2UpIHRoYXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZS4gU3BlY2lmaWNhbGx5LCBgZXZlbnQtXFx1MDAzZXByb2dgIHdhcyBiZWluZyBjaGVja2VkIGZvciBub24tTlVMTCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvdygpYCwgd2hpbGUgaXQgY291bGQgYmUgY29uY3VycmVudGx5IHNldCB0byBOVUxMIGluIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZygpYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFKClgIGFuZCBgV1JJVEVfT05DRSgpYCBlbnN1cmVzIHRoZSBwb2ludGVyIGlzIGZldGNoZWQgb25seSBvbmNlLCBwcmV2ZW50aW5nIHRoZSByYWNlLlxcblxcblRoaXMgdHlwZSBvZiBidWcgKGRhdGEgcmFjZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlKSBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgZ2VuZXJhbCBrZXJuZWwgY3Jhc2ggcmVwb3J0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYXMgS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4z4rq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 00:05:40 +0000 UTC FinishedAt: 2026-08-12 00:55:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PERF_EVENTS", "BPF_SYSCALL", "KPROBES", "KPROBE_EVENTS", "BPF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PERF_EVENTS", "BPF_SYSCALL", "KPROBES", "KPROBE_EVENTS", "BPF_EVENTS" ], "series_id": "6ab9263c-7142-4ecc-b0bb-5233a3846bad" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "perf_event_overflow", "perf_event_detach_bpf_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVyZl9ldmVudF9vdmVyZmxvdyYjMzQ7LAogICAgJiMzNDtwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChkYXRhIHJhY2UpIHRoYXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZS4gU3BlY2lmaWNhbGx5LCBgZXZlbnQtXHUwMDNlcHJvZ2Agd2FzIGJlaW5nIGNoZWNrZWQgZm9yIG5vbi1OVUxMIGFuZCB0aGVuIGRlcmVmZXJlbmNlZCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93KClgLCB3aGlsZSBpdCBjb3VsZCBiZSBjb25jdXJyZW50bHkgc2V0IHRvIE5VTEwgaW4gYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKClgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBSRUFEX09OQ0UoKWAgYW5kIGBXUklURV9PTkNFKClgIGVuc3VyZXMgdGhlIHBvaW50ZXIgaXMgZmV0Y2hlZCBvbmx5IG9uY2UsIHByZXZlbnRpbmcgdGhlIHJhY2UuXG5cblRoaXMgdHlwZSBvZiBidWcgKGRhdGEgcmFjZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlKSBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgZ2VuZXJhbCBrZXJuZWwgY3Jhc2ggcmVwb3J0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYXMgS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIG9uIGBldmVudC1cdTAwM2Vwcm9nYCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYCBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVnIGluIHRoZSBjb3JlIHBlcmYvYnBmIHN1YnN5c3RlbS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTllODhmOTFiNjk1ZjRmYzA0ZWQ5ODZiZjQ2Zjg5ZWZkZTg0M2RlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAwOjU0OjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvY29yZS5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmNcbmluZGV4IGJhNWJkNmE3OGZlN2IuLjlkOWM1NDc3NzcyZTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V2ZW50cy9jb3JlLmNcbkBAIC0xMDc1Myw2ICYjNDM7MTA3NTMsNyBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4ge1xuIFx0aW50IGV2ZW50cyA9IGF0b21pY19yZWFkKFx1MDAyNmV2ZW50LVx1MDAzZWV2ZW50X2xpbWl0KTtcbiBcdGludCByZXQgPSAwO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcbiBcdC8qXG4gXHQgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydFxuQEAgLTEwNzY2LDcgJiM0MzsxMDc2Nyw4IEBAIHN0YXRpYyBpbnQgX19wZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbiBcdGlmIChldmVudC1cdTAwM2VhdHRyLmF1eF9wYXVzZSlcbiBcdFx0cGVyZl9ldmVudF9hdXhfcGF1c2UoZXZlbnQtXHUwMDNlYXV4X2V2ZW50LCB0cnVlKTtcbiBcbi1cdGlmIChldmVudC1cdTAwM2Vwcm9nIFx1MDAyNlx1MDAyNiBldmVudC1cdTAwM2Vwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UIFx1MDAyNlx1MDAyNlxuJiM0MztcdHByb2cgPSBSRUFEX09OQ0UoZXZlbnQtXHUwMDNlcHJvZyk7XG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWJwZl9vdmVyZmxvd19oYW5kbGVyKGV2ZW50LCBkYXRhLCByZWdzKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5pbmRleCA3NTQ5NWE1YzM1MDc5Li5lZTYxZGM3NjAwNDUzIDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbkBAIC0yMDE4LDcgJiM0MzsyMDE4LDcgQEAgdm9pZCBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4gXG4gcHV0OlxuIFx0cHJvZyA9IGV2ZW50LVx1MDAzZXByb2c7XG4tXHRldmVudC1cdTAwM2Vwcm9nID0gTlVMTDtcbiYjNDM7XHRXUklURV9PTkNFKGV2ZW50LVx1MDAzZXByb2csIE5VTEwpO1xuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZicGZfZXZlbnRfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O0tQUk9CRV9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BlcmZfZXZlbnRfb3ZlcmZsb3cmIzM0OywKICAgICYjMzQ7cGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYGV2ZW50LVx1MDAzZXByb2dgIGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGJ5IHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgaW4gdGhlIGNvcmUgcGVyZi9icGYgc3Vic3lzdGVtLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOWU4OGY5MWI2OTVmNGZjMDRlZDk4NmJmNDZmODllZmRlODQzZGU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDA6NTQ6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IGJhNWJkNmE3OGZlN2IuLjlkOWM1NDc3NzcyZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC0xMDc1Myw2ICYjNDM7MTA3NTMsNyBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiB7CiAJaW50IGV2ZW50cyA9IGF0b21pY19yZWFkKCZhbXA7ZXZlbnQtJmd0O2V2ZW50X2xpbWl0KTsKIAlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IGJwZl9wcm9nICpwcm9nOwogCiAJLyoKIAkgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydApAQCAtMTA3NjYsNyAmIzQzOzEwNzY3LDggQEAgc3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCWlmIChldmVudC0mZ3Q7YXR0ci5hdXhfcGF1c2UpCiAJCXBlcmZfZXZlbnRfYXV4X3BhdXNlKGV2ZW50LSZndDthdXhfZXZlbnQsIHRydWUpOwogCi0JaWYgKGV2ZW50LSZndDtwcm9nICZhbXA7JmFtcDsgZXZlbnQtJmd0O3Byb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UICZhbXA7JmFtcDsKJiM0MzsJcHJvZyA9IFJFQURfT05DRShldmVudC0mZ3Q7cHJvZyk7CiYjNDM7CWlmIChwcm9nICZhbXA7JmFtcDsgcHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgJmFtcDsmYW1wOwogCSAgICAhYnBmX292ZXJmbG93X2hhbmRsZXIoZXZlbnQsIGRhdGEsIHJlZ3MpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDc1NDk1YTVjMzUwNzkuLmVlNjFkYzc2MDA0NTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTIwMTgsNyAmIzQzOzIwMTgsNyBAQCB2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIAogcHV0OgogCXByb2cgPSBldmVudC0mZ3Q7cHJvZzsKLQlldmVudC0mZ3Q7cHJvZyA9IE5VTEw7CiYjNDM7CVdSSVRFX09OQ0UoZXZlbnQtJmd0O3Byb2csIE5VTEwpOwogCiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7YnBmX2V2ZW50X211dGV4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYW5kIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgYWNjZXNzLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGRpcmVjdCBhY2Nlc3NlcyB0byBgZXZlbnQtJmd0O3Byb2dgIHdpdGggYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBkZWZpbml0ZWx5IHNtZWxscyBsaWtlIGEgcmFjZSBjb25kaXRpb24gZml4LiBHb29kLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2Agd2l0aGluIHRoZSBjb3JlIHBlcmYgZXZlbnQgaGFuZGxpbmcsIGFuZCB0aGVuIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AsIHdoaWNoIGhhbmRsZXMgQlBGIHByb2dyYW0gZGV0YWNobWVudCwgc28gd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIGZ1bmN0aW9ucy4gQm90aCBvZiB0aGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIENoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uLCBga2VybmVsL2V2ZW50cy9jb3JlLmNgIGlzIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGlmIGBDT05GSUdfUEVSRl9FVkVOVFNgIGlzIGVuYWJsZWQsIGFzIGV4cGVjdGVkLiBBbmQsIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgJiMzOTtzIHByZXNlbmNlIGRlcGVuZHMgb24gYENPTkZJR19CUEZfRVZFTlRTYC4gTm93LCBsZXQgbWUganVzdCBkb3VibGUgY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIGFnYWluc3QgdGhlaXIgcmVzcGVjdGl2ZSBNYWtlZmlsZXMgdG8gYmUgc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE5NTE9aW50IHBlcmZfZXZlbnRfYXR0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5NC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxOTk1OnZvaWQgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE5OTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipMb29raW5nIGZvciB0aGUgQlBGIFRyYWNlIE9iamVjdCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgYnBmX3RyYWNlLm9gIGlzIGJ1aWx0LiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBga2VybmVsL3RyYWNlYCBkaXJlY3RvcnksIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdHJhY2luZyBmdW5jdGlvbmFsaXR5IHR5cGljYWxseSByZXNpZGVzLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGtlcm5lbC90cmFjZS9NYWtlZmlsZWAgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBjb21tYW5kIGNlbnRlciBmb3IgYnVpbGRpbmcgdHJhY2UtcmVsYXRlZCBvYmplY3QgZmlsZXMsIGFuZCB0aGlzIHNob3VsZCBnaXZlIG1lIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgSSBuZWVkLiBIb3BlZnVsbHksIHRoaXMgTWFrZWZpbGUgaGFzIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBpZGVudGlmeSBvciBidWlsZCBgYnBmX3RyYWNlLm9gIHdpdGhpbiB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSAmIzQzOz0gdHJhY2VfZXZlbnRzX3VzZXIub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgJiM0Mzs9IGJwZl90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSAmIzQzOz0gdHJhY2Vfa3Byb2JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzExCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIEV2ZW50IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGIGV2ZW50cy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGF0IGBDT05GSUdfQlBGX0VWRU5UU2AgaXMgZ29pbmcgdG8gYmUgYSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIG9iamVjdCBmaWxlIHJlbGF0ZWQgdG8gdGhlIGNvcmUgb2YgdGhpcyBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlIGBrZXJuZWwvZXZlbnRzL01ha2VmaWxlYC4gSSYjMzk7bGwgZ28gdGFrZSBhIGxvb2sgdGhlcmUgdG8gc2VlIGlmIEkgY2FuIGZpbmQgYGNvcmUub2AuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29yZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9ldmVudHMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5rZXJuZWwvZXZlbnRzL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vIHJpbmdfYnVmZmVyLm8gY2FsbGNoYWluLm9cbmtlcm5lbC9ldmVudHMvTWFrZWZpbGUtMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBga2VybmVsL2V2ZW50cy9NYWtlZmlsZWAgSW5jbHVzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYnVpbGQgc3lzdGVtLCBhbmQgdGhlIGBrZXJuZWwvZXZlbnRzL01ha2VmaWxlYCBpcyBvbmx5IGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzIGlmIGBDT05GSUdfUEVSRl9FVkVOVFNgIGlzIHNldC4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHN0YW5kYXJkIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBiYXNlZCBvbiBhIEtjb25maWcgdmFyaWFibGUuIFRoaXMgdGVsbHMgbWUgdGhhdCB0aGUgZW50aXJlIHByb2ZpbGluZyBzdWJzeXN0ZW0gaXMgbW9kdWxhcml6ZWQuIElmIHBlcmZvcm1hbmNlIGV2ZW50IGNvbGxlY3Rpb24gaXNuJiMzOTt0IGRlc2lyZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgYXNzb2NpYXRlZCBjb2RlIGFuZCBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIHNpbXBseSBza2lwcGVkLiBUaGlzIGtlZXBzIHRoZSBrZXJuZWwgbGVhbiBhbmQgYXZvaWRzIHVubmVjZXNzYXJ5IGJsb2F0IGZvciBzeXN0ZW1zIHdoZXJlIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBpc24mIzM5O3QgYSBwcmlvcml0eS4gSXQmIzM5O3MgYSBjbGVhbiB3YXkgdG8gbWFuYWdlIGZlYXR1cmUgZW5hYmxlbWVudCBhbmQgaXMgZXhhY3RseSB3aGF0IEkgd291bGQgZXhwZWN0IGluIGEgd2VsbC1kZXNpZ25lZCBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTtkIG5lZWQgdG8gZGl2ZSBkZWVwZXIsIG9mIGNvdXJzZSwgdG8gc2VlIGhvdyB0aGUgaW5jbHVzaW9uIGFmZmVjdHMgZGVwZW5kZW5jaWVzIGFuZCBsaW5rIG9yZGVyLCBidXQgdGhlIGJhc2ljIHByaW5jaXBsZSBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIHRoZSBhdWRpZW5jZSBpcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3Mg4oCTIHRoZSBga2VybmVsL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBjb21tYW5kIGNlbnRlciwgdGhlIGNlbnRyYWwgb3JjaGVzdHJhdG9yIGZvciBob3cgZXZlcnl0aGluZyBnZXRzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBhc3NlbWJsZWQuIEl0JiMzOTtzIHdoZXJlIEkgY2FuIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIHJ1bGVzLCBhbmQgdWx0aW1hdGVseSwgdGhlIGZsb3cgb2YgdGhlIGVudGlyZSBrZXJuZWwgYnVpbGQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcHJvamVjdCYjMzk7cyBvcmdhbml6ZWQgYW5kIGNvbnRyb2xsZWQuIEkga25vdyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmNsdWRlIHBhdGhzLCBjb21waWxlciBmbGFncywgb2JqZWN0IGZpbGUgbG9jYXRpb25zLCBsaW5raW5nIGNvbW1hbmRzLCBhbmQgdGFyZ2V0IGRlZmluaXRpb25zLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkaWFnbm9zaW5nIGFueSBidWlsZC1yZWxhdGVkIGlzc3VlcyBvciB1bmRlcnN0YW5kaW5nIHRoZSBwcm9qZWN0JiMzOTtzIHN0cnVjdHVyZSBmcm9tIGEgaGlnaCBsZXZlbC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmVudHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL01ha2VmaWxlPTI2PWVuZGlmXG5rZXJuZWwvTWFrZWZpbGUtMjctXG5rZXJuZWwvTWFrZWZpbGU6Mjg6IyBQcmV2ZW50cyBmbGlja2VyIG9mIHVuaW50ZXJlc3RpbmcgX19kb19zb2Z0aXJxKCkvX19sb2NhbF9iaF9kaXNhYmxlX2lwKClcbmtlcm5lbC9NYWtlZmlsZS0yOS0jIGluIGNvdmVyYWdlIHRyYWNlcy5cbi0tXG5rZXJuZWwvTWFrZWZpbGU9MTI4PW9iai0kKENPTkZJR19DRkkpICYjNDM7PSBjZmkub1xua2VybmVsL01ha2VmaWxlLTEyOS1cbmtlcm5lbC9NYWtlZmlsZToxMzA6b2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKSAmIzQzOz0gZXZlbnRzL1xua2VybmVsL01ha2VmaWxlLTEzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgUGVyZm9ybWFuY2UgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgdGhpcyBkb3duLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBhaW1pbmcgZm9yIHJvYnVzdCBwZXJmb3JtYW5jZSBhbmFseXNpcyBjYXBhYmlsaXRpZXMgaGVyZSwgc28gdGhlIGltbWVkaWF0ZSBuZWVkIGlzIGZvciBgQ09ORklHX1BFUkZfRVZFTlRTYC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIHdpdGggdGhlIGluY3JlYXNpbmcgdXNlIG9mIEJQRiwgSSYjMzk7bSB0aGlua2luZyB3ZSBhbHNvIHdhbnQgYENPTkZJR19CUEZfRVZFTlRTYC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYW5kIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfQlBGX0VWRU5UU2AuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgZ3JvdW5kd29yayBsYWlkIGJlZm9yZSBlbmFibGluZyBpdC4gR290dGEgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBuZWVkZWQgZnVuY3Rpb25hbGl0eSB0byBnZXQgdGhpcyB3b3JraW5nIHJpZ2h0LCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBmb2N1cyBteSBhdHRlbnRpb24gcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0VWRU5UUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz04Mzk9Y29uZmlnIEVQUk9CRV9FVkVOVFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4NTM6Y29uZmlnIEJQRl9FVkVOVFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRl9FVkVOVFMgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIGhvdyBgQlBGX0VWRU5UU2AgaXMgY29uZmlndXJlZCwgd2hpY2ggdW5kb3VidGVkbHkgbWVhbnMgbG9va2luZyBpbnRvIGl0cyBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlOiBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHR5cGljYWxseSBkZWZpbmVkLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdHJhY2luZyBhbmQgaW5zdHJ1bWVudGF0aW9uLCBhbmQgYEJQRl9FVkVOVFNgIHNjcmVhbXMgb2YgZUJQRi4gSSYjMzk7ZCBiZSB3aWxsaW5nIHRvIGJldCBpdCYjMzk7cyBpbiB0aGVyZSwgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgc2VhcmNoLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBpbW1lZGlhdGVseSByZXZlYWwgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGlmIGl0IGhhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG9wdGlvbnMsIGFuZCBtYXliZSBldmVuIGEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCBpdCBkb2VzLiBUaW1lIHRvIGdvIGh1bnRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxuIDg1MTpcdFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXG4gODUyOlx0XG4gODUzOlx0Y29uZmlnIEJQRl9FVkVOVFNcbiA4NTQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiA4NTU6XHRcdGRlcGVuZHMgb24gKEtQUk9CRV9FVkVOVFMgfHwgVVBST0JFX0VWRU5UUykgXHUwMDI2XHUwMDI2IFBFUkZfRVZFTlRTXG4gODU2Olx0XHRib29sXG4gODU3Olx0XHRkZWZhdWx0IHlcbiA4NTg6XHRcdGhlbHBcbiA4NTk6XHRcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXG4gODYwOlx0XHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxuIDg2MTpcdFxuIDg2MjpcdGNvbmZpZyBEWU5BTUlDX0VWRU5UU1xuIDg2MzpcdFx0ZGVmX2Jvb2wgblxuIDg2NDpcdFxuIDg2NTpcdGNvbmZpZyBQUk9CRV9FVkVOVFNcbiA4NjY6XHRcdGRlZl9ib29sIG5cbiA4Njc6XHRcbiA4Njg6XHRjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxuIDg2OTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIHByb2dyYW1zIHRvIG92ZXJyaWRlIGEga3Byb2JlZCBmdW5jdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBFdmVudHMgQ29uZmlndXJhdGlvbiBhbmQgYSBDcml0aWNhbCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBkZXBlbmRlbmN5OiBgQlBGX0VWRU5UU2AgaXMgZGVwZW5kZW50IG9uIGBCUEZfU1lTQ0FMTGAsIGVpdGhlciBgS1BST0JFX0VWRU5UU2Agb3IgYFVQUk9CRV9FVkVOVFNgLCBhbmQgYFBFUkZfRVZFTlRTYC4gU2luY2UgYEJQRl9FVkVOVFNgIGlzIHNldCB0byAmIzM0O3kmIzM0OyBieSBkZWZhdWx0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIG90aGVyIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLCBhcmUgYWxzbyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSBjb25maWd1cmF0aW9uIGNoZWNrLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgaG93ZXZlciwgaXMgYSBmdW5jdGlvbmFsIGJ1ZyBmaXguIEl0IGFkZHJlc3NlcyBhIGRhdGEgcmFjZSBpc3N1ZSByZWxhdGVkIHRvIGBldmVudC0mZ3Q7cHJvZ2Agd2l0aGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBUaGlzIGlzIGEgbm9uLXRyaXZpYWwgZml4OyBmaXhpbmcgZGF0YSByYWNlcyBpcyBhbHdheXMgaW1wb3J0YW50IGZvciBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBJdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBCUEYgY29kZSBwYXRoLgoKJiMzNDtXb3J0aEZ1enppbmc6IHRydWUmIzM0OyAtIEkgY29uY3VyLiBUaGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZyBhZnRlciB0aGlzIGZpeCBpcyBhcHBsaWVkLiBUaG9zZSBmdW5jdGlvbnMgYXJlIG5vdyBsZXNzIHByb25lIHRvIGRhdGEgcmFjZXMsIGFuZCBhcmUgbm93IHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHBvaW50cyBoZXJlIGFyZSBjbGVhcmx5IGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBJIG5lZWQgdG8gZGlnIGludG8gdGhvc2Ugcm91dGluZXMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHJhY2UgY29uZGl0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGFmZmVjdHMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgY29uZmxpY3QsIHNvIGl0JiMzOTtzIGEgZGV0YWlsIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19wZXJmX2V2ZW50X292ZXJmbG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9jb3JlLmM9MTA3NDE9c3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfZnJlZV9icGZfaGFuZGxlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA3NDktXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDc1MDpzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDc1MS1cdFx0XHRcdCBpbnQgdGhyb3R0bGUsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jPTEwODQ0PWludCBwZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDg1NC1cbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwODU1Olx0cmV0dXJuIF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgZGF0YSwgcmVncyk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDg1Ni19XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4OTk9c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG92ZXJmbG93LFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTEyLVx0Zm9yICg7IG92ZXJmbG93OyBvdmVyZmxvdy0tKSB7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDkxMzpcdFx0aWYgKF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgdGhyb3R0bGUsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDkxNC1cdFx0XHRcdFx0ICAgIGRhdGEsIHJlZ3MpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4OTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIE92ZXJmbG93IEhhbmRsZXIgU2NvcGUqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgb3ZlcmZsb3cgc2l0dWF0aW9uLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgZnVuY3Rpb24sIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBvdXIgZm9jdXMuIFNpbmNlIHRoYXQmIzM5O3MgdGhlIGJhc2Ugb2YgaXQsIHdlIHNob3VsZCBkaXJlY3Qgb3VyIGF0dGVudGlvbiB0byBpdHMgbm9uLXN0YXRpYyBjb3VudGVycGFydHMsIHRoZSBsaWtlbHkgcHVibGljIGVudHJ5IHBvaW50cy4gU28sIGxldCYjMzk7cyBwcmlvcml0aXplIGludmVzdGlnYXRpbmcgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9zd2V2ZW50X292ZXJmbG93YCBhcyB0aG9zZSBhcmUgdGhlIGV4dGVybmFsIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGdldCBjYWxsZWQuIEJ1dCBob2xkIG9uLCBiZWZvcmUgd2UgZ28gdG9vIGZhciBkb3duIHRoYXQgcGF0aC4uLml0IHdvdWxkIGJlIHBydWRlbnQgdG8gcXVpY2tseSBjb25maXJtIGlmIGBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3dgIGlzIGFsc28gc3RhdGljLiBJZiBpdCBpcywgdGhhdCB3aWxsIHNpZ25pZmljYW50bHkgYWx0ZXIgb3VyIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX3N3ZXZlbnRfb3ZlcmZsb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYz0xMDg3Nj11NjQgcGVyZl9zd2V2ZW50X3NldF9wZXJpb2Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODk4LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4OTk6c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG92ZXJmbG93LFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MDAtXHRcdFx0XHQgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA5MjU9c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5yLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTYzLVx0XHRkYXRhLVx1MDAzZXBlcmlvZCA9IG5yO1xua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5NjQ6XHRcdHJldHVybiBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsIGRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5NjUtXHR9IGVsc2Vcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk2OC1cdGlmIChuciA9PSAxIFx1MDAyNlx1MDAyNiBod2MtXHUwMDNlc2FtcGxlX3BlcmlvZCA9PSAxIFx1MDAyNlx1MDAyNiAhZXZlbnQtXHUwMDNlYXR0ci5mcmVxKVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5Njk6XHRcdHJldHVybiBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsIGRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5NzAtXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5NzMtXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDk3NDpcdHBlcmZfc3dldmVudF9vdmVyZmxvdyhldmVudCwgMCwgZGF0YSwgcmVncyk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk3NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBhIFNvZnR3YXJlIEV2ZW50IE92ZXJmbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3dgIHZhcmlhYmxlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGltcG9ydGFudCBjb250ZXh0LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIG92ZXJmbG93LiBTaW5jZSBpdCYjMzk7cyByZWxhdGVkIHRvIHNvZnR3YXJlIGV2ZW50cywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhhbWluZSBgcGVyZl9zd2V2ZW50X2V2ZW50YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0IGluIHRoaXMgc2NlbmFyaW8sIGlmIGl0JiMzOTtzIG92ZXJmbG93aW5nLiBJdCBzaG91bGQgdGVsbCBtZSB3aGVyZSB0aGluZ3MgYXJlIGdvaW5nIHNpZGV3YXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX3N3ZXZlbnRfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZXZlbnRzL2NvcmUuYz0xMDg5OT1zdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgb3ZlcmZsb3csXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MjQtXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDkyNTpzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgbnIsXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDkyNi1cdFx0XHQgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTEwNjA9c3RhdGljIHZvaWQgZG9fcGVyZl9zd19ldmVudChlbnVtIHBlcmZfdHlwZV9pZCB0eXBlLCB1MzIgZXZlbnRfaWQsXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTEwNzUtXHRcdGlmIChwZXJmX3N3ZXZlbnRfbWF0Y2goZXZlbnQsIHR5cGUsIGV2ZW50X2lkLCBkYXRhLCByZWdzKSlcbmtlcm5lbC9ldmVudHMvY29yZS5jOjExMDc2Olx0XHRcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgbnIsIGRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTEwNzctXHR9XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTE0MTA9c3RhdGljIHZvaWQgX19wZXJmX3RwX2V2ZW50X3RhcmdldF90YXNrKHU2NCBjb3VudCwgdm9pZCAqcmVjb3JkLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTExNDI1LVx0XHRwZXJmX3NhbXBsZV9zYXZlX3Jhd19kYXRhKGRhdGEsIGV2ZW50LCByYXcpO1xua2VybmVsL2V2ZW50cy9jb3JlLmM6MTE0MjY6XHRcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgY291bnQsIGRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE0MjctXHR9XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTE0NTM9dm9pZCBwZXJmX3RwX2V2ZW50KHUxNiBldmVudF90eXBlLCB1NjQgY291bnQsIHZvaWQgKnJlY29yZCwgaW50IGVudHJ5X3NpemUsXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE0ODUtXHRcdFx0cGVyZl9zYW1wbGVfc2F2ZV9yYXdfZGF0YShcdTAwMjZkYXRhLCBldmVudCwgXHUwMDI2cmF3KTtcbmtlcm5lbC9ldmVudHMvY29yZS5jOjExNDg2Olx0XHRcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgY291bnQsIFx1MDAyNmRhdGEsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE0ODctXHRcdH1cbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMTgwMT12b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTExODEzLVx0aWYgKCFicC1cdTAwM2Vody5zdGF0ZSBcdTAwMjZcdTAwMjYgIXBlcmZfZXhjbHVkZV9ldmVudChicCwgcmVncykpXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMTgxNDpcdFx0cGVyZl9zd2V2ZW50X2V2ZW50KGJwLCAxLCBcdTAwMjZzYW1wbGUsIHJlZ3MpO1xua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE4MTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzczCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyBQZXJmIEV2ZW50IEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHBlcmZfc3dldmVudF9ldmVudGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbWVhbnMgdGhpcyBmdW5jdGlvbiBpcyAqb25seSogdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbi4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJpdmF0ZSwgYW5kIEkgd291bGRuJiMzOTt0IGV4cGVjdCB0byBpbnRlcmFjdCB3aXRoIGl0IGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlLgoKTm93LCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uOiBpZiBgcGVyZl9ldmVudF9vdmVyZmxvd2AgKmlzbiYjMzk7dCogc3RhdGljLCB0aGVuIGl0JiMzOTtzIGNsZWFybHkgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLiBUaGlzIG1ha2VzIHNlbnNlOyBhbiBvdmVyZmxvdyBoYW5kbGVyIG5lZWRzIHRvIGJlIHNvbWV0aGluZyB0aGF0IHRoZSBzeXN0ZW0gY2FuIGNhbGwgaW50byBpbiByZXNwb25zZSB0byBldmVudHMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGV4cG9ydGVkIHRvIGRlYWwgd2l0aCB0aGUgYWN0dWFsIG92ZXJmbG93IGl0c2VsZi4KCkZpbmFsbHksIEkmIzM5O20gbm90aW5nIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgdGhhdCBmdW5jdGlvbiBpcyBkZWNsYXJlZC4gSXMgaXQgYWxzbyBleHBvcnRlZD8gR2l2ZW4gdGhlIG5hdHVyZSBvZiBCUEYgcHJvZ3JhbSBkZXRhY2htZW50LCB3aGljaCBjb3VsZCBoYXBwZW4gZnJvbSBhIHZhcmlldHkgb2YgcGxhY2VzLCBJIHdvdWxkIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGFsc28gYmUgbm9uLXN0YXRpYyBhbmQgYXZhaWxhYmxlIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRvIGNhbGwuIEl0IG1pZ2h0IGV2ZW4gYmUgcGFydCBvZiB0aGUgYHBlcmZfZXZlbnRfb3BlbmAgaW5mcmFzdHJ1Y3R1cmUsIGFzIGEgcHJvZ3JhbSB3b3VsZCBuZWVkIHRvIGJlIGRldGFjaGVkIGFzIHBhcnQgb2YgYSBjbG9zdXJlIG9wZXJhdGlvbiwgYSBwcm9ncmFtIGNvdWxkIGJlIHJlbW92ZWQgYXQgd2lsbCBieSBhIHByaXZpbGVnZWQgb3BlcmF0aW9uLCBvciBtYXliZSBiZSBhdXRvbWF0aWNhbGx5IGRldGFjaGVkIGZvciBzZWN1cml0eSByZWFzb25zLgoKRXNzZW50aWFsbHksIEkmIzM5O20gbWFwcGluZyBvdXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcGVyZiBzdWJzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyIGFuZCB0aGUga2VybmVsIGF0IGxhcmdlLiBUaGUgc3RhdGljL25vbi1zdGF0aWMgZGlzdGluY3Rpb24gaXMgYSBrZXkgaW5kaWNhdG9yIG9mIGRlc2lnbiBpbnRlbnQgYW5kIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTk1MT1pbnQgcGVyZl9ldmVudF9hdHRhY2hfYnBmX3Byb2coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xOTk0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE5OTU6dm9pZCBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MzQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gUGVyZiBFdmVudCBEZXRhY2htZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBJdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IGNoZWNrIGBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZ2AganVzdCBpbiBjYXNlLCBidXQgdGhlIGFjdHVhbCBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBkZXRhY2ggZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzLgoKRm9yIHN5bWJvbCB0YXJnZXRpbmcsIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwga2V5IGluIG9uOgoKKiAgIGBwZXJmX2V2ZW50X292ZXJmbG93YAoqICAgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYAoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMuIFRoZSBkb2N1bWVudCBtZW50aW9ucyBhIGZldzoKCiogICBgUEVSRl9FVkVOVFNgCiogICBgQlBGX0VWRU5UU2AKKiAgIGBCUEZfU1lTQ0FMTGAKKiAgIGBLUFJPQkVfRVZFTlRTYAoKSSByZWNhbGwgc2VlaW5nIGBCUEZfRVZFTlRTYCBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgLCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGEgdmFsaWQgY29uZmlnIG9wdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgUEVSRl9FVkVOVFNgIGlzIGFsc28gY29uZmlndXJlZC4gVGhhdCBpcyBhbiBpbXBvcnRhbnQgb25lLgoKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUkZfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2V2ZW50cy9LY29uZmlnPTI9bWVudSBcJiMzNDtQZXJmb3JtYW5jZSBtb25pdG9yaW5nXCYjMzQ7XG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTExLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6MTI6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1JBUExcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwvQU1EIHJhcGwgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTktXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyMDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yNy1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjI4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI5LVx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcdTAwMjZcdTAwMjYgQ1BVX1NVUF9BTURcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zNi1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjM3OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfVU5DT1JFXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O0FNRCBVbmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDctXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0ODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX0JSU1xuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmluaXQvS2NvbmZpZz0yMTQxPW1lbnUgXCYjMzQ7S2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnNcJiMzNDtcbmluaXQvS2NvbmZpZy0yMTQyLVxuaW5pdC9LY29uZmlnOjIxNDM6Y29uZmlnIFBFUkZfRVZFTlRTXG5pbml0L0tjb25maWctMjE0NC1cdGJvb2wgXCYjMzQ7S2VybmVsIHBlcmZvcm1hbmNlIGV2ZW50cyBhbmQgY291bnRlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKgoKUmlnaHQsIHNvIGBQRVJGX0VWRU5UU2AsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBoYW5naW5nIG91dCBpbiBgaW5pdC9LY29uZmlnYCwganVzdCBhcyBJIHN1c3BlY3RlZC4gTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHF1aWNrbHkgY29uZmlybSB0aGUgbG9jYXRpb25zIG9mIGEgY291cGxlIG9mIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGVyZSBgQlBGX1NZU0NBTExgIGFuZCBgS1BST0JFX0VWRU5UU2AgYXJlIHNpdHVhdGVkIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIGVuc3VyZSBhIGhvbGlzdGljIHZpZXcgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBnaXZlbiB0aGVzZSBhcmUgcmVsYXRlZCBzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE3NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLUFJPQkVfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTc3MD1jb25maWcgUFJPQkVfRVZFTlRTX0JURl9BUkdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNzgxLVxua2VybmVsL3RyYWNlL0tjb25maWc6NzgyOmNvbmZpZyBLUFJPQkVfRVZFTlRTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03ODMtXHRkZXBlbmRzIG9uIEtQUk9CRVNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04MDAtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4MDE6Y29uZmlnIEtQUk9CRV9FVkVOVFNfT05fTk9UUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctODAyLVx0Ym9vbCBcJiMzNDtEbyBOT1QgcHJvdGVjdCBub3RyYWNlIGZ1bmN0aW9uIGZyb20ga3Byb2JlIGV2ZW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQ4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZXBlbmRlbmNpZXMgYW5kIEltcGxpY2F0aW9ucyBvZiBLUFJPQkVfRVZFTlRTKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogYEtQUk9CRV9FVkVOVFNgIGlzIGluaGVyZW50bHkgcmVsaWFudCBvbiBgS1BST0JFU2AuIFRoaXMgaXNuJiMzOTt0IGdyb3VuZGJyZWFraW5nLCBidXQgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UgaGF2ZSB0byBjb25zdGFudGx5IGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYEtQUk9CRV9FVkVOVFNgIGlzIGJ1aWx0ICpvbiB0b3AqIG9mIHRoZSBLUFJPQkVTIGluZnJhc3RydWN0dXJlLCBhbmQgdW5kZXJzdGFuZGluZyB0aGF0IGJhc2UgbGF5ZXIgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBkZXZlbG9wbWVudCwgYW5kIG9wdGltaXphdGlvbi4gSXQgZGljdGF0ZXMgaG93IGZhciB3ZSBjYW4gcHVzaCB0aGluZ3MsIGFueSBsaW1pdGF0aW9ucywgYW5kIHBvc3NpYmxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBBbnkgZGlzY3Vzc2lvbiBhYm91dCBgS1BST0JFX0VWRU5UU2AgaGFzIHRvIGNpcmNsZSBiYWNrIHRvIHdoYXQgdGhlIGBLUFJPQkVTYCBmb3VuZGF0aW9uIHByb3ZpZGVzIChhbmQgcGVyaGFwcyAqZG9lc24mIzM5O3QqIHByb3ZpZGUpLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBzaGFwZXMgbXkgc3RyYXRlZ3kgZm9yIHByYWN0aWNhbGx5IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0byBob3cgSSYjMzk7ZCBhcHByb2FjaCB0cm91Ymxlc2hvb3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLUFJPQkVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMTI9Y29uZmlnIEdFTkVSSUNfRU5UUllcbi0tXG5hcmNoL0tjb25maWctMTE2LVxuYXJjaC9LY29uZmlnOjExNzpjb25maWcgS1BST0JFU1xuYXJjaC9LY29uZmlnLTExOC1cdGJvb2wgXCYjMzQ7S3Byb2Jlc1wmIzM0O1xuLS1cbmFyY2gvS2NvbmZpZz0xNjg9Y29uZmlnIE9QVFBST0JFU1xuLS1cbmFyY2gvS2NvbmZpZy0xNzItXG5hcmNoL0tjb25maWc6MTczOmNvbmZpZyBLUFJPQkVTX09OX0ZUUkFDRVxuYXJjaC9LY29uZmlnLTE3NC1cdGRlZl9ib29sIHlcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0yMzcxPWNvbmZpZyBURVNUX0lPVl9JVEVSXG4tLVxubGliL0tjb25maWcuZGVidWctMjM4Mi1cbmxpYi9LY29uZmlnLmRlYnVnOjIzODM6Y29uZmlnIEtQUk9CRVNfU0FOSVRZX1RFU1RcbmxpYi9LY29uZmlnLmRlYnVnLTIzODQtXHR0cmlzdGF0ZSBcJiMzNDtLcHJvYmVzIHNhbml0eSB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBlcmYvQlBGIERhdGEgUmFjZSBGaXgqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmaXggdGhhdCBjZW50ZXJzIGFyb3VuZCBgS1BST0JFU2AuIFJpZ2h0LCBnb3QgaXQuIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgUEVSRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgS1BST0JFU2AsIGBLUFJPQkVfRVZFTlRTYCwgYW5kIGBCUEZfRVZFTlRTYC4gU3RhbmRhcmQgc3R1ZmYgZm9yIHBlcmYgYW5kIEJQRi4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhcm91bmQgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYSBkYXRhIHJhY2Ugb24gYGV2ZW50LSZndDtwcm9nYCB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLCBmaXhlZCBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIHNvdW5kcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeCBkZWVwIGluIHRoZSBwZXJmL2JwZiBjb3JlLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IHNpbmNlIHRoZXNlIGFyZSByZWFjaGFibGUgYW5kIGxpa2VseSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZy4gSXQgbWVudGlvbnMgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgaXMgd2hlcmUgdGhlIGRhdGEgcmFjZSBleGlzdHMgYW5kIHRoZSBwcmltYXJ5IGZvY3VzIG9mIHRoZSBmaXguIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWUgdGhhdCBpcyB0aGUgdGFyZ2V0LCBpZiB0aGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGFuZCBleHBvc2VkIHRvIHRoZSB1c2VyLiBHaXZlbiB0aGF0IGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGlzIHN0YXRpYywgd2UmIzM5O3JlIGxpa2VseSB0YXJnZXRpbmcgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgLiBUaGF0IHNlZW1zIHJpZ2h0LiBBbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYCBpcyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBkaXJlY3RseSBtb2RpZmllZCwgbWFraW5nIGl0IGFub3RoZXIgdmFsaWQgZm9jdXMuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGNyaXRpY2FsIGZvciBkZXRlcm1pbmluZyBpZiBpdCBpcyBhIHRhcmdldCBmb3IgdGVzdGluZyBvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBjb25zaWRlcmF0aW9uczoKCioqRm9jdXNpbmcgb24gU2NvcGUgYW5kIEFjY2Vzc2liaWxpdHkqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlIGFuZCBpdHMgc3RydWN0dXJlLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGluZ3MgYXJlIGJlaW5nIHV0aWxpemVkLiBUaGUgaW5pdGlhbCBpbmNsaW5hdGlvbiwgdGhlIGZpcnN0IG1lbnRhbCBibGlwLCBpcyB0aGF0IGl0ICpkb2VzbiYjMzk7dCogbmVjZXNzYXJpbHkgbmVlZCB0byBiZSBleHBvcnRlZCBhcyBhIG1vZHVsZS4gVGhhdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgY29uY2VybiBhdCB0aGlzIGp1bmN0dXJlLiBNeSBmb2N1cyBpcyBtb3JlIGdyYW51bGFyIHRoYW4gdGhhdC4gV2hhdCYjMzk7cyBjcnVjaWFsIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBiZSAqbm9uLXN0YXRpYyouIFRoaXMgc2lnbmFscyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHNoaWZ0IGluIGRlc2lnbiBwaGlsb3NvcGh5LiBXZSYjMzk7cmUgc3RlZXJpbmcgYXdheSBmcm9tIGdsb2JhbCwgc2hhcmVkIHN0YXRlIGluIGZhdm9yIG9mIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBtb3JlIGVhc2lseSBtYW5hZ2VkLCB0ZXN0ZWQsIGFuZCBwb3RlbnRpYWxseSBjb21wb3NlZCB3aXRoIG90aGVyIHBpZWNlcyBvZiBmdW5jdGlvbmFsaXR5LiBTdGF0aWMgbWV0aG9kcywgd2hpbGUgc29tZXRpbWVzIGNvbnZlbmllbnQsIG9mdGVuIGludHJvZHVjZSBjb3VwbGluZyBhbmQgaGlkZGVuIGRlcGVuZGVuY2llcywgd2hpY2ggYmVjb21lIGEgbmlnaHRtYXJlIHRvIHJlZmFjdG9yIGxhdGVyLiBTbywgbWFraW5nIGl0IG5vbi1zdGF0aWMgc3VnZ2VzdHMgYSBjbGVhbmVyLCBtb3JlIG9iamVjdC1vcmllbnRlZCBhcHByb2FjaCwgZXZlbiBpZiBpdCYjMzk7cyBub3QgYmVpbmcgZXhwbGljaXRseSBtb2R1bGFyaXplZC4gVGhlIGltbWVkaWF0ZSBhZHZhbnRhZ2UgaXMgY29udHJvbCBhbmQgdGhlIGFiaWxpdHkgdG8gaW5zdGFudGlhdGUsIG1vZGlmeSwgYW5kIHBhc3MgYXJvdW5kIHRoZSByZWxldmFudCBvYmplY3RzLiBUaGlzIG9wZW5zIHVwIHBvc3NpYmlsaXRpZXMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFuZCBvdGhlciBpbXBvcnRhbnQgdGVjaG5pcXVlcyB0byByZWR1Y2UgYW55IGtpbmQgb2YgdGlnaHQgY291cGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xOTUxPWludCBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE5OTQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTk5NTp2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xOTk2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEJlaGF2aW9yKioKCkFscmlnaHQsIHRoZSBrZXkgaXMgdGhhdCB0aGlzIGlzbiYjMzk7dCBzdGF0aWMuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIFNpbmNlIHRoZSBiZWhhdmlvciBpcyBsaW5rZWQgdG8gcGVyZm9ybWFuY2UgZXZlbnRzLCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIHBlcmZvcm1hbmNlIGV2ZW50IGluZnJhc3RydWN0dXJlLiBUaGUgbW9zdCBsaWtlbHkgYXJlYSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUsIGlzIHRoZSBvdmVyZmxvdyBoYW5kbGluZy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBqdW1wIHJpZ2h0IGludG8gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBwZXJmX2V2ZW50X292ZXJmbG93YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgcGxhY2Ugd2hlcmUgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHlpZWxkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyZl9ldmVudF9vdmVyZmxvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9ldmVudHMvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9ldmVudHMvY29yZS5jPTEwNzQxPXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfYnBmX2hhbmRsZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwNzQ5LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA3NTA6c3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA3NTEtXHRcdFx0XHQgaW50IHRocm90dGxlLCBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDg0My1cbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwODQ0OmludCBwZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODQ1LVx0XHRcdHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODU0LVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4NTU6XHRyZXR1cm4gX19wZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCBkYXRhLCByZWdzKTtcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODU2LX1cbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMDg5OT1zdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgb3ZlcmZsb3csXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTItXHRmb3IgKDsgb3ZlcmZsb3c7IG92ZXJmbG93LS0pIHtcbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwOTEzOlx0XHRpZiAoX19wZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCB0aHJvdHRsZSxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTE0LVx0XHRcdFx0XHQgICAgZGF0YSwgcmVncykpIHtcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMjI1ND1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGVyZl9zd2V2ZW50X2hydGltZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTIyNzQtXHRcdGlmICghKGV2ZW50LVx1MDAzZWF0dHIuZXhjbHVkZV9pZGxlIFx1MDAyNlx1MDAyNiBpc19pZGxlX3Rhc2soY3VycmVudCkpKVxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTIyNzU6XHRcdFx0aWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIFx1MDAyNmRhdGEsIHJlZ3MpKVxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTIyNzYtXHRcdFx0XHRyZXQgPSBIUlRJTUVSX05PUkVTVEFSVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjYKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRoaW5raW5nIFRocm91Z2ggYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBSZXN1bHQgU2V0dGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgLiBIbW0sIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCB3aGF0IGRvZXMgdGhhdCBpbXBseSBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gSXQgc3VnZ2VzdHMgaXQgaGFzIGJyb2FkZXIgdmlzaWJpbGl0eSwgd2hpY2ggbWlnaHQgaW1wYWN0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCwgcG90ZW50aWFsbHksIHRocmVhZCBzYWZldHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgbm9uLXN0YXRpYyBuYXR1cmUgZmlybWx5IGluIG1pbmQgYXMgSSBkZWx2ZSBkZWVwZXIuCgpSaWdodCwgc28gd2hlcmUgZG9lcyB0aGlzIGxlYWQgbWU/IEkgdGhpbmsgaXQmIzM5O3MgdGltZSB0byBjb25zaWRlciB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIHRoZSByZXN1bHRzLiBMZXQmIzM5O3MgY2FsbCB0aGlzICYjMzQ7c2V0LXJlc3VsdHMuJiMzNDsgVGhlIG5vbi1zdGF0aWMgY2hhcmFjdGVyaXN0aWMgb2YgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIHBvdGVudGlhbGx5IGluZmx1ZW5jZXMgdGhlIG1lY2hhbmlzbSBieSB3aGljaCByZXN1bHRzIGFyZSBzZXQgb3IgYWNjZXNzZWQuIFdlIGNhbiYjMzk7dCBpbW1lZGlhdGVseSBhc3N1bWUgdGhlIHNjb3BlIG9yIGFjY2VzcyBwYXR0ZXJucywgd2UgbXVzdCBrZWVwIHRoaXMgaW4gbWluZCBhcyB3ZSBldmFsdWF0ZSB0aGUgY29kZSBwYXRoLiBJIG5lZWQgdG8gdHJhY2UgaG93IHRoZSByZXN1bHQtc2V0dGluZyBwcm9jZXNzIHVzZXMgb3IgaW50ZXJhY3RzIHdpdGggYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyB0byB1bnBhY2suIFRoaXMgaXMgbXkgbmV4dCBjcnVjaWFsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O0tQUk9CRV9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BlcmZfZXZlbnRfb3ZlcmZsb3cmIzM0OywKICAgICYjMzQ7cGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYGV2ZW50LVx1MDAzZXByb2dgIGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGJ5IHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgaW4gdGhlIGNvcmUgcGVyZi9icGYgc3Vic3lzdGVtLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVyZl9ldmVudF9vdmVyZmxvdyYjMzQ7LAogICAgJiMzNDtwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgZXZlbnQtXHUwMDNlcHJvZ2AgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBpbiB0aGUgY29yZSBwZXJmL2JwZiBzdWJzeXN0ZW0uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAoZGF0YSByYWNlKSB0aGF0IGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUuIFNwZWNpZmljYWxseSwgYGV2ZW50LVx1MDAzZXByb2dgIHdhcyBiZWluZyBjaGVja2VkIGZvciBub24tTlVMTCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvdygpYCwgd2hpbGUgaXQgY291bGQgYmUgY29uY3VycmVudGx5IHNldCB0byBOVUxMIGluIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZygpYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFKClgIGFuZCBgV1JJVEVfT05DRSgpYCBlbnN1cmVzIHRoZSBwb2ludGVyIGlzIGZldGNoZWQgb25seSBvbmNlLCBwcmV2ZW50aW5nIHRoZSByYWNlLlxuXG5UaGlzIHR5cGUgb2YgYnVnIChkYXRhIHJhY2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSkgaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBLQ1NBTiwgYW5kIGdlbmVyYWwga2VybmVsIGNyYXNoIHJlcG9ydHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGFzIEtNU0FOIHNwZWNpZmljYWxseSB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOWU4OGY5MWI2OTVmNGZjMDRlZDk4NmJmNDZmODllZmRlODQzZGU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDA6NTQ6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IGJhNWJkNmE3OGZlN2IuLjlkOWM1NDc3NzcyZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC0xMDc1Myw2ICYjNDM7MTA3NTMsNyBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiB7CiAJaW50IGV2ZW50cyA9IGF0b21pY19yZWFkKCZhbXA7ZXZlbnQtJmd0O2V2ZW50X2xpbWl0KTsKIAlpbnQgcmV0ID0gMDsKJiM0MzsJc3RydWN0IGJwZl9wcm9nICpwcm9nOwogCiAJLyoKIAkgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydApAQCAtMTA3NjYsNyAmIzQzOzEwNzY3LDggQEAgc3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCWlmIChldmVudC0mZ3Q7YXR0ci5hdXhfcGF1c2UpCiAJCXBlcmZfZXZlbnRfYXV4X3BhdXNlKGV2ZW50LSZndDthdXhfZXZlbnQsIHRydWUpOwogCi0JaWYgKGV2ZW50LSZndDtwcm9nICZhbXA7JmFtcDsgZXZlbnQtJmd0O3Byb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UICZhbXA7JmFtcDsKJiM0MzsJcHJvZyA9IFJFQURfT05DRShldmVudC0mZ3Q7cHJvZyk7CiYjNDM7CWlmIChwcm9nICZhbXA7JmFtcDsgcHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgJmFtcDsmYW1wOwogCSAgICAhYnBmX292ZXJmbG93X2hhbmRsZXIoZXZlbnQsIGRhdGEsIHJlZ3MpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDc1NDk1YTVjMzUwNzkuLmVlNjFkYzc2MDA0NTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTIwMTgsNyAmIzQzOzIwMTgsNyBAQCB2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIAogcHV0OgogCXByb2cgPSBldmVudC0mZ3Q7cHJvZzsKLQlldmVudC0mZ3Q7cHJvZyA9IE5VTEw7CiYjNDM7CVdSSVRFX09OQ0UoZXZlbnQtJmd0O3Byb2csIE5VTEwpOwogCiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7YnBmX2V2ZW50X211dGV4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTAKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4IGZvciBgZXZlbnQtJmd0O3Byb2dgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYWNjZXNzZXMgdG8gYGV2ZW50LSZndDtwcm9nYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCwgbGlrZWx5IGFkZHJlc3NpbmcgYSBkYXRhIHJhY2UuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0JiMzOTtzIHRoZSBjYXNlLiBJdCYjMzk7cyBhYm91dCBwcm90ZWN0aW5nIHRoZSByZWFkL3dyaXRlIG9mIGBldmVudC0mZ3Q7cHJvZ2AgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi4KCk15IGZpcnN0IGd1dCBjaGVjayBpcyB0byB0aGluayBhYm91dCB3aGF0IG1lbW9yeSBzYW5pdGl6ZXIgd291bGQgY2F0Y2ggdGhpcy4gS01TQU4gaXMgZ3JlYXQsIGJ1dCBpdCBwcmltYXJpbHkgZm9jdXNlcyBvbiBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIElzIHRoaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU/IE5vLCBpdCYjMzk7cyBhYm91dCBhIHJhY2UgY29uZGl0aW9uLiBEYXRhIHJhY2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgYXJlbiYjMzk7dCByZWFsbHkgS01TQU4mIzM5O3MgZG9tYWluLiBLQVNBTiwgZXNwZWNpYWxseSBLQ1NBTiBmb3IgZGF0YSByYWNlcyBvciB0aGUgZ2VuZXJhbCBLQVNBTiBmb3IgVXNlLUFmdGVyLUZyZWUsIGFyZSBtdWNoIGJldHRlciBzdWl0ZWQgaGVyZS4KCkJ1dCwgSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gRG9lcyB0aGlzIHBhdGNoICppbnRyb2R1Y2UqIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgZXZlbiBpbmRpcmVjdGx5PyBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBjb2RlLgoKQWxyaWdodCwgdGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBsb29rcyBsaWtlIHRoaXMgbm93OgoKYGBgYwotCWlmIChldmVudC0mZ3Q7cHJvZyAmYW1wOyZhbXA7IGV2ZW50LSZndDtwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCAmYW1wOyZhbXA7CiYjNDM7CXByb2cgPSBSRUFEX09OQ0UoZXZlbnQtJmd0O3Byb2cpOwomIzQzOwlpZiAocHJvZyAmYW1wOyZhbXA7IHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UICZhbXA7JmFtcDsKYGBgCgpZZXMsIHRoaXMgY29uZmlybXMgdGhlIGluaXRpYWwgaHlwb3RoZXNpcy4gVGhlIG9sZCBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIGEgVE9DVE9VIChUaW1lLW9mLUNoZWNrLXRvLVRpbWUtb2YtVXNlKSByYWNlLiBUaGUgY29kZSBjaGVja2VkIGlmIGBldmVudC0mZ3Q7cHJvZ2Agd2FzIG5vbi1OVUxMLCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaXQuIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBzZXQgdGhlIGBldmVudC0mZ3Q7cHJvZ2AgcG9pbnRlciB0byBOVUxMICpiZXR3ZWVuKiB0aGUgY2hlY2sgYW5kIHRoZSBkZXJlZmVyZW5jZSwgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBldmVuIGEgdXNlLWFmdGVyLWZyZWUsIGlmIGFub3RoZXIgdGhyZWFkIHdhcyBxdWljayBlbm91Z2guIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGJ1ZywgYW5kIGBSRUFEX09OQ0VgIGVuc3VyZXMgYSBzaW5nbGUgYXRvbWljIHJlYWQgb2YgdGhlIHZhbHVlLgoKTXkgdW5kZXJzdGFuZGluZyBpcyByb2NrIHNvbGlkLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZWxldmFudCBoZXJlLiBUaGlzIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3kuIEtBU0FOIG9yIHBvdGVudGlhbGx5IGEgc3RhbmRhcmQgY3Jhc2ggd2lsbCBjYXRjaCB0aGlzLgoKT2theSwgbGV0JiMzOTtzIGRvY3VtZW50IHRoZSByZWFzb25pbmcgY2xlYXJseS4gVGhlIHBhdGNoIHJlc29sdmVzIGEgZGF0YSByYWNlL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIG9uIGBldmVudC0mZ3Q7cHJvZ2AuIFRoaXMgcHJvdGVjdHMgdGhlIHJlYWQvd3JpdGUgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi4gVGhlIHByb2JsZW0gaXMgYSBjbGFzc2ljIHJhY2UgYW5kIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIHRoZSBjb3JyZWN0IG1lbW9yeSBzYW5pdGl6ZXJzIGFyZSBLQVNBTiBhbmQvb3IgS0NTQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChkYXRhIHJhY2UpIHRoYXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZS4gU3BlY2lmaWNhbGx5LCBgZXZlbnQtXHUwMDNlcHJvZ2Agd2FzIGJlaW5nIGNoZWNrZWQgZm9yIG5vbi1OVUxMIGFuZCB0aGVuIGRlcmVmZXJlbmNlZCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93KClgLCB3aGlsZSBpdCBjb3VsZCBiZSBjb25jdXJyZW50bHkgc2V0IHRvIE5VTEwgaW4gYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKClgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBSRUFEX09OQ0UoKWAgYW5kIGBXUklURV9PTkNFKClgIGVuc3VyZXMgdGhlIHBvaW50ZXIgaXMgZmV0Y2hlZCBvbmx5IG9uY2UsIHByZXZlbnRpbmcgdGhlIHJhY2UuXG5cblRoaXMgdHlwZSBvZiBidWcgKGRhdGEgcmFjZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlKSBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgZ2VuZXJhbCBrZXJuZWwgY3Jhc2ggcmVwb3J0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYXMgS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAoZGF0YSByYWNlKSB0aGF0IGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUuIFNwZWNpZmljYWxseSwgYGV2ZW50LVx1MDAzZXByb2dgIHdhcyBiZWluZyBjaGVja2VkIGZvciBub24tTlVMTCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvdygpYCwgd2hpbGUgaXQgY291bGQgYmUgY29uY3VycmVudGx5IHNldCB0byBOVUxMIGluIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZygpYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFKClgIGFuZCBgV1JJVEVfT05DRSgpYCBlbnN1cmVzIHRoZSBwb2ludGVyIGlzIGZldGNoZWQgb25seSBvbmNlLCBwcmV2ZW50aW5nIHRoZSByYWNlLlxuXG5UaGlzIHR5cGUgb2YgYnVnIChkYXRhIHJhY2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSkgaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBLQ1NBTiwgYW5kIGdlbmVyYWwga2VybmVsIGNyYXNoIHJlcG9ydHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGFzIEtNU0FOIHNwZWNpZmljYWxseSB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NDoyMS45Njk0MDQ4NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTA5NTk1NzE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIktQUk9CRV9FVkVOVFNcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gICAgXCJwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgKGRhdGEgcmFjZSkgdGhhdCBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlLiBTcGVjaWZpY2FsbHksIGBldmVudC1cXHUwMDNlcHJvZ2Agd2FzIGJlaW5nIGNoZWNrZWQgZm9yIG5vbi1OVUxMIGFuZCB0aGVuIGRlcmVmZXJlbmNlZCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93KClgLCB3aGlsZSBpdCBjb3VsZCBiZSBjb25jdXJyZW50bHkgc2V0IHRvIE5VTEwgaW4gYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKClgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBSRUFEX09OQ0UoKWAgYW5kIGBXUklURV9PTkNFKClgIGVuc3VyZXMgdGhlIHBvaW50ZXIgaXMgZmV0Y2hlZCBvbmx5IG9uY2UsIHByZXZlbnRpbmcgdGhlIHJhY2UuXFxuXFxuVGhpcyB0eXBlIG9mIGJ1ZyAoZGF0YSByYWNlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUpIGlzIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiwgS0NTQU4sIGFuZCBnZW5lcmFsIGtlcm5lbCBjcmFzaCByZXBvcnRzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIGp1c3RpZmljYXRpb24gZm9yIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBhcyBLTVNBTiBzcGVjaWZpY2FsbHkgdGFyZ2V0cyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBvbiBgZXZlbnQtXFx1MDAzZXByb2dgIGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGJ5IHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgaW4gdGhlIGNvcmUgcGVyZi9icGYgc3Vic3lzdGVtLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjIxLjk2OTQxMDQwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4NzkxODU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE5ZTg4ZjkxYjY5NWY0ZmMwNGVkOTg2YmY0NmY4OWVmZGU4NDNkZTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDA6NTQ6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xcbmluZGV4IGJhNWJkNmE3OGZlN2IuLjlkOWM1NDc3NzcyZTMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcXG4rKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xcbkBAIC0xMDc1Myw2ICsxMDc1Myw3IEBAIHN0YXRpYyBpbnQgX19wZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4ge1xcbiBcXHRpbnQgZXZlbnRzID0gYXRvbWljX3JlYWQoXFx1MDAyNmV2ZW50LVxcdTAwM2VldmVudF9saW1pdCk7XFxuIFxcdGludCByZXQgPSAwO1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydFxcbkBAIC0xMDc2Niw3ICsxMDc2Nyw4IEBAIHN0YXRpYyBpbnQgX19wZXJmX2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4gXFx0aWYgKGV2ZW50LVxcdTAwM2VhdHRyLmF1eF9wYXVzZSlcXG4gXFx0XFx0cGVyZl9ldmVudF9hdXhfcGF1c2UoZXZlbnQtXFx1MDAzZWF1eF9ldmVudCwgdHJ1ZSk7XFxuIFxcbi1cXHRpZiAoZXZlbnQtXFx1MDAzZXByb2cgXFx1MDAyNlxcdTAwMjYgZXZlbnQtXFx1MDAzZXByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9QRVJGX0VWRU5UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdHByb2cgPSBSRUFEX09OQ0UoZXZlbnQtXFx1MDAzZXByb2cpO1xcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIWJwZl9vdmVyZmxvd19oYW5kbGVyKGV2ZW50LCBkYXRhLCByZWdzKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG5pbmRleCA3NTQ5NWE1YzM1MDc5Li5lZTYxZGM3NjAwNDUzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbkBAIC0yMDE4LDcgKzIwMTgsNyBAQCB2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG4gXFxuIHB1dDpcXG4gXFx0cHJvZyA9IGV2ZW50LVxcdTAwM2Vwcm9nO1xcbi1cXHRldmVudC1cXHUwMDNlcHJvZyA9IE5VTEw7XFxuK1xcdFdSSVRFX09OQ0UoZXZlbnQtXFx1MDAzZXByb2csIE5VTEwpO1xcbiBcXG4gdW5sb2NrOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmJwZl9ldmVudF9tdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjIzLjI1ODEyMTMzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgzOTUyMDM3NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiS1BST0JFU1wiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiLFxuICAgIFwiQlBGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlcmZfZXZlbnRfb3ZlcmZsb3dcIixcbiAgICBcInBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2Ugb24gYGV2ZW50LVxcdTAwM2Vwcm9nYCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYCBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVnIGluIHRoZSBjb3JlIHBlcmYvYnBmIHN1YnN5c3RlbS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOWU4OGY5MWI2OTVmNGZjMDRlZDk4NmJmNDZmODllZmRlODQzZGU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDA6NTQ6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5pbmRleCBiYTViZDZhNzhmZTdiLi45ZDljNTQ3Nzc3MmUzIDEwMDY0NFxuLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmNcbisrKyBiL2tlcm5lbC9ldmVudHMvY29yZS5jXG5AQCAtMTA3NTMsNiArMTA3NTMsNyBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4ge1xuIFx0aW50IGV2ZW50cyA9IGF0b21pY19yZWFkKFx1MDAyNmV2ZW50LVx1MDAzZWV2ZW50X2xpbWl0KTtcbiBcdGludCByZXQgPSAwO1xuK1x0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIFxuIFx0LypcbiBcdCAqIE5vbi1zYW1wbGluZyBjb3VudGVycyBtaWdodCBzdGlsbCB1c2UgdGhlIFBNSSB0byBmb2xkIHNob3J0XG5AQCAtMTA3NjYsNyArMTA3NjcsOCBAQCBzdGF0aWMgaW50IF9fcGVyZl9ldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4gXHRpZiAoZXZlbnQtXHUwMDNlYXR0ci5hdXhfcGF1c2UpXG4gXHRcdHBlcmZfZXZlbnRfYXV4X3BhdXNlKGV2ZW50LVx1MDAzZWF1eF9ldmVudCwgdHJ1ZSk7XG4gXG4tXHRpZiAoZXZlbnQtXHUwMDNlcHJvZyBcdTAwMjZcdTAwMjYgZXZlbnQtXHUwMDNlcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcdTAwMjZcdTAwMjZcbitcdHByb2cgPSBSRUFEX09OQ0UoZXZlbnQtXHUwMDNlcHJvZyk7XG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcdTAwMjZcdTAwMjZcbiBcdCAgICAhYnBmX292ZXJmbG93X2hhbmRsZXIoZXZlbnQsIGRhdGEsIHJlZ3MpKVxuIFx0XHRnb3RvIG91dDtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDc1NDk1YTVjMzUwNzkuLmVlNjFkYzc2MDA0NTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTIwMTgsNyArMjAxOCw3IEBAIHZvaWQgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuIFxuIHB1dDpcbiBcdHByb2cgPSBldmVudC1cdTAwM2Vwcm9nO1xuLVx0ZXZlbnQtXHUwMDNlcHJvZyA9IE5VTEw7XG4rXHRXUklURV9PTkNFKGV2ZW50LVx1MDAzZXByb2csIE5VTEwpO1xuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZicGZfZXZlbnRfbXV0ZXgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6MjMuMjU4MTIyMzkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3MDQ3MDY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgYW5kIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgYWNjZXNzLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGRpcmVjdCBhY2Nlc3NlcyB0byBgZXZlbnQtXHUwMDNlcHJvZ2Agd2l0aCBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIGRlZmluaXRlbHkgc21lbGxzIGxpa2UgYSByYWNlIGNvbmRpdGlvbiBmaXguIEdvb2QuIExldCdzIGRpZyBpbi5cblxuVGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2Agd2l0aGluIHRoZSBjb3JlIHBlcmYgZXZlbnQgaGFuZGxpbmcsIGFuZCB0aGVuIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AsIHdoaWNoIGhhbmRsZXMgQlBGIHByb2dyYW0gZGV0YWNobWVudCwgc28gd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIGZ1bmN0aW9ucy4gQm90aCBvZiB0aGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gQ2hlY2tpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIGBrZXJuZWwvZXZlbnRzL2NvcmUuY2AgaXMgZ29pbmcgdG8gYmUgY29tcGlsZWQgaWYgYENPTkZJR19QRVJGX0VWRU5UU2AgaXMgZW5hYmxlZCwgYXMgZXhwZWN0ZWQuIEFuZCwgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AncyBwcmVzZW5jZSBkZXBlbmRzIG9uIGBDT05GSUdfQlBGX0VWRU5UU2AuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcyBhZ2FpbnN0IHRoZWlyIHJlc3BlY3RpdmUgTWFrZWZpbGVzIHRvIGJlIHN1cmUgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NDoyOC4xMjg1OTY5NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3NDU5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xOTUxPWludCBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTk5NTp2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjI4LjE4MTM0Nzc0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDcwNTI1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkxvb2tpbmcgZm9yIHRoZSBCUEYgVHJhY2UgT2JqZWN0KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGJwZl90cmFjZS5vYCBpcyBidWlsdC4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSB0aGUgYGtlcm5lbC90cmFjZWAgZGlyZWN0b3J5LCBzaW5jZSB0aGF0J3Mgd2hlcmUgdHJhY2luZyBmdW5jdGlvbmFsaXR5IHR5cGljYWxseSByZXNpZGVzLiBTbywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBga2VybmVsL3RyYWNlL01ha2VmaWxlYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgY29tbWFuZCBjZW50ZXIgZm9yIGJ1aWxkaW5nIHRyYWNlLXJlbGF0ZWQgb2JqZWN0IGZpbGVzLCBhbmQgdGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIEkgbmVlZC4gSG9wZWZ1bGx5LCB0aGlzIE1ha2VmaWxlIGhhcyBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gaWRlbnRpZnkgb3IgYnVpbGQgYGJwZl90cmFjZS5vYCB3aXRoaW4gdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6MzEuMTg4NDAzMTQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MjM5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjMxLjI0MzY1MTQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMzU1MDAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgRXZlbnQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGIGV2ZW50cy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGF0IGBDT05GSUdfQlBGX0VWRU5UU2AgaXMgZ29pbmcgdG8gYmUgYSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYnVpbGQgc3lzdGVtIHRvIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgb2JqZWN0IGZpbGUgcmVsYXRlZCB0byB0aGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgYGtlcm5lbC9ldmVudHMvTWFrZWZpbGVgLiBJJ2xsIGdvIHRha2UgYSBsb29rIHRoZXJlIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGBjb3JlLm9gLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzExLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6MzQuNTQ3MjA1MDUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mjg1ODAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3JlXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2V2ZW50cy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5rZXJuZWwvZXZlbnRzL01ha2VmaWxlOjI6b2JqLXkgOj0gY29yZS5vIHJpbmdfYnVmZmVyLm8gY2FsbGNoYWluLm9cXG5rZXJuZWwvZXZlbnRzL01ha2VmaWxlLTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjM0LjczMDA2ODU1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTA5NzAxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgYGtlcm5lbC9ldmVudHMvTWFrZWZpbGVgIEluY2x1c2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBidWlsZCBzeXN0ZW0sIGFuZCB0aGUgYGtlcm5lbC9ldmVudHMvTWFrZWZpbGVgIGlzIG9ubHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgaWYgYENPTkZJR19QRVJGX0VWRU5UU2AgaXMgc2V0LiBUaGF0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYSBzdGFuZGFyZCBjb25kaXRpb25hbCBpbmNsdXNpb24gYmFzZWQgb24gYSBLY29uZmlnIHZhcmlhYmxlLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIGVudGlyZSBwcm9maWxpbmcgc3Vic3lzdGVtIGlzIG1vZHVsYXJpemVkLiBJZiBwZXJmb3JtYW5jZSBldmVudCBjb2xsZWN0aW9uIGlzbid0IGRlc2lyZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgYXNzb2NpYXRlZCBjb2RlIGFuZCBidWlsZCBpbnN0cnVjdGlvbnMgYXJlIHNpbXBseSBza2lwcGVkLiBUaGlzIGtlZXBzIHRoZSBrZXJuZWwgbGVhbiBhbmQgYXZvaWRzIHVubmVjZXNzYXJ5IGJsb2F0IGZvciBzeXN0ZW1zIHdoZXJlIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBpc24ndCBhIHByaW9yaXR5LiBJdCdzIGEgY2xlYW4gd2F5IHRvIG1hbmFnZSBmZWF0dXJlIGVuYWJsZW1lbnQgYW5kIGlzIGV4YWN0bHkgd2hhdCBJIHdvdWxkIGV4cGVjdCBpbiBhIHdlbGwtZGVzaWduZWQga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdkIG5lZWQgdG8gZGl2ZSBkZWVwZXIsIG9mIGNvdXJzZSwgdG8gc2VlIGhvdyB0aGUgaW5jbHVzaW9uIGFmZmVjdHMgZGVwZW5kZW5jaWVzIGFuZCBsaW5rIG9yZGVyLCBidXQgdGhlIGJhc2ljIHByaW5jaXBsZSBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjM3Ljk0MTA0MTE0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1NTQ3MTgxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZXJuZWwvZXZlbnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6MzguNDc2NjAwMDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNzM3MTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgYXVkaWVuY2UgaXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNzIOKAkyB0aGUgYGtlcm5lbC9NYWtlZmlsZWAuIFRoYXQncyB1c3VhbGx5IHRoZSBjb21tYW5kIGNlbnRlciwgdGhlIGNlbnRyYWwgb3JjaGVzdHJhdG9yIGZvciBob3cgZXZlcnl0aGluZyBnZXRzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBhc3NlbWJsZWQuIEl0J3Mgd2hlcmUgSSBjYW4gZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgcnVsZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgZmxvdyBvZiB0aGUgZW50aXJlIGtlcm5lbCBidWlsZC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwcm9qZWN0J3Mgb3JnYW5pemVkIGFuZCBjb250cm9sbGVkLiBJIGtub3cgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBpbmNsdWRlIHBhdGhzLCBjb21waWxlciBmbGFncywgb2JqZWN0IGZpbGUgbG9jYXRpb25zLCBsaW5raW5nIGNvbW1hbmRzLCBhbmQgdGFyZ2V0IGRlZmluaXRpb25zLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkaWFnbm9zaW5nIGFueSBidWlsZC1yZWxhdGVkIGlzc3VlcyBvciB1bmRlcnN0YW5kaW5nIHRoZSBwcm9qZWN0J3Mgc3RydWN0dXJlIGZyb20gYSBoaWdoIGxldmVsLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NDo0MS4xMTM5NzM1NDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzE3MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2ZW50c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL01ha2VmaWxlPTI2PWVuZGlmXFxua2VybmVsL01ha2VmaWxlLTI3LVxcbmtlcm5lbC9NYWtlZmlsZToyODojIFByZXZlbnRzIGZsaWNrZXIgb2YgdW5pbnRlcmVzdGluZyBfX2RvX3NvZnRpcnEoKS9fX2xvY2FsX2JoX2Rpc2FibGVfaXAoKVxcbmtlcm5lbC9NYWtlZmlsZS0yOS0jIGluIGNvdmVyYWdlIHRyYWNlcy5cXG4tLVxcbmtlcm5lbC9NYWtlZmlsZT0xMjg9b2JqLSQoQ09ORklHX0NGSSkgKz0gY2ZpLm9cXG5rZXJuZWwvTWFrZWZpbGUtMTI5LVxcbmtlcm5lbC9NYWtlZmlsZToxMzA6b2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKSArPSBldmVudHMvXFxua2VybmVsL01ha2VmaWxlLTEzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6NDEuMTYxNjk1MzIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTYyOTYyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgUGVyZm9ybWFuY2UgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIHRoaXMgZG93bi4gSSdtIGFzc3VtaW5nIHdlJ3JlIGFpbWluZyBmb3Igcm9idXN0IHBlcmZvcm1hbmNlIGFuYWx5c2lzIGNhcGFiaWxpdGllcyBoZXJlLCBzbyB0aGUgaW1tZWRpYXRlIG5lZWQgaXMgZm9yIGBDT05GSUdfUEVSRl9FVkVOVFNgLiBUaGF0J3MgYSBnaXZlbi4gTm93LCB3aXRoIHRoZSBpbmNyZWFzaW5nIHVzZSBvZiBCUEYsIEknbSB0aGlua2luZyB3ZSBhbHNvIHdhbnQgYENPTkZJR19CUEZfRVZFTlRTYC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYW5kIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfQlBGX0VWRU5UU2AuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgZ3JvdW5kd29yayBsYWlkIGJlZm9yZSBlbmFibGluZyBpdC4gR290dGEgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBuZWVkZWQgZnVuY3Rpb25hbGl0eSB0byBnZXQgdGhpcyB3b3JraW5nIHJpZ2h0LCBzbyB0aGF0J3Mgd2hlcmUgSSB3aWxsIGZvY3VzIG15IGF0dGVudGlvbiByaWdodCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NDo0My45MTc5OTQzMjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODcwNDQxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjQ1LjcwNTA0NDY2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxNjU5NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJQRl9FVkVOVFMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IGBCUEZfRVZFTlRTYCBpcyBjb25maWd1cmVkLCB3aGljaCB1bmRvdWJ0ZWRseSBtZWFucyBsb29raW5nIGludG8gaXRzIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcy4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIG1vc3QgbG9naWNhbCBwbGFjZTogYGtlcm5lbC90cmFjZS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHR5cGljYWxseSBkZWZpbmVkLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gdHJhY2luZyBhbmQgaW5zdHJ1bWVudGF0aW9uLCBhbmQgYEJQRl9FVkVOVFNgIHNjcmVhbXMgb2YgZUJQRi4gSSdkIGJlIHdpbGxpbmcgdG8gYmV0IGl0J3MgaW4gdGhlcmUsIGFuZCB0aGF0J3Mgd2hlcmUgSSdsbCBiZWdpbiBteSBzZWFyY2guIEhvcGVmdWxseSwgdGhhdCB3aWxsIGltbWVkaWF0ZWx5IHJldmVhbCB3aGV0aGVyIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBpZiBpdCBoYXMgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXQgZG9lcy4gVGltZSB0byBnbyBodW50aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDk3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6NDkuMTM2NzA2MTY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXFxuIDg1MTpcXHRcXHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cXG4gODUyOlxcdFxcbiA4NTM6XFx0Y29uZmlnIEJQRl9FVkVOVFNcXG4gODU0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gODU1OlxcdFxcdGRlcGVuZHMgb24gKEtQUk9CRV9FVkVOVFMgfHwgVVBST0JFX0VWRU5UUykgXFx1MDAyNlxcdTAwMjYgUEVSRl9FVkVOVFNcXG4gODU2OlxcdFxcdGJvb2xcXG4gODU3OlxcdFxcdGRlZmF1bHQgeVxcbiA4NTg6XFx0XFx0aGVscFxcbiA4NTk6XFx0XFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcXG4gODYwOlxcdFxcdCAgdHJhY2Vwb2ludCBldmVudHMuXFxuIDg2MTpcXHRcXG4gODYyOlxcdGNvbmZpZyBEWU5BTUlDX0VWRU5UU1xcbiA4NjM6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4NjQ6XFx0XFxuIDg2NTpcXHRjb25maWcgUFJPQkVfRVZFTlRTXFxuIDg2NjpcXHRcXHRkZWZfYm9vbCBuXFxuIDg2NzpcXHRcXG4gODY4OlxcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXFxuIDg2OTpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIHByb2dyYW1zIHRvIG92ZXJyaWRlIGEga3Byb2JlZCBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6NDkuMTM2ODAxOTA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTAwMDA4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEV2ZW50cyBDb25maWd1cmF0aW9uIGFuZCBhIENyaXRpY2FsIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgYSBkZXBlbmRlbmN5OiBgQlBGX0VWRU5UU2AgaXMgZGVwZW5kZW50IG9uIGBCUEZfU1lTQ0FMTGAsIGVpdGhlciBgS1BST0JFX0VWRU5UU2Agb3IgYFVQUk9CRV9FVkVOVFNgLCBhbmQgYFBFUkZfRVZFTlRTYC4gU2luY2UgYEJQRl9FVkVOVFNgIGlzIHNldCB0byBcInlcIiBieSBkZWZhdWx0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIG90aGVyIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLCBhcmUgYWxzbyBlbmFibGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lIGNvbmZpZ3VyYXRpb24gY2hlY2suXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGhvd2V2ZXIsIGlzIGEgZnVuY3Rpb25hbCBidWcgZml4LiBJdCBhZGRyZXNzZXMgYSBkYXRhIHJhY2UgaXNzdWUgcmVsYXRlZCB0byBgZXZlbnQtXHUwMDNlcHJvZ2Agd2l0aGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLiBUaGlzIGlzIGEgbm9uLXRyaXZpYWwgZml4OyBmaXhpbmcgZGF0YSByYWNlcyBpcyBhbHdheXMgaW1wb3J0YW50IGZvciBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBJdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBCUEYgY29kZSBwYXRoLlxuXG5cIldvcnRoRnV6emluZzogdHJ1ZVwiIC0gSSBjb25jdXIuIFRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nIGFmdGVyIHRoaXMgZml4IGlzIGFwcGxpZWQuIFRob3NlIGZ1bmN0aW9ucyBhcmUgbm93IGxlc3MgcHJvbmUgdG8gZGF0YSByYWNlcywgYW5kIGFyZSBub3cgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgaGVyZSBhcmUgY2xlYXJseSBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRob3NlIHJvdXRpbmVzIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSByYWNlIGNvbmRpdGlvbi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGFmZmVjdHMgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgY29uZmxpY3QsIHNvIGl0J3MgYSBkZXRhaWwgSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTQ6NTMuOTQ2ODA0ODExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxMDU1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTEwNzQxPXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfYnBmX2hhbmRsZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA3NDktXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA3NTA6c3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwNzUxLVxcdFxcdFxcdFxcdCBpbnQgdGhyb3R0bGUsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4NDQ9aW50IHBlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NTQtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4NTU6XFx0cmV0dXJuIF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgZGF0YSwgcmVncyk7XFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NTYtfVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4OTk9c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG92ZXJmbG93LFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTItXFx0Zm9yICg7IG92ZXJmbG93OyBvdmVyZmxvdy0tKSB7XFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5MTM6XFx0XFx0aWYgKF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgdGhyb3R0bGUsXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTQtXFx0XFx0XFx0XFx0XFx0ICAgIGRhdGEsIHJlZ3MpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjU0LjA2MzkxNjg0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExNjc2NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIE92ZXJmbG93IEhhbmRsZXIgU2NvcGUqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGlzIG92ZXJmbG93IHNpdHVhdGlvbi4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGZ1bmN0aW9uLCBpdCdzIHN0YXRpYywgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBvdXIgZm9jdXMuIFNpbmNlIHRoYXQncyB0aGUgYmFzZSBvZiBpdCwgd2Ugc2hvdWxkIGRpcmVjdCBvdXIgYXR0ZW50aW9uIHRvIGl0cyBub24tc3RhdGljIGNvdW50ZXJwYXJ0cywgdGhlIGxpa2VseSBwdWJsaWMgZW50cnkgcG9pbnRzLiBTbywgbGV0J3MgcHJpb3JpdGl6ZSBpbnZlc3RpZ2F0aW5nIGBwZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfc3dldmVudF9vdmVyZmxvd2AgYXMgdGhvc2UgYXJlIHRoZSBleHRlcm5hbCBmdW5jdGlvbnMgdGhhdCB3b3VsZCBnZXQgY2FsbGVkLiBCdXQgaG9sZCBvbiwgYmVmb3JlIHdlIGdvIHRvbyBmYXIgZG93biB0aGF0IHBhdGguLi5pdCB3b3VsZCBiZSBwcnVkZW50IHRvIHF1aWNrbHkgY29uZmlybSBpZiBgcGVyZl9zd2V2ZW50X292ZXJmbG93YCBpcyBhbHNvIHN0YXRpYy4gSWYgaXQgaXMsIHRoYXQgd2lsbCBzaWduaWZpY2FudGx5IGFsdGVyIG91ciBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjU3LjM3NTU5NjA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU0MDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX3N3ZXZlbnRfb3ZlcmZsb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2V2ZW50cy9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4NzY9dTY0IHBlcmZfc3dldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODk4LVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwODk5OnN0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBvdmVyZmxvdyxcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDkwMC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMDkyNT1zdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgbnIsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk2My1cXHRcXHRkYXRhLVxcdTAwM2VwZXJpb2QgPSBucjtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMDk2NDpcXHRcXHRyZXR1cm4gcGVyZl9zd2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCBkYXRhLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk2NS1cXHR9IGVsc2VcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTY4LVxcdGlmIChuciA9PSAxIFxcdTAwMjZcXHUwMDI2IGh3Yy1cXHUwMDNlc2FtcGxlX3BlcmlvZCA9PSAxIFxcdTAwMjZcXHUwMDI2ICFldmVudC1cXHUwMDNlYXR0ci5mcmVxKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwOTY5OlxcdFxcdHJldHVybiBwZXJmX3N3ZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsIGRhdGEsIHJlZ3MpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTcwLVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5NzMtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5NzQ6XFx0cGVyZl9zd2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCBkYXRhLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDk3NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU0OjU3LjQyMjE1MDg2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjYzNjg4NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBhIFNvZnR3YXJlIEV2ZW50IE92ZXJmbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcGVyZl9zd2V2ZW50X292ZXJmbG93YCB2YXJpYWJsZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0J3MgaW1wb3J0YW50IGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBvdmVyZmxvdy4gU2luY2UgaXQncyByZWxhdGVkIHRvIHNvZnR3YXJlIGV2ZW50cywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhhbWluZSBgcGVyZl9zd2V2ZW50X2V2ZW50YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0IGluIHRoaXMgc2NlbmFyaW8sIGlmIGl0J3Mgb3ZlcmZsb3dpbmcuIEl0IHNob3VsZCB0ZWxsIG1lIHdoZXJlIHRoaW5ncyBhcmUgZ29pbmcgc2lkZXdheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NTowNC4wODU4NDE3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5NjA5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyZl9zd2V2ZW50X2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTEwODk5PXN0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBvdmVyZmxvdyxcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwOTI0LVxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjEwOTI1OnN0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBucixcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMDkyNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMTA2MD1zdGF0aWMgdm9pZCBkb19wZXJmX3N3X2V2ZW50KGVudW0gcGVyZl90eXBlX2lkIHR5cGUsIHUzMiBldmVudF9pZCxcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTExMDc1LVxcdFxcdGlmIChwZXJmX3N3ZXZlbnRfbWF0Y2goZXZlbnQsIHR5cGUsIGV2ZW50X2lkLCBkYXRhLCByZWdzKSlcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMTA3NjpcXHRcXHRcXHRwZXJmX3N3ZXZlbnRfZXZlbnQoZXZlbnQsIG5yLCBkYXRhLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMTA3Ny1cXHR9XFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMTQxMD1zdGF0aWMgdm9pZCBfX3BlcmZfdHBfZXZlbnRfdGFyZ2V0X3Rhc2sodTY0IGNvdW50LCB2b2lkICpyZWNvcmQsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMTQyNS1cXHRcXHRwZXJmX3NhbXBsZV9zYXZlX3Jhd19kYXRhKGRhdGEsIGV2ZW50LCByYXcpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jOjExNDI2OlxcdFxcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgY291bnQsIGRhdGEsIHJlZ3MpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTExNDI3LVxcdH1cXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTExNDUzPXZvaWQgcGVyZl90cF9ldmVudCh1MTYgZXZlbnRfdHlwZSwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplLFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE0ODUtXFx0XFx0XFx0cGVyZl9zYW1wbGVfc2F2ZV9yYXdfZGF0YShcXHUwMDI2ZGF0YSwgZXZlbnQsIFxcdTAwMjZyYXcpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jOjExNDg2OlxcdFxcdFxcdHBlcmZfc3dldmVudF9ldmVudChldmVudCwgY291bnQsIFxcdTAwMjZkYXRhLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMTQ4Ny1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMTgwMT12b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTE4MTMtXFx0aWYgKCFicC1cXHUwMDNlaHcuc3RhdGUgXFx1MDAyNlxcdTAwMjYgIXBlcmZfZXhjbHVkZV9ldmVudChicCwgcmVncykpXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTE4MTQ6XFx0XFx0cGVyZl9zd2V2ZW50X2V2ZW50KGJwLCAxLCBcXHUwMDI2c2FtcGxlLCByZWdzKTtcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMTgxNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjA0LjE2NDgwNzgyOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE2MzE5ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIFBlcmYgRXZlbnQgRnVuY3Rpb24gVmlzaWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHBlcmZfc3dldmVudF9ldmVudGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbWVhbnMgdGhpcyBmdW5jdGlvbiBpcyAqb25seSogdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBJdCdzIGVzc2VudGlhbGx5IHByaXZhdGUsIGFuZCBJIHdvdWxkbid0IGV4cGVjdCB0byBpbnRlcmFjdCB3aXRoIGl0IGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlLlxuXG5Ob3csIHRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcXVlc3Rpb246IGlmIGBwZXJmX2V2ZW50X292ZXJmbG93YCAqaXNuJ3QqIHN0YXRpYywgdGhlbiBpdCdzIGNsZWFybHkgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLiBUaGlzIG1ha2VzIHNlbnNlOyBhbiBvdmVyZmxvdyBoYW5kbGVyIG5lZWRzIHRvIGJlIHNvbWV0aGluZyB0aGF0IHRoZSBzeXN0ZW0gY2FuIGNhbGwgaW50byBpbiByZXNwb25zZSB0byBldmVudHMsIHNvIGl0J3MgcHJvYmFibHkgZXhwb3J0ZWQgdG8gZGVhbCB3aXRoIHRoZSBhY3R1YWwgb3ZlcmZsb3cgaXRzZWxmLlxuXG5GaW5hbGx5LCBJJ20gbm90aW5nIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGRlY2xhcmVkLiBJcyBpdCBhbHNvIGV4cG9ydGVkPyBHaXZlbiB0aGUgbmF0dXJlIG9mIEJQRiBwcm9ncmFtIGRldGFjaG1lbnQsIHdoaWNoIGNvdWxkIGhhcHBlbiBmcm9tIGEgdmFyaWV0eSBvZiBwbGFjZXMsIEkgd291bGQgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYWxzbyBiZSBub24tc3RhdGljIGFuZCBhdmFpbGFibGUgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdG8gY2FsbC4gSXQgbWlnaHQgZXZlbiBiZSBwYXJ0IG9mIHRoZSBgcGVyZl9ldmVudF9vcGVuYCBpbmZyYXN0cnVjdHVyZSwgYXMgYSBwcm9ncmFtIHdvdWxkIG5lZWQgdG8gYmUgZGV0YWNoZWQgYXMgcGFydCBvZiBhIGNsb3N1cmUgb3BlcmF0aW9uLCBhIHByb2dyYW0gY291bGQgYmUgcmVtb3ZlZCBhdCB3aWxsIGJ5IGEgcHJpdmlsZWdlZCBvcGVyYXRpb24sIG9yIG1heWJlIGJlIGF1dG9tYXRpY2FsbHkgZGV0YWNoZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG5cbkVzc2VudGlhbGx5LCBJJ20gbWFwcGluZyBvdXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgcGVyZiBzdWJzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyIGFuZCB0aGUga2VybmVsIGF0IGxhcmdlLiBUaGUgc3RhdGljL25vbi1zdGF0aWMgZGlzdGluY3Rpb24gaXMgYSBrZXkgaW5kaWNhdG9yIG9mIGRlc2lnbiBpbnRlbnQgYW5kIHVzYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MDguMzgxMTMwNTg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI2MjI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE5NTE9aW50IHBlcmZfZXZlbnRfYXR0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xOTk0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxOTk1OnZvaWQgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xOTk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MDguNDM0Mzk3ODAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDQ1MTY0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gUGVyZiBFdmVudCBEZXRhY2htZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYC4gSXQncyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IGNoZWNrIGBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZ2AganVzdCBpbiBjYXNlLCBidXQgdGhlIGFjdHVhbCBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBkZXRhY2ggZnVuY3Rpb24sIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGZvY3VzIG15IGluaXRpYWwgZWZmb3J0cy5cblxuRm9yIHN5bWJvbCB0YXJnZXRpbmcsIEknbSB0aGlua2luZyBJJ2xsIGtleSBpbiBvbjpcblxuKiAgIGBwZXJmX2V2ZW50X292ZXJmbG93YFxuKiAgIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2BcblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIGRvY3VtZW50IG1lbnRpb25zIGEgZmV3OlxuXG4qICAgYFBFUkZfRVZFTlRTYFxuKiAgIGBCUEZfRVZFTlRTYFxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgS1BST0JFX0VWRU5UU2BcblxuSSByZWNhbGwgc2VlaW5nIGBCUEZfRVZFTlRTYCBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgLCBzbyBJJ20gcHJldHR5IHN1cmUgaXQncyBhIHZhbGlkIGNvbmZpZyBvcHRpb24uIExldCdzIG1ha2Ugc3VyZSBgUEVSRl9FVkVOVFNgIGlzIGFsc28gY29uZmlndXJlZC4gVGhhdCBpcyBhbiBpbXBvcnRhbnQgb25lLlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MzQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MTIuNDM4OTE2NjMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYzNTY3OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJGX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFxcXCJQZXJmb3JtYW5jZSBtb25pdG9yaW5nXFxcIlxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6NDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgdW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTExLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjEyOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9SQVBMXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcIkludGVsL0FNRCByYXBsIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjI4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfUE9XRVJcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yOS1cXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFxcdTAwMjZcXHUwMDI2IENQVV9TVVBfQU1EXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zNi1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzozNzpjb25maWcgUEVSRl9FVkVOVFNfQU1EX1VOQ09SRVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJBTUQgVW5jb3JlIHBlcmZvcm1hbmNlIGV2ZW50c1xcXCJcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ3LVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctNDktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcbi0tXFxuaW5pdC9LY29uZmlnPTIxNDE9bWVudSBcXFwiS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnNcXFwiXFxuaW5pdC9LY29uZmlnLTIxNDItXFxuaW5pdC9LY29uZmlnOjIxNDM6Y29uZmlnIFBFUkZfRVZFTlRTXFxuaW5pdC9LY29uZmlnLTIxNDQtXFx0Ym9vbCBcXFwiS2VybmVsIHBlcmZvcm1hbmNlIGV2ZW50cyBhbmQgY291bnRlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjE0LjIwMjQ4OTY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTYwOTY5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKlxuXG5SaWdodCwgc28gYFBFUkZfRVZFTlRTYCwgdGhhdCdzIGRlZmluaXRlbHkgaGFuZ2luZyBvdXQgaW4gYGluaXQvS2NvbmZpZ2AsIGp1c3QgYXMgSSBzdXNwZWN0ZWQuIE5vdywgbGV0J3MgcGl2b3QgYW5kIHF1aWNrbHkgY29uZmlybSB0aGUgbG9jYXRpb25zIG9mIGEgY291cGxlIG9mIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGVyZSBgQlBGX1NZU0NBTExgIGFuZCBgS1BST0JFX0VWRU5UU2AgYXJlIHNpdHVhdGVkIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUga2VybmVsIGNvbmZpZy4gSSBuZWVkIHRvIGVuc3VyZSBhIGhvbGlzdGljIHZpZXcgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBnaXZlbiB0aGVzZSBhcmUgcmVsYXRlZCBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MTcuODk4NTg5NDU1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM2ODAzNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NToxOS45MzU0MDIzNThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA0NjkwNDI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjkxNzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjIxLjk4MjMwOTM1MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjU2MDUyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFX0VWRU5UU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9NzcwPWNvbmZpZyBQUk9CRV9FVkVOVFNfQlRGX0FSR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTc4MS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo3ODI6Y29uZmlnIEtQUk9CRV9FVkVOVFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03ODMtXFx0ZGVwZW5kcyBvbiBLUFJPQkVTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04MDAtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODAxOmNvbmZpZyBLUFJPQkVfRVZFTlRTX09OX05PVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04MDItXFx0Ym9vbCBcXFwiRG8gTk9UIHByb3RlY3Qgbm90cmFjZSBmdW5jdGlvbiBmcm9tIGtwcm9iZSBldmVudHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjIzLjU1NDg3Njk5MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc2ODQxNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgSW1wbGljYXRpb25zIG9mIEtQUk9CRV9FVkVOVFMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogYEtQUk9CRV9FVkVOVFNgIGlzIGluaGVyZW50bHkgcmVsaWFudCBvbiBgS1BST0JFU2AuIFRoaXMgaXNuJ3QgZ3JvdW5kYnJlYWtpbmcsIGJ1dCBpdCdzIHRoZSBmb3VuZGF0aW9uIHdlIGhhdmUgdG8gY29uc3RhbnRseSBrZWVwIGluIG1pbmQuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBLUFJPQkVfRVZFTlRTYCBpcyBidWlsdCAqb24gdG9wKiBvZiB0aGUgS1BST0JFUyBpbmZyYXN0cnVjdHVyZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhhdCBiYXNlIGxheWVyIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgZGV2ZWxvcG1lbnQsIGFuZCBvcHRpbWl6YXRpb24uIEl0IGRpY3RhdGVzIGhvdyBmYXIgd2UgY2FuIHB1c2ggdGhpbmdzLCBhbnkgbGltaXRhdGlvbnMsIGFuZCBwb3NzaWJsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gQW55IGRpc2N1c3Npb24gYWJvdXQgYEtQUk9CRV9FVkVOVFNgIGhhcyB0byBjaXJjbGUgYmFjayB0byB3aGF0IHRoZSBgS1BST0JFU2AgZm91bmRhdGlvbiBwcm92aWRlcyAoYW5kIHBlcmhhcHMgKmRvZXNuJ3QqIHByb3ZpZGUpLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBzaGFwZXMgbXkgc3RyYXRlZ3kgZm9yIHByYWN0aWNhbGx5IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0byBob3cgSSdkIGFwcHJvYWNoIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjI2LjkzMTcyMTE5MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTQyNjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTExMj1jb25maWcgR0VORVJJQ19FTlRSWVxcbi0tXFxuYXJjaC9LY29uZmlnLTExNi1cXG5hcmNoL0tjb25maWc6MTE3OmNvbmZpZyBLUFJPQkVTXFxuYXJjaC9LY29uZmlnLTExOC1cXHRib29sIFxcXCJLcHJvYmVzXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnPTE2OD1jb25maWcgT1BUUFJPQkVTXFxuLS1cXG5hcmNoL0tjb25maWctMTcyLVxcbmFyY2gvS2NvbmZpZzoxNzM6Y29uZmlnIEtQUk9CRVNfT05fRlRSQUNFXFxuYXJjaC9LY29uZmlnLTE3NC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0yMzcxPWNvbmZpZyBURVNUX0lPVl9JVEVSXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMzgyLVxcbmxpYi9LY29uZmlnLmRlYnVnOjIzODM6Y29uZmlnIEtQUk9CRVNfU0FOSVRZX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMzg0LVxcdHRyaXN0YXRlIFxcXCJLcHJvYmVzIHNhbml0eSB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NToyOC41MTcxNTI1ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5NDY1MDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGVyZi9CUEYgRGF0YSBSYWNlIEZpeCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBmaXggdGhhdCBjZW50ZXJzIGFyb3VuZCBgS1BST0JFU2AuIFJpZ2h0LCBnb3QgaXQuIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyDigJMgd2UncmUgZGVhbGluZyB3aXRoIGBQRVJGX0VWRU5UU2AsIGBCUEZfU1lTQ0FMTGAsIGBLUFJPQkVTYCwgYEtQUk9CRV9FVkVOVFNgLCBhbmQgYEJQRl9FVkVOVFNgLiBTdGFuZGFyZCBzdHVmZiBmb3IgcGVyZiBhbmQgQlBGLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYXJvdW5kIGBwZXJmX2V2ZW50X292ZXJmbG93YCBhbmQgYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIGEgZGF0YSByYWNlIG9uIGBldmVudC1cdTAwM2Vwcm9nYCB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLCBmaXhlZCBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGlzIHNvdW5kcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeCBkZWVwIGluIHRoZSBwZXJmL2JwZiBjb3JlLiBUaGF0J3MgYSBnb29kIHNpZ24sIGVzcGVjaWFsbHkgc2luY2UgdGhlc2UgYXJlIHJlYWNoYWJsZSBhbmQgbGlrZWx5IHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEl0IG1lbnRpb25zIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGlzIHdoZXJlIHRoZSBkYXRhIHJhY2UgZXhpc3RzIGFuZCB0aGUgcHJpbWFyeSBmb2N1cyBvZiB0aGUgZml4LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWUgdGhhdCBpcyB0aGUgdGFyZ2V0LCBpZiB0aGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGFuZCBleHBvc2VkIHRvIHRoZSB1c2VyLiBHaXZlbiB0aGF0IGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGlzIHN0YXRpYywgd2UncmUgbGlrZWx5IHRhcmdldGluZyBgcGVyZl9ldmVudF9vdmVyZmxvd2AuIFRoYXQgc2VlbXMgcmlnaHQuIEFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGlzIG5vbi1zdGF0aWMsIHNvIGl0J3MgZGlyZWN0bHkgbW9kaWZpZWQsIG1ha2luZyBpdCBhbm90aGVyIHZhbGlkIGZvY3VzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgIGlzIGV4cG9ydGVkLiBUaGF0J3MgY3JpdGljYWwgZm9yIGRldGVybWluaW5nIGlmIGl0IGlzIGEgdGFyZ2V0IGZvciB0ZXN0aW5nIG9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MzQuNjExODA1NjU1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDEwNjg5MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MzQuODEyODg0MjkyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDczMTU4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBjb25zaWRlcmF0aW9uczpcblxuKipGb2N1c2luZyBvbiBTY29wZSBhbmQgQWNjZXNzaWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlIGFuZCBpdHMgc3RydWN0dXJlLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaW5ncyBhcmUgYmVpbmcgdXRpbGl6ZWQuIFRoZSBpbml0aWFsIGluY2xpbmF0aW9uLCB0aGUgZmlyc3QgbWVudGFsIGJsaXAsIGlzIHRoYXQgaXQgKmRvZXNuJ3QqIG5lY2Vzc2FyaWx5IG5lZWQgdG8gYmUgZXhwb3J0ZWQgYXMgYSBtb2R1bGUuIFRoYXQncyBub3QgdGhlIHByaW1hcnkgY29uY2VybiBhdCB0aGlzIGp1bmN0dXJlLiBNeSBmb2N1cyBpcyBtb3JlIGdyYW51bGFyIHRoYW4gdGhhdC4gV2hhdCdzIGNydWNpYWwgaGVyZSBpcyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGJlICpub24tc3RhdGljKi4gVGhpcyBzaWduYWxzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgc2hpZnQgaW4gZGVzaWduIHBoaWxvc29waHkuIFdlJ3JlIHN0ZWVyaW5nIGF3YXkgZnJvbSBnbG9iYWwsIHNoYXJlZCBzdGF0ZSBpbiBmYXZvciBvZiBzb21ldGhpbmcgdGhhdCBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuYWdlZCwgdGVzdGVkLCBhbmQgcG90ZW50aWFsbHkgY29tcG9zZWQgd2l0aCBvdGhlciBwaWVjZXMgb2YgZnVuY3Rpb25hbGl0eS4gU3RhdGljIG1ldGhvZHMsIHdoaWxlIHNvbWV0aW1lcyBjb252ZW5pZW50LCBvZnRlbiBpbnRyb2R1Y2UgY291cGxpbmcgYW5kIGhpZGRlbiBkZXBlbmRlbmNpZXMsIHdoaWNoIGJlY29tZSBhIG5pZ2h0bWFyZSB0byByZWZhY3RvciBsYXRlci4gU28sIG1ha2luZyBpdCBub24tc3RhdGljIHN1Z2dlc3RzIGEgY2xlYW5lciwgbW9yZSBvYmplY3Qtb3JpZW50ZWQgYXBwcm9hY2gsIGV2ZW4gaWYgaXQncyBub3QgYmVpbmcgZXhwbGljaXRseSBtb2R1bGFyaXplZC4gVGhlIGltbWVkaWF0ZSBhZHZhbnRhZ2UgaXMgY29udHJvbCBhbmQgdGhlIGFiaWxpdHkgdG8gaW5zdGFudGlhdGUsIG1vZGlmeSwgYW5kIHBhc3MgYXJvdW5kIHRoZSByZWxldmFudCBvYmplY3RzLiBUaGlzIG9wZW5zIHVwIHBvc3NpYmlsaXRpZXMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGFuZCBvdGhlciBpbXBvcnRhbnQgdGVjaG5pcXVlcyB0byByZWR1Y2UgYW55IGtpbmQgb2YgdGlnaHQgY291cGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDc2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6MzkuMDYwMjAyNDY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI1MjQ2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xOTUxPWludCBwZXJmX2V2ZW50X2F0dGFjaF9icGZfcHJvZyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTk5NTp2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTk5Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjM5LjYxMjczMzI5OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDEzNTMzNzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5vbi1TdGF0aWMgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCB0aGUga2V5IGlzIHRoYXQgdGhpcyBpc24ndCBzdGF0aWMuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIFNpbmNlIHRoZSBiZWhhdmlvciBpcyBsaW5rZWQgdG8gcGVyZm9ybWFuY2UgZXZlbnRzLCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgcGVyZm9ybWFuY2UgZXZlbnQgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBtb3N0IGxpa2VseSBhcmVhIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgaXMgdGhlIG92ZXJmbG93IGhhbmRsaW5nLiBMZXQncyBzZWUuLi4gSSdsbCBqdW1wIHJpZ2h0IGludG8gYGtlcm5lbC9ldmVudHMvY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBwZXJmX2V2ZW50X292ZXJmbG93YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBwbGFjZSB3aGVyZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhhdCB5aWVsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTExLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6NDIuNjI2MjY5Mzc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg1NTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvY29yZS5jPTEwNzQxPXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfYnBmX2hhbmRsZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA3NDktXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA3NTA6c3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwNzUxLVxcdFxcdFxcdFxcdCBpbnQgdGhyb3R0bGUsIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NDMtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4NDQ6aW50IHBlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEwODQ1LVxcdFxcdFxcdHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NTQtXFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA4NTU6XFx0cmV0dXJuIF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgZGF0YSwgcmVncyk7XFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA4NTYtfVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTA4OTk9c3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG92ZXJmbG93LFxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTItXFx0Zm9yICg7IG92ZXJmbG93OyBvdmVyZmxvdy0tKSB7XFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTA5MTM6XFx0XFx0aWYgKF9fcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgdGhyb3R0bGUsXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtMTA5MTQtXFx0XFx0XFx0XFx0XFx0ICAgIGRhdGEsIHJlZ3MpKSB7XFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xMjI1ND1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGVyZl9zd2V2ZW50X2hydGltZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xMjI3NC1cXHRcXHRpZiAoIShldmVudC1cXHUwMDNlYXR0ci5leGNsdWRlX2lkbGUgXFx1MDAyNlxcdTAwMjYgaXNfaWRsZV90YXNrKGN1cnJlbnQpKSlcXG5rZXJuZWwvZXZlbnRzL2NvcmUuYzoxMjI3NTpcXHRcXHRcXHRpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgXFx1MDAyNmRhdGEsIHJlZ3MpKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTEyMjc2LVxcdFxcdFxcdFxcdHJldCA9IEhSVElNRVJfTk9SRVNUQVJUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo1NTo0Mi42NzgxMzEwMTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1NzUxODQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBgcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIFJlc3VsdCBTZXR0aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHBlcmZfZXZlbnRfb3ZlcmZsb3dgLiBIbW0sIGl0J3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdywgd2hhdCBkb2VzIHRoYXQgaW1wbHkgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IEl0IHN1Z2dlc3RzIGl0IGhhcyBicm9hZGVyIHZpc2liaWxpdHksIHdoaWNoIG1pZ2h0IGltcGFjdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhbmQsIHBvdGVudGlhbGx5LCB0aHJlYWQgc2FmZXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IG5vbi1zdGF0aWMgbmF0dXJlIGZpcm1seSBpbiBtaW5kIGFzIEkgZGVsdmUgZGVlcGVyLlxuXG5SaWdodCwgc28gd2hlcmUgZG9lcyB0aGlzIGxlYWQgbWU/IEkgdGhpbmsgaXQncyB0aW1lIHRvIGNvbnNpZGVyIHRoZSBwcm9jZXNzIG9mIHNldHRpbmcgdGhlIHJlc3VsdHMuIExldCdzIGNhbGwgdGhpcyBcInNldC1yZXN1bHRzLlwiIFRoZSBub24tc3RhdGljIGNoYXJhY3RlcmlzdGljIG9mIGBwZXJmX2V2ZW50X292ZXJmbG93YCBwb3RlbnRpYWxseSBpbmZsdWVuY2VzIHRoZSBtZWNoYW5pc20gYnkgd2hpY2ggcmVzdWx0cyBhcmUgc2V0IG9yIGFjY2Vzc2VkLiBXZSBjYW4ndCBpbW1lZGlhdGVseSBhc3N1bWUgdGhlIHNjb3BlIG9yIGFjY2VzcyBwYXR0ZXJucywgd2UgbXVzdCBrZWVwIHRoaXMgaW4gbWluZCBhcyB3ZSBldmFsdWF0ZSB0aGUgY29kZSBwYXRoLiBJIG5lZWQgdG8gdHJhY2UgaG93IHRoZSByZXN1bHQtc2V0dGluZyBwcm9jZXNzIHVzZXMgb3IgaW50ZXJhY3RzIHdpdGggYHBlcmZfZXZlbnRfb3ZlcmZsb3dgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyB0byB1bnBhY2suIFRoaXMgaXMgbXkgbmV4dCBjcnVjaWFsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjI2LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjQ3LjEzNTY1MzEwOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NTAzMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIktQUk9CRV9FVkVOVFNcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gICAgXCJwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIG9uIGBldmVudC1cXHUwMDNlcHJvZ2AgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBpbiB0aGUgY29yZSBwZXJmL2JwZiBzdWJzeXN0ZW0uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIktQUk9CRV9FVkVOVFNcIixcbiAgICBcIkJQRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwZXJmX2V2ZW50X292ZXJmbG93XCIsXG4gICAgXCJwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIG9uIGBldmVudC1cXHUwMDNlcHJvZ2AgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvd2AgYW5kIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZ2AgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBpbiB0aGUgY29yZSBwZXJmL2JwZiBzdWJzeXN0ZW0uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6NDcuMjEwMTYyNzg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODU1MTg5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6NDcuMjEwNzA1MzQ3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4NTQ2NDI5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChkYXRhIHJhY2UpIHRoYXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZS4gU3BlY2lmaWNhbGx5LCBgZXZlbnQtXFx1MDAzZXByb2dgIHdhcyBiZWluZyBjaGVja2VkIGZvciBub24tTlVMTCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvdygpYCwgd2hpbGUgaXQgY291bGQgYmUgY29uY3VycmVudGx5IHNldCB0byBOVUxMIGluIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZygpYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFKClgIGFuZCBgV1JJVEVfT05DRSgpYCBlbnN1cmVzIHRoZSBwb2ludGVyIGlzIGZldGNoZWQgb25seSBvbmNlLCBwcmV2ZW50aW5nIHRoZSByYWNlLlxcblxcblRoaXMgdHlwZSBvZiBidWcgKGRhdGEgcmFjZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlKSBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgZ2VuZXJhbCBrZXJuZWwgY3Jhc2ggcmVwb3J0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYXMgS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTllODhmOTFiNjk1ZjRmYzA0ZWQ5ODZiZjQ2Zjg5ZWZkZTg0M2RlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAwOjU0OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuaW5kZXggYmE1YmQ2YTc4ZmU3Yi4uOWQ5YzU0Nzc3NzJlMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jXG4rKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuY1xuQEAgLTEwNzUzLDYgKzEwNzUzLDcgQEAgc3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuIHtcbiBcdGludCBldmVudHMgPSBhdG9taWNfcmVhZChcdTAwMjZldmVudC1cdTAwM2VldmVudF9saW1pdCk7XG4gXHRpbnQgcmV0ID0gMDtcbitcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcbiBcdC8qXG4gXHQgKiBOb24tc2FtcGxpbmcgY291bnRlcnMgbWlnaHQgc3RpbGwgdXNlIHRoZSBQTUkgdG8gZm9sZCBzaG9ydFxuQEAgLTEwNzY2LDcgKzEwNzY3LDggQEAgc3RhdGljIGludCBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuIFx0aWYgKGV2ZW50LVx1MDAzZWF0dHIuYXV4X3BhdXNlKVxuIFx0XHRwZXJmX2V2ZW50X2F1eF9wYXVzZShldmVudC1cdTAwM2VhdXhfZXZlbnQsIHRydWUpO1xuIFxuLVx0aWYgKGV2ZW50LVx1MDAzZXByb2cgXHUwMDI2XHUwMDI2IGV2ZW50LVx1MDAzZXByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgXHUwMDI2XHUwMDI2XG4rXHRwcm9nID0gUkVBRF9PTkNFKGV2ZW50LVx1MDAzZXByb2cpO1xuK1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1BFUkZfRVZFTlQgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWJwZl9vdmVyZmxvd19oYW5kbGVyKGV2ZW50LCBkYXRhLCByZWdzKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5pbmRleCA3NTQ5NWE1YzM1MDc5Li5lZTYxZGM3NjAwNDUzIDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG4rKysgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbkBAIC0yMDE4LDcgKzIwMTgsNyBAQCB2b2lkIHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudClcbiBcbiBwdXQ6XG4gXHRwcm9nID0gZXZlbnQtXHUwMDNlcHJvZztcbi1cdGV2ZW50LVx1MDAzZXByb2cgPSBOVUxMO1xuK1x0V1JJVEVfT05DRShldmVudC1cdTAwM2Vwcm9nLCBOVUxMKTtcbiBcbiB1bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YnBmX2V2ZW50X211dGV4KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjU1OjQ3LjIxMDcwNjMwN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODU0NjIxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uY3VycmVuY3kgRml4IGZvciBgZXZlbnQtXHUwMDNlcHJvZ2AqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3dgIGFuZCBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2dgLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGFjY2Vzc2VzIHRvIGBldmVudC1cdTAwM2Vwcm9nYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCwgbGlrZWx5IGFkZHJlc3NpbmcgYSBkYXRhIHJhY2UuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0J3MgdGhlIGNhc2UuIEl0J3MgYWJvdXQgcHJvdGVjdGluZyB0aGUgcmVhZC93cml0ZSBvZiBgZXZlbnQtXHUwMDNlcHJvZ2AgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi5cblxuTXkgZmlyc3QgZ3V0IGNoZWNrIGlzIHRvIHRoaW5rIGFib3V0IHdoYXQgbWVtb3J5IHNhbml0aXplciB3b3VsZCBjYXRjaCB0aGlzLiBLTVNBTiBpcyBncmVhdCwgYnV0IGl0IHByaW1hcmlseSBmb2N1c2VzIG9uIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhpcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZT8gTm8sIGl0J3MgYWJvdXQgYSByYWNlIGNvbmRpdGlvbi4gRGF0YSByYWNlcyBhbmQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIGFyZW4ndCByZWFsbHkgS01TQU4ncyBkb21haW4uIEtBU0FOLCBlc3BlY2lhbGx5IEtDU0FOIGZvciBkYXRhIHJhY2VzIG9yIHRoZSBnZW5lcmFsIEtBU0FOIGZvciBVc2UtQWZ0ZXItRnJlZSwgYXJlIG11Y2ggYmV0dGVyIHN1aXRlZCBoZXJlLlxuXG5CdXQsIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIERvZXMgdGhpcyBwYXRjaCAqaW50cm9kdWNlKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMsIGV2ZW4gaW5kaXJlY3RseT8gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgY29kZS5cblxuQWxyaWdodCwgdGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBpbiBgX19wZXJmX2V2ZW50X292ZXJmbG93YCBsb29rcyBsaWtlIHRoaXMgbm93OlxuXG5gYGBjXG4tXHRpZiAoZXZlbnQtXHUwMDNlcHJvZyBcdTAwMjZcdTAwMjYgZXZlbnQtXHUwMDNlcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcdTAwMjZcdTAwMjZcbitcdHByb2cgPSBSRUFEX09OQ0UoZXZlbnQtXHUwMDNlcHJvZyk7XG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfUEVSRl9FVkVOVCBcdTAwMjZcdTAwMjZcbmBgYFxuXG5ZZXMsIHRoaXMgY29uZmlybXMgdGhlIGluaXRpYWwgaHlwb3RoZXNpcy4gVGhlIG9sZCBjb2RlIHdhcyB2dWxuZXJhYmxlIHRvIGEgVE9DVE9VIChUaW1lLW9mLUNoZWNrLXRvLVRpbWUtb2YtVXNlKSByYWNlLiBUaGUgY29kZSBjaGVja2VkIGlmIGBldmVudC1cdTAwM2Vwcm9nYCB3YXMgbm9uLU5VTEwsIGFuZCB0aGVuIGRlcmVmZXJlbmNlZCBpdC4gYHBlcmZfZXZlbnRfZGV0YWNoX2JwZl9wcm9nYCBjb3VsZCBoYXZlIHBvdGVudGlhbGx5IHNldCB0aGUgYGV2ZW50LVx1MDAzZXByb2dgIHBvaW50ZXIgdG8gTlVMTCAqYmV0d2VlbiogdGhlIGNoZWNrIGFuZCB0aGUgZGVyZWZlcmVuY2UsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgZXZlbiBhIHVzZS1hZnRlci1mcmVlLCBpZiBhbm90aGVyIHRocmVhZCB3YXMgcXVpY2sgZW5vdWdoLiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWcsIGFuZCBgUkVBRF9PTkNFYCBlbnN1cmVzIGEgc2luZ2xlIGF0b21pYyByZWFkIG9mIHRoZSB2YWx1ZS5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyByb2NrIHNvbGlkLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZWxldmFudCBoZXJlLiBUaGlzIGlzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3kuIEtBU0FOIG9yIHBvdGVudGlhbGx5IGEgc3RhbmRhcmQgY3Jhc2ggd2lsbCBjYXRjaCB0aGlzLlxuXG5Pa2F5LCBsZXQncyBkb2N1bWVudCB0aGUgcmVhc29uaW5nIGNsZWFybHkuIFRoZSBwYXRjaCByZXNvbHZlcyBhIGRhdGEgcmFjZS9OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBvbiBgZXZlbnQtXHUwMDNlcHJvZ2AuIFRoaXMgcHJvdGVjdHMgdGhlIHJlYWQvd3JpdGUgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi4gVGhlIHByb2JsZW0gaXMgYSBjbGFzc2ljIHJhY2UgYW5kIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIHRoZSBjb3JyZWN0IG1lbW9yeSBzYW5pdGl6ZXJzIGFyZSBLQVNBTiBhbmQvb3IgS0NTQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTAsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NTU6NTcuMDY1MzMwMjU3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSAoZGF0YSByYWNlKSB0aGF0IGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUuIFNwZWNpZmljYWxseSwgYGV2ZW50LVxcdTAwM2Vwcm9nYCB3YXMgYmVpbmcgY2hlY2tlZCBmb3Igbm9uLU5VTEwgYW5kIHRoZW4gZGVyZWZlcmVuY2VkIGluIGBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coKWAsIHdoaWxlIGl0IGNvdWxkIGJlIGNvbmN1cnJlbnRseSBzZXQgdG8gTlVMTCBpbiBgcGVyZl9ldmVudF9kZXRhY2hfYnBmX3Byb2coKWAuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFJFQURfT05DRSgpYCBhbmQgYFdSSVRFX09OQ0UoKWAgZW5zdXJlcyB0aGUgcG9pbnRlciBpcyBmZXRjaGVkIG9ubHkgb25jZSwgcHJldmVudGluZyB0aGUgcmFjZS5cXG5cXG5UaGlzIHR5cGUgb2YgYnVnIChkYXRhIHJhY2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSkgaXMgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOLCBLQ1NBTiwgYW5kIGdlbmVyYWwga2VybmVsIGNyYXNoIHJlcG9ydHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbiBmb3IgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGFzIEtNU0FOIHNwZWNpZmljYWxseSB0YXJnZXRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChkYXRhIHJhY2UpIHRoYXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZS4gU3BlY2lmaWNhbGx5LCBgZXZlbnQtXFx1MDAzZXByb2dgIHdhcyBiZWluZyBjaGVja2VkIGZvciBub24tTlVMTCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQgaW4gYF9fcGVyZl9ldmVudF9vdmVyZmxvdygpYCwgd2hpbGUgaXQgY291bGQgYmUgY29uY3VycmVudGx5IHNldCB0byBOVUxMIGluIGBwZXJmX2V2ZW50X2RldGFjaF9icGZfcHJvZygpYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFKClgIGFuZCBgV1JJVEVfT05DRSgpYCBlbnN1cmVzIHRoZSBwb2ludGVyIGlzIGZldGNoZWQgb25seSBvbmNlLCBwcmV2ZW50aW5nIHRoZSByYWNlLlxcblxcblRoaXMgdHlwZSBvZiBidWcgKGRhdGEgcmFjZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlKSBpcyBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgZ2VuZXJhbCBrZXJuZWwgY3Jhc2ggcmVwb3J0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uIGZvciBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYXMgS01TQU4gc3BlY2lmaWNhbGx5IHRhcmdldHMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4z4rq[1] Phase: Succeeded StartedAt: 2026-08-12 00:56:08 +0000 UTC FinishedAt: 2026-08-12 00:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 00:56:08 +0000 UTC FinishedAt: 2026-08-12 00:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2] Phase: Succeeded StartedAt: 2026-08-12 00:56:08 +0000 UTC FinishedAt: 2026-08-12 04:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 00:56:08 +0000 UTC FinishedAt: 2026-08-12 04:36:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 00:56:08 +0000 UTC FinishedAt: 2026-08-12 00:56:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 00:56:08 +0000 UTC FinishedAt: 2026-08-12 00:56:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4z4rq/series-workflow4z4rq-convert-artifact-1604485766/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 00:56:19 +0000 UTC FinishedAt: 2026-08-12 01:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 00:56:19 +0000 UTC FinishedAt: 2026-08-12 01:13:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a8036f10-ed1b-401e-8023-adf4c14f9f6f,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-workflow4z4rq/series-workflow4z4rq-convert-artifact-1604485766/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": "425988c2-71b3-41bf-969e-6a8f6abb9f26", "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-workflow4z4rq/series-workflow4z4rq-build-action-2682504732/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 00:56:19 +0000 UTC FinishedAt: 2026-08-12 01:13:25 +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:*a8036f10-ed1b-401e-8023-adf4c14f9f6f,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-workflow4z4rq/series-workflow4z4rq-convert-artifact-1604485766/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": "425988c2-71b3-41bf-969e-6a8f6abb9f26", "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-workflow4z4rq/series-workflow4z4rq-build-action-2682504732/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 01:13:35 +0000 UTC FinishedAt: 2026-08-12 01:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 01:13:35 +0000 UTC FinishedAt: 2026-08-12 01:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 01:13:35 +0000 UTC FinishedAt: 2026-08-12 01:13:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 01:13:35 +0000 UTC FinishedAt: 2026-08-12 01:13:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4z4rq/series-workflow4z4rq-convert-artifact-3723741657/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 01:13:46 +0000 UTC FinishedAt: 2026-08-12 01:15:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 01:13:46 +0000 UTC FinishedAt: 2026-08-12 01:15:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*425988c2-71b3-41bf-969e-6a8f6abb9f26,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-workflow4z4rq/series-workflow4z4rq-build-action-2682504732/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-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 01:15:24 +0000 UTC FinishedAt: 2026-08-12 01:15:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 01:15:24 +0000 UTC FinishedAt: 2026-08-12 01:15:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 01:15:24 +0000 UTC FinishedAt: 2026-08-12 01:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 01:15:24 +0000 UTC FinishedAt: 2026-08-12 01:32:34 +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:*a8036f10-ed1b-401e-8023-adf4c14f9f6f,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-workflow4z4rq/series-workflow4z4rq-convert-artifact-3723741657/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": "00c9a620-10a2-4fb4-96ce-13c16d5c1cc5", "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-workflow4z4rq/series-workflow4z4rq-build-action-1791684149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 01:15:24 +0000 UTC FinishedAt: 2026-08-12 01:32:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a8036f10-ed1b-401e-8023-adf4c14f9f6f,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-workflow4z4rq/series-workflow4z4rq-convert-artifact-3723741657/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": "00c9a620-10a2-4fb4-96ce-13c16d5c1cc5", "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-workflow4z4rq/series-workflow4z4rq-build-action-1791684149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 01:32:34 +0000 UTC FinishedAt: 2026-08-12 01:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 01:32:34 +0000 UTC FinishedAt: 2026-08-12 01:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 01:32:34 +0000 UTC FinishedAt: 2026-08-12 01:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 01:32:34 +0000 UTC FinishedAt: 2026-08-12 01:34:48 +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:*00c9a620-10a2-4fb4-96ce-13c16d5c1cc5,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-workflow4z4rq/series-workflow4z4rq-build-action-1791684149/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-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 01:34:58 +0000 UTC FinishedAt: 2026-08-12 04:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 01:34:58 +0000 UTC FinishedAt: 2026-08-12 04:36:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"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:*425988c2-71b3-41bf-969e-6a8f6abb9f26,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*00c9a620-10a2-4fb4-96ce-13c16d5c1cc5,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-workflow4z4rq/series-workflow4z4rq-build-action-2682504732/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-workflow4z4rq/series-workflow4z4rq-build-action-1791684149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 01:34:58 +0000 UTC FinishedAt: 2026-08-12 01:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 01:34:58 +0000 UTC FinishedAt: 2026-08-12 01:35:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"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-workflow4z4rq/series-workflow4z4rq-convert-artifact-1592839886/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 01:34:58 +0000 UTC FinishedAt: 2026-08-12 01:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 01:34:58 +0000 UTC FinishedAt: 2026-08-12 01:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 01:34:58 +0000 UTC FinishedAt: 2026-08-12 01:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 01:35:08 +0000 UTC FinishedAt: 2026-08-12 04:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4z4rq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["perf_event_overflow","perf_event_detach_bpf_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PERF_EVENTS","BPF_SYSCALL","KPROBES","KPROBE_EVENTS","BPF_EVENTS"],"series_id":"6ab9263c-7142-4ecc-b0bb-5233a3846bad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 01:35:08 +0000 UTC FinishedAt: 2026-08-12 04:36:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*425988c2-71b3-41bf-969e-6a8f6abb9f26,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*00c9a620-10a2-4fb4-96ce-13c16d5c1cc5,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-workflow4z4rq/series-workflow4z4rq-build-action-2682504732/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-workflow4z4rq/series-workflow4z4rq-build-action-1791684149/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-workflow4z4rq/series-workflow4z4rq-convert-artifact-1592839886/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,}