Name: series-workflowhgldd Phase: Succeeded StartedAt: 2026-09-13 19:50:41 +0000 UTC FinishedAt: 2026-09-13 23:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[0] Phase: Succeeded StartedAt: 2026-09-13 19:50:41 +0000 UTC FinishedAt: 2026-09-13 20:10:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 19:50:41 +0000 UTC FinishedAt: 2026-09-13 20:10:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "501cbbd276b77d34af20ea3dd4f897c93630bac8", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "501cbbd276b77d34af20ea3dd4f897c93630bac8", "config_name": "upstream-apparmor-kasan.config", "series_id": "cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__x64_sys_close", "__do_sys_close" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "501cbbd276b77d34af20ea3dd4f897c93630bac8", "base_tree": "vfs" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X194NjRfc3lzX2Nsb3NlJiMzNDssCiAgICAmIzM0O19fZG9fc3lzX2Nsb3NlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIHRoZSBzY2FsYXIgaW50ZWdlciByZXR1cm4gY29kZSBvZiB0aGUgY2xvc2UoMikgc3lzY2FsbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGludGVyYWN0IHdpdGggYW55IG1lbW9yeSBidWZmZXJzLCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNTJlNzkyNzc5YTAwYjJjNjBjYTIyNmNhZjJkNjBjNjc0NjFhMWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMjA6MDg6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Li44MWE0M2I2YzViNmI5IDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmNcbkBAIC0xNTEzLDEyICYjNDM7MTUxMywxNyBAQCBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXG4gXHRpZiAobGlrZWx5KHJldHZhbCA9PSAwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBjYW4mIzM5O3QgcmVzdGFydCBjbG9zZSBzeXNjYWxsIGJlY2F1c2UgZmlsZSB0YWJsZSBlbnRyeSB3YXMgY2xlYXJlZCAqL1xuLVx0aWYgKHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQsIHNvIGFuIGludGVycnVwdGVkXG4mIzQzO1x0ICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlXG4mIzQzO1x0ICogZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmV0dmFsID09IC1FSU5UUiB8fFxuJiM0MztcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XG4gXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVE5PSU5UUiB8fFxuIFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHxcbiBcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSylcbi1cdFx0cmV0dmFsID0gLUVJTlRSO1xuJiM0MztcdFx0cmV0dmFsID0gMDtcbiBcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X194NjRfc3lzX2Nsb3NlJiMzNDssCiAgICAmIzM0O19fZG9fc3lzX2Nsb3NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNTJlNzkyNzc5YTAwYjJjNjBjYTIyNmNhZjJkNjBjNjc0NjFhMWM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMjA6MDg6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNDA4OTI1ZDdiZDBiNy4uODFhNDNiNmM1YjZiOSAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uYwpAQCAtMTUxMywxMiAmIzQzOzE1MTMsMTcgQEAgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKQogCWlmIChsaWtlbHkocmV0dmFsID09IDApKQogCQlyZXR1cm4gMDsKIAotCS8qIGNhbiYjMzk7dCByZXN0YXJ0IGNsb3NlIHN5c2NhbGwgYmVjYXVzZSBmaWxlIHRhYmxlIGVudHJ5IHdhcyBjbGVhcmVkICovCi0JaWYgKHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHwKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWQKJiM0MzsJICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlCiYjNDM7CSAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0dmFsID09IC1FSU5UUiB8fAomIzQzOwkgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fAogCSAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8CiAJICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHwKIAkgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spCi0JCXJldHZhbCA9IC1FSU5UUjsKJiM0MzsJCXJldHZhbCA9IDA7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEV2YWx1YXRpb24gZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIHRha2UgYSBsb29rIGF0IGEga2VybmVsIHBhdGNoLCBzcGVjaWZpY2FsbHkgdG8gc2VlIGlmIGl0JiMzOTtzIHJlbGV2YW50IGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSB0YXNrIGlzIGVzc2VudGlhbGx5IGEgc29mdHdhcmUgcXVhbGl0eSBhc3N1cmFuY2UgYW5kIGRlZmVuc2l2ZSBtYW5ldXZlci4gSSYjMzk7bSBub3QgbG9va2luZyBmb3IgbWFsd2FyZSBvciB0cnlpbmcgdG8gY3JhZnQgYW4gZXhwbG9pdCBoZXJlLiBNeSBvYmplY3RpdmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2gsIHdpdGhpbiBgZnMvb3Blbi5jYCByZWdhcmRpbmcgdGhlIGBjbG9zZWAgc3lzY2FsbCwgaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZm9jdXNlZCBmdXp6aW5nIGVmZm9ydHMuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMuCgpGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBwYXRjaCBpcyAqYWN0dWFsbHkqIGRvaW5nLiBMZXQmIzM5O3MgaW5zcGVjdCB0aGUgY29kZSBkaXJlY3RseS4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgY2xvc2VgIHN5c3RlbSBjYWxsIHdpdGhpbiBgZnMvb3Blbi5jYC4gSSBzZWUgdGhlIGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpYCBkZWZpbml0aW9uLCBhbmQgaXQgYXBwZWFycyB0aGUgcHJpbWFyeSBjaGFuZ2UgcmVsYXRlcyB0byBlcnJvciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IHdlIGRlYWwgd2l0aCBpbnRlcnJ1cHRlZCBgY2xvc2VgIGNhbGxzLiBUaGUgZXhpc3RpbmcgY29kZSBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGByZXR2YWxgIGlzIG9uZSBvZiBgRVJFU1RBUlRTWVNgLCBldGMuIGFuZCBub3cgdGhlIGZpeCBhbHNvIGhhbmRsZXMgdGhlIGVycm9yIGBFSU5UUmAuIFRoaXMgY2hhbmdlIGFsdGVycyBob3cgd2UgYXJlIGhhbmRsaW5nIGEgcmV0cnkgb24gYGNsb3NlYCBzeXN0ZW0gY2FsbC4KCkhvd2V2ZXIsIEkmIzM5O20gbm90IGp1c3QgZ29pbmcgdG8gdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBsaW5lIG51bWJlcnMgYmVpbmcgcGF0Y2hlZC4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBmdWxsIGNvbnRlbnRzIG9mIGBmcy9vcGVuLmNgIGFyb3VuZCBsaW5lIDE1MTMsIHNvIEkgY2FuIHNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24gaW4gdGhhdCBhcmVhLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGJlaW5nIGNoYW5nZWQgYW5kIHRoZSBleGFjdCBmdW5jdGlvbiB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDkwOlx0XG4xNDkxOlx0LypcbjE0OTI6XHQgKiBDYXJlZnVsIGhlcmUhIFdlIHRlc3Qgd2hldGhlciB0aGUgZmlsZSBwb2ludGVyIGlzIE5VTEwgYmVmb3JlXG4xNDkzOlx0ICogcmVsZWFzaW5nIHRoZSBmZC4gVGhpcyBlbnN1cmVzIHRoYXQgb25lIGNsb25lIHRhc2sgY2FuJiMzOTt0IHJlbGVhc2VcbjE0OTQ6XHQgKiBhbiBmZCB3aGlsZSBhbm90aGVyIGNsb25lIGlzIG9wZW5pbmcgaXQuXG4xNDk1Olx0ICovXG4xNDk2Olx0U1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxuMTQ5NzpcdHtcbjE0OTg6XHRcdGludCByZXR2YWw7XG4xNDk5Olx0XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbjE1MDA6XHRcbjE1MDE6XHRcdGZpbGUgPSBmaWxlX2Nsb3NlX2ZkKGZkKTtcbjE1MDI6XHRcdGlmICghZmlsZSlcbjE1MDM6XHRcdFx0cmV0dXJuIC1FQkFERjtcbjE1MDQ6XHRcbjE1MDU6XHRcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlsZSwgY3VycmVudC1cdTAwM2VmaWxlcyk7XG4xNTA2Olx0XG4xNTA3Olx0XHQvKlxuMTUwODpcdFx0ICogV2UmIzM5O3JlIHJldHVybmluZyB0byB1c2VyIHNwYWNlLiBEb24mIzM5O3QgYm90aGVyXG4xNTA5Olx0XHQgKiB3aXRoIGFueSBkZWxheWVkIGZwdXQoKSBjYXNlcy5cbjE1MTA6XHRcdCAqL1xuMTUxMTpcdFx0ZnB1dF9jbG9zZV9zeW5jKGZpbGUpO1xuMTUxMjpcdFxuMTUxMzpcdFx0aWYgKGxpa2VseShyZXR2YWwgPT0gMCkpXG4xNTE0Olx0XHRcdHJldHVybiAwO1xuMTUxNTpcdFxuMTUxNjpcdFx0LypcbjE1MTc6XHRcdCAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQsIHNvIGFuIGludGVycnVwdGVkXG4xNTE4Olx0XHQgKiBjbG9zZSBjYW5ub3QgYmUgcmVzdGFydGVkIHNhZmVseS4gRG8gbm90IHJlcG9ydCBFSU5UUiBhZnRlciB0aGVcbjE1MTk6XHRcdCAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuXG4xNTIwOlx0XHQgKi9cbjE1MjE6XHRcdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XG4xNTIyOlx0XHQgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxuMTUyMzpcdFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0lOVFIgfHxcbjE1MjQ6XHRcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5EIHx8XG4xNTI1Olx0XHQgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spXG4xNTI2Olx0XHRcdHJldHZhbCA9IDA7XG4xNTI3Olx0XG4xNTI4Olx0XHRyZXR1cm4gcmV0dmFsO1xuMTUyOTpcdH1cbjE1MzA6XHRcbjE1MzE6XHQvKlxuMTUzMjpcdCAqIFRoaXMgcm91dGluZSBzaW11bGF0ZXMgYSBoYW5ndXAgb24gdGhlIHR0eSwgdG8gYXJyYW5nZSB0aGF0IHVzZXJzXG4xNTMzOlx0ICogYXJlIGdpdmVuIGNsZWFuIHRlcm1pbmFscyBhdCBsb2dpbiB0aW1lLlxuMTUzNDpcdCAqL1xuMTUzNTpcdFNZU0NBTExfREVGSU5FMCh2aGFuZ3VwKVxuMTUzNjpcdHtcbjE1Mzc6XHRcdGlmIChjYXBhYmxlKENBUF9TWVNfVFRZX0NPTkZJRykpIHtcbjE1Mzg6XHRcdFx0dHR5X3ZoYW5ndXBfc2VsZigpO1xuMTUzOTpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBhIGBjbG9zZSgyKWAgU3lzY2FsbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBjbG9zZSgyKWAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGVycm9yIHJldHVybnMgZnJvbSBgZmlscF9mbHVzaCgpYC4gUHJldmlvdXNseSwgYC1FSU5UUmAgd2FzIHJldHVybmVkIGRpcmVjdGx5LiBOb3csIGEgY2hlY2sgZm9yIGAtRUlOVFJgIGlzIGFkZGVkLCBhbmQgMCBpcyByZXR1cm5lZCBpbiBzb21lIGNhc2VzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBZZXMsIHRoaXMgaXMgdGhlIHN0YW5kYXJkIGBzeXNfY2xvc2VgIC8gYGNsb3NlKGZkKWAgZW50cnlwb2ludCwgc28gaXQmIzM5O3MgYWJzb2x1dGVseSByZWFjaGFibGUuIFRoZSBrZXkgcXVlc3Rpb24gbm93IGlzLCBpcyBpdCB3b3J0aCBmdXp6aW5nPwoKVGhlIHRyaWFnZSBwaGlsb3NvcGh5IHN0YXRlcyB0aGF0IHJlYWNoYWJpbGl0eSBpcyBwcmltYXJ5LiBNb2RpZmllZCByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLCB1bmxlc3MgaXQgZmFsbHMgaW50byBzcGVjaWZpYyBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhpcyBjaGFuZ2UgKmlzKiByZWFjaGFibGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIFZGUy9zeXNjYWxsIGhhbmRsaW5nIGFyZWEsIHNvIHBlciBzZWN0aW9uIDMsIGl0JiMzOTtzIGEgJiMzNDtjb3JlIHN1YnN5c3RlbSYjMzQ7IG1vZGlmaWNhdGlvbiwgYW5kIHRoZXJlZm9yZSBmYWxscyB1bmRlciAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsuCgpOb3csIHdlIG5lZWQgdG8gdGhpbmsgYWJvdXQgRm9jdXNTeW1ib2xzLiAgVGhlIGRvY3VtZW50IGVtcGhhc2l6ZXMgYXZvaWRpbmcgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuJiMzNDsgVGhpcyBtZWFucyBub3QgbGlzdGluZyB0aGluZ3MgbGlrZSBtZW1vcnkgYWxsb2NhdG9ycyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGBzeXNfY2xvc2VgIC8gYF9fZG9fc3lzX2Nsb3NlYCBpcyB1YmlxdWl0b3VzISBOZWFybHkgZXZlcnkgcHJvZ3JhbSBjYWxscyBgY2xvc2UoZmQpYC4gSG93ZXZlciwgaXQmIzM5O3MgdGhlICpzcGVjaWZpYyogbW9kaWZpY2F0aW9uIG9mIHRoZSBgY2xvc2VgIHN5c2NhbGwgdGhhdCBpcyB0aGUgdGFyZ2V0IGhlcmUuIFRoZSBvbmx5IG1vZGlmaWVkIGNvZGUgc2VlbXMgdG8gYmUgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgLiBUaGlzIGV4cGFuZHMgdG8gYF9fZG9fc3lzX2Nsb3NlYCBhbmQgYF9feDY0X3N5c19jbG9zZWAuIEJ1dCBpcyBpdCBhIHRhcmdldCBzcGVjaWZpYyBlbnRyeXBvaW50PwoKV2UgaGF2ZSB0byBkZXRlcm1pbmUgaWYgbWVudGlvbmluZyBgX19kb19zeXNfY2xvc2VgIHZpb2xhdGVzIHRoZSBydWxlIGFib3V0IGF2b2lkaW5nIHViaXF1aXRvdXMgY29kZS4gQ2FuIEZvY3VzU3ltYm9scyBiZSBlbXB0eT8gVGhlIHNjaGVtYSBzYXlzIHRoZXkmIzM5O3JlIG51bGxhYmxlIGJ1dCBvZiB0aGUgdHlwZSBBUlJBWS4gQ2FuIHdlIGZ1enogdGhlIGNoYW5nZSB3aXRob3V0IHNwZWNpZnlpbmcgYW55dGhpbmc/ICAKClRoZSBkb2N1bWVudCBzdHJlc3NlcyB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMuIElmIG9ubHkgdGhlIHN5c2NhbGwgaXRzZWxmIGhhcyBiZWVuIGNoYW5nZWQsIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbGxvd2VkIGFzIGEgdGFyZ2V0IGlmIGl0JiMzOTtzIHRoZSBleGFjdCBmdW5jdGlvbiB0aGF0IHdhcyBtb2RpZmllZD8gU2luY2Ugbm8gb3RoZXIgY2FsbGVyIGlzIG1vZGlmaWVkLCBhbmQgdGhlIGNoYW5nZSBpcyAqd2l0aGluKiB0aGUgYHN5c19jbG9zZWAgbG9naWMsIGl0IGlzIGxpa2VseSB0aGUgb25seSB0YXJnZXQuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgbW9yZSBjb250ZXh0IHRvIGJlICpjZXJ0YWluKi4gV2hhdCB3YXMgdGhlICpyZWFzb24qIGZvciB0aGlzIHBhdGNoPyBVbmRlcnN0YW5kaW5nICp3aHkqIHRoZXkgY2hhbmdlZCB0aGlzIGVycm9yIGhhbmRsaW5nIGluIGBjbG9zZWAgbWlnaHQgcmV2ZWFsIGEgbW9yZSBzcGVjaWZpYyB0YXJnZXQgb3IgY2xhcmlmeSB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXR2YWwgPT0gLUVSRVNUQVJUU1lTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29wZW4uYz0xNDk2PVNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClcbi0tXG5mcy9vcGVuLmMtMTUyMS1cdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XG5mcy9vcGVuLmM6MTUyMjpcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XG5mcy9vcGVuLmMtMTUyMy1cdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBmaWxwX2ZsdXNoYCwgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIFJvbGUgb2YgYGZpbHBfZmx1c2hgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGZpbHBfZmx1c2hgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IHNwZWNpZmljYWxseSAqaXMqIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24/JiMzNDsgSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gZmlsZSBvcGVyYXRpb25zLCBidXQgdGhlICYjMzQ7Zmx1c2gmIzM0OyBwYXJ0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIGRhdGEgc3luY2hyb25pemF0aW9uIGFuZCBlbnN1cmluZyBjb25zaXN0ZW5jeS4gSXMgaXQgYWJvdXQgd3JpdGluZyBidWZmZXJlZCBkYXRhIHRvIGRpc2s/IElzIGl0IGFib3V0IGludmFsaWRhdGluZyBjYWNoZXM/IE9yIGlzIGl0IGEgbW9yZSBjb21wcmVoZW5zaXZlIGNsZWFudXAgcHJvY2VkdXJlPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgc2NvcGUuIElzIGl0IGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBieSB1c2Vyc3BhY2Ugb3IgaXMgaXQgcHJpbWFyaWx5IGEga2VybmVsLWludGVybmFsIGZ1bmN0aW9uPyBEZXBlbmRpbmcgb24gaXRzIGRlc2lnbiwgaXRzIGJlaGF2aW91ciBtYXkgZGlmZmVyLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCB0b28sIHRoZSBmaWxlIHBvaW50ZXImIzM5O3MgY2hhcmFjdGVyaXN0aWNzLiBJcyB0aGUgZmlsZSBwb2ludGVyIHBvaW50aW5nIHRvIGEgYmxvY2sgZGV2aWNlLCBhIGNoYXJhY3RlciBkZXZpY2UsIG9yIGEgcmVndWxhciBmaWxlPyBUaGlzJiMzOTtsbCBhbGwgaW5mbHVlbmNlIGhvdyBgZmlscF9mbHVzaGAgaXMgZGVzaWduZWQsIGFuZCBob3cgaXQgYmVoYXZlcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaW4gYW55IHVzZSBjYXNlLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBjb2RlIGhhdmUgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHBfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYz0yNTY1PWludCBmY250bF9zZXRsayh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL2xvY2tzLmMtMjYxNS1cdCAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpbGUgYW5kIG91ciBmaWxlc19zdHJ1Y3QsIGp1c3QgbGlrZSBvblxuZnMvbG9ja3MuYzoyNjE2Olx0ICogZmlscF9mbHVzaCgpLiBUaGVyZSBpcyBubyBuZWVkIHRvIGRvIHRoYXQgd2hlbiB3ZSYjMzk7cmVcbmZzL2xvY2tzLmMtMjYxNy1cdCAqIHVubG9ja2luZyB0aG91Z2gsIG9yIGZvciBPRkQgbG9ja3MuXG4tLVxuZnMvbG9ja3MuYz0yNjg4PWludCBmY250bF9zZXRsazY0KHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZnMvbG9ja3MuYy0yNzM3LVx0ICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmlsZSBhbmQgb3VyIGZpbGVzX3N0cnVjdCwganVzdCBsaWtlIG9uXG5mcy9sb2Nrcy5jOjI3Mzg6XHQgKiBmaWxwX2ZsdXNoKCkuIFRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gdGhhdCB3aGVuIHdlJiMzOTtyZVxuZnMvbG9ja3MuYy0yNzM5LVx0ICogdW5sb2NraW5nIHRob3VnaCwgb3IgZm9yIE9GRCBsb2Nrcy5cbi0tXG5mcy9vcGVuLmM9MTQ0Nj1TWVNDQUxMX0RFRklORTIoY3JlYXQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCB1bW9kZV90LCBtb2RlKVxuLS1cbmZzL29wZW4uYy0xNDU5LSAqL1xuZnMvb3Blbi5jOjE0NjA6c3RhdGljIGludCBmaWxwX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IGlkKVxuZnMvb3Blbi5jLTE0NjEte1xuLS1cbmZzL29wZW4uYz0xNDgwPWludCBmaWxwX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IGlkKVxuLS1cbmZzL29wZW4uYy0xNDgzLVxuZnMvb3Blbi5jOjE0ODQ6XHRyZXR2YWwgPSBmaWxwX2ZsdXNoKGZpbHAsIGlkKTtcbmZzL29wZW4uYy0xNDg1LVx0ZnB1dF9jbG9zZShmaWxwKTtcbi0tXG5mcy9vcGVuLmM9MTQ5Nj1TWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXG4tLVxuZnMvb3Blbi5jLTE1MDQtXG5mcy9vcGVuLmM6MTUwNTpcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlsZSwgY3VycmVudC1cdTAwM2VmaWxlcyk7XG5mcy9vcGVuLmMtMTUwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYGZpbHBfZmx1c2hgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGZpbHBfZmx1c2hgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgcmVmcmVzaCBvdXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGtlcm5lbCBmdW5jdGlvbi4mIzM0OyBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhlIGxpZmVjeWNsZSBvZiBhIGZpbGUgZGVzY3JpcHRvciwgSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQgdGhlIHN1cmZhY2UgYW5kIHF1aWNrbHkgYW5hbHl6ZSB3aGVyZSB0aGlzIGlzIGludm9rZWQsIGhvdyBpdOKAmXMgYmVpbmcgdXNlZCwgYW5kIHRoZSB2YXJpb3VzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgZXhlY3V0ZWQuCgpNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBsaWtlbHkgYmUgaGFuZGxpbmcgZWRnZSBjYXNlcyBpbnZvbHZpbmcgZGlydHkgcGFnZXMgYW5kIGVuc3VyaW5nIGFueSBwZW5kaW5nIHdyaXRlcyBhcmUgcHVzaGVkIHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4gSXQmIzM5O3MgdGhlIGtpbmQgb2YgZnVuY3Rpb24geW91IGhvcGUgbmV2ZXIgZ29lcyB3cm9uZywgc28gSSYjMzk7bGwgd2FudCB0byBmb2N1cyBvbiBhbGwgdGhlIG51YW5jZXMuCkkga25vdyB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJuIG1pZ2h0IGludm9sdmUgZW5zdXJpbmcgdGhhdCBmaWxlIGRhdGEgaXMgd3JpdHRlbiB0byBkaXNrIGJlZm9yZSBhbiBhcHBsaWNhdGlvbiBjbG9zZXMgYSBmaWxlIG9yIGFuIGFzc29jaWF0ZWQgcHJvY2VzcyB0ZXJtaW5hdGVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgaWYgbG9ja2luZyBpcyBwcm9wZXJseSBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLgoKQmFzaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdoZW4gc29tZW9uZSB3YW50cyB0byBjbG9zZSBvciBmcmVlIHVwIGEgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vcGVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NTU6XHRcbjE0NTY6XHQvKlxuMTQ1NzpcdCAqIFwmIzM0O2lkXCYjMzQ7IGlzIHRoZSBQT1NJWCB0aHJlYWQgSUQuIFdlIHVzZSB0aGVcbjE0NTg6XHQgKiBmaWxlcyBwb2ludGVyIGZvciB0aGlzLi5cbjE0NTk6XHQgKi9cbjE0NjA6XHRzdGF0aWMgaW50IGZpbHBfZmx1c2goc3RydWN0IGZpbGUgKmZpbHAsIGZsX293bmVyX3QgaWQpXG4xNDYxOlx0e1xuMTQ2MjpcdFx0aW50IHJldHZhbCA9IDA7XG4xNDYzOlx0XG4xNDY0Olx0XHRpZiAoQ0hFQ0tfREFUQV9DT1JSVVBUSU9OKGZpbGVfY291bnQoZmlscCkgPT0gMCwgZmlscCxcbjE0NjU6XHRcdFx0XHRcJiMzNDtWRlM6IENsb3NlOiBmaWxlIGNvdW50IGlzIDAgKGZfb3A9JXBzKVwmIzM0OyxcbjE0NjY6XHRcdFx0XHRmaWxwLVx1MDAzZWZfb3ApKSB7XG4xNDY3Olx0XHRcdHJldHVybiAwO1xuMTQ2ODpcdFx0fVxuMTQ2OTpcdFxuMTQ3MDpcdFx0aWYgKGZpbHAtXHUwMDNlZl9vcC1cdTAwM2VmbHVzaClcbjE0NzE6XHRcdFx0cmV0dmFsID0gZmlscC1cdTAwM2VmX29wLVx1MDAzZWZsdXNoKGZpbHAsIGlkKTtcbjE0NzI6XHRcbjE0NzM6XHRcdGlmIChsaWtlbHkoIShmaWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUEFUSCkpKSB7XG4xNDc0Olx0XHRcdGRub3RpZnlfZmx1c2goZmlscCwgaWQpO1xuMTQ3NTpcdFx0XHRsb2Nrc19yZW1vdmVfcG9zaXgoZmlscCwgaWQpO1xuMTQ3NjpcdFx0fVxuMTQ3NzpcdFx0cmV0dXJuIHJldHZhbDtcbjE0Nzg6XHR9XG4xNDc5Olx0XG4xNDgwOlx0aW50IGZpbHBfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGZsX293bmVyX3QgaWQpXG4xNDgxOlx0e1xuMTQ4MjpcdFx0aW50IHJldHZhbDtcbjE0ODM6XHRcbjE0ODQ6XHRcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlscCwgaWQpO1xuMTQ4NTpcdFx0ZnB1dF9jbG9zZShmaWxwKTtcbjE0ODY6XHRcbjE0ODc6XHRcdHJldHVybiByZXR2YWw7XG4xNDg4Olx0fVxuMTQ4OTpcdEVYUE9SVF9TWU1CT0woZmlscF9jbG9zZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDbG9zZSgyKSBTeXN0ZW0gQ2FsbCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIG9mIHRoZSBgY2xvc2UoMilgIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwgYW5kIGNvbXBhcmluZyBpdCB0byB0aGUgdW5kZXJseWluZyBgZmlscF9jbG9zZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgZmlscF9jbG9zZWAgd2hpY2ggaXMgYSBsb3dlciBsZXZlbCBjYWxsIGFuZCB0aGUgc3lzdGVtIGNhbGwgaXRzZWxmLCBgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKWAuIFRoZSBrZXkgbGllcyBpbiBob3cgdGhleSBoYW5kbGUgdGhlIHJldHVybiB2YWx1ZSBhZnRlciBgZmlscF9mbHVzaGAuCgpJbiB0aGUgb3JpZ2luYWwgYGNsb3NlYCBpbXBsZW1lbnRhdGlvbiwgaWYgYGZpbHBfZmx1c2hgIHJldHVybmVkIGFuICYjMzQ7aW50ZXJydXB0aWJsZSYjMzQ7IGVycm9yIGNvZGUgbGlrZSBgLUVSRVNUQVJUU1lTYCwgdGhlIHN5c3RlbSBjYWxsIHdhcyBzZXQgdG8gYC1FSU5UUmAsIGFuZCB0aGF0IHdhcyByZXR1cm5lZCB0byB1c2Vyc3BhY2UuIFRoaXMgaW1wbGllZCB0aGF0IHRoZSB1c2VyIHByb2dyYW0gY291bGQgcmV0cnkgdGhlIGBjbG9zZWAgb3BlcmF0aW9uLgoKSG93ZXZlciwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIGdhbWUuIE5vdywgaWYgYGZpbHBfZmx1c2hgIHJldHVybnMgYW55IG9mIHRob3NlIGludGVycnVwdGlibGUgZXJyb3JzLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBzeXN0ZW0gY2FsbCBpcyBzZXQgdG8gKnplcm8qISBUaGUgcmVhc29uIGZvciB0aGlzIGlzIGNydWNpYWwsIGFuZCBpdCBhbGlnbnMgd2l0aCBQT1NJWCBzdGFuZGFyZHMsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBhZGRyZXNzZXMgYSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gTGludXgmIzM5O3Mga2VybmVsIGRlc2lnbi4KCkJlY2F1c2UgaW4gTGludXgsIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMsIGVzc2VudGlhbGx5LCBkZWFsbG9jYXRlZCAqYmVmb3JlKiB0aGUgZmx1c2ggb3BlcmF0aW9uIGNvbXBsZXRlcywgcmV0cnlpbmcgYGNsb3NlYCBhZnRlciBhbiBpbnRlcnJ1cHQgd291bGQgYmUgZGlzYXN0cm91cy4gQSB1c2VyIHByb2dyYW0gcmV0cnlpbmcgYGNsb3NlYCBtaWdodCBhY2NpZGVudGFsbHkgY2xvc2UgYSBmaWxlIGRlc2NyaXB0b3IgYmVsb25naW5nIHRvIGEgKmRpZmZlcmVudCogZmlsZSBvciBwcm9jZXNzLiBUaGlzIGlzIGJlY2F1c2UgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuICYjMzQ7ZnJlZWQmIzM0OyBhbmQgbWF5IGJlIHJlLXVzZWQhIFRoaXMgbGVhZHMgdG8gZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSBicmVhY2hlcywgYW5kIHVuZGVmaW5lZCBiZWhhdmlvcnMuCgpCeSByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIGAtRUlOVFJgLCB0aGUga2VybmVsIGlzIGVzc2VudGlhbGx5IHRlbGxpbmcgdXNlcnNwYWNlLCAmIzM0O0RvbiYjMzk7dCByZXRyeSB0aGlzLiYjMzQ7IFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgZ29uZS4gRXZlcnl0aGluZyBpcyBjbG9zZWQuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgbGlrZWx5IGhhcyBiZWVuIGEgc291cmNlIG9mIHN1YnRsZSBidWdzIGZvciBhIGxvbmcgdGltZSwgYW5kIEkmIzM5O2QgbGlrZSB0byBkaXZlIGludG8gdGhlIExpbnV4IGdpdCBoaXN0b3J5IGFuZCB0aGUgbWFpbGluZyBsaXN0cyB0byBzZWUgaWYgSSBjYW4gZmluZCBtb3JlIGNvbnRleHQgb3IgaW5mb3JtYXRpb24gb24gdGhpcyBwYXRjaC4gVW5kZXJzdGFuZGluZyB0aGUgZGlzY3Vzc2lvbnMgYXJvdW5kIHRoaXMgY2hhbmdlIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jPTE0OTY9U1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxuLS1cbmZzL29wZW4uYy0xNTE2LVx0LypcbmZzL29wZW4uYzoxNTE3Olx0ICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWRcbmZzL29wZW4uYy0xNTE4LVx0ICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBgY2xvc2VgIFN5c3RlbSBDYWxsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgIGluIGBmcy9vcGVuLmNgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8KCkkgbmVlZCB0byBhcHBseSB0aGUgdHJpYWdlIHBoaWxvc29waHkuIFRoZSBnb2FsIGlzIHRvIGZpbmQgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MgYW5kIG5ldyBhc3NlcnRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGNhcmVmdWxseS4KCkJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIGZ1enppbmcgaXMgb25seSBhcHBsaWNhYmxlIGZvciByZWFjaGFibGUgY29kZS4KClNlY3Rpb24gMiBwcm92aWRlcyB0aGUgKm5lZ2F0aXZlIGNyaXRlcmlhKiwgdGVsbGluZyB1cyB3aGVuICpub3QqIHRvIGZ1enouIExldCBtZSByZXZpZXcgdGhhdDogaXQgc2F5cyAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXMmIzM0Oy4gVGhlc2UgYXJlOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIFRoaXMgZG9lc24mIzM5O3Qgc2VlbSB0byBmaXQgdGhlIGJpbGwuCgpDb252ZXJzZWx5LCBzZWN0aW9uIDMgc3RhdGVzIHRoZSAqcG9zaXRpdmUgY3JpdGVyaWEqOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlJiMzNDsuIFRoaXMgaW5jbHVkZXMgY29yZSBzdWJzeXN0ZW1zLCByZWZhY3RvcmluZ3MsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgb3IgcmVhY2hhYmxlIGRyaXZlcnMvcHJvdG9jb2xzLiBBbmQgZ3Vlc3Mgd2hhdD8gVGhpcyBjbGVhcmx5IGFmZmVjdHMgYSBjb3JlIHN1YnN5c3RlbTogVkZTIGFuZCBzeXNjYWxsIGhhbmRsaW5nISBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIHRoZSBuZXh0IHF1ZXN0aW9uOiB3aGF0IGFib3V0IGBGb2N1c1N5bWJvbHNgPyBJIG5lZWQgdG8gZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRvIGd1aWRlIHRoZSBmdXp6ZXIgZWZmZWN0aXZlbHksIHBlciBTZWN0aW9uIDQuIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMgYW5kIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy4KClRoZSBpbW1lZGlhdGUgdGhvdWdodCBpczogaXNuJiMzOTt0IGBjbG9zZWAgKnViaXF1aXRvdXMqPyBTeXprYWxsZXIgdXNlcyBgY2xvc2VgIGNvbnN0YW50bHkuIEl0cyBleGVjdXRvciBjYWxscyBpdCBkdXJpbmcgdGVhcmRvd24gYW5kIGJldHdlZW4gc3lzY2FsbHMuIFdhaXQsIHRoZSAqbW9kaWZpZWQqIGNvZGUgaXMgKm9ubHkqIGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpYC4gT2theSwgc28gd2hpY2ggc3ltYm9sIGRvZXMgdGhpcyBkZWZpbmUgb24gYW1kNjQ/IFRoaXMgaXMgYSBxdWVzdGlvbiBmb3IgdGhlIGtlcm5lbCBzb3VyY2Ugb3IgZ3JlcCBmb3IgaG93IFNZU0NBTExfREVGSU5FIGlzIGltcGxlbWVudGVkIG9yIHN5bWJvbHMgaW4gb3Blbi5jLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZG9fc3lzX2Nsb3NlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBjbG9zZWAgU3lzdGVtIENhbGwgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBgY2xvc2VgIHN5c3RlbSBjYWxsIGlzIGltcGxlbWVudGVkLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgLi4uKWAgaXMgZXhwYW5kZWQgdXNpbmcgYSBtYWNyby4gVGhhdCBtYWNybywgZnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgaXMgbGlrZWx5IHRvIGJlIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBhc3BlY3RzIG9mIGhvdyB0aGUgY2FsbCBmdW5jdGlvbnMuIE5vdywgdGhhdCBtYWNybyBleHBhbmRzIHRvIGZ1bmN0aW9ucyBjYWxsZWQgYF9fZG9fc3lzX2Nsb3NlYCwgYW5kIGBfX3g2NF9zeXNfY2xvc2VgLiBJdCBzZWVtcyBsaWtlIHRoZXJlIG1pZ2h0IGFsc28gYmUgYW4gYF9fc2Vfc3lzX2Nsb3NlYCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBvciBjb25maWd1cmF0aW9uLCBidXQgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhhdCBhc2lkZSBmb3Igbm93LgoKTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8ganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhgIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGF0IGBTWVNDQUxMX0RFRklORWAgbWFjcm8gaXMgYWN0dWFsbHkgZGVmaW5lZC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIGFyZ3VtZW50cywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3Mgc3lzdGVtIGNhbGwgdGFibGUsIGFuZCBpZiBpdCYjMzk7cyBoYW5kbGluZyBhbnkgc3BlY2lmaWMgY29udGV4dCBzd2l0Y2hpbmcgb3Igc2VjdXJpdHkgYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIFNZU0NBTExfREVGSU5FMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg9MjExPXN0YXRpYyBpbmxpbmUgaW50IGlzX3N5c2NhbGxfdHJhY2VfZXZlbnQoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKnRwX2V2ZW50KVxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMjQtXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjI1OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUxKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDEsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIyNi0jZGVmaW5lIFNZU0NBTExfREVGSU5FMihuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgyLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgY2xvc2VgIFN5c3RlbSBDYWxsIGZvciBGb2N1c2VkIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gT24geDg2XzY0LCBgX19kb19zeXNfY2xvc2VgIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gYm9keSwgd2hpbGUgYF9feDY0X3N5c19jbG9zZWAgKG9yIG1heWJlIGBfX3NlX3N5c19jbG9zZWApIGFjdHMgYXMgdGhlIGVudHJ5IHBvaW50IHdyYXBwZXIuIEEga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGBGb2N1c1N5bWJvbHNgIGluIHRoZSBzY2hlbWEgZm9yIGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBzY2hlbWEgc2F5cyAmIzM0O1NwZWNpZmljLCBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIGZ1enppbmcgb24uJiMzNDsgICYjMzQ7bm9uLXViaXF1aXRvdXMmIzM0OyBpcyBpbXBvcnRhbnQhICBJdCBhbHNvIGV4cGxpY2l0bHkgd2FybnMgdG8gJiMzNDtBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFMsJiMzNDsgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbS4gIFRoYXQgaW5jbHVkZXMgYWxsb2NhdG9ycywgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuICBUaGlzIGlzIHRvIGF2b2lkIGRpbHV0aW5nIHRoZSBmdXp6aW5nIGVmZm9ydC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyBgX19kb19zeXNfY2xvc2VgIG9yIGBfX3g2NF9zeXNfY2xvc2VgIGEgdWJpcXVpdG91cyBmdW5jdGlvbj8gRG9lcyAqYWxtb3N0KiBldmVyeSBwcm9ncmFtIGNhbGwgYGNsb3NlYCBpbiB0aGUgU3l6a2FsbGVyIGNvbnRleHQ/ICBSZW1lbWJlciwgU3l6a2FsbGVyIGdlbmVyYXRlcyBhbmQgZXhlY3V0ZXMgc3l6bGFuZyBwcm9ncmFtcy4gIFRoZXNlIHByb2dyYW1zIGdlbmVyYXRlIHNlcXVlbmNlcyBvZiBzeXNjYWxscy4gTWFueSBvcGVuIHNvY2tldHMsIGZpbGUgZGVzY3JpcHRvcnMsIGV0Yy4sIGFuZCwgb2YgY291cnNlLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgZXhwbGljaXQgYGNsb3NlKGZkKWAgY2FsbHMsIGFuZCB0aGUgZXhlY3V0b3IgYWxzbyBjbG9zZXMgZmRzLiAqQnV0KiBpcyBjbGVhbnVwIGJ5IHRoZSBleGVjdXRvciBpdHNlbGYgdHJhY2tlZCBhcyBzeXNjYWxsIGNvdmVyYWdlPyBUaGF0JiMzOTtzIGEgcG9pbnQgb2YgcG90ZW50aWFsIHVuY2VydGFpbnR5LiAgQ3J1Y2lhbGx5LCBzeXpsYW5nICpkb2VzKiBnZW5lcmF0ZSBgY2xvc2VgIHN5c2NhbGxzLgoKTG9va2luZyBhdCB0aGUgJiMzNDt1YmlxdWl0b3VzJiMzNDsgZXhhbXBsZXMsIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGFuZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIGBfX2RvX3N5c19jbG9zZWAgaXNuJiMzOTt0IGFueSBvZiB0aG9zZS4gIEJ1dCwgd2hhdCBhYm91dCB0aGUgYWx0ZXJuYXRpdmUgZ3VpZGFuY2U/ICBUaGUgZG9jdW1lbnRhdGlvbiBhbHNvIHNheXMgdG8gJiMzNDtUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6IExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4mIzM0OwoKQWhhISBUaGUgbG9naWMgKmJlaW5nIGFkZGVkIG9yIGFsdGVyZWQqIGlzICpwcmVjaXNlbHkqIHdpdGhpbiBgX19kb19zeXNfY2xvc2VgIG9yIGBfX3g2NF9zeXNfY2xvc2VgISAgQW5kLCBpcyBpdCBhIGRpcmVjdCBBUEkgZW50cnlwb2ludD8gWWVzISBgX19kb19zeXNfY2xvc2VgIC8gYF9feDY0X3N5c19jbG9zZWAgKmlzKiB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBsb2dpYy4KClNvLCB3aGF0IGFib3V0IGVtcHR5IGBGb2N1c1N5bWJvbHNgPyBJZiBpdCYjMzk7cyBlbXB0eSwgZG9lcyBTeXprYWxsZXIgZm9jdXMgb24gbm90aGluZz8gRG9lcyBpdCBmdXp6IGV2ZXJ5dGhpbmc/IE9yLCBpcyBhbiBlbXB0eSBsaXN0IGludGVycHJldGVkIGRpZmZlcmVudGx5PyBOb3csIGlmIEkgcHV0IGBfX2RvX3N5c19jbG9zZWAgb3IgYF9feDY0X3N5c19jbG9zZWAgaW4gYEZvY3VzU3ltYm9sc2AgdmVyc3VzIGFuIGVtcHR5IGFycmF5IGBbXWA/IFdoYXQgd2lsbCB0aGUgcmVzdWx0IGJlPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIC4uLilgIGRlZmluZXMgdGhlIHN5bWJvbCBuYW1lLiBUaW1lIHRvIGxvb2sgaW50byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3g2NF9zeXNfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYz0zNT1sb25nIHg2NF9zeXNfY2FsbChjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG5yKVxuLS1cbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy0zOC1cdCNpbmNsdWRlIFx1MDAzY2FzbS9zeXNjYWxsc182NC5oXHUwMDNlXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6Mzk6XHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDAtXHR9XG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jPTQ0PWxvbmcgeDMyX3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTQ3LVx0I2luY2x1ZGUgXHUwMDNjYXNtL3N5c2NhbGxzX3gzMi5oXHUwMDNlXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6NDg6XHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDktXHR9XG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jPTg3PV9fdmlzaWJsZSBub2luc3RyIGJvb2wgZG9fc3lzY2FsbF82NChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG5yKVxuLS1cbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy05NS1cdFx0LyogSW52YWxpZCBzeXN0ZW0gY2FsbCwgYnV0IHN0aWxsIGEgc3lzdGVtIGNhbGwuICovXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6OTY6XHRcdHJlZ3MtXHUwMDNlYXggPSBfX3g2NF9zeXNfbmlfc3lzY2FsbChyZWdzKTtcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy05Ny1cdH1cbi0tXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibC03LSNcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsOjg6IyBUaGUgX194NjRfc3lzXyooKSBzdHVicyBhcmUgY3JlYXRlZCBvbi10aGUtZmx5IGZvciBzeXNfKigpIHN5c3RlbSBjYWxsc1xuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtOS0jXG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYz0xMTk9c3RhdGljIGJvb2wgX19lbXVsYXRlX3ZzeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMTctXHRcdC8qIHRoaXMgZGVjb2RlcyByZWdzLVx1MDAzZWRpIGFuZCByZWdzLVx1MDAzZXNpIG9uIGl0cyBvd24gKi9cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM6MjE4Olx0XHRyZXQgPSBfX3g2NF9zeXNfZ2V0dGltZW9mZGF5KHJlZ3MpO1xuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMTktXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjIyLVx0XHQvKiB0aGlzIGRlY29kZXMgcmVncy1cdTAwM2VkaSBvbiBpdHMgb3duICovXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIyMzpcdFx0cmV0ID0gX194NjRfc3lzX3RpbWUocmVncyk7XG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIyNC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMzAtXHRcdC8qIHRoaXMgZGVjb2RlcyByZWdzLVx1MDAzZWRpLCByZWdzLVx1MDAzZXNpIGFuZCByZWdzLVx1MDAzZWR4IG9uIGl0cyBvd24gKi9cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM6MjMxOlx0XHRyZXQgPSBfX3g2NF9zeXNfZ2V0Y3B1KHJlZ3MpO1xuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMzItXHRcdHJlZ3MtXHUwMDNlZHggPSBvcmlnX2R4O1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEwLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTE6ZXh0ZXJuIGxvbmcgX194NjRfc3lzX25pX3N5c2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTItZXh0ZXJuIGxvbmcgX19pYTMyX3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xNi0gKiBzdHJ1Y3QgcHRfcmVncyAqcmVncyBhcyB0aGUgb25seSBhcmd1bWVudCBvZiB0aGUgc3lzY2FsbCBzdHViKHMpIG5hbWVkIGFzOlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTc6ICogX194NjRfc3lzXyooKSAgICAgICAgIC0gNjQtYml0IG5hdGl2ZSBzeXNjYWxsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xOC0gKiBfX2lhMzJfc3lzXyooKSAgICAgICAgLSAzMi1iaXQgbmF0aXZlIHN5c2NhbGwgb3IgY29tbW9uIGNvbXBhdCBzeXNjYWxsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMzMtICpcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjM0OiAqIFx1MDAzY19feDY0X3N5c19yZWN2XHUwMDNlOlx0XHRcdTAwM2MtLSBzeXNjYWxsIHdpdGggNCBwYXJhbWV0ZXJzXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zNS0gKlx0Y2FsbHFcdFx1MDAzY19fZmVudHJ5X19cdTAwM2Vcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0yNTktICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoyNjA6bG9uZyBfX3g2NF9zeXNfZ2V0Y3B1KGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjI2MTpsb25nIF9feDY0X3N5c19nZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYyOmxvbmcgX194NjRfc3lzX3RpbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMjYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkyNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gU3lzdGVtIENhbGwgV3JhcHBlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGVzZSB4ODYgc3lzdGVtIGNhbGxzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgaW5jbHVkZTogYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lcyByb3VnaGx5IGJldHdlZW4gMjUgYW5kIDUwLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0eXBpY2FsIGVudHJ5IHBvaW50IGRlZmluaXRpb25zIG9yIHNvbWUgY3J1Y2lhbCBtYWNybyBleHBhbnNpb25zIHJlbGF0ZWQgdG8gdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBpbiB0aGF0IHJlZ2lvbi4gUHJvYmFibHkgc29tZSBrZXkgaW5saW5lIGFzc2VtYmx5LCBwZXJoYXBzIHNvbWUgbG9naWMgZm9yIGFyZ3VtZW50IHBhc3NpbmcsIG9yIG1heWJlIGV2ZW4gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIHZpc3VhbCBvbiBob3cgdGhlIGFyY2hpdGVjdHVyZSBicmlkZ2VzIHRoZSBnYXAgdG8gdGhlIGtlcm5lbCBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHQgKlxuICAyNjpcdCAqIFRoZSBzdHViIHRoZW4gcGFzc2VzIHRoZSBkZWNvZGVkIGFyZ3VtZW50cyB0byB0aGUgX19zZV9zeXNfKigpIHdyYXBwZXIgdG9cbiAgMjc6XHQgKiBwZXJmb3JtIHNpZ24tZXh0ZW5zaW9uIChvbWl0dGVkIGZvciB6ZXJvLWFyZ3VtZW50IHN5c2NhbGxzKS4gIEZpbmFsbHkgdGhlXG4gIDI4Olx0ICogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIF9fZG9fc3lzXyooKSBmdW5jdGlvbiB3aGljaCBpcyB0aGUgYWN0dWFsXG4gIDI5Olx0ICogc3lzY2FsbC4gIFRoZXNlIHdyYXBwZXJzIGFyZSBtYXJrZWQgYXMgaW5saW5lIHNvIHRoZSBjb21waWxlciBjYW4gb3B0aW1pemVcbiAgMzA6XHQgKiB0aGUgZnVuY3Rpb25zIHdoZXJlIGFwcHJvcHJpYXRlLlxuICAzMTpcdCAqXG4gIDMyOlx0ICogRXhhbXBsZSBhc3NlbWJseSAoc2xpZ2h0bHkgcmUtb3JkZXJlZCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5KTpcbiAgMzM6XHQgKlxuICAzNDpcdCAqIFx1MDAzY19feDY0X3N5c19yZWN2XHUwMDNlOlx0XHRcdTAwM2MtLSBzeXNjYWxsIHdpdGggNCBwYXJhbWV0ZXJzXG4gIDM1Olx0ICpcdGNhbGxxXHRcdTAwM2NfX2ZlbnRyeV9fXHUwMDNlXG4gIDM2Olx0ICpcbiAgMzc6XHQgKlx0bW92XHQweDcwKCVyZGkpLCVyZGlcdFx1MDAzYy0tIGRlY29kZSByZWdzLVx1MDAzZWRpXG4gIDM4Olx0ICpcdG1vdlx0MHg2OCglcmRpKSwlcnNpXHRcdTAwM2MtLSBkZWNvZGUgcmVncy1cdTAwM2VzaVxuICAzOTpcdCAqXHRtb3ZcdDB4NjAoJXJkaSksJXJkeFx0XHUwMDNjLS0gZGVjb2RlIHJlZ3MtXHUwMDNlZHhcbiAgNDA6XHQgKlx0bW92XHQweDM4KCVyZGkpLCVyY3hcdFx1MDAzYy0tIGRlY29kZSByZWdzLVx1MDAzZXIxMFxuICA0MTpcdCAqXG4gIDQyOlx0ICpcdHhvclx0JXI5ZCwlcjlkXHRcdTAwM2MtLSBjbGVhciAlcjlcbiAgNDM6XHQgKlx0eG9yXHQlcjhkLCVyOGRcdFx1MDAzYy0tIGNsZWFyICVyOFxuICA0NDpcdCAqXG4gIDQ1Olx0ICpcdGNhbGxxXHRfX3N5c19yZWN2ZnJvbVx0XHUwMDNjLS0gZG8gdGhlIGFjdHVhbCB3b3JrIGluIF9fc3lzX3JlY3Zmcm9tKClcbiAgNDY6XHQgKlx0XHRcdFx0ICAgIHdoaWNoIHRha2VzIDYgYXJndW1lbnRzXG4gIDQ3Olx0ICpcbiAgNDg6XHQgKlx0Y2x0cVx0XHRcdFx1MDAzYy0tIGV4dGVuZCByZXR1cm4gdmFsdWUgdG8gNjQtYml0XG4gIDQ5Olx0ICpcdHJldHFcdFx0XHRcdTAwM2MtLSByZXR1cm5cbiAgNTA6XHQgKlxuICA1MTpcdCAqIFRoaXMgYXBwcm9hY2ggYXZvaWRzIGxlYWtpbmcgcmFuZG9tIHVzZXItcHJvdmlkZWQgcmVnaXN0ZXIgY29udGVudCBkb3duXG4gIDUyOlx0ICogdGhlIGNhbGwgY2hhaW4uXG4gIDUzOlx0ICovXG4gIDU0Olx0XG4gIDU1Olx0LyogTWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycyBmb3Igc3lzY2FsbHMgb24geDg2LTY0IGFuZCB4MzIgKi9cbiAgNTY6XHQjZGVmaW5lIFNDX1g4Nl82NF9SRUdTX1RPX0FSR1MoeCwgLi4uKVx0XHRcdFx0XHRcXFxuICA1NzpcdFx0X19NQVAoeCxfX1NDX0FSR1NcdFx0XHRcdFx0XHRcXFxuICA1ODpcdFx0XHQsLHJlZ3MtXHUwMDNlZGksLHJlZ3MtXHUwMDNlc2ksLHJlZ3MtXHUwMDNlZHhcdFx0XHRcdFxcXG4gIDU5Olx0XHRcdCwscmVncy1cdTAwM2VyMTAsLHJlZ3MtXHUwMDNlcjgsLHJlZ3MtXHUwMDNlcjkpXHRcdFx0XFxcbiAgNjA6XHRcbiAgNjE6XHRcbiAgNjI6XHQvKiBTWVNDQUxMX1BUX0FSR1MgaXMgQWRhcHRlZCBmcm9tIHMzOTB4ICovXG4gIDYzOlx0I2RlZmluZSBTWVNDQUxMX1BUX0FSRzYobSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NilcdFx0XHRcXFxuICA2NDpcdFx0U1lTQ0FMTF9QVF9BUkc1KG0sIHQxLCB0MiwgdDMsIHQ0LCB0NSksIG0odDYsIChyZWdzLVx1MDAzZWJwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MjUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIGZvciBDbG9zaW5nIEZpbGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYF9feDY0X3N5c19jbG9zZWAgc3lzdGVtIGNhbGwuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGRvZXMgaXQgZGVsZWdhdGUgdGhlIHdvcmsgZGlyZWN0bHkgdG8gYF9fZG9fc3lzX2Nsb3NlYCwgb3IgaXMgdGhlIGZ1bmN0aW9uYWxpdHkgaW5saW5lZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgYXMgdGhhdCBpbXBhY3RzIHRoaW5ncyBkb3duIHRoZSBsaW5lLiBUbyBnZXQgdGhlIGFuc3dlciwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4KCkkmIzM5O20gcHJldHR5IHN1cmUgdGhlIGFuc3dlciBpcyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBsb2NhdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBuZWFyIHRoZSBkZWZpbml0aW9uLCBzbyBJJiMzOTtsbCBjaGVjayBsaW5lcyA4MCB0aHJvdWdoIDEyMCBvZiB0aGF0IGZpbGUgdG8gYmUgc3VyZS4gVGhhdCByYW5nZSBzaG91bGQgY292ZXIgdGhlIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIGNsb3NlIHN5c2NhbGwgd3JhcHBlci4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZCBhbmQgd2hldGhlciB0aGVyZSBpcyBhbnkgaW5saW5pbmcgb2YgdGhlIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0LyogTWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycyBmb3Igc3lzY2FsbHMgb24gaTM4NiAqL1xuICA4MTpcdCNkZWZpbmUgU0NfSUEzMl9SRUdTX1RPX0FSR1MoeCwgLi4uKVx0XHRcdFx0XHRcXFxuICA4MjpcdFx0U1lTQ0FMTF9QVF9BUkdTKHgsIF9fU0NfQ09NUEFUX0NBU1QsXHRcdFx0XHRcXFxuICA4MzpcdFx0XHRcdF9fTUFQKHgsIF9fU0NfVFlQRSwgX19WQV9BUkdTX18pKVx0XHRcXFxuICA4NDpcdFxuICA4NTpcdCNkZWZpbmUgX19TWVNfU1RVQjAoYWJpLCBuYW1lKVx0XHRcdFx0XHRcdFxcXG4gIDg2Olx0XHRsb25nIF9fIyNhYmkjI18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1x0XHRcXFxuICA4NzpcdFx0QUxMT1dfRVJST1JfSU5KRUNUSU9OKF9fIyNhYmkjI18jI25hbWUsIEVSUk5PKTtcdFx0XHRcXFxuICA4ODpcdFx0bG9uZyBfXyMjYWJpIyNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVx0XHRcXFxuICA4OTpcdFx0XHRfX2FsaWFzKF9fZG9fIyNuYW1lKTtcbiAgOTA6XHRcbiAgOTE6XHQjZGVmaW5lIF9fU1lTX1NUVUJ4KGFiaSwgbmFtZSwgLi4uKVx0XHRcdFx0XHRcXFxuICA5MjpcdFx0bG9uZyBfXyMjYWJpIyNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcdFx0XFxcbiAgOTM6XHRcdEFMTE9XX0VSUk9SX0lOSkVDVElPTihfXyMjYWJpIyNfIyNuYW1lLCBFUlJOTyk7XHRcdFx0XFxcbiAgOTQ6XHRcdGxvbmcgX18jI2FiaSMjXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcdFx0XFxcbiAgOTU6XHRcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgOTY6XHRcdFx0cmV0dXJuIF9fc2VfIyNuYW1lKF9fVkFfQVJHU19fKTtcdFx0XHRcXFxuICA5NzpcdFx0fVxuICA5ODpcdFxuICA5OTpcdCNkZWZpbmUgX19DT05EX1NZU0NBTEwoYWJpLCBuYW1lKVx0XHRcdFx0XHRcXFxuIDEwMDpcdFx0X193ZWFrIGxvbmcgX18jI2FiaSMjXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpO1x0XFxcbiAxMDE6XHRcdF9fd2VhayBsb25nIF9fIyNhYmkjI18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKl9fdW51c2VkKVx0XFxcbiAxMDI6XHRcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAxMDM6XHRcdFx0cmV0dXJuIHN5c19uaV9zeXNjYWxsKCk7XHRcdFx0XHRcXFxuIDEwNDpcdFx0fVxuIDEwNTpcdFxuIDEwNjpcdCNpZmRlZiBDT05GSUdfWDg2XzY0XG4gMTA3Olx0I2RlZmluZSBfX1g2NF9TWVNfU1RVQjAobmFtZSlcdFx0XHRcdFx0XHRcXFxuIDEwODpcdFx0X19TWVNfU1RVQjAoeDY0LCBzeXNfIyNuYW1lKVxuIDEwOTpcdFxuIDExMDpcdCNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFx0XFxcbiAxMTE6XHRcdF9fU1lTX1NUVUJ4KHg2NCwgc3lzIyNuYW1lLFx0XHRcdFx0XHRcXFxuIDExMjpcdFx0XHQgICAgU0NfWDg2XzY0X1JFR1NfVE9fQVJHUyh4LCBfX1ZBX0FSR1NfXykpXG4gMTEzOlx0XG4gMTE0Olx0I2RlZmluZSBfX1g2NF9DT05EX1NZU0NBTEwobmFtZSlcdFx0XHRcdFx0XFxcbiAxMTU6XHRcdF9fQ09ORF9TWVNDQUxMKHg2NCwgc3lzXyMjbmFtZSlcbiAxMTY6XHRcbiAxMTc6XHQjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovXG4gMTE4Olx0I2RlZmluZSBfX1g2NF9TWVNfU1RVQjAobmFtZSlcbiAxMTk6XHQjZGVmaW5lIF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCAuLi4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTkwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgU3lzdGVtIENhbGwgV3JhcHBlcioqCgpPa2F5LCBzbyBgX19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsIC4uLilgIGRlZmluZXMgdGhlIHN5c3RlbSBjYWxsIHN0dWJzLCBsaWtlIGBfX3g2NF9zeXNfY2xvc2VgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBub3cgaXM6IFdoYXQgZnVuY3Rpb24gaXMgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9mIGBfX3NlX3N5c19jbG9zZWA/IFNpbmNlIEkmIzM5O20gd29ya2luZyB3aXRoIGEgc3lzdGVtIGNhbGwgb24geDg2LTY0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JhcHBlci4gVGltZSB0byBqdW1wIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYCwgbGluZXMgMTIwIHRocm91Z2ggMTcwLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIHdoZW4gYF9fc2Vfc3lzX2Nsb3NlYCBpcyBoaXQuIEkgbmVlZCB0byB1bnJhdmVsIHRoaXMgc3BlY2lmaWMgc3R1YiB0byB1bmRlcnN0YW5kIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHQjZGVmaW5lIF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxuIDEyMTpcdCNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovXG4gMTIyOlx0XG4gMTIzOlx0I2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgfHwgZGVmaW5lZChDT05GSUdfSUEzMl9FTVVMQVRJT04pXG4gMTI0Olx0I2RlZmluZSBfX0lBMzJfU1lTX1NUVUIwKG5hbWUpXHRcdFx0XHRcdFx0XFxcbiAxMjU6XHRcdF9fU1lTX1NUVUIwKGlhMzIsIHN5c18jI25hbWUpXG4gMTI2Olx0XG4gMTI3Olx0I2RlZmluZSBfX0lBMzJfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFx0XFxcbiAxMjg6XHRcdF9fU1lTX1NUVUJ4KGlhMzIsIHN5cyMjbmFtZSxcdFx0XHRcdFx0XFxcbiAxMjk6XHRcdFx0ICAgIFNDX0lBMzJfUkVHU19UT19BUkdTKHgsIF9fVkFfQVJHU19fKSlcbiAxMzA6XHRcbiAxMzE6XHQjZGVmaW5lIF9fSUEzMl9DT05EX1NZU0NBTEwobmFtZSlcdFx0XHRcdFx0XFxcbiAxMzI6XHRcdF9fQ09ORF9TWVNDQUxMKGlhMzIsIHN5c18jI25hbWUpXG4gMTMzOlx0XG4gMTM0Olx0I2Vsc2UgLyogQ09ORklHX1g4Nl8zMiB8fCBDT05GSUdfSUEzMl9FTVVMQVRJT04gKi9cbiAxMzU6XHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQjAobmFtZSlcbiAxMzY6XHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxuIDEzNzpcdCNkZWZpbmUgX19JQTMyX0NPTkRfU1lTQ0FMTChuYW1lKVxuIDEzODpcdCNlbmRpZiAvKiBDT05GSUdfWDg2XzMyIHx8IENPTkZJR19JQTMyX0VNVUxBVElPTiAqL1xuIDEzOTpcdFxuIDE0MDpcdCNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT05cbiAxNDE6XHQvKlxuIDE0MjpcdCAqIEZvciBJQTMyIGVtdWxhdGlvbiwgd2UgbmVlZCB0byBoYW5kbGUgXCYjMzQ7Y29tcGF0XCYjMzQ7IHN5c2NhbGxzICphbmQqIGNyZWF0ZVxuIDE0MzpcdCAqIGFkZGl0aW9uYWwgd3JhcHBlcnMgKGFwdGx5IG5hbWVkIF9faWEzMl9zeXNfeHl6enkpIHdoaWNoIGRlY29kZSB0aGVcbiAxNDQ6XHQgKiBpYTMyIHJlZ3MgaW4gdGhlIHByb3BlciBvcmRlciBmb3Igc2hhcmVkIG9yIFwmIzM0O2NvbW1vblwmIzM0OyBzeXNjYWxscy4gQXMgc29tZVxuIDE0NTpcdCAqIHN5c2NhbGxzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQsIHdlIG5lZWQgdG8gZXhwYW5kIENPTkRfU1lTQ0FMTCBpblxuIDE0NjpcdCAqIGtlcm5lbC9zeXNfbmkuYyB0byBjb3ZlciB0aGlzIGNhc2UgYXMgd2VsbC5cbiAxNDc6XHQgKi9cbiAxNDg6XHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXHRcdFx0XHRcdFxcXG4gMTQ5Olx0XHRfX1NZU19TVFVCMChpYTMyLCBjb21wYXRfc3lzXyMjbmFtZSlcbiAxNTA6XHRcbiAxNTE6XHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFxcXG4gMTUyOlx0XHRfX1NZU19TVFVCeChpYTMyLCBjb21wYXRfc3lzIyNuYW1lLFx0XHRcdFx0XFxcbiAxNTM6XHRcdFx0ICAgIFNDX0lBMzJfUkVHU19UT19BUkdTKHgsIF9fVkFfQVJHU19fKSlcbiAxNTQ6XHRcbiAxNTU6XHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfQ09ORF9TWVNDQUxMKG5hbWUpXHRcdFx0XHRcXFxuIDE1NjpcdFx0X19DT05EX1NZU0NBTEwoaWEzMiwgY29tcGF0X3N5c18jI25hbWUpXG4gMTU3Olx0XG4gMTU4Olx0I2Vsc2UgLyogQ09ORklHX0lBMzJfRU1VTEFUSU9OICovXG4gMTU5Olx0I2RlZmluZSBfX0lBMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVxuIDE2MDpcdCNkZWZpbmUgX19JQTMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxuIDE2MTpcdCNkZWZpbmUgX19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcbiAxNjI6XHQjZW5kaWYgLyogQ09ORklHX0lBMzJfRU1VTEFUSU9OICovXG4gMTYzOlx0XG4gMTY0Olx0XG4gMTY1Olx0I2lmZGVmIENPTkZJR19YODZfWDMyX0FCSVxuIDE2NjpcdC8qXG4gMTY3Olx0ICogRm9yIHRoZSB4MzIgQUJJLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHN0dWIgZm9yIGNvbXBhdF9zeXNfKigpIHdoaWNoIGlzIGF3YXJlXG4gMTY4Olx0ICogb2YgdGhlIHg4Ni02NC1zdHlsZSBwYXJhbWV0ZXIgb3JkZXJpbmcgb2YgeDMyIHN5c2NhbGxzLiBUaGUgc3lzY2FsbHMgY29tbW9uXG4gMTY5Olx0ICogd2l0aCB4ODZfNjQgb2J2aW91c2x5IGRvIG5vdCBuZWVkIHN1Y2ggY2FyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMTgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGVjb2RpbmcgVGhpcyBTeXN0ZW0gQ2FsbCBTdHViKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsIC4uLilgIG1hY3JvLiBJdCYjMzk7cyBjbGVhcmx5IGEgc3lzdGVtIGNhbGwgc3R1YiBnZW5lcmF0b3IgZm9yIHg2NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgYHN5cyMjbmFtZWAgcGFydCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBkZWZpbmluZyB0aGUgZW50cnkgcG9pbnQgZm9yIGEgc3BlY2lmaWMgc3lzdGVtIGNhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHdvcmtzIGludGVybmFsbHksIGFuZCBmcm9tIHRoZSBzdHViLCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHN0dWIgY2FsbHMgYF9fc2Vfc3lzX2Nsb3NlKC4uLilgLiBOb3cgdGhhdCBJIGtub3cgd2hlcmUgaXQgY2FsbHMgdG8sIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgZG9lcy4gU28sIHdoZXJlIGlzIGBfX3NlX3N5c19jbG9zZWAgZGVmaW5lZD8gSXQgc2hvdWxkIGJlIGluIHRoZSBoZWFkZXJzLCBJJiMzOTttIGd1ZXNzaW5nLiBMZXQgbWUgY2hlY2sgbGluZXMgMTkwIHRvIDI1MCBvZiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvciBkZWZpbml0aW9uIG9mIGhvdyB0aGlzIHNlY3VyZSBzeXN0ZW0gY2FsbCBjbG9zZSBpcyBoYW5kbGVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHQgKiBDb21wYXQgbWVhbnMgSUEzMl9FTVVMQVRJT04gYW5kL29yIFg4Nl9YMzIuIEFzIHRoZXkgdXNlIGEgZGlmZmVyZW50XG4gMTkxOlx0ICogbWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycywgd2UgbmVlZCB0byBnZW5lcmF0ZSBzdHVicyBmb3IgZWFjaFxuIDE5MjpcdCAqIG9mIHRoZW0uXG4gMTkzOlx0ICovXG4gMTk0Olx0I2RlZmluZSBDT01QQVRfU1lTQ0FMTF9ERUZJTkUwKG5hbWUpXHRcdFx0XHRcdFxcXG4gMTk1Olx0XHRzdGF0aWMgbG9uZ1x0XHRcdFx0XHRcdFx0XFxcbiAxOTY6XHRcdF9fZG9fY29tcGF0X3N5c18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKl9fdW51c2VkKTtcdFx0XFxcbiAxOTc6XHRcdF9fSUEzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXHRcdFx0XHRcdFxcXG4gMTk4Olx0XHRfX1gzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXHRcdFx0XHRcdFxcXG4gMTk5Olx0XHRzdGF0aWMgbG9uZ1x0XHRcdFx0XHRcdFx0XFxcbiAyMDA6XHRcdF9fZG9fY29tcGF0X3N5c18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKl9fdW51c2VkKVxuIDIwMTpcdFxuIDIwMjpcdCNkZWZpbmUgQ09NUEFUX1NZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pXHRcdFx0XHRcdFxcXG4gMjAzOlx0XHRzdGF0aWMgbG9uZyBfX3NlX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKTtcdFxcXG4gMjA0Olx0XHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSk7XFxcbiAyMDU6XHRcdF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVx0XHRcdFx0XFxcbiAyMDY6XHRcdF9fWDMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgX19WQV9BUkdTX18pXHRcdFx0XHRcXFxuIDIwNzpcdFx0c3RhdGljIGxvbmcgX19zZV9jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcdFxcXG4gMjA4Olx0XHR7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAyMDk6XHRcdFx0cmV0dXJuIF9fZG9fY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVMT1VTRSxfX1ZBX0FSR1NfXykpO1xcXG4gMjEwOlx0XHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAyMTE6XHRcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKVxuIDIxMjpcdFxuIDIxMzpcdC8qXG4gMjE0Olx0ICogQXMgc29tZSBjb21wYXQgc3lzY2FsbHMgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCwgd2UgbmVlZCB0byBleHBhbmRcbiAyMTU6XHQgKiBDT05EX1NZU0NBTExfQ09NUEFUIGluIGtlcm5lbC9zeXNfbmkuYyB0byBjb3ZlciB0aGlzIGNhc2UgYXMgd2VsbC5cbiAyMTY6XHQgKi9cbiAyMTc6XHQjZGVmaW5lIENPTkRfU1lTQ0FMTF9DT01QQVQobmFtZSkgXHRcdFx0XHRcdFxcXG4gMjE4Olx0XHRfX0lBMzJfQ09NUEFUX0NPTkRfU1lTQ0FMTChuYW1lKVx0XHRcdFx0XFxcbiAyMTk6XHRcdF9fWDMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcbiAyMjA6XHRcbiAyMjE6XHQjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqL1xuIDIyMjpcdFxuIDIyMzpcdCNkZWZpbmUgX19TWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKVx0XHRcdFx0XHRcXFxuIDIyNDpcdFx0c3RhdGljIGxvbmcgX19zZV9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKTtcdFxcXG4gMjI1Olx0XHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKTtcXFxuIDIyNjpcdFx0X19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVx0XHRcdFx0XFxcbiAyMjc6XHRcdF9fSUEzMl9TWVNfU1RVQngoeCwgbmFtZSwgX19WQV9BUkdTX18pXHRcdFx0XHRcXFxuIDIyODpcdFx0c3RhdGljIGxvbmcgX19zZV9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKVx0XFxcbiAyMjk6XHRcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAyMzA6XHRcdFx0bG9uZyByZXQgPSBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfQ0FTVCxfX1ZBX0FSR1NfXykpO1xcXG4gMjMxOlx0XHRcdF9fTUFQKHgsX19TQ19URVNULF9fVkFfQVJHU19fKTtcdFx0XHRcdFxcXG4gMjMyOlx0XHRcdF9fUFJPVEVDVCh4LCByZXQsX19NQVAoeCxfX1NDX0FSR1MsX19WQV9BUkdTX18pKTtcdFxcXG4gMjMzOlx0XHRcdHJldHVybiByZXQ7XHRcdFx0XHRcdFx0XFxcbiAyMzQ6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAyMzU6XHRcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpXG4gMjM2Olx0XG4gMjM3Olx0LypcbiAyMzg6XHQgKiBBcyB0aGUgZ2VuZXJpYyBTWVNDQUxMX0RFRklORTAoKSBtYWNybyBkb2VzIG5vdCBkZWNvZGUgYW55IHBhcmFtZXRlcnMgZm9yXG4gMjM5Olx0ICogb2J2aW91cyByZWFzb25zLCBhbmQgcGFzc2luZyBzdHJ1Y3QgcHRfcmVncyAqcmVncyB0byBpdCBpbiAlcmRpIGRvZXMgbm90XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzM2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGNsb3NlYCBTeXNjYWxsIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBgY2xvc2VgIHN5c2NhbGwuIFRoZSBjb2RlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYF9fZG9fc3lzX2Nsb3NlYCwgYF9fc2Vfc3lzX2Nsb3NlYCwgYW5kIHVsdGltYXRlbHksIGBfX3g2NF9zeXNfY2xvc2VgLCB3aGljaCBpcyB0aGUgdmlzaWJsZSBzeW1ib2wgaW4gYHZtbGludXhgIGZvciBhbWQ2NCAoYW5kIGBfX2lhMzJfc3lzX2Nsb3NlYCBpZiBpYTMyIGlzIGVuYWJsZWQpLiBgX19kb19zeXNfY2xvc2VgIGlzIGBzdGF0aWMgaW5saW5lYCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLiBUaGUgcGF0Y2ggaXRzZWxmIGp1c3QgdG91Y2hlcyB0aGUgYGNsb3NlYCBzeXNjYWxsIGluIGBmcy9vcGVuLmNgLiBJJiMzOTt2ZSBjaGVja2VkIHRoZSBjb2RlLCBhbmQgdGhlcmUgYXJlIG5vIG90aGVyIGZ1bmN0aW9ucyBhZmZlY3RlZC4KCk15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCBgX194NjRfc3lzX2Nsb3NlYCBpcyBjb25zaWRlcmVkIGEgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aC4mIzM0OyBUaGUgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IHNheXMgdG8gKmF2b2lkKiBsaXN0aW5nIHRoZXNlLCBhcyBpdCBkaWx1dGVzIHRoZSBmdXp6aW5nIGVmZm9ydCBieSB0YXJnZXRpbmcgdG9vIG1hbnkgdW5yZWxhdGVkIHRlc3RzLiBCdXQgKmV2ZXJ5KiBwcm9ncmFtIGluIHRoZSBzeXprYWxsZXIgY29ycHVzIGFsbW9zdCBjZXJ0YWlubHkgaGFzIGEgY2FsbCB0byBgY2xvc2VgLiBPciBkb2VzIGl0PyBPa2F5LCBtYXliZSBub3QgKmV2ZXJ5KiBwcm9ncmFtLCBidXQgYGNsb3NlYCBpcyBkZWZpbml0ZWx5IG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgc3lzY2FsbHMuIEJ1dCBpdCYjMzk7cyBub3QgYSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3IsIHBhZ2UgZmF1bHQgaGFuZGxlciwgb3IgY29yZSBzeW5jIHByaW1pdGl2ZSwgYW5kIHRoZSBwYXRjaCBJUyBpbiBgX194NjRfc3lzX2Nsb3NlYC4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsb2dpYyBpbnNpZGUgb2YgdGhlIGNsb3NlIHN5c2NhbGwuCgpJZiBJIGRvbiYjMzk7dCBsaXN0IGBfX3g2NF9zeXNfY2xvc2VgLCB3aGF0IGVsc2UgaXMgdGhlcmUgdG8gZm9jdXMgb24/IE5vdGhpbmcgZWxzZSB3YXMgbW9kaWZpZWQhIFRoZSBwYXRjaCBkaXJlY3RseSBtb2RpZmllcyB0aGUgYGNsb3NlYCBzeXNjYWxsLCBzbyBpdHMgZW50cnlwb2ludCBpcyBgX194NjRfc3lzX2Nsb3NlYC4gSWYgSSBvbWl0IGl0LCBGb2N1c1N5bWJvbHMgd291bGQgYmUgZW1wdHksIHdoaWNoIGlzIG5vdCBwZXJtaXR0ZWQgd2hlbiBXb3J0aEZ1enppbmcgaXMgdHJ1ZS4gSXQmIzM5O3MgdGhlICpzcGVjaWZpYyogZW50cnkgcG9pbnQgZm9yIHRoZSBmZWF0dXJlLgoKU28sIHRoZSBrZXkgcXVlc3Rpb24gaXM6IGlzIGBfX3g2NF9zeXNfY2xvc2VgICYjMzQ7dWJpcXVpdG91cyYjMzQ7IGluIHRoZSAqcmVsZXZhbnQqIHNlbnNlIGZvciBzeXprYWxsZXImIzM5O3MgZm9jdXMgc3ltYm9sIGxvZ2ljPyBJdCYjMzk7cyBjb21tb24sIHllcywgYnV0IGl0JiMzOTtzIG5vdCBhIGdlbmVyYWwtcHVycG9zZSB1dGlsaXR5LiBJdCYjMzk7cyB0aGUgZGlyZWN0IGVudHJ5IHBvaW50IG9mIGEgZmVhdHVyZSB1bmRlciByZXZpZXcuCgpJcyBpdCBwb3NzaWJsZSB0aGF0IGBfX2RvX3N5c19jbG9zZWAgaXMgdGhlIGVudHJ5cG9pbnQ/IE5vLCBiZWNhdXNlIGl0IGlzIGBzdGF0aWMgaW5saW5lYCEKCklmIEkgKmRvbiYjMzk7dCogZm9jdXMgb24gYF9feDY0X3N5c19jbG9zZWAsIHdoYXQgaXMgdGhlcmUgdG8gZm9jdXMgb24/IEFic29sdXRlbHkgbm90aGluZyEKClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgY2hvaWNlIGlzIHRvIGxpc3QgYF9feDY0X3N5c19jbG9zZWAgaW4gYEZvY3VzU3ltYm9sc2AuIEl0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCB0YXJnZXQgZm9yIGRpcmVjdGluZyB0aGUgZnV6emVyIHRvIHRoZSByZWxldmFudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvcGVuXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZS05LVxuZnMvTWFrZWZpbGU6MTA6b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbmZzL01ha2VmaWxlLTExLVx0XHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxuLS1cbmZzL01ha2VmaWxlLTE2LVx0XHRzdGFjay5vIGZzX3N0cnVjdC5vIHN0YXRmcy5vIGZzX3Bpbi5vIG5zZnMubyBcXFxuZnMvTWFrZWZpbGU6MTc6XHRcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcbmZzL01ha2VmaWxlLTE4LVx0XHRrZXJuZWxfcmVhZF9maWxlLm8gbW50X2lkbWFwcGluZy5vIHJlbWFwX3JhbmdlLm8gcGlkZnMubyBcXFxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9OTMxNj1uZnNkNF9zZXRfb3BlbnN0YXRlaWQoc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy05MzE4LXtcbmZzL25mc2QvbmZzNHN0YXRlLmM6OTMxOTpcdHB1dF9zdGF0ZWlkKGNzdGF0ZSwgXHUwMDI2dS1cdTAwM2VvcGVuLm9wX3N0YXRlaWQpO1xuZnMvbmZzZC9uZnM0c3RhdGUuYy05MzIwLX1cbi0tXG5mcy92ZXJpdHkvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfRlNfVkVSSVRZKSAmIzQzOz0gZW5hYmxlLm8gXFxcbi0tXG5mcy92ZXJpdHkvTWFrZWZpbGUtNi1cdFx0XHQgICBtZWFzdXJlLm8gXFxcbmZzL3Zlcml0eS9NYWtlZmlsZTo3Olx0XHRcdCAgIG9wZW4ubyBcXFxuZnMvdmVyaXR5L01ha2VmaWxlLTgtXHRcdFx0ICAgcGFnZWNhY2hlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTIKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogMzkyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYG9wZW4ub2AgaXMgYWx3YXlzIGJ1aWx0LCBubyBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQsIGhlbmNlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtdYC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBgV29ydGhGdXp6aW5nYD8gTGV0JiMzOTtzIGRpdmUgZGVlcC4KCkkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgYXBwbHkgdGhlIGNyaXRlcmlhLiAgVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFyZSBjbGVhcjogZG9lcyB0aGUgbW9kaWZpZWQgY29kZSBmYWxsICpzdHJpY3RseSogaW50byBhbnkgb2YgdGhlIGV4Y2x1c2lvbiBjYXRlZ29yaWVzPyBOby4gVGhpcyBwYXRjaCBpbiBgZnMvb3Blbi5jYCBkaXJlY3RseSBhbHRlcnMga2VybmVsIEMgY29kZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSBoYW5kbGluZyBvZiB0aGUgYGNsb3NlKClgIHN5c3RlbSBjYWxsJiMzOTtzIHJldHVybiB2YWx1ZSB3aGVuIGludGVycnVwdGVkLiBJdCYjMzk7cyBhIGNsZWFyIG1vZGlmaWNhdGlvbiB0byBleGVjdXRhYmxlIGNvZGUgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhlIGNvcmUgVkZTIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBuZWdhdGl2ZSBjcml0ZXJpYSBhcmUgbm90IG1ldC4KCk5vdywgY2hlY2tpbmcgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgJiMzNDtDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIC4uLiBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuJiMzNDsgIEl0IGlzIGEgZGlyZWN0IGFsdGVyYXRpb24gb2Ygc3lzY2FsbCBoYW5kbGluZy4gSXQgYWZmZWN0cyBzeXN0ZW0gY2FsbCByZXR1cm4gdmFsdWVzLiBUaHVzLCBiYXNlZCBvbiB0aGlzIHBvc2l0aXZlIGNyaXRlcmlvbiwgIGBXb3J0aEZ1enppbmdgICptdXN0KiBiZSBgdHJ1ZWAuCgpOZXh0LCB0aGUgY3J1Y2lhbCBzdGVwOiBkZWZpbmluZyBgRm9jdXNTeW1ib2xzYC4gIEF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBgX194NjRfc3lzX2Nsb3NlYCBpcyBOT1QgYSAmIzM0O2dlbmVyYWwgbWVtb3J5IGFsbG9jYXRvciYjMzQ7LCAmIzM0O3BhZ2UgZmF1bHQgaGFuZGxlciYjMzQ7LCBvciAmIzM0O2NvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS4mIzM0OyBgX194NjRfc3lzX2Nsb3NlYCAqaXMqIHRoZSBleHBsaWNpdCBlbnRyeSBwb2ludCBmb3IgdGhlIGBjbG9zZSgpYCBzeXN0ZW0gY2FsbCBvbiB4ODZfNjQsIHdoaWNoIGlzIHRoZSBleGFjdCBmdW5jdGlvbiB0aGlzIHBhdGNoIG1vZGlmaWVzLgoKTGV0JiMzOTtzIGNhcmVmdWxseSBjb25zaWRlciB3aGV0aGVyIGl0IGlzIHViaXF1aXRvdXMuIFN5emthbGxlciYjMzk7cyBwdXJwb3NlIGlzIHRvIGZpbmQgYnVncyBhbmQgZXJyb3JzIGluIGFueSBjYWxsLiBTaG91bGQgd2UgaW5jbHVkZSBgX194NjRfc3lzX2Nsb3NlYD8gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGFjdCBiZWhhdmlvciBvZiBgY2xvc2VgLCB0aGUgYW5zd2VyIGlzIHllcy4gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGFjdCBiZWhhdmlvciBvZiBgY2xvc2VgLCB3ZSBtdXN0IGluY2x1ZGUgaXQuIGBjbG9zZWAgaXMgbm90IGNhbGxlZCBldmVyeXdoZXJlLiBTeXprYWxsZXIgbXVzdCBmb2N1cyBvbiBgX194NjRfc3lzX2Nsb3NlYCBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBgY2xvc2VgLiBXZSBtdXN0IGluY2x1ZGUgaXQuCgpTaG91bGQgd2UgYWxzbyBpbmNsdWRlIGBfX2RvX3N5c19jbG9zZWA/ICBUaGF0IGRlcGVuZHMgb24gd2hhdCBzeW1ib2xzIHRoZSBjb21waWxlciBhY3R1YWxseSBlbWl0cy4gT24geDg2XzY0LCBgX194NjRfc3lzX2Nsb3NlYCAqaXMqIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50LCBidXQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBtaWdodCBiZSBpbiBgX19kb19zeXNfY2xvc2VgLiBTeXprYWxsZXIgd2lsbCByZXNvbHZlIHRoaXMsIHNvIGxpc3RpbmcgKmJvdGgqIGlzIHRoZSBzYWZlc3QgYXBwcm9hY2g6IGBbJiMzNDtfX3g2NF9zeXNfY2xvc2UmIzM0OywgJiMzNDtfX2RvX3N5c19jbG9zZSYjMzQ7XWAuCgpObyBmdXJ0aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4KClRvIGVuc3VyZSBzb3VuZG5lc3MsIEkgZG91YmxlLWNoZWNrIGBXb3J0aEZ1enppbmdgIGFnYWluOgoKMS4gIFRoaXMgcGF0Y2ggKmNoYW5nZXMqIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgLUVJTlRSYCB0byBgMGAgaW4gY2VydGFpbiBjYXNlcy4gVGhhdCBjb3VsZCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYWx0ZXIgYmVoYXZpb3IuCjIuICBJdCAqYWRkcyogYC1FSU5UUmAgdG8gdGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGJlIGNoYW5nZWQgZnJvbSByZXR1cm4uCjMuICBUaGlzIGltcGFjdHMgYW55IGZpbGVzeXN0ZW0gb3IgZHJpdmVyIHRoYXQgdXNlcyBgLmZsdXNoYCBjYWxsYmFja3Mgb3IgcmVtb3ZlcyBQT1NJWCBsb2Nrcy4KNC4gIEl0JiMzOTtzIGluIHRoZSBWRlMvc3lzY2FsbCBwYXRoLgoKVGh1cywgYFdvcnRoRnV6emluZyA9IHRydWVgIGlzIHVuZXF1aXZvY2FsbHkgY29ycmVjdC4KClRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYFJlYXNvbmluZ2A6ICBUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzeXNjYWxsIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBWRlMsIHNwZWNpZmljYWxseSB0aGUgcmV0dXJuIGNvZGVzIG9mIGNsb3NlLCBtYWtpbmcgaXQgbGlrZWx5IHRvIGludHJvZHVjZSBidWdzIGFuZCByZWdyZXNzaW9ucy4gTmVnYXRpdmUgY3JpdGVyaWEgYXJlIG5vdCBtZXQuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O19feDY0X3N5c19jbG9zZSYjMzQ7LCAmIzM0O19fZG9fc3lzX2Nsb3NlJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gCgpJIGFtIG5vdyBjb25maWRlbnQgYW5kIHJlYWR5IHRvIHN1Ym1pdCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19feDY0X3N5c19jbG9zZSYjMzQ7LAogICAgJiMzNDtfX2RvX3N5c19jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xvc2Ugc3lzY2FsbCBoYW5kbGluZyBpbiBmcy9vcGVuLmMgdG8gcmV0dXJuIDAgaW5zdGVhZCBvZiAtRUlOVFIgd2hlbiBmaWxwX2ZsdXNoKCkgaXMgaW50ZXJydXB0ZWQgKHJldHVybmluZyAtRUlOVFIsIC1FUkVTVEFSVFNZUywgZXRjLikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIHN5c2NhbGwgbG9naWMgaW4gdGhlIGNvcmUgVkZTIHN1YnN5c3RlbSwgYWx0ZXJpbmcgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBhY3Jvc3MgaW50ZXJydXB0ZWQgZmlsZSBjbG9zZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19feDY0X3N5c19jbG9zZSYjMzQ7LAogICAgJiMzNDtfX2RvX3N5c19jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xvc2Ugc3lzY2FsbCBoYW5kbGluZyBpbiBmcy9vcGVuLmMgdG8gcmV0dXJuIDAgaW5zdGVhZCBvZiAtRUlOVFIgd2hlbiBmaWxwX2ZsdXNoKCkgaXMgaW50ZXJydXB0ZWQgKHJldHVybmluZyAtRUlOVFIsIC1FUkVTVEFSVFNZUywgZXRjLikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIHN5c2NhbGwgbG9naWMgaW4gdGhlIGNvcmUgVkZTIHN1YnN5c3RlbSwgYWx0ZXJpbmcgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBhY3Jvc3MgaW50ZXJydXB0ZWQgZmlsZSBjbG9zZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIHRoZSBzY2FsYXIgaW50ZWdlciByZXR1cm4gY29kZSBvZiB0aGUgY2xvc2UoMikgc3lzY2FsbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGludGVyYWN0IHdpdGggYW55IG1lbW9yeSBidWZmZXJzLCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNTJlNzkyNzc5YTAwYjJjNjBjYTIyNmNhZjJkNjBjNjc0NjFhMWM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMjA6MDg6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNDA4OTI1ZDdiZDBiNy4uODFhNDNiNmM1YjZiOSAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uYwpAQCAtMTUxMywxMiAmIzQzOzE1MTMsMTcgQEAgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKQogCWlmIChsaWtlbHkocmV0dmFsID09IDApKQogCQlyZXR1cm4gMDsKIAotCS8qIGNhbiYjMzk7dCByZXN0YXJ0IGNsb3NlIHN5c2NhbGwgYmVjYXVzZSBmaWxlIHRhYmxlIGVudHJ5IHdhcyBjbGVhcmVkICovCi0JaWYgKHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHwKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWQKJiM0MzsJICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlCiYjNDM7CSAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0dmFsID09IC1FSU5UUiB8fAomIzQzOwkgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fAogCSAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8CiAJICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHwKIAkgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spCi0JCXJldHZhbCA9IC1FSU5UUjsKJiM0MzsJCXJldHZhbCA9IDA7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIHBhdGNoLCBzcGVjaWZpY2FsbHkgaW4gYGZzL29wZW4uY2AsIHdpdGhpbiB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbiAoYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgKS4gVGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYmV5b25kIHRoZSB1c3VhbCBLQVNBTi4KCkZpcnN0LCBsZXQmIzM5O3MgZG8gYSBxdWljayByaXNrIGFzc2Vzc21lbnQuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlZmVuc2l2ZSBhbmFseXNpcyDigJMgZGVjaWRpbmcgb24gdGhlIHJpZ2h0IHNhbml0aXplciBmb3IgZnV6emluZy4gSXQmIzM5O3MgYmVuaWduLCBkZWZpbml0ZWx5IGxvdyBzZXZlcml0eS4gTm8gbWFsd2FyZSBkZXZlbG9wbWVudCwgbm8gZXhwbG9pdGF0aW9uLCBhbGwgc2FmZS4gV2UmIzM5O3JlIGp1c3QgdHJ5aW5nIHRvIGVuaGFuY2Ugb3VyIHRlc3RpbmcgYXBwcm9hY2guIEdvb2QsIHdlIGNhbiBwcm9jZWVkLgoKTm93LCBsZXQmIzM5O3MgYWN0dWFsbHkgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgZGlmZiBpbnZvbHZlcyBoYW5kbGluZyBlcnJvciBjb2RlcyByZXR1cm5lZCBieSB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyBob3cgYEVJTlRSYCAoaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwpIGlzIGhhbmRsZWQgYWZ0ZXIgdGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC4gUHJldmlvdXNseSwgaXQgYXBwZWFycyB0aGUgcGF0Y2ggd291bGQgYXR0ZW1wdCB0byByZXN0YXJ0IGBjbG9zZWAgZXZlbiBhZnRlciB0aGUgZmlsZSB0YWJsZSBlbnRyeSB3YXMgY2xlYXJlZCwgd2hpY2ggaXMgbm90IHNhZmUuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGlzIGJlaGF2aW9yLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgZmlsZSB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBzb21lIGNvbnRleHQgYXJvdW5kIGxpbmUgMTUxMy4KCk5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIEtNU0FOIGlzIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIElzIHRoaXMgYSBzaW1wbGUgY2hhbmdlIG9mIGVycm9yIHJlcG9ydGluZyBsb2dpYywgb3IgZG9lcyBpdCB0b3VjaCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zIHJlbGF0ZWQgdG8gZmlsZSBkZXNjcmlwdG9yIG1hbmFnZW1lbnQgaW4gYSB3YXkgdGhhdCBLTVNBTiB3b3VsZCBiZSB2YWx1YWJsZT8gSSYjMzk7bGwgZGlnIGRlZXBlciBpbnRvIGBmcy9vcGVuLmNgIHRvIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vcGVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0OTU6XHQgKi9cbjE0OTY6XHRTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXG4xNDk3Olx0e1xuMTQ5ODpcdFx0aW50IHJldHZhbDtcbjE0OTk6XHRcdHN0cnVjdCBmaWxlICpmaWxlO1xuMTUwMDpcdFxuMTUwMTpcdFx0ZmlsZSA9IGZpbGVfY2xvc2VfZmQoZmQpO1xuMTUwMjpcdFx0aWYgKCFmaWxlKVxuMTUwMzpcdFx0XHRyZXR1cm4gLUVCQURGO1xuMTUwNDpcdFxuMTUwNTpcdFx0cmV0dmFsID0gZmlscF9mbHVzaChmaWxlLCBjdXJyZW50LVx1MDAzZWZpbGVzKTtcbjE1MDY6XHRcbjE1MDc6XHRcdC8qXG4xNTA4Olx0XHQgKiBXZSYjMzk7cmUgcmV0dXJuaW5nIHRvIHVzZXIgc3BhY2UuIERvbiYjMzk7dCBib3RoZXJcbjE1MDk6XHRcdCAqIHdpdGggYW55IGRlbGF5ZWQgZnB1dCgpIGNhc2VzLlxuMTUxMDpcdFx0ICovXG4xNTExOlx0XHRmcHV0X2Nsb3NlX3N5bmMoZmlsZSk7XG4xNTEyOlx0XG4xNTEzOlx0XHRpZiAobGlrZWx5KHJldHZhbCA9PSAwKSlcbjE1MTQ6XHRcdFx0cmV0dXJuIDA7XG4xNTE1Olx0XG4xNTE2Olx0XHQvKlxuMTUxNzpcdFx0ICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWRcbjE1MTg6XHRcdCAqIGNsb3NlIGNhbm5vdCBiZSByZXN0YXJ0ZWQgc2FmZWx5LiBEbyBub3QgcmVwb3J0IEVJTlRSIGFmdGVyIHRoZVxuMTUxOTpcdFx0ICogZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC5cbjE1MjA6XHRcdCAqL1xuMTUyMTpcdFx0aWYgKHJldHZhbCA9PSAtRUlOVFIgfHxcbjE1MjI6XHRcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XG4xNTIzOlx0XHQgICAgcmV0dmFsID09IC1FUkVTVEFSVE5PSU5UUiB8fFxuMTUyNDpcdFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHxcbjE1MjU6XHRcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSylcbjE1MjY6XHRcdFx0cmV0dmFsID0gMDtcbjE1Mjc6XHRcbjE1Mjg6XHRcdHJldHVybiByZXR2YWw7XG4xNTI5Olx0fVxuMTUzMDpcdFxuMTUzMTpcdC8qXG4xNTMyOlx0ICogVGhpcyByb3V0aW5lIHNpbXVsYXRlcyBhIGhhbmd1cCBvbiB0aGUgdHR5LCB0byBhcnJhbmdlIHRoYXQgdXNlcnNcbjE1MzM6XHQgKiBhcmUgZ2l2ZW4gY2xlYW4gdGVybWluYWxzIGF0IGxvZ2luIHRpbWUuXG4xNTM0Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjYKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogOTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNsb3NlKDIpYCBTeXNjYWxsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGBjbG9zZSgyKWAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGludGVycnVwdGlvbiBieSBzaWduYWxzLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGlzOiBpZiBgZmlscF9mbHVzaCgpYCByZXR1cm5zIGFuIGVycm9yIGNvZGUgaW5kaWNhdGluZyBhbiBpbnRlcnJ1cHQgKGxpa2UgYC1FSU5UUmAgb3Igb25lIG9mIHRoZSBgLUVSRVNUQVJUKmAgdmFyaWFudHMpLCB0aGUgcHJldmlvdXMgYmVoYXZpb3Igd2FzIHRvIHJldHVybiBgLUVJTlRSYCB0byB1c2Vyc3BhY2UuIFRoaXMgc2VlbXMgc2ltcGxlIGVub3VnaC4KClRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQgZnJvbSB0aGUgY29udGV4dCwgaXMgdGhhdCBhIHJldHVybiBvZiBgLUVJTlRSYCBlbmNvdXJhZ2VzIHRoZSBhcHBsaWNhdGlvbiB0byByZXRyeSB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbC4gVGhlIHN0YW5kYXJkIHNheXMgaXQgY2FuLCBidXQgUE9TSVggaXMgYW4gaWRlYWxpemF0aW9uLiBJbiByZWFsaXR5LCBpbiB0aGUgTGludXgga2VybmVsLCB0aGUgZmlsZSBkZXNjcmlwdG9yIGhhcyAqYWxyZWFkeSogYmVlbiBkZXRhY2hlZCBhbmQgY2xvc2VkIGJ5IHRoZSB0aW1lIHdlIHdvdWxkIHJldHVybiB0byB0aGUgc3lzdGVtIGNhbGwuIElmIHRoZSBhcHBsaWNhdGlvbiByZXRyaWVzIGBjbG9zZSgpYCBpbiB0aGlzIHNpdHVhdGlvbiwgaXQgaXMgbGlrZWx5IHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYmVlbiByZS11c2VkIGFuZCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZpbGUgd2lsbCBiZSBjbG9zZWQuIFRoaXMgaXMgYmVjYXVzZSB0aGUga2VybmVsIGhhcyBhbHJlYWR5IGNsb3NlZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFuZCB0aGUgcHJvY2VzcyBpcyBubyBsb25nZXIgYWJsZSB0byBzYWZlbHkgY2xvc2UgaXQuIFRoaXMgcGF0Y2ggYWltcyB0byBmaXggdGhpcy4KClNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gYmVoYXZpb3IuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUlOVFJgIGluIHRoZXNlIGludGVycnVwdGVkIHNjZW5hcmlvcywgaXQgbm93IHJldHVybnMgMCwgaW5kaWNhdGluZyBzdWNjZXNzLiBUaGlzIGlzIGEgbXVjaCBiZXR0ZXIgYXBwcm9hY2ggc2luY2UgaXQgYXZvaWRzIG1pc2xlYWRpbmcgdGhlIGFwcGxpY2F0aW9uIGludG8gYXR0ZW1wdGluZyBhIHJldHJ5IG9uIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgaXMgbm8gbG9uZ2VyIHZhbGlkLCBhbmQgaXMgbm93ICYjMzQ7Y2xvc2VkLiYjMzQ7CgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogc2FmZXR5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MuIEkmIzM5O20gY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgcGF0Y2ggYWdhaW5zdCBjb21tb24gdnVsbmVyYWJpbGl0aWVzOgoKKiAgICoqQ29weWluZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZT8qKiBObywgYGNsb3NlYCBvbmx5IHJldHVybnMgYW4gaW50ZWdlciBlcnJvciBjb2RlLgoqICAgKipTdHJ1Y3QvYnVmZmVyIGFsbG9jYXRpb24/KiogTm8sIHRoaXMgcGF0Y2ggaXMgb25seSBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlLgoqICAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBgcmV0dmFsYCBpcyBpbml0aWFsaXplZCBieSBgZmlscF9mbHVzaGAsIHNvIHdlIGFyZSBnb29kLgoqICAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gYHJldHZhbGAgaXMgdGhlIHJlc3VsdCBvZiBgZmlscF9mbHVzaGAuCiogICAqKkJvdW5kcywgbGVuZ3Rocywgb3IgZGF0YSBjb3B5aW5nIGFmZmVjdGVkPyoqIE5vcGUuCiogICAqKkluZm8tbGVhayByaXNrPyoqIE5vdCBpbiB0aGUgc2xpZ2h0ZXN0LgoKVGhlcmVmb3JlLCBubyByaXNrIG9mIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgdG8gdGhlIHJldHVybiB2YWx1ZS4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2FmZS4gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgbmVlZGVkIGhlcmUuCgpJJiMzOTttIGNvbmZpcm1pbmcgdGhpcyBpcyBhIGNsZWFyICYjMzQ7TmVlZHNLTVNBTj1mYWxzZSYjMzQ7IHNjZW5hcmlvLCBiYXNlZCBvbiB0aGUga2VybmVsJiMzOTtzIGRvY3VtZW50YXRpb24uIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG9mIHRoZSByaXNrcyB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLCBhbmQgaXQmIzM5O3Mgd2VsbCB3aXRoaW4gdGhlIGJvdW5kcyBvZiBzdGFuZGFyZCBidWcgZGV0ZWN0aW9uLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgaGFuZGxpbmcgaW4gc3lzX2Nsb3NlKCkgd2hlbiBmaWxwX2ZsdXNoKCkgcmV0dXJucyAtRUlOVFIgb3IgYSByZXN0YXJ0IGVycm9yIGNvZGUgKC1FUkVTVEFSVFNZUywgLUVSRVNUQVJUTk9JTlRSLCAtRVJFU1RBUlROT0hBTkQsIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spLCByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIC1FSU5UUi5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFsdGVycyB0aGUgc2NhbGFyIGludGVnZXIgcmV0dXJuIGNvZGUgb2YgdGhlIGNsb3NlKDIpIHN5c2NhbGwuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBpbnRlcmFjdCB3aXRoIGFueSBtZW1vcnkgYnVmZmVycywgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIHRoZSBzY2FsYXIgaW50ZWdlciByZXR1cm4gY29kZSBvZiB0aGUgY2xvc2UoMikgc3lzY2FsbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGludGVyYWN0IHdpdGggYW55IG1lbW9yeSBidWZmZXJzLCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA4OjIzLjU1NDUyMTk3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjgyNTg4ODc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3g2NF9zeXNfY2xvc2VcIixcbiAgICBcIl9fZG9fc3lzX2Nsb3NlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIGhhbmRsaW5nIGluIHN5c19jbG9zZSgpIHdoZW4gZmlscF9mbHVzaCgpIHJldHVybnMgLUVJTlRSIG9yIGEgcmVzdGFydCBlcnJvciBjb2RlICgtRVJFU1RBUlRTWVMsIC1FUkVTVEFSVE5PSU5UUiwgLUVSRVNUQVJUTk9IQU5ELCAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLKSwgcmV0dXJuaW5nIDAgaW5zdGVhZCBvZiAtRUlOVFIuXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFsdGVycyB0aGUgc2NhbGFyIGludGVnZXIgcmV0dXJuIGNvZGUgb2YgdGhlIGNsb3NlKDIpIHN5c2NhbGwuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBpbnRlcmFjdCB3aXRoIGFueSBtZW1vcnkgYnVmZmVycywgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA4OjIzLjU1NDUyNjIwMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMTEyNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjUyZTc5Mjc3OWEwMGIyYzYwY2EyMjZjYWYyZDYwYzY3NDYxYTFjOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAyMDowODoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA0MDg5MjVkN2JkMGI3Li44MWE0M2I2YzViNmI5IDEwMDY0NFxcbi0tLSBhL2ZzL29wZW4uY1xcbisrKyBiL2ZzL29wZW4uY1xcbkBAIC0xNTEzLDEyICsxNTEzLDE3IEBAIFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClcXG4gXFx0aWYgKGxpa2VseShyZXR2YWwgPT0gMCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogY2FuJ3QgcmVzdGFydCBjbG9zZSBzeXNjYWxsIGJlY2F1c2UgZmlsZSB0YWJsZSBlbnRyeSB3YXMgY2xlYXJlZCAqL1xcbi1cXHRpZiAocmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxcbitcXHQvKlxcbitcXHQgKiBUaGUgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLCBzbyBhbiBpbnRlcnJ1cHRlZFxcbitcXHQgKiBjbG9zZSBjYW5ub3QgYmUgcmVzdGFydGVkIHNhZmVseS4gRG8gbm90IHJlcG9ydCBFSU5UUiBhZnRlciB0aGVcXG4rXFx0ICogZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XFxuK1xcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XFxuIFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8XFxuIFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5EIHx8XFxuIFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSylcXG4tXFx0XFx0cmV0dmFsID0gLUVJTlRSO1xcbitcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODoyNC4wNjcyNDk3OTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc5NzYwNTMxODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9feDY0X3N5c19jbG9zZVwiLFxuICAgIFwiX19kb19zeXNfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xvc2Ugc3lzY2FsbCBoYW5kbGluZyBpbiBmcy9vcGVuLmMgdG8gcmV0dXJuIDAgaW5zdGVhZCBvZiAtRUlOVFIgd2hlbiBmaWxwX2ZsdXNoKCkgaXMgaW50ZXJydXB0ZWQgKHJldHVybmluZyAtRUlOVFIsIC1FUkVTVEFSVFNZUywgZXRjLikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIHN5c2NhbGwgbG9naWMgaW4gdGhlIGNvcmUgVkZTIHN1YnN5c3RlbSwgYWx0ZXJpbmcgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBhY3Jvc3MgaW50ZXJydXB0ZWQgZmlsZSBjbG9zZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI1MmU3OTI3NzlhMDBiMmM2MGNhMjI2Y2FmMmQ2MGM2NzQ2MWExYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAyMDowODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNDA4OTI1ZDdiZDBiNy4uODFhNDNiNmM1YjZiOSAxMDA2NDRcbi0tLSBhL2ZzL29wZW4uY1xuKysrIGIvZnMvb3Blbi5jXG5AQCAtMTUxMywxMiArMTUxMywxNyBAQCBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXG4gXHRpZiAobGlrZWx5KHJldHZhbCA9PSAwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBjYW4ndCByZXN0YXJ0IGNsb3NlIHN5c2NhbGwgYmVjYXVzZSBmaWxlIHRhYmxlIGVudHJ5IHdhcyBjbGVhcmVkICovXG4tXHRpZiAocmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxuK1x0LypcbitcdCAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQsIHNvIGFuIGludGVycnVwdGVkXG4rXHQgKiBjbG9zZSBjYW5ub3QgYmUgcmVzdGFydGVkIHNhZmVseS4gRG8gbm90IHJlcG9ydCBFSU5UUiBhZnRlciB0aGVcbitcdCAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuXG4rXHQgKi9cbitcdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XG4rXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxuIFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0lOVFIgfHxcbiBcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5EIHx8XG4gXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spXG4tXHRcdHJldHZhbCA9IC1FSU5UUjtcbitcdFx0cmV0dmFsID0gMDtcbiBcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDg6MjQuMDY3MjUxMzU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE1Njk4MzE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCBhIGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IHRvIHNlZSBpZiBpdCdzIHJlbGV2YW50IGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBBbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHRhc2sgaXMgZXNzZW50aWFsbHkgYSBzb2Z0d2FyZSBxdWFsaXR5IGFzc3VyYW5jZSBhbmQgZGVmZW5zaXZlIG1hbmV1dmVyLiBJJ20gbm90IGxvb2tpbmcgZm9yIG1hbHdhcmUgb3IgdHJ5aW5nIHRvIGNyYWZ0IGFuIGV4cGxvaXQgaGVyZS4gTXkgb2JqZWN0aXZlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCB3aXRoaW4gYGZzL29wZW4uY2AgcmVnYXJkaW5nIHRoZSBgY2xvc2VgIHN5c2NhbGwsIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZvY3VzZWQgZnV6emluZyBlZmZvcnRzLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb25zLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBwYXRjaCBpcyAqYWN0dWFsbHkqIGRvaW5nLiBMZXQncyBpbnNwZWN0IHRoZSBjb2RlIGRpcmVjdGx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBjbG9zZWAgc3lzdGVtIGNhbGwgd2l0aGluIGBmcy9vcGVuLmNgLiBJIHNlZSB0aGUgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgIGRlZmluaXRpb24sIGFuZCBpdCBhcHBlYXJzIHRoZSBwcmltYXJ5IGNoYW5nZSByZWxhdGVzIHRvIGVycm9yIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgd2UgZGVhbCB3aXRoIGludGVycnVwdGVkIGBjbG9zZWAgY2FsbHMuIFRoZSBleGlzdGluZyBjb2RlIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYHJldHZhbGAgaXMgb25lIG9mIGBFUkVTVEFSVFNZU2AsIGV0Yy4gYW5kIG5vdyB0aGUgZml4IGFsc28gaGFuZGxlcyB0aGUgZXJyb3IgYEVJTlRSYC4gVGhpcyBjaGFuZ2UgYWx0ZXJzIGhvdyB3ZSBhcmUgaGFuZGxpbmcgYSByZXRyeSBvbiBgY2xvc2VgIHN5c3RlbSBjYWxsLlxuXG5Ib3dldmVyLCBJJ20gbm90IGp1c3QgZ29pbmcgdG8gdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBsaW5lIG51bWJlcnMgYmVpbmcgcGF0Y2hlZC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGZ1bGwgY29udGVudHMgb2YgYGZzL29wZW4uY2AgYXJvdW5kIGxpbmUgMTUxMywgc28gSSBjYW4gc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGFyZWEuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgYmVpbmcgY2hhbmdlZCBhbmQgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODozNS42MzcwODUyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vcGVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MDpcXHRcXG4xNDkxOlxcdC8qXFxuMTQ5MjpcXHQgKiBDYXJlZnVsIGhlcmUhIFdlIHRlc3Qgd2hldGhlciB0aGUgZmlsZSBwb2ludGVyIGlzIE5VTEwgYmVmb3JlXFxuMTQ5MzpcXHQgKiByZWxlYXNpbmcgdGhlIGZkLiBUaGlzIGVuc3VyZXMgdGhhdCBvbmUgY2xvbmUgdGFzayBjYW4ndCByZWxlYXNlXFxuMTQ5NDpcXHQgKiBhbiBmZCB3aGlsZSBhbm90aGVyIGNsb25lIGlzIG9wZW5pbmcgaXQuXFxuMTQ5NTpcXHQgKi9cXG4xNDk2OlxcdFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClcXG4xNDk3OlxcdHtcXG4xNDk4OlxcdFxcdGludCByZXR2YWw7XFxuMTQ5OTpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcXG4xNTAwOlxcdFxcbjE1MDE6XFx0XFx0ZmlsZSA9IGZpbGVfY2xvc2VfZmQoZmQpO1xcbjE1MDI6XFx0XFx0aWYgKCFmaWxlKVxcbjE1MDM6XFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4xNTA0OlxcdFxcbjE1MDU6XFx0XFx0cmV0dmFsID0gZmlscF9mbHVzaChmaWxlLCBjdXJyZW50LVxcdTAwM2VmaWxlcyk7XFxuMTUwNjpcXHRcXG4xNTA3OlxcdFxcdC8qXFxuMTUwODpcXHRcXHQgKiBXZSdyZSByZXR1cm5pbmcgdG8gdXNlciBzcGFjZS4gRG9uJ3QgYm90aGVyXFxuMTUwOTpcXHRcXHQgKiB3aXRoIGFueSBkZWxheWVkIGZwdXQoKSBjYXNlcy5cXG4xNTEwOlxcdFxcdCAqL1xcbjE1MTE6XFx0XFx0ZnB1dF9jbG9zZV9zeW5jKGZpbGUpO1xcbjE1MTI6XFx0XFxuMTUxMzpcXHRcXHRpZiAobGlrZWx5KHJldHZhbCA9PSAwKSlcXG4xNTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbjE1MTU6XFx0XFxuMTUxNjpcXHRcXHQvKlxcbjE1MTc6XFx0XFx0ICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWRcXG4xNTE4OlxcdFxcdCAqIGNsb3NlIGNhbm5vdCBiZSByZXN0YXJ0ZWQgc2FmZWx5LiBEbyBub3QgcmVwb3J0IEVJTlRSIGFmdGVyIHRoZVxcbjE1MTk6XFx0XFx0ICogZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC5cXG4xNTIwOlxcdFxcdCAqL1xcbjE1MjE6XFx0XFx0aWYgKHJldHZhbCA9PSAtRUlOVFIgfHxcXG4xNTIyOlxcdFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XFxuMTUyMzpcXHRcXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVE5PSU5UUiB8fFxcbjE1MjQ6XFx0XFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHxcXG4xNTI1OlxcdFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSylcXG4xNTI2OlxcdFxcdFxcdHJldHZhbCA9IDA7XFxuMTUyNzpcXHRcXG4xNTI4OlxcdFxcdHJldHVybiByZXR2YWw7XFxuMTUyOTpcXHR9XFxuMTUzMDpcXHRcXG4xNTMxOlxcdC8qXFxuMTUzMjpcXHQgKiBUaGlzIHJvdXRpbmUgc2ltdWxhdGVzIGEgaGFuZ3VwIG9uIHRoZSB0dHksIHRvIGFycmFuZ2UgdGhhdCB1c2Vyc1xcbjE1MzM6XFx0ICogYXJlIGdpdmVuIGNsZWFuIHRlcm1pbmFscyBhdCBsb2dpbiB0aW1lLlxcbjE1MzQ6XFx0ICovXFxuMTUzNTpcXHRTWVNDQUxMX0RFRklORTAodmhhbmd1cClcXG4xNTM2OlxcdHtcXG4xNTM3OlxcdFxcdGlmIChjYXBhYmxlKENBUF9TWVNfVFRZX0NPTkZJRykpIHtcXG4xNTM4OlxcdFxcdFxcdHR0eV92aGFuZ3VwX3NlbGYoKTtcXG4xNTM5OlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODozNS42MzcyMTQwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc3MTEwMTI1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgYSBgY2xvc2UoMilgIFN5c2NhbGwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGNsb3NlKDIpYCBzeXNjYWxsLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZXJyb3IgcmV0dXJucyBmcm9tIGBmaWxwX2ZsdXNoKClgLiBQcmV2aW91c2x5LCBgLUVJTlRSYCB3YXMgcmV0dXJuZWQgZGlyZWN0bHkuIE5vdywgYSBjaGVjayBmb3IgYC1FSU5UUmAgaXMgYWRkZWQsIGFuZCAwIGlzIHJldHVybmVkIGluIHNvbWUgY2FzZXMuIFRoZSBpbml0aWFsIHRob3VnaHQgaXM6IGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IFllcywgdGhpcyBpcyB0aGUgc3RhbmRhcmQgYHN5c19jbG9zZWAgLyBgY2xvc2UoZmQpYCBlbnRyeXBvaW50LCBzbyBpdCdzIGFic29sdXRlbHkgcmVhY2hhYmxlLiBUaGUga2V5IHF1ZXN0aW9uIG5vdyBpcywgaXMgaXQgd29ydGggZnV6emluZz9cblxuVGhlIHRyaWFnZSBwaGlsb3NvcGh5IHN0YXRlcyB0aGF0IHJlYWNoYWJpbGl0eSBpcyBwcmltYXJ5LiBNb2RpZmllZCByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLCB1bmxlc3MgaXQgZmFsbHMgaW50byBzcGVjaWZpYyBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhpcyBjaGFuZ2UgKmlzKiByZWFjaGFibGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIFZGUy9zeXNjYWxsIGhhbmRsaW5nIGFyZWEsIHNvIHBlciBzZWN0aW9uIDMsIGl0J3MgYSBcImNvcmUgc3Vic3lzdGVtXCIgbW9kaWZpY2F0aW9uLCBhbmQgdGhlcmVmb3JlIGZhbGxzIHVuZGVyIFwiV29ydGhGdXp6aW5nPXRydWVcIi5cblxuTm93LCB3ZSBuZWVkIHRvIHRoaW5rIGFib3V0IEZvY3VzU3ltYm9scy4gIFRoZSBkb2N1bWVudCBlbXBoYXNpemVzIGF2b2lkaW5nIFwidWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLlwiIFRoaXMgbWVhbnMgbm90IGxpc3RpbmcgdGhpbmdzIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgc3lzX2Nsb3NlYCAvIGBfX2RvX3N5c19jbG9zZWAgaXMgdWJpcXVpdG91cyEgTmVhcmx5IGV2ZXJ5IHByb2dyYW0gY2FsbHMgYGNsb3NlKGZkKWAuIEhvd2V2ZXIsIGl0J3MgdGhlICpzcGVjaWZpYyogbW9kaWZpY2F0aW9uIG9mIHRoZSBgY2xvc2VgIHN5c2NhbGwgdGhhdCBpcyB0aGUgdGFyZ2V0IGhlcmUuIFRoZSBvbmx5IG1vZGlmaWVkIGNvZGUgc2VlbXMgdG8gYmUgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgLiBUaGlzIGV4cGFuZHMgdG8gYF9fZG9fc3lzX2Nsb3NlYCBhbmQgYF9feDY0X3N5c19jbG9zZWAuIEJ1dCBpcyBpdCBhIHRhcmdldCBzcGVjaWZpYyBlbnRyeXBvaW50P1xuXG5XZSBoYXZlIHRvIGRldGVybWluZSBpZiBtZW50aW9uaW5nIGBfX2RvX3N5c19jbG9zZWAgdmlvbGF0ZXMgdGhlIHJ1bGUgYWJvdXQgYXZvaWRpbmcgdWJpcXVpdG91cyBjb2RlLiBDYW4gRm9jdXNTeW1ib2xzIGJlIGVtcHR5PyBUaGUgc2NoZW1hIHNheXMgdGhleSdyZSBudWxsYWJsZSBidXQgb2YgdGhlIHR5cGUgQVJSQVkuIENhbiB3ZSBmdXp6IHRoZSBjaGFuZ2Ugd2l0aG91dCBzcGVjaWZ5aW5nIGFueXRoaW5nPyAgXG5cblRoZSBkb2N1bWVudCBzdHJlc3NlcyB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMuIElmIG9ubHkgdGhlIHN5c2NhbGwgaXRzZWxmIGhhcyBiZWVuIGNoYW5nZWQsIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbGxvd2VkIGFzIGEgdGFyZ2V0IGlmIGl0J3MgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkPyBTaW5jZSBubyBvdGhlciBjYWxsZXIgaXMgbW9kaWZpZWQsIGFuZCB0aGUgY2hhbmdlIGlzICp3aXRoaW4qIHRoZSBgc3lzX2Nsb3NlYCBsb2dpYywgaXQgaXMgbGlrZWx5IHRoZSBvbmx5IHRhcmdldC5cblxuVWx0aW1hdGVseSwgSSBuZWVkIG1vcmUgY29udGV4dCB0byBiZSAqY2VydGFpbiouIFdoYXQgd2FzIHRoZSAqcmVhc29uKiBmb3IgdGhpcyBwYXRjaD8gVW5kZXJzdGFuZGluZyAqd2h5KiB0aGV5IGNoYW5nZWQgdGhpcyBlcnJvciBoYW5kbGluZyBpbiBgY2xvc2VgIG1pZ2h0IHJldmVhbCBhIG1vcmUgc3BlY2lmaWMgdGFyZ2V0IG9yIGNsYXJpZnkgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIExldCdzIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo0My4zNDgyMjg5MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMjcxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmV0dmFsID09IC1FUkVTVEFSVFNZU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTE0OTY9U1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxcbi0tXFxuZnMvb3Blbi5jLTE1MjEtXFx0aWYgKHJldHZhbCA9PSAtRUlOVFIgfHxcXG5mcy9vcGVuLmM6MTUyMjpcXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxcbmZzL29wZW4uYy0xNTIzLVxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA4OjQzLjM5NDI2MDMyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MTgzMzYzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBmaWxwX2ZsdXNoYCwgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBSb2xlIG9mIGBmaWxwX2ZsdXNoYCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgZmlscF9mbHVzaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgc3BlY2lmaWNhbGx5ICppcyogdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbj9cIiBJIGtub3cgaXQncyByZWxhdGVkIHRvIGZpbGUgb3BlcmF0aW9ucywgYnV0IHRoZSBcImZsdXNoXCIgcGFydCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBkYXRhIHN5bmNocm9uaXphdGlvbiBhbmQgZW5zdXJpbmcgY29uc2lzdGVuY3kuIElzIGl0IGFib3V0IHdyaXRpbmcgYnVmZmVyZWQgZGF0YSB0byBkaXNrPyBJcyBpdCBhYm91dCBpbnZhbGlkYXRpbmcgY2FjaGVzPyBPciBpcyBpdCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjbGVhbnVwIHByb2NlZHVyZT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHNjb3BlLiBJcyBpdCBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgdXNlcnNwYWNlIG9yIGlzIGl0IHByaW1hcmlseSBhIGtlcm5lbC1pbnRlcm5hbCBmdW5jdGlvbj8gRGVwZW5kaW5nIG9uIGl0cyBkZXNpZ24sIGl0cyBiZWhhdmlvdXIgbWF5IGRpZmZlci4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgdG9vLCB0aGUgZmlsZSBwb2ludGVyJ3MgY2hhcmFjdGVyaXN0aWNzLiBJcyB0aGUgZmlsZSBwb2ludGVyIHBvaW50aW5nIHRvIGEgYmxvY2sgZGV2aWNlLCBhIGNoYXJhY3RlciBkZXZpY2UsIG9yIGEgcmVndWxhciBmaWxlPyBUaGlzJ2xsIGFsbCBpbmZsdWVuY2UgaG93IGBmaWxwX2ZsdXNoYCBpcyBkZXNpZ25lZCwgYW5kIGhvdyBpdCBiZWhhdmVzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSBpbiBhbnkgdXNlIGNhc2UuIE9rYXksIGxldCdzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgY29kZSBoYXZlIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA4OjQ1LjgxMjU5OTcwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk1MzI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxwX2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9sb2Nrcy5jPTI1NjU9aW50IGZjbnRsX3NldGxrKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5mcy9sb2Nrcy5jLTI2MTUtXFx0ICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmlsZSBhbmQgb3VyIGZpbGVzX3N0cnVjdCwganVzdCBsaWtlIG9uXFxuZnMvbG9ja3MuYzoyNjE2OlxcdCAqIGZpbHBfZmx1c2goKS4gVGhlcmUgaXMgbm8gbmVlZCB0byBkbyB0aGF0IHdoZW4gd2UncmVcXG5mcy9sb2Nrcy5jLTI2MTctXFx0ICogdW5sb2NraW5nIHRob3VnaCwgb3IgZm9yIE9GRCBsb2Nrcy5cXG4tLVxcbmZzL2xvY2tzLmM9MjY4OD1pbnQgZmNudGxfc2V0bGs2NCh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvbG9ja3MuYy0yNzM3LVxcdCAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpbGUgYW5kIG91ciBmaWxlc19zdHJ1Y3QsIGp1c3QgbGlrZSBvblxcbmZzL2xvY2tzLmM6MjczODpcXHQgKiBmaWxwX2ZsdXNoKCkuIFRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gdGhhdCB3aGVuIHdlJ3JlXFxuZnMvbG9ja3MuYy0yNzM5LVxcdCAqIHVubG9ja2luZyB0aG91Z2gsIG9yIGZvciBPRkQgbG9ja3MuXFxuLS1cXG5mcy9vcGVuLmM9MTQ0Nj1TWVNDQUxMX0RFRklORTIoY3JlYXQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCB1bW9kZV90LCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTE0NTktICovXFxuZnMvb3Blbi5jOjE0NjA6c3RhdGljIGludCBmaWxwX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IGlkKVxcbmZzL29wZW4uYy0xNDYxLXtcXG4tLVxcbmZzL29wZW4uYz0xNDgwPWludCBmaWxwX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IGlkKVxcbi0tXFxuZnMvb3Blbi5jLTE0ODMtXFxuZnMvb3Blbi5jOjE0ODQ6XFx0cmV0dmFsID0gZmlscF9mbHVzaChmaWxwLCBpZCk7XFxuZnMvb3Blbi5jLTE0ODUtXFx0ZnB1dF9jbG9zZShmaWxwKTtcXG4tLVxcbmZzL29wZW4uYz0xNDk2PVNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClcXG4tLVxcbmZzL29wZW4uYy0xNTA0LVxcbmZzL29wZW4uYzoxNTA1OlxcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlsZSwgY3VycmVudC1cXHUwMDNlZmlsZXMpO1xcbmZzL29wZW4uYy0xNTA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo0NS44ODQ1NTc3NzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjgzNDgxMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgZmlscF9mbHVzaGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBmaWxwX2ZsdXNoYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgcmVmcmVzaCBvdXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGtlcm5lbCBmdW5jdGlvbi5cIiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhlIGxpZmVjeWNsZSBvZiBhIGZpbGUgZGVzY3JpcHRvciwgSSdsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc3VyZmFjZSBhbmQgcXVpY2tseSBhbmFseXplIHdoZXJlIHRoaXMgaXMgaW52b2tlZCwgaG93IGl04oCZcyBiZWluZyB1c2VkLCBhbmQgdGhlIHZhcmlvdXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIGV4ZWN1dGVkLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBsaWtlbHkgYmUgaGFuZGxpbmcgZWRnZSBjYXNlcyBpbnZvbHZpbmcgZGlydHkgcGFnZXMgYW5kIGVuc3VyaW5nIGFueSBwZW5kaW5nIHdyaXRlcyBhcmUgcHVzaGVkIHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4gSXQncyB0aGUga2luZCBvZiBmdW5jdGlvbiB5b3UgaG9wZSBuZXZlciBnb2VzIHdyb25nLCBzbyBJJ2xsIHdhbnQgdG8gZm9jdXMgb24gYWxsIHRoZSBudWFuY2VzLlxuSSBrbm93IHRoZSB0eXBpY2FsIHVzYWdlIHBhdHRlcm4gbWlnaHQgaW52b2x2ZSBlbnN1cmluZyB0aGF0IGZpbGUgZGF0YSBpcyB3cml0dGVuIHRvIGRpc2sgYmVmb3JlIGFuIGFwcGxpY2F0aW9uIGNsb3NlcyBhIGZpbGUgb3IgYW4gYXNzb2NpYXRlZCBwcm9jZXNzIHRlcm1pbmF0ZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuIEknbGwgbmVlZCB0byBleGFtaW5lIGlmIGxvY2tpbmcgaXMgcHJvcGVybHkgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy5cblxuQmFzaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgd2hlbiBzb21lb25lIHdhbnRzIHRvIGNsb3NlIG9yIGZyZWUgdXAgYSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDg6NDguMTY4MDQxNDEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL29wZW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDU1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDU1OlxcdFxcbjE0NTY6XFx0LypcXG4xNDU3OlxcdCAqIFxcXCJpZFxcXCIgaXMgdGhlIFBPU0lYIHRocmVhZCBJRC4gV2UgdXNlIHRoZVxcbjE0NTg6XFx0ICogZmlsZXMgcG9pbnRlciBmb3IgdGhpcy4uXFxuMTQ1OTpcXHQgKi9cXG4xNDYwOlxcdHN0YXRpYyBpbnQgZmlscF9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlscCwgZmxfb3duZXJfdCBpZClcXG4xNDYxOlxcdHtcXG4xNDYyOlxcdFxcdGludCByZXR2YWwgPSAwO1xcbjE0NjM6XFx0XFxuMTQ2NDpcXHRcXHRpZiAoQ0hFQ0tfREFUQV9DT1JSVVBUSU9OKGZpbGVfY291bnQoZmlscCkgPT0gMCwgZmlscCxcXG4xNDY1OlxcdFxcdFxcdFxcdFxcXCJWRlM6IENsb3NlOiBmaWxlIGNvdW50IGlzIDAgKGZfb3A9JXBzKVxcXCIsXFxuMTQ2NjpcXHRcXHRcXHRcXHRmaWxwLVxcdTAwM2VmX29wKSkge1xcbjE0Njc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQ2ODpcXHRcXHR9XFxuMTQ2OTpcXHRcXG4xNDcwOlxcdFxcdGlmIChmaWxwLVxcdTAwM2VmX29wLVxcdTAwM2VmbHVzaClcXG4xNDcxOlxcdFxcdFxcdHJldHZhbCA9IGZpbHAtXFx1MDAzZWZfb3AtXFx1MDAzZWZsdXNoKGZpbHAsIGlkKTtcXG4xNDcyOlxcdFxcbjE0NzM6XFx0XFx0aWYgKGxpa2VseSghKGZpbHAtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1BBVEgpKSkge1xcbjE0NzQ6XFx0XFx0XFx0ZG5vdGlmeV9mbHVzaChmaWxwLCBpZCk7XFxuMTQ3NTpcXHRcXHRcXHRsb2Nrc19yZW1vdmVfcG9zaXgoZmlscCwgaWQpO1xcbjE0NzY6XFx0XFx0fVxcbjE0Nzc6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4xNDc4OlxcdH1cXG4xNDc5OlxcdFxcbjE0ODA6XFx0aW50IGZpbHBfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGZsX293bmVyX3QgaWQpXFxuMTQ4MTpcXHR7XFxuMTQ4MjpcXHRcXHRpbnQgcmV0dmFsO1xcbjE0ODM6XFx0XFxuMTQ4NDpcXHRcXHRyZXR2YWwgPSBmaWxwX2ZsdXNoKGZpbHAsIGlkKTtcXG4xNDg1OlxcdFxcdGZwdXRfY2xvc2UoZmlscCk7XFxuMTQ4NjpcXHRcXG4xNDg3OlxcdFxcdHJldHVybiByZXR2YWw7XFxuMTQ4ODpcXHR9XFxuMTQ4OTpcXHRFWFBPUlRfU1lNQk9MKGZpbHBfY2xvc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo0OC4xNjgxMzkwNzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDg5Mjg1MzM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENsb3NlKDIpIFN5c3RlbSBDYWxsIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgb2YgdGhlIGBjbG9zZSgyKWAgaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbCBhbmQgY29tcGFyaW5nIGl0IHRvIHRoZSB1bmRlcmx5aW5nIGBmaWxwX2Nsb3NlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBmaWxwX2Nsb3NlYCB3aGljaCBpcyBhIGxvd2VyIGxldmVsIGNhbGwgYW5kIHRoZSBzeXN0ZW0gY2FsbCBpdHNlbGYsIGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpYC4gVGhlIGtleSBsaWVzIGluIGhvdyB0aGV5IGhhbmRsZSB0aGUgcmV0dXJuIHZhbHVlIGFmdGVyIGBmaWxwX2ZsdXNoYC5cblxuSW4gdGhlIG9yaWdpbmFsIGBjbG9zZWAgaW1wbGVtZW50YXRpb24sIGlmIGBmaWxwX2ZsdXNoYCByZXR1cm5lZCBhbiBcImludGVycnVwdGlibGVcIiBlcnJvciBjb2RlIGxpa2UgYC1FUkVTVEFSVFNZU2AsIHRoZSBzeXN0ZW0gY2FsbCB3YXMgc2V0IHRvIGAtRUlOVFJgLCBhbmQgdGhhdCB3YXMgcmV0dXJuZWQgdG8gdXNlcnNwYWNlLiBUaGlzIGltcGxpZWQgdGhhdCB0aGUgdXNlciBwcm9ncmFtIGNvdWxkIHJldHJ5IHRoZSBgY2xvc2VgIG9wZXJhdGlvbi5cblxuSG93ZXZlciwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIGdhbWUuIE5vdywgaWYgYGZpbHBfZmx1c2hgIHJldHVybnMgYW55IG9mIHRob3NlIGludGVycnVwdGlibGUgZXJyb3JzLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBzeXN0ZW0gY2FsbCBpcyBzZXQgdG8gKnplcm8qISBUaGUgcmVhc29uIGZvciB0aGlzIGlzIGNydWNpYWwsIGFuZCBpdCBhbGlnbnMgd2l0aCBQT1NJWCBzdGFuZGFyZHMsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBhZGRyZXNzZXMgYSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gTGludXgncyBrZXJuZWwgZGVzaWduLlxuXG5CZWNhdXNlIGluIExpbnV4LCB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzLCBlc3NlbnRpYWxseSwgZGVhbGxvY2F0ZWQgKmJlZm9yZSogdGhlIGZsdXNoIG9wZXJhdGlvbiBjb21wbGV0ZXMsIHJldHJ5aW5nIGBjbG9zZWAgYWZ0ZXIgYW4gaW50ZXJydXB0IHdvdWxkIGJlIGRpc2FzdHJvdXMuIEEgdXNlciBwcm9ncmFtIHJldHJ5aW5nIGBjbG9zZWAgbWlnaHQgYWNjaWRlbnRhbGx5IGNsb3NlIGEgZmlsZSBkZXNjcmlwdG9yIGJlbG9uZ2luZyB0byBhICpkaWZmZXJlbnQqIGZpbGUgb3IgcHJvY2Vzcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBcImZyZWVkXCIgYW5kIG1heSBiZSByZS11c2VkISBUaGlzIGxlYWRzIHRvIGRhdGEgY29ycnVwdGlvbiwgc2VjdXJpdHkgYnJlYWNoZXMsIGFuZCB1bmRlZmluZWQgYmVoYXZpb3JzLlxuXG5CeSByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIGAtRUlOVFJgLCB0aGUga2VybmVsIGlzIGVzc2VudGlhbGx5IHRlbGxpbmcgdXNlcnNwYWNlLCBcIkRvbid0IHJldHJ5IHRoaXMuXCIgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBnb25lLiBFdmVyeXRoaW5nIGlzIGNsb3NlZC5cblxuSSdtIHRoaW5raW5nIHRoaXMgbGlrZWx5IGhhcyBiZWVuIGEgc291cmNlIG9mIHN1YnRsZSBidWdzIGZvciBhIGxvbmcgdGltZSwgYW5kIEknZCBsaWtlIHRvIGRpdmUgaW50byB0aGUgTGludXggZ2l0IGhpc3RvcnkgYW5kIHRoZSBtYWlsaW5nIGxpc3RzIHRvIHNlZSBpZiBJIGNhbiBmaW5kIG1vcmUgY29udGV4dCBvciBpbmZvcm1hdGlvbiBvbiB0aGlzIHBhdGNoLiBVbmRlcnN0YW5kaW5nIHRoZSBkaXNjdXNzaW9ucyBhcm91bmQgdGhpcyBjaGFuZ2UgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDg6NTMuMDYwOTk0NTQ0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDk2ODU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJUaGUgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLCBzbyBhbiBpbnRlcnJ1cHRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTE0OTY9U1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxcbi0tXFxuZnMvb3Blbi5jLTE1MTYtXFx0LypcXG5mcy9vcGVuLmM6MTUxNzpcXHQgKiBUaGUgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLCBzbyBhbiBpbnRlcnJ1cHRlZFxcbmZzL29wZW4uYy0xNTE4LVxcdCAqIGNsb3NlIGNhbm5vdCBiZSByZXN0YXJ0ZWQgc2FmZWx5LiBEbyBub3QgcmVwb3J0IEVJTlRSIGFmdGVyIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo1My4xMzE5NjcxNjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjA4Mjg0ODU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgYGNsb3NlYCBTeXN0ZW0gQ2FsbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBwYXRjaCBtb2RpZmllcyBgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKWAgaW4gYGZzL29wZW4uY2AuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nP1xuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgZ29hbCBpcyB0byBmaW5kIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzIGFuZCBuZXcgYXNzZXJ0aW9ucy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGNhcmVmdWxseS5cblxuQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgZnV6emluZyBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHJlYWNoYWJsZSBjb2RlLlxuXG5TZWN0aW9uIDIgcHJvdmlkZXMgdGhlICpuZWdhdGl2ZSBjcml0ZXJpYSosIHRlbGxpbmcgdXMgd2hlbiAqbm90KiB0byBmdXp6LiBMZXQgbWUgcmV2aWV3IHRoYXQ6IGl0IHNheXMgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzXCIuIFRoZXNlIGFyZTogbm9uLWtlcm5lbC9ub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBmaXQgdGhlIGJpbGwuXG5cbkNvbnZlcnNlbHksIHNlY3Rpb24gMyBzdGF0ZXMgdGhlICpwb3NpdGl2ZSBjcml0ZXJpYSo6IFwiUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGVcIi4gVGhpcyBpbmNsdWRlcyBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5ncywgcnVudGltZSBhc3NlcnRpb25zLCBvciByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMuIEFuZCBndWVzcyB3aGF0PyBUaGlzIGNsZWFybHkgYWZmZWN0cyBhIGNvcmUgc3Vic3lzdGVtOiBWRlMgYW5kIHN5c2NhbGwgaGFuZGxpbmchIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgdGhlIGBjbG9zZWAgc3lzdGVtIGNhbGwuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIHRoZSBuZXh0IHF1ZXN0aW9uOiB3aGF0IGFib3V0IGBGb2N1c1N5bWJvbHNgPyBJIG5lZWQgdG8gZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRvIGd1aWRlIHRoZSBmdXp6ZXIgZWZmZWN0aXZlbHksIHBlciBTZWN0aW9uIDQuIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMgYW5kIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy5cblxuVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBpc24ndCBgY2xvc2VgICp1YmlxdWl0b3VzKj8gU3l6a2FsbGVyIHVzZXMgYGNsb3NlYCBjb25zdGFudGx5LiBJdHMgZXhlY3V0b3IgY2FsbHMgaXQgZHVyaW5nIHRlYXJkb3duIGFuZCBiZXR3ZWVuIHN5c2NhbGxzLiBXYWl0LCB0aGUgKm1vZGlmaWVkKiBjb2RlIGlzICpvbmx5KiBgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKWAuIE9rYXksIHNvIHdoaWNoIHN5bWJvbCBkb2VzIHRoaXMgZGVmaW5lIG9uIGFtZDY0PyBUaGlzIGlzIGEgcXVlc3Rpb24gZm9yIHRoZSBrZXJuZWwgc291cmNlIG9yIGdyZXAgZm9yIGhvdyBTWVNDQUxMX0RFRklORSBpcyBpbXBsZW1lbnRlZCBvciBzeW1ib2xzIGluIG9wZW4uYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDg6NTkuMjE0ODE4NDU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE3MTMwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19kb19zeXNfY2xvc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo1OS4yODU5OTU4ODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEzNzg0ODk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBjbG9zZWAgU3lzdGVtIENhbGwgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbCBpcyBpbXBsZW1lbnRlZCwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGF0IGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIC4uLilgIGlzIGV4cGFuZGVkIHVzaW5nIGEgbWFjcm8uIFRoYXQgbWFjcm8sIGZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGlzIGxpa2VseSB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIGNvcmUgYXNwZWN0cyBvZiBob3cgdGhlIGNhbGwgZnVuY3Rpb25zLiBOb3csIHRoYXQgbWFjcm8gZXhwYW5kcyB0byBmdW5jdGlvbnMgY2FsbGVkIGBfX2RvX3N5c19jbG9zZWAsIGFuZCBgX194NjRfc3lzX2Nsb3NlYC4gSXQgc2VlbXMgbGlrZSB0aGVyZSBtaWdodCBhbHNvIGJlIGFuIGBfX3NlX3N5c19jbG9zZWAgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgb3IgY29uZmlndXJhdGlvbiwgYnV0IEknbSBnb2luZyB0byBzZXQgdGhhdCBhc2lkZSBmb3Igbm93LlxuXG5NeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvc3lzY2FsbHMuaGAgYW5kIHVuZGVyc3RhbmQgaG93IHRoYXQgYFNZU0NBTExfREVGSU5FYCBtYWNybyBpcyBhY3R1YWxseSBkZWZpbmVkLiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgc3RydWN0dXJlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBhcmd1bWVudHMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3Mgc3lzdGVtIGNhbGwgdGFibGUsIGFuZCBpZiBpdCdzIGhhbmRsaW5nIGFueSBzcGVjaWZpYyBjb250ZXh0IHN3aXRjaGluZyBvciBzZWN1cml0eSBhc3BlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU0OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjAxLjQyMzg0NzYyMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NDU1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIFNZU0NBTExfREVGSU5FMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTIxMT1zdGF0aWMgaW5saW5lIGludCBpc19zeXNjYWxsX3RyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICp0cF9ldmVudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMjQtXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyNTojZGVmaW5lIFNZU0NBTExfREVGSU5FMShuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgxLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjI2LSNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUyKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDIsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOTowMS40Njk4MDA5NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODY4MzEwMTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjbG9zZWAgU3lzdGVtIENhbGwgZm9yIEZvY3VzZWQgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gT24geDg2XzY0LCBgX19kb19zeXNfY2xvc2VgIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gYm9keSwgd2hpbGUgYF9feDY0X3N5c19jbG9zZWAgKG9yIG1heWJlIGBfX3NlX3N5c19jbG9zZWApIGFjdHMgYXMgdGhlIGVudHJ5IHBvaW50IHdyYXBwZXIuIEEga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGBGb2N1c1N5bWJvbHNgIGluIHRoZSBzY2hlbWEgZm9yIGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBzY2hlbWEgc2F5cyBcIlNwZWNpZmljLCBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIGZ1enppbmcgb24uXCIgIFwibm9uLXViaXF1aXRvdXNcIiBpcyBpbXBvcnRhbnQhICBJdCBhbHNvIGV4cGxpY2l0bHkgd2FybnMgdG8gXCJBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFMsXCIgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbS4gIFRoYXQgaW5jbHVkZXMgYWxsb2NhdG9ycywgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuICBUaGlzIGlzIHRvIGF2b2lkIGRpbHV0aW5nIHRoZSBmdXp6aW5nIGVmZm9ydC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBfX2RvX3N5c19jbG9zZWAgb3IgYF9feDY0X3N5c19jbG9zZWAgYSB1YmlxdWl0b3VzIGZ1bmN0aW9uPyBEb2VzICphbG1vc3QqIGV2ZXJ5IHByb2dyYW0gY2FsbCBgY2xvc2VgIGluIHRoZSBTeXprYWxsZXIgY29udGV4dD8gIFJlbWVtYmVyLCBTeXprYWxsZXIgZ2VuZXJhdGVzIGFuZCBleGVjdXRlcyBzeXpsYW5nIHByb2dyYW1zLiAgVGhlc2UgcHJvZ3JhbXMgZ2VuZXJhdGUgc2VxdWVuY2VzIG9mIHN5c2NhbGxzLiBNYW55IG9wZW4gc29ja2V0cywgZmlsZSBkZXNjcmlwdG9ycywgZXRjLiwgYW5kLCBvZiBjb3Vyc2UsIFN5emthbGxlciAqZG9lcyogaGF2ZSBleHBsaWNpdCBgY2xvc2UoZmQpYCBjYWxscywgYW5kIHRoZSBleGVjdXRvciBhbHNvIGNsb3NlcyBmZHMuICpCdXQqIGlzIGNsZWFudXAgYnkgdGhlIGV4ZWN1dG9yIGl0c2VsZiB0cmFja2VkIGFzIHN5c2NhbGwgY292ZXJhZ2U/IFRoYXQncyBhIHBvaW50IG9mIHBvdGVudGlhbCB1bmNlcnRhaW50eS4gIENydWNpYWxseSwgc3l6bGFuZyAqZG9lcyogZ2VuZXJhdGUgYGNsb3NlYCBzeXNjYWxscy5cblxuTG9va2luZyBhdCB0aGUgXCJ1YmlxdWl0b3VzXCIgZXhhbXBsZXMsIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGFuZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgaXQncyBwcmV0dHkgY2xlYXIgYF9fZG9fc3lzX2Nsb3NlYCBpc24ndCBhbnkgb2YgdGhvc2UuICBCdXQsIHdoYXQgYWJvdXQgdGhlIGFsdGVybmF0aXZlIGd1aWRhbmNlPyAgVGhlIGRvY3VtZW50YXRpb24gYWxzbyBzYXlzIHRvIFwiVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOiBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXCJcblxuQWhhISBUaGUgbG9naWMgKmJlaW5nIGFkZGVkIG9yIGFsdGVyZWQqIGlzICpwcmVjaXNlbHkqIHdpdGhpbiBgX19kb19zeXNfY2xvc2VgIG9yIGBfX3g2NF9zeXNfY2xvc2VgISAgQW5kLCBpcyBpdCBhIGRpcmVjdCBBUEkgZW50cnlwb2ludD8gWWVzISBgX19kb19zeXNfY2xvc2VgIC8gYF9feDY0X3N5c19jbG9zZWAgKmlzKiB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBsb2dpYy5cblxuU28sIHdoYXQgYWJvdXQgZW1wdHkgYEZvY3VzU3ltYm9sc2A/IElmIGl0J3MgZW1wdHksIGRvZXMgU3l6a2FsbGVyIGZvY3VzIG9uIG5vdGhpbmc/IERvZXMgaXQgZnV6eiBldmVyeXRoaW5nPyBPciwgaXMgYW4gZW1wdHkgbGlzdCBpbnRlcnByZXRlZCBkaWZmZXJlbnRseT8gTm93LCBpZiBJIHB1dCBgX19kb19zeXNfY2xvc2VgIG9yIGBfX3g2NF9zeXNfY2xvc2VgIGluIGBGb2N1c1N5bWJvbHNgIHZlcnN1cyBhbiBlbXB0eSBhcnJheSBgW11gPyBXaGF0IHdpbGwgdGhlIHJlc3VsdCBiZT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCAuLi4pYCBkZWZpbmVzIHRoZSBzeW1ib2wgbmFtZS4gVGltZSB0byBsb29rIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTAuMTUyOTA1NjQzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc1MzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3g2NF9zeXNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9MzU9bG9uZyB4NjRfc3lzX2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy0zOC1cXHQjaW5jbHVkZSBcXHUwMDNjYXNtL3N5c2NhbGxzXzY0LmhcXHUwMDNlXFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jOjM5OlxcdGRlZmF1bHQ6IHJldHVybiBfX3g2NF9zeXNfbmlfc3lzY2FsbChyZWdzKTtcXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDAtXFx0fVxcbi0tXFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jPTQ0PWxvbmcgeDMyX3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDctXFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9zeXNjYWxsc194MzIuaFxcdTAwM2VcXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6NDg6XFx0ZGVmYXVsdDogcmV0dXJuIF9feDY0X3N5c19uaV9zeXNjYWxsKHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy00OS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9ODc9X192aXNpYmxlIG5vaW5zdHIgYm9vbCBkb19zeXNjYWxsXzY0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgbnIpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtOTUtXFx0XFx0LyogSW52YWxpZCBzeXN0ZW0gY2FsbCwgYnV0IHN0aWxsIGEgc3lzdGVtIGNhbGwuICovXFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jOjk2OlxcdFxcdHJlZ3MtXFx1MDAzZWF4ID0gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTk3LVxcdH1cXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTctI1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsOjg6IyBUaGUgX194NjRfc3lzXyooKSBzdHVicyBhcmUgY3JlYXRlZCBvbi10aGUtZmx5IGZvciBzeXNfKigpIHN5c3RlbSBjYWxsc1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTktI1xcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYz0xMTk9c3RhdGljIGJvb2wgX19lbXVsYXRlX3ZzeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIxNy1cXHRcXHQvKiB0aGlzIGRlY29kZXMgcmVncy1cXHUwMDNlZGkgYW5kIHJlZ3MtXFx1MDAzZXNpIG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIxODpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfZ2V0dGltZW9mZGF5KHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjE5LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMjItXFx0XFx0LyogdGhpcyBkZWNvZGVzIHJlZ3MtXFx1MDAzZWRpIG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIyMzpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfdGltZShyZWdzKTtcXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIyNC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMwLVxcdFxcdC8qIHRoaXMgZGVjb2RlcyByZWdzLVxcdTAwM2VkaSwgcmVncy1cXHUwMDNlc2kgYW5kIHJlZ3MtXFx1MDAzZWR4IG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIzMTpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfZ2V0Y3B1KHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMyLVxcdFxcdHJlZ3MtXFx1MDAzZWR4ID0gb3JpZ19keDtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjExOmV4dGVybiBsb25nIF9feDY0X3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMi1leHRlcm4gbG9uZyBfX2lhMzJfc3lzX25pX3N5c2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTYtICogc3RydWN0IHB0X3JlZ3MgKnJlZ3MgYXMgdGhlIG9ubHkgYXJndW1lbnQgb2YgdGhlIHN5c2NhbGwgc3R1YihzKSBuYW1lZCBhczpcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoxNzogKiBfX3g2NF9zeXNfKigpICAgICAgICAgLSA2NC1iaXQgbmF0aXZlIHN5c2NhbGxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xOC0gKiBfX2lhMzJfc3lzXyooKSAgICAgICAgLSAzMi1iaXQgbmF0aXZlIHN5c2NhbGwgb3IgY29tbW9uIGNvbXBhdCBzeXNjYWxsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zMy0gKlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjM0OiAqIFxcdTAwM2NfX3g2NF9zeXNfcmVjdlxcdTAwM2U6XFx0XFx0XFx1MDAzYy0tIHN5c2NhbGwgd2l0aCA0IHBhcmFtZXRlcnNcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zNS0gKlxcdGNhbGxxXFx0XFx1MDAzY19fZmVudHJ5X19cXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0yNTktICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYwOmxvbmcgX194NjRfc3lzX2dldGNwdShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYxOmxvbmcgX194NjRfc3lzX2dldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYyOmxvbmcgX194NjRfc3lzX3RpbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTI2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTAuMjEzNjY1MDEyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5OTQ4Njg1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gU3lzdGVtIENhbGwgV3JhcHBlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIHg4NiBzeXN0ZW0gY2FsbHMgYXJlIGhhbmRsZWQuIExldCdzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGluY2x1ZGU6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgcm91Z2hseSBiZXR3ZWVuIDI1IGFuZCA1MC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0eXBpY2FsIGVudHJ5IHBvaW50IGRlZmluaXRpb25zIG9yIHNvbWUgY3J1Y2lhbCBtYWNybyBleHBhbnNpb25zIHJlbGF0ZWQgdG8gdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBpbiB0aGF0IHJlZ2lvbi4gUHJvYmFibHkgc29tZSBrZXkgaW5saW5lIGFzc2VtYmx5LCBwZXJoYXBzIHNvbWUgbG9naWMgZm9yIGFyZ3VtZW50IHBhc3NpbmcsIG9yIG1heWJlIGV2ZW4gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbSBob3BpbmcgdG8gZ2V0IGEgcXVpY2sgdmlzdWFsIG9uIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGJyaWRnZXMgdGhlIGdhcCB0byB0aGUga2VybmVsIGVudHJ5IHBvaW50cy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MjUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToxMi4yMDg1MzU5MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHQgKlxcbiAgMjY6XFx0ICogVGhlIHN0dWIgdGhlbiBwYXNzZXMgdGhlIGRlY29kZWQgYXJndW1lbnRzIHRvIHRoZSBfX3NlX3N5c18qKCkgd3JhcHBlciB0b1xcbiAgMjc6XFx0ICogcGVyZm9ybSBzaWduLWV4dGVuc2lvbiAob21pdHRlZCBmb3IgemVyby1hcmd1bWVudCBzeXNjYWxscykuICBGaW5hbGx5IHRoZVxcbiAgMjg6XFx0ICogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIF9fZG9fc3lzXyooKSBmdW5jdGlvbiB3aGljaCBpcyB0aGUgYWN0dWFsXFxuICAyOTpcXHQgKiBzeXNjYWxsLiAgVGhlc2Ugd3JhcHBlcnMgYXJlIG1hcmtlZCBhcyBpbmxpbmUgc28gdGhlIGNvbXBpbGVyIGNhbiBvcHRpbWl6ZVxcbiAgMzA6XFx0ICogdGhlIGZ1bmN0aW9ucyB3aGVyZSBhcHByb3ByaWF0ZS5cXG4gIDMxOlxcdCAqXFxuICAzMjpcXHQgKiBFeGFtcGxlIGFzc2VtYmx5IChzbGlnaHRseSByZS1vcmRlcmVkIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkpOlxcbiAgMzM6XFx0ICpcXG4gIDM0OlxcdCAqIFxcdTAwM2NfX3g2NF9zeXNfcmVjdlxcdTAwM2U6XFx0XFx0XFx1MDAzYy0tIHN5c2NhbGwgd2l0aCA0IHBhcmFtZXRlcnNcXG4gIDM1OlxcdCAqXFx0Y2FsbHFcXHRcXHUwMDNjX19mZW50cnlfX1xcdTAwM2VcXG4gIDM2OlxcdCAqXFxuICAzNzpcXHQgKlxcdG1vdlxcdDB4NzAoJXJkaSksJXJkaVxcdFxcdTAwM2MtLSBkZWNvZGUgcmVncy1cXHUwMDNlZGlcXG4gIDM4OlxcdCAqXFx0bW92XFx0MHg2OCglcmRpKSwlcnNpXFx0XFx1MDAzYy0tIGRlY29kZSByZWdzLVxcdTAwM2VzaVxcbiAgMzk6XFx0ICpcXHRtb3ZcXHQweDYwKCVyZGkpLCVyZHhcXHRcXHUwMDNjLS0gZGVjb2RlIHJlZ3MtXFx1MDAzZWR4XFxuICA0MDpcXHQgKlxcdG1vdlxcdDB4MzgoJXJkaSksJXJjeFxcdFxcdTAwM2MtLSBkZWNvZGUgcmVncy1cXHUwMDNlcjEwXFxuICA0MTpcXHQgKlxcbiAgNDI6XFx0ICpcXHR4b3JcXHQlcjlkLCVyOWRcXHRcXHUwMDNjLS0gY2xlYXIgJXI5XFxuICA0MzpcXHQgKlxcdHhvclxcdCVyOGQsJXI4ZFxcdFxcdTAwM2MtLSBjbGVhciAlcjhcXG4gIDQ0OlxcdCAqXFxuICA0NTpcXHQgKlxcdGNhbGxxXFx0X19zeXNfcmVjdmZyb21cXHRcXHUwMDNjLS0gZG8gdGhlIGFjdHVhbCB3b3JrIGluIF9fc3lzX3JlY3Zmcm9tKClcXG4gIDQ2OlxcdCAqXFx0XFx0XFx0XFx0ICAgIHdoaWNoIHRha2VzIDYgYXJndW1lbnRzXFxuICA0NzpcXHQgKlxcbiAgNDg6XFx0ICpcXHRjbHRxXFx0XFx0XFx0XFx1MDAzYy0tIGV4dGVuZCByZXR1cm4gdmFsdWUgdG8gNjQtYml0XFxuICA0OTpcXHQgKlxcdHJldHFcXHRcXHRcXHRcXHUwMDNjLS0gcmV0dXJuXFxuICA1MDpcXHQgKlxcbiAgNTE6XFx0ICogVGhpcyBhcHByb2FjaCBhdm9pZHMgbGVha2luZyByYW5kb20gdXNlci1wcm92aWRlZCByZWdpc3RlciBjb250ZW50IGRvd25cXG4gIDUyOlxcdCAqIHRoZSBjYWxsIGNoYWluLlxcbiAgNTM6XFx0ICovXFxuICA1NDpcXHRcXG4gIDU1OlxcdC8qIE1hcHBpbmcgb2YgcmVnaXN0ZXJzIHRvIHBhcmFtZXRlcnMgZm9yIHN5c2NhbGxzIG9uIHg4Ni02NCBhbmQgeDMyICovXFxuICA1NjpcXHQjZGVmaW5lIFNDX1g4Nl82NF9SRUdTX1RPX0FSR1MoeCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDU3OlxcdFxcdF9fTUFQKHgsX19TQ19BUkdTXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNTg6XFx0XFx0XFx0LCxyZWdzLVxcdTAwM2VkaSwscmVncy1cXHUwMDNlc2ksLHJlZ3MtXFx1MDAzZWR4XFx0XFx0XFx0XFx0XFxcXFxcbiAgNTk6XFx0XFx0XFx0LCxyZWdzLVxcdTAwM2VyMTAsLHJlZ3MtXFx1MDAzZXI4LCxyZWdzLVxcdTAwM2VyOSlcXHRcXHRcXHRcXFxcXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcbiAgNjI6XFx0LyogU1lTQ0FMTF9QVF9BUkdTIGlzIEFkYXB0ZWQgZnJvbSBzMzkweCAqL1xcbiAgNjM6XFx0I2RlZmluZSBTWVNDQUxMX1BUX0FSRzYobSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NilcXHRcXHRcXHRcXFxcXFxuICA2NDpcXHRcXHRTWVNDQUxMX1BUX0FSRzUobSwgdDEsIHQyLCB0MywgdDQsIHQ1KSwgbSh0NiwgKHJlZ3MtXFx1MDAzZWJwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTIuMjA4NjA2OTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAxMjg2NTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIGZvciBDbG9zaW5nIEZpbGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBfX3g2NF9zeXNfY2xvc2VgIHN5c3RlbSBjYWxsLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBkb2VzIGl0IGRlbGVnYXRlIHRoZSB3b3JrIGRpcmVjdGx5IHRvIGBfX2RvX3N5c19jbG9zZWAsIG9yIGlzIHRoZSBmdW5jdGlvbmFsaXR5IGlubGluZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIGFzIHRoYXQgaW1wYWN0cyB0aGluZ3MgZG93biB0aGUgbGluZS4gVG8gZ2V0IHRoZSBhbnN3ZXIsIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaXMgaW1wbGVtZW50ZWQuXG5cbkknbSBwcmV0dHkgc3VyZSB0aGUgYW5zd2VyIGlzIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaGAsIGJ1dCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGxvY2F0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgbmVhciB0aGUgZGVmaW5pdGlvbiwgc28gSSdsbCBjaGVjayBsaW5lcyA4MCB0aHJvdWdoIDEyMCBvZiB0aGF0IGZpbGUgdG8gYmUgc3VyZS4gVGhhdCByYW5nZSBzaG91bGQgY292ZXIgdGhlIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIGNsb3NlIHN5c2NhbGwgd3JhcHBlci4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZCBhbmQgd2hldGhlciB0aGVyZSBpcyBhbnkgaW5saW5pbmcgb2YgdGhlIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToxNC4yMjE0NzU0OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0LyogTWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycyBmb3Igc3lzY2FsbHMgb24gaTM4NiAqL1xcbiAgODE6XFx0I2RlZmluZSBTQ19JQTMyX1JFR1NfVE9fQVJHUyh4LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODI6XFx0XFx0U1lTQ0FMTF9QVF9BUkdTKHgsIF9fU0NfQ09NUEFUX0NBU1QsXFx0XFx0XFx0XFx0XFxcXFxcbiAgODM6XFx0XFx0XFx0XFx0X19NQVAoeCwgX19TQ19UWVBFLCBfX1ZBX0FSR1NfXykpXFx0XFx0XFxcXFxcbiAgODQ6XFx0XFxuICA4NTpcXHQjZGVmaW5lIF9fU1lTX1NUVUIwKGFiaSwgbmFtZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA4NjpcXHRcXHRsb25nIF9fIyNhYmkjI18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcdFxcdFxcXFxcXG4gIDg3OlxcdFxcdEFMTE9XX0VSUk9SX0lOSkVDVElPTihfXyMjYWJpIyNfIyNuYW1lLCBFUlJOTyk7XFx0XFx0XFx0XFxcXFxcbiAgODg6XFx0XFx0bG9uZyBfXyMjYWJpIyNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcdFxcdFxcXFxcXG4gIDg5OlxcdFxcdFxcdF9fYWxpYXMoX19kb18jI25hbWUpO1xcbiAgOTA6XFx0XFxuICA5MTpcXHQjZGVmaW5lIF9fU1lTX1NUVUJ4KGFiaSwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDkyOlxcdFxcdGxvbmcgX18jI2FiaSMjXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFx0XFx0XFxcXFxcbiAgOTM6XFx0XFx0QUxMT1dfRVJST1JfSU5KRUNUSU9OKF9fIyNhYmkjI18jI25hbWUsIEVSUk5PKTtcXHRcXHRcXHRcXFxcXFxuICA5NDpcXHRcXHRsb25nIF9fIyNhYmkjI18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFx0XFx0XFxcXFxcbiAgOTU6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDk2OlxcdFxcdFxcdHJldHVybiBfX3NlXyMjbmFtZShfX1ZBX0FSR1NfXyk7XFx0XFx0XFx0XFxcXFxcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0XFxuICA5OTpcXHQjZGVmaW5lIF9fQ09ORF9TWVNDQUxMKGFiaSwgbmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEwMDpcXHRcXHRfX3dlYWsgbG9uZyBfXyMjYWJpIyNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZCk7XFx0XFxcXFxcbiAxMDE6XFx0XFx0X193ZWFrIGxvbmcgX18jI2FiaSMjXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpXFx0XFxcXFxcbiAxMDI6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTAzOlxcdFxcdFxcdHJldHVybiBzeXNfbmlfc3lzY2FsbCgpO1xcdFxcdFxcdFxcdFxcXFxcXG4gMTA0OlxcdFxcdH1cXG4gMTA1OlxcdFxcbiAxMDY6XFx0I2lmZGVmIENPTkZJR19YODZfNjRcXG4gMTA3OlxcdCNkZWZpbmUgX19YNjRfU1lTX1NUVUIwKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMDg6XFx0XFx0X19TWVNfU1RVQjAoeDY0LCBzeXNfIyNuYW1lKVxcbiAxMDk6XFx0XFxuIDExMDpcXHQjZGVmaW5lIF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMTE6XFx0XFx0X19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMTI6XFx0XFx0XFx0ICAgIFNDX1g4Nl82NF9SRUdTX1RPX0FSR1MoeCwgX19WQV9BUkdTX18pKVxcbiAxMTM6XFx0XFxuIDExNDpcXHQjZGVmaW5lIF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTE1OlxcdFxcdF9fQ09ORF9TWVNDQUxMKHg2NCwgc3lzXyMjbmFtZSlcXG4gMTE2OlxcdFxcbiAxMTc6XFx0I2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqL1xcbiAxMTg6XFx0I2RlZmluZSBfX1g2NF9TWVNfU1RVQjAobmFtZSlcXG4gMTE5OlxcdCNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTQuMjIxNTQ2MDA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MTIwNTg4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIFN5c3RlbSBDYWxsIFdyYXBwZXIqKlxuXG5Pa2F5LCBzbyBgX19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsIC4uLilgIGRlZmluZXMgdGhlIHN5c3RlbSBjYWxsIHN0dWJzLCBsaWtlIGBfX3g2NF9zeXNfY2xvc2VgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBub3cgaXM6IFdoYXQgZnVuY3Rpb24gaXMgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9mIGBfX3NlX3N5c19jbG9zZWA/IFNpbmNlIEknbSB3b3JraW5nIHdpdGggYSBzeXN0ZW0gY2FsbCBvbiB4ODYtNjQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3cmFwcGVyLiBUaW1lIHRvIGp1bXAgaW50byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLCBsaW5lcyAxMjAgdGhyb3VnaCAxNzAuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIHdoZW4gYF9fc2Vfc3lzX2Nsb3NlYCBpcyBoaXQuIEkgbmVlZCB0byB1bnJhdmVsIHRoaXMgc3BlY2lmaWMgc3R1YiB0byB1bmRlcnN0YW5kIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk5MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTYuNzMzNjA3MjU5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHQjZGVmaW5lIF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxcbiAxMjE6XFx0I2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi9cXG4gMTIyOlxcdFxcbiAxMjM6XFx0I2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgfHwgZGVmaW5lZChDT05GSUdfSUEzMl9FTVVMQVRJT04pXFxuIDEyNDpcXHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQjAobmFtZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEyNTpcXHRcXHRfX1NZU19TVFVCMChpYTMyLCBzeXNfIyNuYW1lKVxcbiAxMjY6XFx0XFxuIDEyNzpcXHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTI4OlxcdFxcdF9fU1lTX1NUVUJ4KGlhMzIsIHN5cyMjbmFtZSxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEyOTpcXHRcXHRcXHQgICAgU0NfSUEzMl9SRUdTX1RPX0FSR1MoeCwgX19WQV9BUkdTX18pKVxcbiAxMzA6XFx0XFxuIDEzMTpcXHQjZGVmaW5lIF9fSUEzMl9DT05EX1NZU0NBTEwobmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEzMjpcXHRcXHRfX0NPTkRfU1lTQ0FMTChpYTMyLCBzeXNfIyNuYW1lKVxcbiAxMzM6XFx0XFxuIDEzNDpcXHQjZWxzZSAvKiBDT05GSUdfWDg2XzMyIHx8IENPTkZJR19JQTMyX0VNVUxBVElPTiAqL1xcbiAxMzU6XFx0I2RlZmluZSBfX0lBMzJfU1lTX1NUVUIwKG5hbWUpXFxuIDEzNjpcXHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxcbiAxMzc6XFx0I2RlZmluZSBfX0lBMzJfQ09ORF9TWVNDQUxMKG5hbWUpXFxuIDEzODpcXHQjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiB8fCBDT05GSUdfSUEzMl9FTVVMQVRJT04gKi9cXG4gMTM5OlxcdFxcbiAxNDA6XFx0I2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTlxcbiAxNDE6XFx0LypcXG4gMTQyOlxcdCAqIEZvciBJQTMyIGVtdWxhdGlvbiwgd2UgbmVlZCB0byBoYW5kbGUgXFxcImNvbXBhdFxcXCIgc3lzY2FsbHMgKmFuZCogY3JlYXRlXFxuIDE0MzpcXHQgKiBhZGRpdGlvbmFsIHdyYXBwZXJzIChhcHRseSBuYW1lZCBfX2lhMzJfc3lzX3h5enp5KSB3aGljaCBkZWNvZGUgdGhlXFxuIDE0NDpcXHQgKiBpYTMyIHJlZ3MgaW4gdGhlIHByb3BlciBvcmRlciBmb3Igc2hhcmVkIG9yIFxcXCJjb21tb25cXFwiIHN5c2NhbGxzLiBBcyBzb21lXFxuIDE0NTpcXHQgKiBzeXNjYWxscyBtYXkgbm90IGJlIGltcGxlbWVudGVkLCB3ZSBuZWVkIHRvIGV4cGFuZCBDT05EX1NZU0NBTEwgaW5cXG4gMTQ2OlxcdCAqIGtlcm5lbC9zeXNfbmkuYyB0byBjb3ZlciB0aGlzIGNhc2UgYXMgd2VsbC5cXG4gMTQ3OlxcdCAqL1xcbiAxNDg6XFx0I2RlZmluZSBfX0lBMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTQ5OlxcdFxcdF9fU1lTX1NUVUIwKGlhMzIsIGNvbXBhdF9zeXNfIyNuYW1lKVxcbiAxNTA6XFx0XFxuIDE1MTpcXHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuIDE1MjpcXHRcXHRfX1NZU19TVFVCeChpYTMyLCBjb21wYXRfc3lzIyNuYW1lLFxcdFxcdFxcdFxcdFxcXFxcXG4gMTUzOlxcdFxcdFxcdCAgICBTQ19JQTMyX1JFR1NfVE9fQVJHUyh4LCBfX1ZBX0FSR1NfXykpXFxuIDE1NDpcXHRcXG4gMTU1OlxcdCNkZWZpbmUgX19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuIDE1NjpcXHRcXHRfX0NPTkRfU1lTQ0FMTChpYTMyLCBjb21wYXRfc3lzXyMjbmFtZSlcXG4gMTU3OlxcdFxcbiAxNTg6XFx0I2Vsc2UgLyogQ09ORklHX0lBMzJfRU1VTEFUSU9OICovXFxuIDE1OTpcXHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXFxuIDE2MDpcXHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXG4gMTYxOlxcdCNkZWZpbmUgX19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcXG4gMTYyOlxcdCNlbmRpZiAvKiBDT05GSUdfSUEzMl9FTVVMQVRJT04gKi9cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFxuIDE2NTpcXHQjaWZkZWYgQ09ORklHX1g4Nl9YMzJfQUJJXFxuIDE2NjpcXHQvKlxcbiAxNjc6XFx0ICogRm9yIHRoZSB4MzIgQUJJLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHN0dWIgZm9yIGNvbXBhdF9zeXNfKigpIHdoaWNoIGlzIGF3YXJlXFxuIDE2ODpcXHQgKiBvZiB0aGUgeDg2LTY0LXN0eWxlIHBhcmFtZXRlciBvcmRlcmluZyBvZiB4MzIgc3lzY2FsbHMuIFRoZSBzeXNjYWxscyBjb21tb25cXG4gMTY5OlxcdCAqIHdpdGggeDg2XzY0IG9idmlvdXNseSBkbyBub3QgbmVlZCBzdWNoIGNhcmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjE2LjczMzY3ODk2OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDM4NDUxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGVjb2RpbmcgVGhpcyBTeXN0ZW0gQ2FsbCBTdHViKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fU1lTX1NUVUJ4KHg2NCwgc3lzIyNuYW1lLCAuLi4pYCBtYWNyby4gSXQncyBjbGVhcmx5IGEgc3lzdGVtIGNhbGwgc3R1YiBnZW5lcmF0b3IgZm9yIHg2NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgYHN5cyMjbmFtZWAgcGFydCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGRlZmluaW5nIHRoZSBlbnRyeSBwb2ludCBmb3IgYSBzcGVjaWZpYyBzeXN0ZW0gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgd29ya3MgaW50ZXJuYWxseSwgYW5kIGZyb20gdGhlIHN0dWIsIGl0IGFwcGVhcnMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgc3R1YiBjYWxscyBgX19zZV9zeXNfY2xvc2UoLi4uKWAuIE5vdyB0aGF0IEkga25vdyB3aGVyZSBpdCBjYWxscyB0bywgSSBuZWVkIHRvIGtub3cgd2hhdCBpdCBkb2VzLiBTbywgd2hlcmUgaXMgYF9fc2Vfc3lzX2Nsb3NlYCBkZWZpbmVkPyBJdCBzaG91bGQgYmUgaW4gdGhlIGhlYWRlcnMsIEknbSBndWVzc2luZy4gTGV0IG1lIGNoZWNrIGxpbmVzIDE5MCB0byAyNTAgb2YgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9yIGRlZmluaXRpb24gb2YgaG93IHRoaXMgc2VjdXJlIHN5c3RlbSBjYWxsIGNsb3NlIGlzIGhhbmRsZWQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzE4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToxOC43NzIxMzMyMjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdCAqIENvbXBhdCBtZWFucyBJQTMyX0VNVUxBVElPTiBhbmQvb3IgWDg2X1gzMi4gQXMgdGhleSB1c2UgYSBkaWZmZXJlbnRcXG4gMTkxOlxcdCAqIG1hcHBpbmcgb2YgcmVnaXN0ZXJzIHRvIHBhcmFtZXRlcnMsIHdlIG5lZWQgdG8gZ2VuZXJhdGUgc3R1YnMgZm9yIGVhY2hcXG4gMTkyOlxcdCAqIG9mIHRoZW0uXFxuIDE5MzpcXHQgKi9cXG4gMTk0OlxcdCNkZWZpbmUgQ09NUEFUX1NZU0NBTExfREVGSU5FMChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTk1OlxcdFxcdHN0YXRpYyBsb25nXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTY6XFx0XFx0X19kb19jb21wYXRfc3lzXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpO1xcdFxcdFxcXFxcXG4gMTk3OlxcdFxcdF9fSUEzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTg6XFx0XFx0X19YMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTk5OlxcdFxcdHN0YXRpYyBsb25nXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMDA6XFx0XFx0X19kb19jb21wYXRfc3lzXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpXFxuIDIwMTpcXHRcXG4gMjAyOlxcdCNkZWZpbmUgQ09NUEFUX1NZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMDM6XFx0XFx0c3RhdGljIGxvbmcgX19zZV9jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSk7XFx0XFxcXFxcbiAyMDQ6XFx0XFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjA1OlxcdFxcdF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVxcdFxcdFxcdFxcdFxcXFxcXG4gMjA2OlxcdFxcdF9fWDMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgX19WQV9BUkdTX18pXFx0XFx0XFx0XFx0XFxcXFxcbiAyMDc6XFx0XFx0c3RhdGljIGxvbmcgX19zZV9jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcXHRcXFxcXFxuIDIwODpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMDk6XFx0XFx0XFx0cmV0dXJuIF9fZG9fY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVMT1VTRSxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjEwOlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMTpcXHRcXHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcXG4gMjEyOlxcdFxcbiAyMTM6XFx0LypcXG4gMjE0OlxcdCAqIEFzIHNvbWUgY29tcGF0IHN5c2NhbGxzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQsIHdlIG5lZWQgdG8gZXhwYW5kXFxuIDIxNTpcXHQgKiBDT05EX1NZU0NBTExfQ09NUEFUIGluIGtlcm5lbC9zeXNfbmkuYyB0byBjb3ZlciB0aGlzIGNhc2UgYXMgd2VsbC5cXG4gMjE2OlxcdCAqL1xcbiAyMTc6XFx0I2RlZmluZSBDT05EX1NZU0NBTExfQ09NUEFUKG5hbWUpIFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjE4OlxcdFxcdF9fSUEzMl9DT01QQVRfQ09ORF9TWVNDQUxMKG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbiAyMTk6XFx0XFx0X19YMzJfQ09NUEFUX0NPTkRfU1lTQ0FMTChuYW1lKVxcbiAyMjA6XFx0XFxuIDIyMTpcXHQjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqL1xcbiAyMjI6XFx0XFxuIDIyMzpcXHQjZGVmaW5lIF9fU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIyNDpcXHRcXHRzdGF0aWMgbG9uZyBfX3NlX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfTE9ORyxfX1ZBX0FSR1NfXykpO1xcdFxcXFxcXG4gMjI1OlxcdFxcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjI2OlxcdFxcdF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXHRcXFxcXFxuIDIyNzpcXHRcXHRfX0lBMzJfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVxcdFxcdFxcdFxcdFxcXFxcXG4gMjI4OlxcdFxcdHN0YXRpYyBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcXHRcXFxcXFxuIDIyOTpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMzA6XFx0XFx0XFx0bG9uZyByZXQgPSBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfQ0FTVCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjMxOlxcdFxcdFxcdF9fTUFQKHgsX19TQ19URVNULF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuIDIzMjpcXHRcXHRcXHRfX1BST1RFQ1QoeCwgcmV0LF9fTUFQKHgsX19TQ19BUkdTLF9fVkFfQVJHU19fKSk7XFx0XFxcXFxcbiAyMzM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIzNDpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMzU6XFx0XFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcXG4gMjM2OlxcdFxcbiAyMzc6XFx0LypcXG4gMjM4OlxcdCAqIEFzIHRoZSBnZW5lcmljIFNZU0NBTExfREVGSU5FMCgpIG1hY3JvIGRvZXMgbm90IGRlY29kZSBhbnkgcGFyYW1ldGVycyBmb3JcXG4gMjM5OlxcdCAqIG9idmlvdXMgcmVhc29ucywgYW5kIHBhc3Npbmcgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgdG8gaXQgaW4gJXJkaSBkb2VzIG5vdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToxOC43NzIyMDgxNTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTkyNjQ3MzExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGNsb3NlYCBTeXNjYWxsIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgYGNsb3NlYCBzeXNjYWxsLiBUaGUgY29kZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB3ZSdyZSBkZWFsaW5nIHdpdGggYF9fZG9fc3lzX2Nsb3NlYCwgYF9fc2Vfc3lzX2Nsb3NlYCwgYW5kIHVsdGltYXRlbHksIGBfX3g2NF9zeXNfY2xvc2VgLCB3aGljaCBpcyB0aGUgdmlzaWJsZSBzeW1ib2wgaW4gYHZtbGludXhgIGZvciBhbWQ2NCAoYW5kIGBfX2lhMzJfc3lzX2Nsb3NlYCBpZiBpYTMyIGlzIGVuYWJsZWQpLiBgX19kb19zeXNfY2xvc2VgIGlzIGBzdGF0aWMgaW5saW5lYCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLiBUaGUgcGF0Y2ggaXRzZWxmIGp1c3QgdG91Y2hlcyB0aGUgYGNsb3NlYCBzeXNjYWxsIGluIGBmcy9vcGVuLmNgLiBJJ3ZlIGNoZWNrZWQgdGhlIGNvZGUsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIgZnVuY3Rpb25zIGFmZmVjdGVkLlxuXG5NeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgYF9feDY0X3N5c19jbG9zZWAgaXMgY29uc2lkZXJlZCBhIFwidWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGguXCIgVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBzYXlzIHRvICphdm9pZCogbGlzdGluZyB0aGVzZSwgYXMgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQgYnkgdGFyZ2V0aW5nIHRvbyBtYW55IHVucmVsYXRlZCB0ZXN0cy4gQnV0ICpldmVyeSogcHJvZ3JhbSBpbiB0aGUgc3l6a2FsbGVyIGNvcnB1cyBhbG1vc3QgY2VydGFpbmx5IGhhcyBhIGNhbGwgdG8gYGNsb3NlYC4gT3IgZG9lcyBpdD8gT2theSwgbWF5YmUgbm90ICpldmVyeSogcHJvZ3JhbSwgYnV0IGBjbG9zZWAgaXMgZGVmaW5pdGVseSBvbmUgb2YgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIHN5c2NhbGxzLiBCdXQgaXQncyBub3QgYSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3IsIHBhZ2UgZmF1bHQgaGFuZGxlciwgb3IgY29yZSBzeW5jIHByaW1pdGl2ZSwgYW5kIHRoZSBwYXRjaCBJUyBpbiBgX194NjRfc3lzX2Nsb3NlYC4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsb2dpYyBpbnNpZGUgb2YgdGhlIGNsb3NlIHN5c2NhbGwuXG5cbklmIEkgZG9uJ3QgbGlzdCBgX194NjRfc3lzX2Nsb3NlYCwgd2hhdCBlbHNlIGlzIHRoZXJlIHRvIGZvY3VzIG9uPyBOb3RoaW5nIGVsc2Ugd2FzIG1vZGlmaWVkISBUaGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhlIGBjbG9zZWAgc3lzY2FsbCwgc28gaXRzIGVudHJ5cG9pbnQgaXMgYF9feDY0X3N5c19jbG9zZWAuIElmIEkgb21pdCBpdCwgRm9jdXNTeW1ib2xzIHdvdWxkIGJlIGVtcHR5LCB3aGljaCBpcyBub3QgcGVybWl0dGVkIHdoZW4gV29ydGhGdXp6aW5nIGlzIHRydWUuIEl0J3MgdGhlICpzcGVjaWZpYyogZW50cnkgcG9pbnQgZm9yIHRoZSBmZWF0dXJlLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBpczogaXMgYF9feDY0X3N5c19jbG9zZWAgXCJ1YmlxdWl0b3VzXCIgaW4gdGhlICpyZWxldmFudCogc2Vuc2UgZm9yIHN5emthbGxlcidzIGZvY3VzIHN5bWJvbCBsb2dpYz8gSXQncyBjb21tb24sIHllcywgYnV0IGl0J3Mgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIHV0aWxpdHkuIEl0J3MgdGhlIGRpcmVjdCBlbnRyeSBwb2ludCBvZiBhIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG5JcyBpdCBwb3NzaWJsZSB0aGF0IGBfX2RvX3N5c19jbG9zZWAgaXMgdGhlIGVudHJ5cG9pbnQ/IE5vLCBiZWNhdXNlIGl0IGlzIGBzdGF0aWMgaW5saW5lYCFcblxuSWYgSSAqZG9uJ3QqIGZvY3VzIG9uIGBfX3g2NF9zeXNfY2xvc2VgLCB3aGF0IGlzIHRoZXJlIHRvIGZvY3VzIG9uPyBBYnNvbHV0ZWx5IG5vdGhpbmchXG5cblRoZXJlZm9yZSwgdGhlIG9idmlvdXMgY2hvaWNlIGlzIHRvIGxpc3QgYF9feDY0X3N5c19jbG9zZWAgaW4gYEZvY3VzU3ltYm9sc2AuIEl0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCB0YXJnZXQgZm9yIGRpcmVjdGluZyB0aGUgZnV6emVyIHRvIHRoZSByZWxldmFudCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTczNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToyOC42OTg2ODQwOTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzgxNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9wZW5cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlLTktXFxuZnMvTWFrZWZpbGU6MTA6b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xMS1cXHRcXHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxcXFxuLS1cXG5mcy9NYWtlZmlsZS0xNi1cXHRcXHRzdGFjay5vIGZzX3N0cnVjdC5vIHN0YXRmcy5vIGZzX3Bpbi5vIG5zZnMubyBcXFxcXFxuZnMvTWFrZWZpbGU6MTc6XFx0XFx0ZnNfZGlyZW50Lm8gZnNfY29udGV4dC5vIGZzX3BhcnNlci5vIGZzb3Blbi5vIGluaXQubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTgtXFx0XFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcXFxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYz05MzE2PW5mc2Q0X3NldF9vcGVuc3RhdGVpZChzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSxcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmMtOTMxOC17XFxuZnMvbmZzZC9uZnM0c3RhdGUuYzo5MzE5OlxcdHB1dF9zdGF0ZWlkKGNzdGF0ZSwgXFx1MDAyNnUtXFx1MDAzZW9wZW4ub3Bfc3RhdGVpZCk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy05MzIwLX1cXG4tLVxcbmZzL3Zlcml0eS9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19GU19WRVJJVFkpICs9IGVuYWJsZS5vIFxcXFxcXG4tLVxcbmZzL3Zlcml0eS9NYWtlZmlsZS02LVxcdFxcdFxcdCAgIG1lYXN1cmUubyBcXFxcXFxuZnMvdmVyaXR5L01ha2VmaWxlOjc6XFx0XFx0XFx0ICAgb3Blbi5vIFxcXFxcXG5mcy92ZXJpdHkvTWFrZWZpbGUtOC1cXHRcXHRcXHQgICBwYWdlY2FjaGUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjI4Ljc2OTQ3MzUxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTA1ODI4MDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgc3RyYWlnaHRmb3J3YXJkOiBgb3Blbi5vYCBpcyBhbHdheXMgYnVpbHQsIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgaGVuY2UgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBgW11gLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGBXb3J0aEZ1enppbmdgPyBMZXQncyBkaXZlIGRlZXAuXG5cbkkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgYXBwbHkgdGhlIGNyaXRlcmlhLiAgVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFyZSBjbGVhcjogZG9lcyB0aGUgbW9kaWZpZWQgY29kZSBmYWxsICpzdHJpY3RseSogaW50byBhbnkgb2YgdGhlIGV4Y2x1c2lvbiBjYXRlZ29yaWVzPyBOby4gVGhpcyBwYXRjaCBpbiBgZnMvb3Blbi5jYCBkaXJlY3RseSBhbHRlcnMga2VybmVsIEMgY29kZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSBoYW5kbGluZyBvZiB0aGUgYGNsb3NlKClgIHN5c3RlbSBjYWxsJ3MgcmV0dXJuIHZhbHVlIHdoZW4gaW50ZXJydXB0ZWQuIEl0J3MgYSBjbGVhciBtb2RpZmljYXRpb24gdG8gZXhlY3V0YWJsZSBjb2RlIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIHRoZSBjb3JlIFZGUyBzdWJzeXN0ZW0uIFRoZXJlZm9yZSwgbmVnYXRpdmUgY3JpdGVyaWEgYXJlIG5vdCBtZXQuXG5cbk5vdywgY2hlY2tpbmcgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgXCJDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIC4uLiBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXCIgIEl0IGlzIGEgZGlyZWN0IGFsdGVyYXRpb24gb2Ygc3lzY2FsbCBoYW5kbGluZy4gSXQgYWZmZWN0cyBzeXN0ZW0gY2FsbCByZXR1cm4gdmFsdWVzLiBUaHVzLCBiYXNlZCBvbiB0aGlzIHBvc2l0aXZlIGNyaXRlcmlvbiwgIGBXb3J0aEZ1enppbmdgICptdXN0KiBiZSBgdHJ1ZWAuXG5cbk5leHQsIHRoZSBjcnVjaWFsIHN0ZXA6IGRlZmluaW5nIGBGb2N1c1N5bWJvbHNgLiAgQXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMuIGBfX3g2NF9zeXNfY2xvc2VgIGlzIE5PVCBhIFwiZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yXCIsIFwicGFnZSBmYXVsdCBoYW5kbGVyXCIsIG9yIFwiY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLlwiIGBfX3g2NF9zeXNfY2xvc2VgICppcyogdGhlIGV4cGxpY2l0IGVudHJ5IHBvaW50IGZvciB0aGUgYGNsb3NlKClgIHN5c3RlbSBjYWxsIG9uIHg4Nl82NCwgd2hpY2ggaXMgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoaXMgcGF0Y2ggbW9kaWZpZXMuXG5cbkxldCdzIGNhcmVmdWxseSBjb25zaWRlciB3aGV0aGVyIGl0IGlzIHViaXF1aXRvdXMuIFN5emthbGxlcidzIHB1cnBvc2UgaXMgdG8gZmluZCBidWdzIGFuZCBlcnJvcnMgaW4gYW55IGNhbGwuIFNob3VsZCB3ZSBpbmNsdWRlIGBfX3g2NF9zeXNfY2xvc2VgPyBTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4YWN0IGJlaGF2aW9yIG9mIGBjbG9zZWAsIHRoZSBhbnN3ZXIgaXMgeWVzLiBTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4YWN0IGJlaGF2aW9yIG9mIGBjbG9zZWAsIHdlIG11c3QgaW5jbHVkZSBpdC4gYGNsb3NlYCBpcyBub3QgY2FsbGVkIGV2ZXJ5d2hlcmUuIFN5emthbGxlciBtdXN0IGZvY3VzIG9uIGBfX3g2NF9zeXNfY2xvc2VgIGJlY2F1c2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBjbG9zZWAuIFdlIG11c3QgaW5jbHVkZSBpdC5cblxuU2hvdWxkIHdlIGFsc28gaW5jbHVkZSBgX19kb19zeXNfY2xvc2VgPyAgVGhhdCBkZXBlbmRzIG9uIHdoYXQgc3ltYm9scyB0aGUgY29tcGlsZXIgYWN0dWFsbHkgZW1pdHMuIE9uIHg4Nl82NCwgYF9feDY0X3N5c19jbG9zZWAgKmlzKiB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCwgYnV0IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gbWlnaHQgYmUgaW4gYF9fZG9fc3lzX2Nsb3NlYC4gU3l6a2FsbGVyIHdpbGwgcmVzb2x2ZSB0aGlzLCBzbyBsaXN0aW5nICpib3RoKiBpcyB0aGUgc2FmZXN0IGFwcHJvYWNoOiBgW1wiX194NjRfc3lzX2Nsb3NlXCIsIFwiX19kb19zeXNfY2xvc2VcIl1gLlxuXG5ObyBmdXJ0aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC5cblxuVG8gZW5zdXJlIHNvdW5kbmVzcywgSSBkb3VibGUtY2hlY2sgYFdvcnRoRnV6emluZ2AgYWdhaW46XG5cbjEuICBUaGlzIHBhdGNoICpjaGFuZ2VzKiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYC1FSU5UUmAgdG8gYDBgIGluIGNlcnRhaW4gY2FzZXMuIFRoYXQgY291bGQgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGFsdGVyIGJlaGF2aW9yLlxuMi4gIEl0ICphZGRzKiBgLUVJTlRSYCB0byB0aGUgbGlzdCBvZiB2YWx1ZXMgdG8gYmUgY2hhbmdlZCBmcm9tIHJldHVybi5cbjMuICBUaGlzIGltcGFjdHMgYW55IGZpbGVzeXN0ZW0gb3IgZHJpdmVyIHRoYXQgdXNlcyBgLmZsdXNoYCBjYWxsYmFja3Mgb3IgcmVtb3ZlcyBQT1NJWCBsb2Nrcy5cbjQuICBJdCdzIGluIHRoZSBWRlMvc3lzY2FsbCBwYXRoLlxuXG5UaHVzLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAgaXMgdW5lcXVpdm9jYWxseSBjb3JyZWN0LlxuXG5UaGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYFxuKiAgIGBSZWFzb25pbmdgOiAgVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgc3lzY2FsbCByZXR1cm4gdmFsdWUgaGFuZGxpbmcgaW4gVkZTLCBzcGVjaWZpY2FsbHkgdGhlIHJldHVybiBjb2RlcyBvZiBjbG9zZSwgbWFraW5nIGl0IGxpa2VseSB0byBpbnRyb2R1Y2UgYnVncyBhbmQgcmVncmVzc2lvbnMuIE5lZ2F0aXZlIGNyaXRlcmlhIGFyZSBub3QgbWV0LlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiX194NjRfc3lzX2Nsb3NlXCIsIFwiX19kb19zeXNfY2xvc2VcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gXG5cbkkgYW0gbm93IGNvbmZpZGVudCBhbmQgcmVhZHkgdG8gc3VibWl0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg5MiwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjQzLjgyNzc1NjMwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX194NjRfc3lzX2Nsb3NlXCIsXG4gICAgXCJfX2RvX3N5c19jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX194NjRfc3lzX2Nsb3NlXCIsXG4gICAgXCJfX2RvX3N5c19jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjQzLjgyNzc4MzMxOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NTI2MTczMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOTo0My44MjgxNzMwOTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjU1MjIyMzE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgdGhlIHNjYWxhciBpbnRlZ2VyIHJldHVybiBjb2RlIG9mIHRoZSBjbG9zZSgyKSBzeXNjYWxsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgaW50ZXJhY3Qgd2l0aCBhbnkgbWVtb3J5IGJ1ZmZlcnMsIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNTJlNzkyNzc5YTAwYjJjNjBjYTIyNmNhZjJkNjBjNjc0NjFhMWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMjA6MDg6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcbmluZGV4IDQwODkyNWQ3YmQwYjcuLjgxYTQzYjZjNWI2YjkgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbisrKyBiL2ZzL29wZW4uY1xuQEAgLTE1MTMsMTIgKzE1MTMsMTcgQEAgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxuIFx0aWYgKGxpa2VseShyZXR2YWwgPT0gMCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogY2FuJ3QgcmVzdGFydCBjbG9zZSBzeXNjYWxsIGJlY2F1c2UgZmlsZSB0YWJsZSBlbnRyeSB3YXMgY2xlYXJlZCAqL1xuLVx0aWYgKHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHxcbitcdC8qXG4rXHQgKiBUaGUgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLCBzbyBhbiBpbnRlcnJ1cHRlZFxuK1x0ICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlXG4rXHQgKiBkZXNjcmlwdG9yIGhhcyBiZWVuIGRldGFjaGVkLlxuK1x0ICovXG4rXHRpZiAocmV0dmFsID09IC1FSU5UUiB8fFxuK1x0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHxcbiBcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8XG4gXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVE5PSEFORCB8fFxuIFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLKVxuLVx0XHRyZXR2YWwgPSAtRUlOVFI7XG4rXHRcdHJldHZhbCA9IDA7XG4gXG4gXHRyZXR1cm4gcmV0dmFsO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjQzLjgyODE3NDE3OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODU0MTk2MjgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IGluIGBmcy9vcGVuLmNgLCB3aXRoaW4gdGhlIGBjbG9zZWAgc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24gKGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpYCkuIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGJleW9uZCB0aGUgdXN1YWwgS0FTQU4uXG5cbkZpcnN0LCBsZXQncyBkbyBhIHF1aWNrIHJpc2sgYXNzZXNzbWVudC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVmZW5zaXZlIGFuYWx5c2lzIOKAkyBkZWNpZGluZyBvbiB0aGUgcmlnaHQgc2FuaXRpemVyIGZvciBmdXp6aW5nLiBJdCdzIGJlbmlnbiwgZGVmaW5pdGVseSBsb3cgc2V2ZXJpdHkuIE5vIG1hbHdhcmUgZGV2ZWxvcG1lbnQsIG5vIGV4cGxvaXRhdGlvbiwgYWxsIHNhZmUuIFdlJ3JlIGp1c3QgdHJ5aW5nIHRvIGVuaGFuY2Ugb3VyIHRlc3RpbmcgYXBwcm9hY2guIEdvb2QsIHdlIGNhbiBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGFjdHVhbGx5IGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGRpZmYgaW52b2x2ZXMgaGFuZGxpbmcgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIGBjbG9zZWAgc3lzdGVtIGNhbGwuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgY2hhbmdpbmcgaG93IGBFSU5UUmAgKGludGVycnVwdGVkIHN5c3RlbSBjYWxsKSBpcyBoYW5kbGVkIGFmdGVyIHRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuIFByZXZpb3VzbHksIGl0IGFwcGVhcnMgdGhlIHBhdGNoIHdvdWxkIGF0dGVtcHQgdG8gcmVzdGFydCBgY2xvc2VgIGV2ZW4gYWZ0ZXIgdGhlIGZpbGUgdGFibGUgZW50cnkgd2FzIGNsZWFyZWQsIHdoaWNoIGlzIG5vdCBzYWZlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhpcyBiZWhhdmlvci4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgZmlsZSB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBzb21lIGNvbnRleHQgYXJvdW5kIGxpbmUgMTUxMy5cblxuTm93IEkgbmVlZCB0byBkZWNpZGUgaWYgS01TQU4gaXMgbmVjZXNzYXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gSXMgdGhpcyBhIHNpbXBsZSBjaGFuZ2Ugb2YgZXJyb3IgcmVwb3J0aW5nIGxvZ2ljLCBvciBkb2VzIGl0IHRvdWNoIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgcmVsYXRlZCB0byBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCBpbiBhIHdheSB0aGF0IEtNU0FOIHdvdWxkIGJlIHZhbHVhYmxlPyBJJ2xsIGRpZyBkZWVwZXIgaW50byBgZnMvb3Blbi5jYCB0byBmaWd1cmUgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDoxMDowMi4zNzAxMzk0NDVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb3Blbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0OTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0OTU6XFx0ICovXFxuMTQ5NjpcXHRTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXFxuMTQ5NzpcXHR7XFxuMTQ5ODpcXHRcXHRpbnQgcmV0dmFsO1xcbjE0OTk6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuMTUwMDpcXHRcXG4xNTAxOlxcdFxcdGZpbGUgPSBmaWxlX2Nsb3NlX2ZkKGZkKTtcXG4xNTAyOlxcdFxcdGlmICghZmlsZSlcXG4xNTAzOlxcdFxcdFxcdHJldHVybiAtRUJBREY7XFxuMTUwNDpcXHRcXG4xNTA1OlxcdFxcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlsZSwgY3VycmVudC1cXHUwMDNlZmlsZXMpO1xcbjE1MDY6XFx0XFxuMTUwNzpcXHRcXHQvKlxcbjE1MDg6XFx0XFx0ICogV2UncmUgcmV0dXJuaW5nIHRvIHVzZXIgc3BhY2UuIERvbid0IGJvdGhlclxcbjE1MDk6XFx0XFx0ICogd2l0aCBhbnkgZGVsYXllZCBmcHV0KCkgY2FzZXMuXFxuMTUxMDpcXHRcXHQgKi9cXG4xNTExOlxcdFxcdGZwdXRfY2xvc2Vfc3luYyhmaWxlKTtcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0aWYgKGxpa2VseShyZXR2YWwgPT0gMCkpXFxuMTUxNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNTE1OlxcdFxcbjE1MTY6XFx0XFx0LypcXG4xNTE3OlxcdFxcdCAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQsIHNvIGFuIGludGVycnVwdGVkXFxuMTUxODpcXHRcXHQgKiBjbG9zZSBjYW5ub3QgYmUgcmVzdGFydGVkIHNhZmVseS4gRG8gbm90IHJlcG9ydCBFSU5UUiBhZnRlciB0aGVcXG4xNTE5OlxcdFxcdCAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuXFxuMTUyMDpcXHRcXHQgKi9cXG4xNTIxOlxcdFxcdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XFxuMTUyMjpcXHRcXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxcbjE1MjM6XFx0XFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0lOVFIgfHxcXG4xNTI0OlxcdFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5EIHx8XFxuMTUyNTpcXHRcXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spXFxuMTUyNjpcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbjE1Mjc6XFx0XFxuMTUyODpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbjE1Mjk6XFx0fVxcbjE1MzA6XFx0XFxuMTUzMTpcXHQvKlxcbjE1MzI6XFx0ICogVGhpcyByb3V0aW5lIHNpbXVsYXRlcyBhIGhhbmd1cCBvbiB0aGUgdHR5LCB0byBhcnJhbmdlIHRoYXQgdXNlcnNcXG4xNTMzOlxcdCAqIGFyZSBnaXZlbiBjbGVhbiB0ZXJtaW5hbHMgYXQgbG9naW4gdGltZS5cXG4xNTM0OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDoxMDowMi4zNzAyMzkyNDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODAxMDEzOTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjbG9zZSgyKWAgU3lzY2FsbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSBgY2xvc2UoMilgIHN5c2NhbGwsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBpbnRlcnJ1cHRpb24gYnkgc2lnbmFscy4gVGhlIGNvcmUgaXNzdWUgaXMgdGhpczogaWYgYGZpbHBfZmx1c2goKWAgcmV0dXJucyBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcgYW4gaW50ZXJydXB0IChsaWtlIGAtRUlOVFJgIG9yIG9uZSBvZiB0aGUgYC1FUkVTVEFSVCpgIHZhcmlhbnRzKSwgdGhlIHByZXZpb3VzIGJlaGF2aW9yIHdhcyB0byByZXR1cm4gYC1FSU5UUmAgdG8gdXNlcnNwYWNlLiBUaGlzIHNlZW1zIHNpbXBsZSBlbm91Z2guXG5cblRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQgZnJvbSB0aGUgY29udGV4dCwgaXMgdGhhdCBhIHJldHVybiBvZiBgLUVJTlRSYCBlbmNvdXJhZ2VzIHRoZSBhcHBsaWNhdGlvbiB0byByZXRyeSB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbC4gVGhlIHN0YW5kYXJkIHNheXMgaXQgY2FuLCBidXQgUE9TSVggaXMgYW4gaWRlYWxpemF0aW9uLiBJbiByZWFsaXR5LCBpbiB0aGUgTGludXgga2VybmVsLCB0aGUgZmlsZSBkZXNjcmlwdG9yIGhhcyAqYWxyZWFkeSogYmVlbiBkZXRhY2hlZCBhbmQgY2xvc2VkIGJ5IHRoZSB0aW1lIHdlIHdvdWxkIHJldHVybiB0byB0aGUgc3lzdGVtIGNhbGwuIElmIHRoZSBhcHBsaWNhdGlvbiByZXRyaWVzIGBjbG9zZSgpYCBpbiB0aGlzIHNpdHVhdGlvbiwgaXQgaXMgbGlrZWx5IHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYmVlbiByZS11c2VkIGFuZCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZpbGUgd2lsbCBiZSBjbG9zZWQuIFRoaXMgaXMgYmVjYXVzZSB0aGUga2VybmVsIGhhcyBhbHJlYWR5IGNsb3NlZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFuZCB0aGUgcHJvY2VzcyBpcyBubyBsb25nZXIgYWJsZSB0byBzYWZlbHkgY2xvc2UgaXQuIFRoaXMgcGF0Y2ggYWltcyB0byBmaXggdGhpcy5cblxuU28sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiBiZWhhdmlvci4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU5UUmAgaW4gdGhlc2UgaW50ZXJydXB0ZWQgc2NlbmFyaW9zLCBpdCBub3cgcmV0dXJucyAwLCBpbmRpY2F0aW5nIHN1Y2Nlc3MuIFRoaXMgaXMgYSBtdWNoIGJldHRlciBhcHByb2FjaCBzaW5jZSBpdCBhdm9pZHMgbWlzbGVhZGluZyB0aGUgYXBwbGljYXRpb24gaW50byBhdHRlbXB0aW5nIGEgcmV0cnkgb24gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCBpcyBubyBsb25nZXIgdmFsaWQsIGFuZCBpcyBub3cgXCJjbG9zZWQuXCJcblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHNhZmV0eS4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MuIEknbSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBwYXRjaCBhZ2FpbnN0IGNvbW1vbiB2dWxuZXJhYmlsaXRpZXM6XG5cbiogICAqKkNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2U/KiogTm8sIGBjbG9zZWAgb25seSByZXR1cm5zIGFuIGludGVnZXIgZXJyb3IgY29kZS5cbiogICAqKlN0cnVjdC9idWZmZXIgYWxsb2NhdGlvbj8qKiBObywgdGhpcyBwYXRjaCBpcyBvbmx5IGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUuXG4qICAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBgcmV0dmFsYCBpcyBpbml0aWFsaXplZCBieSBgZmlscF9mbHVzaGAsIHNvIHdlIGFyZSBnb29kLlxuKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8uIGByZXR2YWxgIGlzIHRoZSByZXN1bHQgb2YgYGZpbHBfZmx1c2hgLlxuKiAgICoqQm91bmRzLCBsZW5ndGhzLCBvciBkYXRhIGNvcHlpbmcgYWZmZWN0ZWQ/KiogTm9wZS5cbiogICAqKkluZm8tbGVhayByaXNrPyoqIE5vdCBpbiB0aGUgc2xpZ2h0ZXN0LlxuXG5UaGVyZWZvcmUsIG5vIHJpc2sgb2YgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSB0byB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIHBhdGNoIGFwcGVhcnMgdG8gYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBzYWZlLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCBuZWVkZWQgaGVyZS5cblxuSSdtIGNvbmZpcm1pbmcgdGhpcyBpcyBhIGNsZWFyIFwiTmVlZHNLTVNBTj1mYWxzZVwiIHNjZW5hcmlvLCBiYXNlZCBvbiB0aGUga2VybmVsJ3MgZG9jdW1lbnRhdGlvbi4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZiB0aGUgcmlza3MgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYW5kIGl0J3Mgd2VsbCB3aXRoaW4gdGhlIGJvdW5kcyBvZiBzdGFuZGFyZCBidWcgZGV0ZWN0aW9uLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyNiwiT3V0cHV0VG9rZW5zIjoxNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDoxMDoxMC4zODAzODA5MDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgaGFuZGxpbmcgaW4gc3lzX2Nsb3NlKCkgd2hlbiBmaWxwX2ZsdXNoKCkgcmV0dXJucyAtRUlOVFIgb3IgYSByZXN0YXJ0IGVycm9yIGNvZGUgKC1FUkVTVEFSVFNZUywgLUVSRVNUQVJUTk9JTlRSLCAtRVJFU1RBUlROT0hBTkQsIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spLCByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIC1FSU5UUi5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIHRoZSBzY2FsYXIgaW50ZWdlciByZXR1cm4gY29kZSBvZiB0aGUgY2xvc2UoMikgc3lzY2FsbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGludGVyYWN0IHdpdGggYW55IG1lbW9yeSBidWZmZXJzLCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgdGhlIHNjYWxhciBpbnRlZ2VyIHJldHVybiBjb2RlIG9mIHRoZSBjbG9zZSgyKSBzeXNjYWxsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgaW50ZXJhY3Qgd2l0aCBhbnkgbWVtb3J5IGJ1ZmZlcnMsIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgldd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 19:50:41 +0000 UTC FinishedAt: 2026-09-13 20:10:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "501cbbd276b77d34af20ea3dd4f897c93630bac8", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "501cbbd276b77d34af20ea3dd4f897c93630bac8", "config_name": "upstream-apparmor-kasan.config", "series_id": "cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__x64_sys_close", "__do_sys_close" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "501cbbd276b77d34af20ea3dd4f897c93630bac8", "base_tree": "vfs" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X194NjRfc3lzX2Nsb3NlJiMzNDssCiAgICAmIzM0O19fZG9fc3lzX2Nsb3NlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIHRoZSBzY2FsYXIgaW50ZWdlciByZXR1cm4gY29kZSBvZiB0aGUgY2xvc2UoMikgc3lzY2FsbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGludGVyYWN0IHdpdGggYW55IG1lbW9yeSBidWZmZXJzLCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNTJlNzkyNzc5YTAwYjJjNjBjYTIyNmNhZjJkNjBjNjc0NjFhMWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMjA6MDg6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Li44MWE0M2I2YzViNmI5IDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmNcbkBAIC0xNTEzLDEyICYjNDM7MTUxMywxNyBAQCBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXG4gXHRpZiAobGlrZWx5KHJldHZhbCA9PSAwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBjYW4mIzM5O3QgcmVzdGFydCBjbG9zZSBzeXNjYWxsIGJlY2F1c2UgZmlsZSB0YWJsZSBlbnRyeSB3YXMgY2xlYXJlZCAqL1xuLVx0aWYgKHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQsIHNvIGFuIGludGVycnVwdGVkXG4mIzQzO1x0ICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlXG4mIzQzO1x0ICogZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmV0dmFsID09IC1FSU5UUiB8fFxuJiM0MztcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XG4gXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVE5PSU5UUiB8fFxuIFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHxcbiBcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSylcbi1cdFx0cmV0dmFsID0gLUVJTlRSO1xuJiM0MztcdFx0cmV0dmFsID0gMDtcbiBcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X194NjRfc3lzX2Nsb3NlJiMzNDssCiAgICAmIzM0O19fZG9fc3lzX2Nsb3NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNTJlNzkyNzc5YTAwYjJjNjBjYTIyNmNhZjJkNjBjNjc0NjFhMWM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMjA6MDg6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNDA4OTI1ZDdiZDBiNy4uODFhNDNiNmM1YjZiOSAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uYwpAQCAtMTUxMywxMiAmIzQzOzE1MTMsMTcgQEAgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKQogCWlmIChsaWtlbHkocmV0dmFsID09IDApKQogCQlyZXR1cm4gMDsKIAotCS8qIGNhbiYjMzk7dCByZXN0YXJ0IGNsb3NlIHN5c2NhbGwgYmVjYXVzZSBmaWxlIHRhYmxlIGVudHJ5IHdhcyBjbGVhcmVkICovCi0JaWYgKHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHwKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWQKJiM0MzsJICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlCiYjNDM7CSAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0dmFsID09IC1FSU5UUiB8fAomIzQzOwkgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fAogCSAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8CiAJICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHwKIAkgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spCi0JCXJldHZhbCA9IC1FSU5UUjsKJiM0MzsJCXJldHZhbCA9IDA7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEV2YWx1YXRpb24gZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIHRha2UgYSBsb29rIGF0IGEga2VybmVsIHBhdGNoLCBzcGVjaWZpY2FsbHkgdG8gc2VlIGlmIGl0JiMzOTtzIHJlbGV2YW50IGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSB0YXNrIGlzIGVzc2VudGlhbGx5IGEgc29mdHdhcmUgcXVhbGl0eSBhc3N1cmFuY2UgYW5kIGRlZmVuc2l2ZSBtYW5ldXZlci4gSSYjMzk7bSBub3QgbG9va2luZyBmb3IgbWFsd2FyZSBvciB0cnlpbmcgdG8gY3JhZnQgYW4gZXhwbG9pdCBoZXJlLiBNeSBvYmplY3RpdmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2gsIHdpdGhpbiBgZnMvb3Blbi5jYCByZWdhcmRpbmcgdGhlIGBjbG9zZWAgc3lzY2FsbCwgaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZm9jdXNlZCBmdXp6aW5nIGVmZm9ydHMuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbnMuCgpGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBwYXRjaCBpcyAqYWN0dWFsbHkqIGRvaW5nLiBMZXQmIzM5O3MgaW5zcGVjdCB0aGUgY29kZSBkaXJlY3RseS4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgY2xvc2VgIHN5c3RlbSBjYWxsIHdpdGhpbiBgZnMvb3Blbi5jYC4gSSBzZWUgdGhlIGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpYCBkZWZpbml0aW9uLCBhbmQgaXQgYXBwZWFycyB0aGUgcHJpbWFyeSBjaGFuZ2UgcmVsYXRlcyB0byBlcnJvciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IHdlIGRlYWwgd2l0aCBpbnRlcnJ1cHRlZCBgY2xvc2VgIGNhbGxzLiBUaGUgZXhpc3RpbmcgY29kZSBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGByZXR2YWxgIGlzIG9uZSBvZiBgRVJFU1RBUlRTWVNgLCBldGMuIGFuZCBub3cgdGhlIGZpeCBhbHNvIGhhbmRsZXMgdGhlIGVycm9yIGBFSU5UUmAuIFRoaXMgY2hhbmdlIGFsdGVycyBob3cgd2UgYXJlIGhhbmRsaW5nIGEgcmV0cnkgb24gYGNsb3NlYCBzeXN0ZW0gY2FsbC4KCkhvd2V2ZXIsIEkmIzM5O20gbm90IGp1c3QgZ29pbmcgdG8gdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBsaW5lIG51bWJlcnMgYmVpbmcgcGF0Y2hlZC4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBmdWxsIGNvbnRlbnRzIG9mIGBmcy9vcGVuLmNgIGFyb3VuZCBsaW5lIDE1MTMsIHNvIEkgY2FuIHNlZSB3aGF0IGVsc2UgaXMgZ29pbmcgb24gaW4gdGhhdCBhcmVhLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGJlaW5nIGNoYW5nZWQgYW5kIHRoZSBleGFjdCBmdW5jdGlvbiB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDkwOlx0XG4xNDkxOlx0LypcbjE0OTI6XHQgKiBDYXJlZnVsIGhlcmUhIFdlIHRlc3Qgd2hldGhlciB0aGUgZmlsZSBwb2ludGVyIGlzIE5VTEwgYmVmb3JlXG4xNDkzOlx0ICogcmVsZWFzaW5nIHRoZSBmZC4gVGhpcyBlbnN1cmVzIHRoYXQgb25lIGNsb25lIHRhc2sgY2FuJiMzOTt0IHJlbGVhc2VcbjE0OTQ6XHQgKiBhbiBmZCB3aGlsZSBhbm90aGVyIGNsb25lIGlzIG9wZW5pbmcgaXQuXG4xNDk1Olx0ICovXG4xNDk2Olx0U1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxuMTQ5NzpcdHtcbjE0OTg6XHRcdGludCByZXR2YWw7XG4xNDk5Olx0XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbjE1MDA6XHRcbjE1MDE6XHRcdGZpbGUgPSBmaWxlX2Nsb3NlX2ZkKGZkKTtcbjE1MDI6XHRcdGlmICghZmlsZSlcbjE1MDM6XHRcdFx0cmV0dXJuIC1FQkFERjtcbjE1MDQ6XHRcbjE1MDU6XHRcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlsZSwgY3VycmVudC1cdTAwM2VmaWxlcyk7XG4xNTA2Olx0XG4xNTA3Olx0XHQvKlxuMTUwODpcdFx0ICogV2UmIzM5O3JlIHJldHVybmluZyB0byB1c2VyIHNwYWNlLiBEb24mIzM5O3QgYm90aGVyXG4xNTA5Olx0XHQgKiB3aXRoIGFueSBkZWxheWVkIGZwdXQoKSBjYXNlcy5cbjE1MTA6XHRcdCAqL1xuMTUxMTpcdFx0ZnB1dF9jbG9zZV9zeW5jKGZpbGUpO1xuMTUxMjpcdFxuMTUxMzpcdFx0aWYgKGxpa2VseShyZXR2YWwgPT0gMCkpXG4xNTE0Olx0XHRcdHJldHVybiAwO1xuMTUxNTpcdFxuMTUxNjpcdFx0LypcbjE1MTc6XHRcdCAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQsIHNvIGFuIGludGVycnVwdGVkXG4xNTE4Olx0XHQgKiBjbG9zZSBjYW5ub3QgYmUgcmVzdGFydGVkIHNhZmVseS4gRG8gbm90IHJlcG9ydCBFSU5UUiBhZnRlciB0aGVcbjE1MTk6XHRcdCAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuXG4xNTIwOlx0XHQgKi9cbjE1MjE6XHRcdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XG4xNTIyOlx0XHQgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxuMTUyMzpcdFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0lOVFIgfHxcbjE1MjQ6XHRcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5EIHx8XG4xNTI1Olx0XHQgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spXG4xNTI2Olx0XHRcdHJldHZhbCA9IDA7XG4xNTI3Olx0XG4xNTI4Olx0XHRyZXR1cm4gcmV0dmFsO1xuMTUyOTpcdH1cbjE1MzA6XHRcbjE1MzE6XHQvKlxuMTUzMjpcdCAqIFRoaXMgcm91dGluZSBzaW11bGF0ZXMgYSBoYW5ndXAgb24gdGhlIHR0eSwgdG8gYXJyYW5nZSB0aGF0IHVzZXJzXG4xNTMzOlx0ICogYXJlIGdpdmVuIGNsZWFuIHRlcm1pbmFscyBhdCBsb2dpbiB0aW1lLlxuMTUzNDpcdCAqL1xuMTUzNTpcdFNZU0NBTExfREVGSU5FMCh2aGFuZ3VwKVxuMTUzNjpcdHtcbjE1Mzc6XHRcdGlmIChjYXBhYmxlKENBUF9TWVNfVFRZX0NPTkZJRykpIHtcbjE1Mzg6XHRcdFx0dHR5X3ZoYW5ndXBfc2VsZigpO1xuMTUzOTpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBhIGBjbG9zZSgyKWAgU3lzY2FsbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBjbG9zZSgyKWAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGVycm9yIHJldHVybnMgZnJvbSBgZmlscF9mbHVzaCgpYC4gUHJldmlvdXNseSwgYC1FSU5UUmAgd2FzIHJldHVybmVkIGRpcmVjdGx5LiBOb3csIGEgY2hlY2sgZm9yIGAtRUlOVFJgIGlzIGFkZGVkLCBhbmQgMCBpcyByZXR1cm5lZCBpbiBzb21lIGNhc2VzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBZZXMsIHRoaXMgaXMgdGhlIHN0YW5kYXJkIGBzeXNfY2xvc2VgIC8gYGNsb3NlKGZkKWAgZW50cnlwb2ludCwgc28gaXQmIzM5O3MgYWJzb2x1dGVseSByZWFjaGFibGUuIFRoZSBrZXkgcXVlc3Rpb24gbm93IGlzLCBpcyBpdCB3b3J0aCBmdXp6aW5nPwoKVGhlIHRyaWFnZSBwaGlsb3NvcGh5IHN0YXRlcyB0aGF0IHJlYWNoYWJpbGl0eSBpcyBwcmltYXJ5LiBNb2RpZmllZCByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLCB1bmxlc3MgaXQgZmFsbHMgaW50byBzcGVjaWZpYyBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhpcyBjaGFuZ2UgKmlzKiByZWFjaGFibGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIFZGUy9zeXNjYWxsIGhhbmRsaW5nIGFyZWEsIHNvIHBlciBzZWN0aW9uIDMsIGl0JiMzOTtzIGEgJiMzNDtjb3JlIHN1YnN5c3RlbSYjMzQ7IG1vZGlmaWNhdGlvbiwgYW5kIHRoZXJlZm9yZSBmYWxscyB1bmRlciAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsuCgpOb3csIHdlIG5lZWQgdG8gdGhpbmsgYWJvdXQgRm9jdXNTeW1ib2xzLiAgVGhlIGRvY3VtZW50IGVtcGhhc2l6ZXMgYXZvaWRpbmcgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuJiMzNDsgVGhpcyBtZWFucyBub3QgbGlzdGluZyB0aGluZ3MgbGlrZSBtZW1vcnkgYWxsb2NhdG9ycyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGBzeXNfY2xvc2VgIC8gYF9fZG9fc3lzX2Nsb3NlYCBpcyB1YmlxdWl0b3VzISBOZWFybHkgZXZlcnkgcHJvZ3JhbSBjYWxscyBgY2xvc2UoZmQpYC4gSG93ZXZlciwgaXQmIzM5O3MgdGhlICpzcGVjaWZpYyogbW9kaWZpY2F0aW9uIG9mIHRoZSBgY2xvc2VgIHN5c2NhbGwgdGhhdCBpcyB0aGUgdGFyZ2V0IGhlcmUuIFRoZSBvbmx5IG1vZGlmaWVkIGNvZGUgc2VlbXMgdG8gYmUgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgLiBUaGlzIGV4cGFuZHMgdG8gYF9fZG9fc3lzX2Nsb3NlYCBhbmQgYF9feDY0X3N5c19jbG9zZWAuIEJ1dCBpcyBpdCBhIHRhcmdldCBzcGVjaWZpYyBlbnRyeXBvaW50PwoKV2UgaGF2ZSB0byBkZXRlcm1pbmUgaWYgbWVudGlvbmluZyBgX19kb19zeXNfY2xvc2VgIHZpb2xhdGVzIHRoZSBydWxlIGFib3V0IGF2b2lkaW5nIHViaXF1aXRvdXMgY29kZS4gQ2FuIEZvY3VzU3ltYm9scyBiZSBlbXB0eT8gVGhlIHNjaGVtYSBzYXlzIHRoZXkmIzM5O3JlIG51bGxhYmxlIGJ1dCBvZiB0aGUgdHlwZSBBUlJBWS4gQ2FuIHdlIGZ1enogdGhlIGNoYW5nZSB3aXRob3V0IHNwZWNpZnlpbmcgYW55dGhpbmc/ICAKClRoZSBkb2N1bWVudCBzdHJlc3NlcyB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMuIElmIG9ubHkgdGhlIHN5c2NhbGwgaXRzZWxmIGhhcyBiZWVuIGNoYW5nZWQsIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbGxvd2VkIGFzIGEgdGFyZ2V0IGlmIGl0JiMzOTtzIHRoZSBleGFjdCBmdW5jdGlvbiB0aGF0IHdhcyBtb2RpZmllZD8gU2luY2Ugbm8gb3RoZXIgY2FsbGVyIGlzIG1vZGlmaWVkLCBhbmQgdGhlIGNoYW5nZSBpcyAqd2l0aGluKiB0aGUgYHN5c19jbG9zZWAgbG9naWMsIGl0IGlzIGxpa2VseSB0aGUgb25seSB0YXJnZXQuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgbW9yZSBjb250ZXh0IHRvIGJlICpjZXJ0YWluKi4gV2hhdCB3YXMgdGhlICpyZWFzb24qIGZvciB0aGlzIHBhdGNoPyBVbmRlcnN0YW5kaW5nICp3aHkqIHRoZXkgY2hhbmdlZCB0aGlzIGVycm9yIGhhbmRsaW5nIGluIGBjbG9zZWAgbWlnaHQgcmV2ZWFsIGEgbW9yZSBzcGVjaWZpYyB0YXJnZXQgb3IgY2xhcmlmeSB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXR2YWwgPT0gLUVSRVNUQVJUU1lTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29wZW4uYz0xNDk2PVNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClcbi0tXG5mcy9vcGVuLmMtMTUyMS1cdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XG5mcy9vcGVuLmM6MTUyMjpcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XG5mcy9vcGVuLmMtMTUyMy1cdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBmaWxwX2ZsdXNoYCwgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIFJvbGUgb2YgYGZpbHBfZmx1c2hgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGZpbHBfZmx1c2hgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IHNwZWNpZmljYWxseSAqaXMqIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24/JiMzNDsgSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gZmlsZSBvcGVyYXRpb25zLCBidXQgdGhlICYjMzQ7Zmx1c2gmIzM0OyBwYXJ0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIGRhdGEgc3luY2hyb25pemF0aW9uIGFuZCBlbnN1cmluZyBjb25zaXN0ZW5jeS4gSXMgaXQgYWJvdXQgd3JpdGluZyBidWZmZXJlZCBkYXRhIHRvIGRpc2s/IElzIGl0IGFib3V0IGludmFsaWRhdGluZyBjYWNoZXM/IE9yIGlzIGl0IGEgbW9yZSBjb21wcmVoZW5zaXZlIGNsZWFudXAgcHJvY2VkdXJlPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgc2NvcGUuIElzIGl0IGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBieSB1c2Vyc3BhY2Ugb3IgaXMgaXQgcHJpbWFyaWx5IGEga2VybmVsLWludGVybmFsIGZ1bmN0aW9uPyBEZXBlbmRpbmcgb24gaXRzIGRlc2lnbiwgaXRzIGJlaGF2aW91ciBtYXkgZGlmZmVyLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCB0b28sIHRoZSBmaWxlIHBvaW50ZXImIzM5O3MgY2hhcmFjdGVyaXN0aWNzLiBJcyB0aGUgZmlsZSBwb2ludGVyIHBvaW50aW5nIHRvIGEgYmxvY2sgZGV2aWNlLCBhIGNoYXJhY3RlciBkZXZpY2UsIG9yIGEgcmVndWxhciBmaWxlPyBUaGlzJiMzOTtsbCBhbGwgaW5mbHVlbmNlIGhvdyBgZmlscF9mbHVzaGAgaXMgZGVzaWduZWQsIGFuZCBob3cgaXQgYmVoYXZlcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaW4gYW55IHVzZSBjYXNlLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBjb2RlIGhhdmUgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHBfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYz0yNTY1PWludCBmY250bF9zZXRsayh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL2xvY2tzLmMtMjYxNS1cdCAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpbGUgYW5kIG91ciBmaWxlc19zdHJ1Y3QsIGp1c3QgbGlrZSBvblxuZnMvbG9ja3MuYzoyNjE2Olx0ICogZmlscF9mbHVzaCgpLiBUaGVyZSBpcyBubyBuZWVkIHRvIGRvIHRoYXQgd2hlbiB3ZSYjMzk7cmVcbmZzL2xvY2tzLmMtMjYxNy1cdCAqIHVubG9ja2luZyB0aG91Z2gsIG9yIGZvciBPRkQgbG9ja3MuXG4tLVxuZnMvbG9ja3MuYz0yNjg4PWludCBmY250bF9zZXRsazY0KHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZnMvbG9ja3MuYy0yNzM3LVx0ICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmlsZSBhbmQgb3VyIGZpbGVzX3N0cnVjdCwganVzdCBsaWtlIG9uXG5mcy9sb2Nrcy5jOjI3Mzg6XHQgKiBmaWxwX2ZsdXNoKCkuIFRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gdGhhdCB3aGVuIHdlJiMzOTtyZVxuZnMvbG9ja3MuYy0yNzM5LVx0ICogdW5sb2NraW5nIHRob3VnaCwgb3IgZm9yIE9GRCBsb2Nrcy5cbi0tXG5mcy9vcGVuLmM9MTQ0Nj1TWVNDQUxMX0RFRklORTIoY3JlYXQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCB1bW9kZV90LCBtb2RlKVxuLS1cbmZzL29wZW4uYy0xNDU5LSAqL1xuZnMvb3Blbi5jOjE0NjA6c3RhdGljIGludCBmaWxwX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IGlkKVxuZnMvb3Blbi5jLTE0NjEte1xuLS1cbmZzL29wZW4uYz0xNDgwPWludCBmaWxwX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IGlkKVxuLS1cbmZzL29wZW4uYy0xNDgzLVxuZnMvb3Blbi5jOjE0ODQ6XHRyZXR2YWwgPSBmaWxwX2ZsdXNoKGZpbHAsIGlkKTtcbmZzL29wZW4uYy0xNDg1LVx0ZnB1dF9jbG9zZShmaWxwKTtcbi0tXG5mcy9vcGVuLmM9MTQ5Nj1TWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXG4tLVxuZnMvb3Blbi5jLTE1MDQtXG5mcy9vcGVuLmM6MTUwNTpcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlsZSwgY3VycmVudC1cdTAwM2VmaWxlcyk7XG5mcy9vcGVuLmMtMTUwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYGZpbHBfZmx1c2hgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGZpbHBfZmx1c2hgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgcmVmcmVzaCBvdXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGtlcm5lbCBmdW5jdGlvbi4mIzM0OyBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhlIGxpZmVjeWNsZSBvZiBhIGZpbGUgZGVzY3JpcHRvciwgSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQgdGhlIHN1cmZhY2UgYW5kIHF1aWNrbHkgYW5hbHl6ZSB3aGVyZSB0aGlzIGlzIGludm9rZWQsIGhvdyBpdOKAmXMgYmVpbmcgdXNlZCwgYW5kIHRoZSB2YXJpb3VzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgZXhlY3V0ZWQuCgpNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBsaWtlbHkgYmUgaGFuZGxpbmcgZWRnZSBjYXNlcyBpbnZvbHZpbmcgZGlydHkgcGFnZXMgYW5kIGVuc3VyaW5nIGFueSBwZW5kaW5nIHdyaXRlcyBhcmUgcHVzaGVkIHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4gSXQmIzM5O3MgdGhlIGtpbmQgb2YgZnVuY3Rpb24geW91IGhvcGUgbmV2ZXIgZ29lcyB3cm9uZywgc28gSSYjMzk7bGwgd2FudCB0byBmb2N1cyBvbiBhbGwgdGhlIG51YW5jZXMuCkkga25vdyB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJuIG1pZ2h0IGludm9sdmUgZW5zdXJpbmcgdGhhdCBmaWxlIGRhdGEgaXMgd3JpdHRlbiB0byBkaXNrIGJlZm9yZSBhbiBhcHBsaWNhdGlvbiBjbG9zZXMgYSBmaWxlIG9yIGFuIGFzc29jaWF0ZWQgcHJvY2VzcyB0ZXJtaW5hdGVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgaWYgbG9ja2luZyBpcyBwcm9wZXJseSBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLgoKQmFzaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdoZW4gc29tZW9uZSB3YW50cyB0byBjbG9zZSBvciBmcmVlIHVwIGEgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vcGVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NTU6XHRcbjE0NTY6XHQvKlxuMTQ1NzpcdCAqIFwmIzM0O2lkXCYjMzQ7IGlzIHRoZSBQT1NJWCB0aHJlYWQgSUQuIFdlIHVzZSB0aGVcbjE0NTg6XHQgKiBmaWxlcyBwb2ludGVyIGZvciB0aGlzLi5cbjE0NTk6XHQgKi9cbjE0NjA6XHRzdGF0aWMgaW50IGZpbHBfZmx1c2goc3RydWN0IGZpbGUgKmZpbHAsIGZsX293bmVyX3QgaWQpXG4xNDYxOlx0e1xuMTQ2MjpcdFx0aW50IHJldHZhbCA9IDA7XG4xNDYzOlx0XG4xNDY0Olx0XHRpZiAoQ0hFQ0tfREFUQV9DT1JSVVBUSU9OKGZpbGVfY291bnQoZmlscCkgPT0gMCwgZmlscCxcbjE0NjU6XHRcdFx0XHRcJiMzNDtWRlM6IENsb3NlOiBmaWxlIGNvdW50IGlzIDAgKGZfb3A9JXBzKVwmIzM0OyxcbjE0NjY6XHRcdFx0XHRmaWxwLVx1MDAzZWZfb3ApKSB7XG4xNDY3Olx0XHRcdHJldHVybiAwO1xuMTQ2ODpcdFx0fVxuMTQ2OTpcdFxuMTQ3MDpcdFx0aWYgKGZpbHAtXHUwMDNlZl9vcC1cdTAwM2VmbHVzaClcbjE0NzE6XHRcdFx0cmV0dmFsID0gZmlscC1cdTAwM2VmX29wLVx1MDAzZWZsdXNoKGZpbHAsIGlkKTtcbjE0NzI6XHRcbjE0NzM6XHRcdGlmIChsaWtlbHkoIShmaWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUEFUSCkpKSB7XG4xNDc0Olx0XHRcdGRub3RpZnlfZmx1c2goZmlscCwgaWQpO1xuMTQ3NTpcdFx0XHRsb2Nrc19yZW1vdmVfcG9zaXgoZmlscCwgaWQpO1xuMTQ3NjpcdFx0fVxuMTQ3NzpcdFx0cmV0dXJuIHJldHZhbDtcbjE0Nzg6XHR9XG4xNDc5Olx0XG4xNDgwOlx0aW50IGZpbHBfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGZsX293bmVyX3QgaWQpXG4xNDgxOlx0e1xuMTQ4MjpcdFx0aW50IHJldHZhbDtcbjE0ODM6XHRcbjE0ODQ6XHRcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlscCwgaWQpO1xuMTQ4NTpcdFx0ZnB1dF9jbG9zZShmaWxwKTtcbjE0ODY6XHRcbjE0ODc6XHRcdHJldHVybiByZXR2YWw7XG4xNDg4Olx0fVxuMTQ4OTpcdEVYUE9SVF9TWU1CT0woZmlscF9jbG9zZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDbG9zZSgyKSBTeXN0ZW0gQ2FsbCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIG9mIHRoZSBgY2xvc2UoMilgIGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwgYW5kIGNvbXBhcmluZyBpdCB0byB0aGUgdW5kZXJseWluZyBgZmlscF9jbG9zZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgZmlscF9jbG9zZWAgd2hpY2ggaXMgYSBsb3dlciBsZXZlbCBjYWxsIGFuZCB0aGUgc3lzdGVtIGNhbGwgaXRzZWxmLCBgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKWAuIFRoZSBrZXkgbGllcyBpbiBob3cgdGhleSBoYW5kbGUgdGhlIHJldHVybiB2YWx1ZSBhZnRlciBgZmlscF9mbHVzaGAuCgpJbiB0aGUgb3JpZ2luYWwgYGNsb3NlYCBpbXBsZW1lbnRhdGlvbiwgaWYgYGZpbHBfZmx1c2hgIHJldHVybmVkIGFuICYjMzQ7aW50ZXJydXB0aWJsZSYjMzQ7IGVycm9yIGNvZGUgbGlrZSBgLUVSRVNUQVJUU1lTYCwgdGhlIHN5c3RlbSBjYWxsIHdhcyBzZXQgdG8gYC1FSU5UUmAsIGFuZCB0aGF0IHdhcyByZXR1cm5lZCB0byB1c2Vyc3BhY2UuIFRoaXMgaW1wbGllZCB0aGF0IHRoZSB1c2VyIHByb2dyYW0gY291bGQgcmV0cnkgdGhlIGBjbG9zZWAgb3BlcmF0aW9uLgoKSG93ZXZlciwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIGdhbWUuIE5vdywgaWYgYGZpbHBfZmx1c2hgIHJldHVybnMgYW55IG9mIHRob3NlIGludGVycnVwdGlibGUgZXJyb3JzLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBzeXN0ZW0gY2FsbCBpcyBzZXQgdG8gKnplcm8qISBUaGUgcmVhc29uIGZvciB0aGlzIGlzIGNydWNpYWwsIGFuZCBpdCBhbGlnbnMgd2l0aCBQT1NJWCBzdGFuZGFyZHMsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBhZGRyZXNzZXMgYSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gTGludXgmIzM5O3Mga2VybmVsIGRlc2lnbi4KCkJlY2F1c2UgaW4gTGludXgsIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMsIGVzc2VudGlhbGx5LCBkZWFsbG9jYXRlZCAqYmVmb3JlKiB0aGUgZmx1c2ggb3BlcmF0aW9uIGNvbXBsZXRlcywgcmV0cnlpbmcgYGNsb3NlYCBhZnRlciBhbiBpbnRlcnJ1cHQgd291bGQgYmUgZGlzYXN0cm91cy4gQSB1c2VyIHByb2dyYW0gcmV0cnlpbmcgYGNsb3NlYCBtaWdodCBhY2NpZGVudGFsbHkgY2xvc2UgYSBmaWxlIGRlc2NyaXB0b3IgYmVsb25naW5nIHRvIGEgKmRpZmZlcmVudCogZmlsZSBvciBwcm9jZXNzLiBUaGlzIGlzIGJlY2F1c2UgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuICYjMzQ7ZnJlZWQmIzM0OyBhbmQgbWF5IGJlIHJlLXVzZWQhIFRoaXMgbGVhZHMgdG8gZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSBicmVhY2hlcywgYW5kIHVuZGVmaW5lZCBiZWhhdmlvcnMuCgpCeSByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIGAtRUlOVFJgLCB0aGUga2VybmVsIGlzIGVzc2VudGlhbGx5IHRlbGxpbmcgdXNlcnNwYWNlLCAmIzM0O0RvbiYjMzk7dCByZXRyeSB0aGlzLiYjMzQ7IFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgZ29uZS4gRXZlcnl0aGluZyBpcyBjbG9zZWQuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgbGlrZWx5IGhhcyBiZWVuIGEgc291cmNlIG9mIHN1YnRsZSBidWdzIGZvciBhIGxvbmcgdGltZSwgYW5kIEkmIzM5O2QgbGlrZSB0byBkaXZlIGludG8gdGhlIExpbnV4IGdpdCBoaXN0b3J5IGFuZCB0aGUgbWFpbGluZyBsaXN0cyB0byBzZWUgaWYgSSBjYW4gZmluZCBtb3JlIGNvbnRleHQgb3IgaW5mb3JtYXRpb24gb24gdGhpcyBwYXRjaC4gVW5kZXJzdGFuZGluZyB0aGUgZGlzY3Vzc2lvbnMgYXJvdW5kIHRoaXMgY2hhbmdlIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jPTE0OTY9U1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxuLS1cbmZzL29wZW4uYy0xNTE2LVx0LypcbmZzL29wZW4uYzoxNTE3Olx0ICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWRcbmZzL29wZW4uYy0xNTE4LVx0ICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBgY2xvc2VgIFN5c3RlbSBDYWxsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgIGluIGBmcy9vcGVuLmNgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8KCkkgbmVlZCB0byBhcHBseSB0aGUgdHJpYWdlIHBoaWxvc29waHkuIFRoZSBnb2FsIGlzIHRvIGZpbmQgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MgYW5kIG5ldyBhc3NlcnRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGNhcmVmdWxseS4KCkJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIGZ1enppbmcgaXMgb25seSBhcHBsaWNhYmxlIGZvciByZWFjaGFibGUgY29kZS4KClNlY3Rpb24gMiBwcm92aWRlcyB0aGUgKm5lZ2F0aXZlIGNyaXRlcmlhKiwgdGVsbGluZyB1cyB3aGVuICpub3QqIHRvIGZ1enouIExldCBtZSByZXZpZXcgdGhhdDogaXQgc2F5cyAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXMmIzM0Oy4gVGhlc2UgYXJlOiBub24ta2VybmVsL25vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIFRoaXMgZG9lc24mIzM5O3Qgc2VlbSB0byBmaXQgdGhlIGJpbGwuCgpDb252ZXJzZWx5LCBzZWN0aW9uIDMgc3RhdGVzIHRoZSAqcG9zaXRpdmUgY3JpdGVyaWEqOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlJiMzNDsuIFRoaXMgaW5jbHVkZXMgY29yZSBzdWJzeXN0ZW1zLCByZWZhY3RvcmluZ3MsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgb3IgcmVhY2hhYmxlIGRyaXZlcnMvcHJvdG9jb2xzLiBBbmQgZ3Vlc3Mgd2hhdD8gVGhpcyBjbGVhcmx5IGFmZmVjdHMgYSBjb3JlIHN1YnN5c3RlbTogVkZTIGFuZCBzeXNjYWxsIGhhbmRsaW5nISBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIHRoZSBuZXh0IHF1ZXN0aW9uOiB3aGF0IGFib3V0IGBGb2N1c1N5bWJvbHNgPyBJIG5lZWQgdG8gZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRvIGd1aWRlIHRoZSBmdXp6ZXIgZWZmZWN0aXZlbHksIHBlciBTZWN0aW9uIDQuIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMgYW5kIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy4KClRoZSBpbW1lZGlhdGUgdGhvdWdodCBpczogaXNuJiMzOTt0IGBjbG9zZWAgKnViaXF1aXRvdXMqPyBTeXprYWxsZXIgdXNlcyBgY2xvc2VgIGNvbnN0YW50bHkuIEl0cyBleGVjdXRvciBjYWxscyBpdCBkdXJpbmcgdGVhcmRvd24gYW5kIGJldHdlZW4gc3lzY2FsbHMuIFdhaXQsIHRoZSAqbW9kaWZpZWQqIGNvZGUgaXMgKm9ubHkqIGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpYC4gT2theSwgc28gd2hpY2ggc3ltYm9sIGRvZXMgdGhpcyBkZWZpbmUgb24gYW1kNjQ/IFRoaXMgaXMgYSBxdWVzdGlvbiBmb3IgdGhlIGtlcm5lbCBzb3VyY2Ugb3IgZ3JlcCBmb3IgaG93IFNZU0NBTExfREVGSU5FIGlzIGltcGxlbWVudGVkIG9yIHN5bWJvbHMgaW4gb3Blbi5jLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZG9fc3lzX2Nsb3NlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBjbG9zZWAgU3lzdGVtIENhbGwgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBgY2xvc2VgIHN5c3RlbSBjYWxsIGlzIGltcGxlbWVudGVkLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoYXQgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgLi4uKWAgaXMgZXhwYW5kZWQgdXNpbmcgYSBtYWNyby4gVGhhdCBtYWNybywgZnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgaXMgbGlrZWx5IHRvIGJlIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBhc3BlY3RzIG9mIGhvdyB0aGUgY2FsbCBmdW5jdGlvbnMuIE5vdywgdGhhdCBtYWNybyBleHBhbmRzIHRvIGZ1bmN0aW9ucyBjYWxsZWQgYF9fZG9fc3lzX2Nsb3NlYCwgYW5kIGBfX3g2NF9zeXNfY2xvc2VgLiBJdCBzZWVtcyBsaWtlIHRoZXJlIG1pZ2h0IGFsc28gYmUgYW4gYF9fc2Vfc3lzX2Nsb3NlYCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBvciBjb25maWd1cmF0aW9uLCBidXQgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhhdCBhc2lkZSBmb3Igbm93LgoKTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8ganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhgIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGF0IGBTWVNDQUxMX0RFRklORWAgbWFjcm8gaXMgYWN0dWFsbHkgZGVmaW5lZC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIGFyZ3VtZW50cywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3Mgc3lzdGVtIGNhbGwgdGFibGUsIGFuZCBpZiBpdCYjMzk7cyBoYW5kbGluZyBhbnkgc3BlY2lmaWMgY29udGV4dCBzd2l0Y2hpbmcgb3Igc2VjdXJpdHkgYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIFNZU0NBTExfREVGSU5FMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg9MjExPXN0YXRpYyBpbmxpbmUgaW50IGlzX3N5c2NhbGxfdHJhY2VfZXZlbnQoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKnRwX2V2ZW50KVxuLS1cbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMjQtXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmg6MjI1OiNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUxKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDEsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oLTIyNi0jZGVmaW5lIFNZU0NBTExfREVGSU5FMihuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgyLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgY2xvc2VgIFN5c3RlbSBDYWxsIGZvciBGb2N1c2VkIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gT24geDg2XzY0LCBgX19kb19zeXNfY2xvc2VgIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gYm9keSwgd2hpbGUgYF9feDY0X3N5c19jbG9zZWAgKG9yIG1heWJlIGBfX3NlX3N5c19jbG9zZWApIGFjdHMgYXMgdGhlIGVudHJ5IHBvaW50IHdyYXBwZXIuIEEga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGBGb2N1c1N5bWJvbHNgIGluIHRoZSBzY2hlbWEgZm9yIGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBzY2hlbWEgc2F5cyAmIzM0O1NwZWNpZmljLCBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIGZ1enppbmcgb24uJiMzNDsgICYjMzQ7bm9uLXViaXF1aXRvdXMmIzM0OyBpcyBpbXBvcnRhbnQhICBJdCBhbHNvIGV4cGxpY2l0bHkgd2FybnMgdG8gJiMzNDtBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFMsJiMzNDsgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbS4gIFRoYXQgaW5jbHVkZXMgYWxsb2NhdG9ycywgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuICBUaGlzIGlzIHRvIGF2b2lkIGRpbHV0aW5nIHRoZSBmdXp6aW5nIGVmZm9ydC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyBgX19kb19zeXNfY2xvc2VgIG9yIGBfX3g2NF9zeXNfY2xvc2VgIGEgdWJpcXVpdG91cyBmdW5jdGlvbj8gRG9lcyAqYWxtb3N0KiBldmVyeSBwcm9ncmFtIGNhbGwgYGNsb3NlYCBpbiB0aGUgU3l6a2FsbGVyIGNvbnRleHQ/ICBSZW1lbWJlciwgU3l6a2FsbGVyIGdlbmVyYXRlcyBhbmQgZXhlY3V0ZXMgc3l6bGFuZyBwcm9ncmFtcy4gIFRoZXNlIHByb2dyYW1zIGdlbmVyYXRlIHNlcXVlbmNlcyBvZiBzeXNjYWxscy4gTWFueSBvcGVuIHNvY2tldHMsIGZpbGUgZGVzY3JpcHRvcnMsIGV0Yy4sIGFuZCwgb2YgY291cnNlLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgZXhwbGljaXQgYGNsb3NlKGZkKWAgY2FsbHMsIGFuZCB0aGUgZXhlY3V0b3IgYWxzbyBjbG9zZXMgZmRzLiAqQnV0KiBpcyBjbGVhbnVwIGJ5IHRoZSBleGVjdXRvciBpdHNlbGYgdHJhY2tlZCBhcyBzeXNjYWxsIGNvdmVyYWdlPyBUaGF0JiMzOTtzIGEgcG9pbnQgb2YgcG90ZW50aWFsIHVuY2VydGFpbnR5LiAgQ3J1Y2lhbGx5LCBzeXpsYW5nICpkb2VzKiBnZW5lcmF0ZSBgY2xvc2VgIHN5c2NhbGxzLgoKTG9va2luZyBhdCB0aGUgJiMzNDt1YmlxdWl0b3VzJiMzNDsgZXhhbXBsZXMsIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGFuZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIGBfX2RvX3N5c19jbG9zZWAgaXNuJiMzOTt0IGFueSBvZiB0aG9zZS4gIEJ1dCwgd2hhdCBhYm91dCB0aGUgYWx0ZXJuYXRpdmUgZ3VpZGFuY2U/ICBUaGUgZG9jdW1lbnRhdGlvbiBhbHNvIHNheXMgdG8gJiMzNDtUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6IExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4mIzM0OwoKQWhhISBUaGUgbG9naWMgKmJlaW5nIGFkZGVkIG9yIGFsdGVyZWQqIGlzICpwcmVjaXNlbHkqIHdpdGhpbiBgX19kb19zeXNfY2xvc2VgIG9yIGBfX3g2NF9zeXNfY2xvc2VgISAgQW5kLCBpcyBpdCBhIGRpcmVjdCBBUEkgZW50cnlwb2ludD8gWWVzISBgX19kb19zeXNfY2xvc2VgIC8gYF9feDY0X3N5c19jbG9zZWAgKmlzKiB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBsb2dpYy4KClNvLCB3aGF0IGFib3V0IGVtcHR5IGBGb2N1c1N5bWJvbHNgPyBJZiBpdCYjMzk7cyBlbXB0eSwgZG9lcyBTeXprYWxsZXIgZm9jdXMgb24gbm90aGluZz8gRG9lcyBpdCBmdXp6IGV2ZXJ5dGhpbmc/IE9yLCBpcyBhbiBlbXB0eSBsaXN0IGludGVycHJldGVkIGRpZmZlcmVudGx5PyBOb3csIGlmIEkgcHV0IGBfX2RvX3N5c19jbG9zZWAgb3IgYF9feDY0X3N5c19jbG9zZWAgaW4gYEZvY3VzU3ltYm9sc2AgdmVyc3VzIGFuIGVtcHR5IGFycmF5IGBbXWA/IFdoYXQgd2lsbCB0aGUgcmVzdWx0IGJlPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIC4uLilgIGRlZmluZXMgdGhlIHN5bWJvbCBuYW1lLiBUaW1lIHRvIGxvb2sgaW50byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3g2NF9zeXNfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYz0zNT1sb25nIHg2NF9zeXNfY2FsbChjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG5yKVxuLS1cbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy0zOC1cdCNpbmNsdWRlIFx1MDAzY2FzbS9zeXNjYWxsc182NC5oXHUwMDNlXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6Mzk6XHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDAtXHR9XG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jPTQ0PWxvbmcgeDMyX3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTQ3LVx0I2luY2x1ZGUgXHUwMDNjYXNtL3N5c2NhbGxzX3gzMi5oXHUwMDNlXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6NDg6XHRkZWZhdWx0OiByZXR1cm4gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDktXHR9XG4tLVxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jPTg3PV9fdmlzaWJsZSBub2luc3RyIGJvb2wgZG9fc3lzY2FsbF82NChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG5yKVxuLS1cbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy05NS1cdFx0LyogSW52YWxpZCBzeXN0ZW0gY2FsbCwgYnV0IHN0aWxsIGEgc3lzdGVtIGNhbGwuICovXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6OTY6XHRcdHJlZ3MtXHUwMDNlYXggPSBfX3g2NF9zeXNfbmlfc3lzY2FsbChyZWdzKTtcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy05Ny1cdH1cbi0tXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxscy9zeXNjYWxsXzY0LnRibC03LSNcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsOjg6IyBUaGUgX194NjRfc3lzXyooKSBzdHVicyBhcmUgY3JlYXRlZCBvbi10aGUtZmx5IGZvciBzeXNfKigpIHN5c3RlbSBjYWxsc1xuYXJjaC94ODYvZW50cnkvc3lzY2FsbHMvc3lzY2FsbF82NC50YmwtOS0jXG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYz0xMTk9c3RhdGljIGJvb2wgX19lbXVsYXRlX3ZzeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMTctXHRcdC8qIHRoaXMgZGVjb2RlcyByZWdzLVx1MDAzZWRpIGFuZCByZWdzLVx1MDAzZXNpIG9uIGl0cyBvd24gKi9cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM6MjE4Olx0XHRyZXQgPSBfX3g2NF9zeXNfZ2V0dGltZW9mZGF5KHJlZ3MpO1xuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMTktXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjIyLVx0XHQvKiB0aGlzIGRlY29kZXMgcmVncy1cdTAwM2VkaSBvbiBpdHMgb3duICovXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIyMzpcdFx0cmV0ID0gX194NjRfc3lzX3RpbWUocmVncyk7XG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIyNC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMzAtXHRcdC8qIHRoaXMgZGVjb2RlcyByZWdzLVx1MDAzZWRpLCByZWdzLVx1MDAzZXNpIGFuZCByZWdzLVx1MDAzZWR4IG9uIGl0cyBvd24gKi9cbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmM6MjMxOlx0XHRyZXQgPSBfX3g2NF9zeXNfZ2V0Y3B1KHJlZ3MpO1xuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMzItXHRcdHJlZ3MtXHUwMDNlZHggPSBvcmlnX2R4O1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEwLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTE6ZXh0ZXJuIGxvbmcgX194NjRfc3lzX25pX3N5c2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTItZXh0ZXJuIGxvbmcgX19pYTMyX3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xNi0gKiBzdHJ1Y3QgcHRfcmVncyAqcmVncyBhcyB0aGUgb25seSBhcmd1bWVudCBvZiB0aGUgc3lzY2FsbCBzdHViKHMpIG5hbWVkIGFzOlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MTc6ICogX194NjRfc3lzXyooKSAgICAgICAgIC0gNjQtYml0IG5hdGl2ZSBzeXNjYWxsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xOC0gKiBfX2lhMzJfc3lzXyooKSAgICAgICAgLSAzMi1iaXQgbmF0aXZlIHN5c2NhbGwgb3IgY29tbW9uIGNvbXBhdCBzeXNjYWxsXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMzMtICpcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjM0OiAqIFx1MDAzY19feDY0X3N5c19yZWN2XHUwMDNlOlx0XHRcdTAwM2MtLSBzeXNjYWxsIHdpdGggNCBwYXJhbWV0ZXJzXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zNS0gKlx0Y2FsbHFcdFx1MDAzY19fZmVudHJ5X19cdTAwM2Vcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0yNTktICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoyNjA6bG9uZyBfX3g2NF9zeXNfZ2V0Y3B1KGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjI2MTpsb25nIF9feDY0X3N5c19nZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYyOmxvbmcgX194NjRfc3lzX3RpbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMjYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkyNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gU3lzdGVtIENhbGwgV3JhcHBlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGVzZSB4ODYgc3lzdGVtIGNhbGxzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgaW5jbHVkZTogYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lcyByb3VnaGx5IGJldHdlZW4gMjUgYW5kIDUwLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0eXBpY2FsIGVudHJ5IHBvaW50IGRlZmluaXRpb25zIG9yIHNvbWUgY3J1Y2lhbCBtYWNybyBleHBhbnNpb25zIHJlbGF0ZWQgdG8gdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBpbiB0aGF0IHJlZ2lvbi4gUHJvYmFibHkgc29tZSBrZXkgaW5saW5lIGFzc2VtYmx5LCBwZXJoYXBzIHNvbWUgbG9naWMgZm9yIGFyZ3VtZW50IHBhc3NpbmcsIG9yIG1heWJlIGV2ZW4gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIHZpc3VhbCBvbiBob3cgdGhlIGFyY2hpdGVjdHVyZSBicmlkZ2VzIHRoZSBnYXAgdG8gdGhlIGtlcm5lbCBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHQgKlxuICAyNjpcdCAqIFRoZSBzdHViIHRoZW4gcGFzc2VzIHRoZSBkZWNvZGVkIGFyZ3VtZW50cyB0byB0aGUgX19zZV9zeXNfKigpIHdyYXBwZXIgdG9cbiAgMjc6XHQgKiBwZXJmb3JtIHNpZ24tZXh0ZW5zaW9uIChvbWl0dGVkIGZvciB6ZXJvLWFyZ3VtZW50IHN5c2NhbGxzKS4gIEZpbmFsbHkgdGhlXG4gIDI4Olx0ICogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIF9fZG9fc3lzXyooKSBmdW5jdGlvbiB3aGljaCBpcyB0aGUgYWN0dWFsXG4gIDI5Olx0ICogc3lzY2FsbC4gIFRoZXNlIHdyYXBwZXJzIGFyZSBtYXJrZWQgYXMgaW5saW5lIHNvIHRoZSBjb21waWxlciBjYW4gb3B0aW1pemVcbiAgMzA6XHQgKiB0aGUgZnVuY3Rpb25zIHdoZXJlIGFwcHJvcHJpYXRlLlxuICAzMTpcdCAqXG4gIDMyOlx0ICogRXhhbXBsZSBhc3NlbWJseSAoc2xpZ2h0bHkgcmUtb3JkZXJlZCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5KTpcbiAgMzM6XHQgKlxuICAzNDpcdCAqIFx1MDAzY19feDY0X3N5c19yZWN2XHUwMDNlOlx0XHRcdTAwM2MtLSBzeXNjYWxsIHdpdGggNCBwYXJhbWV0ZXJzXG4gIDM1Olx0ICpcdGNhbGxxXHRcdTAwM2NfX2ZlbnRyeV9fXHUwMDNlXG4gIDM2Olx0ICpcbiAgMzc6XHQgKlx0bW92XHQweDcwKCVyZGkpLCVyZGlcdFx1MDAzYy0tIGRlY29kZSByZWdzLVx1MDAzZWRpXG4gIDM4Olx0ICpcdG1vdlx0MHg2OCglcmRpKSwlcnNpXHRcdTAwM2MtLSBkZWNvZGUgcmVncy1cdTAwM2VzaVxuICAzOTpcdCAqXHRtb3ZcdDB4NjAoJXJkaSksJXJkeFx0XHUwMDNjLS0gZGVjb2RlIHJlZ3MtXHUwMDNlZHhcbiAgNDA6XHQgKlx0bW92XHQweDM4KCVyZGkpLCVyY3hcdFx1MDAzYy0tIGRlY29kZSByZWdzLVx1MDAzZXIxMFxuICA0MTpcdCAqXG4gIDQyOlx0ICpcdHhvclx0JXI5ZCwlcjlkXHRcdTAwM2MtLSBjbGVhciAlcjlcbiAgNDM6XHQgKlx0eG9yXHQlcjhkLCVyOGRcdFx1MDAzYy0tIGNsZWFyICVyOFxuICA0NDpcdCAqXG4gIDQ1Olx0ICpcdGNhbGxxXHRfX3N5c19yZWN2ZnJvbVx0XHUwMDNjLS0gZG8gdGhlIGFjdHVhbCB3b3JrIGluIF9fc3lzX3JlY3Zmcm9tKClcbiAgNDY6XHQgKlx0XHRcdFx0ICAgIHdoaWNoIHRha2VzIDYgYXJndW1lbnRzXG4gIDQ3Olx0ICpcbiAgNDg6XHQgKlx0Y2x0cVx0XHRcdFx1MDAzYy0tIGV4dGVuZCByZXR1cm4gdmFsdWUgdG8gNjQtYml0XG4gIDQ5Olx0ICpcdHJldHFcdFx0XHRcdTAwM2MtLSByZXR1cm5cbiAgNTA6XHQgKlxuICA1MTpcdCAqIFRoaXMgYXBwcm9hY2ggYXZvaWRzIGxlYWtpbmcgcmFuZG9tIHVzZXItcHJvdmlkZWQgcmVnaXN0ZXIgY29udGVudCBkb3duXG4gIDUyOlx0ICogdGhlIGNhbGwgY2hhaW4uXG4gIDUzOlx0ICovXG4gIDU0Olx0XG4gIDU1Olx0LyogTWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycyBmb3Igc3lzY2FsbHMgb24geDg2LTY0IGFuZCB4MzIgKi9cbiAgNTY6XHQjZGVmaW5lIFNDX1g4Nl82NF9SRUdTX1RPX0FSR1MoeCwgLi4uKVx0XHRcdFx0XHRcXFxuICA1NzpcdFx0X19NQVAoeCxfX1NDX0FSR1NcdFx0XHRcdFx0XHRcXFxuICA1ODpcdFx0XHQsLHJlZ3MtXHUwMDNlZGksLHJlZ3MtXHUwMDNlc2ksLHJlZ3MtXHUwMDNlZHhcdFx0XHRcdFxcXG4gIDU5Olx0XHRcdCwscmVncy1cdTAwM2VyMTAsLHJlZ3MtXHUwMDNlcjgsLHJlZ3MtXHUwMDNlcjkpXHRcdFx0XFxcbiAgNjA6XHRcbiAgNjE6XHRcbiAgNjI6XHQvKiBTWVNDQUxMX1BUX0FSR1MgaXMgQWRhcHRlZCBmcm9tIHMzOTB4ICovXG4gIDYzOlx0I2RlZmluZSBTWVNDQUxMX1BUX0FSRzYobSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NilcdFx0XHRcXFxuICA2NDpcdFx0U1lTQ0FMTF9QVF9BUkc1KG0sIHQxLCB0MiwgdDMsIHQ0LCB0NSksIG0odDYsIChyZWdzLVx1MDAzZWJwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MjUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIGZvciBDbG9zaW5nIEZpbGVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYF9feDY0X3N5c19jbG9zZWAgc3lzdGVtIGNhbGwuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGRvZXMgaXQgZGVsZWdhdGUgdGhlIHdvcmsgZGlyZWN0bHkgdG8gYF9fZG9fc3lzX2Nsb3NlYCwgb3IgaXMgdGhlIGZ1bmN0aW9uYWxpdHkgaW5saW5lZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgYXMgdGhhdCBpbXBhY3RzIHRoaW5ncyBkb3duIHRoZSBsaW5lLiBUbyBnZXQgdGhlIGFuc3dlciwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4KCkkmIzM5O20gcHJldHR5IHN1cmUgdGhlIGFuc3dlciBpcyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBsb2NhdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBuZWFyIHRoZSBkZWZpbml0aW9uLCBzbyBJJiMzOTtsbCBjaGVjayBsaW5lcyA4MCB0aHJvdWdoIDEyMCBvZiB0aGF0IGZpbGUgdG8gYmUgc3VyZS4gVGhhdCByYW5nZSBzaG91bGQgY292ZXIgdGhlIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIGNsb3NlIHN5c2NhbGwgd3JhcHBlci4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZCBhbmQgd2hldGhlciB0aGVyZSBpcyBhbnkgaW5saW5pbmcgb2YgdGhlIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0LyogTWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycyBmb3Igc3lzY2FsbHMgb24gaTM4NiAqL1xuICA4MTpcdCNkZWZpbmUgU0NfSUEzMl9SRUdTX1RPX0FSR1MoeCwgLi4uKVx0XHRcdFx0XHRcXFxuICA4MjpcdFx0U1lTQ0FMTF9QVF9BUkdTKHgsIF9fU0NfQ09NUEFUX0NBU1QsXHRcdFx0XHRcXFxuICA4MzpcdFx0XHRcdF9fTUFQKHgsIF9fU0NfVFlQRSwgX19WQV9BUkdTX18pKVx0XHRcXFxuICA4NDpcdFxuICA4NTpcdCNkZWZpbmUgX19TWVNfU1RVQjAoYWJpLCBuYW1lKVx0XHRcdFx0XHRcdFxcXG4gIDg2Olx0XHRsb25nIF9fIyNhYmkjI18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1x0XHRcXFxuICA4NzpcdFx0QUxMT1dfRVJST1JfSU5KRUNUSU9OKF9fIyNhYmkjI18jI25hbWUsIEVSUk5PKTtcdFx0XHRcXFxuICA4ODpcdFx0bG9uZyBfXyMjYWJpIyNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVx0XHRcXFxuICA4OTpcdFx0XHRfX2FsaWFzKF9fZG9fIyNuYW1lKTtcbiAgOTA6XHRcbiAgOTE6XHQjZGVmaW5lIF9fU1lTX1NUVUJ4KGFiaSwgbmFtZSwgLi4uKVx0XHRcdFx0XHRcXFxuICA5MjpcdFx0bG9uZyBfXyMjYWJpIyNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcdFx0XFxcbiAgOTM6XHRcdEFMTE9XX0VSUk9SX0lOSkVDVElPTihfXyMjYWJpIyNfIyNuYW1lLCBFUlJOTyk7XHRcdFx0XFxcbiAgOTQ6XHRcdGxvbmcgX18jI2FiaSMjXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcdFx0XFxcbiAgOTU6XHRcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgOTY6XHRcdFx0cmV0dXJuIF9fc2VfIyNuYW1lKF9fVkFfQVJHU19fKTtcdFx0XHRcXFxuICA5NzpcdFx0fVxuICA5ODpcdFxuICA5OTpcdCNkZWZpbmUgX19DT05EX1NZU0NBTEwoYWJpLCBuYW1lKVx0XHRcdFx0XHRcXFxuIDEwMDpcdFx0X193ZWFrIGxvbmcgX18jI2FiaSMjXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpO1x0XFxcbiAxMDE6XHRcdF9fd2VhayBsb25nIF9fIyNhYmkjI18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKl9fdW51c2VkKVx0XFxcbiAxMDI6XHRcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAxMDM6XHRcdFx0cmV0dXJuIHN5c19uaV9zeXNjYWxsKCk7XHRcdFx0XHRcXFxuIDEwNDpcdFx0fVxuIDEwNTpcdFxuIDEwNjpcdCNpZmRlZiBDT05GSUdfWDg2XzY0XG4gMTA3Olx0I2RlZmluZSBfX1g2NF9TWVNfU1RVQjAobmFtZSlcdFx0XHRcdFx0XHRcXFxuIDEwODpcdFx0X19TWVNfU1RVQjAoeDY0LCBzeXNfIyNuYW1lKVxuIDEwOTpcdFxuIDExMDpcdCNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFx0XFxcbiAxMTE6XHRcdF9fU1lTX1NUVUJ4KHg2NCwgc3lzIyNuYW1lLFx0XHRcdFx0XHRcXFxuIDExMjpcdFx0XHQgICAgU0NfWDg2XzY0X1JFR1NfVE9fQVJHUyh4LCBfX1ZBX0FSR1NfXykpXG4gMTEzOlx0XG4gMTE0Olx0I2RlZmluZSBfX1g2NF9DT05EX1NZU0NBTEwobmFtZSlcdFx0XHRcdFx0XFxcbiAxMTU6XHRcdF9fQ09ORF9TWVNDQUxMKHg2NCwgc3lzXyMjbmFtZSlcbiAxMTY6XHRcbiAxMTc6XHQjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovXG4gMTE4Olx0I2RlZmluZSBfX1g2NF9TWVNfU1RVQjAobmFtZSlcbiAxMTk6XHQjZGVmaW5lIF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCAuLi4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTkwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgU3lzdGVtIENhbGwgV3JhcHBlcioqCgpPa2F5LCBzbyBgX19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsIC4uLilgIGRlZmluZXMgdGhlIHN5c3RlbSBjYWxsIHN0dWJzLCBsaWtlIGBfX3g2NF9zeXNfY2xvc2VgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBub3cgaXM6IFdoYXQgZnVuY3Rpb24gaXMgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9mIGBfX3NlX3N5c19jbG9zZWA/IFNpbmNlIEkmIzM5O20gd29ya2luZyB3aXRoIGEgc3lzdGVtIGNhbGwgb24geDg2LTY0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JhcHBlci4gVGltZSB0byBqdW1wIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYCwgbGluZXMgMTIwIHRocm91Z2ggMTcwLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIHdoZW4gYF9fc2Vfc3lzX2Nsb3NlYCBpcyBoaXQuIEkgbmVlZCB0byB1bnJhdmVsIHRoaXMgc3BlY2lmaWMgc3R1YiB0byB1bmRlcnN0YW5kIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHQjZGVmaW5lIF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxuIDEyMTpcdCNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovXG4gMTIyOlx0XG4gMTIzOlx0I2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgfHwgZGVmaW5lZChDT05GSUdfSUEzMl9FTVVMQVRJT04pXG4gMTI0Olx0I2RlZmluZSBfX0lBMzJfU1lTX1NUVUIwKG5hbWUpXHRcdFx0XHRcdFx0XFxcbiAxMjU6XHRcdF9fU1lTX1NUVUIwKGlhMzIsIHN5c18jI25hbWUpXG4gMTI2Olx0XG4gMTI3Olx0I2RlZmluZSBfX0lBMzJfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFx0XFxcbiAxMjg6XHRcdF9fU1lTX1NUVUJ4KGlhMzIsIHN5cyMjbmFtZSxcdFx0XHRcdFx0XFxcbiAxMjk6XHRcdFx0ICAgIFNDX0lBMzJfUkVHU19UT19BUkdTKHgsIF9fVkFfQVJHU19fKSlcbiAxMzA6XHRcbiAxMzE6XHQjZGVmaW5lIF9fSUEzMl9DT05EX1NZU0NBTEwobmFtZSlcdFx0XHRcdFx0XFxcbiAxMzI6XHRcdF9fQ09ORF9TWVNDQUxMKGlhMzIsIHN5c18jI25hbWUpXG4gMTMzOlx0XG4gMTM0Olx0I2Vsc2UgLyogQ09ORklHX1g4Nl8zMiB8fCBDT05GSUdfSUEzMl9FTVVMQVRJT04gKi9cbiAxMzU6XHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQjAobmFtZSlcbiAxMzY6XHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxuIDEzNzpcdCNkZWZpbmUgX19JQTMyX0NPTkRfU1lTQ0FMTChuYW1lKVxuIDEzODpcdCNlbmRpZiAvKiBDT05GSUdfWDg2XzMyIHx8IENPTkZJR19JQTMyX0VNVUxBVElPTiAqL1xuIDEzOTpcdFxuIDE0MDpcdCNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT05cbiAxNDE6XHQvKlxuIDE0MjpcdCAqIEZvciBJQTMyIGVtdWxhdGlvbiwgd2UgbmVlZCB0byBoYW5kbGUgXCYjMzQ7Y29tcGF0XCYjMzQ7IHN5c2NhbGxzICphbmQqIGNyZWF0ZVxuIDE0MzpcdCAqIGFkZGl0aW9uYWwgd3JhcHBlcnMgKGFwdGx5IG5hbWVkIF9faWEzMl9zeXNfeHl6enkpIHdoaWNoIGRlY29kZSB0aGVcbiAxNDQ6XHQgKiBpYTMyIHJlZ3MgaW4gdGhlIHByb3BlciBvcmRlciBmb3Igc2hhcmVkIG9yIFwmIzM0O2NvbW1vblwmIzM0OyBzeXNjYWxscy4gQXMgc29tZVxuIDE0NTpcdCAqIHN5c2NhbGxzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQsIHdlIG5lZWQgdG8gZXhwYW5kIENPTkRfU1lTQ0FMTCBpblxuIDE0NjpcdCAqIGtlcm5lbC9zeXNfbmkuYyB0byBjb3ZlciB0aGlzIGNhc2UgYXMgd2VsbC5cbiAxNDc6XHQgKi9cbiAxNDg6XHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXHRcdFx0XHRcdFxcXG4gMTQ5Olx0XHRfX1NZU19TVFVCMChpYTMyLCBjb21wYXRfc3lzXyMjbmFtZSlcbiAxNTA6XHRcbiAxNTE6XHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcdFx0XHRcdFxcXG4gMTUyOlx0XHRfX1NZU19TVFVCeChpYTMyLCBjb21wYXRfc3lzIyNuYW1lLFx0XHRcdFx0XFxcbiAxNTM6XHRcdFx0ICAgIFNDX0lBMzJfUkVHU19UT19BUkdTKHgsIF9fVkFfQVJHU19fKSlcbiAxNTQ6XHRcbiAxNTU6XHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfQ09ORF9TWVNDQUxMKG5hbWUpXHRcdFx0XHRcXFxuIDE1NjpcdFx0X19DT05EX1NZU0NBTEwoaWEzMiwgY29tcGF0X3N5c18jI25hbWUpXG4gMTU3Olx0XG4gMTU4Olx0I2Vsc2UgLyogQ09ORklHX0lBMzJfRU1VTEFUSU9OICovXG4gMTU5Olx0I2RlZmluZSBfX0lBMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVxuIDE2MDpcdCNkZWZpbmUgX19JQTMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxuIDE2MTpcdCNkZWZpbmUgX19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcbiAxNjI6XHQjZW5kaWYgLyogQ09ORklHX0lBMzJfRU1VTEFUSU9OICovXG4gMTYzOlx0XG4gMTY0Olx0XG4gMTY1Olx0I2lmZGVmIENPTkZJR19YODZfWDMyX0FCSVxuIDE2NjpcdC8qXG4gMTY3Olx0ICogRm9yIHRoZSB4MzIgQUJJLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHN0dWIgZm9yIGNvbXBhdF9zeXNfKigpIHdoaWNoIGlzIGF3YXJlXG4gMTY4Olx0ICogb2YgdGhlIHg4Ni02NC1zdHlsZSBwYXJhbWV0ZXIgb3JkZXJpbmcgb2YgeDMyIHN5c2NhbGxzLiBUaGUgc3lzY2FsbHMgY29tbW9uXG4gMTY5Olx0ICogd2l0aCB4ODZfNjQgb2J2aW91c2x5IGRvIG5vdCBuZWVkIHN1Y2ggY2FyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMTgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGVjb2RpbmcgVGhpcyBTeXN0ZW0gQ2FsbCBTdHViKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsIC4uLilgIG1hY3JvLiBJdCYjMzk7cyBjbGVhcmx5IGEgc3lzdGVtIGNhbGwgc3R1YiBnZW5lcmF0b3IgZm9yIHg2NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgYHN5cyMjbmFtZWAgcGFydCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBkZWZpbmluZyB0aGUgZW50cnkgcG9pbnQgZm9yIGEgc3BlY2lmaWMgc3lzdGVtIGNhbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHdvcmtzIGludGVybmFsbHksIGFuZCBmcm9tIHRoZSBzdHViLCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHN0dWIgY2FsbHMgYF9fc2Vfc3lzX2Nsb3NlKC4uLilgLiBOb3cgdGhhdCBJIGtub3cgd2hlcmUgaXQgY2FsbHMgdG8sIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgZG9lcy4gU28sIHdoZXJlIGlzIGBfX3NlX3N5c19jbG9zZWAgZGVmaW5lZD8gSXQgc2hvdWxkIGJlIGluIHRoZSBoZWFkZXJzLCBJJiMzOTttIGd1ZXNzaW5nLiBMZXQgbWUgY2hlY2sgbGluZXMgMTkwIHRvIDI1MCBvZiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvciBkZWZpbml0aW9uIG9mIGhvdyB0aGlzIHNlY3VyZSBzeXN0ZW0gY2FsbCBjbG9zZSBpcyBoYW5kbGVkLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHQgKiBDb21wYXQgbWVhbnMgSUEzMl9FTVVMQVRJT04gYW5kL29yIFg4Nl9YMzIuIEFzIHRoZXkgdXNlIGEgZGlmZmVyZW50XG4gMTkxOlx0ICogbWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycywgd2UgbmVlZCB0byBnZW5lcmF0ZSBzdHVicyBmb3IgZWFjaFxuIDE5MjpcdCAqIG9mIHRoZW0uXG4gMTkzOlx0ICovXG4gMTk0Olx0I2RlZmluZSBDT01QQVRfU1lTQ0FMTF9ERUZJTkUwKG5hbWUpXHRcdFx0XHRcdFxcXG4gMTk1Olx0XHRzdGF0aWMgbG9uZ1x0XHRcdFx0XHRcdFx0XFxcbiAxOTY6XHRcdF9fZG9fY29tcGF0X3N5c18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKl9fdW51c2VkKTtcdFx0XFxcbiAxOTc6XHRcdF9fSUEzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXHRcdFx0XHRcdFxcXG4gMTk4Olx0XHRfX1gzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXHRcdFx0XHRcdFxcXG4gMTk5Olx0XHRzdGF0aWMgbG9uZ1x0XHRcdFx0XHRcdFx0XFxcbiAyMDA6XHRcdF9fZG9fY29tcGF0X3N5c18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKl9fdW51c2VkKVxuIDIwMTpcdFxuIDIwMjpcdCNkZWZpbmUgQ09NUEFUX1NZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pXHRcdFx0XHRcdFxcXG4gMjAzOlx0XHRzdGF0aWMgbG9uZyBfX3NlX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKTtcdFxcXG4gMjA0Olx0XHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSk7XFxcbiAyMDU6XHRcdF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVx0XHRcdFx0XFxcbiAyMDY6XHRcdF9fWDMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgX19WQV9BUkdTX18pXHRcdFx0XHRcXFxuIDIwNzpcdFx0c3RhdGljIGxvbmcgX19zZV9jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcdFxcXG4gMjA4Olx0XHR7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAyMDk6XHRcdFx0cmV0dXJuIF9fZG9fY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVMT1VTRSxfX1ZBX0FSR1NfXykpO1xcXG4gMjEwOlx0XHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAyMTE6XHRcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX2NvbXBhdF9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKVxuIDIxMjpcdFxuIDIxMzpcdC8qXG4gMjE0Olx0ICogQXMgc29tZSBjb21wYXQgc3lzY2FsbHMgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCwgd2UgbmVlZCB0byBleHBhbmRcbiAyMTU6XHQgKiBDT05EX1NZU0NBTExfQ09NUEFUIGluIGtlcm5lbC9zeXNfbmkuYyB0byBjb3ZlciB0aGlzIGNhc2UgYXMgd2VsbC5cbiAyMTY6XHQgKi9cbiAyMTc6XHQjZGVmaW5lIENPTkRfU1lTQ0FMTF9DT01QQVQobmFtZSkgXHRcdFx0XHRcdFxcXG4gMjE4Olx0XHRfX0lBMzJfQ09NUEFUX0NPTkRfU1lTQ0FMTChuYW1lKVx0XHRcdFx0XFxcbiAyMTk6XHRcdF9fWDMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcbiAyMjA6XHRcbiAyMjE6XHQjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqL1xuIDIyMjpcdFxuIDIyMzpcdCNkZWZpbmUgX19TWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKVx0XHRcdFx0XHRcXFxuIDIyNDpcdFx0c3RhdGljIGxvbmcgX19zZV9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKTtcdFxcXG4gMjI1Olx0XHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19zeXMjI25hbWUoX19NQVAoeCxfX1NDX0RFQ0wsX19WQV9BUkdTX18pKTtcXFxuIDIyNjpcdFx0X19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVx0XHRcdFx0XFxcbiAyMjc6XHRcdF9fSUEzMl9TWVNfU1RVQngoeCwgbmFtZSwgX19WQV9BUkdTX18pXHRcdFx0XHRcXFxuIDIyODpcdFx0c3RhdGljIGxvbmcgX19zZV9zeXMjI25hbWUoX19NQVAoeCxfX1NDX0xPTkcsX19WQV9BUkdTX18pKVx0XFxcbiAyMjk6XHRcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAyMzA6XHRcdFx0bG9uZyByZXQgPSBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfQ0FTVCxfX1ZBX0FSR1NfXykpO1xcXG4gMjMxOlx0XHRcdF9fTUFQKHgsX19TQ19URVNULF9fVkFfQVJHU19fKTtcdFx0XHRcdFxcXG4gMjMyOlx0XHRcdF9fUFJPVEVDVCh4LCByZXQsX19NQVAoeCxfX1NDX0FSR1MsX19WQV9BUkdTX18pKTtcdFxcXG4gMjMzOlx0XHRcdHJldHVybiByZXQ7XHRcdFx0XHRcdFx0XFxcbiAyMzQ6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAyMzU6XHRcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpXG4gMjM2Olx0XG4gMjM3Olx0LypcbiAyMzg6XHQgKiBBcyB0aGUgZ2VuZXJpYyBTWVNDQUxMX0RFRklORTAoKSBtYWNybyBkb2VzIG5vdCBkZWNvZGUgYW55IHBhcmFtZXRlcnMgZm9yXG4gMjM5Olx0ICogb2J2aW91cyByZWFzb25zLCBhbmQgcGFzc2luZyBzdHJ1Y3QgcHRfcmVncyAqcmVncyB0byBpdCBpbiAlcmRpIGRvZXMgbm90XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzM2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGNsb3NlYCBTeXNjYWxsIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBgY2xvc2VgIHN5c2NhbGwuIFRoZSBjb2RlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYF9fZG9fc3lzX2Nsb3NlYCwgYF9fc2Vfc3lzX2Nsb3NlYCwgYW5kIHVsdGltYXRlbHksIGBfX3g2NF9zeXNfY2xvc2VgLCB3aGljaCBpcyB0aGUgdmlzaWJsZSBzeW1ib2wgaW4gYHZtbGludXhgIGZvciBhbWQ2NCAoYW5kIGBfX2lhMzJfc3lzX2Nsb3NlYCBpZiBpYTMyIGlzIGVuYWJsZWQpLiBgX19kb19zeXNfY2xvc2VgIGlzIGBzdGF0aWMgaW5saW5lYCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLiBUaGUgcGF0Y2ggaXRzZWxmIGp1c3QgdG91Y2hlcyB0aGUgYGNsb3NlYCBzeXNjYWxsIGluIGBmcy9vcGVuLmNgLiBJJiMzOTt2ZSBjaGVja2VkIHRoZSBjb2RlLCBhbmQgdGhlcmUgYXJlIG5vIG90aGVyIGZ1bmN0aW9ucyBhZmZlY3RlZC4KCk15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCBgX194NjRfc3lzX2Nsb3NlYCBpcyBjb25zaWRlcmVkIGEgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aC4mIzM0OyBUaGUgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IHNheXMgdG8gKmF2b2lkKiBsaXN0aW5nIHRoZXNlLCBhcyBpdCBkaWx1dGVzIHRoZSBmdXp6aW5nIGVmZm9ydCBieSB0YXJnZXRpbmcgdG9vIG1hbnkgdW5yZWxhdGVkIHRlc3RzLiBCdXQgKmV2ZXJ5KiBwcm9ncmFtIGluIHRoZSBzeXprYWxsZXIgY29ycHVzIGFsbW9zdCBjZXJ0YWlubHkgaGFzIGEgY2FsbCB0byBgY2xvc2VgLiBPciBkb2VzIGl0PyBPa2F5LCBtYXliZSBub3QgKmV2ZXJ5KiBwcm9ncmFtLCBidXQgYGNsb3NlYCBpcyBkZWZpbml0ZWx5IG9uZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgc3lzY2FsbHMuIEJ1dCBpdCYjMzk7cyBub3QgYSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3IsIHBhZ2UgZmF1bHQgaGFuZGxlciwgb3IgY29yZSBzeW5jIHByaW1pdGl2ZSwgYW5kIHRoZSBwYXRjaCBJUyBpbiBgX194NjRfc3lzX2Nsb3NlYC4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsb2dpYyBpbnNpZGUgb2YgdGhlIGNsb3NlIHN5c2NhbGwuCgpJZiBJIGRvbiYjMzk7dCBsaXN0IGBfX3g2NF9zeXNfY2xvc2VgLCB3aGF0IGVsc2UgaXMgdGhlcmUgdG8gZm9jdXMgb24/IE5vdGhpbmcgZWxzZSB3YXMgbW9kaWZpZWQhIFRoZSBwYXRjaCBkaXJlY3RseSBtb2RpZmllcyB0aGUgYGNsb3NlYCBzeXNjYWxsLCBzbyBpdHMgZW50cnlwb2ludCBpcyBgX194NjRfc3lzX2Nsb3NlYC4gSWYgSSBvbWl0IGl0LCBGb2N1c1N5bWJvbHMgd291bGQgYmUgZW1wdHksIHdoaWNoIGlzIG5vdCBwZXJtaXR0ZWQgd2hlbiBXb3J0aEZ1enppbmcgaXMgdHJ1ZS4gSXQmIzM5O3MgdGhlICpzcGVjaWZpYyogZW50cnkgcG9pbnQgZm9yIHRoZSBmZWF0dXJlLgoKU28sIHRoZSBrZXkgcXVlc3Rpb24gaXM6IGlzIGBfX3g2NF9zeXNfY2xvc2VgICYjMzQ7dWJpcXVpdG91cyYjMzQ7IGluIHRoZSAqcmVsZXZhbnQqIHNlbnNlIGZvciBzeXprYWxsZXImIzM5O3MgZm9jdXMgc3ltYm9sIGxvZ2ljPyBJdCYjMzk7cyBjb21tb24sIHllcywgYnV0IGl0JiMzOTtzIG5vdCBhIGdlbmVyYWwtcHVycG9zZSB1dGlsaXR5LiBJdCYjMzk7cyB0aGUgZGlyZWN0IGVudHJ5IHBvaW50IG9mIGEgZmVhdHVyZSB1bmRlciByZXZpZXcuCgpJcyBpdCBwb3NzaWJsZSB0aGF0IGBfX2RvX3N5c19jbG9zZWAgaXMgdGhlIGVudHJ5cG9pbnQ/IE5vLCBiZWNhdXNlIGl0IGlzIGBzdGF0aWMgaW5saW5lYCEKCklmIEkgKmRvbiYjMzk7dCogZm9jdXMgb24gYF9feDY0X3N5c19jbG9zZWAsIHdoYXQgaXMgdGhlcmUgdG8gZm9jdXMgb24/IEFic29sdXRlbHkgbm90aGluZyEKClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgY2hvaWNlIGlzIHRvIGxpc3QgYF9feDY0X3N5c19jbG9zZWAgaW4gYEZvY3VzU3ltYm9sc2AuIEl0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCB0YXJnZXQgZm9yIGRpcmVjdGluZyB0aGUgZnV6emVyIHRvIHRoZSByZWxldmFudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvcGVuXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZS05LVxuZnMvTWFrZWZpbGU6MTA6b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbmZzL01ha2VmaWxlLTExLVx0XHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxuLS1cbmZzL01ha2VmaWxlLTE2LVx0XHRzdGFjay5vIGZzX3N0cnVjdC5vIHN0YXRmcy5vIGZzX3Bpbi5vIG5zZnMubyBcXFxuZnMvTWFrZWZpbGU6MTc6XHRcdGZzX2RpcmVudC5vIGZzX2NvbnRleHQubyBmc19wYXJzZXIubyBmc29wZW4ubyBpbml0Lm8gXFxcbmZzL01ha2VmaWxlLTE4LVx0XHRrZXJuZWxfcmVhZF9maWxlLm8gbW50X2lkbWFwcGluZy5vIHJlbWFwX3JhbmdlLm8gcGlkZnMubyBcXFxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9OTMxNj1uZnNkNF9zZXRfb3BlbnN0YXRlaWQoc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy05MzE4LXtcbmZzL25mc2QvbmZzNHN0YXRlLmM6OTMxOTpcdHB1dF9zdGF0ZWlkKGNzdGF0ZSwgXHUwMDI2dS1cdTAwM2VvcGVuLm9wX3N0YXRlaWQpO1xuZnMvbmZzZC9uZnM0c3RhdGUuYy05MzIwLX1cbi0tXG5mcy92ZXJpdHkvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfRlNfVkVSSVRZKSAmIzQzOz0gZW5hYmxlLm8gXFxcbi0tXG5mcy92ZXJpdHkvTWFrZWZpbGUtNi1cdFx0XHQgICBtZWFzdXJlLm8gXFxcbmZzL3Zlcml0eS9NYWtlZmlsZTo3Olx0XHRcdCAgIG9wZW4ubyBcXFxuZnMvdmVyaXR5L01ha2VmaWxlLTgtXHRcdFx0ICAgcGFnZWNhY2hlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTIKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogMzkyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYG9wZW4ub2AgaXMgYWx3YXlzIGJ1aWx0LCBubyBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQsIGhlbmNlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtdYC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBgV29ydGhGdXp6aW5nYD8gTGV0JiMzOTtzIGRpdmUgZGVlcC4KCkkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgYXBwbHkgdGhlIGNyaXRlcmlhLiAgVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFyZSBjbGVhcjogZG9lcyB0aGUgbW9kaWZpZWQgY29kZSBmYWxsICpzdHJpY3RseSogaW50byBhbnkgb2YgdGhlIGV4Y2x1c2lvbiBjYXRlZ29yaWVzPyBOby4gVGhpcyBwYXRjaCBpbiBgZnMvb3Blbi5jYCBkaXJlY3RseSBhbHRlcnMga2VybmVsIEMgY29kZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSBoYW5kbGluZyBvZiB0aGUgYGNsb3NlKClgIHN5c3RlbSBjYWxsJiMzOTtzIHJldHVybiB2YWx1ZSB3aGVuIGludGVycnVwdGVkLiBJdCYjMzk7cyBhIGNsZWFyIG1vZGlmaWNhdGlvbiB0byBleGVjdXRhYmxlIGNvZGUgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhlIGNvcmUgVkZTIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBuZWdhdGl2ZSBjcml0ZXJpYSBhcmUgbm90IG1ldC4KCk5vdywgY2hlY2tpbmcgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgJiMzNDtDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIC4uLiBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuJiMzNDsgIEl0IGlzIGEgZGlyZWN0IGFsdGVyYXRpb24gb2Ygc3lzY2FsbCBoYW5kbGluZy4gSXQgYWZmZWN0cyBzeXN0ZW0gY2FsbCByZXR1cm4gdmFsdWVzLiBUaHVzLCBiYXNlZCBvbiB0aGlzIHBvc2l0aXZlIGNyaXRlcmlvbiwgIGBXb3J0aEZ1enppbmdgICptdXN0KiBiZSBgdHJ1ZWAuCgpOZXh0LCB0aGUgY3J1Y2lhbCBzdGVwOiBkZWZpbmluZyBgRm9jdXNTeW1ib2xzYC4gIEF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBgX194NjRfc3lzX2Nsb3NlYCBpcyBOT1QgYSAmIzM0O2dlbmVyYWwgbWVtb3J5IGFsbG9jYXRvciYjMzQ7LCAmIzM0O3BhZ2UgZmF1bHQgaGFuZGxlciYjMzQ7LCBvciAmIzM0O2NvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS4mIzM0OyBgX194NjRfc3lzX2Nsb3NlYCAqaXMqIHRoZSBleHBsaWNpdCBlbnRyeSBwb2ludCBmb3IgdGhlIGBjbG9zZSgpYCBzeXN0ZW0gY2FsbCBvbiB4ODZfNjQsIHdoaWNoIGlzIHRoZSBleGFjdCBmdW5jdGlvbiB0aGlzIHBhdGNoIG1vZGlmaWVzLgoKTGV0JiMzOTtzIGNhcmVmdWxseSBjb25zaWRlciB3aGV0aGVyIGl0IGlzIHViaXF1aXRvdXMuIFN5emthbGxlciYjMzk7cyBwdXJwb3NlIGlzIHRvIGZpbmQgYnVncyBhbmQgZXJyb3JzIGluIGFueSBjYWxsLiBTaG91bGQgd2UgaW5jbHVkZSBgX194NjRfc3lzX2Nsb3NlYD8gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGFjdCBiZWhhdmlvciBvZiBgY2xvc2VgLCB0aGUgYW5zd2VyIGlzIHllcy4gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGFjdCBiZWhhdmlvciBvZiBgY2xvc2VgLCB3ZSBtdXN0IGluY2x1ZGUgaXQuIGBjbG9zZWAgaXMgbm90IGNhbGxlZCBldmVyeXdoZXJlLiBTeXprYWxsZXIgbXVzdCBmb2N1cyBvbiBgX194NjRfc3lzX2Nsb3NlYCBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBgY2xvc2VgLiBXZSBtdXN0IGluY2x1ZGUgaXQuCgpTaG91bGQgd2UgYWxzbyBpbmNsdWRlIGBfX2RvX3N5c19jbG9zZWA/ICBUaGF0IGRlcGVuZHMgb24gd2hhdCBzeW1ib2xzIHRoZSBjb21waWxlciBhY3R1YWxseSBlbWl0cy4gT24geDg2XzY0LCBgX194NjRfc3lzX2Nsb3NlYCAqaXMqIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50LCBidXQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBtaWdodCBiZSBpbiBgX19kb19zeXNfY2xvc2VgLiBTeXprYWxsZXIgd2lsbCByZXNvbHZlIHRoaXMsIHNvIGxpc3RpbmcgKmJvdGgqIGlzIHRoZSBzYWZlc3QgYXBwcm9hY2g6IGBbJiMzNDtfX3g2NF9zeXNfY2xvc2UmIzM0OywgJiMzNDtfX2RvX3N5c19jbG9zZSYjMzQ7XWAuCgpObyBmdXJ0aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4KClRvIGVuc3VyZSBzb3VuZG5lc3MsIEkgZG91YmxlLWNoZWNrIGBXb3J0aEZ1enppbmdgIGFnYWluOgoKMS4gIFRoaXMgcGF0Y2ggKmNoYW5nZXMqIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgLUVJTlRSYCB0byBgMGAgaW4gY2VydGFpbiBjYXNlcy4gVGhhdCBjb3VsZCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgYWx0ZXIgYmVoYXZpb3IuCjIuICBJdCAqYWRkcyogYC1FSU5UUmAgdG8gdGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGJlIGNoYW5nZWQgZnJvbSByZXR1cm4uCjMuICBUaGlzIGltcGFjdHMgYW55IGZpbGVzeXN0ZW0gb3IgZHJpdmVyIHRoYXQgdXNlcyBgLmZsdXNoYCBjYWxsYmFja3Mgb3IgcmVtb3ZlcyBQT1NJWCBsb2Nrcy4KNC4gIEl0JiMzOTtzIGluIHRoZSBWRlMvc3lzY2FsbCBwYXRoLgoKVGh1cywgYFdvcnRoRnV6emluZyA9IHRydWVgIGlzIHVuZXF1aXZvY2FsbHkgY29ycmVjdC4KClRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYFJlYXNvbmluZ2A6ICBUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzeXNjYWxsIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBWRlMsIHNwZWNpZmljYWxseSB0aGUgcmV0dXJuIGNvZGVzIG9mIGNsb3NlLCBtYWtpbmcgaXQgbGlrZWx5IHRvIGludHJvZHVjZSBidWdzIGFuZCByZWdyZXNzaW9ucy4gTmVnYXRpdmUgY3JpdGVyaWEgYXJlIG5vdCBtZXQuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O19feDY0X3N5c19jbG9zZSYjMzQ7LCAmIzM0O19fZG9fc3lzX2Nsb3NlJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gCgpJIGFtIG5vdyBjb25maWRlbnQgYW5kIHJlYWR5IHRvIHN1Ym1pdCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19feDY0X3N5c19jbG9zZSYjMzQ7LAogICAgJiMzNDtfX2RvX3N5c19jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xvc2Ugc3lzY2FsbCBoYW5kbGluZyBpbiBmcy9vcGVuLmMgdG8gcmV0dXJuIDAgaW5zdGVhZCBvZiAtRUlOVFIgd2hlbiBmaWxwX2ZsdXNoKCkgaXMgaW50ZXJydXB0ZWQgKHJldHVybmluZyAtRUlOVFIsIC1FUkVTVEFSVFNZUywgZXRjLikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIHN5c2NhbGwgbG9naWMgaW4gdGhlIGNvcmUgVkZTIHN1YnN5c3RlbSwgYWx0ZXJpbmcgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBhY3Jvc3MgaW50ZXJydXB0ZWQgZmlsZSBjbG9zZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19feDY0X3N5c19jbG9zZSYjMzQ7LAogICAgJiMzNDtfX2RvX3N5c19jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xvc2Ugc3lzY2FsbCBoYW5kbGluZyBpbiBmcy9vcGVuLmMgdG8gcmV0dXJuIDAgaW5zdGVhZCBvZiAtRUlOVFIgd2hlbiBmaWxwX2ZsdXNoKCkgaXMgaW50ZXJydXB0ZWQgKHJldHVybmluZyAtRUlOVFIsIC1FUkVTVEFSVFNZUywgZXRjLikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIHN5c2NhbGwgbG9naWMgaW4gdGhlIGNvcmUgVkZTIHN1YnN5c3RlbSwgYWx0ZXJpbmcgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBhY3Jvc3MgaW50ZXJydXB0ZWQgZmlsZSBjbG9zZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIHRoZSBzY2FsYXIgaW50ZWdlciByZXR1cm4gY29kZSBvZiB0aGUgY2xvc2UoMikgc3lzY2FsbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGludGVyYWN0IHdpdGggYW55IG1lbW9yeSBidWZmZXJzLCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNTJlNzkyNzc5YTAwYjJjNjBjYTIyNmNhZjJkNjBjNjc0NjFhMWM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMjA6MDg6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNDA4OTI1ZDdiZDBiNy4uODFhNDNiNmM1YjZiOSAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29wZW4uYwpAQCAtMTUxMywxMiAmIzQzOzE1MTMsMTcgQEAgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKQogCWlmIChsaWtlbHkocmV0dmFsID09IDApKQogCQlyZXR1cm4gMDsKIAotCS8qIGNhbiYjMzk7dCByZXN0YXJ0IGNsb3NlIHN5c2NhbGwgYmVjYXVzZSBmaWxlIHRhYmxlIGVudHJ5IHdhcyBjbGVhcmVkICovCi0JaWYgKHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHwKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWQKJiM0MzsJICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlCiYjNDM7CSAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0dmFsID09IC1FSU5UUiB8fAomIzQzOwkgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fAogCSAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8CiAJICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHwKIAkgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spCi0JCXJldHZhbCA9IC1FSU5UUjsKJiM0MzsJCXJldHZhbCA9IDA7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIHBhdGNoLCBzcGVjaWZpY2FsbHkgaW4gYGZzL29wZW4uY2AsIHdpdGhpbiB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbiAoYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgKS4gVGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYmV5b25kIHRoZSB1c3VhbCBLQVNBTi4KCkZpcnN0LCBsZXQmIzM5O3MgZG8gYSBxdWljayByaXNrIGFzc2Vzc21lbnQuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlZmVuc2l2ZSBhbmFseXNpcyDigJMgZGVjaWRpbmcgb24gdGhlIHJpZ2h0IHNhbml0aXplciBmb3IgZnV6emluZy4gSXQmIzM5O3MgYmVuaWduLCBkZWZpbml0ZWx5IGxvdyBzZXZlcml0eS4gTm8gbWFsd2FyZSBkZXZlbG9wbWVudCwgbm8gZXhwbG9pdGF0aW9uLCBhbGwgc2FmZS4gV2UmIzM5O3JlIGp1c3QgdHJ5aW5nIHRvIGVuaGFuY2Ugb3VyIHRlc3RpbmcgYXBwcm9hY2guIEdvb2QsIHdlIGNhbiBwcm9jZWVkLgoKTm93LCBsZXQmIzM5O3MgYWN0dWFsbHkgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgZGlmZiBpbnZvbHZlcyBoYW5kbGluZyBlcnJvciBjb2RlcyByZXR1cm5lZCBieSB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyBob3cgYEVJTlRSYCAoaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwpIGlzIGhhbmRsZWQgYWZ0ZXIgdGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC4gUHJldmlvdXNseSwgaXQgYXBwZWFycyB0aGUgcGF0Y2ggd291bGQgYXR0ZW1wdCB0byByZXN0YXJ0IGBjbG9zZWAgZXZlbiBhZnRlciB0aGUgZmlsZSB0YWJsZSBlbnRyeSB3YXMgY2xlYXJlZCwgd2hpY2ggaXMgbm90IHNhZmUuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGlzIGJlaGF2aW9yLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgZmlsZSB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBzb21lIGNvbnRleHQgYXJvdW5kIGxpbmUgMTUxMy4KCk5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIEtNU0FOIGlzIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIElzIHRoaXMgYSBzaW1wbGUgY2hhbmdlIG9mIGVycm9yIHJlcG9ydGluZyBsb2dpYywgb3IgZG9lcyBpdCB0b3VjaCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zIHJlbGF0ZWQgdG8gZmlsZSBkZXNjcmlwdG9yIG1hbmFnZW1lbnQgaW4gYSB3YXkgdGhhdCBLTVNBTiB3b3VsZCBiZSB2YWx1YWJsZT8gSSYjMzk7bGwgZGlnIGRlZXBlciBpbnRvIGBmcy9vcGVuLmNgIHRvIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vcGVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0OTU6XHQgKi9cbjE0OTY6XHRTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXG4xNDk3Olx0e1xuMTQ5ODpcdFx0aW50IHJldHZhbDtcbjE0OTk6XHRcdHN0cnVjdCBmaWxlICpmaWxlO1xuMTUwMDpcdFxuMTUwMTpcdFx0ZmlsZSA9IGZpbGVfY2xvc2VfZmQoZmQpO1xuMTUwMjpcdFx0aWYgKCFmaWxlKVxuMTUwMzpcdFx0XHRyZXR1cm4gLUVCQURGO1xuMTUwNDpcdFxuMTUwNTpcdFx0cmV0dmFsID0gZmlscF9mbHVzaChmaWxlLCBjdXJyZW50LVx1MDAzZWZpbGVzKTtcbjE1MDY6XHRcbjE1MDc6XHRcdC8qXG4xNTA4Olx0XHQgKiBXZSYjMzk7cmUgcmV0dXJuaW5nIHRvIHVzZXIgc3BhY2UuIERvbiYjMzk7dCBib3RoZXJcbjE1MDk6XHRcdCAqIHdpdGggYW55IGRlbGF5ZWQgZnB1dCgpIGNhc2VzLlxuMTUxMDpcdFx0ICovXG4xNTExOlx0XHRmcHV0X2Nsb3NlX3N5bmMoZmlsZSk7XG4xNTEyOlx0XG4xNTEzOlx0XHRpZiAobGlrZWx5KHJldHZhbCA9PSAwKSlcbjE1MTQ6XHRcdFx0cmV0dXJuIDA7XG4xNTE1Olx0XG4xNTE2Olx0XHQvKlxuMTUxNzpcdFx0ICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWRcbjE1MTg6XHRcdCAqIGNsb3NlIGNhbm5vdCBiZSByZXN0YXJ0ZWQgc2FmZWx5LiBEbyBub3QgcmVwb3J0IEVJTlRSIGFmdGVyIHRoZVxuMTUxOTpcdFx0ICogZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC5cbjE1MjA6XHRcdCAqL1xuMTUyMTpcdFx0aWYgKHJldHZhbCA9PSAtRUlOVFIgfHxcbjE1MjI6XHRcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XG4xNTIzOlx0XHQgICAgcmV0dmFsID09IC1FUkVTVEFSVE5PSU5UUiB8fFxuMTUyNDpcdFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHxcbjE1MjU6XHRcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSylcbjE1MjY6XHRcdFx0cmV0dmFsID0gMDtcbjE1Mjc6XHRcbjE1Mjg6XHRcdHJldHVybiByZXR2YWw7XG4xNTI5Olx0fVxuMTUzMDpcdFxuMTUzMTpcdC8qXG4xNTMyOlx0ICogVGhpcyByb3V0aW5lIHNpbXVsYXRlcyBhIGhhbmd1cCBvbiB0aGUgdHR5LCB0byBhcnJhbmdlIHRoYXQgdXNlcnNcbjE1MzM6XHQgKiBhcmUgZ2l2ZW4gY2xlYW4gdGVybWluYWxzIGF0IGxvZ2luIHRpbWUuXG4xNTM0Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjYKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogOTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGNsb3NlKDIpYCBTeXNjYWxsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGBjbG9zZSgyKWAgc3lzY2FsbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGludGVycnVwdGlvbiBieSBzaWduYWxzLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGlzOiBpZiBgZmlscF9mbHVzaCgpYCByZXR1cm5zIGFuIGVycm9yIGNvZGUgaW5kaWNhdGluZyBhbiBpbnRlcnJ1cHQgKGxpa2UgYC1FSU5UUmAgb3Igb25lIG9mIHRoZSBgLUVSRVNUQVJUKmAgdmFyaWFudHMpLCB0aGUgcHJldmlvdXMgYmVoYXZpb3Igd2FzIHRvIHJldHVybiBgLUVJTlRSYCB0byB1c2Vyc3BhY2UuIFRoaXMgc2VlbXMgc2ltcGxlIGVub3VnaC4KClRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQgZnJvbSB0aGUgY29udGV4dCwgaXMgdGhhdCBhIHJldHVybiBvZiBgLUVJTlRSYCBlbmNvdXJhZ2VzIHRoZSBhcHBsaWNhdGlvbiB0byByZXRyeSB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbC4gVGhlIHN0YW5kYXJkIHNheXMgaXQgY2FuLCBidXQgUE9TSVggaXMgYW4gaWRlYWxpemF0aW9uLiBJbiByZWFsaXR5LCBpbiB0aGUgTGludXgga2VybmVsLCB0aGUgZmlsZSBkZXNjcmlwdG9yIGhhcyAqYWxyZWFkeSogYmVlbiBkZXRhY2hlZCBhbmQgY2xvc2VkIGJ5IHRoZSB0aW1lIHdlIHdvdWxkIHJldHVybiB0byB0aGUgc3lzdGVtIGNhbGwuIElmIHRoZSBhcHBsaWNhdGlvbiByZXRyaWVzIGBjbG9zZSgpYCBpbiB0aGlzIHNpdHVhdGlvbiwgaXQgaXMgbGlrZWx5IHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYmVlbiByZS11c2VkIGFuZCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZpbGUgd2lsbCBiZSBjbG9zZWQuIFRoaXMgaXMgYmVjYXVzZSB0aGUga2VybmVsIGhhcyBhbHJlYWR5IGNsb3NlZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFuZCB0aGUgcHJvY2VzcyBpcyBubyBsb25nZXIgYWJsZSB0byBzYWZlbHkgY2xvc2UgaXQuIFRoaXMgcGF0Y2ggYWltcyB0byBmaXggdGhpcy4KClNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gYmVoYXZpb3IuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUlOVFJgIGluIHRoZXNlIGludGVycnVwdGVkIHNjZW5hcmlvcywgaXQgbm93IHJldHVybnMgMCwgaW5kaWNhdGluZyBzdWNjZXNzLiBUaGlzIGlzIGEgbXVjaCBiZXR0ZXIgYXBwcm9hY2ggc2luY2UgaXQgYXZvaWRzIG1pc2xlYWRpbmcgdGhlIGFwcGxpY2F0aW9uIGludG8gYXR0ZW1wdGluZyBhIHJldHJ5IG9uIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgaXMgbm8gbG9uZ2VyIHZhbGlkLCBhbmQgaXMgbm93ICYjMzQ7Y2xvc2VkLiYjMzQ7CgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogc2FmZXR5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MuIEkmIzM5O20gY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgcGF0Y2ggYWdhaW5zdCBjb21tb24gdnVsbmVyYWJpbGl0aWVzOgoKKiAgICoqQ29weWluZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZT8qKiBObywgYGNsb3NlYCBvbmx5IHJldHVybnMgYW4gaW50ZWdlciBlcnJvciBjb2RlLgoqICAgKipTdHJ1Y3QvYnVmZmVyIGFsbG9jYXRpb24/KiogTm8sIHRoaXMgcGF0Y2ggaXMgb25seSBjaGFuZ2luZyB0aGUgcmV0dXJuIHZhbHVlLgoqICAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBgcmV0dmFsYCBpcyBpbml0aWFsaXplZCBieSBgZmlscF9mbHVzaGAsIHNvIHdlIGFyZSBnb29kLgoqICAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gYHJldHZhbGAgaXMgdGhlIHJlc3VsdCBvZiBgZmlscF9mbHVzaGAuCiogICAqKkJvdW5kcywgbGVuZ3Rocywgb3IgZGF0YSBjb3B5aW5nIGFmZmVjdGVkPyoqIE5vcGUuCiogICAqKkluZm8tbGVhayByaXNrPyoqIE5vdCBpbiB0aGUgc2xpZ2h0ZXN0LgoKVGhlcmVmb3JlLCBubyByaXNrIG9mIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgdG8gdGhlIHJldHVybiB2YWx1ZS4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2FmZS4gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgbmVlZGVkIGhlcmUuCgpJJiMzOTttIGNvbmZpcm1pbmcgdGhpcyBpcyBhIGNsZWFyICYjMzQ7TmVlZHNLTVNBTj1mYWxzZSYjMzQ7IHNjZW5hcmlvLCBiYXNlZCBvbiB0aGUga2VybmVsJiMzOTtzIGRvY3VtZW50YXRpb24uIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG9mIHRoZSByaXNrcyB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLCBhbmQgaXQmIzM5O3Mgd2VsbCB3aXRoaW4gdGhlIGJvdW5kcyBvZiBzdGFuZGFyZCBidWcgZGV0ZWN0aW9uLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgaGFuZGxpbmcgaW4gc3lzX2Nsb3NlKCkgd2hlbiBmaWxwX2ZsdXNoKCkgcmV0dXJucyAtRUlOVFIgb3IgYSByZXN0YXJ0IGVycm9yIGNvZGUgKC1FUkVTVEFSVFNZUywgLUVSRVNUQVJUTk9JTlRSLCAtRVJFU1RBUlROT0hBTkQsIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spLCByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIC1FSU5UUi5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFsdGVycyB0aGUgc2NhbGFyIGludGVnZXIgcmV0dXJuIGNvZGUgb2YgdGhlIGNsb3NlKDIpIHN5c2NhbGwuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBpbnRlcmFjdCB3aXRoIGFueSBtZW1vcnkgYnVmZmVycywgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIHRoZSBzY2FsYXIgaW50ZWdlciByZXR1cm4gY29kZSBvZiB0aGUgY2xvc2UoMikgc3lzY2FsbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGludGVyYWN0IHdpdGggYW55IG1lbW9yeSBidWZmZXJzLCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA4OjIzLjU1NDUyMTk3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjgyNTg4ODc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3g2NF9zeXNfY2xvc2VcIixcbiAgICBcIl9fZG9fc3lzX2Nsb3NlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmV0dXJuIHZhbHVlIGhhbmRsaW5nIGluIHN5c19jbG9zZSgpIHdoZW4gZmlscF9mbHVzaCgpIHJldHVybnMgLUVJTlRSIG9yIGEgcmVzdGFydCBlcnJvciBjb2RlICgtRVJFU1RBUlRTWVMsIC1FUkVTVEFSVE5PSU5UUiwgLUVSRVNUQVJUTk9IQU5ELCAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLKSwgcmV0dXJuaW5nIDAgaW5zdGVhZCBvZiAtRUlOVFIuXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFsdGVycyB0aGUgc2NhbGFyIGludGVnZXIgcmV0dXJuIGNvZGUgb2YgdGhlIGNsb3NlKDIpIHN5c2NhbGwuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBpbnRlcmFjdCB3aXRoIGFueSBtZW1vcnkgYnVmZmVycywgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA4OjIzLjU1NDUyNjIwMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMTEyNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjUyZTc5Mjc3OWEwMGIyYzYwY2EyMjZjYWYyZDYwYzY3NDYxYTFjOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAyMDowODoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA0MDg5MjVkN2JkMGI3Li44MWE0M2I2YzViNmI5IDEwMDY0NFxcbi0tLSBhL2ZzL29wZW4uY1xcbisrKyBiL2ZzL29wZW4uY1xcbkBAIC0xNTEzLDEyICsxNTEzLDE3IEBAIFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClcXG4gXFx0aWYgKGxpa2VseShyZXR2YWwgPT0gMCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogY2FuJ3QgcmVzdGFydCBjbG9zZSBzeXNjYWxsIGJlY2F1c2UgZmlsZSB0YWJsZSBlbnRyeSB3YXMgY2xlYXJlZCAqL1xcbi1cXHRpZiAocmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxcbitcXHQvKlxcbitcXHQgKiBUaGUgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLCBzbyBhbiBpbnRlcnJ1cHRlZFxcbitcXHQgKiBjbG9zZSBjYW5ub3QgYmUgcmVzdGFydGVkIHNhZmVseS4gRG8gbm90IHJlcG9ydCBFSU5UUiBhZnRlciB0aGVcXG4rXFx0ICogZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XFxuK1xcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XFxuIFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8XFxuIFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5EIHx8XFxuIFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSylcXG4tXFx0XFx0cmV0dmFsID0gLUVJTlRSO1xcbitcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODoyNC4wNjcyNDk3OTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc5NzYwNTMxODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9feDY0X3N5c19jbG9zZVwiLFxuICAgIFwiX19kb19zeXNfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xvc2Ugc3lzY2FsbCBoYW5kbGluZyBpbiBmcy9vcGVuLmMgdG8gcmV0dXJuIDAgaW5zdGVhZCBvZiAtRUlOVFIgd2hlbiBmaWxwX2ZsdXNoKCkgaXMgaW50ZXJydXB0ZWQgKHJldHVybmluZyAtRUlOVFIsIC1FUkVTVEFSVFNZUywgZXRjLikuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIHN5c2NhbGwgbG9naWMgaW4gdGhlIGNvcmUgVkZTIHN1YnN5c3RlbSwgYWx0ZXJpbmcgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBhY3Jvc3MgaW50ZXJydXB0ZWQgZmlsZSBjbG9zZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI1MmU3OTI3NzlhMDBiMmM2MGNhMjI2Y2FmMmQ2MGM2NzQ2MWExYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAyMDowODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNDA4OTI1ZDdiZDBiNy4uODFhNDNiNmM1YjZiOSAxMDA2NDRcbi0tLSBhL2ZzL29wZW4uY1xuKysrIGIvZnMvb3Blbi5jXG5AQCAtMTUxMywxMiArMTUxMywxNyBAQCBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXG4gXHRpZiAobGlrZWx5KHJldHZhbCA9PSAwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBjYW4ndCByZXN0YXJ0IGNsb3NlIHN5c2NhbGwgYmVjYXVzZSBmaWxlIHRhYmxlIGVudHJ5IHdhcyBjbGVhcmVkICovXG4tXHRpZiAocmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxuK1x0LypcbitcdCAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQsIHNvIGFuIGludGVycnVwdGVkXG4rXHQgKiBjbG9zZSBjYW5ub3QgYmUgcmVzdGFydGVkIHNhZmVseS4gRG8gbm90IHJlcG9ydCBFSU5UUiBhZnRlciB0aGVcbitcdCAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuXG4rXHQgKi9cbitcdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XG4rXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxuIFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0lOVFIgfHxcbiBcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5EIHx8XG4gXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spXG4tXHRcdHJldHZhbCA9IC1FSU5UUjtcbitcdFx0cmV0dmFsID0gMDtcbiBcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDg6MjQuMDY3MjUxMzU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE1Njk4MzE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCBhIGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IHRvIHNlZSBpZiBpdCdzIHJlbGV2YW50IGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBBbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHRhc2sgaXMgZXNzZW50aWFsbHkgYSBzb2Z0d2FyZSBxdWFsaXR5IGFzc3VyYW5jZSBhbmQgZGVmZW5zaXZlIG1hbmV1dmVyLiBJJ20gbm90IGxvb2tpbmcgZm9yIG1hbHdhcmUgb3IgdHJ5aW5nIHRvIGNyYWZ0IGFuIGV4cGxvaXQgaGVyZS4gTXkgb2JqZWN0aXZlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCB3aXRoaW4gYGZzL29wZW4uY2AgcmVnYXJkaW5nIHRoZSBgY2xvc2VgIHN5c2NhbGwsIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZvY3VzZWQgZnV6emluZyBlZmZvcnRzLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb25zLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBwYXRjaCBpcyAqYWN0dWFsbHkqIGRvaW5nLiBMZXQncyBpbnNwZWN0IHRoZSBjb2RlIGRpcmVjdGx5LiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBjbG9zZWAgc3lzdGVtIGNhbGwgd2l0aGluIGBmcy9vcGVuLmNgLiBJIHNlZSB0aGUgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgIGRlZmluaXRpb24sIGFuZCBpdCBhcHBlYXJzIHRoZSBwcmltYXJ5IGNoYW5nZSByZWxhdGVzIHRvIGVycm9yIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgd2UgZGVhbCB3aXRoIGludGVycnVwdGVkIGBjbG9zZWAgY2FsbHMuIFRoZSBleGlzdGluZyBjb2RlIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYHJldHZhbGAgaXMgb25lIG9mIGBFUkVTVEFSVFNZU2AsIGV0Yy4gYW5kIG5vdyB0aGUgZml4IGFsc28gaGFuZGxlcyB0aGUgZXJyb3IgYEVJTlRSYC4gVGhpcyBjaGFuZ2UgYWx0ZXJzIGhvdyB3ZSBhcmUgaGFuZGxpbmcgYSByZXRyeSBvbiBgY2xvc2VgIHN5c3RlbSBjYWxsLlxuXG5Ib3dldmVyLCBJJ20gbm90IGp1c3QgZ29pbmcgdG8gdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWUuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBsaW5lIG51bWJlcnMgYmVpbmcgcGF0Y2hlZC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGZ1bGwgY29udGVudHMgb2YgYGZzL29wZW4uY2AgYXJvdW5kIGxpbmUgMTUxMywgc28gSSBjYW4gc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGFyZWEuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgYmVpbmcgY2hhbmdlZCBhbmQgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODozNS42MzcwODUyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vcGVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MDpcXHRcXG4xNDkxOlxcdC8qXFxuMTQ5MjpcXHQgKiBDYXJlZnVsIGhlcmUhIFdlIHRlc3Qgd2hldGhlciB0aGUgZmlsZSBwb2ludGVyIGlzIE5VTEwgYmVmb3JlXFxuMTQ5MzpcXHQgKiByZWxlYXNpbmcgdGhlIGZkLiBUaGlzIGVuc3VyZXMgdGhhdCBvbmUgY2xvbmUgdGFzayBjYW4ndCByZWxlYXNlXFxuMTQ5NDpcXHQgKiBhbiBmZCB3aGlsZSBhbm90aGVyIGNsb25lIGlzIG9wZW5pbmcgaXQuXFxuMTQ5NTpcXHQgKi9cXG4xNDk2OlxcdFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClcXG4xNDk3OlxcdHtcXG4xNDk4OlxcdFxcdGludCByZXR2YWw7XFxuMTQ5OTpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcXG4xNTAwOlxcdFxcbjE1MDE6XFx0XFx0ZmlsZSA9IGZpbGVfY2xvc2VfZmQoZmQpO1xcbjE1MDI6XFx0XFx0aWYgKCFmaWxlKVxcbjE1MDM6XFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4xNTA0OlxcdFxcbjE1MDU6XFx0XFx0cmV0dmFsID0gZmlscF9mbHVzaChmaWxlLCBjdXJyZW50LVxcdTAwM2VmaWxlcyk7XFxuMTUwNjpcXHRcXG4xNTA3OlxcdFxcdC8qXFxuMTUwODpcXHRcXHQgKiBXZSdyZSByZXR1cm5pbmcgdG8gdXNlciBzcGFjZS4gRG9uJ3QgYm90aGVyXFxuMTUwOTpcXHRcXHQgKiB3aXRoIGFueSBkZWxheWVkIGZwdXQoKSBjYXNlcy5cXG4xNTEwOlxcdFxcdCAqL1xcbjE1MTE6XFx0XFx0ZnB1dF9jbG9zZV9zeW5jKGZpbGUpO1xcbjE1MTI6XFx0XFxuMTUxMzpcXHRcXHRpZiAobGlrZWx5KHJldHZhbCA9PSAwKSlcXG4xNTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbjE1MTU6XFx0XFxuMTUxNjpcXHRcXHQvKlxcbjE1MTc6XFx0XFx0ICogVGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwgc28gYW4gaW50ZXJydXB0ZWRcXG4xNTE4OlxcdFxcdCAqIGNsb3NlIGNhbm5vdCBiZSByZXN0YXJ0ZWQgc2FmZWx5LiBEbyBub3QgcmVwb3J0IEVJTlRSIGFmdGVyIHRoZVxcbjE1MTk6XFx0XFx0ICogZGVzY3JpcHRvciBoYXMgYmVlbiBkZXRhY2hlZC5cXG4xNTIwOlxcdFxcdCAqL1xcbjE1MjE6XFx0XFx0aWYgKHJldHZhbCA9PSAtRUlOVFIgfHxcXG4xNTIyOlxcdFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUU1lTIHx8XFxuMTUyMzpcXHRcXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVE5PSU5UUiB8fFxcbjE1MjQ6XFx0XFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQgfHxcXG4xNTI1OlxcdFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSylcXG4xNTI2OlxcdFxcdFxcdHJldHZhbCA9IDA7XFxuMTUyNzpcXHRcXG4xNTI4OlxcdFxcdHJldHVybiByZXR2YWw7XFxuMTUyOTpcXHR9XFxuMTUzMDpcXHRcXG4xNTMxOlxcdC8qXFxuMTUzMjpcXHQgKiBUaGlzIHJvdXRpbmUgc2ltdWxhdGVzIGEgaGFuZ3VwIG9uIHRoZSB0dHksIHRvIGFycmFuZ2UgdGhhdCB1c2Vyc1xcbjE1MzM6XFx0ICogYXJlIGdpdmVuIGNsZWFuIHRlcm1pbmFscyBhdCBsb2dpbiB0aW1lLlxcbjE1MzQ6XFx0ICovXFxuMTUzNTpcXHRTWVNDQUxMX0RFRklORTAodmhhbmd1cClcXG4xNTM2OlxcdHtcXG4xNTM3OlxcdFxcdGlmIChjYXBhYmxlKENBUF9TWVNfVFRZX0NPTkZJRykpIHtcXG4xNTM4OlxcdFxcdFxcdHR0eV92aGFuZ3VwX3NlbGYoKTtcXG4xNTM5OlxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODozNS42MzcyMTQwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc3MTEwMTI1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgYSBgY2xvc2UoMilgIFN5c2NhbGwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGNsb3NlKDIpYCBzeXNjYWxsLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZXJyb3IgcmV0dXJucyBmcm9tIGBmaWxwX2ZsdXNoKClgLiBQcmV2aW91c2x5LCBgLUVJTlRSYCB3YXMgcmV0dXJuZWQgZGlyZWN0bHkuIE5vdywgYSBjaGVjayBmb3IgYC1FSU5UUmAgaXMgYWRkZWQsIGFuZCAwIGlzIHJldHVybmVkIGluIHNvbWUgY2FzZXMuIFRoZSBpbml0aWFsIHRob3VnaHQgaXM6IGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IFllcywgdGhpcyBpcyB0aGUgc3RhbmRhcmQgYHN5c19jbG9zZWAgLyBgY2xvc2UoZmQpYCBlbnRyeXBvaW50LCBzbyBpdCdzIGFic29sdXRlbHkgcmVhY2hhYmxlLiBUaGUga2V5IHF1ZXN0aW9uIG5vdyBpcywgaXMgaXQgd29ydGggZnV6emluZz9cblxuVGhlIHRyaWFnZSBwaGlsb3NvcGh5IHN0YXRlcyB0aGF0IHJlYWNoYWJpbGl0eSBpcyBwcmltYXJ5LiBNb2RpZmllZCByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLCB1bmxlc3MgaXQgZmFsbHMgaW50byBzcGVjaWZpYyBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhpcyBjaGFuZ2UgKmlzKiByZWFjaGFibGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIFZGUy9zeXNjYWxsIGhhbmRsaW5nIGFyZWEsIHNvIHBlciBzZWN0aW9uIDMsIGl0J3MgYSBcImNvcmUgc3Vic3lzdGVtXCIgbW9kaWZpY2F0aW9uLCBhbmQgdGhlcmVmb3JlIGZhbGxzIHVuZGVyIFwiV29ydGhGdXp6aW5nPXRydWVcIi5cblxuTm93LCB3ZSBuZWVkIHRvIHRoaW5rIGFib3V0IEZvY3VzU3ltYm9scy4gIFRoZSBkb2N1bWVudCBlbXBoYXNpemVzIGF2b2lkaW5nIFwidWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLlwiIFRoaXMgbWVhbnMgbm90IGxpc3RpbmcgdGhpbmdzIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgc3lzX2Nsb3NlYCAvIGBfX2RvX3N5c19jbG9zZWAgaXMgdWJpcXVpdG91cyEgTmVhcmx5IGV2ZXJ5IHByb2dyYW0gY2FsbHMgYGNsb3NlKGZkKWAuIEhvd2V2ZXIsIGl0J3MgdGhlICpzcGVjaWZpYyogbW9kaWZpY2F0aW9uIG9mIHRoZSBgY2xvc2VgIHN5c2NhbGwgdGhhdCBpcyB0aGUgdGFyZ2V0IGhlcmUuIFRoZSBvbmx5IG1vZGlmaWVkIGNvZGUgc2VlbXMgdG8gYmUgYFNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClgLiBUaGlzIGV4cGFuZHMgdG8gYF9fZG9fc3lzX2Nsb3NlYCBhbmQgYF9feDY0X3N5c19jbG9zZWAuIEJ1dCBpcyBpdCBhIHRhcmdldCBzcGVjaWZpYyBlbnRyeXBvaW50P1xuXG5XZSBoYXZlIHRvIGRldGVybWluZSBpZiBtZW50aW9uaW5nIGBfX2RvX3N5c19jbG9zZWAgdmlvbGF0ZXMgdGhlIHJ1bGUgYWJvdXQgYXZvaWRpbmcgdWJpcXVpdG91cyBjb2RlLiBDYW4gRm9jdXNTeW1ib2xzIGJlIGVtcHR5PyBUaGUgc2NoZW1hIHNheXMgdGhleSdyZSBudWxsYWJsZSBidXQgb2YgdGhlIHR5cGUgQVJSQVkuIENhbiB3ZSBmdXp6IHRoZSBjaGFuZ2Ugd2l0aG91dCBzcGVjaWZ5aW5nIGFueXRoaW5nPyAgXG5cblRoZSBkb2N1bWVudCBzdHJlc3NlcyB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMuIElmIG9ubHkgdGhlIHN5c2NhbGwgaXRzZWxmIGhhcyBiZWVuIGNoYW5nZWQsIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBhbGxvd2VkIGFzIGEgdGFyZ2V0IGlmIGl0J3MgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkPyBTaW5jZSBubyBvdGhlciBjYWxsZXIgaXMgbW9kaWZpZWQsIGFuZCB0aGUgY2hhbmdlIGlzICp3aXRoaW4qIHRoZSBgc3lzX2Nsb3NlYCBsb2dpYywgaXQgaXMgbGlrZWx5IHRoZSBvbmx5IHRhcmdldC5cblxuVWx0aW1hdGVseSwgSSBuZWVkIG1vcmUgY29udGV4dCB0byBiZSAqY2VydGFpbiouIFdoYXQgd2FzIHRoZSAqcmVhc29uKiBmb3IgdGhpcyBwYXRjaD8gVW5kZXJzdGFuZGluZyAqd2h5KiB0aGV5IGNoYW5nZWQgdGhpcyBlcnJvciBoYW5kbGluZyBpbiBgY2xvc2VgIG1pZ2h0IHJldmVhbCBhIG1vcmUgc3BlY2lmaWMgdGFyZ2V0IG9yIGNsYXJpZnkgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIExldCdzIGRpZyBpbnRvIHRoZSBjb21taXQgaGlzdG9yeSFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo0My4zNDgyMjg5MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMjcxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmV0dmFsID09IC1FUkVTVEFSVFNZU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTE0OTY9U1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxcbi0tXFxuZnMvb3Blbi5jLTE1MjEtXFx0aWYgKHJldHZhbCA9PSAtRUlOVFIgfHxcXG5mcy9vcGVuLmM6MTUyMjpcXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxcbmZzL29wZW4uYy0xNTIzLVxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA4OjQzLjM5NDI2MDMyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MTgzMzYzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGBmaWxwX2ZsdXNoYCwgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBSb2xlIG9mIGBmaWxwX2ZsdXNoYCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgZmlscF9mbHVzaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgc3BlY2lmaWNhbGx5ICppcyogdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbj9cIiBJIGtub3cgaXQncyByZWxhdGVkIHRvIGZpbGUgb3BlcmF0aW9ucywgYnV0IHRoZSBcImZsdXNoXCIgcGFydCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBkYXRhIHN5bmNocm9uaXphdGlvbiBhbmQgZW5zdXJpbmcgY29uc2lzdGVuY3kuIElzIGl0IGFib3V0IHdyaXRpbmcgYnVmZmVyZWQgZGF0YSB0byBkaXNrPyBJcyBpdCBhYm91dCBpbnZhbGlkYXRpbmcgY2FjaGVzPyBPciBpcyBpdCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBjbGVhbnVwIHByb2NlZHVyZT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHNjb3BlLiBJcyBpdCBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgdXNlcnNwYWNlIG9yIGlzIGl0IHByaW1hcmlseSBhIGtlcm5lbC1pbnRlcm5hbCBmdW5jdGlvbj8gRGVwZW5kaW5nIG9uIGl0cyBkZXNpZ24sIGl0cyBiZWhhdmlvdXIgbWF5IGRpZmZlci4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgdG9vLCB0aGUgZmlsZSBwb2ludGVyJ3MgY2hhcmFjdGVyaXN0aWNzLiBJcyB0aGUgZmlsZSBwb2ludGVyIHBvaW50aW5nIHRvIGEgYmxvY2sgZGV2aWNlLCBhIGNoYXJhY3RlciBkZXZpY2UsIG9yIGEgcmVndWxhciBmaWxlPyBUaGlzJ2xsIGFsbCBpbmZsdWVuY2UgaG93IGBmaWxwX2ZsdXNoYCBpcyBkZXNpZ25lZCwgYW5kIGhvdyBpdCBiZWhhdmVzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSBpbiBhbnkgdXNlIGNhc2UuIE9rYXksIGxldCdzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgY29kZSBoYXZlIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA4OjQ1LjgxMjU5OTcwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk1MzI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxwX2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9sb2Nrcy5jPTI1NjU9aW50IGZjbnRsX3NldGxrKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5mcy9sb2Nrcy5jLTI2MTUtXFx0ICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmlsZSBhbmQgb3VyIGZpbGVzX3N0cnVjdCwganVzdCBsaWtlIG9uXFxuZnMvbG9ja3MuYzoyNjE2OlxcdCAqIGZpbHBfZmx1c2goKS4gVGhlcmUgaXMgbm8gbmVlZCB0byBkbyB0aGF0IHdoZW4gd2UncmVcXG5mcy9sb2Nrcy5jLTI2MTctXFx0ICogdW5sb2NraW5nIHRob3VnaCwgb3IgZm9yIE9GRCBsb2Nrcy5cXG4tLVxcbmZzL2xvY2tzLmM9MjY4OD1pbnQgZmNudGxfc2V0bGs2NCh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvbG9ja3MuYy0yNzM3LVxcdCAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpbGUgYW5kIG91ciBmaWxlc19zdHJ1Y3QsIGp1c3QgbGlrZSBvblxcbmZzL2xvY2tzLmM6MjczODpcXHQgKiBmaWxwX2ZsdXNoKCkuIFRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gdGhhdCB3aGVuIHdlJ3JlXFxuZnMvbG9ja3MuYy0yNzM5LVxcdCAqIHVubG9ja2luZyB0aG91Z2gsIG9yIGZvciBPRkQgbG9ja3MuXFxuLS1cXG5mcy9vcGVuLmM9MTQ0Nj1TWVNDQUxMX0RFRklORTIoY3JlYXQsIGNvbnN0IGNoYXIgX191c2VyICosIHBhdGhuYW1lLCB1bW9kZV90LCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTE0NTktICovXFxuZnMvb3Blbi5jOjE0NjA6c3RhdGljIGludCBmaWxwX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IGlkKVxcbmZzL29wZW4uYy0xNDYxLXtcXG4tLVxcbmZzL29wZW4uYz0xNDgwPWludCBmaWxwX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IGlkKVxcbi0tXFxuZnMvb3Blbi5jLTE0ODMtXFxuZnMvb3Blbi5jOjE0ODQ6XFx0cmV0dmFsID0gZmlscF9mbHVzaChmaWxwLCBpZCk7XFxuZnMvb3Blbi5jLTE0ODUtXFx0ZnB1dF9jbG9zZShmaWxwKTtcXG4tLVxcbmZzL29wZW4uYz0xNDk2PVNZU0NBTExfREVGSU5FMShjbG9zZSwgdW5zaWduZWQgaW50LCBmZClcXG4tLVxcbmZzL29wZW4uYy0xNTA0LVxcbmZzL29wZW4uYzoxNTA1OlxcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlsZSwgY3VycmVudC1cXHUwMDNlZmlsZXMpO1xcbmZzL29wZW4uYy0xNTA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo0NS44ODQ1NTc3NzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjgzNDgxMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgZmlscF9mbHVzaGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBmaWxwX2ZsdXNoYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgcmVmcmVzaCBvdXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGtlcm5lbCBmdW5jdGlvbi5cIiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhlIGxpZmVjeWNsZSBvZiBhIGZpbGUgZGVzY3JpcHRvciwgSSdsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc3VyZmFjZSBhbmQgcXVpY2tseSBhbmFseXplIHdoZXJlIHRoaXMgaXMgaW52b2tlZCwgaG93IGl04oCZcyBiZWluZyB1c2VkLCBhbmQgdGhlIHZhcmlvdXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIGV4ZWN1dGVkLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBsaWtlbHkgYmUgaGFuZGxpbmcgZWRnZSBjYXNlcyBpbnZvbHZpbmcgZGlydHkgcGFnZXMgYW5kIGVuc3VyaW5nIGFueSBwZW5kaW5nIHdyaXRlcyBhcmUgcHVzaGVkIHRvIHBlcnNpc3RlbnQgc3RvcmFnZS4gSXQncyB0aGUga2luZCBvZiBmdW5jdGlvbiB5b3UgaG9wZSBuZXZlciBnb2VzIHdyb25nLCBzbyBJJ2xsIHdhbnQgdG8gZm9jdXMgb24gYWxsIHRoZSBudWFuY2VzLlxuSSBrbm93IHRoZSB0eXBpY2FsIHVzYWdlIHBhdHRlcm4gbWlnaHQgaW52b2x2ZSBlbnN1cmluZyB0aGF0IGZpbGUgZGF0YSBpcyB3cml0dGVuIHRvIGRpc2sgYmVmb3JlIGFuIGFwcGxpY2F0aW9uIGNsb3NlcyBhIGZpbGUgb3IgYW4gYXNzb2NpYXRlZCBwcm9jZXNzIHRlcm1pbmF0ZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuIEknbGwgbmVlZCB0byBleGFtaW5lIGlmIGxvY2tpbmcgaXMgcHJvcGVybHkgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy5cblxuQmFzaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgd2hlbiBzb21lb25lIHdhbnRzIHRvIGNsb3NlIG9yIGZyZWUgdXAgYSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDg6NDguMTY4MDQxNDEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL29wZW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDU1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDU1OlxcdFxcbjE0NTY6XFx0LypcXG4xNDU3OlxcdCAqIFxcXCJpZFxcXCIgaXMgdGhlIFBPU0lYIHRocmVhZCBJRC4gV2UgdXNlIHRoZVxcbjE0NTg6XFx0ICogZmlsZXMgcG9pbnRlciBmb3IgdGhpcy4uXFxuMTQ1OTpcXHQgKi9cXG4xNDYwOlxcdHN0YXRpYyBpbnQgZmlscF9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlscCwgZmxfb3duZXJfdCBpZClcXG4xNDYxOlxcdHtcXG4xNDYyOlxcdFxcdGludCByZXR2YWwgPSAwO1xcbjE0NjM6XFx0XFxuMTQ2NDpcXHRcXHRpZiAoQ0hFQ0tfREFUQV9DT1JSVVBUSU9OKGZpbGVfY291bnQoZmlscCkgPT0gMCwgZmlscCxcXG4xNDY1OlxcdFxcdFxcdFxcdFxcXCJWRlM6IENsb3NlOiBmaWxlIGNvdW50IGlzIDAgKGZfb3A9JXBzKVxcXCIsXFxuMTQ2NjpcXHRcXHRcXHRcXHRmaWxwLVxcdTAwM2VmX29wKSkge1xcbjE0Njc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQ2ODpcXHRcXHR9XFxuMTQ2OTpcXHRcXG4xNDcwOlxcdFxcdGlmIChmaWxwLVxcdTAwM2VmX29wLVxcdTAwM2VmbHVzaClcXG4xNDcxOlxcdFxcdFxcdHJldHZhbCA9IGZpbHAtXFx1MDAzZWZfb3AtXFx1MDAzZWZsdXNoKGZpbHAsIGlkKTtcXG4xNDcyOlxcdFxcbjE0NzM6XFx0XFx0aWYgKGxpa2VseSghKGZpbHAtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1BBVEgpKSkge1xcbjE0NzQ6XFx0XFx0XFx0ZG5vdGlmeV9mbHVzaChmaWxwLCBpZCk7XFxuMTQ3NTpcXHRcXHRcXHRsb2Nrc19yZW1vdmVfcG9zaXgoZmlscCwgaWQpO1xcbjE0NzY6XFx0XFx0fVxcbjE0Nzc6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4xNDc4OlxcdH1cXG4xNDc5OlxcdFxcbjE0ODA6XFx0aW50IGZpbHBfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGZsX293bmVyX3QgaWQpXFxuMTQ4MTpcXHR7XFxuMTQ4MjpcXHRcXHRpbnQgcmV0dmFsO1xcbjE0ODM6XFx0XFxuMTQ4NDpcXHRcXHRyZXR2YWwgPSBmaWxwX2ZsdXNoKGZpbHAsIGlkKTtcXG4xNDg1OlxcdFxcdGZwdXRfY2xvc2UoZmlscCk7XFxuMTQ4NjpcXHRcXG4xNDg3OlxcdFxcdHJldHVybiByZXR2YWw7XFxuMTQ4ODpcXHR9XFxuMTQ4OTpcXHRFWFBPUlRfU1lNQk9MKGZpbHBfY2xvc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo0OC4xNjgxMzkwNzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDg5Mjg1MzM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENsb3NlKDIpIFN5c3RlbSBDYWxsIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgb2YgdGhlIGBjbG9zZSgyKWAgaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbCBhbmQgY29tcGFyaW5nIGl0IHRvIHRoZSB1bmRlcmx5aW5nIGBmaWxwX2Nsb3NlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBmaWxwX2Nsb3NlYCB3aGljaCBpcyBhIGxvd2VyIGxldmVsIGNhbGwgYW5kIHRoZSBzeXN0ZW0gY2FsbCBpdHNlbGYsIGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpYC4gVGhlIGtleSBsaWVzIGluIGhvdyB0aGV5IGhhbmRsZSB0aGUgcmV0dXJuIHZhbHVlIGFmdGVyIGBmaWxwX2ZsdXNoYC5cblxuSW4gdGhlIG9yaWdpbmFsIGBjbG9zZWAgaW1wbGVtZW50YXRpb24sIGlmIGBmaWxwX2ZsdXNoYCByZXR1cm5lZCBhbiBcImludGVycnVwdGlibGVcIiBlcnJvciBjb2RlIGxpa2UgYC1FUkVTVEFSVFNZU2AsIHRoZSBzeXN0ZW0gY2FsbCB3YXMgc2V0IHRvIGAtRUlOVFJgLCBhbmQgdGhhdCB3YXMgcmV0dXJuZWQgdG8gdXNlcnNwYWNlLiBUaGlzIGltcGxpZWQgdGhhdCB0aGUgdXNlciBwcm9ncmFtIGNvdWxkIHJldHJ5IHRoZSBgY2xvc2VgIG9wZXJhdGlvbi5cblxuSG93ZXZlciwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIGdhbWUuIE5vdywgaWYgYGZpbHBfZmx1c2hgIHJldHVybnMgYW55IG9mIHRob3NlIGludGVycnVwdGlibGUgZXJyb3JzLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBzeXN0ZW0gY2FsbCBpcyBzZXQgdG8gKnplcm8qISBUaGUgcmVhc29uIGZvciB0aGlzIGlzIGNydWNpYWwsIGFuZCBpdCBhbGlnbnMgd2l0aCBQT1NJWCBzdGFuZGFyZHMsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBhZGRyZXNzZXMgYSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiB3aXRoaW4gTGludXgncyBrZXJuZWwgZGVzaWduLlxuXG5CZWNhdXNlIGluIExpbnV4LCB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzLCBlc3NlbnRpYWxseSwgZGVhbGxvY2F0ZWQgKmJlZm9yZSogdGhlIGZsdXNoIG9wZXJhdGlvbiBjb21wbGV0ZXMsIHJldHJ5aW5nIGBjbG9zZWAgYWZ0ZXIgYW4gaW50ZXJydXB0IHdvdWxkIGJlIGRpc2FzdHJvdXMuIEEgdXNlciBwcm9ncmFtIHJldHJ5aW5nIGBjbG9zZWAgbWlnaHQgYWNjaWRlbnRhbGx5IGNsb3NlIGEgZmlsZSBkZXNjcmlwdG9yIGJlbG9uZ2luZyB0byBhICpkaWZmZXJlbnQqIGZpbGUgb3IgcHJvY2Vzcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBcImZyZWVkXCIgYW5kIG1heSBiZSByZS11c2VkISBUaGlzIGxlYWRzIHRvIGRhdGEgY29ycnVwdGlvbiwgc2VjdXJpdHkgYnJlYWNoZXMsIGFuZCB1bmRlZmluZWQgYmVoYXZpb3JzLlxuXG5CeSByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIGAtRUlOVFJgLCB0aGUga2VybmVsIGlzIGVzc2VudGlhbGx5IHRlbGxpbmcgdXNlcnNwYWNlLCBcIkRvbid0IHJldHJ5IHRoaXMuXCIgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBnb25lLiBFdmVyeXRoaW5nIGlzIGNsb3NlZC5cblxuSSdtIHRoaW5raW5nIHRoaXMgbGlrZWx5IGhhcyBiZWVuIGEgc291cmNlIG9mIHN1YnRsZSBidWdzIGZvciBhIGxvbmcgdGltZSwgYW5kIEknZCBsaWtlIHRvIGRpdmUgaW50byB0aGUgTGludXggZ2l0IGhpc3RvcnkgYW5kIHRoZSBtYWlsaW5nIGxpc3RzIHRvIHNlZSBpZiBJIGNhbiBmaW5kIG1vcmUgY29udGV4dCBvciBpbmZvcm1hdGlvbiBvbiB0aGlzIHBhdGNoLiBVbmRlcnN0YW5kaW5nIHRoZSBkaXNjdXNzaW9ucyBhcm91bmQgdGhpcyBjaGFuZ2UgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDg6NTMuMDYwOTk0NTQ0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDk2ODU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJUaGUgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLCBzbyBhbiBpbnRlcnJ1cHRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTE0OTY9U1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxcbi0tXFxuZnMvb3Blbi5jLTE1MTYtXFx0LypcXG5mcy9vcGVuLmM6MTUxNzpcXHQgKiBUaGUgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLCBzbyBhbiBpbnRlcnJ1cHRlZFxcbmZzL29wZW4uYy0xNTE4LVxcdCAqIGNsb3NlIGNhbm5vdCBiZSByZXN0YXJ0ZWQgc2FmZWx5LiBEbyBub3QgcmVwb3J0IEVJTlRSIGFmdGVyIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo1My4xMzE5NjcxNjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjA4Mjg0ODU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgYGNsb3NlYCBTeXN0ZW0gQ2FsbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBwYXRjaCBtb2RpZmllcyBgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKWAgaW4gYGZzL29wZW4uY2AuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nP1xuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgZ29hbCBpcyB0byBmaW5kIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzIGFuZCBuZXcgYXNzZXJ0aW9ucy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGNhcmVmdWxseS5cblxuQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgZnV6emluZyBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHJlYWNoYWJsZSBjb2RlLlxuXG5TZWN0aW9uIDIgcHJvdmlkZXMgdGhlICpuZWdhdGl2ZSBjcml0ZXJpYSosIHRlbGxpbmcgdXMgd2hlbiAqbm90KiB0byBmdXp6LiBMZXQgbWUgcmV2aWV3IHRoYXQ6IGl0IHNheXMgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzXCIuIFRoZXNlIGFyZTogbm9uLWtlcm5lbC9ub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBmaXQgdGhlIGJpbGwuXG5cbkNvbnZlcnNlbHksIHNlY3Rpb24gMyBzdGF0ZXMgdGhlICpwb3NpdGl2ZSBjcml0ZXJpYSo6IFwiUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGVcIi4gVGhpcyBpbmNsdWRlcyBjb3JlIHN1YnN5c3RlbXMsIHJlZmFjdG9yaW5ncywgcnVudGltZSBhc3NlcnRpb25zLCBvciByZWFjaGFibGUgZHJpdmVycy9wcm90b2NvbHMuIEFuZCBndWVzcyB3aGF0PyBUaGlzIGNsZWFybHkgYWZmZWN0cyBhIGNvcmUgc3Vic3lzdGVtOiBWRlMgYW5kIHN5c2NhbGwgaGFuZGxpbmchIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgdGhlIGBjbG9zZWAgc3lzdGVtIGNhbGwuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIHRoZSBuZXh0IHF1ZXN0aW9uOiB3aGF0IGFib3V0IGBGb2N1c1N5bWJvbHNgPyBJIG5lZWQgdG8gZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRvIGd1aWRlIHRoZSBmdXp6ZXIgZWZmZWN0aXZlbHksIHBlciBTZWN0aW9uIDQuIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMgYW5kIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy5cblxuVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBpc24ndCBgY2xvc2VgICp1YmlxdWl0b3VzKj8gU3l6a2FsbGVyIHVzZXMgYGNsb3NlYCBjb25zdGFudGx5LiBJdHMgZXhlY3V0b3IgY2FsbHMgaXQgZHVyaW5nIHRlYXJkb3duIGFuZCBiZXR3ZWVuIHN5c2NhbGxzLiBXYWl0LCB0aGUgKm1vZGlmaWVkKiBjb2RlIGlzICpvbmx5KiBgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKWAuIE9rYXksIHNvIHdoaWNoIHN5bWJvbCBkb2VzIHRoaXMgZGVmaW5lIG9uIGFtZDY0PyBUaGlzIGlzIGEgcXVlc3Rpb24gZm9yIHRoZSBrZXJuZWwgc291cmNlIG9yIGdyZXAgZm9yIGhvdyBTWVNDQUxMX0RFRklORSBpcyBpbXBsZW1lbnRlZCBvciBzeW1ib2xzIGluIG9wZW4uYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDg6NTkuMjE0ODE4NDU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTE3MTMwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19kb19zeXNfY2xvc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowODo1OS4yODU5OTU4ODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEzNzg0ODk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBjbG9zZWAgU3lzdGVtIENhbGwgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbCBpcyBpbXBsZW1lbnRlZCwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGF0IGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIC4uLilgIGlzIGV4cGFuZGVkIHVzaW5nIGEgbWFjcm8uIFRoYXQgbWFjcm8sIGZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGlzIGxpa2VseSB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIGNvcmUgYXNwZWN0cyBvZiBob3cgdGhlIGNhbGwgZnVuY3Rpb25zLiBOb3csIHRoYXQgbWFjcm8gZXhwYW5kcyB0byBmdW5jdGlvbnMgY2FsbGVkIGBfX2RvX3N5c19jbG9zZWAsIGFuZCBgX194NjRfc3lzX2Nsb3NlYC4gSXQgc2VlbXMgbGlrZSB0aGVyZSBtaWdodCBhbHNvIGJlIGFuIGBfX3NlX3N5c19jbG9zZWAgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgb3IgY29uZmlndXJhdGlvbiwgYnV0IEknbSBnb2luZyB0byBzZXQgdGhhdCBhc2lkZSBmb3Igbm93LlxuXG5NeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvc3lzY2FsbHMuaGAgYW5kIHVuZGVyc3RhbmQgaG93IHRoYXQgYFNZU0NBTExfREVGSU5FYCBtYWNybyBpcyBhY3R1YWxseSBkZWZpbmVkLiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgc3RydWN0dXJlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBhcmd1bWVudHMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3Mgc3lzdGVtIGNhbGwgdGFibGUsIGFuZCBpZiBpdCdzIGhhbmRsaW5nIGFueSBzcGVjaWZpYyBjb250ZXh0IHN3aXRjaGluZyBvciBzZWN1cml0eSBhc3BlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU0OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjAxLjQyMzg0NzYyMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NDU1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIFNZU0NBTExfREVGSU5FMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zeXNjYWxscy5oPTIxMT1zdGF0aWMgaW5saW5lIGludCBpc19zeXNjYWxsX3RyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICp0cF9ldmVudClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3lzY2FsbHMuaC0yMjQtXFxuaW5jbHVkZS9saW51eC9zeXNjYWxscy5oOjIyNTojZGVmaW5lIFNZU0NBTExfREVGSU5FMShuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgxLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgtMjI2LSNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUyKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDIsIF8jI25hbWUsIF9fVkFfQVJHU19fKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOTowMS40Njk4MDA5NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODY4MzEwMTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjbG9zZWAgU3lzdGVtIENhbGwgZm9yIEZvY3VzZWQgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gT24geDg2XzY0LCBgX19kb19zeXNfY2xvc2VgIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gYm9keSwgd2hpbGUgYF9feDY0X3N5c19jbG9zZWAgKG9yIG1heWJlIGBfX3NlX3N5c19jbG9zZWApIGFjdHMgYXMgdGhlIGVudHJ5IHBvaW50IHdyYXBwZXIuIEEga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGBGb2N1c1N5bWJvbHNgIGluIHRoZSBzY2hlbWEgZm9yIGBzZXQtcmVzdWx0c2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBzY2hlbWEgc2F5cyBcIlNwZWNpZmljLCBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zIHRvIGZvY3VzIGZ1enppbmcgb24uXCIgIFwibm9uLXViaXF1aXRvdXNcIiBpcyBpbXBvcnRhbnQhICBJdCBhbHNvIGV4cGxpY2l0bHkgd2FybnMgdG8gXCJBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFMsXCIgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbS4gIFRoYXQgaW5jbHVkZXMgYWxsb2NhdG9ycywgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuICBUaGlzIGlzIHRvIGF2b2lkIGRpbHV0aW5nIHRoZSBmdXp6aW5nIGVmZm9ydC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBfX2RvX3N5c19jbG9zZWAgb3IgYF9feDY0X3N5c19jbG9zZWAgYSB1YmlxdWl0b3VzIGZ1bmN0aW9uPyBEb2VzICphbG1vc3QqIGV2ZXJ5IHByb2dyYW0gY2FsbCBgY2xvc2VgIGluIHRoZSBTeXprYWxsZXIgY29udGV4dD8gIFJlbWVtYmVyLCBTeXprYWxsZXIgZ2VuZXJhdGVzIGFuZCBleGVjdXRlcyBzeXpsYW5nIHByb2dyYW1zLiAgVGhlc2UgcHJvZ3JhbXMgZ2VuZXJhdGUgc2VxdWVuY2VzIG9mIHN5c2NhbGxzLiBNYW55IG9wZW4gc29ja2V0cywgZmlsZSBkZXNjcmlwdG9ycywgZXRjLiwgYW5kLCBvZiBjb3Vyc2UsIFN5emthbGxlciAqZG9lcyogaGF2ZSBleHBsaWNpdCBgY2xvc2UoZmQpYCBjYWxscywgYW5kIHRoZSBleGVjdXRvciBhbHNvIGNsb3NlcyBmZHMuICpCdXQqIGlzIGNsZWFudXAgYnkgdGhlIGV4ZWN1dG9yIGl0c2VsZiB0cmFja2VkIGFzIHN5c2NhbGwgY292ZXJhZ2U/IFRoYXQncyBhIHBvaW50IG9mIHBvdGVudGlhbCB1bmNlcnRhaW50eS4gIENydWNpYWxseSwgc3l6bGFuZyAqZG9lcyogZ2VuZXJhdGUgYGNsb3NlYCBzeXNjYWxscy5cblxuTG9va2luZyBhdCB0aGUgXCJ1YmlxdWl0b3VzXCIgZXhhbXBsZXMsIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGFuZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgaXQncyBwcmV0dHkgY2xlYXIgYF9fZG9fc3lzX2Nsb3NlYCBpc24ndCBhbnkgb2YgdGhvc2UuICBCdXQsIHdoYXQgYWJvdXQgdGhlIGFsdGVybmF0aXZlIGd1aWRhbmNlPyAgVGhlIGRvY3VtZW50YXRpb24gYWxzbyBzYXlzIHRvIFwiVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOiBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXCJcblxuQWhhISBUaGUgbG9naWMgKmJlaW5nIGFkZGVkIG9yIGFsdGVyZWQqIGlzICpwcmVjaXNlbHkqIHdpdGhpbiBgX19kb19zeXNfY2xvc2VgIG9yIGBfX3g2NF9zeXNfY2xvc2VgISAgQW5kLCBpcyBpdCBhIGRpcmVjdCBBUEkgZW50cnlwb2ludD8gWWVzISBgX19kb19zeXNfY2xvc2VgIC8gYF9feDY0X3N5c19jbG9zZWAgKmlzKiB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBsb2dpYy5cblxuU28sIHdoYXQgYWJvdXQgZW1wdHkgYEZvY3VzU3ltYm9sc2A/IElmIGl0J3MgZW1wdHksIGRvZXMgU3l6a2FsbGVyIGZvY3VzIG9uIG5vdGhpbmc/IERvZXMgaXQgZnV6eiBldmVyeXRoaW5nPyBPciwgaXMgYW4gZW1wdHkgbGlzdCBpbnRlcnByZXRlZCBkaWZmZXJlbnRseT8gTm93LCBpZiBJIHB1dCBgX19kb19zeXNfY2xvc2VgIG9yIGBfX3g2NF9zeXNfY2xvc2VgIGluIGBGb2N1c1N5bWJvbHNgIHZlcnN1cyBhbiBlbXB0eSBhcnJheSBgW11gPyBXaGF0IHdpbGwgdGhlIHJlc3VsdCBiZT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCAuLi4pYCBkZWZpbmVzIHRoZSBzeW1ib2wgbmFtZS4gVGltZSB0byBsb29rIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTAuMTUyOTA1NjQzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc1MzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3g2NF9zeXNfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9MzU9bG9uZyB4NjRfc3lzX2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy0zOC1cXHQjaW5jbHVkZSBcXHUwMDNjYXNtL3N5c2NhbGxzXzY0LmhcXHUwMDNlXFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jOjM5OlxcdGRlZmF1bHQ6IHJldHVybiBfX3g2NF9zeXNfbmlfc3lzY2FsbChyZWdzKTtcXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDAtXFx0fVxcbi0tXFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jPTQ0PWxvbmcgeDMyX3N5c19jYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtNDctXFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9zeXNjYWxsc194MzIuaFxcdTAwM2VcXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM6NDg6XFx0ZGVmYXVsdDogcmV0dXJuIF9feDY0X3N5c19uaV9zeXNjYWxsKHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxfNjQuYy00OS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmM9ODc9X192aXNpYmxlIG5vaW5zdHIgYm9vbCBkb19zeXNjYWxsXzY0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgbnIpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9zeXNjYWxsXzY0LmMtOTUtXFx0XFx0LyogSW52YWxpZCBzeXN0ZW0gY2FsbCwgYnV0IHN0aWxsIGEgc3lzdGVtIGNhbGwuICovXFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jOjk2OlxcdFxcdHJlZ3MtXFx1MDAzZWF4ID0gX194NjRfc3lzX25pX3N5c2NhbGwocmVncyk7XFxuYXJjaC94ODYvZW50cnkvc3lzY2FsbF82NC5jLTk3LVxcdH1cXG4tLVxcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTctI1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsOjg6IyBUaGUgX194NjRfc3lzXyooKSBzdHVicyBhcmUgY3JlYXRlZCBvbi10aGUtZmx5IGZvciBzeXNfKigpIHN5c3RlbSBjYWxsc1xcbmFyY2gveDg2L2VudHJ5L3N5c2NhbGxzL3N5c2NhbGxfNjQudGJsLTktI1xcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYz0xMTk9c3RhdGljIGJvb2wgX19lbXVsYXRlX3ZzeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIxNy1cXHRcXHQvKiB0aGlzIGRlY29kZXMgcmVncy1cXHUwMDNlZGkgYW5kIHJlZ3MtXFx1MDAzZXNpIG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIxODpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfZ2V0dGltZW9mZGF5KHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjE5LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvZW50cnkvdnN5c2NhbGwvdnN5c2NhbGxfNjQuYy0yMjItXFx0XFx0LyogdGhpcyBkZWNvZGVzIHJlZ3MtXFx1MDAzZWRpIG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIyMzpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfdGltZShyZWdzKTtcXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jLTIyNC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMwLVxcdFxcdC8qIHRoaXMgZGVjb2RlcyByZWdzLVxcdTAwM2VkaSwgcmVncy1cXHUwMDNlc2kgYW5kIHJlZ3MtXFx1MDAzZWR4IG9uIGl0cyBvd24gKi9cXG5hcmNoL3g4Ni9lbnRyeS92c3lzY2FsbC92c3lzY2FsbF82NC5jOjIzMTpcXHRcXHRyZXQgPSBfX3g2NF9zeXNfZ2V0Y3B1KHJlZ3MpO1xcbmFyY2gveDg2L2VudHJ5L3ZzeXNjYWxsL3ZzeXNjYWxsXzY0LmMtMjMyLVxcdFxcdHJlZ3MtXFx1MDAzZWR4ID0gb3JpZ19keDtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTEwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjExOmV4dGVybiBsb25nIF9feDY0X3N5c19uaV9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xMi1leHRlcm4gbG9uZyBfX2lhMzJfc3lzX25pX3N5c2NhbGwoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmgtMTYtICogc3RydWN0IHB0X3JlZ3MgKnJlZ3MgYXMgdGhlIG9ubHkgYXJndW1lbnQgb2YgdGhlIHN5c2NhbGwgc3R1YihzKSBuYW1lZCBhczpcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaDoxNzogKiBfX3g2NF9zeXNfKigpICAgICAgICAgLSA2NC1iaXQgbmF0aXZlIHN5c2NhbGxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0xOC0gKiBfX2lhMzJfc3lzXyooKSAgICAgICAgLSAzMi1iaXQgbmF0aXZlIHN5c2NhbGwgb3IgY29tbW9uIGNvbXBhdCBzeXNjYWxsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zMy0gKlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oOjM0OiAqIFxcdTAwM2NfX3g2NF9zeXNfcmVjdlxcdTAwM2U6XFx0XFx0XFx1MDAzYy0tIHN5c2NhbGwgd2l0aCA0IHBhcmFtZXRlcnNcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0zNS0gKlxcdGNhbGxxXFx0XFx1MDAzY19fZmVudHJ5X19cXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaC0yNTktICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYwOmxvbmcgX194NjRfc3lzX2dldGNwdShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYxOmxvbmcgX194NjRfc3lzX2dldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmg6MjYyOmxvbmcgX194NjRfc3lzX3RpbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oLTI2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTAuMjEzNjY1MDEyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5OTQ4Njg1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gU3lzdGVtIENhbGwgV3JhcHBlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIHg4NiBzeXN0ZW0gY2FsbHMgYXJlIGhhbmRsZWQuIExldCdzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGluY2x1ZGU6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgcm91Z2hseSBiZXR3ZWVuIDI1IGFuZCA1MC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0eXBpY2FsIGVudHJ5IHBvaW50IGRlZmluaXRpb25zIG9yIHNvbWUgY3J1Y2lhbCBtYWNybyBleHBhbnNpb25zIHJlbGF0ZWQgdG8gdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBpbiB0aGF0IHJlZ2lvbi4gUHJvYmFibHkgc29tZSBrZXkgaW5saW5lIGFzc2VtYmx5LCBwZXJoYXBzIHNvbWUgbG9naWMgZm9yIGFyZ3VtZW50IHBhc3NpbmcsIG9yIG1heWJlIGV2ZW4gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbSBob3BpbmcgdG8gZ2V0IGEgcXVpY2sgdmlzdWFsIG9uIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGJyaWRnZXMgdGhlIGdhcCB0byB0aGUga2VybmVsIGVudHJ5IHBvaW50cy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MjUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToxMi4yMDg1MzU5MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHQgKlxcbiAgMjY6XFx0ICogVGhlIHN0dWIgdGhlbiBwYXNzZXMgdGhlIGRlY29kZWQgYXJndW1lbnRzIHRvIHRoZSBfX3NlX3N5c18qKCkgd3JhcHBlciB0b1xcbiAgMjc6XFx0ICogcGVyZm9ybSBzaWduLWV4dGVuc2lvbiAob21pdHRlZCBmb3IgemVyby1hcmd1bWVudCBzeXNjYWxscykuICBGaW5hbGx5IHRoZVxcbiAgMjg6XFx0ICogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIF9fZG9fc3lzXyooKSBmdW5jdGlvbiB3aGljaCBpcyB0aGUgYWN0dWFsXFxuICAyOTpcXHQgKiBzeXNjYWxsLiAgVGhlc2Ugd3JhcHBlcnMgYXJlIG1hcmtlZCBhcyBpbmxpbmUgc28gdGhlIGNvbXBpbGVyIGNhbiBvcHRpbWl6ZVxcbiAgMzA6XFx0ICogdGhlIGZ1bmN0aW9ucyB3aGVyZSBhcHByb3ByaWF0ZS5cXG4gIDMxOlxcdCAqXFxuICAzMjpcXHQgKiBFeGFtcGxlIGFzc2VtYmx5IChzbGlnaHRseSByZS1vcmRlcmVkIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkpOlxcbiAgMzM6XFx0ICpcXG4gIDM0OlxcdCAqIFxcdTAwM2NfX3g2NF9zeXNfcmVjdlxcdTAwM2U6XFx0XFx0XFx1MDAzYy0tIHN5c2NhbGwgd2l0aCA0IHBhcmFtZXRlcnNcXG4gIDM1OlxcdCAqXFx0Y2FsbHFcXHRcXHUwMDNjX19mZW50cnlfX1xcdTAwM2VcXG4gIDM2OlxcdCAqXFxuICAzNzpcXHQgKlxcdG1vdlxcdDB4NzAoJXJkaSksJXJkaVxcdFxcdTAwM2MtLSBkZWNvZGUgcmVncy1cXHUwMDNlZGlcXG4gIDM4OlxcdCAqXFx0bW92XFx0MHg2OCglcmRpKSwlcnNpXFx0XFx1MDAzYy0tIGRlY29kZSByZWdzLVxcdTAwM2VzaVxcbiAgMzk6XFx0ICpcXHRtb3ZcXHQweDYwKCVyZGkpLCVyZHhcXHRcXHUwMDNjLS0gZGVjb2RlIHJlZ3MtXFx1MDAzZWR4XFxuICA0MDpcXHQgKlxcdG1vdlxcdDB4MzgoJXJkaSksJXJjeFxcdFxcdTAwM2MtLSBkZWNvZGUgcmVncy1cXHUwMDNlcjEwXFxuICA0MTpcXHQgKlxcbiAgNDI6XFx0ICpcXHR4b3JcXHQlcjlkLCVyOWRcXHRcXHUwMDNjLS0gY2xlYXIgJXI5XFxuICA0MzpcXHQgKlxcdHhvclxcdCVyOGQsJXI4ZFxcdFxcdTAwM2MtLSBjbGVhciAlcjhcXG4gIDQ0OlxcdCAqXFxuICA0NTpcXHQgKlxcdGNhbGxxXFx0X19zeXNfcmVjdmZyb21cXHRcXHUwMDNjLS0gZG8gdGhlIGFjdHVhbCB3b3JrIGluIF9fc3lzX3JlY3Zmcm9tKClcXG4gIDQ2OlxcdCAqXFx0XFx0XFx0XFx0ICAgIHdoaWNoIHRha2VzIDYgYXJndW1lbnRzXFxuICA0NzpcXHQgKlxcbiAgNDg6XFx0ICpcXHRjbHRxXFx0XFx0XFx0XFx1MDAzYy0tIGV4dGVuZCByZXR1cm4gdmFsdWUgdG8gNjQtYml0XFxuICA0OTpcXHQgKlxcdHJldHFcXHRcXHRcXHRcXHUwMDNjLS0gcmV0dXJuXFxuICA1MDpcXHQgKlxcbiAgNTE6XFx0ICogVGhpcyBhcHByb2FjaCBhdm9pZHMgbGVha2luZyByYW5kb20gdXNlci1wcm92aWRlZCByZWdpc3RlciBjb250ZW50IGRvd25cXG4gIDUyOlxcdCAqIHRoZSBjYWxsIGNoYWluLlxcbiAgNTM6XFx0ICovXFxuICA1NDpcXHRcXG4gIDU1OlxcdC8qIE1hcHBpbmcgb2YgcmVnaXN0ZXJzIHRvIHBhcmFtZXRlcnMgZm9yIHN5c2NhbGxzIG9uIHg4Ni02NCBhbmQgeDMyICovXFxuICA1NjpcXHQjZGVmaW5lIFNDX1g4Nl82NF9SRUdTX1RPX0FSR1MoeCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDU3OlxcdFxcdF9fTUFQKHgsX19TQ19BUkdTXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNTg6XFx0XFx0XFx0LCxyZWdzLVxcdTAwM2VkaSwscmVncy1cXHUwMDNlc2ksLHJlZ3MtXFx1MDAzZWR4XFx0XFx0XFx0XFx0XFxcXFxcbiAgNTk6XFx0XFx0XFx0LCxyZWdzLVxcdTAwM2VyMTAsLHJlZ3MtXFx1MDAzZXI4LCxyZWdzLVxcdTAwM2VyOSlcXHRcXHRcXHRcXFxcXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcbiAgNjI6XFx0LyogU1lTQ0FMTF9QVF9BUkdTIGlzIEFkYXB0ZWQgZnJvbSBzMzkweCAqL1xcbiAgNjM6XFx0I2RlZmluZSBTWVNDQUxMX1BUX0FSRzYobSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NilcXHRcXHRcXHRcXFxcXFxuICA2NDpcXHRcXHRTWVNDQUxMX1BUX0FSRzUobSwgdDEsIHQyLCB0MywgdDQsIHQ1KSwgbSh0NiwgKHJlZ3MtXFx1MDAzZWJwKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTIuMjA4NjA2OTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAxMjg2NTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIGZvciBDbG9zaW5nIEZpbGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBfX3g2NF9zeXNfY2xvc2VgIHN5c3RlbSBjYWxsLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBkb2VzIGl0IGRlbGVnYXRlIHRoZSB3b3JrIGRpcmVjdGx5IHRvIGBfX2RvX3N5c19jbG9zZWAsIG9yIGlzIHRoZSBmdW5jdGlvbmFsaXR5IGlubGluZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIGFzIHRoYXQgaW1wYWN0cyB0aGluZ3MgZG93biB0aGUgbGluZS4gVG8gZ2V0IHRoZSBhbnN3ZXIsIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaXMgaW1wbGVtZW50ZWQuXG5cbkknbSBwcmV0dHkgc3VyZSB0aGUgYW5zd2VyIGlzIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsX3dyYXBwZXIuaGAsIGJ1dCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGxvY2F0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgbmVhciB0aGUgZGVmaW5pdGlvbiwgc28gSSdsbCBjaGVjayBsaW5lcyA4MCB0aHJvdWdoIDEyMCBvZiB0aGF0IGZpbGUgdG8gYmUgc3VyZS4gVGhhdCByYW5nZSBzaG91bGQgY292ZXIgdGhlIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIGNsb3NlIHN5c2NhbGwgd3JhcHBlci4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZCBhbmQgd2hldGhlciB0aGVyZSBpcyBhbnkgaW5saW5pbmcgb2YgdGhlIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToxNC4yMjE0NzU0OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0LyogTWFwcGluZyBvZiByZWdpc3RlcnMgdG8gcGFyYW1ldGVycyBmb3Igc3lzY2FsbHMgb24gaTM4NiAqL1xcbiAgODE6XFx0I2RlZmluZSBTQ19JQTMyX1JFR1NfVE9fQVJHUyh4LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODI6XFx0XFx0U1lTQ0FMTF9QVF9BUkdTKHgsIF9fU0NfQ09NUEFUX0NBU1QsXFx0XFx0XFx0XFx0XFxcXFxcbiAgODM6XFx0XFx0XFx0XFx0X19NQVAoeCwgX19TQ19UWVBFLCBfX1ZBX0FSR1NfXykpXFx0XFx0XFxcXFxcbiAgODQ6XFx0XFxuICA4NTpcXHQjZGVmaW5lIF9fU1lTX1NUVUIwKGFiaSwgbmFtZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA4NjpcXHRcXHRsb25nIF9fIyNhYmkjI18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcdFxcdFxcXFxcXG4gIDg3OlxcdFxcdEFMTE9XX0VSUk9SX0lOSkVDVElPTihfXyMjYWJpIyNfIyNuYW1lLCBFUlJOTyk7XFx0XFx0XFx0XFxcXFxcbiAgODg6XFx0XFx0bG9uZyBfXyMjYWJpIyNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcdFxcdFxcXFxcXG4gIDg5OlxcdFxcdFxcdF9fYWxpYXMoX19kb18jI25hbWUpO1xcbiAgOTA6XFx0XFxuICA5MTpcXHQjZGVmaW5lIF9fU1lTX1NUVUJ4KGFiaSwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDkyOlxcdFxcdGxvbmcgX18jI2FiaSMjXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFx0XFx0XFxcXFxcbiAgOTM6XFx0XFx0QUxMT1dfRVJST1JfSU5KRUNUSU9OKF9fIyNhYmkjI18jI25hbWUsIEVSUk5PKTtcXHRcXHRcXHRcXFxcXFxuICA5NDpcXHRcXHRsb25nIF9fIyNhYmkjI18jI25hbWUoY29uc3Qgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFx0XFx0XFxcXFxcbiAgOTU6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDk2OlxcdFxcdFxcdHJldHVybiBfX3NlXyMjbmFtZShfX1ZBX0FSR1NfXyk7XFx0XFx0XFx0XFxcXFxcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0XFxuICA5OTpcXHQjZGVmaW5lIF9fQ09ORF9TWVNDQUxMKGFiaSwgbmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEwMDpcXHRcXHRfX3dlYWsgbG9uZyBfXyMjYWJpIyNfIyNuYW1lKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpfX3VudXNlZCk7XFx0XFxcXFxcbiAxMDE6XFx0XFx0X193ZWFrIGxvbmcgX18jI2FiaSMjXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpXFx0XFxcXFxcbiAxMDI6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTAzOlxcdFxcdFxcdHJldHVybiBzeXNfbmlfc3lzY2FsbCgpO1xcdFxcdFxcdFxcdFxcXFxcXG4gMTA0OlxcdFxcdH1cXG4gMTA1OlxcdFxcbiAxMDY6XFx0I2lmZGVmIENPTkZJR19YODZfNjRcXG4gMTA3OlxcdCNkZWZpbmUgX19YNjRfU1lTX1NUVUIwKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMDg6XFx0XFx0X19TWVNfU1RVQjAoeDY0LCBzeXNfIyNuYW1lKVxcbiAxMDk6XFx0XFxuIDExMDpcXHQjZGVmaW5lIF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMTE6XFx0XFx0X19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMTI6XFx0XFx0XFx0ICAgIFNDX1g4Nl82NF9SRUdTX1RPX0FSR1MoeCwgX19WQV9BUkdTX18pKVxcbiAxMTM6XFx0XFxuIDExNDpcXHQjZGVmaW5lIF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTE1OlxcdFxcdF9fQ09ORF9TWVNDQUxMKHg2NCwgc3lzXyMjbmFtZSlcXG4gMTE2OlxcdFxcbiAxMTc6XFx0I2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqL1xcbiAxMTg6XFx0I2RlZmluZSBfX1g2NF9TWVNfU1RVQjAobmFtZSlcXG4gMTE5OlxcdCNkZWZpbmUgX19YNjRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTQuMjIxNTQ2MDA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MTIwNTg4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIFN5c3RlbSBDYWxsIFdyYXBwZXIqKlxuXG5Pa2F5LCBzbyBgX19TWVNfU1RVQngoeDY0LCBzeXMjI25hbWUsIC4uLilgIGRlZmluZXMgdGhlIHN5c3RlbSBjYWxsIHN0dWJzLCBsaWtlIGBfX3g2NF9zeXNfY2xvc2VgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBub3cgaXM6IFdoYXQgZnVuY3Rpb24gaXMgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9mIGBfX3NlX3N5c19jbG9zZWA/IFNpbmNlIEknbSB3b3JraW5nIHdpdGggYSBzeXN0ZW0gY2FsbCBvbiB4ODYtNjQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3cmFwcGVyLiBUaW1lIHRvIGp1bXAgaW50byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhgLCBsaW5lcyAxMjAgdGhyb3VnaCAxNzAuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIHdoZW4gYF9fc2Vfc3lzX2Nsb3NlYCBpcyBoaXQuIEkgbmVlZCB0byB1bnJhdmVsIHRoaXMgc3BlY2lmaWMgc3R1YiB0byB1bmRlcnN0YW5kIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk5MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjA6MDk6MTYuNzMzNjA3MjU5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHQjZGVmaW5lIF9fWDY0X0NPTkRfU1lTQ0FMTChuYW1lKVxcbiAxMjE6XFx0I2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi9cXG4gMTIyOlxcdFxcbiAxMjM6XFx0I2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgfHwgZGVmaW5lZChDT05GSUdfSUEzMl9FTVVMQVRJT04pXFxuIDEyNDpcXHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQjAobmFtZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEyNTpcXHRcXHRfX1NZU19TVFVCMChpYTMyLCBzeXNfIyNuYW1lKVxcbiAxMjY6XFx0XFxuIDEyNzpcXHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTI4OlxcdFxcdF9fU1lTX1NUVUJ4KGlhMzIsIHN5cyMjbmFtZSxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEyOTpcXHRcXHRcXHQgICAgU0NfSUEzMl9SRUdTX1RPX0FSR1MoeCwgX19WQV9BUkdTX18pKVxcbiAxMzA6XFx0XFxuIDEzMTpcXHQjZGVmaW5lIF9fSUEzMl9DT05EX1NZU0NBTEwobmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEzMjpcXHRcXHRfX0NPTkRfU1lTQ0FMTChpYTMyLCBzeXNfIyNuYW1lKVxcbiAxMzM6XFx0XFxuIDEzNDpcXHQjZWxzZSAvKiBDT05GSUdfWDg2XzMyIHx8IENPTkZJR19JQTMyX0VNVUxBVElPTiAqL1xcbiAxMzU6XFx0I2RlZmluZSBfX0lBMzJfU1lTX1NUVUIwKG5hbWUpXFxuIDEzNjpcXHQjZGVmaW5lIF9fSUEzMl9TWVNfU1RVQngoeCwgbmFtZSwgLi4uKVxcbiAxMzc6XFx0I2RlZmluZSBfX0lBMzJfQ09ORF9TWVNDQUxMKG5hbWUpXFxuIDEzODpcXHQjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiB8fCBDT05GSUdfSUEzMl9FTVVMQVRJT04gKi9cXG4gMTM5OlxcdFxcbiAxNDA6XFx0I2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTlxcbiAxNDE6XFx0LypcXG4gMTQyOlxcdCAqIEZvciBJQTMyIGVtdWxhdGlvbiwgd2UgbmVlZCB0byBoYW5kbGUgXFxcImNvbXBhdFxcXCIgc3lzY2FsbHMgKmFuZCogY3JlYXRlXFxuIDE0MzpcXHQgKiBhZGRpdGlvbmFsIHdyYXBwZXJzIChhcHRseSBuYW1lZCBfX2lhMzJfc3lzX3h5enp5KSB3aGljaCBkZWNvZGUgdGhlXFxuIDE0NDpcXHQgKiBpYTMyIHJlZ3MgaW4gdGhlIHByb3BlciBvcmRlciBmb3Igc2hhcmVkIG9yIFxcXCJjb21tb25cXFwiIHN5c2NhbGxzLiBBcyBzb21lXFxuIDE0NTpcXHQgKiBzeXNjYWxscyBtYXkgbm90IGJlIGltcGxlbWVudGVkLCB3ZSBuZWVkIHRvIGV4cGFuZCBDT05EX1NZU0NBTEwgaW5cXG4gMTQ2OlxcdCAqIGtlcm5lbC9zeXNfbmkuYyB0byBjb3ZlciB0aGlzIGNhc2UgYXMgd2VsbC5cXG4gMTQ3OlxcdCAqL1xcbiAxNDg6XFx0I2RlZmluZSBfX0lBMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTQ5OlxcdFxcdF9fU1lTX1NUVUIwKGlhMzIsIGNvbXBhdF9zeXNfIyNuYW1lKVxcbiAxNTA6XFx0XFxuIDE1MTpcXHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXFxcXFxuIDE1MjpcXHRcXHRfX1NZU19TVFVCeChpYTMyLCBjb21wYXRfc3lzIyNuYW1lLFxcdFxcdFxcdFxcdFxcXFxcXG4gMTUzOlxcdFxcdFxcdCAgICBTQ19JQTMyX1JFR1NfVE9fQVJHUyh4LCBfX1ZBX0FSR1NfXykpXFxuIDE1NDpcXHRcXG4gMTU1OlxcdCNkZWZpbmUgX19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuIDE1NjpcXHRcXHRfX0NPTkRfU1lTQ0FMTChpYTMyLCBjb21wYXRfc3lzXyMjbmFtZSlcXG4gMTU3OlxcdFxcbiAxNTg6XFx0I2Vsc2UgLyogQ09ORklHX0lBMzJfRU1VTEFUSU9OICovXFxuIDE1OTpcXHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXFxuIDE2MDpcXHQjZGVmaW5lIF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIC4uLilcXG4gMTYxOlxcdCNkZWZpbmUgX19JQTMyX0NPTVBBVF9DT05EX1NZU0NBTEwobmFtZSlcXG4gMTYyOlxcdCNlbmRpZiAvKiBDT05GSUdfSUEzMl9FTVVMQVRJT04gKi9cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFxuIDE2NTpcXHQjaWZkZWYgQ09ORklHX1g4Nl9YMzJfQUJJXFxuIDE2NjpcXHQvKlxcbiAxNjc6XFx0ICogRm9yIHRoZSB4MzIgQUJJLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHN0dWIgZm9yIGNvbXBhdF9zeXNfKigpIHdoaWNoIGlzIGF3YXJlXFxuIDE2ODpcXHQgKiBvZiB0aGUgeDg2LTY0LXN0eWxlIHBhcmFtZXRlciBvcmRlcmluZyBvZiB4MzIgc3lzY2FsbHMuIFRoZSBzeXNjYWxscyBjb21tb25cXG4gMTY5OlxcdCAqIHdpdGggeDg2XzY0IG9idmlvdXNseSBkbyBub3QgbmVlZCBzdWNoIGNhcmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjE2LjczMzY3ODk2OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDM4NDUxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGVjb2RpbmcgVGhpcyBTeXN0ZW0gQ2FsbCBTdHViKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fU1lTX1NUVUJ4KHg2NCwgc3lzIyNuYW1lLCAuLi4pYCBtYWNyby4gSXQncyBjbGVhcmx5IGEgc3lzdGVtIGNhbGwgc3R1YiBnZW5lcmF0b3IgZm9yIHg2NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgYHN5cyMjbmFtZWAgcGFydCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGRlZmluaW5nIHRoZSBlbnRyeSBwb2ludCBmb3IgYSBzcGVjaWZpYyBzeXN0ZW0gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgd29ya3MgaW50ZXJuYWxseSwgYW5kIGZyb20gdGhlIHN0dWIsIGl0IGFwcGVhcnMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgc3R1YiBjYWxscyBgX19zZV9zeXNfY2xvc2UoLi4uKWAuIE5vdyB0aGF0IEkga25vdyB3aGVyZSBpdCBjYWxscyB0bywgSSBuZWVkIHRvIGtub3cgd2hhdCBpdCBkb2VzLiBTbywgd2hlcmUgaXMgYF9fc2Vfc3lzX2Nsb3NlYCBkZWZpbmVkPyBJdCBzaG91bGQgYmUgaW4gdGhlIGhlYWRlcnMsIEknbSBndWVzc2luZy4gTGV0IG1lIGNoZWNrIGxpbmVzIDE5MCB0byAyNTAgb2YgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxfd3JhcHBlci5oYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9yIGRlZmluaXRpb24gb2YgaG93IHRoaXMgc2VjdXJlIHN5c3RlbSBjYWxsIGNsb3NlIGlzIGhhbmRsZWQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzE4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToxOC43NzIxMzMyMjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbF93cmFwcGVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdCAqIENvbXBhdCBtZWFucyBJQTMyX0VNVUxBVElPTiBhbmQvb3IgWDg2X1gzMi4gQXMgdGhleSB1c2UgYSBkaWZmZXJlbnRcXG4gMTkxOlxcdCAqIG1hcHBpbmcgb2YgcmVnaXN0ZXJzIHRvIHBhcmFtZXRlcnMsIHdlIG5lZWQgdG8gZ2VuZXJhdGUgc3R1YnMgZm9yIGVhY2hcXG4gMTkyOlxcdCAqIG9mIHRoZW0uXFxuIDE5MzpcXHQgKi9cXG4gMTk0OlxcdCNkZWZpbmUgQ09NUEFUX1NZU0NBTExfREVGSU5FMChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTk1OlxcdFxcdHN0YXRpYyBsb25nXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTY6XFx0XFx0X19kb19jb21wYXRfc3lzXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpO1xcdFxcdFxcXFxcXG4gMTk3OlxcdFxcdF9fSUEzMl9DT01QQVRfU1lTX1NUVUIwKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTg6XFx0XFx0X19YMzJfQ09NUEFUX1NZU19TVFVCMChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTk5OlxcdFxcdHN0YXRpYyBsb25nXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMDA6XFx0XFx0X19kb19jb21wYXRfc3lzXyMjbmFtZShjb25zdCBzdHJ1Y3QgcHRfcmVncyAqX191bnVzZWQpXFxuIDIwMTpcXHRcXG4gMjAyOlxcdCNkZWZpbmUgQ09NUEFUX1NZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMDM6XFx0XFx0c3RhdGljIGxvbmcgX19zZV9jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSk7XFx0XFxcXFxcbiAyMDQ6XFx0XFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjA1OlxcdFxcdF9fSUEzMl9DT01QQVRfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVxcdFxcdFxcdFxcdFxcXFxcXG4gMjA2OlxcdFxcdF9fWDMyX0NPTVBBVF9TWVNfU1RVQngoeCwgbmFtZSwgX19WQV9BUkdTX18pXFx0XFx0XFx0XFx0XFxcXFxcbiAyMDc6XFx0XFx0c3RhdGljIGxvbmcgX19zZV9jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcXHRcXFxcXFxuIDIwODpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMDk6XFx0XFx0XFx0cmV0dXJuIF9fZG9fY29tcGF0X3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVMT1VTRSxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjEwOlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMTpcXHRcXHRzdGF0aWMgaW5saW5lIGxvbmcgX19kb19jb21wYXRfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcXG4gMjEyOlxcdFxcbiAyMTM6XFx0LypcXG4gMjE0OlxcdCAqIEFzIHNvbWUgY29tcGF0IHN5c2NhbGxzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQsIHdlIG5lZWQgdG8gZXhwYW5kXFxuIDIxNTpcXHQgKiBDT05EX1NZU0NBTExfQ09NUEFUIGluIGtlcm5lbC9zeXNfbmkuYyB0byBjb3ZlciB0aGlzIGNhc2UgYXMgd2VsbC5cXG4gMjE2OlxcdCAqL1xcbiAyMTc6XFx0I2RlZmluZSBDT05EX1NZU0NBTExfQ09NUEFUKG5hbWUpIFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjE4OlxcdFxcdF9fSUEzMl9DT01QQVRfQ09ORF9TWVNDQUxMKG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbiAyMTk6XFx0XFx0X19YMzJfQ09NUEFUX0NPTkRfU1lTQ0FMTChuYW1lKVxcbiAyMjA6XFx0XFxuIDIyMTpcXHQjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqL1xcbiAyMjI6XFx0XFxuIDIyMzpcXHQjZGVmaW5lIF9fU1lTQ0FMTF9ERUZJTkV4KHgsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIyNDpcXHRcXHRzdGF0aWMgbG9uZyBfX3NlX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfTE9ORyxfX1ZBX0FSR1NfXykpO1xcdFxcXFxcXG4gMjI1OlxcdFxcdHN0YXRpYyBpbmxpbmUgbG9uZyBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfREVDTCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjI2OlxcdFxcdF9fWDY0X1NZU19TVFVCeCh4LCBuYW1lLCBfX1ZBX0FSR1NfXylcXHRcXHRcXHRcXHRcXFxcXFxuIDIyNzpcXHRcXHRfX0lBMzJfU1lTX1NUVUJ4KHgsIG5hbWUsIF9fVkFfQVJHU19fKVxcdFxcdFxcdFxcdFxcXFxcXG4gMjI4OlxcdFxcdHN0YXRpYyBsb25nIF9fc2Vfc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19MT05HLF9fVkFfQVJHU19fKSlcXHRcXFxcXFxuIDIyOTpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMzA6XFx0XFx0XFx0bG9uZyByZXQgPSBfX2RvX3N5cyMjbmFtZShfX01BUCh4LF9fU0NfQ0FTVCxfX1ZBX0FSR1NfXykpO1xcXFxcXG4gMjMxOlxcdFxcdFxcdF9fTUFQKHgsX19TQ19URVNULF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuIDIzMjpcXHRcXHRcXHRfX1BST1RFQ1QoeCwgcmV0LF9fTUFQKHgsX19TQ19BUkdTLF9fVkFfQVJHU19fKSk7XFx0XFxcXFxcbiAyMzM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIzNDpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMzU6XFx0XFx0c3RhdGljIGlubGluZSBsb25nIF9fZG9fc3lzIyNuYW1lKF9fTUFQKHgsX19TQ19ERUNMLF9fVkFfQVJHU19fKSlcXG4gMjM2OlxcdFxcbiAyMzc6XFx0LypcXG4gMjM4OlxcdCAqIEFzIHRoZSBnZW5lcmljIFNZU0NBTExfREVGSU5FMCgpIG1hY3JvIGRvZXMgbm90IGRlY29kZSBhbnkgcGFyYW1ldGVycyBmb3JcXG4gMjM5OlxcdCAqIG9idmlvdXMgcmVhc29ucywgYW5kIHBhc3Npbmcgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgdG8gaXQgaW4gJXJkaSBkb2VzIG5vdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToxOC43NzIyMDgxNTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTkyNjQ3MzExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGNsb3NlYCBTeXNjYWxsIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgYGNsb3NlYCBzeXNjYWxsLiBUaGUgY29kZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB3ZSdyZSBkZWFsaW5nIHdpdGggYF9fZG9fc3lzX2Nsb3NlYCwgYF9fc2Vfc3lzX2Nsb3NlYCwgYW5kIHVsdGltYXRlbHksIGBfX3g2NF9zeXNfY2xvc2VgLCB3aGljaCBpcyB0aGUgdmlzaWJsZSBzeW1ib2wgaW4gYHZtbGludXhgIGZvciBhbWQ2NCAoYW5kIGBfX2lhMzJfc3lzX2Nsb3NlYCBpZiBpYTMyIGlzIGVuYWJsZWQpLiBgX19kb19zeXNfY2xvc2VgIGlzIGBzdGF0aWMgaW5saW5lYCBzbyBpdCBtaWdodCBiZSBpbmxpbmVkLiBUaGUgcGF0Y2ggaXRzZWxmIGp1c3QgdG91Y2hlcyB0aGUgYGNsb3NlYCBzeXNjYWxsIGluIGBmcy9vcGVuLmNgLiBJJ3ZlIGNoZWNrZWQgdGhlIGNvZGUsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIgZnVuY3Rpb25zIGFmZmVjdGVkLlxuXG5NeSBtYWluIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgYF9feDY0X3N5c19jbG9zZWAgaXMgY29uc2lkZXJlZCBhIFwidWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGguXCIgVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBzYXlzIHRvICphdm9pZCogbGlzdGluZyB0aGVzZSwgYXMgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQgYnkgdGFyZ2V0aW5nIHRvbyBtYW55IHVucmVsYXRlZCB0ZXN0cy4gQnV0ICpldmVyeSogcHJvZ3JhbSBpbiB0aGUgc3l6a2FsbGVyIGNvcnB1cyBhbG1vc3QgY2VydGFpbmx5IGhhcyBhIGNhbGwgdG8gYGNsb3NlYC4gT3IgZG9lcyBpdD8gT2theSwgbWF5YmUgbm90ICpldmVyeSogcHJvZ3JhbSwgYnV0IGBjbG9zZWAgaXMgZGVmaW5pdGVseSBvbmUgb2YgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIHN5c2NhbGxzLiBCdXQgaXQncyBub3QgYSBnZW5lcmljIG1lbW9yeSBhbGxvY2F0b3IsIHBhZ2UgZmF1bHQgaGFuZGxlciwgb3IgY29yZSBzeW5jIHByaW1pdGl2ZSwgYW5kIHRoZSBwYXRjaCBJUyBpbiBgX194NjRfc3lzX2Nsb3NlYC4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsb2dpYyBpbnNpZGUgb2YgdGhlIGNsb3NlIHN5c2NhbGwuXG5cbklmIEkgZG9uJ3QgbGlzdCBgX194NjRfc3lzX2Nsb3NlYCwgd2hhdCBlbHNlIGlzIHRoZXJlIHRvIGZvY3VzIG9uPyBOb3RoaW5nIGVsc2Ugd2FzIG1vZGlmaWVkISBUaGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhlIGBjbG9zZWAgc3lzY2FsbCwgc28gaXRzIGVudHJ5cG9pbnQgaXMgYF9feDY0X3N5c19jbG9zZWAuIElmIEkgb21pdCBpdCwgRm9jdXNTeW1ib2xzIHdvdWxkIGJlIGVtcHR5LCB3aGljaCBpcyBub3QgcGVybWl0dGVkIHdoZW4gV29ydGhGdXp6aW5nIGlzIHRydWUuIEl0J3MgdGhlICpzcGVjaWZpYyogZW50cnkgcG9pbnQgZm9yIHRoZSBmZWF0dXJlLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBpczogaXMgYF9feDY0X3N5c19jbG9zZWAgXCJ1YmlxdWl0b3VzXCIgaW4gdGhlICpyZWxldmFudCogc2Vuc2UgZm9yIHN5emthbGxlcidzIGZvY3VzIHN5bWJvbCBsb2dpYz8gSXQncyBjb21tb24sIHllcywgYnV0IGl0J3Mgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIHV0aWxpdHkuIEl0J3MgdGhlIGRpcmVjdCBlbnRyeSBwb2ludCBvZiBhIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG5JcyBpdCBwb3NzaWJsZSB0aGF0IGBfX2RvX3N5c19jbG9zZWAgaXMgdGhlIGVudHJ5cG9pbnQ/IE5vLCBiZWNhdXNlIGl0IGlzIGBzdGF0aWMgaW5saW5lYCFcblxuSWYgSSAqZG9uJ3QqIGZvY3VzIG9uIGBfX3g2NF9zeXNfY2xvc2VgLCB3aGF0IGlzIHRoZXJlIHRvIGZvY3VzIG9uPyBBYnNvbHV0ZWx5IG5vdGhpbmchXG5cblRoZXJlZm9yZSwgdGhlIG9idmlvdXMgY2hvaWNlIGlzIHRvIGxpc3QgYF9feDY0X3N5c19jbG9zZWAgaW4gYEZvY3VzU3ltYm9sc2AuIEl0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCB0YXJnZXQgZm9yIGRpcmVjdGluZyB0aGUgZnV6emVyIHRvIHRoZSByZWxldmFudCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTczNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOToyOC42OTg2ODQwOTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzgxNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9wZW5cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlLTktXFxuZnMvTWFrZWZpbGU6MTA6b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xMS1cXHRcXHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxcXFxuLS1cXG5mcy9NYWtlZmlsZS0xNi1cXHRcXHRzdGFjay5vIGZzX3N0cnVjdC5vIHN0YXRmcy5vIGZzX3Bpbi5vIG5zZnMubyBcXFxcXFxuZnMvTWFrZWZpbGU6MTc6XFx0XFx0ZnNfZGlyZW50Lm8gZnNfY29udGV4dC5vIGZzX3BhcnNlci5vIGZzb3Blbi5vIGluaXQubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTgtXFx0XFx0a2VybmVsX3JlYWRfZmlsZS5vIG1udF9pZG1hcHBpbmcubyByZW1hcF9yYW5nZS5vIHBpZGZzLm8gXFxcXFxcbi0tXFxuZnMvbmZzZC9uZnM0c3RhdGUuYz05MzE2PW5mc2Q0X3NldF9vcGVuc3RhdGVpZChzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSxcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmMtOTMxOC17XFxuZnMvbmZzZC9uZnM0c3RhdGUuYzo5MzE5OlxcdHB1dF9zdGF0ZWlkKGNzdGF0ZSwgXFx1MDAyNnUtXFx1MDAzZW9wZW4ub3Bfc3RhdGVpZCk7XFxuZnMvbmZzZC9uZnM0c3RhdGUuYy05MzIwLX1cXG4tLVxcbmZzL3Zlcml0eS9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19GU19WRVJJVFkpICs9IGVuYWJsZS5vIFxcXFxcXG4tLVxcbmZzL3Zlcml0eS9NYWtlZmlsZS02LVxcdFxcdFxcdCAgIG1lYXN1cmUubyBcXFxcXFxuZnMvdmVyaXR5L01ha2VmaWxlOjc6XFx0XFx0XFx0ICAgb3Blbi5vIFxcXFxcXG5mcy92ZXJpdHkvTWFrZWZpbGUtOC1cXHRcXHRcXHQgICBwYWdlY2FjaGUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjI4Ljc2OTQ3MzUxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTA1ODI4MDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgc3RyYWlnaHRmb3J3YXJkOiBgb3Blbi5vYCBpcyBhbHdheXMgYnVpbHQsIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgaGVuY2UgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBgW11gLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGBXb3J0aEZ1enppbmdgPyBMZXQncyBkaXZlIGRlZXAuXG5cbkkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgYXBwbHkgdGhlIGNyaXRlcmlhLiAgVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGFyZSBjbGVhcjogZG9lcyB0aGUgbW9kaWZpZWQgY29kZSBmYWxsICpzdHJpY3RseSogaW50byBhbnkgb2YgdGhlIGV4Y2x1c2lvbiBjYXRlZ29yaWVzPyBOby4gVGhpcyBwYXRjaCBpbiBgZnMvb3Blbi5jYCBkaXJlY3RseSBhbHRlcnMga2VybmVsIEMgY29kZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIHRoZSBoYW5kbGluZyBvZiB0aGUgYGNsb3NlKClgIHN5c3RlbSBjYWxsJ3MgcmV0dXJuIHZhbHVlIHdoZW4gaW50ZXJydXB0ZWQuIEl0J3MgYSBjbGVhciBtb2RpZmljYXRpb24gdG8gZXhlY3V0YWJsZSBjb2RlIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIHRoZSBjb3JlIFZGUyBzdWJzeXN0ZW0uIFRoZXJlZm9yZSwgbmVnYXRpdmUgY3JpdGVyaWEgYXJlIG5vdCBtZXQuXG5cbk5vdywgY2hlY2tpbmcgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgXCJDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIC4uLiBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXCIgIEl0IGlzIGEgZGlyZWN0IGFsdGVyYXRpb24gb2Ygc3lzY2FsbCBoYW5kbGluZy4gSXQgYWZmZWN0cyBzeXN0ZW0gY2FsbCByZXR1cm4gdmFsdWVzLiBUaHVzLCBiYXNlZCBvbiB0aGlzIHBvc2l0aXZlIGNyaXRlcmlvbiwgIGBXb3J0aEZ1enppbmdgICptdXN0KiBiZSBgdHJ1ZWAuXG5cbk5leHQsIHRoZSBjcnVjaWFsIHN0ZXA6IGRlZmluaW5nIGBGb2N1c1N5bWJvbHNgLiAgQXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMuIGBfX3g2NF9zeXNfY2xvc2VgIGlzIE5PVCBhIFwiZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9yXCIsIFwicGFnZSBmYXVsdCBoYW5kbGVyXCIsIG9yIFwiY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLlwiIGBfX3g2NF9zeXNfY2xvc2VgICppcyogdGhlIGV4cGxpY2l0IGVudHJ5IHBvaW50IGZvciB0aGUgYGNsb3NlKClgIHN5c3RlbSBjYWxsIG9uIHg4Nl82NCwgd2hpY2ggaXMgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoaXMgcGF0Y2ggbW9kaWZpZXMuXG5cbkxldCdzIGNhcmVmdWxseSBjb25zaWRlciB3aGV0aGVyIGl0IGlzIHViaXF1aXRvdXMuIFN5emthbGxlcidzIHB1cnBvc2UgaXMgdG8gZmluZCBidWdzIGFuZCBlcnJvcnMgaW4gYW55IGNhbGwuIFNob3VsZCB3ZSBpbmNsdWRlIGBfX3g2NF9zeXNfY2xvc2VgPyBTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4YWN0IGJlaGF2aW9yIG9mIGBjbG9zZWAsIHRoZSBhbnN3ZXIgaXMgeWVzLiBTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4YWN0IGJlaGF2aW9yIG9mIGBjbG9zZWAsIHdlIG11c3QgaW5jbHVkZSBpdC4gYGNsb3NlYCBpcyBub3QgY2FsbGVkIGV2ZXJ5d2hlcmUuIFN5emthbGxlciBtdXN0IGZvY3VzIG9uIGBfX3g2NF9zeXNfY2xvc2VgIGJlY2F1c2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBjbG9zZWAuIFdlIG11c3QgaW5jbHVkZSBpdC5cblxuU2hvdWxkIHdlIGFsc28gaW5jbHVkZSBgX19kb19zeXNfY2xvc2VgPyAgVGhhdCBkZXBlbmRzIG9uIHdoYXQgc3ltYm9scyB0aGUgY29tcGlsZXIgYWN0dWFsbHkgZW1pdHMuIE9uIHg4Nl82NCwgYF9feDY0X3N5c19jbG9zZWAgKmlzKiB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCwgYnV0IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gbWlnaHQgYmUgaW4gYF9fZG9fc3lzX2Nsb3NlYC4gU3l6a2FsbGVyIHdpbGwgcmVzb2x2ZSB0aGlzLCBzbyBsaXN0aW5nICpib3RoKiBpcyB0aGUgc2FmZXN0IGFwcHJvYWNoOiBgW1wiX194NjRfc3lzX2Nsb3NlXCIsIFwiX19kb19zeXNfY2xvc2VcIl1gLlxuXG5ObyBmdXJ0aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC5cblxuVG8gZW5zdXJlIHNvdW5kbmVzcywgSSBkb3VibGUtY2hlY2sgYFdvcnRoRnV6emluZ2AgYWdhaW46XG5cbjEuICBUaGlzIHBhdGNoICpjaGFuZ2VzKiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYC1FSU5UUmAgdG8gYDBgIGluIGNlcnRhaW4gY2FzZXMuIFRoYXQgY291bGQgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGFsdGVyIGJlaGF2aW9yLlxuMi4gIEl0ICphZGRzKiBgLUVJTlRSYCB0byB0aGUgbGlzdCBvZiB2YWx1ZXMgdG8gYmUgY2hhbmdlZCBmcm9tIHJldHVybi5cbjMuICBUaGlzIGltcGFjdHMgYW55IGZpbGVzeXN0ZW0gb3IgZHJpdmVyIHRoYXQgdXNlcyBgLmZsdXNoYCBjYWxsYmFja3Mgb3IgcmVtb3ZlcyBQT1NJWCBsb2Nrcy5cbjQuICBJdCdzIGluIHRoZSBWRlMvc3lzY2FsbCBwYXRoLlxuXG5UaHVzLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAgaXMgdW5lcXVpdm9jYWxseSBjb3JyZWN0LlxuXG5UaGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYFxuKiAgIGBSZWFzb25pbmdgOiAgVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgc3lzY2FsbCByZXR1cm4gdmFsdWUgaGFuZGxpbmcgaW4gVkZTLCBzcGVjaWZpY2FsbHkgdGhlIHJldHVybiBjb2RlcyBvZiBjbG9zZSwgbWFraW5nIGl0IGxpa2VseSB0byBpbnRyb2R1Y2UgYnVncyBhbmQgcmVncmVzc2lvbnMuIE5lZ2F0aXZlIGNyaXRlcmlhIGFyZSBub3QgbWV0LlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiX194NjRfc3lzX2Nsb3NlXCIsIFwiX19kb19zeXNfY2xvc2VcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gXG5cbkkgYW0gbm93IGNvbmZpZGVudCBhbmQgcmVhZHkgdG8gc3VibWl0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg5MiwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjQzLjgyNzc1NjMwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX194NjRfc3lzX2Nsb3NlXCIsXG4gICAgXCJfX2RvX3N5c19jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX194NjRfc3lzX2Nsb3NlXCIsXG4gICAgXCJfX2RvX3N5c19jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbG9zZSBzeXNjYWxsIGhhbmRsaW5nIGluIGZzL29wZW4uYyB0byByZXR1cm4gMCBpbnN0ZWFkIG9mIC1FSU5UUiB3aGVuIGZpbHBfZmx1c2goKSBpcyBpbnRlcnJ1cHRlZCAocmV0dXJuaW5nIC1FSU5UUiwgLUVSRVNUQVJUU1lTLCBldGMuKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgc3lzY2FsbCBsb2dpYyBpbiB0aGUgY29yZSBWRlMgc3Vic3lzdGVtLCBhbHRlcmluZyByZXR1cm4gdmFsdWUgc2VtYW50aWNzIGFjcm9zcyBpbnRlcnJ1cHRlZCBmaWxlIGNsb3NlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjQzLjgyNzc4MzMxOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NTI2MTczMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDowOTo0My44MjgxNzMwOTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjU1MjIyMzE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgdGhlIHNjYWxhciBpbnRlZ2VyIHJldHVybiBjb2RlIG9mIHRoZSBjbG9zZSgyKSBzeXNjYWxsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgaW50ZXJhY3Qgd2l0aCBhbnkgbWVtb3J5IGJ1ZmZlcnMsIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNTJlNzkyNzc5YTAwYjJjNjBjYTIyNmNhZjJkNjBjNjc0NjFhMWM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMjA6MDg6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcbmluZGV4IDQwODkyNWQ3YmQwYjcuLjgxYTQzYjZjNWI2YjkgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbisrKyBiL2ZzL29wZW4uY1xuQEAgLTE1MTMsMTIgKzE1MTMsMTcgQEAgU1lTQ0FMTF9ERUZJTkUxKGNsb3NlLCB1bnNpZ25lZCBpbnQsIGZkKVxuIFx0aWYgKGxpa2VseShyZXR2YWwgPT0gMCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogY2FuJ3QgcmVzdGFydCBjbG9zZSBzeXNjYWxsIGJlY2F1c2UgZmlsZSB0YWJsZSBlbnRyeSB3YXMgY2xlYXJlZCAqL1xuLVx0aWYgKHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHxcbitcdC8qXG4rXHQgKiBUaGUgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLCBzbyBhbiBpbnRlcnJ1cHRlZFxuK1x0ICogY2xvc2UgY2Fubm90IGJlIHJlc3RhcnRlZCBzYWZlbHkuIERvIG5vdCByZXBvcnQgRUlOVFIgYWZ0ZXIgdGhlXG4rXHQgKiBkZXNjcmlwdG9yIGhhcyBiZWVuIGRldGFjaGVkLlxuK1x0ICovXG4rXHRpZiAocmV0dmFsID09IC1FSU5UUiB8fFxuK1x0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlRTWVMgfHxcbiBcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9JTlRSIHx8XG4gXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVE5PSEFORCB8fFxuIFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLKVxuLVx0XHRyZXR2YWwgPSAtRUlOVFI7XG4rXHRcdHJldHZhbCA9IDA7XG4gXG4gXHRyZXR1cm4gcmV0dmFsO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIwOjA5OjQzLjgyODE3NDE3OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODU0MTk2MjgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBwYXRjaCwgc3BlY2lmaWNhbGx5IGluIGBmcy9vcGVuLmNgLCB3aXRoaW4gdGhlIGBjbG9zZWAgc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24gKGBTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpYCkuIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGJleW9uZCB0aGUgdXN1YWwgS0FTQU4uXG5cbkZpcnN0LCBsZXQncyBkbyBhIHF1aWNrIHJpc2sgYXNzZXNzbWVudC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVmZW5zaXZlIGFuYWx5c2lzIOKAkyBkZWNpZGluZyBvbiB0aGUgcmlnaHQgc2FuaXRpemVyIGZvciBmdXp6aW5nLiBJdCdzIGJlbmlnbiwgZGVmaW5pdGVseSBsb3cgc2V2ZXJpdHkuIE5vIG1hbHdhcmUgZGV2ZWxvcG1lbnQsIG5vIGV4cGxvaXRhdGlvbiwgYWxsIHNhZmUuIFdlJ3JlIGp1c3QgdHJ5aW5nIHRvIGVuaGFuY2Ugb3VyIHRlc3RpbmcgYXBwcm9hY2guIEdvb2QsIHdlIGNhbiBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGFjdHVhbGx5IGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGRpZmYgaW52b2x2ZXMgaGFuZGxpbmcgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIGBjbG9zZWAgc3lzdGVtIGNhbGwuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgY2hhbmdpbmcgaG93IGBFSU5UUmAgKGludGVycnVwdGVkIHN5c3RlbSBjYWxsKSBpcyBoYW5kbGVkIGFmdGVyIHRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuIFByZXZpb3VzbHksIGl0IGFwcGVhcnMgdGhlIHBhdGNoIHdvdWxkIGF0dGVtcHQgdG8gcmVzdGFydCBgY2xvc2VgIGV2ZW4gYWZ0ZXIgdGhlIGZpbGUgdGFibGUgZW50cnkgd2FzIGNsZWFyZWQsIHdoaWNoIGlzIG5vdCBzYWZlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhpcyBiZWhhdmlvci4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgZmlsZSB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBzb21lIGNvbnRleHQgYXJvdW5kIGxpbmUgMTUxMy5cblxuTm93IEkgbmVlZCB0byBkZWNpZGUgaWYgS01TQU4gaXMgbmVjZXNzYXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gSXMgdGhpcyBhIHNpbXBsZSBjaGFuZ2Ugb2YgZXJyb3IgcmVwb3J0aW5nIGxvZ2ljLCBvciBkb2VzIGl0IHRvdWNoIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgcmVsYXRlZCB0byBmaWxlIGRlc2NyaXB0b3IgbWFuYWdlbWVudCBpbiBhIHdheSB0aGF0IEtNU0FOIHdvdWxkIGJlIHZhbHVhYmxlPyBJJ2xsIGRpZyBkZWVwZXIgaW50byBgZnMvb3Blbi5jYCB0byBmaWd1cmUgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDoxMDowMi4zNzAxMzk0NDVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb3Blbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0OTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0OTU6XFx0ICovXFxuMTQ5NjpcXHRTWVNDQUxMX0RFRklORTEoY2xvc2UsIHVuc2lnbmVkIGludCwgZmQpXFxuMTQ5NzpcXHR7XFxuMTQ5ODpcXHRcXHRpbnQgcmV0dmFsO1xcbjE0OTk6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuMTUwMDpcXHRcXG4xNTAxOlxcdFxcdGZpbGUgPSBmaWxlX2Nsb3NlX2ZkKGZkKTtcXG4xNTAyOlxcdFxcdGlmICghZmlsZSlcXG4xNTAzOlxcdFxcdFxcdHJldHVybiAtRUJBREY7XFxuMTUwNDpcXHRcXG4xNTA1OlxcdFxcdHJldHZhbCA9IGZpbHBfZmx1c2goZmlsZSwgY3VycmVudC1cXHUwMDNlZmlsZXMpO1xcbjE1MDY6XFx0XFxuMTUwNzpcXHRcXHQvKlxcbjE1MDg6XFx0XFx0ICogV2UncmUgcmV0dXJuaW5nIHRvIHVzZXIgc3BhY2UuIERvbid0IGJvdGhlclxcbjE1MDk6XFx0XFx0ICogd2l0aCBhbnkgZGVsYXllZCBmcHV0KCkgY2FzZXMuXFxuMTUxMDpcXHRcXHQgKi9cXG4xNTExOlxcdFxcdGZwdXRfY2xvc2Vfc3luYyhmaWxlKTtcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0aWYgKGxpa2VseShyZXR2YWwgPT0gMCkpXFxuMTUxNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNTE1OlxcdFxcbjE1MTY6XFx0XFx0LypcXG4xNTE3OlxcdFxcdCAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQsIHNvIGFuIGludGVycnVwdGVkXFxuMTUxODpcXHRcXHQgKiBjbG9zZSBjYW5ub3QgYmUgcmVzdGFydGVkIHNhZmVseS4gRG8gbm90IHJlcG9ydCBFSU5UUiBhZnRlciB0aGVcXG4xNTE5OlxcdFxcdCAqIGRlc2NyaXB0b3IgaGFzIGJlZW4gZGV0YWNoZWQuXFxuMTUyMDpcXHRcXHQgKi9cXG4xNTIxOlxcdFxcdGlmIChyZXR2YWwgPT0gLUVJTlRSIHx8XFxuMTUyMjpcXHRcXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fFxcbjE1MjM6XFx0XFx0ICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0lOVFIgfHxcXG4xNTI0OlxcdFxcdCAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5EIHx8XFxuMTUyNTpcXHRcXHQgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spXFxuMTUyNjpcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbjE1Mjc6XFx0XFxuMTUyODpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbjE1Mjk6XFx0fVxcbjE1MzA6XFx0XFxuMTUzMTpcXHQvKlxcbjE1MzI6XFx0ICogVGhpcyByb3V0aW5lIHNpbXVsYXRlcyBhIGhhbmd1cCBvbiB0aGUgdHR5LCB0byBhcnJhbmdlIHRoYXQgdXNlcnNcXG4xNTMzOlxcdCAqIGFyZSBnaXZlbiBjbGVhbiB0ZXJtaW5hbHMgYXQgbG9naW4gdGltZS5cXG4xNTM0OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDoxMDowMi4zNzAyMzkyNDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODAxMDEzOTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjbG9zZSgyKWAgU3lzY2FsbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSBgY2xvc2UoMilgIHN5c2NhbGwsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBpbnRlcnJ1cHRpb24gYnkgc2lnbmFscy4gVGhlIGNvcmUgaXNzdWUgaXMgdGhpczogaWYgYGZpbHBfZmx1c2goKWAgcmV0dXJucyBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcgYW4gaW50ZXJydXB0IChsaWtlIGAtRUlOVFJgIG9yIG9uZSBvZiB0aGUgYC1FUkVTVEFSVCpgIHZhcmlhbnRzKSwgdGhlIHByZXZpb3VzIGJlaGF2aW9yIHdhcyB0byByZXR1cm4gYC1FSU5UUmAgdG8gdXNlcnNwYWNlLiBUaGlzIHNlZW1zIHNpbXBsZSBlbm91Z2guXG5cblRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQgZnJvbSB0aGUgY29udGV4dCwgaXMgdGhhdCBhIHJldHVybiBvZiBgLUVJTlRSYCBlbmNvdXJhZ2VzIHRoZSBhcHBsaWNhdGlvbiB0byByZXRyeSB0aGUgYGNsb3NlYCBzeXN0ZW0gY2FsbC4gVGhlIHN0YW5kYXJkIHNheXMgaXQgY2FuLCBidXQgUE9TSVggaXMgYW4gaWRlYWxpemF0aW9uLiBJbiByZWFsaXR5LCBpbiB0aGUgTGludXgga2VybmVsLCB0aGUgZmlsZSBkZXNjcmlwdG9yIGhhcyAqYWxyZWFkeSogYmVlbiBkZXRhY2hlZCBhbmQgY2xvc2VkIGJ5IHRoZSB0aW1lIHdlIHdvdWxkIHJldHVybiB0byB0aGUgc3lzdGVtIGNhbGwuIElmIHRoZSBhcHBsaWNhdGlvbiByZXRyaWVzIGBjbG9zZSgpYCBpbiB0aGlzIHNpdHVhdGlvbiwgaXQgaXMgbGlrZWx5IHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYmVlbiByZS11c2VkIGFuZCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZpbGUgd2lsbCBiZSBjbG9zZWQuIFRoaXMgaXMgYmVjYXVzZSB0aGUga2VybmVsIGhhcyBhbHJlYWR5IGNsb3NlZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFuZCB0aGUgcHJvY2VzcyBpcyBubyBsb25nZXIgYWJsZSB0byBzYWZlbHkgY2xvc2UgaXQuIFRoaXMgcGF0Y2ggYWltcyB0byBmaXggdGhpcy5cblxuU28sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiBiZWhhdmlvci4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU5UUmAgaW4gdGhlc2UgaW50ZXJydXB0ZWQgc2NlbmFyaW9zLCBpdCBub3cgcmV0dXJucyAwLCBpbmRpY2F0aW5nIHN1Y2Nlc3MuIFRoaXMgaXMgYSBtdWNoIGJldHRlciBhcHByb2FjaCBzaW5jZSBpdCBhdm9pZHMgbWlzbGVhZGluZyB0aGUgYXBwbGljYXRpb24gaW50byBhdHRlbXB0aW5nIGEgcmV0cnkgb24gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCBpcyBubyBsb25nZXIgdmFsaWQsIGFuZCBpcyBub3cgXCJjbG9zZWQuXCJcblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHNhZmV0eS4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MuIEknbSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBwYXRjaCBhZ2FpbnN0IGNvbW1vbiB2dWxuZXJhYmlsaXRpZXM6XG5cbiogICAqKkNvcHlpbmcga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2U/KiogTm8sIGBjbG9zZWAgb25seSByZXR1cm5zIGFuIGludGVnZXIgZXJyb3IgY29kZS5cbiogICAqKlN0cnVjdC9idWZmZXIgYWxsb2NhdGlvbj8qKiBObywgdGhpcyBwYXRjaCBpcyBvbmx5IGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUuXG4qICAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBgcmV0dmFsYCBpcyBpbml0aWFsaXplZCBieSBgZmlscF9mbHVzaGAsIHNvIHdlIGFyZSBnb29kLlxuKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm8uIGByZXR2YWxgIGlzIHRoZSByZXN1bHQgb2YgYGZpbHBfZmx1c2hgLlxuKiAgICoqQm91bmRzLCBsZW5ndGhzLCBvciBkYXRhIGNvcHlpbmcgYWZmZWN0ZWQ/KiogTm9wZS5cbiogICAqKkluZm8tbGVhayByaXNrPyoqIE5vdCBpbiB0aGUgc2xpZ2h0ZXN0LlxuXG5UaGVyZWZvcmUsIG5vIHJpc2sgb2YgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSB0byB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIHBhdGNoIGFwcGVhcnMgdG8gYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBzYWZlLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCBuZWVkZWQgaGVyZS5cblxuSSdtIGNvbmZpcm1pbmcgdGhpcyBpcyBhIGNsZWFyIFwiTmVlZHNLTVNBTj1mYWxzZVwiIHNjZW5hcmlvLCBiYXNlZCBvbiB0aGUga2VybmVsJ3MgZG9jdW1lbnRhdGlvbi4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZiB0aGUgcmlza3MgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYW5kIGl0J3Mgd2VsbCB3aXRoaW4gdGhlIGJvdW5kcyBvZiBzdGFuZGFyZCBidWcgZGV0ZWN0aW9uLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyNiwiT3V0cHV0VG9rZW5zIjoxNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMDoxMDoxMC4zODAzODA5MDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gdmFsdWUgaGFuZGxpbmcgaW4gc3lzX2Nsb3NlKCkgd2hlbiBmaWxwX2ZsdXNoKCkgcmV0dXJucyAtRUlOVFIgb3IgYSByZXN0YXJ0IGVycm9yIGNvZGUgKC1FUkVTVEFSVFNZUywgLUVSRVNUQVJUTk9JTlRSLCAtRVJFU1RBUlROT0hBTkQsIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spLCByZXR1cm5pbmcgMCBpbnN0ZWFkIG9mIC1FSU5UUi5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIHRoZSBzY2FsYXIgaW50ZWdlciByZXR1cm4gY29kZSBvZiB0aGUgY2xvc2UoMikgc3lzY2FsbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGludGVyYWN0IHdpdGggYW55IG1lbW9yeSBidWZmZXJzLCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGluZyBpbiBzeXNfY2xvc2UoKSB3aGVuIGZpbHBfZmx1c2goKSByZXR1cm5zIC1FSU5UUiBvciBhIHJlc3RhcnQgZXJyb3IgY29kZSAoLUVSRVNUQVJUU1lTLCAtRVJFU1RBUlROT0lOVFIsIC1FUkVTVEFSVE5PSEFORCwgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyksIHJldHVybmluZyAwIGluc3RlYWQgb2YgLUVJTlRSLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgdGhlIHNjYWxhciBpbnRlZ2VyIHJldHVybiBjb2RlIG9mIHRoZSBjbG9zZSgyKSBzeXNjYWxsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgaW50ZXJhY3Qgd2l0aCBhbnkgbWVtb3J5IGJ1ZmZlcnMsIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyBwb3NzaWJpbGl0eSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgldd[1] Phase: Succeeded StartedAt: 2026-09-13 20:10:21 +0000 UTC FinishedAt: 2026-09-13 20:10:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 20:10:21 +0000 UTC FinishedAt: 2026-09-13 20:10:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2] Phase: Succeeded StartedAt: 2026-09-13 20:10:21 +0000 UTC FinishedAt: 2026-09-13 23:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 20:10:21 +0000 UTC FinishedAt: 2026-09-13 23:53:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 20:10:21 +0000 UTC FinishedAt: 2026-09-13 20:10:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 20:10:21 +0000 UTC FinishedAt: 2026-09-13 20:10:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowhgldd/series-workflowhgldd-convert-artifact-846677803/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 20:10:32 +0000 UTC FinishedAt: 2026-09-13 20:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 20:10:32 +0000 UTC FinishedAt: 2026-09-13 20:26:11 +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:*90eefe4d-55d2-4797-b7d9-24acdafa408b,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-workflowhgldd/series-workflowhgldd-convert-artifact-846677803/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": "5e3ec952-aed6-4fe5-bd92-f870841153a0", "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-workflowhgldd/series-workflowhgldd-build-action-1925896233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 20:10:32 +0000 UTC FinishedAt: 2026-09-13 20:26:01 +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:*90eefe4d-55d2-4797-b7d9-24acdafa408b,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-workflowhgldd/series-workflowhgldd-convert-artifact-846677803/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": "5e3ec952-aed6-4fe5-bd92-f870841153a0", "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-workflowhgldd/series-workflowhgldd-build-action-1925896233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 20:26:11 +0000 UTC FinishedAt: 2026-09-13 20:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 20:26:11 +0000 UTC FinishedAt: 2026-09-13 20:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 20:26:11 +0000 UTC FinishedAt: 2026-09-13 20:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 20:26:11 +0000 UTC FinishedAt: 2026-09-13 20:26:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowhgldd/series-workflowhgldd-convert-artifact-172287234/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 20:26:21 +0000 UTC FinishedAt: 2026-09-13 20:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 20:26:21 +0000 UTC FinishedAt: 2026-09-13 20:28:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5e3ec952-aed6-4fe5-bd92-f870841153a0,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-workflowhgldd/series-workflowhgldd-build-action-1925896233/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-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 20:28:35 +0000 UTC FinishedAt: 2026-09-13 20:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 20:28:35 +0000 UTC FinishedAt: 2026-09-13 20:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 20:28:35 +0000 UTC FinishedAt: 2026-09-13 20:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 20:28:35 +0000 UTC FinishedAt: 2026-09-13 20:45:02 +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:*90eefe4d-55d2-4797-b7d9-24acdafa408b,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-workflowhgldd/series-workflowhgldd-convert-artifact-172287234/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": "61537879-8513-4cb3-8f04-f7215ddb733c", "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-workflowhgldd/series-workflowhgldd-build-action-1333317462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 20:28:35 +0000 UTC FinishedAt: 2026-09-13 20:44:52 +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:*90eefe4d-55d2-4797-b7d9-24acdafa408b,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-workflowhgldd/series-workflowhgldd-convert-artifact-172287234/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": "61537879-8513-4cb3-8f04-f7215ddb733c", "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-workflowhgldd/series-workflowhgldd-build-action-1333317462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 20:45:02 +0000 UTC FinishedAt: 2026-09-13 20:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 20:45:02 +0000 UTC FinishedAt: 2026-09-13 20:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 20:45:02 +0000 UTC FinishedAt: 2026-09-13 20:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 20:45:02 +0000 UTC FinishedAt: 2026-09-13 20:47:33 +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:*61537879-8513-4cb3-8f04-f7215ddb733c,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-workflowhgldd/series-workflowhgldd-build-action-1333317462/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-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 20:47:43 +0000 UTC FinishedAt: 2026-09-13 23:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 20:47:43 +0000 UTC FinishedAt: 2026-09-13 23:53:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"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:*5e3ec952-aed6-4fe5-bd92-f870841153a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61537879-8513-4cb3-8f04-f7215ddb733c,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-workflowhgldd/series-workflowhgldd-build-action-1925896233/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-workflowhgldd/series-workflowhgldd-build-action-1333317462/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 20:47:43 +0000 UTC FinishedAt: 2026-09-13 20:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 20:47:43 +0000 UTC FinishedAt: 2026-09-13 20:47:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"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-workflowhgldd/series-workflowhgldd-convert-artifact-2918816567/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 20:47:43 +0000 UTC FinishedAt: 2026-09-13 20:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 20:47:43 +0000 UTC FinishedAt: 2026-09-13 20:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 20:47:43 +0000 UTC FinishedAt: 2026-09-13 20:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 20:47:53 +0000 UTC FinishedAt: 2026-09-13 23:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhgldd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"501cbbd276b77d34af20ea3dd4f897c93630bac8","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__x64_sys_close","__do_sys_close"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"501cbbd276b77d34af20ea3dd4f897c93630bac8","config_name":"upstream-apparmor-kasan.config","series_id":"cefc37a1-e4b5-4ee8-a2de-a78b6fc4bbaa","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 20:47:53 +0000 UTC FinishedAt: 2026-09-13 23:53:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5e3ec952-aed6-4fe5-bd92-f870841153a0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61537879-8513-4cb3-8f04-f7215ddb733c,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-workflowhgldd/series-workflowhgldd-build-action-1925896233/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-workflowhgldd/series-workflowhgldd-build-action-1333317462/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-workflowhgldd/series-workflowhgldd-convert-artifact-2918816567/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,}