Name: series-workflowfzrm2 Phase: Succeeded StartedAt: 2026-07-13 16:28:46 +0000 UTC FinishedAt: 2026-07-13 21:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[0] Phase: Succeeded StartedAt: 2026-07-13 16:28:46 +0000 UTC FinishedAt: 2026-07-13 16:52:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 16:28:46 +0000 UTC FinishedAt: 2026-07-13 16:52:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "bee763d5f341b99cf472afeb508d4988f62a6ca1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "bee763d5f341b99cf472afeb508d4988f62a6ca1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "df7f1093-59f4-47d2-a1b6-c86d8c4140c3" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_ring_buffers_peek", "io_buffers_select", "io_buffers_peek", "io_send_select_buffer", "io_recv_buf_select" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19zZW5kX3NlbGVjdF9idWZmZXImIzM0OywKICAgICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJiMzOTtzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2l0aCBwcm92aWRlZCBidWZmZXIgcmluZ3MuIFdoZW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaW92ZWMgYXJyYXkgaXMgZXhwYW5kZWQsIHRoZSBvbGQgYXJyYXkgd2FzIG5vdCBmcmVlZCBwcm9wZXJseSwgYW5kIHRoZSBuZXcgYXJyYXkgd2FzIGZyZWVkIGluc3RlYWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhayBvZiB0aGUgb2xkIGFycmF5IGFuZCBhIHVzZS1hZnRlci1mcmVlIG9mIHRoZSBuZXcgYXJyYXkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Njc3OTNmYzVlMmZlMGMzOTIzNDJjMTBmNGNmYTA5YjdjNTJjYzU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTY6NTE6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXG5pbmRleCBiNmI5NjliNTVlMTIyNC4uMDdkODFkYzdjYmUyOTYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTMyOCw4ICYjNDM7MzI4LDggQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXHRcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsICYjNDM7JiM0MztoZWFkLCBibC1cdTAwM2VtYXNrKTtcbiBcdH0gd2hpbGUgKC0tbnJfaW92cyk7XG4gXG4tXHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxuLVx0XHRrZnJlZShhcmctXHUwMDNlaW92cyk7XG4mIzQzO1x0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcbiYjNDM7XHRcdGtmcmVlKG9yZ19pb3ZzKTtcbiBcbiBcdGlmIChoZWFkID09IHRhaWwpXG4gXHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9FTVBUWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19yaW5nX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19idWZmZXJzX3NlbGVjdCYjMzQ7LAogICAgJiMzNDtpb19idWZmZXJzX3BlZWsmIzM0OywKICAgICYjMzQ7aW9fc2VuZF9zZWxlY3RfYnVmZmVyJiMzNDssCiAgICAmIzM0O2lvX3JlY3ZfYnVmX3NlbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGFuZCBtZW1vcnkgbGVhayBpbiBpb191cmluZyYjMzk7cyBuZXR3b3JrIHJlY2VpdmUvc2VuZCBvcGVyYXRpb25zIHdpdGggcHJvdmlkZWQgYnVmZmVyIHJpbmdzLiBXaGVuIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGlvdmVjIGFycmF5IGlzIGV4cGFuZGVkLCB0aGUgb2xkIGFycmF5IHdhcyBub3QgZnJlZWQgcHJvcGVybHksIGFuZCB0aGUgbmV3IGFycmF5IHdhcyBmcmVlZCBpbnN0ZWFkLCBsZWFkaW5nIHRvIGEgbWVtb3J5IGxlYWsgb2YgdGhlIG9sZCBhcnJheSBhbmQgYSB1c2UtYWZ0ZXItZnJlZSBvZiB0aGUgbmV3IGFycmF5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Njc3OTNmYzVlMmZlMGMzOTIzNDJjMTBmNGNmYTA5YjdjNTJjYzU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMTY6NTE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmMKaW5kZXggYjZiOTY5YjU1ZTEyMjQuLjA3ZDgxZGM3Y2JlMjk2IDEwMDY0NAotLS0gYS9pb191cmluZy9rYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5jCkBAIC0zMjgsOCAmIzQzOzMyOCw4IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLAogCQlidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCAmIzQzOyYjNDM7aGVhZCwgYmwtJmd0O21hc2spOwogCX0gd2hpbGUgKC0tbnJfaW92cyk7CiAKLQlpZiAoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKQotCQlrZnJlZShhcmctJmd0O2lvdnMpOwomIzQzOwlpZiAoKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRSkgJmFtcDsmYW1wOyBhcmctJmd0O2lvdnMgIT0gb3JnX2lvdnMpCiYjNDM7CQlrZnJlZShvcmdfaW92cyk7CiAKIAlpZiAoaGVhZCA9PSB0YWlsKQogCQlyZXEtJmd0O2ZsYWdzIHw9IFJFUV9GX0JMX0VNUFRZOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGlvX3VyaW5nL2tidWYuY2AsIHNwZWNpZmljYWxseSB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIG1pbm9yIGNoYW5nZSB0byB0aGUgZnJlZWluZyBsb2dpYyBmb3Iga2VybmVsIGJ1ZmZlcnMuIEhtbSwgbGV0IG1lIHNlZS4uLiBpdCBzZWVtcyB0aGUgY29kZSBub3cgY2hlY2tzIGBhcmctJmd0O2lvdnMgIT0gb3JnX2lvdnNgIGJlZm9yZSBjYWxsaW5nIGBrZnJlZWAgd2hlbiB0aGUgYEtCVUZfTU9ERV9GUkVFYCBmbGFnIGlzIHNldC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IgYSBjb3JyZWN0aW9uIHJlbGF0ZWQgdG8gbWFuYWdpbmcgbXVsdGlwbGUgaW92ZWMgcG9pbnRlcnMuCgpXYWl0IGEgbWludXRlLCBgb3JnX2lvdnNgPyBUaGF0IHZhcmlhYmxlIGlzbiYjMzk7dCBkZWZpbmVkICpoZXJlKiBpbiB0aGUgZGlmZi4gV2hlcmUgaXMgdGhhdCBjb21pbmcgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCYjMzk7cyBkZWNsYXJlZCBhbmQgd2hhdCBpdCByZXByZXNlbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgaW9fdXJpbmcva2J1Zi5jYC4gTGV0JiMzOTtzIGFzc3VtZSBpdCBpcyBpbiB0aGUgdmljaW5pdHkgb2YgbGluZSAzMjgsIEkmIzM5O2xsIGdvIHRha2UgYSBsb29rIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHRyYWNraW5nIG9yIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgaW92ZWMgc3RydWN0dXJlLiBPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0cmVxLVx1MDAzZWJ1Zl9pbmRleCA9IFJFQURfT05DRShidWYtXHUwMDNlYmlkKTtcbiAzMDE6XHRcdGRvIHtcbiAzMDI6XHRcdFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbiAzMDM6XHRcbiAzMDQ6XHRcdFx0LyogdHJ1bmNhdGUgZW5kIHBpZWNlLCBpZiBuZWVkZWQsIGZvciBub24gcGFydGlhbCBidWZmZXJzICovXG4gMzA1Olx0XHRcdGlmIChsZW4gXHUwMDNlIGFyZy1cdTAwM2VtYXhfbGVuKSB7XG4gMzA2Olx0XHRcdFx0bGVuID0gYXJnLVx1MDAzZW1heF9sZW47XG4gMzA3Olx0XHRcdFx0aWYgKCEoYmwtXHUwMDNlZmxhZ3MgXHUwMDI2IElPQkxfSU5DKSkge1xuIDMwODpcdFx0XHRcdFx0YXJnLVx1MDAzZXBhcnRpYWxfbWFwID0gMTtcbiAzMDk6XHRcdFx0XHRcdGlmIChpb3YgIT0gYXJnLVx1MDAzZWlvdnMpXG4gMzEwOlx0XHRcdFx0XHRcdGJyZWFrO1xuIDMxMTpcdFx0XHRcdH1cbiAzMTI6XHRcdFx0fVxuIDMxMzpcdFxuIDMxNDpcdFx0XHRpb3YtXHUwMDNlaW92X2Jhc2UgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKGJ1Zi1cdTAwM2VhZGRyKSk7XG4gMzE1Olx0XHRcdGlvdi1cdTAwM2Vpb3ZfbGVuID0gbGVuO1xuIDMxNjpcdFx0XHRpZiAodW5saWtlbHkoIWFjY2Vzc19vayhpb3YtXHUwMDNlaW92X2Jhc2UsIGxlbikpKSB7XG4gMzE3Olx0XHRcdFx0aWYgKGFyZy1cdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKVxuIDMxODpcdFx0XHRcdFx0a2ZyZWUoYXJnLVx1MDAzZWlvdnMpO1xuIDMxOTpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDMyMDpcdFx0XHR9XG4gMzIxOlx0XHRcdGlvdiYjNDM7JiM0Mzs7XG4gMzIyOlx0XG4gMzIzOlx0XHRcdGFyZy1cdTAwM2VvdXRfbGVuICYjNDM7PSBsZW47XG4gMzI0Olx0XHRcdGFyZy1cdTAwM2VtYXhfbGVuIC09IGxlbjtcbiAzMjU6XHRcdFx0aWYgKCFhcmctXHUwMDNlbWF4X2xlbilcbiAzMjY6XHRcdFx0XHRicmVhaztcbiAzMjc6XHRcbiAzMjg6XHRcdFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgJiM0MzsmIzQzO2hlYWQsIGJsLVx1MDAzZW1hc2spO1xuIDMyOTpcdFx0fSB3aGlsZSAoLS1ucl9pb3ZzKTtcbiAzMzA6XHRcbiAzMzE6XHRcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG4gMzMyOlx0XHRcdGtmcmVlKG9yZ19pb3ZzKTtcbiAzMzM6XHRcbiAzMzQ6XHRcdGlmIChoZWFkID09IHRhaWwpXG4gMzM1Olx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9FTVBUWTtcbiAzMzY6XHRcbiAzMzc6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZGRVJfUklORztcbiAzMzg6XHRcdHJldHVybiBpb3YgLSBhcmctXHUwMDNlaW92cztcbiAzMzk6XHR9XG4gMzQwOlx0XG4gMzQxOlx0aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiAzNDI6XHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gMzQzOlx0e1xuIDM0NDpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXHUwMDNlY3R4O1xuIDM0NTpcdFx0aW50IHJldCA9IC1FTk9FTlQ7XG4gMzQ2Olx0XG4gMzQ3Olx0XHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIDM0ODpcdFx0c2VsLVx1MDAzZWJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KGN0eCwgYXJnLVx1MDAzZWJ1Zl9ncm91cCk7XG4gMzQ5Olx0XHRpZiAodW5saWtlbHkoIXNlbC1cdTAwM2VidWZfbGlzdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBQYXRjaCoqCgpBbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgaW9fcmluZ19idWZmZXJzX3BlZWtgIHdpdGhpbiBgaW9fdXJpbmcva2J1Zi5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkIGluIHRoaXMgY3JpdGljYWwgcGF0aD8mIzM0OyBUaGVuLCB0aGUgbWVudGlvbiBvZiBgb3JnX2lvdnNgIHRyaWdnZXJlZCBhIG1lbnRhbCBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGlzIGJlaW5nIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiBgb3JnX2lvdnNgLCB3aGljaCBpcyBsaWtlbHkgYSBrZXkgYXNwZWN0IHRvIHRoZSB3b3JrLiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3Vic3lzdGVtLiBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGlvdiBtYW5hZ2VtZW50IG9yIHVzZS1jYXNlIHdpdGggdGhvc2UgaW92cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0LyogY2FwIGl0IGF0IGEgcmVhc29uYWJsZSAyNTYsIHdpbGwgYmUgb25lIHBhZ2UgZXZlbiBmb3IgNEsgKi9cbiAyNTE6XHQjZGVmaW5lIFBFRUtfTUFYX0lNUE9SVFx0XHQyNTZcbiAyNTI6XHRcbiAyNTM6XHRzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiAyNTQ6XHRcdFx0XHRcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXG4gMjU1Olx0e1xuIDI1NjpcdFx0c3RydWN0IGlvX3VyaW5nX2J1Zl9yaW5nICpiciA9IGJsLVx1MDAzZWJ1Zl9yaW5nO1xuIDI1NzpcdFx0c3RydWN0IGlvdmVjICpvcmdfaW92cyA9IGFyZy1cdTAwM2Vpb3ZzO1xuIDI1ODpcdFx0c3RydWN0IGlvdmVjICppb3YgPSBhcmctXHUwMDNlaW92cztcbiAyNTk6XHRcdGludCBucl9pb3ZzID0gYXJnLVx1MDAzZW5yX2lvdnM7XG4gMjYwOlx0XHRfX3UxNiBucl9hdmFpbCwgdGFpbCwgaGVhZDtcbiAyNjE6XHRcdHN0cnVjdCBpb191cmluZ19idWYgKmJ1ZjtcbiAyNjI6XHRcbiAyNjM6XHRcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmJyLVx1MDAzZXRhaWwpO1xuIDI2NDpcdFx0aGVhZCA9IGJsLVx1MDAzZWhlYWQ7XG4gMjY1Olx0XHRucl9hdmFpbCA9IG1pbl90KF9fdTE2LCB0YWlsIC0gaGVhZCwgVUlPX01BWElPVik7XG4gMjY2Olx0XHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcbiAyNjc6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDI2ODpcdFxuIDI2OTpcdFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgaGVhZCwgYmwtXHUwMDNlbWFzayk7XG4gMjcwOlx0XHRpZiAoYXJnLVx1MDAzZW1heF9sZW4pIHtcbiAyNzE6XHRcdFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbiAyNzI6XHRcdFx0c2l6ZV90IG5lZWRlZDtcbiAyNzM6XHRcbiAyNzQ6XHRcdFx0aWYgKHVubGlrZWx5KCFsZW4pKVxuIDI3NTpcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiAyNzY6XHRcdFx0bmVlZGVkID0gKGFyZy1cdTAwM2VtYXhfbGVuICYjNDM7IGxlbiAtIDEpIC8gbGVuO1xuIDI3NzpcdFx0XHRuZWVkZWQgPSBtaW5fbm90X3plcm8obmVlZGVkLCAoc2l6ZV90KSBQRUVLX01BWF9JTVBPUlQpO1xuIDI3ODpcdFx0XHRpZiAobnJfYXZhaWwgXHUwMDNlIG5lZWRlZClcbiAyNzk6XHRcdFx0XHRucl9hdmFpbCA9IG5lZWRlZDtcbiAyODA6XHRcdH1cbiAyODE6XHRcbiAyODI6XHRcdC8qXG4gMjgzOlx0XHQgKiBvbmx5IGFsbG9jIGEgYmlnZ2VyIGFycmF5IGlmIHdlIGtub3cgd2UgaGF2ZSBkYXRhIHRvIG1hcCwgZWcgbm90XG4gMjg0Olx0XHQgKiBhIHNwZWN1bGF0aXZlIHBlZWsgb3BlcmF0aW9uLlxuIDI4NTpcdFx0ICovXG4gMjg2Olx0XHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9FWFBBTkQgXHUwMDI2XHUwMDI2IG5yX2F2YWlsIFx1MDAzZSBucl9pb3ZzIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlbWF4X2xlbikge1xuIDI4NzpcdFx0XHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCBucl9hdmFpbCk7XG4gMjg4Olx0XHRcdGlmICh1bmxpa2VseSghaW92KSlcbiAyODk6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyOTA6XHRcdFx0YXJnLVx1MDAzZWlvdnMgPSBpb3Y7XG4gMjkxOlx0XHRcdG5yX2lvdnMgPSBucl9hdmFpbDtcbiAyOTI6XHRcdH0gZWxzZSBpZiAobnJfYXZhaWwgXHUwMDNjIG5yX2lvdnMpIHtcbiAyOTM6XHRcdFx0bnJfaW92cyA9IG5yX2F2YWlsO1xuIDI5NDpcdFx0fVxuIDI5NTpcdFxuIDI5NjpcdFx0Lyogc2V0IGl0IHRvIG1heCwgaWYgbm90IHNldCwgc28gd2UgY2FuIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkgKi9cbiAyOTc6XHRcdGlmICghYXJnLVx1MDAzZW1heF9sZW4pXG4gMjk4Olx0XHRcdGFyZy1cdTAwM2VtYXhfbGVuID0gSU5UX01BWDtcbiAyOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBvciBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciBpbnZhbGlkIGZyZWUgc2l0dWF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOgoKYGBgYwppZiAoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKQogICAga2ZyZWUoYXJnLSZndDtpb3ZzKTsKYGBgCgpSaWdodCwgaWYgYGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRWAgaXMgc2V0LCBpdCYjMzk7cyB0ZWxsaW5nIHVzIHRoZSBjYWxsZXIgd2FudHMgdXMgdG8gZnJlZSBgYXJnLSZndDtpb3ZzYC4gQnV0IHdhaXQsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBhIGxpdHRsZSB0cmlja3kuIEkgbmVlZCB0byB0cmFjZSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugb2YgYGFyZy0mZ3Q7aW92c2AuIAoKT2theSwgaW4gdGhpcyBmdW5jdGlvbiBgYXJnLSZndDtpb3ZzYCBpcyBlaXRoZXIgcGFzc2VkIGluIG9yIGFsbG9jYXRlZCBoZXJlLiBgaW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgbnJfYXZhaWwpOyBhcmctJmd0O2lvdnMgPSBpb3Y7YCBTbywgaWYgYGFyZy0mZ3Q7aW92c2AgKndhcyogYWxsb2NhdGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFuZCBsYXRlciBmcmVlZCwgdGhlbiB0aGUgY2FsbGVyIHdvdWxkIGJlIGV4cGVjdGluZyB1cyB0byB0YWtlIGNhcmUgb2YgaXQgd2l0aCB0aGUgYEtCVUZfTU9ERV9GUkVFYCBiaXQuCgpUaGUga2V5IGlzIHRoaXMgbGluZTogYGlmICgoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKSAmYW1wOyZhbXA7IGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92cylgLiBTbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBga2ZyZWVgIGNhbGwgdG8gYGtmcmVlKG9yZ19pb3ZzKWAuIE9rYXksIHNvIGBvcmdfaW92c2AgbXVzdCBiZSB0aGUgb3JpZ2luYWwgcG9pbnRlciBwYXNzZWQgYnkgdGhlIGNhbGxlci4gSWYgYGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92c2AgaW4gdGhlIG5ldyBjb2RlLCB0aGVuIGBhcmctJmd0O2lvdnNgIHdhcyBuZXdseSBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIFRoZSBwYXRjaCBpcyB0aGVuIG9ubHkgZnJlZWluZyBgb3JnX2lvdnNgIGlmIGl0IHdhcyBwYXNzZWQgaW4gYW5kIGBhcmctJmd0O2lvdnNgIHdhcyBuZXdseSBhbGxvY2F0ZWQuCgpTbywgaWYgYGFyZy0mZ3Q7aW92c2AgaXMgYWxsb2NhdGVkIGluIHRoZSBmdW5jdGlvbiwgYW5kIGBhcmctJmd0O21vZGUgJmFtcDsgS0JVRl9NT0RFX0ZSRUVgIGlzIHNldCwgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaXMgZnJlZSB0aGUgKm9yaWdpbmFsKiBgYXJnLSZndDtpb3ZzYCBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgc3RpbGwgZXhwZWN0aW5nIHRvIGZyZWUgdGhlICpuZXcqIGBhcmctJmd0O2lvdnNgLiBJZiB3ZSBkb24mIzM5O3QgZnJlZSBgb3JnX2lvdnNgLCB3ZSBsZWFrIG1lbW9yeS4gSWYgd2UgKmRvKiBmcmVlIHRoZSBhbGxvY2F0ZWQgYGFyZy0mZ3Q7aW92c2AsIHdlJiMzOTtyZSBkb3VibGUtZnJlZWluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhlIGZpcnN0IGNhc2UuIEkgbmVlZCB0byBjb25maXJtIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIG1ha2VzIHNlbnNlLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgY2xhc3NpYyBjYXNlIHdoZXJlIGFuIGludGVybWVkaWF0ZSBhbGxvY2F0aW9uIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgb3IgeW91JiMzOTtsbCBoYXZlIGEgbGVhay4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVyIG9mIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0yMzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcbi0tXG5pb191cmluZy9rYnVmLmMtMjUyLVxuaW9fdXJpbmcva2J1Zi5jOjI1MzpzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0yNTQtXHRcdFx0XHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxuLS1cbmlvX3VyaW5nL2tidWYuYz0zNDE9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzUyLVx0aWYgKHNlbC1cdTAwM2VidWZfbGlzdC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuaW9fdXJpbmcva2J1Zi5jOjM1MzpcdFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy9rYnVmLmMtMzU0LVx0XHQvKlxuLS1cbmlvX3VyaW5nL2tidWYuYz0zNzc9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM5MC1cdGlmIChibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuaW9fdXJpbmcva2J1Zi5jOjM5MTpcdFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIGJsKTtcbmlvX3VyaW5nL2tidWYuYy0zOTItXHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBiZWhhdmlvciBhbmQgaG93IHRoZXkgaW50ZXJhY3QsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBzb21lIGtpbmQgb2YgYXN5bmNocm9ub3VzIEkvTyBzZXR1cC4gSSYjMzk7bSBpbWFnaW5pbmcgYHNlbGVjdGAgaXMgYmVpbmcgdXNlZCB0byBub24tYmxvY2tpbmdseSBtb25pdG9yIHRoZSByZWFkaW5lc3Mgb2YgSS9PIGJ1ZmZlcnMsIHByb2JhYmx5IGZvciByZWFkaW5nIG9yIHdyaXRpbmcsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgbWVjaGFuaXNtIGl0IGlzIHVzaW5nLCB3aGV0aGVyIGl0JiMzOTtzIHRpZWQgdG8gYW4gZXZlbnQgbG9vcCBvciBzb21ldGhpbmcgZWxzZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBgcGVla2AgaXMgaW1wbGVtZW50ZWQgcmVsYXRpdmUgdG8gYHNlbGVjdGAtLXBlcmhhcHMgYHBlZWtgIGhlbHBzIGV4YW1pbmUgYnVmZmVyIGNvbnRlbnRzIHdpdGhvdXQgY29uc3VtaW5nIHRoZSBkYXRhLCBidXQgb25seSBhZnRlciBpdOKAmXMgYmVlbiBjb25maXJtZWQgcmVhZHkgdG8gcmVhZCBieSBgc2VsZWN0YC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBob3cgYHNlbGVjdGAgaGFuZGxlcyBwYXJ0aWFsIHJlYWRzL3dyaXRlcywgYW5kIGlmIGBwZWVrYCBpcyBhZmZlY3RlZCBieSBzdWNoIHNjZW5hcmlvcy4gVGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIGlzIGtleS4gVGltZSB0byBnZXQgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MTpcdGludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gMzQyOlx0XHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIDM0MzpcdHtcbiAzNDQ6XHRcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVx1MDAzZWN0eDtcbiAzNDU6XHRcdGludCByZXQgPSAtRU5PRU5UO1xuIDM0NjpcdFxuIDM0NzpcdFx0aW9fcmluZ19zdWJtaXRfbG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiAzNDg6XHRcdHNlbC1cdTAwM2VidWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChjdHgsIGFyZy1cdTAwM2VidWZfZ3JvdXApO1xuIDM0OTpcdFx0aWYgKHVubGlrZWx5KCFzZWwtXHUwMDNlYnVmX2xpc3QpKVxuIDM1MDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMzUxOlx0XG4gMzUyOlx0XHRpZiAoc2VsLVx1MDAzZWJ1Zl9saXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJT0JMX0JVRl9SSU5HKSB7XG4gMzUzOlx0XHRcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDM1NDpcdFx0XHQvKlxuIDM1NTpcdFx0XHQgKiBEb24mIzM5O3QgcmVjeWNsZSB0aGVzZSBidWZmZXJzIGlmIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCBwb2xsLlxuIDM1NjpcdFx0XHQgKiBOb2JvZHkgZWxzZSBjYW4gdXNlIHRoZW0gYW55d2F5LCBhbmQgaG9sZGluZyBvbiB0byBwcm92aWRlZFxuIDM1NzpcdFx0XHQgKiBidWZmZXJzIGZvciBhIHNlbmQvd3JpdGUgb3BlcmF0aW9uIHdvdWxkIGhhcHBlbiBvbiB0aGUgYXBwXG4gMzU4Olx0XHRcdCAqIHNpZGUgYW55d2F5IHdpdGggbm9ybWFsIGJ1ZmZlcnMuIEJlc2lkZXMsIHdlIGFscmVhZHlcbiAzNTk6XHRcdFx0ICogY29tbWl0dGVkIHRoZW0sIHRoZXkgY2Fubm90IGJlIHB1dCBiYWNrIGluIHRoZSBxdWV1ZS5cbiAzNjA6XHRcdFx0ICovXG4gMzYxOlx0XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbiAzNjI6XHRcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQlVGRkVSU19DT01NSVQgfCBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuIDM2MzpcdFx0XHRcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGFyZy1cdTAwM2VvdXRfbGVuLCByZXQpKVxuIDM2NDpcdFx0XHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xuIDM2NTpcdFx0XHR9XG4gMzY2Olx0XHR9IGVsc2Uge1xuIDM2NzpcdFx0XHRyZXQgPSBpb19wcm92aWRlZF9idWZmZXJzX3NlbGVjdChyZXEsIFx1MDAyNmFyZy1cdTAwM2VvdXRfbGVuLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGFyZy1cdTAwM2Vpb3ZzKTtcbiAzNjg6XHRcdH1cbiAzNjk6XHRvdXRfdW5sb2NrOlxuIDM3MDpcdFx0aWYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSB7XG4gMzcxOlx0XHRcdHNlbC1cdTAwM2VidWZfbGlzdCA9IE5VTEw7XG4gMzcyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4gMzczOlx0XHR9XG4gMzc0Olx0XHRyZXR1cm4gcmV0O1xuIDM3NTpcdH1cbiAzNzY6XHRcbiAzNzc6XHRpbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiAzNzg6XHRcdFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcbiAzNzk6XHR7XG4gMzgwOlx0XHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cdTAwM2VjdHg7XG4gMzgxOlx0XHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsO1xuIDM4MjpcdFx0aW50IHJldDtcbiAzODM6XHRcbiAzODQ6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuIDM4NTpcdFxuIDM4NjpcdFx0YmwgPSBpb19idWZmZXJfZ2V0X2xpc3QoY3R4LCBhcmctXHUwMDNlYnVmX2dyb3VwKTtcbiAzODc6XHRcdGlmICh1bmxpa2VseSghYmwpKVxuIDM4ODpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAzODk6XHRcbiAzOTA6XHRcdGlmIChibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzIwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgS0JVRl9NT0RFX0ZSRUUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBLQlVGX01PREVfRlJFRWAuIFNlZW1zIGxpa2UgdGhlIGJlc3QgZmlyc3Qgc3RlcCBpcyB0byBsb2NhdGUgKndoZXJlKiB0aGlzIGZsYWcgaXMgYWN0dWFsbHkgYmVpbmcgc2V0LiBLbm93aW5nIHRoZSBpbml0aWFsIGNvbnRleHQgaXMgY3JpdGljYWw7IGl0JiMzOTtsbCBzaGVkIGxpZ2h0IG9uIHRoZSBwdXJwb3NlIGFuZCBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgc3Vic2VxdWVudCBjb2RlLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcsIG9wdGltaXphdGlvbiwgb3IgcmVhbGx5IGFueXRoaW5nIGVsc2UgSSBuZWVkIHRvIGRvIHdpdGggdGhpcyBjb2RlLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzb2xpZCBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2guIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBLQlVGX01PREVfRlJFRWAgaXMgYXNzaWduZWQgYSB2YWx1ZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBsYXJnZXIgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S0JVRl9NT0RFX0ZSRUUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzMwLVxuaW9fdXJpbmcva2J1Zi5jOjMzMTpcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG5pb191cmluZy9rYnVmLmMtMzMyLVx0XHRrZnJlZShvcmdfaW92cyk7XG4tLVxuaW9fdXJpbmcva2J1Zi5oPTUzPWVudW0ge1xuLS1cbmlvX3VyaW5nL2tidWYuaC01Ni1cdC8qIGlmIGJpZ2dlciB2ZWMgYWxsb2NhdGVkLCBmcmVlIG9sZCBvbmUgKi9cbmlvX3VyaW5nL2tidWYuaDo1NzpcdEtCVUZfTU9ERV9GUkVFXHRcdD0gMixcbmlvX3VyaW5nL2tidWYuaC01OC19O1xuLS1cbmlvX3VyaW5nL25ldC5jPTYwOD1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuLS1cbmlvX3VyaW5nL25ldC5jLTYyMi1cdFx0YXJnLmlvdnMgPSBrbXNnLVx1MDAzZXZlYy5pb3ZlYztcbmlvX3VyaW5nL25ldC5jOjYyMzpcdFx0YXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTtcbmlvX3VyaW5nL25ldC5jLTYyNC1cdH1cbi0tXG5pb191cmluZy9uZXQuYz0xMTM3PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTExNTktXHRcdFx0YXJnLmlvdnMgPSBrbXNnLVx1MDAzZXZlYy5pb3ZlYztcbmlvX3VyaW5nL25ldC5jOjExNjA6XHRcdFx0YXJnLm1vZGUgfD0gS0JVRl9NT0RFX0ZSRUU7XG5pb191cmluZy9uZXQuYy0xMTYxLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgQnVnIEZpeDogS0JVRl9NT0RFX0ZSRUUgYW5kIFZlY3RvciBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBLQlVGX01PREVfRlJFRWAuLi4gdGhhdCYjMzk7cyB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyAmIzM0O2lmIHRoZSB2ZWN0b3IgaXMgZXhwYW5kZWQsIGZyZWUgdGhlIG9yaWdpbmFsIG9uZSYjMzQ7LiBSaWdodCwgZ290IGl0LiBMZXQgbWUgdGhpbmsuIExvb2tpbmcgYXQgdGhlIG9sZCBjb2RlLCBpdCB1c2VkIHRvIGJlIGEgc2ltcGxlIGBrZnJlZShhcmctJmd0O2lvdnMpYCBpZiB0aGUgYEtCVUZfTU9ERV9GUkVFYCBiaXQgd2FzIHNldC4gQnV0IGhvbGQgb24sIGBhcmctJmd0O2lvdnNgIGNvdWxkIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgdmVjdG9yIGR1ZSB0byBhbiBleHBhbnNpb24sIGFuZCB0aGF0JiMzOTtzIHRoZSBwcm9ibGVtLgoKU3BlY2lmaWNhbGx5LCBpZiBgS0JVRl9NT0RFX0VYUEFORGAgd2FzIHNldCwgYW5kIHdlIGhhZCB0byBhbGxvY2F0ZSBhIG5ldyB2ZWN0b3IsIHRoZSBjb2RlIGRvZXM6IGBhcmctJmd0O2lvdnMgPSBpb3Y7YCBTbywgaWYgYEtCVUZfTU9ERV9GUkVFYCB3YXMgdGhlbiBhbHNvIHNldCwgdGhlIGxhdGVyIGBrZnJlZShhcmctJmd0O2lvdnMpYCB3b3VsZCBmcmVlIHRoZSAqbmV3KiB2ZWN0b3IsIG5vdCB0aGUgb2xkIG9uZS4gTWVhbmluZyB3ZSYjMzk7cmUgbGVha2luZyB0aGUgb2xkIG9uZSBhbmQgdGhlIGNhbGxlciB3b3VsZCB0aGVuIGJlIHVzaW5nIGEgZnJlZWQgdmVjdG9yLiBZaWtlcyEgVGhhdCYjMzk7cyBhIHVzZS1hZnRlci1mcmVlICphbmQqIGEgbWVtb3J5IGxlYWshCgpCdXQgdGhlcmUmIzM5O3MgbW9yZS4gV2hhdCBpZiBgS0JVRl9NT0RFX0ZSRUVgIHdhcyBzZXQsIGJ1dCB0aGUgdmVjdG9yIHdhc24mIzM5O3QgYWN0dWFsbHkgZXhwYW5kZWQ/IFRoZW4gdGhlIGNvZGUgd2FzIGZyZWVpbmcgdGhlIGNhbGxlciYjMzk7cyAqb3JpZ2luYWwqIGBhcmctJmd0O2lvdnNgIHZlY3Rvciwgd2hpY2ggdGhleSYjMzk7cmUgc3RpbGwgdXNpbmchIFRoYXQgaXMgYWxzbyBhIGRpc2FzdGVyLiBOb3cgSSBnZXQgaXQ6IGBLQlVGX01PREVfRlJFRWAgbWVhbnMgJiMzNDt0aGUgY2FsbGVyIGhhbmRlZCBtZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB2ZWN0b3IsIGFuZCBpZiBJIGV4cGFuZCBpdCwgZnJlZSB0aGUgb2xkIG9uZSYjMzQ7LgoKVGhlIGZpeCBpcyBub3cgdGhpczogYGlmICgoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKSAmYW1wOyZhbXA7IGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92cykga2ZyZWUob3JnX2lvdnMpO2Agd2hpY2ggY29ycmVjdGx5IGZyZWVzIHRoZSAqb2xkKiB2ZWN0b3IgKGBvcmdfaW92c2ApICpvbmx5KiBpZiBhIG5ldyB2ZWN0b3Igd2FzIGFsbG9jYXRlZCAoYGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92c2ApLiBNdWNoIGJldHRlciEgVGhpcyBjbGVhbmx5IGZpeGVzIHRoZSB1c2UtYWZ0ZXItZnJlZSBhbmQgbWVtb3J5IGxlYWsgaW4gdGhlIGlvX3VyaW5nIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIHdpdGggcHJvdmlkZWQgYnVmZmVycy4KClNvLCBpcyB0aGlzIGZpeCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYGlvX2J1ZmZlcnNfcGVla2AsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLCBhbmQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAuIEhhbmcgb24sIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgc3RhdGljLCBJIGNhbiB3b3JrIGFyb3VuZCB0aGF0LiBJJiMzOTtsbCBpbmNsdWRlIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gQW5kIG1ha2Ugc3VyZSBgQ09ORklHX0lPX1VSSU5HYCBpcyBlbmFibGVkLiBJdCBwcm9iYWJseSBpcywgYnV0IGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBgaW9fdXJpbmcvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTk1ND1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5NjEtXG5pbml0L0tjb25maWc6MTk2Mjpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTYzLVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTk3MT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5ODMtXG5pbml0L0tjb25maWc6MTk4NDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk4NS1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTItXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcbmlvX3VyaW5nL0tjb25maWctMTQtXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL0tjb25maWctMTktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlIHNlZW1zIHRvIGJlIHRoZSBgQ09ORklHX0lPX1VSSU5HYCBzZXR0aW5nIOKAkyB0aGF0JiMzOTtzIHRoZSBiaWcgb25lIHRvIHN0YXJ0IHdpdGguIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3VyaW5nL2tidWYuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBmaXJzdC4KCkxldCYjMzk7cyBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGJ1ZyBpdHNlbGYgaXMgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgd2hpY2ggaXMgb2J2aW91c2x5IHRpZWQgdG8gYnVmZmVyIHJpbmdzLiBBbmQgYnVmZmVyIHJpbmdzLCBvZiBjb3Vyc2UsIGFyZSBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBpb191cmluZyBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3QsIGFyZSB0aGVyZSBhbnkgbmV0d29yay1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHBsYXkgYSByb2xlIGhlcmUgd2l0aGluIGlvX3VyaW5nPyBIbW0sIEkgc2VlIHRoYXQgYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkLiBUaGF0IG1ha2VzIG1lIHdhbnQgdG8gZXhhbWluZSBgaW9fdXJpbmcvbmV0LmNgIGNsb3NlbHkgYXMgd2VsbC4gVGhpcyB3aWxsIGhlbHAgdG8gdW5kZXJzdGFuZCBhbnkgbmV0d29yay1yZWxhdGVkIGltcGxpY2F0aW9ucyBvZiB0aGlzIGJ1ZywgcGFydGljdWxhcmx5IGlmIG5ldHdvcmsgYnVmZmVyIHJpbmdzIGFyZSBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfRVBPTEwpXHRcdCYjNDM7PSBlcG9sbC5vXG5pb191cmluZy9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcdCYjNDM7PSBuYXBpLm9cbmlvX3VyaW5nL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORVQpICYjNDM7PSBuZXQubyBjbWRfbmV0Lm9cbmlvX3VyaW5nL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gZmRpbmZvLm9cbi0tXG5pb191cmluZy9mZGluZm8uYy0xOS1cbmlvX3VyaW5nL2ZkaW5mby5jOjIwOiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxuaW9fdXJpbmcvZmRpbmZvLmMtMjEtc3RhdGljIF9fY29sZCB2b2lkIGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oPTEyOD1zdHJ1Y3QgaW9fd2FpdF9xdWV1ZSB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0xMzgtXG5pb191cmluZy9pb191cmluZy5oOjEzOTojaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTQwLVx0a3RpbWVfdCBuYXBpX2J1c3lfcG9sbF9kdDtcbi0tXG5pb191cmluZy9uYXBpLmMtNS1cbmlvX3VyaW5nL25hcGkuYzo2OiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxuaW9fdXJpbmcvbmFwaS5jLTctXG4tLVxuaW9fdXJpbmcvbmFwaS5oLTktXG5pb191cmluZy9uYXBpLmg6MTA6I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXG5pb191cmluZy9uYXBpLmgtMTEtXG4tLVxuaW9fdXJpbmcvbmFwaS5oPTg0PXN0YXRpYyBpbmxpbmUgaW50IGlvX25hcGlfc3Fwb2xsX2J1c3lfcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9uYXBpLmgtODctfVxuaW9fdXJpbmcvbmFwaS5oOjg4OiNlbmRpZiAvKiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTCAqL1xuaW9fdXJpbmcvbmFwaS5oLTg5LVxuLS1cbmlvX3VyaW5nL25ldC5oPTg9c3RydWN0IGlvX2FzeW5jX21zZ2hkciB7XG5pb191cmluZy9uZXQuaDo5OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9uZXQuaC0xMC1cdHN0cnVjdCBpb3VfdmVjXHRcdFx0XHR2ZWM7XG4tLVxuaW9fdXJpbmcvbmV0LmgtMjUtXG5pb191cmluZy9uZXQuaDoyNjojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvbmV0LmgtMjctXG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcbi0tXG5pb191cmluZy9vcGRlZi5jLTE0Mi1cdFx0LmlvcHJpb1x0XHRcdD0gMSxcbmlvX3VyaW5nL29wZGVmLmM6MTQzOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTE0NC1cdFx0LmFzeW5jX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy0xNTYtXHRcdC5pb3ByaW9cdFx0XHQ9IDEsXG5pb191cmluZy9vcGRlZi5jOjE1NzojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy0xNTgtXHRcdC5hc3luY19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtMTgyLVx0XHQuaW9wcmlvXHRcdFx0PSAxLFx0LyogdXNlZCBmb3IgZmxhZ3MgKi9cbmlvX3VyaW5nL29wZGVmLmM6MTgzOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTE4NC1cdFx0LnByZXBcdFx0XHQ9IGlvX2FjY2VwdF9wcmVwLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtMjA0LVx0XHQucG9sbG91dFx0XHQ9IDEsXG5pb191cmluZy9vcGRlZi5jOjIwNTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy0yMDYtXHRcdC5maWx0ZXJfcGR1X3NpemVcdD0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpb191cmluZ19icGZfY3R4LCBjb25uZWN0KSxcbi0tXG5pb191cmluZy9vcGRlZi5jLTI4NS1cdFx0LmJ1ZmZlcl9zZWxlY3RcdFx0PSAxLFxuaW9fdXJpbmcvb3BkZWYuYzoyODY6I2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmMtMjg3LVx0XHQuYXN5bmNfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcbi0tXG5pb191cmluZy9vcGRlZi5jLTMwMC1cdFx0LmlvcHJpb1x0XHRcdD0gMSxcbmlvX3VyaW5nL29wZGVmLmM6MzAxOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTMwMi1cdFx0LmFzeW5jX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy0zNTQtXHRcdC5uZWVkc19maWxlXHRcdD0gMSxcbmlvX3VyaW5nL29wZGVmLmM6MzU1OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTM1Ni1cdFx0LnByZXBcdFx0XHQ9IGlvX3NodXRkb3duX3ByZXAsXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00MDctXHRcdC5hdWRpdF9za2lwXHRcdD0gMSxcbmlvX3VyaW5nL29wZGVmLmM6NDA4OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTQwOS1cdFx0LmZpbHRlcl9wZHVfc2l6ZVx0PSBzaXplb2ZfZmllbGQoc3RydWN0IGlvX3VyaW5nX2JwZl9jdHgsIHNvY2tldCksXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00MzEtXHRcdC5pb3ByaW9cdFx0XHQ9IDEsXG5pb191cmluZy9vcGRlZi5jOjQzMjojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy00MzMtXHRcdC5hc3luY19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtNDQ0LVx0XHQuaW9wcmlvXHRcdFx0PSAxLFxuaW9fdXJpbmcvb3BkZWYuYzo0NDU6I2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmMtNDQ2LVx0XHQuYXN5bmNfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcbi0tXG5pb191cmluZy9vcGRlZi5jLTUwMy1cdFtJT1JJTkdfT1BfQklORF0gPSB7XG5pb191cmluZy9vcGRlZi5jOjUwNDojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy01MDUtXHRcdC5uZWVkc19maWxlXHRcdD0gMSxcbi0tXG5pb191cmluZy9vcGRlZi5jLTUxMy1cdFtJT1JJTkdfT1BfTElTVEVOXSA9IHtcbmlvX3VyaW5nL29wZGVmLmM6NTE0OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTUxNS1cdFx0Lm5lZWRzX2ZpbGVcdFx0PSAxLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtNTI3LVx0XHQuaW9wcmlvXHRcdFx0PSAxLFxuaW9fdXJpbmcvb3BkZWYuYzo1Mjg6I2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmMtNTI5LVx0XHQucHJlcFx0XHRcdD0gaW9fcmVjdnpjX3ByZXAsXG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01OTY9Y29uc3Qgc3RydWN0IGlvX2NvbGRfZGVmIGlvX2NvbGRfZGVmc1tdID0ge1xuLS1cbmlvX3VyaW5nL29wZGVmLmMtNjMzLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7U0VORE1TR1wmIzM0OyxcbmlvX3VyaW5nL29wZGVmLmM6NjM0OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTYzNS1cdFx0LmNsZWFudXBcdFx0PSBpb19zZW5kbXNnX3JlY3Ztc2dfY2xlYW51cCxcbi0tXG5pb191cmluZy9vcGRlZi5jLTY0MC1cdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1JFQ1ZNU0dcJiMzNDssXG5pb191cmluZy9vcGRlZi5jOjY0MTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy02NDItXHRcdC5jbGVhbnVwXHRcdD0gaW9fc2VuZG1zZ19yZWN2bXNnX2NsZWFudXAsXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy02OTgtXHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtTRU5EXCYjMzQ7LFxuaW9fdXJpbmcvb3BkZWYuYzo2OTk6I2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmMtNzAwLVx0XHQuY2xlYW51cFx0XHQ9IGlvX3NlbmRtc2dfcmVjdm1zZ19jbGVhbnVwLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtNzA1LVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7UkVDVlwmIzM0OyxcbmlvX3VyaW5nL29wZGVmLmM6NzA2OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTcwNy1cdFx0LmNsZWFudXBcdFx0PSBpb19zZW5kbXNnX3JlY3Ztc2dfY2xlYW51cCxcbi0tXG5pb191cmluZy9vcGRlZi5jLTc4NC1cdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1NFTkRfWkNcJiMzNDssXG5pb191cmluZy9vcGRlZi5jOjc4NTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy03ODYtXHRcdC5jbGVhbnVwXHRcdD0gaW9fc2VuZF96Y19jbGVhbnVwLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtNzkxLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7U0VORE1TR19aQ1wmIzM0OyxcbmlvX3VyaW5nL29wZGVmLmM6NzkyOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTc5My1cdFx0LmNsZWFudXBcdFx0PSBpb19zZW5kX3pjX2NsZWFudXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgaW9fdXJpbmdgIEJ1ZyBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aHJvdWdoIHRoaXMgYGlvX3VyaW5nYCBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX05FVGAgaXMgZXNzZW50aWFsIGZvciBjb21waWxpbmcgYGlvX3VyaW5nL25ldC5jYCwgd2hpY2ggaXMgYSBrZXkgZGVwZW5kZW5jeSBoZXJlLiBUaGUgYWN0dWFsIGJ1ZyYjMzk7cyBjb2RlIGlzIGluIGBpb191cmluZy9rYnVmLmNgLCB3aGljaCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGJ1dCB0aGUgY3J1Y2lhbCBgS0JVRl9NT0RFX0ZSRUVgIGZsYWcgaXMgKm9ubHkqIHVzZWQgd2l0aGluIGBpb191cmluZy9uZXQuY2AuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0uCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgdGhhdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZS4uLiBJIGRpZCBydW4gYSBgZ3JlcGAgZm9yIGBLQlVGX01PREVfRlJFRWAgZWFybGllcjoKCmBgYAppb191cmluZy9rYnVmLmM6MjUzOnN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLAppb191cmluZy9rYnVmLmM6MzMxOglpZiAoKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRSkgJmFtcDsmYW1wOyBhcmctJmd0O2lvdnMgIT0gb3JnX2lvdnMpCmlvX3VyaW5nL2tidWYuaDo1NzoJS0JVRl9NT0RFX0ZSRUUJCT0gMiwKaW9fdXJpbmcvbmV0LmM6NjIzOgkJYXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTsKaW9fdXJpbmcvbmV0LmM6MTE2MDoJCQlhcmcubW9kZSB8PSBLQlVGX01PREVfRlJFRTsKYGBgCgpZZXAsIGNvbmZpcm1lZC4gVGhlIGZsYWcgaXMgc3RyaWN0bHkgdGllZCB0byBgaW9fdXJpbmcvbmV0LmNgLiBUaGVyZWZvcmUsIGBDT05GSUdfTkVUYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQgdG8gZXhwb3NlIHRoaXMgYnVnLiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19JT19VUklOR2AgaXMgbmVjZXNzYXJ5IGFzIHdlbGwsIGJlY2F1c2UgdGhpcyBpcyBhbiBgaW9fdXJpbmdgIHNwZWNpZmljIGlzc3VlLgoKT2theSwgbGV0JiMzOTtzIHpvb20gaW4gb24gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGJlY2F1c2UgdGhhdCBpcyB3aGVyZSBgS0JVRl9NT0RFX0ZSRUVgIGlzIHNldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsb2dpYyBmbG93LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9uZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XHRpZiAocmV0IFx1MDAzZT0gMClcbiA2MDE6XHRcdFx0cmV0ICYjNDM7PSBzci1cdTAwM2Vkb25lX2lvO1xuIDYwMjpcdFx0ZWxzZSBpZiAoc3ItXHUwMDNlZG9uZV9pbylcbiA2MDM6XHRcdFx0cmV0ID0gc3ItXHUwMDNlZG9uZV9pbztcbiA2MDQ6XHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiA2MDU6XHRcdHJldHVybiBJT1VfQ09NUExFVEU7XG4gNjA2Olx0fVxuIDYwNzpcdFxuIDYwODpcdHN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXG4gNjA5Olx0XHRcdFx0XHQgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnKVxuIDYxMDpcdHtcbiA2MTE6XHRcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4gNjEyOlx0XHRzdHJ1Y3QgYnVmX3NlbF9hcmcgYXJnID0ge1xuIDYxMzpcdFx0XHQuaW92cyA9IFx1MDAyNmttc2ctXHUwMDNlZmFzdF9pb3YsXG4gNjE0Olx0XHRcdC5tYXhfbGVuID0gbWluX25vdF96ZXJvKHNyLVx1MDAzZWxlbiwgSU5UX01BWCksXG4gNjE1Olx0XHRcdC5ucl9pb3ZzID0gMSxcbiA2MTY6XHRcdFx0LmJ1Zl9ncm91cCA9IHNyLVx1MDAzZWJ1Zl9ncm91cCxcbiA2MTc6XHRcdH07XG4gNjE4Olx0XHRpbnQgcmV0O1xuIDYxOTpcdFxuIDYyMDpcdFx0aWYgKGttc2ctXHUwMDNldmVjLmlvdmVjKSB7XG4gNjIxOlx0XHRcdGFyZy5ucl9pb3ZzID0ga21zZy1cdTAwM2V2ZWMubnI7XG4gNjIyOlx0XHRcdGFyZy5pb3ZzID0ga21zZy1cdTAwM2V2ZWMuaW92ZWM7XG4gNjIzOlx0XHRcdGFyZy5tb2RlID0gS0JVRl9NT0RFX0ZSRUU7XG4gNjI0Olx0XHR9XG4gNjI1Olx0XG4gNjI2Olx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpXG4gNjI3Olx0XHRcdGFyZy5ucl9pb3ZzID0gMTtcbiA2Mjg6XHRcdGVsc2VcbiA2Mjk6XHRcdFx0YXJnLm1vZGUgfD0gS0JVRl9NT0RFX0VYUEFORDtcbiA2MzA6XHRcbiA2MzE6XHRcdHJldCA9IGlvX2J1ZmZlcnNfc2VsZWN0KHJlcSwgXHUwMDI2YXJnLCBzZWwsIGlzc3VlX2ZsYWdzKTtcbiA2MzI6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuIDYzMzpcdFx0XHRyZXR1cm4gcmV0O1xuIDYzNDpcdFxuIDYzNTpcdFx0aWYgKGFyZy5pb3ZzICE9IFx1MDAyNmttc2ctXHUwMDNlZmFzdF9pb3YgXHUwMDI2XHUwMDI2IGFyZy5pb3ZzICE9IGttc2ctXHUwMDNldmVjLmlvdmVjKSB7XG4gNjM2Olx0XHRcdGttc2ctXHUwMDNldmVjLm5yID0gcmV0O1xuIDYzNzpcdFx0XHRrbXNnLVx1MDAzZXZlYy5pb3ZlYyA9IGFyZy5pb3ZzO1xuIDYzODpcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfTkVFRF9DTEVBTlVQO1xuIDYzOTpcdFx0fVxuIDY0MDpcdFx0c3ItXHUwMDNlbGVuID0gYXJnLm91dF9sZW47XG4gNjQxOlx0XG4gNjQyOlx0XHRpZiAocmV0ID09IDEpIHtcbiA2NDM6XHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4gNjQ0Olx0XHRcdHJldCA9IGltcG9ydF91YnVmKElURVJfU09VUkNFLCBzci1cdTAwM2VidWYsIHNyLVx1MDAzZWxlbixcbiA2NDU6XHRcdFx0XHRcdFx0XHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpO1xuIDY0NjpcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbiA2NDc6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDY0ODpcdFx0fSBlbHNlIHtcbiA2NDk6XHRcdFx0aW92X2l0ZXJfaW5pdChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDk0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQnVmZmVyIE1hbmFnZW1lbnQgaW4gSS9PIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGNsb3NlbHkgYXQgaG93IGtlcm5lbCBidWZmZXJzIGFyZSBtYW5hZ2VkIGR1cmluZyBJL08gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBzZXRzIGBLQlVGX01PREVfRlJFRWAgd2hlbiBga21zZy0mZ3Q7dmVjLmlvdmVjYCBpcyBwcmVzZW50LiBUaGlzIG1ha2VzIHNlbnNlOyBpZiB3ZSYjMzk7cmUgdXNpbmcgYW4gaW92ZWMsIHRoZSBidWZmZXIgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHRoZSBzZW5kLiBOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGl0IHNldHMgYEtCVUZfTU9ERV9FWFBBTkRgIHdoZW4gYElPUklOR19SRUNWU0VORF9CVU5ETEVgIGlzIGZsYWdnZWQuIFRoaXMgaXMgb2J2aW91c2x5IGxpbmtlZCB0byBidW5kbGVkIG9wZXJhdGlvbnMgd2l0aCBgSU9SSU5HX09QX1NFTkRgIGFuZCBgSU9SSU5HX09QX1NFTkRNU0dgLCBnaXZpbmcgdGhlIGtlcm5lbCBwZXJtaXNzaW9uIHRvIGV4cGFuZCB0aGUgYnVmZmVyIGFzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgYnVuZGxlZCBzZW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGZ1bGx5IGFuZCBlbnN1cmUgdGhlIGxvZ2ljIGlzIGNvbnNpc3RlbnQgdGhyb3VnaG91dCB0aGUgSS9PIHBhdGguIFRoZSBjb250ZXh0IGhpbnRzIHRoaXMgaXMgYWxsIHRvIGRvIHdpdGggdGhlICpzZW5kKiBzbyBsZXQgbWUgbm93IHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBpb19yZWN2X2J1Zl9zZWxlY3RgIHRvIHNlZSBpZiB0aGUgY29tcGxlbWVudGFyeSAqcmVjZWl2ZSogbG9naWMgaXMgc291bmQgYW5kIGFsaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzc6XHRzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbjExMzg6XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbjExMzk6XHR7XG4xMTQwOlx0XHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuMTE0MTpcdFx0aW50IHJldDtcbjExNDI6XHRcbjExNDM6XHRcdC8qXG4xMTQ0Olx0XHQgKiBJZiB0aGUgcmluZyBpc24mIzM5O3QgbG9ja2VkLCB0aGVuIGRvbiYjMzk7dCB1c2UgdGhlIHBlZWsgaW50ZXJmYWNlXG4xMTQ1Olx0XHQgKiB0byBncmFiIG11bHRpcGxlIGJ1ZmZlcnMgYXMgd2Ugd2lsbCBsb2NrL3VubG9jayBiZXR3ZWVuXG4xMTQ2Olx0XHQgKiB0aGlzIHNlbGVjdGlvbiBhbmQgcG9zdGluZyB0aGUgYnVmZmVycy5cbjExNDc6XHRcdCAqL1xuMTE0ODpcdFx0aWYgKCEoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpIFx1MDAyNlx1MDAyNlxuMTE0OTpcdFx0ICAgIHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4xMTUwOlx0XHRcdHN0cnVjdCBidWZfc2VsX2FyZyBhcmcgPSB7XG4xMTUxOlx0XHRcdFx0LmlvdnMgPSBcdTAwMjZrbXNnLVx1MDAzZWZhc3RfaW92LFxuMTE1MjpcdFx0XHRcdC5ucl9pb3ZzID0gMSxcbjExNTM6XHRcdFx0XHQubW9kZSA9IEtCVUZfTU9ERV9FWFBBTkQsXG4xMTU0Olx0XHRcdFx0LmJ1Zl9ncm91cCA9IHNyLVx1MDAzZWJ1Zl9ncm91cCxcbjExNTU6XHRcdFx0fTtcbjExNTY6XHRcbjExNTc6XHRcdFx0aWYgKGttc2ctXHUwMDNldmVjLmlvdmVjKSB7XG4xMTU4Olx0XHRcdFx0YXJnLm5yX2lvdnMgPSBrbXNnLVx1MDAzZXZlYy5ucjtcbjExNTk6XHRcdFx0XHRhcmcuaW92cyA9IGttc2ctXHUwMDNldmVjLmlvdmVjO1xuMTE2MDpcdFx0XHRcdGFyZy5tb2RlIHw9IEtCVUZfTU9ERV9GUkVFO1xuMTE2MTpcdFx0XHR9XG4xMTYyOlx0XG4xMTYzOlx0XHRcdGlmIChzZWwtXHUwMDNldmFsKVxuMTE2NDpcdFx0XHRcdGFyZy5tYXhfbGVuID0gc2VsLVx1MDAzZXZhbDtcbjExNjU6XHRcdFx0ZWxzZSBpZiAoa21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2UgMSlcbjExNjY6XHRcdFx0XHRhcmcubWF4X2xlbiA9IG1pbl9ub3RfemVybyhzZWwtXHUwMDNldmFsLCAoc3NpemVfdCkga21zZy1cdTAwM2Vtc2cubXNnX2lucSk7XG4xMTY3Olx0XG4xMTY4Olx0XHRcdC8qIGlmIG1zaG90IGxpbWl0ZWQsIGVuc3VyZSB3ZSBkb24mIzM5O3QgZ28gb3ZlciAqL1xuMTE2OTpcdFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX01TSE9UX0xJTSlcbjExNzA6XHRcdFx0XHRhcmcubWF4X2xlbiA9IG1pbl9ub3RfemVybyhhcmcubWF4X2xlbiwgc3ItXHUwMDNlbXNob3RfdG90YWxfbGVuKTtcbjExNzE6XHRcdFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXHUwMDI2YXJnLCBzZWwpO1xuMTE3MjpcdFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbjExNzM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTE3NDpcdFxuMTE3NTpcdFx0XHRpZiAoYXJnLmlvdnMgIT0gXHUwMDI2a21zZy1cdTAwM2VmYXN0X2lvdiBcdTAwMjZcdTAwMjYgYXJnLmlvdnMgIT0ga21zZy1cdTAwM2V2ZWMuaW92ZWMpIHtcbjExNzY6XHRcdFx0XHRrbXNnLVx1MDAzZXZlYy5uciA9IHJldDtcbjExNzc6XHRcdFx0XHRrbXNnLVx1MDAzZXZlYy5pb3ZlYyA9IGFyZy5pb3ZzO1xuMTE3ODpcdFx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XG4xMTc5Olx0XHRcdH1cbjExODA6XHRcdFx0aWYgKGFyZy5wYXJ0aWFsX21hcClcbjExODE6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9QQVJUSUFMX01BUDtcbjExODI6XHRcbjExODM6XHRcdFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cbjExODQ6XHRcdFx0aWYgKHJldCA9PSAxKSB7XG4xMTg1Olx0XHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4xMTg2Olx0XHRcdFx0c3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBCdWZmZXIgSGFuZGxpbmcgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGZ1bmN0aW9uIGFuZCBzZWVpbmcgdGhhdCBpdCYjMzk7cyBzZXR0aW5nIGBLQlVGX01PREVfRlJFRWAgYW5kIGBLQlVGX01PREVfRVhQQU5EYC4gVGhpcyBzZWVtcyBzcGVjaWZpYyB0byBgSU9SSU5HX09QX1JFQ1ZgIGFuZCBgSU9SSU5HX09QX1JFQ1ZNU0dgIG9wZXJhdGlvbnMgd2hlbiB0aGV5JiMzOTtyZSBidW5kbGVkLiBSaWdodCwgdGhlIGJ1ZyByZXBvcnQgcG9pbnRlZCBtZSB0byBgaW9fcmluZ19idWZmZXJzX3BlZWtgLiBUaGF0JiMzOTtzIGNhbGxlZCBieSBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCwgd2hpY2ggbmFycm93cyBkb3duIHRoZSBhcmVhIG9mIGNvbmNlcm4uCgpTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGtleSBzeW1ib2xzLiBJdCBsb29rcyBsaWtlIGl0IHNob3VsZCBiZSBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBIYW5nIG9uLCBgaW9fcmluZ19idWZmZXJzX3BlZWtgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gQWgsIGFuZCBzbyBhcmUgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBUaGF0IG1lYW5zIGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgIGFyZSBnbG9iYWwuIFNpbmNlIHRob3NlIGFyZSB0aGUgaW50ZXJmYWNlcywgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGFsbCBvZiB0aGVtIGluIHRoZSBmb2N1cyBsaXN0LgoKQnV0IHdhaXQsIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkIGluIHRoZSByZWZlcmVuY2VkIGNvbW1pdCwgc28sIHRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gYmUgbW9zdCBjb25jZXJuZWQgYWJvdXQuIEFscmlnaHQsIGxldCYjMzk7cyBsb2NrIGluIHRoZSBmb2N1cyBzeW1ib2xzIGFzOiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgZm9yIHJlbGF0ZWQgY29uZmlncyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBpbiBwbGFjZS4gT2gsIGBDT05GSUdfTkVUYCBpcyBjbGVhcmx5IGEgcmVxdWlyZW1lbnQsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVycz8gSSYjMzk7bGwgY2hlY2sgYGlvX3VyaW5nL2tidWYuY2AgZm9yIGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmM9NjI2PWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTY3OS1cbmlvX3VyaW5nL2tidWYuYzo2ODA6I2lmZGVmIFNITV9DT0xPVVJcbmlvX3VyaW5nL2tidWYuYy02ODEtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI2NwoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAzNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIE5ldHdvcmsgQnVmZmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgbmFycm93ZWQgaXQgZG93bi4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYmV5b25kIGBDT05GSUdfSU9fVVJJTkdgIGFuZCBgQ09ORklHX05FVGAgZm9yIHRoaXMgcGF0Y2guIExldCYjMzk7cyBzdW1tYXJpemUgYW5kIHNvbGlkaWZ5IG15IGZpbmRpbmdzLgoKV29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBUaGUgcmVhc29uIGlzIGNyeXN0YWwgY2xlYXI6IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJiMzOTtzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2hlbiBoYW5kbGluZyBwcm92aWRlZCBidWZmZXJzIHZpYSBidWZmZXIgcmluZ3MuIEVzc2VudGlhbGx5LCB0aGUgZHluYW1pYyBpb3ZlYyBhcnJheSBleHBhbnNpb24gd2FzIGZsYXdlZC4gVGhlIG9yaWdpbmFsIGFycmF5IHdhcyBpbXByb3Blcmx5IGZyZWVkLCBhbmQgdGhlIG5ldyBvbmUgd2FzIGZyZWVkIHByZW1hdHVyZWx5LiBUaGlzIGxlZCB0byBhIGNsYXNzaWMgbWVtb3J5IGxlYWsgb24gdGhlIG9sZCBhcnJheSBhbmQgYSBzdWJzZXF1ZW50IHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgb24gdGhlIG5ldyBhcnJheS4KClRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcmU6IGBpb19yaW5nX2J1ZmZlcnNfcGVla2AsIGBpb19idWZmZXJzX3NlbGVjdGAsIGBpb19idWZmZXJzX3BlZWtgLCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCwgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLgoKV2UgbmVlZCB0byBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb25zOiBgSU9fVVJJTkdgIGFuZCBgTkVUYC4KCkhhbmcgb24sIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGlzLi4uIEkgcmVtZW1iZXIgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBpcyBzdGF0aWMuIFN5emthbGxlciBjYW4gZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIHJlYWNoYWJsZSB0aHJvdWdoIGEgY2FsbCBjaGFpbiBmcm9tIGEgc3lzY2FsbC4gQW5kLCBpbmRlZWQsIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgcGFydCBvZiB0aGUgYGlvX3VyaW5nX2VudGVyYCBjYWxsIHBhdGguIFRoYXQmIzM5O3MgZ29vZC4gV2FpdCBhIHNlY29uZCwgdGhlIG90aGVyIHR3byBzdGF0aWMgZnVuY3Rpb25zLCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCBhbmQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgYXJlIGFsc28gc3RhdGljLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aG9zZSBhcyB3ZWxsLgoKTGV0IG1lIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2ssIHJldmlld2luZyB0aGUgcGF0Y2ggY29kZSBhZ2FpbjoKYGBgYwotCWlmIChhcmctJmd0O21vZGUgJmFtcDsgS0JVRl9NT0RFX0ZSRUUpCi0JCWtmcmVlKGFyZy0mZ3Q7aW92cyk7CiYjNDM7CWlmICgoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKSAmYW1wOyZhbXA7IGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92cykKJiM0MzsJCWtmcmVlKG9yZ19pb3ZzKTsKYGBgClllcCwgZXhhY3RseSBhcyBJIGV4cGVjdGVkLiBUaGlzIG1hdGNoZXMgbXkgYW5hbHlzaXMgcGVyZmVjdGx5LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuIFRpbWUgdG8gY2FsbCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19zZW5kX3NlbGVjdF9idWZmZXImIzM0OywKICAgICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJiMzOTtzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2l0aCBwcm92aWRlZCBidWZmZXIgcmluZ3MuIFdoZW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaW92ZWMgYXJyYXkgaXMgZXhwYW5kZWQsIHRoZSBvbGQgYXJyYXkgd2FzIG5vdCBmcmVlZCBwcm9wZXJseSwgYW5kIHRoZSBuZXcgYXJyYXkgd2FzIGZyZWVkIGluc3RlYWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhayBvZiB0aGUgb2xkIGFycmF5IGFuZCBhIHVzZS1hZnRlci1mcmVlIG9mIHRoZSBuZXcgYXJyYXkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19zZW5kX3NlbGVjdF9idWZmZXImIzM0OywKICAgICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJiMzOTtzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2l0aCBwcm92aWRlZCBidWZmZXIgcmluZ3MuIFdoZW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaW92ZWMgYXJyYXkgaXMgZXhwYW5kZWQsIHRoZSBvbGQgYXJyYXkgd2FzIG5vdCBmcmVlZCBwcm9wZXJseSwgYW5kIHRoZSBuZXcgYXJyYXkgd2FzIGZyZWVkIGluc3RlYWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhayBvZiB0aGUgb2xkIGFycmF5IGFuZCBhIHVzZS1hZnRlci1mcmVlIG9mIHRoZSBuZXcgYXJyYXkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MToxNi4zMDM3NjU2MjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTE2OTY5Mjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcmluZ19idWZmZXJzX3BlZWtcIixcbiAgICBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gICAgXCJpb19idWZmZXJzX3BlZWtcIixcbiAgICBcImlvX3NlbmRfc2VsZWN0X2J1ZmZlclwiLFxuICAgIFwiaW9fcmVjdl9idWZfc2VsZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBhbmQgbWVtb3J5IGxlYWsgaW4gaW9fdXJpbmcncyBuZXR3b3JrIHJlY2VpdmUvc2VuZCBvcGVyYXRpb25zIHdpdGggcHJvdmlkZWQgYnVmZmVyIHJpbmdzLiBXaGVuIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGlvdmVjIGFycmF5IGlzIGV4cGFuZGVkLCB0aGUgb2xkIGFycmF5IHdhcyBub3QgZnJlZWQgcHJvcGVybHksIGFuZCB0aGUgbmV3IGFycmF5IHdhcyBmcmVlZCBpbnN0ZWFkLCBsZWFkaW5nIHRvIGEgbWVtb3J5IGxlYWsgb2YgdGhlIG9sZCBhcnJheSBhbmQgYSB1c2UtYWZ0ZXItZnJlZSBvZiB0aGUgbmV3IGFycmF5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MToxNi4zMDM3NzA1MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTc5Nzc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk2Nzc5M2ZjNWUyZmUwYzM5MjM0MmMxMGY0Y2ZhMDliN2M1MmNjNTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTY6NTE6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXFxuaW5kZXggYjZiOTY5YjU1ZTEyMjQuLjA3ZDgxZGM3Y2JlMjk2IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xcbkBAIC0zMjgsOCArMzI4LDggQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuIFxcdFxcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsICsraGVhZCwgYmwtXFx1MDAzZW1hc2spO1xcbiBcXHR9IHdoaWxlICgtLW5yX2lvdnMpO1xcbiBcXG4tXFx0aWYgKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxcbi1cXHRcXHRrZnJlZShhcmctXFx1MDAzZWlvdnMpO1xcbitcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuK1xcdFxcdGtmcmVlKG9yZ19pb3ZzKTtcXG4gXFxuIFxcdGlmIChoZWFkID09IHRhaWwpXFxuIFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfRU1QVFk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUxOjE3LjA4NjIzMjE2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAzODcyMTA4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19idWZmZXJzX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJ3MgbmV0d29yayByZWNlaXZlL3NlbmQgb3BlcmF0aW9ucyB3aXRoIHByb3ZpZGVkIGJ1ZmZlciByaW5ncy4gV2hlbiBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBpb3ZlYyBhcnJheSBpcyBleHBhbmRlZCwgdGhlIG9sZCBhcnJheSB3YXMgbm90IGZyZWVkIHByb3Blcmx5LCBhbmQgdGhlIG5ldyBhcnJheSB3YXMgZnJlZWQgaW5zdGVhZCwgbGVhZGluZyB0byBhIG1lbW9yeSBsZWFrIG9mIHRoZSBvbGQgYXJyYXkgYW5kIGEgdXNlLWFmdGVyLWZyZWUgb2YgdGhlIG5ldyBhcnJheS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Njc3OTNmYzVlMmZlMGMzOTIzNDJjMTBmNGNmYTA5YjdjNTJjYzU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTY6NTE6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmNcbmluZGV4IGI2Yjk2OWI1NWUxMjI0Li4wN2Q4MWRjN2NiZTI5NiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xuKysrIGIvaW9fdXJpbmcva2J1Zi5jXG5AQCAtMzI4LDggKzMyOCw4IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCArK2hlYWQsIGJsLVx1MDAzZW1hc2spO1xuIFx0fSB3aGlsZSAoLS1ucl9pb3ZzKTtcbiBcbi1cdGlmIChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpXG4tXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbitcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG4rXHRcdGtmcmVlKG9yZ19pb3ZzKTtcbiBcbiBcdGlmIChoZWFkID09IHRhaWwpXG4gXHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9FTVBUWTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUxOjE3LjA4NjIzMzU5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTAzNjE0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpb191cmluZy9rYnVmLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBhIG1pbm9yIGNoYW5nZSB0byB0aGUgZnJlZWluZyBsb2dpYyBmb3Iga2VybmVsIGJ1ZmZlcnMuIEhtbSwgbGV0IG1lIHNlZS4uLiBpdCBzZWVtcyB0aGUgY29kZSBub3cgY2hlY2tzIGBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92c2AgYmVmb3JlIGNhbGxpbmcgYGtmcmVlYCB3aGVuIHRoZSBgS0JVRl9NT0RFX0ZSRUVgIGZsYWcgaXMgc2V0LiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgY29ycmVjdGlvbiByZWxhdGVkIHRvIG1hbmFnaW5nIG11bHRpcGxlIGlvdmVjIHBvaW50ZXJzLlxuXG5XYWl0IGEgbWludXRlLCBgb3JnX2lvdnNgPyBUaGF0IHZhcmlhYmxlIGlzbid0IGRlZmluZWQgKmhlcmUqIGluIHRoZSBkaWZmLiBXaGVyZSBpcyB0aGF0IGNvbWluZyBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGF0J3MgZGVjbGFyZWQgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgaW9fdXJpbmcva2J1Zi5jYC4gTGV0J3MgYXNzdW1lIGl0IGlzIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDMyOCwgSSdsbCBnbyB0YWtlIGEgbG9vayB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gdHJhY2tpbmcgb3IgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCBpb3ZlYyBzdHJ1Y3R1cmUuIE9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTE6MjIuMzc2NTk5ODY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2tidWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0cmVxLVxcdTAwM2VidWZfaW5kZXggPSBSRUFEX09OQ0UoYnVmLVxcdTAwM2ViaWQpO1xcbiAzMDE6XFx0XFx0ZG8ge1xcbiAzMDI6XFx0XFx0XFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXFx1MDAzZWxlbik7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdFxcdC8qIHRydW5jYXRlIGVuZCBwaWVjZSwgaWYgbmVlZGVkLCBmb3Igbm9uIHBhcnRpYWwgYnVmZmVycyAqL1xcbiAzMDU6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNlIGFyZy1cXHUwMDNlbWF4X2xlbikge1xcbiAzMDY6XFx0XFx0XFx0XFx0bGVuID0gYXJnLVxcdTAwM2VtYXhfbGVuO1xcbiAzMDc6XFx0XFx0XFx0XFx0aWYgKCEoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9JTkMpKSB7XFxuIDMwODpcXHRcXHRcXHRcXHRcXHRhcmctXFx1MDAzZXBhcnRpYWxfbWFwID0gMTtcXG4gMzA5OlxcdFxcdFxcdFxcdFxcdGlmIChpb3YgIT0gYXJnLVxcdTAwM2Vpb3ZzKVxcbiAzMTA6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDMxMTpcXHRcXHRcXHRcXHR9XFxuIDMxMjpcXHRcXHRcXHR9XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdFxcdGlvdi1cXHUwMDNlaW92X2Jhc2UgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlYWRkcikpO1xcbiAzMTU6XFx0XFx0XFx0aW92LVxcdTAwM2Vpb3ZfbGVuID0gbGVuO1xcbiAzMTY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFhY2Nlc3Nfb2soaW92LVxcdTAwM2Vpb3ZfYmFzZSwgbGVuKSkpIHtcXG4gMzE3OlxcdFxcdFxcdFxcdGlmIChhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuIDMxODpcXHRcXHRcXHRcXHRcXHRrZnJlZShhcmctXFx1MDAzZWlvdnMpO1xcbiAzMTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDMyMDpcXHRcXHRcXHR9XFxuIDMyMTpcXHRcXHRcXHRpb3YrKztcXG4gMzIyOlxcdFxcbiAzMjM6XFx0XFx0XFx0YXJnLVxcdTAwM2VvdXRfbGVuICs9IGxlbjtcXG4gMzI0OlxcdFxcdFxcdGFyZy1cXHUwMDNlbWF4X2xlbiAtPSBsZW47XFxuIDMyNTpcXHRcXHRcXHRpZiAoIWFyZy1cXHUwMDNlbWF4X2xlbilcXG4gMzI2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRcXHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCArK2hlYWQsIGJsLVxcdTAwM2VtYXNrKTtcXG4gMzI5OlxcdFxcdH0gd2hpbGUgKC0tbnJfaW92cyk7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdGlmICgoYXJnLVxcdTAwM2Vtb2RlIFxcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFxcdTAwMjZcXHUwMDI2IGFyZy1cXHUwMDNlaW92cyAhPSBvcmdfaW92cylcXG4gMzMyOlxcdFxcdFxcdGtmcmVlKG9yZ19pb3ZzKTtcXG4gMzMzOlxcdFxcbiAzMzQ6XFx0XFx0aWYgKGhlYWQgPT0gdGFpbClcXG4gMzM1OlxcdFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfRU1QVFk7XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQlVGRkVSX1JJTkc7XFxuIDMzODpcXHRcXHRyZXR1cm4gaW92IC0gYXJnLVxcdTAwM2Vpb3ZzO1xcbiAzMzk6XFx0fVxcbiAzNDA6XFx0XFxuIDM0MTpcXHRpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiAzNDI6XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIDM0MzpcXHR7XFxuIDM0NDpcXHRcXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbiAzNDU6XFx0XFx0aW50IHJldCA9IC1FTk9FTlQ7XFxuIDM0NjpcXHRcXG4gMzQ3OlxcdFxcdGlvX3Jpbmdfc3VibWl0X2xvY2soY3R4LCBpc3N1ZV9mbGFncyk7XFxuIDM0ODpcXHRcXHRzZWwtXFx1MDAzZWJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KGN0eCwgYXJnLVxcdTAwM2VidWZfZ3JvdXApO1xcbiAzNDk6XFx0XFx0aWYgKHVubGlrZWx5KCFzZWwtXFx1MDAzZWJ1Zl9saXN0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTE6MjIuMzc2NzQ1NTc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MzY1NjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaW9fcmluZ19idWZmZXJzX3BlZWtgIFBhdGNoKipcblxuQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCB3aXRoaW4gYGlvX3VyaW5nL2tidWYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoYXQncyBiZWluZyB0d2Vha2VkIGluIHRoaXMgY3JpdGljYWwgcGF0aD9cIiBUaGVuLCB0aGUgbWVudGlvbiBvZiBgb3JnX2lvdnNgIHRyaWdnZXJlZCBhIG1lbnRhbCBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGlzIGJlaW5nIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIG9mIGBvcmdfaW92c2AsIHdoaWNoIGlzIGxpa2VseSBhIGtleSBhc3BlY3QgdG8gdGhlIHdvcmsuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3Vic3lzdGVtLiBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGlvdiBtYW5hZ2VtZW50IG9yIHVzZS1jYXNlIHdpdGggdGhvc2UgaW92cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTE6MjYuNTUwNDA0ODI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9rYnVmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdC8qIGNhcCBpdCBhdCBhIHJlYXNvbmFibGUgMjU2LCB3aWxsIGJlIG9uZSBwYWdlIGV2ZW4gZm9yIDRLICovXFxuIDI1MTpcXHQjZGVmaW5lIFBFRUtfTUFYX0lNUE9SVFxcdFxcdDI1NlxcbiAyNTI6XFx0XFxuIDI1MzpcXHRzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4gMjU0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXFxuIDI1NTpcXHR7XFxuIDI1NjpcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfYnVmX3JpbmcgKmJyID0gYmwtXFx1MDAzZWJ1Zl9yaW5nO1xcbiAyNTc6XFx0XFx0c3RydWN0IGlvdmVjICpvcmdfaW92cyA9IGFyZy1cXHUwMDNlaW92cztcXG4gMjU4OlxcdFxcdHN0cnVjdCBpb3ZlYyAqaW92ID0gYXJnLVxcdTAwM2Vpb3ZzO1xcbiAyNTk6XFx0XFx0aW50IG5yX2lvdnMgPSBhcmctXFx1MDAzZW5yX2lvdnM7XFxuIDI2MDpcXHRcXHRfX3UxNiBucl9hdmFpbCwgdGFpbCwgaGVhZDtcXG4gMjYxOlxcdFxcdHN0cnVjdCBpb191cmluZ19idWYgKmJ1ZjtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0dGFpbCA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmJyLVxcdTAwM2V0YWlsKTtcXG4gMjY0OlxcdFxcdGhlYWQgPSBibC1cXHUwMDNlaGVhZDtcXG4gMjY1OlxcdFxcdG5yX2F2YWlsID0gbWluX3QoX191MTYsIHRhaWwgLSBoZWFkLCBVSU9fTUFYSU9WKTtcXG4gMjY2OlxcdFxcdGlmICh1bmxpa2VseSghbnJfYXZhaWwpKVxcbiAyNjc6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiAyNjg6XFx0XFxuIDI2OTpcXHRcXHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCBoZWFkLCBibC1cXHUwMDNlbWFzayk7XFxuIDI3MDpcXHRcXHRpZiAoYXJnLVxcdTAwM2VtYXhfbGVuKSB7XFxuIDI3MTpcXHRcXHRcXHR1MzIgbGVuID0gUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlbGVuKTtcXG4gMjcyOlxcdFxcdFxcdHNpemVfdCBuZWVkZWQ7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghbGVuKSlcXG4gMjc1OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gMjc2OlxcdFxcdFxcdG5lZWRlZCA9IChhcmctXFx1MDAzZW1heF9sZW4gKyBsZW4gLSAxKSAvIGxlbjtcXG4gMjc3OlxcdFxcdFxcdG5lZWRlZCA9IG1pbl9ub3RfemVybyhuZWVkZWQsIChzaXplX3QpIFBFRUtfTUFYX0lNUE9SVCk7XFxuIDI3ODpcXHRcXHRcXHRpZiAobnJfYXZhaWwgXFx1MDAzZSBuZWVkZWQpXFxuIDI3OTpcXHRcXHRcXHRcXHRucl9hdmFpbCA9IG5lZWRlZDtcXG4gMjgwOlxcdFxcdH1cXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0LypcXG4gMjgzOlxcdFxcdCAqIG9ubHkgYWxsb2MgYSBiaWdnZXIgYXJyYXkgaWYgd2Uga25vdyB3ZSBoYXZlIGRhdGEgdG8gbWFwLCBlZyBub3RcXG4gMjg0OlxcdFxcdCAqIGEgc3BlY3VsYXRpdmUgcGVlayBvcGVyYXRpb24uXFxuIDI4NTpcXHRcXHQgKi9cXG4gMjg2OlxcdFxcdGlmIChhcmctXFx1MDAzZW1vZGUgXFx1MDAyNiBLQlVGX01PREVfRVhQQU5EIFxcdTAwMjZcXHUwMDI2IG5yX2F2YWlsIFxcdTAwM2UgbnJfaW92cyBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZW1heF9sZW4pIHtcXG4gMjg3OlxcdFxcdFxcdGlvdiA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW92ZWMsIG5yX2F2YWlsKTtcXG4gMjg4OlxcdFxcdFxcdGlmICh1bmxpa2VseSghaW92KSlcXG4gMjg5OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyOTA6XFx0XFx0XFx0YXJnLVxcdTAwM2Vpb3ZzID0gaW92O1xcbiAyOTE6XFx0XFx0XFx0bnJfaW92cyA9IG5yX2F2YWlsO1xcbiAyOTI6XFx0XFx0fSBlbHNlIGlmIChucl9hdmFpbCBcXHUwMDNjIG5yX2lvdnMpIHtcXG4gMjkzOlxcdFxcdFxcdG5yX2lvdnMgPSBucl9hdmFpbDtcXG4gMjk0OlxcdFxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0Lyogc2V0IGl0IHRvIG1heCwgaWYgbm90IHNldCwgc28gd2UgY2FuIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkgKi9cXG4gMjk3OlxcdFxcdGlmICghYXJnLVxcdTAwM2VtYXhfbGVuKVxcbiAyOTg6XFx0XFx0XFx0YXJnLVxcdTAwM2VtYXhfbGVuID0gSU5UX01BWDtcXG4gMjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MToyNi41NTE3MDI1MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTQ3NzMxNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBvciBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciBpbnZhbGlkIGZyZWUgc2l0dWF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6XG5cbmBgYGNcbmlmIChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpXG4gICAga2ZyZWUoYXJnLVx1MDAzZWlvdnMpO1xuYGBgXG5cblJpZ2h0LCBpZiBgYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQsIGl0J3MgdGVsbGluZyB1cyB0aGUgY2FsbGVyIHdhbnRzIHVzIHRvIGZyZWUgYGFyZy1cdTAwM2Vpb3ZzYC4gQnV0IHdhaXQsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBhIGxpdHRsZSB0cmlja3kuIEkgbmVlZCB0byB0cmFjZSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugb2YgYGFyZy1cdTAwM2Vpb3ZzYC4gXG5cbk9rYXksIGluIHRoaXMgZnVuY3Rpb24gYGFyZy1cdTAwM2Vpb3ZzYCBpcyBlaXRoZXIgcGFzc2VkIGluIG9yIGFsbG9jYXRlZCBoZXJlLiBgaW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgbnJfYXZhaWwpOyBhcmctXHUwMDNlaW92cyA9IGlvdjtgIFNvLCBpZiBgYXJnLVx1MDAzZWlvdnNgICp3YXMqIGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBhbmQgbGF0ZXIgZnJlZWQsIHRoZW4gdGhlIGNhbGxlciB3b3VsZCBiZSBleHBlY3RpbmcgdXMgdG8gdGFrZSBjYXJlIG9mIGl0IHdpdGggdGhlIGBLQlVGX01PREVfRlJFRWAgYml0LlxuXG5UaGUga2V5IGlzIHRoaXMgbGluZTogYGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpYC4gU28sIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYGtmcmVlYCBjYWxsIHRvIGBrZnJlZShvcmdfaW92cylgLiBPa2F5LCBzbyBgb3JnX2lvdnNgIG11c3QgYmUgdGhlIG9yaWdpbmFsIHBvaW50ZXIgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuIElmIGBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92c2AgaW4gdGhlIG5ldyBjb2RlLCB0aGVuIGBhcmctXHUwMDNlaW92c2Agd2FzIG5ld2x5IGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gVGhlIHBhdGNoIGlzIHRoZW4gb25seSBmcmVlaW5nIGBvcmdfaW92c2AgaWYgaXQgd2FzIHBhc3NlZCBpbiBhbmQgYGFyZy1cdTAwM2Vpb3ZzYCB3YXMgbmV3bHkgYWxsb2NhdGVkLlxuXG5TbywgaWYgYGFyZy1cdTAwM2Vpb3ZzYCBpcyBhbGxvY2F0ZWQgaW4gdGhlIGZ1bmN0aW9uLCBhbmQgYGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRlJFRWAgaXMgc2V0LCB0aGUgY29ycmVjdCB0aGluZyB0byBkbyBpcyBmcmVlIHRoZSAqb3JpZ2luYWwqIGBhcmctXHUwMDNlaW92c2AgYmVjYXVzZSB0aGUgY2FsbGVyIGlzIHN0aWxsIGV4cGVjdGluZyB0byBmcmVlIHRoZSAqbmV3KiBgYXJnLVx1MDAzZWlvdnNgLiBJZiB3ZSBkb24ndCBmcmVlIGBvcmdfaW92c2AsIHdlIGxlYWsgbWVtb3J5LiBJZiB3ZSAqZG8qIGZyZWUgdGhlIGFsbG9jYXRlZCBgYXJnLVx1MDAzZWlvdnNgLCB3ZSdyZSBkb3VibGUtZnJlZWluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhlIGZpcnN0IGNhc2UuIEkgbmVlZCB0byBjb25maXJtIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIG1ha2VzIHNlbnNlLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgY2xhc3NpYyBjYXNlIHdoZXJlIGFuIGludGVybWVkaWF0ZSBhbGxvY2F0aW9uIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgb3IgeW91J2xsIGhhdmUgYSBsZWFrLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXIgb2YgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIGl0IGNhbGxzIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTozNS42OTk0Mzc1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzcwNDQ3NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0yMzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0yNTItXFxuaW9fdXJpbmcva2J1Zi5jOjI1MzpzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMjU0LVxcdFxcdFxcdFxcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzQxPWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzUyLVxcdGlmIChzZWwtXFx1MDAzZWJ1Zl9saXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcXG5pb191cmluZy9rYnVmLmM6MzUzOlxcdFxcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9rYnVmLmMtMzU0LVxcdFxcdC8qXFxuLS1cXG5pb191cmluZy9rYnVmLmM9Mzc3PWludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM5MC1cXHRpZiAoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORykge1xcbmlvX3VyaW5nL2tidWYuYzozOTE6XFx0XFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIGJsKTtcXG5pb191cmluZy9rYnVmLmMtMzkyLVxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTo0Mi4wNjk4OTM4MzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjEzMDMwMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGJlaGF2aW9yIGFuZCBob3cgdGhleSBpbnRlcmFjdCwgbGlrZWx5IGluIHRoZSBjb250ZXh0IG9mIHNvbWUga2luZCBvZiBhc3luY2hyb25vdXMgSS9PIHNldHVwLiBJJ20gaW1hZ2luaW5nIGBzZWxlY3RgIGlzIGJlaW5nIHVzZWQgdG8gbm9uLWJsb2NraW5nbHkgbW9uaXRvciB0aGUgcmVhZGluZXNzIG9mIEkvTyBidWZmZXJzLCBwcm9iYWJseSBmb3IgcmVhZGluZyBvciB3cml0aW5nLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIG1lY2hhbmlzbSBpdCBpcyB1c2luZywgd2hldGhlciBpdCdzIHRpZWQgdG8gYW4gZXZlbnQgbG9vcCBvciBzb21ldGhpbmcgZWxzZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGBwZWVrYCBpcyBpbXBsZW1lbnRlZCByZWxhdGl2ZSB0byBgc2VsZWN0YC0tcGVyaGFwcyBgcGVla2AgaGVscHMgZXhhbWluZSBidWZmZXIgY29udGVudHMgd2l0aG91dCBjb25zdW1pbmcgdGhlIGRhdGEsIGJ1dCBvbmx5IGFmdGVyIGl04oCZcyBiZWVuIGNvbmZpcm1lZCByZWFkeSB0byByZWFkIGJ5IGBzZWxlY3RgLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyBgc2VsZWN0YCBoYW5kbGVzIHBhcnRpYWwgcmVhZHMvd3JpdGVzLCBhbmQgaWYgYHBlZWtgIGlzIGFmZmVjdGVkIGJ5IHN1Y2ggc2NlbmFyaW9zLiBUaGlua2luZyBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaXMga2V5LiBUaW1lIHRvIGdldCBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTE6NDYuNjgyOTI3NTg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9rYnVmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQxOlxcdGludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuIDM0MjpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gMzQzOlxcdHtcXG4gMzQ0OlxcdFxcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVxcdTAwM2VjdHg7XFxuIDM0NTpcXHRcXHRpbnQgcmV0ID0gLUVOT0VOVDtcXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0aW9fcmluZ19zdWJtaXRfbG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG4gMzQ4OlxcdFxcdHNlbC1cXHUwMDNlYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QoY3R4LCBhcmctXFx1MDAzZWJ1Zl9ncm91cCk7XFxuIDM0OTpcXHRcXHRpZiAodW5saWtlbHkoIXNlbC1cXHUwMDNlYnVmX2xpc3QpKVxcbiAzNTA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRpZiAoc2VsLVxcdTAwM2VidWZfbGlzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT0JMX0JVRl9SSU5HKSB7XFxuIDM1MzpcXHRcXHRcXHRyZXQgPSBpb19yaW5nX2J1ZmZlcnNfcGVlayhyZXEsIGFyZywgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIDM1NDpcXHRcXHRcXHQvKlxcbiAzNTU6XFx0XFx0XFx0ICogRG9uJ3QgcmVjeWNsZSB0aGVzZSBidWZmZXJzIGlmIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCBwb2xsLlxcbiAzNTY6XFx0XFx0XFx0ICogTm9ib2R5IGVsc2UgY2FuIHVzZSB0aGVtIGFueXdheSwgYW5kIGhvbGRpbmcgb24gdG8gcHJvdmlkZWRcXG4gMzU3OlxcdFxcdFxcdCAqIGJ1ZmZlcnMgZm9yIGEgc2VuZC93cml0ZSBvcGVyYXRpb24gd291bGQgaGFwcGVuIG9uIHRoZSBhcHBcXG4gMzU4OlxcdFxcdFxcdCAqIHNpZGUgYW55d2F5IHdpdGggbm9ybWFsIGJ1ZmZlcnMuIEJlc2lkZXMsIHdlIGFscmVhZHlcXG4gMzU5OlxcdFxcdFxcdCAqIGNvbW1pdHRlZCB0aGVtLCB0aGV5IGNhbm5vdCBiZSBwdXQgYmFjayBpbiB0aGUgcXVldWUuXFxuIDM2MDpcXHRcXHRcXHQgKi9cXG4gMzYxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuIDM2MjpcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRkZFUlNfQ09NTUlUIHwgUkVRX0ZfQkxfTk9fUkVDWUNMRTtcXG4gMzYzOlxcdFxcdFxcdFxcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBhcmctXFx1MDAzZW91dF9sZW4sIHJldCkpXFxuIDM2NDpcXHRcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xcbiAzNjU6XFx0XFx0XFx0fVxcbiAzNjY6XFx0XFx0fSBlbHNlIHtcXG4gMzY3OlxcdFxcdFxcdHJldCA9IGlvX3Byb3ZpZGVkX2J1ZmZlcnNfc2VsZWN0KHJlcSwgXFx1MDAyNmFyZy1cXHUwMDNlb3V0X2xlbiwgc2VsLVxcdTAwM2VidWZfbGlzdCwgYXJnLVxcdTAwM2Vpb3ZzKTtcXG4gMzY4OlxcdFxcdH1cXG4gMzY5OlxcdG91dF91bmxvY2s6XFxuIDM3MDpcXHRcXHRpZiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSB7XFxuIDM3MTpcXHRcXHRcXHRzZWwtXFx1MDAzZWJ1Zl9saXN0ID0gTlVMTDtcXG4gMzcyOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKTtcXG4gMzczOlxcdFxcdH1cXG4gMzc0OlxcdFxcdHJldHVybiByZXQ7XFxuIDM3NTpcXHR9XFxuIDM3NjpcXHRcXG4gMzc3OlxcdGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiAzNzg6XFx0XFx0XFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcXG4gMzc5OlxcdHtcXG4gMzgwOlxcdFxcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVxcdTAwM2VjdHg7XFxuIDM4MTpcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsO1xcbiAzODI6XFx0XFx0aW50IHJldDtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKTtcXG4gMzg1OlxcdFxcbiAzODY6XFx0XFx0YmwgPSBpb19idWZmZXJfZ2V0X2xpc3QoY3R4LCBhcmctXFx1MDAzZWJ1Zl9ncm91cCk7XFxuIDM4NzpcXHRcXHRpZiAodW5saWtlbHkoIWJsKSlcXG4gMzg4OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAzODk6XFx0XFxuIDM5MDpcXHRcXHRpZiAoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTo0Ni42ODMwMzU3MzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1NjgzMDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgS0JVRl9NT0RFX0ZSRUUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYEtCVUZfTU9ERV9GUkVFYC4gU2VlbXMgbGlrZSB0aGUgYmVzdCBmaXJzdCBzdGVwIGlzIHRvIGxvY2F0ZSAqd2hlcmUqIHRoaXMgZmxhZyBpcyBhY3R1YWxseSBiZWluZyBzZXQuIEtub3dpbmcgdGhlIGluaXRpYWwgY29udGV4dCBpcyBjcml0aWNhbDsgaXQnbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIHN1YnNlcXVlbnQgY29kZS4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIG9yIHJlYWxseSBhbnl0aGluZyBlbHNlIEkgbmVlZCB0byBkbyB3aXRoIHRoaXMgY29kZS4gU28sIGxldCdzIHN0YXJ0IHdpdGggYSBzb2xpZCBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2guIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBLQlVGX01PREVfRlJFRWAgaXMgYXNzaWduZWQgYSB2YWx1ZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBsYXJnZXIgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzIwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTo1MS4yMzk4NjkwODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQ5Mjg5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS0JVRl9NT0RFX0ZSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zMzAtXFxuaW9fdXJpbmcva2J1Zi5jOjMzMTpcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuaW9fdXJpbmcva2J1Zi5jLTMzMi1cXHRcXHRrZnJlZShvcmdfaW92cyk7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9NTM9ZW51bSB7XFxuLS1cXG5pb191cmluZy9rYnVmLmgtNTYtXFx0LyogaWYgYmlnZ2VyIHZlYyBhbGxvY2F0ZWQsIGZyZWUgb2xkIG9uZSAqL1xcbmlvX3VyaW5nL2tidWYuaDo1NzpcXHRLQlVGX01PREVfRlJFRVxcdFxcdD0gMixcXG5pb191cmluZy9rYnVmLmgtNTgtfTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTYwOD1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNjIyLVxcdFxcdGFyZy5pb3ZzID0ga21zZy1cXHUwMDNldmVjLmlvdmVjO1xcbmlvX3VyaW5nL25ldC5jOjYyMzpcXHRcXHRhcmcubW9kZSA9IEtCVUZfTU9ERV9GUkVFO1xcbmlvX3VyaW5nL25ldC5jLTYyNC1cXHR9XFxuLS1cXG5pb191cmluZy9uZXQuYz0xMTM3PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTE1OS1cXHRcXHRcXHRhcmcuaW92cyA9IGttc2ctXFx1MDAzZXZlYy5pb3ZlYztcXG5pb191cmluZy9uZXQuYzoxMTYwOlxcdFxcdFxcdGFyZy5tb2RlIHw9IEtCVUZfTU9ERV9GUkVFO1xcbmlvX3VyaW5nL25ldC5jLTExNjEtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTo1NS41OTQ4MDUzMzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NDg3NTI5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgQnVnIEZpeDogS0JVRl9NT0RFX0ZSRUUgYW5kIFZlY3RvciBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYEtCVUZfTU9ERV9GUkVFYC4uLiB0aGF0J3MgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgXCJpZiB0aGUgdmVjdG9yIGlzIGV4cGFuZGVkLCBmcmVlIHRoZSBvcmlnaW5hbCBvbmVcIi4gUmlnaHQsIGdvdCBpdC4gTGV0IG1lIHRoaW5rLiBMb29raW5nIGF0IHRoZSBvbGQgY29kZSwgaXQgdXNlZCB0byBiZSBhIHNpbXBsZSBga2ZyZWUoYXJnLVx1MDAzZWlvdnMpYCBpZiB0aGUgYEtCVUZfTU9ERV9GUkVFYCBiaXQgd2FzIHNldC4gQnV0IGhvbGQgb24sIGBhcmctXHUwMDNlaW92c2AgY291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCB2ZWN0b3IgZHVlIHRvIGFuIGV4cGFuc2lvbiwgYW5kIHRoYXQncyB0aGUgcHJvYmxlbS5cblxuU3BlY2lmaWNhbGx5LCBpZiBgS0JVRl9NT0RFX0VYUEFORGAgd2FzIHNldCwgYW5kIHdlIGhhZCB0byBhbGxvY2F0ZSBhIG5ldyB2ZWN0b3IsIHRoZSBjb2RlIGRvZXM6IGBhcmctXHUwMDNlaW92cyA9IGlvdjtgIFNvLCBpZiBgS0JVRl9NT0RFX0ZSRUVgIHdhcyB0aGVuIGFsc28gc2V0LCB0aGUgbGF0ZXIgYGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKWAgd291bGQgZnJlZSB0aGUgKm5ldyogdmVjdG9yLCBub3QgdGhlIG9sZCBvbmUuIE1lYW5pbmcgd2UncmUgbGVha2luZyB0aGUgb2xkIG9uZSBhbmQgdGhlIGNhbGxlciB3b3VsZCB0aGVuIGJlIHVzaW5nIGEgZnJlZWQgdmVjdG9yLiBZaWtlcyEgVGhhdCdzIGEgdXNlLWFmdGVyLWZyZWUgKmFuZCogYSBtZW1vcnkgbGVhayFcblxuQnV0IHRoZXJlJ3MgbW9yZS4gV2hhdCBpZiBgS0JVRl9NT0RFX0ZSRUVgIHdhcyBzZXQsIGJ1dCB0aGUgdmVjdG9yIHdhc24ndCBhY3R1YWxseSBleHBhbmRlZD8gVGhlbiB0aGUgY29kZSB3YXMgZnJlZWluZyB0aGUgY2FsbGVyJ3MgKm9yaWdpbmFsKiBgYXJnLVx1MDAzZWlvdnNgIHZlY3Rvciwgd2hpY2ggdGhleSdyZSBzdGlsbCB1c2luZyEgVGhhdCBpcyBhbHNvIGEgZGlzYXN0ZXIuIE5vdyBJIGdldCBpdDogYEtCVUZfTU9ERV9GUkVFYCBtZWFucyBcInRoZSBjYWxsZXIgaGFuZGVkIG1lIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHZlY3RvciwgYW5kIGlmIEkgZXhwYW5kIGl0LCBmcmVlIHRoZSBvbGQgb25lXCIuXG5cblRoZSBmaXggaXMgbm93IHRoaXM6IGBpZiAoKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRlJFRSkgXHUwMDI2XHUwMDI2IGFyZy1cdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKSBrZnJlZShvcmdfaW92cyk7YCB3aGljaCBjb3JyZWN0bHkgZnJlZXMgdGhlICpvbGQqIHZlY3RvciAoYG9yZ19pb3ZzYCkgKm9ubHkqIGlmIGEgbmV3IHZlY3RvciB3YXMgYWxsb2NhdGVkIChgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnNgKS4gTXVjaCBiZXR0ZXIhIFRoaXMgY2xlYW5seSBmaXhlcyB0aGUgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIHRoZSBpb191cmluZyBuZXR3b3JrIHJlY2VpdmUvc2VuZCB3aXRoIHByb3ZpZGVkIGJ1ZmZlcnMuXG5cblNvLCBpcyB0aGlzIGZpeCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYGlvX2J1ZmZlcnNfcGVla2AsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLCBhbmQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAuIEhhbmcgb24sIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgc3RhdGljLCBJIGNhbiB3b3JrIGFyb3VuZCB0aGF0LiBJJ2xsIGluY2x1ZGUgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBBbmQgbWFrZSBzdXJlIGBDT05GSUdfSU9fVVJJTkdgIGlzIGVuYWJsZWQuIEl0IHByb2JhYmx5IGlzLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBpb191cmluZy9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MjowNi4yNDM1NjA5NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTk0MzUzMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTU0PWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTYxLVxcbmluaXQvS2NvbmZpZzoxOTYyOmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTYzLVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTcxPWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTgzLVxcbmluaXQvS2NvbmZpZzoxOTg0OmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk4NS1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy01LVxcbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxcbmlvX3VyaW5nL0tjb25maWctNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjA5LjI0MzAxNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1ODMwNzMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSB0aGUgYENPTkZJR19JT19VUklOR2Agc2V0dGluZyDigJMgdGhhdCdzIHRoZSBiaWcgb25lIHRvIHN0YXJ0IHdpdGguIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3VyaW5nL2tidWYuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBmaXJzdC5cblxuTGV0J3MgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBidWcgaXRzZWxmIGlzIGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AsIHdoaWNoIGlzIG9idmlvdXNseSB0aWVkIHRvIGJ1ZmZlciByaW5ncy4gQW5kIGJ1ZmZlciByaW5ncywgb2YgY291cnNlLCBhcmUgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eS5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3QsIGFyZSB0aGVyZSBhbnkgbmV0d29yay1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHBsYXkgYSByb2xlIGhlcmUgd2l0aGluIGlvX3VyaW5nPyBIbW0sIEkgc2VlIHRoYXQgYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkLiBUaGF0IG1ha2VzIG1lIHdhbnQgdG8gZXhhbWluZSBgaW9fdXJpbmcvbmV0LmNgIGNsb3NlbHkgYXMgd2VsbC4gVGhpcyB3aWxsIGhlbHAgdG8gdW5kZXJzdGFuZCBhbnkgbmV0d29yay1yZWxhdGVkIGltcGxpY2F0aW9ucyBvZiB0aGlzIGJ1ZywgcGFydGljdWxhcmx5IGlmIG5ldHdvcmsgYnVmZmVyIHJpbmdzIGFyZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk4MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MjoxMy41MDEzMjU5MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDAxODg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfRVBPTEwpXFx0XFx0Kz0gZXBvbGwub1xcbmlvX3VyaW5nL01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxcdCs9IG5hcGkub1xcbmlvX3VyaW5nL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORVQpICs9IG5ldC5vIGNtZF9uZXQub1xcbmlvX3VyaW5nL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBmZGluZm8ub1xcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMTktXFxuaW9fdXJpbmcvZmRpbmZvLmM6MjA6I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXFxuaW9fdXJpbmcvZmRpbmZvLmMtMjEtc3RhdGljIF9fY29sZCB2b2lkIGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MTI4PXN0cnVjdCBpb193YWl0X3F1ZXVlIHtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTM4LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MTM5OiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTQwLVxcdGt0aW1lX3QgbmFwaV9idXN5X3BvbGxfZHQ7XFxuLS1cXG5pb191cmluZy9uYXBpLmMtNS1cXG5pb191cmluZy9uYXBpLmM6NjojaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcXG5pb191cmluZy9uYXBpLmMtNy1cXG4tLVxcbmlvX3VyaW5nL25hcGkuaC05LVxcbmlvX3VyaW5nL25hcGkuaDoxMDojaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcXG5pb191cmluZy9uYXBpLmgtMTEtXFxuLS1cXG5pb191cmluZy9uYXBpLmg9ODQ9c3RhdGljIGlubGluZSBpbnQgaW9fbmFwaV9zcXBvbGxfYnVzeV9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvbmFwaS5oLTg3LX1cXG5pb191cmluZy9uYXBpLmg6ODg6I2VuZGlmIC8qIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMICovXFxuaW9fdXJpbmcvbmFwaS5oLTg5LVxcbi0tXFxuaW9fdXJpbmcvbmV0Lmg9OD1zdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyIHtcXG5pb191cmluZy9uZXQuaDo5OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvbmV0LmgtMTAtXFx0c3RydWN0IGlvdV92ZWNcXHRcXHRcXHRcXHR2ZWM7XFxuLS1cXG5pb191cmluZy9uZXQuaC0yNS1cXG5pb191cmluZy9uZXQuaDoyNjojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL25ldC5oLTI3LVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMTQyLVxcdFxcdC5pb3ByaW9cXHRcXHRcXHQ9IDEsXFxuaW9fdXJpbmcvb3BkZWYuYzoxNDM6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTE0NC1cXHRcXHQuYXN5bmNfc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy0xNTYtXFx0XFx0LmlvcHJpb1xcdFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjE1NzojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtMTU4LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTE4Mi1cXHRcXHQuaW9wcmlvXFx0XFx0XFx0PSAxLFxcdC8qIHVzZWQgZm9yIGZsYWdzICovXFxuaW9fdXJpbmcvb3BkZWYuYzoxODM6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTE4NC1cXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fYWNjZXB0X3ByZXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTIwNC1cXHRcXHQucG9sbG91dFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjIwNTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtMjA2LVxcdFxcdC5maWx0ZXJfcGR1X3NpemVcXHQ9IHNpemVvZl9maWVsZChzdHJ1Y3QgaW9fdXJpbmdfYnBmX2N0eCwgY29ubmVjdCksXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTI4NS1cXHRcXHQuYnVmZmVyX3NlbGVjdFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjI4NjojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtMjg3LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTMwMC1cXHRcXHQuaW9wcmlvXFx0XFx0XFx0PSAxLFxcbmlvX3VyaW5nL29wZGVmLmM6MzAxOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy0zMDItXFx0XFx0LmFzeW5jX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMzU0LVxcdFxcdC5uZWVkc19maWxlXFx0XFx0PSAxLFxcbmlvX3VyaW5nL29wZGVmLmM6MzU1OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy0zNTYtXFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3NodXRkb3duX3ByZXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTQwNy1cXHRcXHQuYXVkaXRfc2tpcFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjQwODojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtNDA5LVxcdFxcdC5maWx0ZXJfcGR1X3NpemVcXHQ9IHNpemVvZl9maWVsZChzdHJ1Y3QgaW9fdXJpbmdfYnBmX2N0eCwgc29ja2V0KSxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNDMxLVxcdFxcdC5pb3ByaW9cXHRcXHRcXHQ9IDEsXFxuaW9fdXJpbmcvb3BkZWYuYzo0MzI6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTQzMy1cXHRcXHQuYXN5bmNfc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy00NDQtXFx0XFx0LmlvcHJpb1xcdFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjQ0NTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtNDQ2LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTUwMy1cXHRbSU9SSU5HX09QX0JJTkRdID0ge1xcbmlvX3VyaW5nL29wZGVmLmM6NTA0OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy01MDUtXFx0XFx0Lm5lZWRzX2ZpbGVcXHRcXHQ9IDEsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTUxMy1cXHRbSU9SSU5HX09QX0xJU1RFTl0gPSB7XFxuaW9fdXJpbmcvb3BkZWYuYzo1MTQ6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTUxNS1cXHRcXHQubmVlZHNfZmlsZVxcdFxcdD0gMSxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNTI3LVxcdFxcdC5pb3ByaW9cXHRcXHRcXHQ9IDEsXFxuaW9fdXJpbmcvb3BkZWYuYzo1Mjg6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTUyOS1cXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fcmVjdnpjX3ByZXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jPTU5Nj1jb25zdCBzdHJ1Y3QgaW9fY29sZF9kZWYgaW9fY29sZF9kZWZzW10gPSB7XFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTYzMy1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIlNFTkRNU0dcXFwiLFxcbmlvX3VyaW5nL29wZGVmLmM6NjM0OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy02MzUtXFx0XFx0LmNsZWFudXBcXHRcXHQ9IGlvX3NlbmRtc2dfcmVjdm1zZ19jbGVhbnVwLFxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy02NDAtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSRUNWTVNHXFxcIixcXG5pb191cmluZy9vcGRlZi5jOjY0MTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtNjQyLVxcdFxcdC5jbGVhbnVwXFx0XFx0PSBpb19zZW5kbXNnX3JlY3Ztc2dfY2xlYW51cCxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNjk4LVxcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiU0VORFxcXCIsXFxuaW9fdXJpbmcvb3BkZWYuYzo2OTk6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTcwMC1cXHRcXHQuY2xlYW51cFxcdFxcdD0gaW9fc2VuZG1zZ19yZWN2bXNnX2NsZWFudXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTcwNS1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIlJFQ1ZcXFwiLFxcbmlvX3VyaW5nL29wZGVmLmM6NzA2OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy03MDctXFx0XFx0LmNsZWFudXBcXHRcXHQ9IGlvX3NlbmRtc2dfcmVjdm1zZ19jbGVhbnVwLFxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy03ODQtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJTRU5EX1pDXFxcIixcXG5pb191cmluZy9vcGRlZi5jOjc4NTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtNzg2LVxcdFxcdC5jbGVhbnVwXFx0XFx0PSBpb19zZW5kX3pjX2NsZWFudXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTc5MS1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIlNFTkRNU0dfWkNcXFwiLFxcbmlvX3VyaW5nL29wZGVmLmM6NzkyOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy03OTMtXFx0XFx0LmNsZWFudXBcXHRcXHQ9IGlvX3NlbmRfemNfY2xlYW51cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTI6MTQuMDA1MzUxNjg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0OTU0MDU0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpb191cmluZ2AgQnVnIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aHJvdWdoIHRoaXMgYGlvX3VyaW5nYCBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX05FVGAgaXMgZXNzZW50aWFsIGZvciBjb21waWxpbmcgYGlvX3VyaW5nL25ldC5jYCwgd2hpY2ggaXMgYSBrZXkgZGVwZW5kZW5jeSBoZXJlLiBUaGUgYWN0dWFsIGJ1ZydzIGNvZGUgaXMgaW4gYGlvX3VyaW5nL2tidWYuY2AsIHdoaWNoIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgYnV0IHRoZSBjcnVjaWFsIGBLQlVGX01PREVfRlJFRWAgZmxhZyBpcyAqb25seSogdXNlZCB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgdGhhdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlLi4uIEkgZGlkIHJ1biBhIGBncmVwYCBmb3IgYEtCVUZfTU9ERV9GUkVFYCBlYXJsaWVyOlxuXG5gYGBcbmlvX3VyaW5nL2tidWYuYzoyNTM6c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmM6MzMxOlx0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcbmlvX3VyaW5nL2tidWYuaDo1NzpcdEtCVUZfTU9ERV9GUkVFXHRcdD0gMixcbmlvX3VyaW5nL25ldC5jOjYyMzpcdFx0YXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTtcbmlvX3VyaW5nL25ldC5jOjExNjA6XHRcdFx0YXJnLm1vZGUgfD0gS0JVRl9NT0RFX0ZSRUU7XG5gYGBcblxuWWVwLCBjb25maXJtZWQuIFRoZSBmbGFnIGlzIHN0cmljdGx5IHRpZWQgdG8gYGlvX3VyaW5nL25ldC5jYC4gVGhlcmVmb3JlLCBgQ09ORklHX05FVGAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IHRvIGV4cG9zZSB0aGlzIGJ1Zy4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfSU9fVVJJTkdgIGlzIG5lY2Vzc2FyeSBhcyB3ZWxsLCBiZWNhdXNlIHRoaXMgaXMgYW4gYGlvX3VyaW5nYCBzcGVjaWZpYyBpc3N1ZS5cblxuT2theSwgbGV0J3Mgem9vbSBpbiBvbiBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCBhbmQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgYmVjYXVzZSB0aGF0IGlzIHdoZXJlIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGxvZ2ljIGZsb3cuIExldCdzIHN0YXJ0IHdpdGggYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjIxLjUwMDc2MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuIDYwMTpcXHRcXHRcXHRyZXQgKz0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIDYwMjpcXHRcXHRlbHNlIGlmIChzci1cXHUwMDNlZG9uZV9pbylcXG4gNjAzOlxcdFxcdFxcdHJldCA9IHNyLVxcdTAwM2Vkb25lX2lvO1xcbiA2MDQ6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xcbiA2MDU6XFx0XFx0cmV0dXJuIElPVV9DT01QTEVURTtcXG4gNjA2OlxcdH1cXG4gNjA3OlxcdFxcbiA2MDg6XFx0c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcXG4gNjA5OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cpXFxuIDYxMDpcXHR7XFxuIDYxMTpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbiA2MTI6XFx0XFx0c3RydWN0IGJ1Zl9zZWxfYXJnIGFyZyA9IHtcXG4gNjEzOlxcdFxcdFxcdC5pb3ZzID0gXFx1MDAyNmttc2ctXFx1MDAzZWZhc3RfaW92LFxcbiA2MTQ6XFx0XFx0XFx0Lm1heF9sZW4gPSBtaW5fbm90X3plcm8oc3ItXFx1MDAzZWxlbiwgSU5UX01BWCksXFxuIDYxNTpcXHRcXHRcXHQubnJfaW92cyA9IDEsXFxuIDYxNjpcXHRcXHRcXHQuYnVmX2dyb3VwID0gc3ItXFx1MDAzZWJ1Zl9ncm91cCxcXG4gNjE3OlxcdFxcdH07XFxuIDYxODpcXHRcXHRpbnQgcmV0O1xcbiA2MTk6XFx0XFxuIDYyMDpcXHRcXHRpZiAoa21zZy1cXHUwMDNldmVjLmlvdmVjKSB7XFxuIDYyMTpcXHRcXHRcXHRhcmcubnJfaW92cyA9IGttc2ctXFx1MDAzZXZlYy5ucjtcXG4gNjIyOlxcdFxcdFxcdGFyZy5pb3ZzID0ga21zZy1cXHUwMDNldmVjLmlvdmVjO1xcbiA2MjM6XFx0XFx0XFx0YXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTtcXG4gNjI0OlxcdFxcdH1cXG4gNjI1OlxcdFxcbiA2MjY6XFx0XFx0aWYgKCEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpXFxuIDYyNzpcXHRcXHRcXHRhcmcubnJfaW92cyA9IDE7XFxuIDYyODpcXHRcXHRlbHNlXFxuIDYyOTpcXHRcXHRcXHRhcmcubW9kZSB8PSBLQlVGX01PREVfRVhQQU5EO1xcbiA2MzA6XFx0XFxuIDYzMTpcXHRcXHRyZXQgPSBpb19idWZmZXJzX3NlbGVjdChyZXEsIFxcdTAwMjZhcmcsIHNlbCwgaXNzdWVfZmxhZ3MpO1xcbiA2MzI6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcbiA2MzM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0aWYgKGFyZy5pb3ZzICE9IFxcdTAwMjZrbXNnLVxcdTAwM2VmYXN0X2lvdiBcXHUwMDI2XFx1MDAyNiBhcmcuaW92cyAhPSBrbXNnLVxcdTAwM2V2ZWMuaW92ZWMpIHtcXG4gNjM2OlxcdFxcdFxcdGttc2ctXFx1MDAzZXZlYy5uciA9IHJldDtcXG4gNjM3OlxcdFxcdFxcdGttc2ctXFx1MDAzZXZlYy5pb3ZlYyA9IGFyZy5pb3ZzO1xcbiA2Mzg6XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XFxuIDYzOTpcXHRcXHR9XFxuIDY0MDpcXHRcXHRzci1cXHUwMDNlbGVuID0gYXJnLm91dF9sZW47XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdGlmIChyZXQgPT0gMSkge1xcbiA2NDM6XFx0XFx0XFx0c3ItXFx1MDAzZWJ1ZiA9IGFyZy5pb3ZzWzBdLmlvdl9iYXNlO1xcbiA2NDQ6XFx0XFx0XFx0cmV0ID0gaW1wb3J0X3VidWYoSVRFUl9TT1VSQ0UsIHNyLVxcdTAwM2VidWYsIHNyLVxcdTAwM2VsZW4sXFxuIDY0NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKTtcXG4gNjQ2OlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbiA2NDc6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjQ4OlxcdFxcdH0gZWxzZSB7XFxuIDY0OTpcXHRcXHRcXHRpb3ZfaXRlcl9pbml0KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MjoyMS41MDA5NzM1NzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyNzM2Mzc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIEJ1ZmZlciBNYW5hZ2VtZW50IGluIEkvTyBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgY2xvc2VseSBhdCBob3cga2VybmVsIGJ1ZmZlcnMgYXJlIG1hbmFnZWQgZHVyaW5nIEkvTyBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIHNldHMgYEtCVUZfTU9ERV9GUkVFYCB3aGVuIGBrbXNnLVx1MDAzZXZlYy5pb3ZlY2AgaXMgcHJlc2VudC4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgd2UncmUgdXNpbmcgYW4gaW92ZWMsIHRoZSBidWZmZXIgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHRoZSBzZW5kLiBOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGl0IHNldHMgYEtCVUZfTU9ERV9FWFBBTkRgIHdoZW4gYElPUklOR19SRUNWU0VORF9CVU5ETEVgIGlzIGZsYWdnZWQuIFRoaXMgaXMgb2J2aW91c2x5IGxpbmtlZCB0byBidW5kbGVkIG9wZXJhdGlvbnMgd2l0aCBgSU9SSU5HX09QX1NFTkRgIGFuZCBgSU9SSU5HX09QX1NFTkRNU0dgLCBnaXZpbmcgdGhlIGtlcm5lbCBwZXJtaXNzaW9uIHRvIGV4cGFuZCB0aGUgYnVmZmVyIGFzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgYnVuZGxlZCBzZW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGZ1bGx5IGFuZCBlbnN1cmUgdGhlIGxvZ2ljIGlzIGNvbnNpc3RlbnQgdGhyb3VnaG91dCB0aGUgSS9PIHBhdGguIFRoZSBjb250ZXh0IGhpbnRzIHRoaXMgaXMgYWxsIHRvIGRvIHdpdGggdGhlICpzZW5kKiBzbyBsZXQgbWUgbm93IHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBpb19yZWN2X2J1Zl9zZWxlY3RgIHRvIHNlZSBpZiB0aGUgY29tcGxlbWVudGFyeSAqcmVjZWl2ZSogbG9naWMgaXMgc291bmQgYW5kIGFsaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTI6MjYuNzI4MzUxMjI3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTM3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTM3OlxcdHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbjExMzg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuMTEzOTpcXHR7XFxuMTE0MDpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbjExNDE6XFx0XFx0aW50IHJldDtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0LypcXG4xMTQ0OlxcdFxcdCAqIElmIHRoZSByaW5nIGlzbid0IGxvY2tlZCwgdGhlbiBkb24ndCB1c2UgdGhlIHBlZWsgaW50ZXJmYWNlXFxuMTE0NTpcXHRcXHQgKiB0byBncmFiIG11bHRpcGxlIGJ1ZmZlcnMgYXMgd2Ugd2lsbCBsb2NrL3VubG9jayBiZXR3ZWVuXFxuMTE0NjpcXHRcXHQgKiB0aGlzIHNlbGVjdGlvbiBhbmQgcG9zdGluZyB0aGUgYnVmZmVycy5cXG4xMTQ3OlxcdFxcdCAqL1xcbjExNDg6XFx0XFx0aWYgKCEoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSBcXHUwMDI2XFx1MDAyNlxcbjExNDk6XFx0XFx0ICAgIHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcXG4xMTUwOlxcdFxcdFxcdHN0cnVjdCBidWZfc2VsX2FyZyBhcmcgPSB7XFxuMTE1MTpcXHRcXHRcXHRcXHQuaW92cyA9IFxcdTAwMjZrbXNnLVxcdTAwM2VmYXN0X2lvdixcXG4xMTUyOlxcdFxcdFxcdFxcdC5ucl9pb3ZzID0gMSxcXG4xMTUzOlxcdFxcdFxcdFxcdC5tb2RlID0gS0JVRl9NT0RFX0VYUEFORCxcXG4xMTU0OlxcdFxcdFxcdFxcdC5idWZfZ3JvdXAgPSBzci1cXHUwMDNlYnVmX2dyb3VwLFxcbjExNTU6XFx0XFx0XFx0fTtcXG4xMTU2OlxcdFxcbjExNTc6XFx0XFx0XFx0aWYgKGttc2ctXFx1MDAzZXZlYy5pb3ZlYykge1xcbjExNTg6XFx0XFx0XFx0XFx0YXJnLm5yX2lvdnMgPSBrbXNnLVxcdTAwM2V2ZWMubnI7XFxuMTE1OTpcXHRcXHRcXHRcXHRhcmcuaW92cyA9IGttc2ctXFx1MDAzZXZlYy5pb3ZlYztcXG4xMTYwOlxcdFxcdFxcdFxcdGFyZy5tb2RlIHw9IEtCVUZfTU9ERV9GUkVFO1xcbjExNjE6XFx0XFx0XFx0fVxcbjExNjI6XFx0XFxuMTE2MzpcXHRcXHRcXHRpZiAoc2VsLVxcdTAwM2V2YWwpXFxuMTE2NDpcXHRcXHRcXHRcXHRhcmcubWF4X2xlbiA9IHNlbC1cXHUwMDNldmFsO1xcbjExNjU6XFx0XFx0XFx0ZWxzZSBpZiAoa21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgXFx1MDAzZSAxKVxcbjExNjY6XFx0XFx0XFx0XFx0YXJnLm1heF9sZW4gPSBtaW5fbm90X3plcm8oc2VsLVxcdTAwM2V2YWwsIChzc2l6ZV90KSBrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSk7XFxuMTE2NzpcXHRcXG4xMTY4OlxcdFxcdFxcdC8qIGlmIG1zaG90IGxpbWl0ZWQsIGVuc3VyZSB3ZSBkb24ndCBnbyBvdmVyICovXFxuMTE2OTpcXHRcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKVxcbjExNzA6XFx0XFx0XFx0XFx0YXJnLm1heF9sZW4gPSBtaW5fbm90X3plcm8oYXJnLm1heF9sZW4sIHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xcbjExNzE6XFx0XFx0XFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXFx1MDAyNmFyZywgc2VsKTtcXG4xMTcyOlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG4xMTczOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3NDpcXHRcXG4xMTc1OlxcdFxcdFxcdGlmIChhcmcuaW92cyAhPSBcXHUwMDI2a21zZy1cXHUwMDNlZmFzdF9pb3YgXFx1MDAyNlxcdTAwMjYgYXJnLmlvdnMgIT0ga21zZy1cXHUwMDNldmVjLmlvdmVjKSB7XFxuMTE3NjpcXHRcXHRcXHRcXHRrbXNnLVxcdTAwM2V2ZWMubnIgPSByZXQ7XFxuMTE3NzpcXHRcXHRcXHRcXHRrbXNnLVxcdTAwM2V2ZWMuaW92ZWMgPSBhcmcuaW92cztcXG4xMTc4OlxcdFxcdFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfTkVFRF9DTEVBTlVQO1xcbjExNzk6XFx0XFx0XFx0fVxcbjExODA6XFx0XFx0XFx0aWYgKGFyZy5wYXJ0aWFsX21hcClcXG4xMTgxOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9QQVJUSUFMX01BUDtcXG4xMTgyOlxcdFxcbjExODM6XFx0XFx0XFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cXG4xMTg0OlxcdFxcdFxcdGlmIChyZXQgPT0gMSkge1xcbjExODU6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWJ1ZiA9IGFyZy5pb3ZzWzBdLmlvdl9iYXNlO1xcbjExODY6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWxlbiA9IGFyZy5pb3ZzWzBdLmlvdl9sZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjI2LjcyODcxMjM1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTM3ODA1MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVmZmVyIEhhbmRsaW5nIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoaXMgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgZnVuY3Rpb24gYW5kIHNlZWluZyB0aGF0IGl0J3Mgc2V0dGluZyBgS0JVRl9NT0RFX0ZSRUVgIGFuZCBgS0JVRl9NT0RFX0VYUEFORGAuIFRoaXMgc2VlbXMgc3BlY2lmaWMgdG8gYElPUklOR19PUF9SRUNWYCBhbmQgYElPUklOR19PUF9SRUNWTVNHYCBvcGVyYXRpb25zIHdoZW4gdGhleSdyZSBidW5kbGVkLiBSaWdodCwgdGhlIGJ1ZyByZXBvcnQgcG9pbnRlZCBtZSB0byBgaW9fcmluZ19idWZmZXJzX3BlZWtgLiBUaGF0J3MgY2FsbGVkIGJ5IGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgLCB3aGljaCBuYXJyb3dzIGRvd24gdGhlIGFyZWEgb2YgY29uY2Vybi5cblxuU28sIEkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBrZXkgc3ltYm9scy4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYGlvX2J1ZmZlcnNfcGVla2AsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gSGFuZyBvbiwgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEFoLCBhbmQgc28gYXJlIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gVGhhdCBtZWFucyBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCBhcmUgZ2xvYmFsLiBTaW5jZSB0aG9zZSBhcmUgdGhlIGludGVyZmFjZXMsIEknbSBnb2luZyB0byBpbmNsdWRlIGFsbCBvZiB0aGVtIGluIHRoZSBmb2N1cyBsaXN0LlxuXG5CdXQgd2FpdCwgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCB3YXMgbW9kaWZpZWQgaW4gdGhlIHJlZmVyZW5jZWQgY29tbWl0LCBzbywgdGhhdCdzIHRoZSBvbmUgSSBuZWVkIHRvIGJlIG1vc3QgY29uY2VybmVkIGFib3V0LiBBbHJpZ2h0LCBsZXQncyBsb2NrIGluIHRoZSBmb2N1cyBzeW1ib2xzIGFzOiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLlxuXG5MZXQncyBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzLiBJJ2xsIGRvdWJsZS1jaGVjayBmb3IgcmVsYXRlZCBjb25maWdzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW4gcGxhY2UuIE9oLCBgQ09ORklHX05FVGAgaXMgY2xlYXJseSBhIHJlcXVpcmVtZW50LCBidXQgYXJlIHRoZXJlIGFueSBvdGhlcnM/IEknbGwgY2hlY2sgYGlvX3VyaW5nL2tidWYuY2AgZm9yIGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzc0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTI6MzUuMjY2NTIyMDg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYxMjkwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2tidWYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9rYnVmLmM9NjI2PWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNjc5LVxcbmlvX3VyaW5nL2tidWYuYzo2ODA6I2lmZGVmIFNITV9DT0xPVVJcXG5pb191cmluZy9rYnVmLmMtNjgxLVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjM1Ljc4MjY2MTM4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUzODEyNzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgaW9fdXJpbmcgTmV0d29yayBCdWZmZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgbmFycm93ZWQgaXQgZG93bi4gVGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBiZXlvbmQgYENPTkZJR19JT19VUklOR2AgYW5kIGBDT05GSUdfTkVUYCBmb3IgdGhpcyBwYXRjaC4gTGV0J3Mgc3VtbWFyaXplIGFuZCBzb2xpZGlmeSBteSBmaW5kaW5ncy5cblxuV29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBUaGUgcmVhc29uIGlzIGNyeXN0YWwgY2xlYXI6IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJ3MgbmV0d29yayByZWNlaXZlL3NlbmQgb3BlcmF0aW9ucyB3aGVuIGhhbmRsaW5nIHByb3ZpZGVkIGJ1ZmZlcnMgdmlhIGJ1ZmZlciByaW5ncy4gRXNzZW50aWFsbHksIHRoZSBkeW5hbWljIGlvdmVjIGFycmF5IGV4cGFuc2lvbiB3YXMgZmxhd2VkLiBUaGUgb3JpZ2luYWwgYXJyYXkgd2FzIGltcHJvcGVybHkgZnJlZWQsIGFuZCB0aGUgbmV3IG9uZSB3YXMgZnJlZWQgcHJlbWF0dXJlbHkuIFRoaXMgbGVkIHRvIGEgY2xhc3NpYyBtZW1vcnkgbGVhayBvbiB0aGUgb2xkIGFycmF5IGFuZCBhIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSBvbiB0aGUgbmV3IGFycmF5LlxuXG5UaGUga2V5IGZvY3VzIHN5bWJvbHMgYXJlOiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAsIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC5cblxuV2UgbmVlZCB0byBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb25zOiBgSU9fVVJJTkdgIGFuZCBgTkVUYC5cblxuSGFuZyBvbiwgbGV0J3MgdGhpbmsgYWJvdXQgdGhpcy4uLiBJIHJlbWVtYmVyIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgc3RhdGljLiBTeXprYWxsZXIgY2FuIGZ1enogc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIHJlYWNoYWJsZSB0aHJvdWdoIGEgY2FsbCBjaGFpbiBmcm9tIGEgc3lzY2FsbC4gQW5kLCBpbmRlZWQsIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgcGFydCBvZiB0aGUgYGlvX3VyaW5nX2VudGVyYCBjYWxsIHBhdGguIFRoYXQncyBnb29kLiBXYWl0IGEgc2Vjb25kLCB0aGUgb3RoZXIgdHdvIHN0YXRpYyBmdW5jdGlvbnMsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YCBhcmUgYWxzbyBzdGF0aWMuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhvc2UgYXMgd2VsbC5cblxuTGV0IG1lIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2ssIHJldmlld2luZyB0aGUgcGF0Y2ggY29kZSBhZ2FpbjpcbmBgYGNcbi1cdGlmIChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpXG4tXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbitcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG4rXHRcdGtmcmVlKG9yZ19pb3ZzKTtcbmBgYFxuWWVwLCBleGFjdGx5IGFzIEkgZXhwZWN0ZWQuIFRoaXMgbWF0Y2hlcyBteSBhbmFseXNpcyBwZXJmZWN0bHkuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuIFRpbWUgdG8gY2FsbCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjcsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjQ3LjMyMDc5MThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2NDI3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19yaW5nX2J1ZmZlcnNfcGVla1wiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiLFxuICAgIFwiaW9fc2VuZF9zZWxlY3RfYnVmZmVyXCIsXG4gICAgXCJpb19yZWN2X2J1Zl9zZWxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGFuZCBtZW1vcnkgbGVhayBpbiBpb191cmluZydzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2l0aCBwcm92aWRlZCBidWZmZXIgcmluZ3MuIFdoZW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaW92ZWMgYXJyYXkgaXMgZXhwYW5kZWQsIHRoZSBvbGQgYXJyYXkgd2FzIG5vdCBmcmVlZCBwcm9wZXJseSwgYW5kIHRoZSBuZXcgYXJyYXkgd2FzIGZyZWVkIGluc3RlYWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhayBvZiB0aGUgb2xkIGFycmF5IGFuZCBhIHVzZS1hZnRlci1mcmVlIG9mIHRoZSBuZXcgYXJyYXkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19idWZmZXJzX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJ3MgbmV0d29yayByZWNlaXZlL3NlbmQgb3BlcmF0aW9ucyB3aXRoIHByb3ZpZGVkIGJ1ZmZlciByaW5ncy4gV2hlbiBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBpb3ZlYyBhcnJheSBpcyBleHBhbmRlZCwgdGhlIG9sZCBhcnJheSB3YXMgbm90IGZyZWVkIHByb3Blcmx5LCBhbmQgdGhlIG5ldyBhcnJheSB3YXMgZnJlZWQgaW5zdGVhZCwgbGVhZGluZyB0byBhIG1lbW9yeSBsZWFrIG9mIHRoZSBvbGQgYXJyYXkgYW5kIGEgdXNlLWFmdGVyLWZyZWUgb2YgdGhlIG5ldyBhcnJheS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzrm2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 16:28:46 +0000 UTC FinishedAt: 2026-07-13 16:52:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "bee763d5f341b99cf472afeb508d4988f62a6ca1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "bee763d5f341b99cf472afeb508d4988f62a6ca1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "df7f1093-59f4-47d2-a1b6-c86d8c4140c3" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_ring_buffers_peek", "io_buffers_select", "io_buffers_peek", "io_send_select_buffer", "io_recv_buf_select" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19zZW5kX3NlbGVjdF9idWZmZXImIzM0OywKICAgICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJiMzOTtzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2l0aCBwcm92aWRlZCBidWZmZXIgcmluZ3MuIFdoZW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaW92ZWMgYXJyYXkgaXMgZXhwYW5kZWQsIHRoZSBvbGQgYXJyYXkgd2FzIG5vdCBmcmVlZCBwcm9wZXJseSwgYW5kIHRoZSBuZXcgYXJyYXkgd2FzIGZyZWVkIGluc3RlYWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhayBvZiB0aGUgb2xkIGFycmF5IGFuZCBhIHVzZS1hZnRlci1mcmVlIG9mIHRoZSBuZXcgYXJyYXkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Njc3OTNmYzVlMmZlMGMzOTIzNDJjMTBmNGNmYTA5YjdjNTJjYzU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTY6NTE6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXG5pbmRleCBiNmI5NjliNTVlMTIyNC4uMDdkODFkYzdjYmUyOTYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTMyOCw4ICYjNDM7MzI4LDggQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXHRcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsICYjNDM7JiM0MztoZWFkLCBibC1cdTAwM2VtYXNrKTtcbiBcdH0gd2hpbGUgKC0tbnJfaW92cyk7XG4gXG4tXHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxuLVx0XHRrZnJlZShhcmctXHUwMDNlaW92cyk7XG4mIzQzO1x0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcbiYjNDM7XHRcdGtmcmVlKG9yZ19pb3ZzKTtcbiBcbiBcdGlmIChoZWFkID09IHRhaWwpXG4gXHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9FTVBUWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19yaW5nX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19idWZmZXJzX3NlbGVjdCYjMzQ7LAogICAgJiMzNDtpb19idWZmZXJzX3BlZWsmIzM0OywKICAgICYjMzQ7aW9fc2VuZF9zZWxlY3RfYnVmZmVyJiMzNDssCiAgICAmIzM0O2lvX3JlY3ZfYnVmX3NlbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGFuZCBtZW1vcnkgbGVhayBpbiBpb191cmluZyYjMzk7cyBuZXR3b3JrIHJlY2VpdmUvc2VuZCBvcGVyYXRpb25zIHdpdGggcHJvdmlkZWQgYnVmZmVyIHJpbmdzLiBXaGVuIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGlvdmVjIGFycmF5IGlzIGV4cGFuZGVkLCB0aGUgb2xkIGFycmF5IHdhcyBub3QgZnJlZWQgcHJvcGVybHksIGFuZCB0aGUgbmV3IGFycmF5IHdhcyBmcmVlZCBpbnN0ZWFkLCBsZWFkaW5nIHRvIGEgbWVtb3J5IGxlYWsgb2YgdGhlIG9sZCBhcnJheSBhbmQgYSB1c2UtYWZ0ZXItZnJlZSBvZiB0aGUgbmV3IGFycmF5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Njc3OTNmYzVlMmZlMGMzOTIzNDJjMTBmNGNmYTA5YjdjNTJjYzU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMTY6NTE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmMKaW5kZXggYjZiOTY5YjU1ZTEyMjQuLjA3ZDgxZGM3Y2JlMjk2IDEwMDY0NAotLS0gYS9pb191cmluZy9rYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5jCkBAIC0zMjgsOCAmIzQzOzMyOCw4IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLAogCQlidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCAmIzQzOyYjNDM7aGVhZCwgYmwtJmd0O21hc2spOwogCX0gd2hpbGUgKC0tbnJfaW92cyk7CiAKLQlpZiAoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKQotCQlrZnJlZShhcmctJmd0O2lvdnMpOwomIzQzOwlpZiAoKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRSkgJmFtcDsmYW1wOyBhcmctJmd0O2lvdnMgIT0gb3JnX2lvdnMpCiYjNDM7CQlrZnJlZShvcmdfaW92cyk7CiAKIAlpZiAoaGVhZCA9PSB0YWlsKQogCQlyZXEtJmd0O2ZsYWdzIHw9IFJFUV9GX0JMX0VNUFRZOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGlvX3VyaW5nL2tidWYuY2AsIHNwZWNpZmljYWxseSB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIG1pbm9yIGNoYW5nZSB0byB0aGUgZnJlZWluZyBsb2dpYyBmb3Iga2VybmVsIGJ1ZmZlcnMuIEhtbSwgbGV0IG1lIHNlZS4uLiBpdCBzZWVtcyB0aGUgY29kZSBub3cgY2hlY2tzIGBhcmctJmd0O2lvdnMgIT0gb3JnX2lvdnNgIGJlZm9yZSBjYWxsaW5nIGBrZnJlZWAgd2hlbiB0aGUgYEtCVUZfTU9ERV9GUkVFYCBmbGFnIGlzIHNldC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IgYSBjb3JyZWN0aW9uIHJlbGF0ZWQgdG8gbWFuYWdpbmcgbXVsdGlwbGUgaW92ZWMgcG9pbnRlcnMuCgpXYWl0IGEgbWludXRlLCBgb3JnX2lvdnNgPyBUaGF0IHZhcmlhYmxlIGlzbiYjMzk7dCBkZWZpbmVkICpoZXJlKiBpbiB0aGUgZGlmZi4gV2hlcmUgaXMgdGhhdCBjb21pbmcgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCYjMzk7cyBkZWNsYXJlZCBhbmQgd2hhdCBpdCByZXByZXNlbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgaW9fdXJpbmcva2J1Zi5jYC4gTGV0JiMzOTtzIGFzc3VtZSBpdCBpcyBpbiB0aGUgdmljaW5pdHkgb2YgbGluZSAzMjgsIEkmIzM5O2xsIGdvIHRha2UgYSBsb29rIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHRyYWNraW5nIG9yIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgaW92ZWMgc3RydWN0dXJlLiBPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0cmVxLVx1MDAzZWJ1Zl9pbmRleCA9IFJFQURfT05DRShidWYtXHUwMDNlYmlkKTtcbiAzMDE6XHRcdGRvIHtcbiAzMDI6XHRcdFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbiAzMDM6XHRcbiAzMDQ6XHRcdFx0LyogdHJ1bmNhdGUgZW5kIHBpZWNlLCBpZiBuZWVkZWQsIGZvciBub24gcGFydGlhbCBidWZmZXJzICovXG4gMzA1Olx0XHRcdGlmIChsZW4gXHUwMDNlIGFyZy1cdTAwM2VtYXhfbGVuKSB7XG4gMzA2Olx0XHRcdFx0bGVuID0gYXJnLVx1MDAzZW1heF9sZW47XG4gMzA3Olx0XHRcdFx0aWYgKCEoYmwtXHUwMDNlZmxhZ3MgXHUwMDI2IElPQkxfSU5DKSkge1xuIDMwODpcdFx0XHRcdFx0YXJnLVx1MDAzZXBhcnRpYWxfbWFwID0gMTtcbiAzMDk6XHRcdFx0XHRcdGlmIChpb3YgIT0gYXJnLVx1MDAzZWlvdnMpXG4gMzEwOlx0XHRcdFx0XHRcdGJyZWFrO1xuIDMxMTpcdFx0XHRcdH1cbiAzMTI6XHRcdFx0fVxuIDMxMzpcdFxuIDMxNDpcdFx0XHRpb3YtXHUwMDNlaW92X2Jhc2UgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKGJ1Zi1cdTAwM2VhZGRyKSk7XG4gMzE1Olx0XHRcdGlvdi1cdTAwM2Vpb3ZfbGVuID0gbGVuO1xuIDMxNjpcdFx0XHRpZiAodW5saWtlbHkoIWFjY2Vzc19vayhpb3YtXHUwMDNlaW92X2Jhc2UsIGxlbikpKSB7XG4gMzE3Olx0XHRcdFx0aWYgKGFyZy1cdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKVxuIDMxODpcdFx0XHRcdFx0a2ZyZWUoYXJnLVx1MDAzZWlvdnMpO1xuIDMxOTpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDMyMDpcdFx0XHR9XG4gMzIxOlx0XHRcdGlvdiYjNDM7JiM0Mzs7XG4gMzIyOlx0XG4gMzIzOlx0XHRcdGFyZy1cdTAwM2VvdXRfbGVuICYjNDM7PSBsZW47XG4gMzI0Olx0XHRcdGFyZy1cdTAwM2VtYXhfbGVuIC09IGxlbjtcbiAzMjU6XHRcdFx0aWYgKCFhcmctXHUwMDNlbWF4X2xlbilcbiAzMjY6XHRcdFx0XHRicmVhaztcbiAzMjc6XHRcbiAzMjg6XHRcdFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgJiM0MzsmIzQzO2hlYWQsIGJsLVx1MDAzZW1hc2spO1xuIDMyOTpcdFx0fSB3aGlsZSAoLS1ucl9pb3ZzKTtcbiAzMzA6XHRcbiAzMzE6XHRcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG4gMzMyOlx0XHRcdGtmcmVlKG9yZ19pb3ZzKTtcbiAzMzM6XHRcbiAzMzQ6XHRcdGlmIChoZWFkID09IHRhaWwpXG4gMzM1Olx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9FTVBUWTtcbiAzMzY6XHRcbiAzMzc6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZGRVJfUklORztcbiAzMzg6XHRcdHJldHVybiBpb3YgLSBhcmctXHUwMDNlaW92cztcbiAzMzk6XHR9XG4gMzQwOlx0XG4gMzQxOlx0aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiAzNDI6XHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gMzQzOlx0e1xuIDM0NDpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXHUwMDNlY3R4O1xuIDM0NTpcdFx0aW50IHJldCA9IC1FTk9FTlQ7XG4gMzQ2Olx0XG4gMzQ3Olx0XHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xuIDM0ODpcdFx0c2VsLVx1MDAzZWJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KGN0eCwgYXJnLVx1MDAzZWJ1Zl9ncm91cCk7XG4gMzQ5Olx0XHRpZiAodW5saWtlbHkoIXNlbC1cdTAwM2VidWZfbGlzdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBQYXRjaCoqCgpBbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgaW9fcmluZ19idWZmZXJzX3BlZWtgIHdpdGhpbiBgaW9fdXJpbmcva2J1Zi5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkIGluIHRoaXMgY3JpdGljYWwgcGF0aD8mIzM0OyBUaGVuLCB0aGUgbWVudGlvbiBvZiBgb3JnX2lvdnNgIHRyaWdnZXJlZCBhIG1lbnRhbCBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGlzIGJlaW5nIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiBgb3JnX2lvdnNgLCB3aGljaCBpcyBsaWtlbHkgYSBrZXkgYXNwZWN0IHRvIHRoZSB3b3JrLiBMZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3Vic3lzdGVtLiBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGlvdiBtYW5hZ2VtZW50IG9yIHVzZS1jYXNlIHdpdGggdGhvc2UgaW92cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0LyogY2FwIGl0IGF0IGEgcmVhc29uYWJsZSAyNTYsIHdpbGwgYmUgb25lIHBhZ2UgZXZlbiBmb3IgNEsgKi9cbiAyNTE6XHQjZGVmaW5lIFBFRUtfTUFYX0lNUE9SVFx0XHQyNTZcbiAyNTI6XHRcbiAyNTM6XHRzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiAyNTQ6XHRcdFx0XHRcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXG4gMjU1Olx0e1xuIDI1NjpcdFx0c3RydWN0IGlvX3VyaW5nX2J1Zl9yaW5nICpiciA9IGJsLVx1MDAzZWJ1Zl9yaW5nO1xuIDI1NzpcdFx0c3RydWN0IGlvdmVjICpvcmdfaW92cyA9IGFyZy1cdTAwM2Vpb3ZzO1xuIDI1ODpcdFx0c3RydWN0IGlvdmVjICppb3YgPSBhcmctXHUwMDNlaW92cztcbiAyNTk6XHRcdGludCBucl9pb3ZzID0gYXJnLVx1MDAzZW5yX2lvdnM7XG4gMjYwOlx0XHRfX3UxNiBucl9hdmFpbCwgdGFpbCwgaGVhZDtcbiAyNjE6XHRcdHN0cnVjdCBpb191cmluZ19idWYgKmJ1ZjtcbiAyNjI6XHRcbiAyNjM6XHRcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmJyLVx1MDAzZXRhaWwpO1xuIDI2NDpcdFx0aGVhZCA9IGJsLVx1MDAzZWhlYWQ7XG4gMjY1Olx0XHRucl9hdmFpbCA9IG1pbl90KF9fdTE2LCB0YWlsIC0gaGVhZCwgVUlPX01BWElPVik7XG4gMjY2Olx0XHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcbiAyNjc6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDI2ODpcdFxuIDI2OTpcdFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgaGVhZCwgYmwtXHUwMDNlbWFzayk7XG4gMjcwOlx0XHRpZiAoYXJnLVx1MDAzZW1heF9sZW4pIHtcbiAyNzE6XHRcdFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXHUwMDNlbGVuKTtcbiAyNzI6XHRcdFx0c2l6ZV90IG5lZWRlZDtcbiAyNzM6XHRcbiAyNzQ6XHRcdFx0aWYgKHVubGlrZWx5KCFsZW4pKVxuIDI3NTpcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiAyNzY6XHRcdFx0bmVlZGVkID0gKGFyZy1cdTAwM2VtYXhfbGVuICYjNDM7IGxlbiAtIDEpIC8gbGVuO1xuIDI3NzpcdFx0XHRuZWVkZWQgPSBtaW5fbm90X3plcm8obmVlZGVkLCAoc2l6ZV90KSBQRUVLX01BWF9JTVBPUlQpO1xuIDI3ODpcdFx0XHRpZiAobnJfYXZhaWwgXHUwMDNlIG5lZWRlZClcbiAyNzk6XHRcdFx0XHRucl9hdmFpbCA9IG5lZWRlZDtcbiAyODA6XHRcdH1cbiAyODE6XHRcbiAyODI6XHRcdC8qXG4gMjgzOlx0XHQgKiBvbmx5IGFsbG9jIGEgYmlnZ2VyIGFycmF5IGlmIHdlIGtub3cgd2UgaGF2ZSBkYXRhIHRvIG1hcCwgZWcgbm90XG4gMjg0Olx0XHQgKiBhIHNwZWN1bGF0aXZlIHBlZWsgb3BlcmF0aW9uLlxuIDI4NTpcdFx0ICovXG4gMjg2Olx0XHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9FWFBBTkQgXHUwMDI2XHUwMDI2IG5yX2F2YWlsIFx1MDAzZSBucl9pb3ZzIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlbWF4X2xlbikge1xuIDI4NzpcdFx0XHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCBucl9hdmFpbCk7XG4gMjg4Olx0XHRcdGlmICh1bmxpa2VseSghaW92KSlcbiAyODk6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyOTA6XHRcdFx0YXJnLVx1MDAzZWlvdnMgPSBpb3Y7XG4gMjkxOlx0XHRcdG5yX2lvdnMgPSBucl9hdmFpbDtcbiAyOTI6XHRcdH0gZWxzZSBpZiAobnJfYXZhaWwgXHUwMDNjIG5yX2lvdnMpIHtcbiAyOTM6XHRcdFx0bnJfaW92cyA9IG5yX2F2YWlsO1xuIDI5NDpcdFx0fVxuIDI5NTpcdFxuIDI5NjpcdFx0Lyogc2V0IGl0IHRvIG1heCwgaWYgbm90IHNldCwgc28gd2UgY2FuIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkgKi9cbiAyOTc6XHRcdGlmICghYXJnLVx1MDAzZW1heF9sZW4pXG4gMjk4Olx0XHRcdGFyZy1cdTAwM2VtYXhfbGVuID0gSU5UX01BWDtcbiAyOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBvciBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciBpbnZhbGlkIGZyZWUgc2l0dWF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOgoKYGBgYwppZiAoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKQogICAga2ZyZWUoYXJnLSZndDtpb3ZzKTsKYGBgCgpSaWdodCwgaWYgYGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRWAgaXMgc2V0LCBpdCYjMzk7cyB0ZWxsaW5nIHVzIHRoZSBjYWxsZXIgd2FudHMgdXMgdG8gZnJlZSBgYXJnLSZndDtpb3ZzYC4gQnV0IHdhaXQsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBhIGxpdHRsZSB0cmlja3kuIEkgbmVlZCB0byB0cmFjZSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugb2YgYGFyZy0mZ3Q7aW92c2AuIAoKT2theSwgaW4gdGhpcyBmdW5jdGlvbiBgYXJnLSZndDtpb3ZzYCBpcyBlaXRoZXIgcGFzc2VkIGluIG9yIGFsbG9jYXRlZCBoZXJlLiBgaW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgbnJfYXZhaWwpOyBhcmctJmd0O2lvdnMgPSBpb3Y7YCBTbywgaWYgYGFyZy0mZ3Q7aW92c2AgKndhcyogYWxsb2NhdGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFuZCBsYXRlciBmcmVlZCwgdGhlbiB0aGUgY2FsbGVyIHdvdWxkIGJlIGV4cGVjdGluZyB1cyB0byB0YWtlIGNhcmUgb2YgaXQgd2l0aCB0aGUgYEtCVUZfTU9ERV9GUkVFYCBiaXQuCgpUaGUga2V5IGlzIHRoaXMgbGluZTogYGlmICgoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKSAmYW1wOyZhbXA7IGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92cylgLiBTbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBga2ZyZWVgIGNhbGwgdG8gYGtmcmVlKG9yZ19pb3ZzKWAuIE9rYXksIHNvIGBvcmdfaW92c2AgbXVzdCBiZSB0aGUgb3JpZ2luYWwgcG9pbnRlciBwYXNzZWQgYnkgdGhlIGNhbGxlci4gSWYgYGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92c2AgaW4gdGhlIG5ldyBjb2RlLCB0aGVuIGBhcmctJmd0O2lvdnNgIHdhcyBuZXdseSBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIFRoZSBwYXRjaCBpcyB0aGVuIG9ubHkgZnJlZWluZyBgb3JnX2lvdnNgIGlmIGl0IHdhcyBwYXNzZWQgaW4gYW5kIGBhcmctJmd0O2lvdnNgIHdhcyBuZXdseSBhbGxvY2F0ZWQuCgpTbywgaWYgYGFyZy0mZ3Q7aW92c2AgaXMgYWxsb2NhdGVkIGluIHRoZSBmdW5jdGlvbiwgYW5kIGBhcmctJmd0O21vZGUgJmFtcDsgS0JVRl9NT0RFX0ZSRUVgIGlzIHNldCwgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaXMgZnJlZSB0aGUgKm9yaWdpbmFsKiBgYXJnLSZndDtpb3ZzYCBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgc3RpbGwgZXhwZWN0aW5nIHRvIGZyZWUgdGhlICpuZXcqIGBhcmctJmd0O2lvdnNgLiBJZiB3ZSBkb24mIzM5O3QgZnJlZSBgb3JnX2lvdnNgLCB3ZSBsZWFrIG1lbW9yeS4gSWYgd2UgKmRvKiBmcmVlIHRoZSBhbGxvY2F0ZWQgYGFyZy0mZ3Q7aW92c2AsIHdlJiMzOTtyZSBkb3VibGUtZnJlZWluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhlIGZpcnN0IGNhc2UuIEkgbmVlZCB0byBjb25maXJtIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIG1ha2VzIHNlbnNlLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgY2xhc3NpYyBjYXNlIHdoZXJlIGFuIGludGVybWVkaWF0ZSBhbGxvY2F0aW9uIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgb3IgeW91JiMzOTtsbCBoYXZlIGEgbGVhay4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVyIG9mIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgd2hlbiBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0yMzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcbi0tXG5pb191cmluZy9rYnVmLmMtMjUyLVxuaW9fdXJpbmcva2J1Zi5jOjI1MzpzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0yNTQtXHRcdFx0XHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxuLS1cbmlvX3VyaW5nL2tidWYuYz0zNDE9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzUyLVx0aWYgKHNlbC1cdTAwM2VidWZfbGlzdC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuaW9fdXJpbmcva2J1Zi5jOjM1MzpcdFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy9rYnVmLmMtMzU0LVx0XHQvKlxuLS1cbmlvX3VyaW5nL2tidWYuYz0zNzc9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM5MC1cdGlmIChibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuaW9fdXJpbmcva2J1Zi5jOjM5MTpcdFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIGJsKTtcbmlvX3VyaW5nL2tidWYuYy0zOTItXHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBiZWhhdmlvciBhbmQgaG93IHRoZXkgaW50ZXJhY3QsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBzb21lIGtpbmQgb2YgYXN5bmNocm9ub3VzIEkvTyBzZXR1cC4gSSYjMzk7bSBpbWFnaW5pbmcgYHNlbGVjdGAgaXMgYmVpbmcgdXNlZCB0byBub24tYmxvY2tpbmdseSBtb25pdG9yIHRoZSByZWFkaW5lc3Mgb2YgSS9PIGJ1ZmZlcnMsIHByb2JhYmx5IGZvciByZWFkaW5nIG9yIHdyaXRpbmcsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgbWVjaGFuaXNtIGl0IGlzIHVzaW5nLCB3aGV0aGVyIGl0JiMzOTtzIHRpZWQgdG8gYW4gZXZlbnQgbG9vcCBvciBzb21ldGhpbmcgZWxzZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBgcGVla2AgaXMgaW1wbGVtZW50ZWQgcmVsYXRpdmUgdG8gYHNlbGVjdGAtLXBlcmhhcHMgYHBlZWtgIGhlbHBzIGV4YW1pbmUgYnVmZmVyIGNvbnRlbnRzIHdpdGhvdXQgY29uc3VtaW5nIHRoZSBkYXRhLCBidXQgb25seSBhZnRlciBpdOKAmXMgYmVlbiBjb25maXJtZWQgcmVhZHkgdG8gcmVhZCBieSBgc2VsZWN0YC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBob3cgYHNlbGVjdGAgaGFuZGxlcyBwYXJ0aWFsIHJlYWRzL3dyaXRlcywgYW5kIGlmIGBwZWVrYCBpcyBhZmZlY3RlZCBieSBzdWNoIHNjZW5hcmlvcy4gVGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIGlzIGtleS4gVGltZSB0byBnZXQgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MTpcdGludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gMzQyOlx0XHRcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIDM0MzpcdHtcbiAzNDQ6XHRcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVx1MDAzZWN0eDtcbiAzNDU6XHRcdGludCByZXQgPSAtRU5PRU5UO1xuIDM0NjpcdFxuIDM0NzpcdFx0aW9fcmluZ19zdWJtaXRfbG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcbiAzNDg6XHRcdHNlbC1cdTAwM2VidWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChjdHgsIGFyZy1cdTAwM2VidWZfZ3JvdXApO1xuIDM0OTpcdFx0aWYgKHVubGlrZWx5KCFzZWwtXHUwMDNlYnVmX2xpc3QpKVxuIDM1MDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMzUxOlx0XG4gMzUyOlx0XHRpZiAoc2VsLVx1MDAzZWJ1Zl9saXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJT0JMX0JVRl9SSU5HKSB7XG4gMzUzOlx0XHRcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDM1NDpcdFx0XHQvKlxuIDM1NTpcdFx0XHQgKiBEb24mIzM5O3QgcmVjeWNsZSB0aGVzZSBidWZmZXJzIGlmIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCBwb2xsLlxuIDM1NjpcdFx0XHQgKiBOb2JvZHkgZWxzZSBjYW4gdXNlIHRoZW0gYW55d2F5LCBhbmQgaG9sZGluZyBvbiB0byBwcm92aWRlZFxuIDM1NzpcdFx0XHQgKiBidWZmZXJzIGZvciBhIHNlbmQvd3JpdGUgb3BlcmF0aW9uIHdvdWxkIGhhcHBlbiBvbiB0aGUgYXBwXG4gMzU4Olx0XHRcdCAqIHNpZGUgYW55d2F5IHdpdGggbm9ybWFsIGJ1ZmZlcnMuIEJlc2lkZXMsIHdlIGFscmVhZHlcbiAzNTk6XHRcdFx0ICogY29tbWl0dGVkIHRoZW0sIHRoZXkgY2Fubm90IGJlIHB1dCBiYWNrIGluIHRoZSBxdWV1ZS5cbiAzNjA6XHRcdFx0ICovXG4gMzYxOlx0XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbiAzNjI6XHRcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQlVGRkVSU19DT01NSVQgfCBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuIDM2MzpcdFx0XHRcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGFyZy1cdTAwM2VvdXRfbGVuLCByZXQpKVxuIDM2NDpcdFx0XHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xuIDM2NTpcdFx0XHR9XG4gMzY2Olx0XHR9IGVsc2Uge1xuIDM2NzpcdFx0XHRyZXQgPSBpb19wcm92aWRlZF9idWZmZXJzX3NlbGVjdChyZXEsIFx1MDAyNmFyZy1cdTAwM2VvdXRfbGVuLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGFyZy1cdTAwM2Vpb3ZzKTtcbiAzNjg6XHRcdH1cbiAzNjk6XHRvdXRfdW5sb2NrOlxuIDM3MDpcdFx0aWYgKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSB7XG4gMzcxOlx0XHRcdHNlbC1cdTAwM2VidWZfbGlzdCA9IE5VTEw7XG4gMzcyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4gMzczOlx0XHR9XG4gMzc0Olx0XHRyZXR1cm4gcmV0O1xuIDM3NTpcdH1cbiAzNzY6XHRcbiAzNzc6XHRpbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiAzNzg6XHRcdFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcbiAzNzk6XHR7XG4gMzgwOlx0XHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cdTAwM2VjdHg7XG4gMzgxOlx0XHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsO1xuIDM4MjpcdFx0aW50IHJldDtcbiAzODM6XHRcbiAzODQ6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuIDM4NTpcdFxuIDM4NjpcdFx0YmwgPSBpb19idWZmZXJfZ2V0X2xpc3QoY3R4LCBhcmctXHUwMDNlYnVmX2dyb3VwKTtcbiAzODc6XHRcdGlmICh1bmxpa2VseSghYmwpKVxuIDM4ODpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAzODk6XHRcbiAzOTA6XHRcdGlmIChibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzIwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgS0JVRl9NT0RFX0ZSRUUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBLQlVGX01PREVfRlJFRWAuIFNlZW1zIGxpa2UgdGhlIGJlc3QgZmlyc3Qgc3RlcCBpcyB0byBsb2NhdGUgKndoZXJlKiB0aGlzIGZsYWcgaXMgYWN0dWFsbHkgYmVpbmcgc2V0LiBLbm93aW5nIHRoZSBpbml0aWFsIGNvbnRleHQgaXMgY3JpdGljYWw7IGl0JiMzOTtsbCBzaGVkIGxpZ2h0IG9uIHRoZSBwdXJwb3NlIGFuZCBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgc3Vic2VxdWVudCBjb2RlLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcsIG9wdGltaXphdGlvbiwgb3IgcmVhbGx5IGFueXRoaW5nIGVsc2UgSSBuZWVkIHRvIGRvIHdpdGggdGhpcyBjb2RlLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzb2xpZCBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2guIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBLQlVGX01PREVfRlJFRWAgaXMgYXNzaWduZWQgYSB2YWx1ZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBsYXJnZXIgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S0JVRl9NT0RFX0ZSRUUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzMwLVxuaW9fdXJpbmcva2J1Zi5jOjMzMTpcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG5pb191cmluZy9rYnVmLmMtMzMyLVx0XHRrZnJlZShvcmdfaW92cyk7XG4tLVxuaW9fdXJpbmcva2J1Zi5oPTUzPWVudW0ge1xuLS1cbmlvX3VyaW5nL2tidWYuaC01Ni1cdC8qIGlmIGJpZ2dlciB2ZWMgYWxsb2NhdGVkLCBmcmVlIG9sZCBvbmUgKi9cbmlvX3VyaW5nL2tidWYuaDo1NzpcdEtCVUZfTU9ERV9GUkVFXHRcdD0gMixcbmlvX3VyaW5nL2tidWYuaC01OC19O1xuLS1cbmlvX3VyaW5nL25ldC5jPTYwOD1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuLS1cbmlvX3VyaW5nL25ldC5jLTYyMi1cdFx0YXJnLmlvdnMgPSBrbXNnLVx1MDAzZXZlYy5pb3ZlYztcbmlvX3VyaW5nL25ldC5jOjYyMzpcdFx0YXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTtcbmlvX3VyaW5nL25ldC5jLTYyNC1cdH1cbi0tXG5pb191cmluZy9uZXQuYz0xMTM3PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTExNTktXHRcdFx0YXJnLmlvdnMgPSBrbXNnLVx1MDAzZXZlYy5pb3ZlYztcbmlvX3VyaW5nL25ldC5jOjExNjA6XHRcdFx0YXJnLm1vZGUgfD0gS0JVRl9NT0RFX0ZSRUU7XG5pb191cmluZy9uZXQuYy0xMTYxLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgQnVnIEZpeDogS0JVRl9NT0RFX0ZSRUUgYW5kIFZlY3RvciBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBLQlVGX01PREVfRlJFRWAuLi4gdGhhdCYjMzk7cyB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyAmIzM0O2lmIHRoZSB2ZWN0b3IgaXMgZXhwYW5kZWQsIGZyZWUgdGhlIG9yaWdpbmFsIG9uZSYjMzQ7LiBSaWdodCwgZ290IGl0LiBMZXQgbWUgdGhpbmsuIExvb2tpbmcgYXQgdGhlIG9sZCBjb2RlLCBpdCB1c2VkIHRvIGJlIGEgc2ltcGxlIGBrZnJlZShhcmctJmd0O2lvdnMpYCBpZiB0aGUgYEtCVUZfTU9ERV9GUkVFYCBiaXQgd2FzIHNldC4gQnV0IGhvbGQgb24sIGBhcmctJmd0O2lvdnNgIGNvdWxkIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgdmVjdG9yIGR1ZSB0byBhbiBleHBhbnNpb24sIGFuZCB0aGF0JiMzOTtzIHRoZSBwcm9ibGVtLgoKU3BlY2lmaWNhbGx5LCBpZiBgS0JVRl9NT0RFX0VYUEFORGAgd2FzIHNldCwgYW5kIHdlIGhhZCB0byBhbGxvY2F0ZSBhIG5ldyB2ZWN0b3IsIHRoZSBjb2RlIGRvZXM6IGBhcmctJmd0O2lvdnMgPSBpb3Y7YCBTbywgaWYgYEtCVUZfTU9ERV9GUkVFYCB3YXMgdGhlbiBhbHNvIHNldCwgdGhlIGxhdGVyIGBrZnJlZShhcmctJmd0O2lvdnMpYCB3b3VsZCBmcmVlIHRoZSAqbmV3KiB2ZWN0b3IsIG5vdCB0aGUgb2xkIG9uZS4gTWVhbmluZyB3ZSYjMzk7cmUgbGVha2luZyB0aGUgb2xkIG9uZSBhbmQgdGhlIGNhbGxlciB3b3VsZCB0aGVuIGJlIHVzaW5nIGEgZnJlZWQgdmVjdG9yLiBZaWtlcyEgVGhhdCYjMzk7cyBhIHVzZS1hZnRlci1mcmVlICphbmQqIGEgbWVtb3J5IGxlYWshCgpCdXQgdGhlcmUmIzM5O3MgbW9yZS4gV2hhdCBpZiBgS0JVRl9NT0RFX0ZSRUVgIHdhcyBzZXQsIGJ1dCB0aGUgdmVjdG9yIHdhc24mIzM5O3QgYWN0dWFsbHkgZXhwYW5kZWQ/IFRoZW4gdGhlIGNvZGUgd2FzIGZyZWVpbmcgdGhlIGNhbGxlciYjMzk7cyAqb3JpZ2luYWwqIGBhcmctJmd0O2lvdnNgIHZlY3Rvciwgd2hpY2ggdGhleSYjMzk7cmUgc3RpbGwgdXNpbmchIFRoYXQgaXMgYWxzbyBhIGRpc2FzdGVyLiBOb3cgSSBnZXQgaXQ6IGBLQlVGX01PREVfRlJFRWAgbWVhbnMgJiMzNDt0aGUgY2FsbGVyIGhhbmRlZCBtZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB2ZWN0b3IsIGFuZCBpZiBJIGV4cGFuZCBpdCwgZnJlZSB0aGUgb2xkIG9uZSYjMzQ7LgoKVGhlIGZpeCBpcyBub3cgdGhpczogYGlmICgoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKSAmYW1wOyZhbXA7IGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92cykga2ZyZWUob3JnX2lvdnMpO2Agd2hpY2ggY29ycmVjdGx5IGZyZWVzIHRoZSAqb2xkKiB2ZWN0b3IgKGBvcmdfaW92c2ApICpvbmx5KiBpZiBhIG5ldyB2ZWN0b3Igd2FzIGFsbG9jYXRlZCAoYGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92c2ApLiBNdWNoIGJldHRlciEgVGhpcyBjbGVhbmx5IGZpeGVzIHRoZSB1c2UtYWZ0ZXItZnJlZSBhbmQgbWVtb3J5IGxlYWsgaW4gdGhlIGlvX3VyaW5nIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIHdpdGggcHJvdmlkZWQgYnVmZmVycy4KClNvLCBpcyB0aGlzIGZpeCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYGlvX2J1ZmZlcnNfcGVla2AsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLCBhbmQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAuIEhhbmcgb24sIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgc3RhdGljLCBJIGNhbiB3b3JrIGFyb3VuZCB0aGF0LiBJJiMzOTtsbCBpbmNsdWRlIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gQW5kIG1ha2Ugc3VyZSBgQ09ORklHX0lPX1VSSU5HYCBpcyBlbmFibGVkLiBJdCBwcm9iYWJseSBpcywgYnV0IGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBgaW9fdXJpbmcvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTk1ND1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5NjEtXG5pbml0L0tjb25maWc6MTk2Mjpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTYzLVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTk3MT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5ODMtXG5pbml0L0tjb25maWc6MTk4NDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk4NS1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTItXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcbmlvX3VyaW5nL0tjb25maWctMTQtXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL0tjb25maWctMTktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlIHNlZW1zIHRvIGJlIHRoZSBgQ09ORklHX0lPX1VSSU5HYCBzZXR0aW5nIOKAkyB0aGF0JiMzOTtzIHRoZSBiaWcgb25lIHRvIHN0YXJ0IHdpdGguIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3VyaW5nL2tidWYuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBmaXJzdC4KCkxldCYjMzk7cyBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGJ1ZyBpdHNlbGYgaXMgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgd2hpY2ggaXMgb2J2aW91c2x5IHRpZWQgdG8gYnVmZmVyIHJpbmdzLiBBbmQgYnVmZmVyIHJpbmdzLCBvZiBjb3Vyc2UsIGFyZSBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBpb191cmluZyBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3QsIGFyZSB0aGVyZSBhbnkgbmV0d29yay1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHBsYXkgYSByb2xlIGhlcmUgd2l0aGluIGlvX3VyaW5nPyBIbW0sIEkgc2VlIHRoYXQgYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkLiBUaGF0IG1ha2VzIG1lIHdhbnQgdG8gZXhhbWluZSBgaW9fdXJpbmcvbmV0LmNgIGNsb3NlbHkgYXMgd2VsbC4gVGhpcyB3aWxsIGhlbHAgdG8gdW5kZXJzdGFuZCBhbnkgbmV0d29yay1yZWxhdGVkIGltcGxpY2F0aW9ucyBvZiB0aGlzIGJ1ZywgcGFydGljdWxhcmx5IGlmIG5ldHdvcmsgYnVmZmVyIHJpbmdzIGFyZSBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfRVBPTEwpXHRcdCYjNDM7PSBlcG9sbC5vXG5pb191cmluZy9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcdCYjNDM7PSBuYXBpLm9cbmlvX3VyaW5nL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORVQpICYjNDM7PSBuZXQubyBjbWRfbmV0Lm9cbmlvX3VyaW5nL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gZmRpbmZvLm9cbi0tXG5pb191cmluZy9mZGluZm8uYy0xOS1cbmlvX3VyaW5nL2ZkaW5mby5jOjIwOiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxuaW9fdXJpbmcvZmRpbmZvLmMtMjEtc3RhdGljIF9fY29sZCB2b2lkIGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5oPTEyOD1zdHJ1Y3QgaW9fd2FpdF9xdWV1ZSB7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuaC0xMzgtXG5pb191cmluZy9pb191cmluZy5oOjEzOTojaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTQwLVx0a3RpbWVfdCBuYXBpX2J1c3lfcG9sbF9kdDtcbi0tXG5pb191cmluZy9uYXBpLmMtNS1cbmlvX3VyaW5nL25hcGkuYzo2OiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxuaW9fdXJpbmcvbmFwaS5jLTctXG4tLVxuaW9fdXJpbmcvbmFwaS5oLTktXG5pb191cmluZy9uYXBpLmg6MTA6I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXG5pb191cmluZy9uYXBpLmgtMTEtXG4tLVxuaW9fdXJpbmcvbmFwaS5oPTg0PXN0YXRpYyBpbmxpbmUgaW50IGlvX25hcGlfc3Fwb2xsX2J1c3lfcG9sbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbi0tXG5pb191cmluZy9uYXBpLmgtODctfVxuaW9fdXJpbmcvbmFwaS5oOjg4OiNlbmRpZiAvKiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTCAqL1xuaW9fdXJpbmcvbmFwaS5oLTg5LVxuLS1cbmlvX3VyaW5nL25ldC5oPTg9c3RydWN0IGlvX2FzeW5jX21zZ2hkciB7XG5pb191cmluZy9uZXQuaDo5OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9uZXQuaC0xMC1cdHN0cnVjdCBpb3VfdmVjXHRcdFx0XHR2ZWM7XG4tLVxuaW9fdXJpbmcvbmV0LmgtMjUtXG5pb191cmluZy9uZXQuaDoyNjojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvbmV0LmgtMjctXG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcbi0tXG5pb191cmluZy9vcGRlZi5jLTE0Mi1cdFx0LmlvcHJpb1x0XHRcdD0gMSxcbmlvX3VyaW5nL29wZGVmLmM6MTQzOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTE0NC1cdFx0LmFzeW5jX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy0xNTYtXHRcdC5pb3ByaW9cdFx0XHQ9IDEsXG5pb191cmluZy9vcGRlZi5jOjE1NzojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy0xNTgtXHRcdC5hc3luY19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtMTgyLVx0XHQuaW9wcmlvXHRcdFx0PSAxLFx0LyogdXNlZCBmb3IgZmxhZ3MgKi9cbmlvX3VyaW5nL29wZGVmLmM6MTgzOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTE4NC1cdFx0LnByZXBcdFx0XHQ9IGlvX2FjY2VwdF9wcmVwLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtMjA0LVx0XHQucG9sbG91dFx0XHQ9IDEsXG5pb191cmluZy9vcGRlZi5jOjIwNTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy0yMDYtXHRcdC5maWx0ZXJfcGR1X3NpemVcdD0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpb191cmluZ19icGZfY3R4LCBjb25uZWN0KSxcbi0tXG5pb191cmluZy9vcGRlZi5jLTI4NS1cdFx0LmJ1ZmZlcl9zZWxlY3RcdFx0PSAxLFxuaW9fdXJpbmcvb3BkZWYuYzoyODY6I2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmMtMjg3LVx0XHQuYXN5bmNfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcbi0tXG5pb191cmluZy9vcGRlZi5jLTMwMC1cdFx0LmlvcHJpb1x0XHRcdD0gMSxcbmlvX3VyaW5nL29wZGVmLmM6MzAxOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTMwMi1cdFx0LmFzeW5jX3NpemVcdFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy0zNTQtXHRcdC5uZWVkc19maWxlXHRcdD0gMSxcbmlvX3VyaW5nL29wZGVmLmM6MzU1OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTM1Ni1cdFx0LnByZXBcdFx0XHQ9IGlvX3NodXRkb3duX3ByZXAsXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00MDctXHRcdC5hdWRpdF9za2lwXHRcdD0gMSxcbmlvX3VyaW5nL29wZGVmLmM6NDA4OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTQwOS1cdFx0LmZpbHRlcl9wZHVfc2l6ZVx0PSBzaXplb2ZfZmllbGQoc3RydWN0IGlvX3VyaW5nX2JwZl9jdHgsIHNvY2tldCksXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy00MzEtXHRcdC5pb3ByaW9cdFx0XHQ9IDEsXG5pb191cmluZy9vcGRlZi5jOjQzMjojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy00MzMtXHRcdC5hc3luY19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtNDQ0LVx0XHQuaW9wcmlvXHRcdFx0PSAxLFxuaW9fdXJpbmcvb3BkZWYuYzo0NDU6I2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmMtNDQ2LVx0XHQuYXN5bmNfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcbi0tXG5pb191cmluZy9vcGRlZi5jLTUwMy1cdFtJT1JJTkdfT1BfQklORF0gPSB7XG5pb191cmluZy9vcGRlZi5jOjUwNDojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy01MDUtXHRcdC5uZWVkc19maWxlXHRcdD0gMSxcbi0tXG5pb191cmluZy9vcGRlZi5jLTUxMy1cdFtJT1JJTkdfT1BfTElTVEVOXSA9IHtcbmlvX3VyaW5nL29wZGVmLmM6NTE0OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTUxNS1cdFx0Lm5lZWRzX2ZpbGVcdFx0PSAxLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtNTI3LVx0XHQuaW9wcmlvXHRcdFx0PSAxLFxuaW9fdXJpbmcvb3BkZWYuYzo1Mjg6I2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmMtNTI5LVx0XHQucHJlcFx0XHRcdD0gaW9fcmVjdnpjX3ByZXAsXG4tLVxuaW9fdXJpbmcvb3BkZWYuYz01OTY9Y29uc3Qgc3RydWN0IGlvX2NvbGRfZGVmIGlvX2NvbGRfZGVmc1tdID0ge1xuLS1cbmlvX3VyaW5nL29wZGVmLmMtNjMzLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7U0VORE1TR1wmIzM0OyxcbmlvX3VyaW5nL29wZGVmLmM6NjM0OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTYzNS1cdFx0LmNsZWFudXBcdFx0PSBpb19zZW5kbXNnX3JlY3Ztc2dfY2xlYW51cCxcbi0tXG5pb191cmluZy9vcGRlZi5jLTY0MC1cdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1JFQ1ZNU0dcJiMzNDssXG5pb191cmluZy9vcGRlZi5jOjY0MTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy02NDItXHRcdC5jbGVhbnVwXHRcdD0gaW9fc2VuZG1zZ19yZWN2bXNnX2NsZWFudXAsXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy02OTgtXHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtTRU5EXCYjMzQ7LFxuaW9fdXJpbmcvb3BkZWYuYzo2OTk6I2lmIGRlZmluZWQoQ09ORklHX05FVClcbmlvX3VyaW5nL29wZGVmLmMtNzAwLVx0XHQuY2xlYW51cFx0XHQ9IGlvX3NlbmRtc2dfcmVjdm1zZ19jbGVhbnVwLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtNzA1LVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7UkVDVlwmIzM0OyxcbmlvX3VyaW5nL29wZGVmLmM6NzA2OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTcwNy1cdFx0LmNsZWFudXBcdFx0PSBpb19zZW5kbXNnX3JlY3Ztc2dfY2xlYW51cCxcbi0tXG5pb191cmluZy9vcGRlZi5jLTc4NC1cdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1NFTkRfWkNcJiMzNDssXG5pb191cmluZy9vcGRlZi5jOjc4NTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYy03ODYtXHRcdC5jbGVhbnVwXHRcdD0gaW9fc2VuZF96Y19jbGVhbnVwLFxuLS1cbmlvX3VyaW5nL29wZGVmLmMtNzkxLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7U0VORE1TR19aQ1wmIzM0OyxcbmlvX3VyaW5nL29wZGVmLmM6NzkyOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXG5pb191cmluZy9vcGRlZi5jLTc5My1cdFx0LmNsZWFudXBcdFx0PSBpb19zZW5kX3pjX2NsZWFudXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgaW9fdXJpbmdgIEJ1ZyBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aHJvdWdoIHRoaXMgYGlvX3VyaW5nYCBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX05FVGAgaXMgZXNzZW50aWFsIGZvciBjb21waWxpbmcgYGlvX3VyaW5nL25ldC5jYCwgd2hpY2ggaXMgYSBrZXkgZGVwZW5kZW5jeSBoZXJlLiBUaGUgYWN0dWFsIGJ1ZyYjMzk7cyBjb2RlIGlzIGluIGBpb191cmluZy9rYnVmLmNgLCB3aGljaCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGJ1dCB0aGUgY3J1Y2lhbCBgS0JVRl9NT0RFX0ZSRUVgIGZsYWcgaXMgKm9ubHkqIHVzZWQgd2l0aGluIGBpb191cmluZy9uZXQuY2AuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0uCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgdGhhdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZS4uLiBJIGRpZCBydW4gYSBgZ3JlcGAgZm9yIGBLQlVGX01PREVfRlJFRWAgZWFybGllcjoKCmBgYAppb191cmluZy9rYnVmLmM6MjUzOnN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLAppb191cmluZy9rYnVmLmM6MzMxOglpZiAoKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRSkgJmFtcDsmYW1wOyBhcmctJmd0O2lvdnMgIT0gb3JnX2lvdnMpCmlvX3VyaW5nL2tidWYuaDo1NzoJS0JVRl9NT0RFX0ZSRUUJCT0gMiwKaW9fdXJpbmcvbmV0LmM6NjIzOgkJYXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTsKaW9fdXJpbmcvbmV0LmM6MTE2MDoJCQlhcmcubW9kZSB8PSBLQlVGX01PREVfRlJFRTsKYGBgCgpZZXAsIGNvbmZpcm1lZC4gVGhlIGZsYWcgaXMgc3RyaWN0bHkgdGllZCB0byBgaW9fdXJpbmcvbmV0LmNgLiBUaGVyZWZvcmUsIGBDT05GSUdfTkVUYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQgdG8gZXhwb3NlIHRoaXMgYnVnLiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19JT19VUklOR2AgaXMgbmVjZXNzYXJ5IGFzIHdlbGwsIGJlY2F1c2UgdGhpcyBpcyBhbiBgaW9fdXJpbmdgIHNwZWNpZmljIGlzc3VlLgoKT2theSwgbGV0JiMzOTtzIHpvb20gaW4gb24gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGJlY2F1c2UgdGhhdCBpcyB3aGVyZSBgS0JVRl9NT0RFX0ZSRUVgIGlzIHNldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsb2dpYyBmbG93LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9uZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XHRpZiAocmV0IFx1MDAzZT0gMClcbiA2MDE6XHRcdFx0cmV0ICYjNDM7PSBzci1cdTAwM2Vkb25lX2lvO1xuIDYwMjpcdFx0ZWxzZSBpZiAoc3ItXHUwMDNlZG9uZV9pbylcbiA2MDM6XHRcdFx0cmV0ID0gc3ItXHUwMDNlZG9uZV9pbztcbiA2MDQ6XHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiA2MDU6XHRcdHJldHVybiBJT1VfQ09NUExFVEU7XG4gNjA2Olx0fVxuIDYwNzpcdFxuIDYwODpcdHN0YXRpYyBpbnQgaW9fc2VuZF9zZWxlY3RfYnVmZmVyKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsXG4gNjA5Olx0XHRcdFx0XHQgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnKVxuIDYxMDpcdHtcbiA2MTE6XHRcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XG4gNjEyOlx0XHRzdHJ1Y3QgYnVmX3NlbF9hcmcgYXJnID0ge1xuIDYxMzpcdFx0XHQuaW92cyA9IFx1MDAyNmttc2ctXHUwMDNlZmFzdF9pb3YsXG4gNjE0Olx0XHRcdC5tYXhfbGVuID0gbWluX25vdF96ZXJvKHNyLVx1MDAzZWxlbiwgSU5UX01BWCksXG4gNjE1Olx0XHRcdC5ucl9pb3ZzID0gMSxcbiA2MTY6XHRcdFx0LmJ1Zl9ncm91cCA9IHNyLVx1MDAzZWJ1Zl9ncm91cCxcbiA2MTc6XHRcdH07XG4gNjE4Olx0XHRpbnQgcmV0O1xuIDYxOTpcdFxuIDYyMDpcdFx0aWYgKGttc2ctXHUwMDNldmVjLmlvdmVjKSB7XG4gNjIxOlx0XHRcdGFyZy5ucl9pb3ZzID0ga21zZy1cdTAwM2V2ZWMubnI7XG4gNjIyOlx0XHRcdGFyZy5pb3ZzID0ga21zZy1cdTAwM2V2ZWMuaW92ZWM7XG4gNjIzOlx0XHRcdGFyZy5tb2RlID0gS0JVRl9NT0RFX0ZSRUU7XG4gNjI0Olx0XHR9XG4gNjI1Olx0XG4gNjI2Olx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpXG4gNjI3Olx0XHRcdGFyZy5ucl9pb3ZzID0gMTtcbiA2Mjg6XHRcdGVsc2VcbiA2Mjk6XHRcdFx0YXJnLm1vZGUgfD0gS0JVRl9NT0RFX0VYUEFORDtcbiA2MzA6XHRcbiA2MzE6XHRcdHJldCA9IGlvX2J1ZmZlcnNfc2VsZWN0KHJlcSwgXHUwMDI2YXJnLCBzZWwsIGlzc3VlX2ZsYWdzKTtcbiA2MzI6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuIDYzMzpcdFx0XHRyZXR1cm4gcmV0O1xuIDYzNDpcdFxuIDYzNTpcdFx0aWYgKGFyZy5pb3ZzICE9IFx1MDAyNmttc2ctXHUwMDNlZmFzdF9pb3YgXHUwMDI2XHUwMDI2IGFyZy5pb3ZzICE9IGttc2ctXHUwMDNldmVjLmlvdmVjKSB7XG4gNjM2Olx0XHRcdGttc2ctXHUwMDNldmVjLm5yID0gcmV0O1xuIDYzNzpcdFx0XHRrbXNnLVx1MDAzZXZlYy5pb3ZlYyA9IGFyZy5pb3ZzO1xuIDYzODpcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfTkVFRF9DTEVBTlVQO1xuIDYzOTpcdFx0fVxuIDY0MDpcdFx0c3ItXHUwMDNlbGVuID0gYXJnLm91dF9sZW47XG4gNjQxOlx0XG4gNjQyOlx0XHRpZiAocmV0ID09IDEpIHtcbiA2NDM6XHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4gNjQ0Olx0XHRcdHJldCA9IGltcG9ydF91YnVmKElURVJfU09VUkNFLCBzci1cdTAwM2VidWYsIHNyLVx1MDAzZWxlbixcbiA2NDU6XHRcdFx0XHRcdFx0XHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpO1xuIDY0NjpcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbiA2NDc6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDY0ODpcdFx0fSBlbHNlIHtcbiA2NDk6XHRcdFx0aW92X2l0ZXJfaW5pdChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDk0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQnVmZmVyIE1hbmFnZW1lbnQgaW4gSS9PIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGNsb3NlbHkgYXQgaG93IGtlcm5lbCBidWZmZXJzIGFyZSBtYW5hZ2VkIGR1cmluZyBJL08gb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBzZXRzIGBLQlVGX01PREVfRlJFRWAgd2hlbiBga21zZy0mZ3Q7dmVjLmlvdmVjYCBpcyBwcmVzZW50LiBUaGlzIG1ha2VzIHNlbnNlOyBpZiB3ZSYjMzk7cmUgdXNpbmcgYW4gaW92ZWMsIHRoZSBidWZmZXIgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHRoZSBzZW5kLiBOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGl0IHNldHMgYEtCVUZfTU9ERV9FWFBBTkRgIHdoZW4gYElPUklOR19SRUNWU0VORF9CVU5ETEVgIGlzIGZsYWdnZWQuIFRoaXMgaXMgb2J2aW91c2x5IGxpbmtlZCB0byBidW5kbGVkIG9wZXJhdGlvbnMgd2l0aCBgSU9SSU5HX09QX1NFTkRgIGFuZCBgSU9SSU5HX09QX1NFTkRNU0dgLCBnaXZpbmcgdGhlIGtlcm5lbCBwZXJtaXNzaW9uIHRvIGV4cGFuZCB0aGUgYnVmZmVyIGFzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgYnVuZGxlZCBzZW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGZ1bGx5IGFuZCBlbnN1cmUgdGhlIGxvZ2ljIGlzIGNvbnNpc3RlbnQgdGhyb3VnaG91dCB0aGUgSS9PIHBhdGguIFRoZSBjb250ZXh0IGhpbnRzIHRoaXMgaXMgYWxsIHRvIGRvIHdpdGggdGhlICpzZW5kKiBzbyBsZXQgbWUgbm93IHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBpb19yZWN2X2J1Zl9zZWxlY3RgIHRvIHNlZSBpZiB0aGUgY29tcGxlbWVudGFyeSAqcmVjZWl2ZSogbG9naWMgaXMgc291bmQgYW5kIGFsaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzc6XHRzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbjExMzg6XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbjExMzk6XHR7XG4xMTQwOlx0XHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuMTE0MTpcdFx0aW50IHJldDtcbjExNDI6XHRcbjExNDM6XHRcdC8qXG4xMTQ0Olx0XHQgKiBJZiB0aGUgcmluZyBpc24mIzM5O3QgbG9ja2VkLCB0aGVuIGRvbiYjMzk7dCB1c2UgdGhlIHBlZWsgaW50ZXJmYWNlXG4xMTQ1Olx0XHQgKiB0byBncmFiIG11bHRpcGxlIGJ1ZmZlcnMgYXMgd2Ugd2lsbCBsb2NrL3VubG9jayBiZXR3ZWVuXG4xMTQ2Olx0XHQgKiB0aGlzIHNlbGVjdGlvbiBhbmQgcG9zdGluZyB0aGUgYnVmZmVycy5cbjExNDc6XHRcdCAqL1xuMTE0ODpcdFx0aWYgKCEoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpIFx1MDAyNlx1MDAyNlxuMTE0OTpcdFx0ICAgIHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4xMTUwOlx0XHRcdHN0cnVjdCBidWZfc2VsX2FyZyBhcmcgPSB7XG4xMTUxOlx0XHRcdFx0LmlvdnMgPSBcdTAwMjZrbXNnLVx1MDAzZWZhc3RfaW92LFxuMTE1MjpcdFx0XHRcdC5ucl9pb3ZzID0gMSxcbjExNTM6XHRcdFx0XHQubW9kZSA9IEtCVUZfTU9ERV9FWFBBTkQsXG4xMTU0Olx0XHRcdFx0LmJ1Zl9ncm91cCA9IHNyLVx1MDAzZWJ1Zl9ncm91cCxcbjExNTU6XHRcdFx0fTtcbjExNTY6XHRcbjExNTc6XHRcdFx0aWYgKGttc2ctXHUwMDNldmVjLmlvdmVjKSB7XG4xMTU4Olx0XHRcdFx0YXJnLm5yX2lvdnMgPSBrbXNnLVx1MDAzZXZlYy5ucjtcbjExNTk6XHRcdFx0XHRhcmcuaW92cyA9IGttc2ctXHUwMDNldmVjLmlvdmVjO1xuMTE2MDpcdFx0XHRcdGFyZy5tb2RlIHw9IEtCVUZfTU9ERV9GUkVFO1xuMTE2MTpcdFx0XHR9XG4xMTYyOlx0XG4xMTYzOlx0XHRcdGlmIChzZWwtXHUwMDNldmFsKVxuMTE2NDpcdFx0XHRcdGFyZy5tYXhfbGVuID0gc2VsLVx1MDAzZXZhbDtcbjExNjU6XHRcdFx0ZWxzZSBpZiAoa21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2UgMSlcbjExNjY6XHRcdFx0XHRhcmcubWF4X2xlbiA9IG1pbl9ub3RfemVybyhzZWwtXHUwMDNldmFsLCAoc3NpemVfdCkga21zZy1cdTAwM2Vtc2cubXNnX2lucSk7XG4xMTY3Olx0XG4xMTY4Olx0XHRcdC8qIGlmIG1zaG90IGxpbWl0ZWQsIGVuc3VyZSB3ZSBkb24mIzM5O3QgZ28gb3ZlciAqL1xuMTE2OTpcdFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX01TSE9UX0xJTSlcbjExNzA6XHRcdFx0XHRhcmcubWF4X2xlbiA9IG1pbl9ub3RfemVybyhhcmcubWF4X2xlbiwgc3ItXHUwMDNlbXNob3RfdG90YWxfbGVuKTtcbjExNzE6XHRcdFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXHUwMDI2YXJnLCBzZWwpO1xuMTE3MjpcdFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSlcbjExNzM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTE3NDpcdFxuMTE3NTpcdFx0XHRpZiAoYXJnLmlvdnMgIT0gXHUwMDI2a21zZy1cdTAwM2VmYXN0X2lvdiBcdTAwMjZcdTAwMjYgYXJnLmlvdnMgIT0ga21zZy1cdTAwM2V2ZWMuaW92ZWMpIHtcbjExNzY6XHRcdFx0XHRrbXNnLVx1MDAzZXZlYy5uciA9IHJldDtcbjExNzc6XHRcdFx0XHRrbXNnLVx1MDAzZXZlYy5pb3ZlYyA9IGFyZy5pb3ZzO1xuMTE3ODpcdFx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XG4xMTc5Olx0XHRcdH1cbjExODA6XHRcdFx0aWYgKGFyZy5wYXJ0aWFsX21hcClcbjExODE6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9QQVJUSUFMX01BUDtcbjExODI6XHRcbjExODM6XHRcdFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cbjExODQ6XHRcdFx0aWYgKHJldCA9PSAxKSB7XG4xMTg1Olx0XHRcdFx0c3ItXHUwMDNlYnVmID0gYXJnLmlvdnNbMF0uaW92X2Jhc2U7XG4xMTg2Olx0XHRcdFx0c3ItXHUwMDNlbGVuID0gYXJnLmlvdnNbMF0uaW92X2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBCdWZmZXIgSGFuZGxpbmcgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGBpb19yZWN2X2J1Zl9zZWxlY3RgIGZ1bmN0aW9uIGFuZCBzZWVpbmcgdGhhdCBpdCYjMzk7cyBzZXR0aW5nIGBLQlVGX01PREVfRlJFRWAgYW5kIGBLQlVGX01PREVfRVhQQU5EYC4gVGhpcyBzZWVtcyBzcGVjaWZpYyB0byBgSU9SSU5HX09QX1JFQ1ZgIGFuZCBgSU9SSU5HX09QX1JFQ1ZNU0dgIG9wZXJhdGlvbnMgd2hlbiB0aGV5JiMzOTtyZSBidW5kbGVkLiBSaWdodCwgdGhlIGJ1ZyByZXBvcnQgcG9pbnRlZCBtZSB0byBgaW9fcmluZ19idWZmZXJzX3BlZWtgLiBUaGF0JiMzOTtzIGNhbGxlZCBieSBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCwgd2hpY2ggbmFycm93cyBkb3duIHRoZSBhcmVhIG9mIGNvbmNlcm4uCgpTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGtleSBzeW1ib2xzLiBJdCBsb29rcyBsaWtlIGl0IHNob3VsZCBiZSBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBIYW5nIG9uLCBgaW9fcmluZ19idWZmZXJzX3BlZWtgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gQWgsIGFuZCBzbyBhcmUgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBUaGF0IG1lYW5zIGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgIGFyZSBnbG9iYWwuIFNpbmNlIHRob3NlIGFyZSB0aGUgaW50ZXJmYWNlcywgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGFsbCBvZiB0aGVtIGluIHRoZSBmb2N1cyBsaXN0LgoKQnV0IHdhaXQsIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkIGluIHRoZSByZWZlcmVuY2VkIGNvbW1pdCwgc28sIHRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gYmUgbW9zdCBjb25jZXJuZWQgYWJvdXQuIEFscmlnaHQsIGxldCYjMzk7cyBsb2NrIGluIHRoZSBmb2N1cyBzeW1ib2xzIGFzOiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgZm9yIHJlbGF0ZWQgY29uZmlncyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBpbiBwbGFjZS4gT2gsIGBDT05GSUdfTkVUYCBpcyBjbGVhcmx5IGEgcmVxdWlyZW1lbnQsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVycz8gSSYjMzk7bGwgY2hlY2sgYGlvX3VyaW5nL2tidWYuY2AgZm9yIGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmM9NjI2PWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTY3OS1cbmlvX3VyaW5nL2tidWYuYzo2ODA6I2lmZGVmIFNITV9DT0xPVVJcbmlvX3VyaW5nL2tidWYuYy02ODEtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI2NwoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAzNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGlvX3VyaW5nIE5ldHdvcmsgQnVmZmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgbmFycm93ZWQgaXQgZG93bi4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYmV5b25kIGBDT05GSUdfSU9fVVJJTkdgIGFuZCBgQ09ORklHX05FVGAgZm9yIHRoaXMgcGF0Y2guIExldCYjMzk7cyBzdW1tYXJpemUgYW5kIHNvbGlkaWZ5IG15IGZpbmRpbmdzLgoKV29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBUaGUgcmVhc29uIGlzIGNyeXN0YWwgY2xlYXI6IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJiMzOTtzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2hlbiBoYW5kbGluZyBwcm92aWRlZCBidWZmZXJzIHZpYSBidWZmZXIgcmluZ3MuIEVzc2VudGlhbGx5LCB0aGUgZHluYW1pYyBpb3ZlYyBhcnJheSBleHBhbnNpb24gd2FzIGZsYXdlZC4gVGhlIG9yaWdpbmFsIGFycmF5IHdhcyBpbXByb3Blcmx5IGZyZWVkLCBhbmQgdGhlIG5ldyBvbmUgd2FzIGZyZWVkIHByZW1hdHVyZWx5LiBUaGlzIGxlZCB0byBhIGNsYXNzaWMgbWVtb3J5IGxlYWsgb24gdGhlIG9sZCBhcnJheSBhbmQgYSBzdWJzZXF1ZW50IHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgb24gdGhlIG5ldyBhcnJheS4KClRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcmU6IGBpb19yaW5nX2J1ZmZlcnNfcGVla2AsIGBpb19idWZmZXJzX3NlbGVjdGAsIGBpb19idWZmZXJzX3BlZWtgLCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCwgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLgoKV2UgbmVlZCB0byBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb25zOiBgSU9fVVJJTkdgIGFuZCBgTkVUYC4KCkhhbmcgb24sIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGlzLi4uIEkgcmVtZW1iZXIgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBpcyBzdGF0aWMuIFN5emthbGxlciBjYW4gZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIHJlYWNoYWJsZSB0aHJvdWdoIGEgY2FsbCBjaGFpbiBmcm9tIGEgc3lzY2FsbC4gQW5kLCBpbmRlZWQsIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgcGFydCBvZiB0aGUgYGlvX3VyaW5nX2VudGVyYCBjYWxsIHBhdGguIFRoYXQmIzM5O3MgZ29vZC4gV2FpdCBhIHNlY29uZCwgdGhlIG90aGVyIHR3byBzdGF0aWMgZnVuY3Rpb25zLCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCBhbmQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgYXJlIGFsc28gc3RhdGljLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aG9zZSBhcyB3ZWxsLgoKTGV0IG1lIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2ssIHJldmlld2luZyB0aGUgcGF0Y2ggY29kZSBhZ2FpbjoKYGBgYwotCWlmIChhcmctJmd0O21vZGUgJmFtcDsgS0JVRl9NT0RFX0ZSRUUpCi0JCWtmcmVlKGFyZy0mZ3Q7aW92cyk7CiYjNDM7CWlmICgoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKSAmYW1wOyZhbXA7IGFyZy0mZ3Q7aW92cyAhPSBvcmdfaW92cykKJiM0MzsJCWtmcmVlKG9yZ19pb3ZzKTsKYGBgClllcCwgZXhhY3RseSBhcyBJIGV4cGVjdGVkLiBUaGlzIG1hdGNoZXMgbXkgYW5hbHlzaXMgcGVyZmVjdGx5LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuIFRpbWUgdG8gY2FsbCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19zZW5kX3NlbGVjdF9idWZmZXImIzM0OywKICAgICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJiMzOTtzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2l0aCBwcm92aWRlZCBidWZmZXIgcmluZ3MuIFdoZW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaW92ZWMgYXJyYXkgaXMgZXhwYW5kZWQsIHRoZSBvbGQgYXJyYXkgd2FzIG5vdCBmcmVlZCBwcm9wZXJseSwgYW5kIHRoZSBuZXcgYXJyYXkgd2FzIGZyZWVkIGluc3RlYWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhayBvZiB0aGUgb2xkIGFycmF5IGFuZCBhIHVzZS1hZnRlci1mcmVlIG9mIHRoZSBuZXcgYXJyYXkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19zZW5kX3NlbGVjdF9idWZmZXImIzM0OywKICAgICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJiMzOTtzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2l0aCBwcm92aWRlZCBidWZmZXIgcmluZ3MuIFdoZW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaW92ZWMgYXJyYXkgaXMgZXhwYW5kZWQsIHRoZSBvbGQgYXJyYXkgd2FzIG5vdCBmcmVlZCBwcm9wZXJseSwgYW5kIHRoZSBuZXcgYXJyYXkgd2FzIGZyZWVkIGluc3RlYWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhayBvZiB0aGUgb2xkIGFycmF5IGFuZCBhIHVzZS1hZnRlci1mcmVlIG9mIHRoZSBuZXcgYXJyYXkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MToxNi4zMDM3NjU2MjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTE2OTY5Mjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcmluZ19idWZmZXJzX3BlZWtcIixcbiAgICBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gICAgXCJpb19idWZmZXJzX3BlZWtcIixcbiAgICBcImlvX3NlbmRfc2VsZWN0X2J1ZmZlclwiLFxuICAgIFwiaW9fcmVjdl9idWZfc2VsZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBhbmQgbWVtb3J5IGxlYWsgaW4gaW9fdXJpbmcncyBuZXR3b3JrIHJlY2VpdmUvc2VuZCBvcGVyYXRpb25zIHdpdGggcHJvdmlkZWQgYnVmZmVyIHJpbmdzLiBXaGVuIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGlvdmVjIGFycmF5IGlzIGV4cGFuZGVkLCB0aGUgb2xkIGFycmF5IHdhcyBub3QgZnJlZWQgcHJvcGVybHksIGFuZCB0aGUgbmV3IGFycmF5IHdhcyBmcmVlZCBpbnN0ZWFkLCBsZWFkaW5nIHRvIGEgbWVtb3J5IGxlYWsgb2YgdGhlIG9sZCBhcnJheSBhbmQgYSB1c2UtYWZ0ZXItZnJlZSBvZiB0aGUgbmV3IGFycmF5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MToxNi4zMDM3NzA1MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTc5Nzc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk2Nzc5M2ZjNWUyZmUwYzM5MjM0MmMxMGY0Y2ZhMDliN2M1MmNjNTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTY6NTE6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXFxuaW5kZXggYjZiOTY5YjU1ZTEyMjQuLjA3ZDgxZGM3Y2JlMjk2IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xcbkBAIC0zMjgsOCArMzI4LDggQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuIFxcdFxcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsICsraGVhZCwgYmwtXFx1MDAzZW1hc2spO1xcbiBcXHR9IHdoaWxlICgtLW5yX2lvdnMpO1xcbiBcXG4tXFx0aWYgKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxcbi1cXHRcXHRrZnJlZShhcmctXFx1MDAzZWlvdnMpO1xcbitcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuK1xcdFxcdGtmcmVlKG9yZ19pb3ZzKTtcXG4gXFxuIFxcdGlmIChoZWFkID09IHRhaWwpXFxuIFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfRU1QVFk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUxOjE3LjA4NjIzMjE2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAzODcyMTA4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19idWZmZXJzX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJ3MgbmV0d29yayByZWNlaXZlL3NlbmQgb3BlcmF0aW9ucyB3aXRoIHByb3ZpZGVkIGJ1ZmZlciByaW5ncy4gV2hlbiBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBpb3ZlYyBhcnJheSBpcyBleHBhbmRlZCwgdGhlIG9sZCBhcnJheSB3YXMgbm90IGZyZWVkIHByb3Blcmx5LCBhbmQgdGhlIG5ldyBhcnJheSB3YXMgZnJlZWQgaW5zdGVhZCwgbGVhZGluZyB0byBhIG1lbW9yeSBsZWFrIG9mIHRoZSBvbGQgYXJyYXkgYW5kIGEgdXNlLWFmdGVyLWZyZWUgb2YgdGhlIG5ldyBhcnJheS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Njc3OTNmYzVlMmZlMGMzOTIzNDJjMTBmNGNmYTA5YjdjNTJjYzU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTY6NTE6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmNcbmluZGV4IGI2Yjk2OWI1NWUxMjI0Li4wN2Q4MWRjN2NiZTI5NiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xuKysrIGIvaW9fdXJpbmcva2J1Zi5jXG5AQCAtMzI4LDggKzMyOCw4IEBAIHN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCArK2hlYWQsIGJsLVx1MDAzZW1hc2spO1xuIFx0fSB3aGlsZSAoLS1ucl9pb3ZzKTtcbiBcbi1cdGlmIChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpXG4tXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbitcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG4rXHRcdGtmcmVlKG9yZ19pb3ZzKTtcbiBcbiBcdGlmIChoZWFkID09IHRhaWwpXG4gXHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9FTVBUWTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUxOjE3LjA4NjIzMzU5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTAzNjE0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpb191cmluZy9rYnVmLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBhIG1pbm9yIGNoYW5nZSB0byB0aGUgZnJlZWluZyBsb2dpYyBmb3Iga2VybmVsIGJ1ZmZlcnMuIEhtbSwgbGV0IG1lIHNlZS4uLiBpdCBzZWVtcyB0aGUgY29kZSBub3cgY2hlY2tzIGBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92c2AgYmVmb3JlIGNhbGxpbmcgYGtmcmVlYCB3aGVuIHRoZSBgS0JVRl9NT0RFX0ZSRUVgIGZsYWcgaXMgc2V0LiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgY29ycmVjdGlvbiByZWxhdGVkIHRvIG1hbmFnaW5nIG11bHRpcGxlIGlvdmVjIHBvaW50ZXJzLlxuXG5XYWl0IGEgbWludXRlLCBgb3JnX2lvdnNgPyBUaGF0IHZhcmlhYmxlIGlzbid0IGRlZmluZWQgKmhlcmUqIGluIHRoZSBkaWZmLiBXaGVyZSBpcyB0aGF0IGNvbWluZyBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGF0J3MgZGVjbGFyZWQgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgaW9fdXJpbmcva2J1Zi5jYC4gTGV0J3MgYXNzdW1lIGl0IGlzIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lIDMyOCwgSSdsbCBnbyB0YWtlIGEgbG9vayB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gdHJhY2tpbmcgb3IgcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCBpb3ZlYyBzdHJ1Y3R1cmUuIE9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTE6MjIuMzc2NTk5ODY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2tidWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0cmVxLVxcdTAwM2VidWZfaW5kZXggPSBSRUFEX09OQ0UoYnVmLVxcdTAwM2ViaWQpO1xcbiAzMDE6XFx0XFx0ZG8ge1xcbiAzMDI6XFx0XFx0XFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXFx1MDAzZWxlbik7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdFxcdC8qIHRydW5jYXRlIGVuZCBwaWVjZSwgaWYgbmVlZGVkLCBmb3Igbm9uIHBhcnRpYWwgYnVmZmVycyAqL1xcbiAzMDU6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNlIGFyZy1cXHUwMDNlbWF4X2xlbikge1xcbiAzMDY6XFx0XFx0XFx0XFx0bGVuID0gYXJnLVxcdTAwM2VtYXhfbGVuO1xcbiAzMDc6XFx0XFx0XFx0XFx0aWYgKCEoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9JTkMpKSB7XFxuIDMwODpcXHRcXHRcXHRcXHRcXHRhcmctXFx1MDAzZXBhcnRpYWxfbWFwID0gMTtcXG4gMzA5OlxcdFxcdFxcdFxcdFxcdGlmIChpb3YgIT0gYXJnLVxcdTAwM2Vpb3ZzKVxcbiAzMTA6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDMxMTpcXHRcXHRcXHRcXHR9XFxuIDMxMjpcXHRcXHRcXHR9XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdFxcdGlvdi1cXHUwMDNlaW92X2Jhc2UgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlYWRkcikpO1xcbiAzMTU6XFx0XFx0XFx0aW92LVxcdTAwM2Vpb3ZfbGVuID0gbGVuO1xcbiAzMTY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFhY2Nlc3Nfb2soaW92LVxcdTAwM2Vpb3ZfYmFzZSwgbGVuKSkpIHtcXG4gMzE3OlxcdFxcdFxcdFxcdGlmIChhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuIDMxODpcXHRcXHRcXHRcXHRcXHRrZnJlZShhcmctXFx1MDAzZWlvdnMpO1xcbiAzMTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDMyMDpcXHRcXHRcXHR9XFxuIDMyMTpcXHRcXHRcXHRpb3YrKztcXG4gMzIyOlxcdFxcbiAzMjM6XFx0XFx0XFx0YXJnLVxcdTAwM2VvdXRfbGVuICs9IGxlbjtcXG4gMzI0OlxcdFxcdFxcdGFyZy1cXHUwMDNlbWF4X2xlbiAtPSBsZW47XFxuIDMyNTpcXHRcXHRcXHRpZiAoIWFyZy1cXHUwMDNlbWF4X2xlbilcXG4gMzI2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRcXHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCArK2hlYWQsIGJsLVxcdTAwM2VtYXNrKTtcXG4gMzI5OlxcdFxcdH0gd2hpbGUgKC0tbnJfaW92cyk7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdGlmICgoYXJnLVxcdTAwM2Vtb2RlIFxcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFxcdTAwMjZcXHUwMDI2IGFyZy1cXHUwMDNlaW92cyAhPSBvcmdfaW92cylcXG4gMzMyOlxcdFxcdFxcdGtmcmVlKG9yZ19pb3ZzKTtcXG4gMzMzOlxcdFxcbiAzMzQ6XFx0XFx0aWYgKGhlYWQgPT0gdGFpbClcXG4gMzM1OlxcdFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfRU1QVFk7XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQlVGRkVSX1JJTkc7XFxuIDMzODpcXHRcXHRyZXR1cm4gaW92IC0gYXJnLVxcdTAwM2Vpb3ZzO1xcbiAzMzk6XFx0fVxcbiAzNDA6XFx0XFxuIDM0MTpcXHRpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiAzNDI6XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIDM0MzpcXHR7XFxuIDM0NDpcXHRcXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cXHUwMDNlY3R4O1xcbiAzNDU6XFx0XFx0aW50IHJldCA9IC1FTk9FTlQ7XFxuIDM0NjpcXHRcXG4gMzQ3OlxcdFxcdGlvX3Jpbmdfc3VibWl0X2xvY2soY3R4LCBpc3N1ZV9mbGFncyk7XFxuIDM0ODpcXHRcXHRzZWwtXFx1MDAzZWJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KGN0eCwgYXJnLVxcdTAwM2VidWZfZ3JvdXApO1xcbiAzNDk6XFx0XFx0aWYgKHVubGlrZWx5KCFzZWwtXFx1MDAzZWJ1Zl9saXN0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTE6MjIuMzc2NzQ1NTc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MzY1NjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaW9fcmluZ19idWZmZXJzX3BlZWtgIFBhdGNoKipcblxuQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCB3aXRoaW4gYGlvX3VyaW5nL2tidWYuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoYXQncyBiZWluZyB0d2Vha2VkIGluIHRoaXMgY3JpdGljYWwgcGF0aD9cIiBUaGVuLCB0aGUgbWVudGlvbiBvZiBgb3JnX2lvdnNgIHRyaWdnZXJlZCBhIG1lbnRhbCBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGlzIGJlaW5nIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4gSXQncyB0aW1lIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIG9mIGBvcmdfaW92c2AsIHdoaWNoIGlzIGxpa2VseSBhIGtleSBhc3BlY3QgdG8gdGhlIHdvcmsuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3Vic3lzdGVtLiBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGlvdiBtYW5hZ2VtZW50IG9yIHVzZS1jYXNlIHdpdGggdGhvc2UgaW92cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTE6MjYuNTUwNDA0ODI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9rYnVmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdC8qIGNhcCBpdCBhdCBhIHJlYXNvbmFibGUgMjU2LCB3aWxsIGJlIG9uZSBwYWdlIGV2ZW4gZm9yIDRLICovXFxuIDI1MTpcXHQjZGVmaW5lIFBFRUtfTUFYX0lNUE9SVFxcdFxcdDI1NlxcbiAyNTI6XFx0XFxuIDI1MzpcXHRzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4gMjU0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXFxuIDI1NTpcXHR7XFxuIDI1NjpcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfYnVmX3JpbmcgKmJyID0gYmwtXFx1MDAzZWJ1Zl9yaW5nO1xcbiAyNTc6XFx0XFx0c3RydWN0IGlvdmVjICpvcmdfaW92cyA9IGFyZy1cXHUwMDNlaW92cztcXG4gMjU4OlxcdFxcdHN0cnVjdCBpb3ZlYyAqaW92ID0gYXJnLVxcdTAwM2Vpb3ZzO1xcbiAyNTk6XFx0XFx0aW50IG5yX2lvdnMgPSBhcmctXFx1MDAzZW5yX2lvdnM7XFxuIDI2MDpcXHRcXHRfX3UxNiBucl9hdmFpbCwgdGFpbCwgaGVhZDtcXG4gMjYxOlxcdFxcdHN0cnVjdCBpb191cmluZ19idWYgKmJ1ZjtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0dGFpbCA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmJyLVxcdTAwM2V0YWlsKTtcXG4gMjY0OlxcdFxcdGhlYWQgPSBibC1cXHUwMDNlaGVhZDtcXG4gMjY1OlxcdFxcdG5yX2F2YWlsID0gbWluX3QoX191MTYsIHRhaWwgLSBoZWFkLCBVSU9fTUFYSU9WKTtcXG4gMjY2OlxcdFxcdGlmICh1bmxpa2VseSghbnJfYXZhaWwpKVxcbiAyNjc6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiAyNjg6XFx0XFxuIDI2OTpcXHRcXHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCBoZWFkLCBibC1cXHUwMDNlbWFzayk7XFxuIDI3MDpcXHRcXHRpZiAoYXJnLVxcdTAwM2VtYXhfbGVuKSB7XFxuIDI3MTpcXHRcXHRcXHR1MzIgbGVuID0gUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlbGVuKTtcXG4gMjcyOlxcdFxcdFxcdHNpemVfdCBuZWVkZWQ7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghbGVuKSlcXG4gMjc1OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gMjc2OlxcdFxcdFxcdG5lZWRlZCA9IChhcmctXFx1MDAzZW1heF9sZW4gKyBsZW4gLSAxKSAvIGxlbjtcXG4gMjc3OlxcdFxcdFxcdG5lZWRlZCA9IG1pbl9ub3RfemVybyhuZWVkZWQsIChzaXplX3QpIFBFRUtfTUFYX0lNUE9SVCk7XFxuIDI3ODpcXHRcXHRcXHRpZiAobnJfYXZhaWwgXFx1MDAzZSBuZWVkZWQpXFxuIDI3OTpcXHRcXHRcXHRcXHRucl9hdmFpbCA9IG5lZWRlZDtcXG4gMjgwOlxcdFxcdH1cXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0LypcXG4gMjgzOlxcdFxcdCAqIG9ubHkgYWxsb2MgYSBiaWdnZXIgYXJyYXkgaWYgd2Uga25vdyB3ZSBoYXZlIGRhdGEgdG8gbWFwLCBlZyBub3RcXG4gMjg0OlxcdFxcdCAqIGEgc3BlY3VsYXRpdmUgcGVlayBvcGVyYXRpb24uXFxuIDI4NTpcXHRcXHQgKi9cXG4gMjg2OlxcdFxcdGlmIChhcmctXFx1MDAzZW1vZGUgXFx1MDAyNiBLQlVGX01PREVfRVhQQU5EIFxcdTAwMjZcXHUwMDI2IG5yX2F2YWlsIFxcdTAwM2UgbnJfaW92cyBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZW1heF9sZW4pIHtcXG4gMjg3OlxcdFxcdFxcdGlvdiA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW92ZWMsIG5yX2F2YWlsKTtcXG4gMjg4OlxcdFxcdFxcdGlmICh1bmxpa2VseSghaW92KSlcXG4gMjg5OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyOTA6XFx0XFx0XFx0YXJnLVxcdTAwM2Vpb3ZzID0gaW92O1xcbiAyOTE6XFx0XFx0XFx0bnJfaW92cyA9IG5yX2F2YWlsO1xcbiAyOTI6XFx0XFx0fSBlbHNlIGlmIChucl9hdmFpbCBcXHUwMDNjIG5yX2lvdnMpIHtcXG4gMjkzOlxcdFxcdFxcdG5yX2lvdnMgPSBucl9hdmFpbDtcXG4gMjk0OlxcdFxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0Lyogc2V0IGl0IHRvIG1heCwgaWYgbm90IHNldCwgc28gd2UgY2FuIHVzZSBpdCB1bmNvbmRpdGlvbmFsbHkgKi9cXG4gMjk3OlxcdFxcdGlmICghYXJnLVxcdTAwM2VtYXhfbGVuKVxcbiAyOTg6XFx0XFx0XFx0YXJnLVxcdTAwM2VtYXhfbGVuID0gSU5UX01BWDtcXG4gMjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MToyNi41NTE3MDI1MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTQ3NzMxNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBvciBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciBpbnZhbGlkIGZyZWUgc2l0dWF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6XG5cbmBgYGNcbmlmIChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpXG4gICAga2ZyZWUoYXJnLVx1MDAzZWlvdnMpO1xuYGBgXG5cblJpZ2h0LCBpZiBgYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQsIGl0J3MgdGVsbGluZyB1cyB0aGUgY2FsbGVyIHdhbnRzIHVzIHRvIGZyZWUgYGFyZy1cdTAwM2Vpb3ZzYC4gQnV0IHdhaXQsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBhIGxpdHRsZSB0cmlja3kuIEkgbmVlZCB0byB0cmFjZSB0aGUgYWxsb2NhdGlvbiBhbmQgdXNhZ2Ugb2YgYGFyZy1cdTAwM2Vpb3ZzYC4gXG5cbk9rYXksIGluIHRoaXMgZnVuY3Rpb24gYGFyZy1cdTAwM2Vpb3ZzYCBpcyBlaXRoZXIgcGFzc2VkIGluIG9yIGFsbG9jYXRlZCBoZXJlLiBgaW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgbnJfYXZhaWwpOyBhcmctXHUwMDNlaW92cyA9IGlvdjtgIFNvLCBpZiBgYXJnLVx1MDAzZWlvdnNgICp3YXMqIGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBhbmQgbGF0ZXIgZnJlZWQsIHRoZW4gdGhlIGNhbGxlciB3b3VsZCBiZSBleHBlY3RpbmcgdXMgdG8gdGFrZSBjYXJlIG9mIGl0IHdpdGggdGhlIGBLQlVGX01PREVfRlJFRWAgYml0LlxuXG5UaGUga2V5IGlzIHRoaXMgbGluZTogYGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpYC4gU28sIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYGtmcmVlYCBjYWxsIHRvIGBrZnJlZShvcmdfaW92cylgLiBPa2F5LCBzbyBgb3JnX2lvdnNgIG11c3QgYmUgdGhlIG9yaWdpbmFsIHBvaW50ZXIgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuIElmIGBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92c2AgaW4gdGhlIG5ldyBjb2RlLCB0aGVuIGBhcmctXHUwMDNlaW92c2Agd2FzIG5ld2x5IGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gVGhlIHBhdGNoIGlzIHRoZW4gb25seSBmcmVlaW5nIGBvcmdfaW92c2AgaWYgaXQgd2FzIHBhc3NlZCBpbiBhbmQgYGFyZy1cdTAwM2Vpb3ZzYCB3YXMgbmV3bHkgYWxsb2NhdGVkLlxuXG5TbywgaWYgYGFyZy1cdTAwM2Vpb3ZzYCBpcyBhbGxvY2F0ZWQgaW4gdGhlIGZ1bmN0aW9uLCBhbmQgYGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRlJFRWAgaXMgc2V0LCB0aGUgY29ycmVjdCB0aGluZyB0byBkbyBpcyBmcmVlIHRoZSAqb3JpZ2luYWwqIGBhcmctXHUwMDNlaW92c2AgYmVjYXVzZSB0aGUgY2FsbGVyIGlzIHN0aWxsIGV4cGVjdGluZyB0byBmcmVlIHRoZSAqbmV3KiBgYXJnLVx1MDAzZWlvdnNgLiBJZiB3ZSBkb24ndCBmcmVlIGBvcmdfaW92c2AsIHdlIGxlYWsgbWVtb3J5LiBJZiB3ZSAqZG8qIGZyZWUgdGhlIGFsbG9jYXRlZCBgYXJnLVx1MDAzZWlvdnNgLCB3ZSdyZSBkb3VibGUtZnJlZWluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhlIGZpcnN0IGNhc2UuIEkgbmVlZCB0byBjb25maXJtIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIG1ha2VzIHNlbnNlLiBMb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgY2xhc3NpYyBjYXNlIHdoZXJlIGFuIGludGVybWVkaWF0ZSBhbGxvY2F0aW9uIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgb3IgeW91J2xsIGhhdmUgYSBsZWFrLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXIgb2YgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIGl0IGNhbGxzIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTozNS42OTk0Mzc1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzcwNDQ3NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2tidWYuYz0yMzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0yNTItXFxuaW9fdXJpbmcva2J1Zi5jOjI1MzpzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG5pb191cmluZy9rYnVmLmMtMjU0LVxcdFxcdFxcdFxcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwpXFxuLS1cXG5pb191cmluZy9rYnVmLmM9MzQxPWludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzUyLVxcdGlmIChzZWwtXFx1MDAzZWJ1Zl9saXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcXG5pb191cmluZy9rYnVmLmM6MzUzOlxcdFxcdHJldCA9IGlvX3JpbmdfYnVmZmVyc19wZWVrKHJlcSwgYXJnLCBzZWwtXFx1MDAzZWJ1Zl9saXN0KTtcXG5pb191cmluZy9rYnVmLmMtMzU0LVxcdFxcdC8qXFxuLS1cXG5pb191cmluZy9rYnVmLmM9Mzc3PWludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM5MC1cXHRpZiAoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORykge1xcbmlvX3VyaW5nL2tidWYuYzozOTE6XFx0XFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIGJsKTtcXG5pb191cmluZy9rYnVmLmMtMzkyLVxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTo0Mi4wNjk4OTM4MzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjEzMDMwMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlc2UgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGJlaGF2aW9yIGFuZCBob3cgdGhleSBpbnRlcmFjdCwgbGlrZWx5IGluIHRoZSBjb250ZXh0IG9mIHNvbWUga2luZCBvZiBhc3luY2hyb25vdXMgSS9PIHNldHVwLiBJJ20gaW1hZ2luaW5nIGBzZWxlY3RgIGlzIGJlaW5nIHVzZWQgdG8gbm9uLWJsb2NraW5nbHkgbW9uaXRvciB0aGUgcmVhZGluZXNzIG9mIEkvTyBidWZmZXJzLCBwcm9iYWJseSBmb3IgcmVhZGluZyBvciB3cml0aW5nLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIG1lY2hhbmlzbSBpdCBpcyB1c2luZywgd2hldGhlciBpdCdzIHRpZWQgdG8gYW4gZXZlbnQgbG9vcCBvciBzb21ldGhpbmcgZWxzZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGBwZWVrYCBpcyBpbXBsZW1lbnRlZCByZWxhdGl2ZSB0byBgc2VsZWN0YC0tcGVyaGFwcyBgcGVla2AgaGVscHMgZXhhbWluZSBidWZmZXIgY29udGVudHMgd2l0aG91dCBjb25zdW1pbmcgdGhlIGRhdGEsIGJ1dCBvbmx5IGFmdGVyIGl04oCZcyBiZWVuIGNvbmZpcm1lZCByZWFkeSB0byByZWFkIGJ5IGBzZWxlY3RgLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyBgc2VsZWN0YCBoYW5kbGVzIHBhcnRpYWwgcmVhZHMvd3JpdGVzLCBhbmQgaWYgYHBlZWtgIGlzIGFmZmVjdGVkIGJ5IHN1Y2ggc2NlbmFyaW9zLiBUaGlua2luZyBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaXMga2V5LiBUaW1lIHRvIGdldCBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTE6NDYuNjgyOTI3NTg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9rYnVmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQxOlxcdGludCBpb19idWZmZXJzX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuIDM0MjpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4gMzQzOlxcdHtcXG4gMzQ0OlxcdFxcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVxcdTAwM2VjdHg7XFxuIDM0NTpcXHRcXHRpbnQgcmV0ID0gLUVOT0VOVDtcXG4gMzQ2OlxcdFxcbiAzNDc6XFx0XFx0aW9fcmluZ19zdWJtaXRfbG9jayhjdHgsIGlzc3VlX2ZsYWdzKTtcXG4gMzQ4OlxcdFxcdHNlbC1cXHUwMDNlYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QoY3R4LCBhcmctXFx1MDAzZWJ1Zl9ncm91cCk7XFxuIDM0OTpcXHRcXHRpZiAodW5saWtlbHkoIXNlbC1cXHUwMDNlYnVmX2xpc3QpKVxcbiAzNTA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRpZiAoc2VsLVxcdTAwM2VidWZfbGlzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT0JMX0JVRl9SSU5HKSB7XFxuIDM1MzpcXHRcXHRcXHRyZXQgPSBpb19yaW5nX2J1ZmZlcnNfcGVlayhyZXEsIGFyZywgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIDM1NDpcXHRcXHRcXHQvKlxcbiAzNTU6XFx0XFx0XFx0ICogRG9uJ3QgcmVjeWNsZSB0aGVzZSBidWZmZXJzIGlmIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCBwb2xsLlxcbiAzNTY6XFx0XFx0XFx0ICogTm9ib2R5IGVsc2UgY2FuIHVzZSB0aGVtIGFueXdheSwgYW5kIGhvbGRpbmcgb24gdG8gcHJvdmlkZWRcXG4gMzU3OlxcdFxcdFxcdCAqIGJ1ZmZlcnMgZm9yIGEgc2VuZC93cml0ZSBvcGVyYXRpb24gd291bGQgaGFwcGVuIG9uIHRoZSBhcHBcXG4gMzU4OlxcdFxcdFxcdCAqIHNpZGUgYW55d2F5IHdpdGggbm9ybWFsIGJ1ZmZlcnMuIEJlc2lkZXMsIHdlIGFscmVhZHlcXG4gMzU5OlxcdFxcdFxcdCAqIGNvbW1pdHRlZCB0aGVtLCB0aGV5IGNhbm5vdCBiZSBwdXQgYmFjayBpbiB0aGUgcXVldWUuXFxuIDM2MDpcXHRcXHRcXHQgKi9cXG4gMzYxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuIDM2MjpcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRkZFUlNfQ09NTUlUIHwgUkVRX0ZfQkxfTk9fUkVDWUNMRTtcXG4gMzYzOlxcdFxcdFxcdFxcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBhcmctXFx1MDAzZW91dF9sZW4sIHJldCkpXFxuIDM2NDpcXHRcXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xcbiAzNjU6XFx0XFx0XFx0fVxcbiAzNjY6XFx0XFx0fSBlbHNlIHtcXG4gMzY3OlxcdFxcdFxcdHJldCA9IGlvX3Byb3ZpZGVkX2J1ZmZlcnNfc2VsZWN0KHJlcSwgXFx1MDAyNmFyZy1cXHUwMDNlb3V0X2xlbiwgc2VsLVxcdTAwM2VidWZfbGlzdCwgYXJnLVxcdTAwM2Vpb3ZzKTtcXG4gMzY4OlxcdFxcdH1cXG4gMzY5OlxcdG91dF91bmxvY2s6XFxuIDM3MDpcXHRcXHRpZiAoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSB7XFxuIDM3MTpcXHRcXHRcXHRzZWwtXFx1MDAzZWJ1Zl9saXN0ID0gTlVMTDtcXG4gMzcyOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKTtcXG4gMzczOlxcdFxcdH1cXG4gMzc0OlxcdFxcdHJldHVybiByZXQ7XFxuIDM3NTpcXHR9XFxuIDM3NjpcXHRcXG4gMzc3OlxcdGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiAzNzg6XFx0XFx0XFx0ICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcXG4gMzc5OlxcdHtcXG4gMzgwOlxcdFxcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gcmVxLVxcdTAwM2VjdHg7XFxuIDM4MTpcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsO1xcbiAzODI6XFx0XFx0aW50IHJldDtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKTtcXG4gMzg1OlxcdFxcbiAzODY6XFx0XFx0YmwgPSBpb19idWZmZXJfZ2V0X2xpc3QoY3R4LCBhcmctXFx1MDAzZWJ1Zl9ncm91cCk7XFxuIDM4NzpcXHRcXHRpZiAodW5saWtlbHkoIWJsKSlcXG4gMzg4OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAzODk6XFx0XFxuIDM5MDpcXHRcXHRpZiAoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTo0Ni42ODMwMzU3MzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1NjgzMDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgS0JVRl9NT0RFX0ZSRUUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYEtCVUZfTU9ERV9GUkVFYC4gU2VlbXMgbGlrZSB0aGUgYmVzdCBmaXJzdCBzdGVwIGlzIHRvIGxvY2F0ZSAqd2hlcmUqIHRoaXMgZmxhZyBpcyBhY3R1YWxseSBiZWluZyBzZXQuIEtub3dpbmcgdGhlIGluaXRpYWwgY29udGV4dCBpcyBjcml0aWNhbDsgaXQnbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIHN1YnNlcXVlbnQgY29kZS4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIG9yIHJlYWxseSBhbnl0aGluZyBlbHNlIEkgbmVlZCB0byBkbyB3aXRoIHRoaXMgY29kZS4gU28sIGxldCdzIHN0YXJ0IHdpdGggYSBzb2xpZCBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2guIEkgbmVlZCB0byBmaW5kIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBLQlVGX01PREVfRlJFRWAgaXMgYXNzaWduZWQgYSB2YWx1ZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBsYXJnZXIgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzIwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTo1MS4yMzk4NjkwODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQ5Mjg5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS0JVRl9NT0RFX0ZSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zMzAtXFxuaW9fdXJpbmcva2J1Zi5jOjMzMTpcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuaW9fdXJpbmcva2J1Zi5jLTMzMi1cXHRcXHRrZnJlZShvcmdfaW92cyk7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9NTM9ZW51bSB7XFxuLS1cXG5pb191cmluZy9rYnVmLmgtNTYtXFx0LyogaWYgYmlnZ2VyIHZlYyBhbGxvY2F0ZWQsIGZyZWUgb2xkIG9uZSAqL1xcbmlvX3VyaW5nL2tidWYuaDo1NzpcXHRLQlVGX01PREVfRlJFRVxcdFxcdD0gMixcXG5pb191cmluZy9rYnVmLmgtNTgtfTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTYwOD1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNjIyLVxcdFxcdGFyZy5pb3ZzID0ga21zZy1cXHUwMDNldmVjLmlvdmVjO1xcbmlvX3VyaW5nL25ldC5jOjYyMzpcXHRcXHRhcmcubW9kZSA9IEtCVUZfTU9ERV9GUkVFO1xcbmlvX3VyaW5nL25ldC5jLTYyNC1cXHR9XFxuLS1cXG5pb191cmluZy9uZXQuYz0xMTM3PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTE1OS1cXHRcXHRcXHRhcmcuaW92cyA9IGttc2ctXFx1MDAzZXZlYy5pb3ZlYztcXG5pb191cmluZy9uZXQuYzoxMTYwOlxcdFxcdFxcdGFyZy5tb2RlIHw9IEtCVUZfTU9ERV9GUkVFO1xcbmlvX3VyaW5nL25ldC5jLTExNjEtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MTo1NS41OTQ4MDUzMzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NDg3NTI5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgQnVnIEZpeDogS0JVRl9NT0RFX0ZSRUUgYW5kIFZlY3RvciBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYEtCVUZfTU9ERV9GUkVFYC4uLiB0aGF0J3MgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgXCJpZiB0aGUgdmVjdG9yIGlzIGV4cGFuZGVkLCBmcmVlIHRoZSBvcmlnaW5hbCBvbmVcIi4gUmlnaHQsIGdvdCBpdC4gTGV0IG1lIHRoaW5rLiBMb29raW5nIGF0IHRoZSBvbGQgY29kZSwgaXQgdXNlZCB0byBiZSBhIHNpbXBsZSBga2ZyZWUoYXJnLVx1MDAzZWlvdnMpYCBpZiB0aGUgYEtCVUZfTU9ERV9GUkVFYCBiaXQgd2FzIHNldC4gQnV0IGhvbGQgb24sIGBhcmctXHUwMDNlaW92c2AgY291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCB2ZWN0b3IgZHVlIHRvIGFuIGV4cGFuc2lvbiwgYW5kIHRoYXQncyB0aGUgcHJvYmxlbS5cblxuU3BlY2lmaWNhbGx5LCBpZiBgS0JVRl9NT0RFX0VYUEFORGAgd2FzIHNldCwgYW5kIHdlIGhhZCB0byBhbGxvY2F0ZSBhIG5ldyB2ZWN0b3IsIHRoZSBjb2RlIGRvZXM6IGBhcmctXHUwMDNlaW92cyA9IGlvdjtgIFNvLCBpZiBgS0JVRl9NT0RFX0ZSRUVgIHdhcyB0aGVuIGFsc28gc2V0LCB0aGUgbGF0ZXIgYGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKWAgd291bGQgZnJlZSB0aGUgKm5ldyogdmVjdG9yLCBub3QgdGhlIG9sZCBvbmUuIE1lYW5pbmcgd2UncmUgbGVha2luZyB0aGUgb2xkIG9uZSBhbmQgdGhlIGNhbGxlciB3b3VsZCB0aGVuIGJlIHVzaW5nIGEgZnJlZWQgdmVjdG9yLiBZaWtlcyEgVGhhdCdzIGEgdXNlLWFmdGVyLWZyZWUgKmFuZCogYSBtZW1vcnkgbGVhayFcblxuQnV0IHRoZXJlJ3MgbW9yZS4gV2hhdCBpZiBgS0JVRl9NT0RFX0ZSRUVgIHdhcyBzZXQsIGJ1dCB0aGUgdmVjdG9yIHdhc24ndCBhY3R1YWxseSBleHBhbmRlZD8gVGhlbiB0aGUgY29kZSB3YXMgZnJlZWluZyB0aGUgY2FsbGVyJ3MgKm9yaWdpbmFsKiBgYXJnLVx1MDAzZWlvdnNgIHZlY3Rvciwgd2hpY2ggdGhleSdyZSBzdGlsbCB1c2luZyEgVGhhdCBpcyBhbHNvIGEgZGlzYXN0ZXIuIE5vdyBJIGdldCBpdDogYEtCVUZfTU9ERV9GUkVFYCBtZWFucyBcInRoZSBjYWxsZXIgaGFuZGVkIG1lIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHZlY3RvciwgYW5kIGlmIEkgZXhwYW5kIGl0LCBmcmVlIHRoZSBvbGQgb25lXCIuXG5cblRoZSBmaXggaXMgbm93IHRoaXM6IGBpZiAoKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRlJFRSkgXHUwMDI2XHUwMDI2IGFyZy1cdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKSBrZnJlZShvcmdfaW92cyk7YCB3aGljaCBjb3JyZWN0bHkgZnJlZXMgdGhlICpvbGQqIHZlY3RvciAoYG9yZ19pb3ZzYCkgKm9ubHkqIGlmIGEgbmV3IHZlY3RvciB3YXMgYWxsb2NhdGVkIChgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnNgKS4gTXVjaCBiZXR0ZXIhIFRoaXMgY2xlYW5seSBmaXhlcyB0aGUgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIHRoZSBpb191cmluZyBuZXR3b3JrIHJlY2VpdmUvc2VuZCB3aXRoIHByb3ZpZGVkIGJ1ZmZlcnMuXG5cblNvLCBpcyB0aGlzIGZpeCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljLiBJIHNob3VsZCBmb2N1cyBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYGlvX2J1ZmZlcnNfcGVla2AsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLCBhbmQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAuIEhhbmcgb24sIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgc3RhdGljLCBJIGNhbiB3b3JrIGFyb3VuZCB0aGF0LiBJJ2xsIGluY2x1ZGUgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLiBBbmQgbWFrZSBzdXJlIGBDT05GSUdfSU9fVVJJTkdgIGlzIGVuYWJsZWQuIEl0IHByb2JhYmx5IGlzLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBpb191cmluZy9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MjowNi4yNDM1NjA5NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTk0MzUzMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTU0PWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTYxLVxcbmluaXQvS2NvbmZpZzoxOTYyOmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTYzLVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTcxPWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTgzLVxcbmluaXQvS2NvbmZpZzoxOTg0OmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk4NS1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy01LVxcbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxcbmlvX3VyaW5nL0tjb25maWctNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjA5LjI0MzAxNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1ODMwNzMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSB0aGUgYENPTkZJR19JT19VUklOR2Agc2V0dGluZyDigJMgdGhhdCdzIHRoZSBiaWcgb25lIHRvIHN0YXJ0IHdpdGguIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGlvX3VyaW5nL2tidWYuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBmaXJzdC5cblxuTGV0J3MgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBidWcgaXRzZWxmIGlzIGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AsIHdoaWNoIGlzIG9idmlvdXNseSB0aWVkIHRvIGJ1ZmZlciByaW5ncy4gQW5kIGJ1ZmZlciByaW5ncywgb2YgY291cnNlLCBhcmUgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaW9fdXJpbmcgZnVuY3Rpb25hbGl0eS5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3QsIGFyZSB0aGVyZSBhbnkgbmV0d29yay1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHBsYXkgYSByb2xlIGhlcmUgd2l0aGluIGlvX3VyaW5nPyBIbW0sIEkgc2VlIHRoYXQgYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkLiBUaGF0IG1ha2VzIG1lIHdhbnQgdG8gZXhhbWluZSBgaW9fdXJpbmcvbmV0LmNgIGNsb3NlbHkgYXMgd2VsbC4gVGhpcyB3aWxsIGhlbHAgdG8gdW5kZXJzdGFuZCBhbnkgbmV0d29yay1yZWxhdGVkIGltcGxpY2F0aW9ucyBvZiB0aGlzIGJ1ZywgcGFydGljdWxhcmx5IGlmIG5ldHdvcmsgYnVmZmVyIHJpbmdzIGFyZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk4MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MjoxMy41MDEzMjU5MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDAxODg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfRVBPTEwpXFx0XFx0Kz0gZXBvbGwub1xcbmlvX3VyaW5nL01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxcdCs9IG5hcGkub1xcbmlvX3VyaW5nL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORVQpICs9IG5ldC5vIGNtZF9uZXQub1xcbmlvX3VyaW5nL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBmZGluZm8ub1xcbi0tXFxuaW9fdXJpbmcvZmRpbmZvLmMtMTktXFxuaW9fdXJpbmcvZmRpbmZvLmM6MjA6I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXFxuaW9fdXJpbmcvZmRpbmZvLmMtMjEtc3RhdGljIF9fY29sZCB2b2lkIGNvbW1vbl90cmFja2luZ19zaG93X2ZkaW5mbyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg9MTI4PXN0cnVjdCBpb193YWl0X3F1ZXVlIHtcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTM4LVxcbmlvX3VyaW5nL2lvX3VyaW5nLmg6MTM5OiNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxcbmlvX3VyaW5nL2lvX3VyaW5nLmgtMTQwLVxcdGt0aW1lX3QgbmFwaV9idXN5X3BvbGxfZHQ7XFxuLS1cXG5pb191cmluZy9uYXBpLmMtNS1cXG5pb191cmluZy9uYXBpLmM6NjojaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcXG5pb191cmluZy9uYXBpLmMtNy1cXG4tLVxcbmlvX3VyaW5nL25hcGkuaC05LVxcbmlvX3VyaW5nL25hcGkuaDoxMDojaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcXG5pb191cmluZy9uYXBpLmgtMTEtXFxuLS1cXG5pb191cmluZy9uYXBpLmg9ODQ9c3RhdGljIGlubGluZSBpbnQgaW9fbmFwaV9zcXBvbGxfYnVzeV9wb2xsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvbmFwaS5oLTg3LX1cXG5pb191cmluZy9uYXBpLmg6ODg6I2VuZGlmIC8qIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMICovXFxuaW9fdXJpbmcvbmFwaS5oLTg5LVxcbi0tXFxuaW9fdXJpbmcvbmV0Lmg9OD1zdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyIHtcXG5pb191cmluZy9uZXQuaDo5OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvbmV0LmgtMTAtXFx0c3RydWN0IGlvdV92ZWNcXHRcXHRcXHRcXHR2ZWM7XFxuLS1cXG5pb191cmluZy9uZXQuaC0yNS1cXG5pb191cmluZy9uZXQuaDoyNjojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL25ldC5oLTI3LVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYz01ND1jb25zdCBzdHJ1Y3QgaW9faXNzdWVfZGVmIGlvX2lzc3VlX2RlZnNbXSA9IHtcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMTQyLVxcdFxcdC5pb3ByaW9cXHRcXHRcXHQ9IDEsXFxuaW9fdXJpbmcvb3BkZWYuYzoxNDM6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTE0NC1cXHRcXHQuYXN5bmNfc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy0xNTYtXFx0XFx0LmlvcHJpb1xcdFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjE1NzojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtMTU4LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTE4Mi1cXHRcXHQuaW9wcmlvXFx0XFx0XFx0PSAxLFxcdC8qIHVzZWQgZm9yIGZsYWdzICovXFxuaW9fdXJpbmcvb3BkZWYuYzoxODM6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTE4NC1cXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fYWNjZXB0X3ByZXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTIwNC1cXHRcXHQucG9sbG91dFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjIwNTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtMjA2LVxcdFxcdC5maWx0ZXJfcGR1X3NpemVcXHQ9IHNpemVvZl9maWVsZChzdHJ1Y3QgaW9fdXJpbmdfYnBmX2N0eCwgY29ubmVjdCksXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTI4NS1cXHRcXHQuYnVmZmVyX3NlbGVjdFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjI4NjojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtMjg3LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTMwMC1cXHRcXHQuaW9wcmlvXFx0XFx0XFx0PSAxLFxcbmlvX3VyaW5nL29wZGVmLmM6MzAxOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy0zMDItXFx0XFx0LmFzeW5jX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtMzU0LVxcdFxcdC5uZWVkc19maWxlXFx0XFx0PSAxLFxcbmlvX3VyaW5nL29wZGVmLmM6MzU1OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy0zNTYtXFx0XFx0LnByZXBcXHRcXHRcXHQ9IGlvX3NodXRkb3duX3ByZXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTQwNy1cXHRcXHQuYXVkaXRfc2tpcFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjQwODojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtNDA5LVxcdFxcdC5maWx0ZXJfcGR1X3NpemVcXHQ9IHNpemVvZl9maWVsZChzdHJ1Y3QgaW9fdXJpbmdfYnBmX2N0eCwgc29ja2V0KSxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNDMxLVxcdFxcdC5pb3ByaW9cXHRcXHRcXHQ9IDEsXFxuaW9fdXJpbmcvb3BkZWYuYzo0MzI6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTQzMy1cXHRcXHQuYXN5bmNfc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy00NDQtXFx0XFx0LmlvcHJpb1xcdFxcdFxcdD0gMSxcXG5pb191cmluZy9vcGRlZi5jOjQ0NTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtNDQ2LVxcdFxcdC5hc3luY19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IGlvX2FzeW5jX21zZ2hkciksXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTUwMy1cXHRbSU9SSU5HX09QX0JJTkRdID0ge1xcbmlvX3VyaW5nL29wZGVmLmM6NTA0OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy01MDUtXFx0XFx0Lm5lZWRzX2ZpbGVcXHRcXHQ9IDEsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTUxMy1cXHRbSU9SSU5HX09QX0xJU1RFTl0gPSB7XFxuaW9fdXJpbmcvb3BkZWYuYzo1MTQ6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTUxNS1cXHRcXHQubmVlZHNfZmlsZVxcdFxcdD0gMSxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNTI3LVxcdFxcdC5pb3ByaW9cXHRcXHRcXHQ9IDEsXFxuaW9fdXJpbmcvb3BkZWYuYzo1Mjg6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTUyOS1cXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fcmVjdnpjX3ByZXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jPTU5Nj1jb25zdCBzdHJ1Y3QgaW9fY29sZF9kZWYgaW9fY29sZF9kZWZzW10gPSB7XFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTYzMy1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIlNFTkRNU0dcXFwiLFxcbmlvX3VyaW5nL29wZGVmLmM6NjM0OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy02MzUtXFx0XFx0LmNsZWFudXBcXHRcXHQ9IGlvX3NlbmRtc2dfcmVjdm1zZ19jbGVhbnVwLFxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy02NDAtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJSRUNWTVNHXFxcIixcXG5pb191cmluZy9vcGRlZi5jOjY0MTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtNjQyLVxcdFxcdC5jbGVhbnVwXFx0XFx0PSBpb19zZW5kbXNnX3JlY3Ztc2dfY2xlYW51cCxcXG4tLVxcbmlvX3VyaW5nL29wZGVmLmMtNjk4LVxcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiU0VORFxcXCIsXFxuaW9fdXJpbmcvb3BkZWYuYzo2OTk6I2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jLTcwMC1cXHRcXHQuY2xlYW51cFxcdFxcdD0gaW9fc2VuZG1zZ19yZWN2bXNnX2NsZWFudXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTcwNS1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIlJFQ1ZcXFwiLFxcbmlvX3VyaW5nL29wZGVmLmM6NzA2OiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy03MDctXFx0XFx0LmNsZWFudXBcXHRcXHQ9IGlvX3NlbmRtc2dfcmVjdm1zZ19jbGVhbnVwLFxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy03ODQtXFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJTRU5EX1pDXFxcIixcXG5pb191cmluZy9vcGRlZi5jOjc4NTojaWYgZGVmaW5lZChDT05GSUdfTkVUKVxcbmlvX3VyaW5nL29wZGVmLmMtNzg2LVxcdFxcdC5jbGVhbnVwXFx0XFx0PSBpb19zZW5kX3pjX2NsZWFudXAsXFxuLS1cXG5pb191cmluZy9vcGRlZi5jLTc5MS1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIlNFTkRNU0dfWkNcXFwiLFxcbmlvX3VyaW5nL29wZGVmLmM6NzkyOiNpZiBkZWZpbmVkKENPTkZJR19ORVQpXFxuaW9fdXJpbmcvb3BkZWYuYy03OTMtXFx0XFx0LmNsZWFudXBcXHRcXHQ9IGlvX3NlbmRfemNfY2xlYW51cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTI6MTQuMDA1MzUxNjg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0OTU0MDU0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpb191cmluZ2AgQnVnIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aHJvdWdoIHRoaXMgYGlvX3VyaW5nYCBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX05FVGAgaXMgZXNzZW50aWFsIGZvciBjb21waWxpbmcgYGlvX3VyaW5nL25ldC5jYCwgd2hpY2ggaXMgYSBrZXkgZGVwZW5kZW5jeSBoZXJlLiBUaGUgYWN0dWFsIGJ1ZydzIGNvZGUgaXMgaW4gYGlvX3VyaW5nL2tidWYuY2AsIHdoaWNoIGlzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSwgYnV0IHRoZSBjcnVjaWFsIGBLQlVGX01PREVfRlJFRWAgZmxhZyBpcyAqb25seSogdXNlZCB3aXRoaW4gYGlvX3VyaW5nL25ldC5jYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJlY2F1c2UgdGhhdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlLi4uIEkgZGlkIHJ1biBhIGBncmVwYCBmb3IgYEtCVUZfTU9ERV9GUkVFYCBlYXJsaWVyOlxuXG5gYGBcbmlvX3VyaW5nL2tidWYuYzoyNTM6c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG5pb191cmluZy9rYnVmLmM6MzMxOlx0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcbmlvX3VyaW5nL2tidWYuaDo1NzpcdEtCVUZfTU9ERV9GUkVFXHRcdD0gMixcbmlvX3VyaW5nL25ldC5jOjYyMzpcdFx0YXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTtcbmlvX3VyaW5nL25ldC5jOjExNjA6XHRcdFx0YXJnLm1vZGUgfD0gS0JVRl9NT0RFX0ZSRUU7XG5gYGBcblxuWWVwLCBjb25maXJtZWQuIFRoZSBmbGFnIGlzIHN0cmljdGx5IHRpZWQgdG8gYGlvX3VyaW5nL25ldC5jYC4gVGhlcmVmb3JlLCBgQ09ORklHX05FVGAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IHRvIGV4cG9zZSB0aGlzIGJ1Zy4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfSU9fVVJJTkdgIGlzIG5lY2Vzc2FyeSBhcyB3ZWxsLCBiZWNhdXNlIHRoaXMgaXMgYW4gYGlvX3VyaW5nYCBzcGVjaWZpYyBpc3N1ZS5cblxuT2theSwgbGV0J3Mgem9vbSBpbiBvbiBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCBhbmQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgYmVjYXVzZSB0aGF0IGlzIHdoZXJlIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGxvZ2ljIGZsb3cuIExldCdzIHN0YXJ0IHdpdGggYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjIxLjUwMDc2MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuIDYwMTpcXHRcXHRcXHRyZXQgKz0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIDYwMjpcXHRcXHRlbHNlIGlmIChzci1cXHUwMDNlZG9uZV9pbylcXG4gNjAzOlxcdFxcdFxcdHJldCA9IHNyLVxcdTAwM2Vkb25lX2lvO1xcbiA2MDQ6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApO1xcbiA2MDU6XFx0XFx0cmV0dXJuIElPVV9DT01QTEVURTtcXG4gNjA2OlxcdH1cXG4gNjA3OlxcdFxcbiA2MDg6XFx0c3RhdGljIGludCBpb19zZW5kX3NlbGVjdF9idWZmZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcXG4gNjA5OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2cpXFxuIDYxMDpcXHR7XFxuIDYxMTpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbiA2MTI6XFx0XFx0c3RydWN0IGJ1Zl9zZWxfYXJnIGFyZyA9IHtcXG4gNjEzOlxcdFxcdFxcdC5pb3ZzID0gXFx1MDAyNmttc2ctXFx1MDAzZWZhc3RfaW92LFxcbiA2MTQ6XFx0XFx0XFx0Lm1heF9sZW4gPSBtaW5fbm90X3plcm8oc3ItXFx1MDAzZWxlbiwgSU5UX01BWCksXFxuIDYxNTpcXHRcXHRcXHQubnJfaW92cyA9IDEsXFxuIDYxNjpcXHRcXHRcXHQuYnVmX2dyb3VwID0gc3ItXFx1MDAzZWJ1Zl9ncm91cCxcXG4gNjE3OlxcdFxcdH07XFxuIDYxODpcXHRcXHRpbnQgcmV0O1xcbiA2MTk6XFx0XFxuIDYyMDpcXHRcXHRpZiAoa21zZy1cXHUwMDNldmVjLmlvdmVjKSB7XFxuIDYyMTpcXHRcXHRcXHRhcmcubnJfaW92cyA9IGttc2ctXFx1MDAzZXZlYy5ucjtcXG4gNjIyOlxcdFxcdFxcdGFyZy5pb3ZzID0ga21zZy1cXHUwMDNldmVjLmlvdmVjO1xcbiA2MjM6XFx0XFx0XFx0YXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTtcXG4gNjI0OlxcdFxcdH1cXG4gNjI1OlxcdFxcbiA2MjY6XFx0XFx0aWYgKCEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpXFxuIDYyNzpcXHRcXHRcXHRhcmcubnJfaW92cyA9IDE7XFxuIDYyODpcXHRcXHRlbHNlXFxuIDYyOTpcXHRcXHRcXHRhcmcubW9kZSB8PSBLQlVGX01PREVfRVhQQU5EO1xcbiA2MzA6XFx0XFxuIDYzMTpcXHRcXHRyZXQgPSBpb19idWZmZXJzX3NlbGVjdChyZXEsIFxcdTAwMjZhcmcsIHNlbCwgaXNzdWVfZmxhZ3MpO1xcbiA2MzI6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcbiA2MzM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0aWYgKGFyZy5pb3ZzICE9IFxcdTAwMjZrbXNnLVxcdTAwM2VmYXN0X2lvdiBcXHUwMDI2XFx1MDAyNiBhcmcuaW92cyAhPSBrbXNnLVxcdTAwM2V2ZWMuaW92ZWMpIHtcXG4gNjM2OlxcdFxcdFxcdGttc2ctXFx1MDAzZXZlYy5uciA9IHJldDtcXG4gNjM3OlxcdFxcdFxcdGttc2ctXFx1MDAzZXZlYy5pb3ZlYyA9IGFyZy5pb3ZzO1xcbiA2Mzg6XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XFxuIDYzOTpcXHRcXHR9XFxuIDY0MDpcXHRcXHRzci1cXHUwMDNlbGVuID0gYXJnLm91dF9sZW47XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdGlmIChyZXQgPT0gMSkge1xcbiA2NDM6XFx0XFx0XFx0c3ItXFx1MDAzZWJ1ZiA9IGFyZy5pb3ZzWzBdLmlvdl9iYXNlO1xcbiA2NDQ6XFx0XFx0XFx0cmV0ID0gaW1wb3J0X3VidWYoSVRFUl9TT1VSQ0UsIHNyLVxcdTAwM2VidWYsIHNyLVxcdTAwM2VsZW4sXFxuIDY0NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKTtcXG4gNjQ2OlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbiA2NDc6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjQ4OlxcdFxcdH0gZWxzZSB7XFxuIDY0OTpcXHRcXHRcXHRpb3ZfaXRlcl9pbml0KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxNjo1MjoyMS41MDA5NzM1NzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyNzM2Mzc5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIEJ1ZmZlciBNYW5hZ2VtZW50IGluIEkvTyBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgY2xvc2VseSBhdCBob3cga2VybmVsIGJ1ZmZlcnMgYXJlIG1hbmFnZWQgZHVyaW5nIEkvTyBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAuIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIHNldHMgYEtCVUZfTU9ERV9GUkVFYCB3aGVuIGBrbXNnLVx1MDAzZXZlYy5pb3ZlY2AgaXMgcHJlc2VudC4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgd2UncmUgdXNpbmcgYW4gaW92ZWMsIHRoZSBidWZmZXIgc2hvdWxkIGJlIGZyZWVkIGFmdGVyIHRoZSBzZW5kLiBOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGl0IHNldHMgYEtCVUZfTU9ERV9FWFBBTkRgIHdoZW4gYElPUklOR19SRUNWU0VORF9CVU5ETEVgIGlzIGZsYWdnZWQuIFRoaXMgaXMgb2J2aW91c2x5IGxpbmtlZCB0byBidW5kbGVkIG9wZXJhdGlvbnMgd2l0aCBgSU9SSU5HX09QX1NFTkRgIGFuZCBgSU9SSU5HX09QX1NFTkRNU0dgLCBnaXZpbmcgdGhlIGtlcm5lbCBwZXJtaXNzaW9uIHRvIGV4cGFuZCB0aGUgYnVmZmVyIGFzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgYnVuZGxlZCBzZW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGZ1bGx5IGFuZCBlbnN1cmUgdGhlIGxvZ2ljIGlzIGNvbnNpc3RlbnQgdGhyb3VnaG91dCB0aGUgSS9PIHBhdGguIFRoZSBjb250ZXh0IGhpbnRzIHRoaXMgaXMgYWxsIHRvIGRvIHdpdGggdGhlICpzZW5kKiBzbyBsZXQgbWUgbm93IHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBpb19yZWN2X2J1Zl9zZWxlY3RgIHRvIHNlZSBpZiB0aGUgY29tcGxlbWVudGFyeSAqcmVjZWl2ZSogbG9naWMgaXMgc291bmQgYW5kIGFsaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTI6MjYuNzI4MzUxMjI3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTM3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTM3OlxcdHN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbjExMzg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuMTEzOTpcXHR7XFxuMTE0MDpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbjExNDE6XFx0XFx0aW50IHJldDtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0LypcXG4xMTQ0OlxcdFxcdCAqIElmIHRoZSByaW5nIGlzbid0IGxvY2tlZCwgdGhlbiBkb24ndCB1c2UgdGhlIHBlZWsgaW50ZXJmYWNlXFxuMTE0NTpcXHRcXHQgKiB0byBncmFiIG11bHRpcGxlIGJ1ZmZlcnMgYXMgd2Ugd2lsbCBsb2NrL3VubG9jayBiZXR3ZWVuXFxuMTE0NjpcXHRcXHQgKiB0aGlzIHNlbGVjdGlvbiBhbmQgcG9zdGluZyB0aGUgYnVmZmVycy5cXG4xMTQ3OlxcdFxcdCAqL1xcbjExNDg6XFx0XFx0aWYgKCEoaXNzdWVfZmxhZ3MgXFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSBcXHUwMDI2XFx1MDAyNlxcbjExNDk6XFx0XFx0ICAgIHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcXG4xMTUwOlxcdFxcdFxcdHN0cnVjdCBidWZfc2VsX2FyZyBhcmcgPSB7XFxuMTE1MTpcXHRcXHRcXHRcXHQuaW92cyA9IFxcdTAwMjZrbXNnLVxcdTAwM2VmYXN0X2lvdixcXG4xMTUyOlxcdFxcdFxcdFxcdC5ucl9pb3ZzID0gMSxcXG4xMTUzOlxcdFxcdFxcdFxcdC5tb2RlID0gS0JVRl9NT0RFX0VYUEFORCxcXG4xMTU0OlxcdFxcdFxcdFxcdC5idWZfZ3JvdXAgPSBzci1cXHUwMDNlYnVmX2dyb3VwLFxcbjExNTU6XFx0XFx0XFx0fTtcXG4xMTU2OlxcdFxcbjExNTc6XFx0XFx0XFx0aWYgKGttc2ctXFx1MDAzZXZlYy5pb3ZlYykge1xcbjExNTg6XFx0XFx0XFx0XFx0YXJnLm5yX2lvdnMgPSBrbXNnLVxcdTAwM2V2ZWMubnI7XFxuMTE1OTpcXHRcXHRcXHRcXHRhcmcuaW92cyA9IGttc2ctXFx1MDAzZXZlYy5pb3ZlYztcXG4xMTYwOlxcdFxcdFxcdFxcdGFyZy5tb2RlIHw9IEtCVUZfTU9ERV9GUkVFO1xcbjExNjE6XFx0XFx0XFx0fVxcbjExNjI6XFx0XFxuMTE2MzpcXHRcXHRcXHRpZiAoc2VsLVxcdTAwM2V2YWwpXFxuMTE2NDpcXHRcXHRcXHRcXHRhcmcubWF4X2xlbiA9IHNlbC1cXHUwMDNldmFsO1xcbjExNjU6XFx0XFx0XFx0ZWxzZSBpZiAoa21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgXFx1MDAzZSAxKVxcbjExNjY6XFx0XFx0XFx0XFx0YXJnLm1heF9sZW4gPSBtaW5fbm90X3plcm8oc2VsLVxcdTAwM2V2YWwsIChzc2l6ZV90KSBrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSk7XFxuMTE2NzpcXHRcXG4xMTY4OlxcdFxcdFxcdC8qIGlmIG1zaG90IGxpbWl0ZWQsIGVuc3VyZSB3ZSBkb24ndCBnbyBvdmVyICovXFxuMTE2OTpcXHRcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKVxcbjExNzA6XFx0XFx0XFx0XFx0YXJnLm1heF9sZW4gPSBtaW5fbm90X3plcm8oYXJnLm1heF9sZW4sIHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xcbjExNzE6XFx0XFx0XFx0cmV0ID0gaW9fYnVmZmVyc19wZWVrKHJlcSwgXFx1MDAyNmFyZywgc2VsKTtcXG4xMTcyOlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSlcXG4xMTczOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3NDpcXHRcXG4xMTc1OlxcdFxcdFxcdGlmIChhcmcuaW92cyAhPSBcXHUwMDI2a21zZy1cXHUwMDNlZmFzdF9pb3YgXFx1MDAyNlxcdTAwMjYgYXJnLmlvdnMgIT0ga21zZy1cXHUwMDNldmVjLmlvdmVjKSB7XFxuMTE3NjpcXHRcXHRcXHRcXHRrbXNnLVxcdTAwM2V2ZWMubnIgPSByZXQ7XFxuMTE3NzpcXHRcXHRcXHRcXHRrbXNnLVxcdTAwM2V2ZWMuaW92ZWMgPSBhcmcuaW92cztcXG4xMTc4OlxcdFxcdFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfTkVFRF9DTEVBTlVQO1xcbjExNzk6XFx0XFx0XFx0fVxcbjExODA6XFx0XFx0XFx0aWYgKGFyZy5wYXJ0aWFsX21hcClcXG4xMTgxOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9QQVJUSUFMX01BUDtcXG4xMTgyOlxcdFxcbjExODM6XFx0XFx0XFx0Lyogc3BlY2lhbCBjYXNlIDEgdmVjLCBjYW4gYmUgYSBmYXN0IHBhdGggKi9cXG4xMTg0OlxcdFxcdFxcdGlmIChyZXQgPT0gMSkge1xcbjExODU6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWJ1ZiA9IGFyZy5pb3ZzWzBdLmlvdl9iYXNlO1xcbjExODY6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWxlbiA9IGFyZy5pb3ZzWzBdLmlvdl9sZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjI2LjcyODcxMjM1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTM3ODA1MzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVmZmVyIEhhbmRsaW5nIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoaXMgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgZnVuY3Rpb24gYW5kIHNlZWluZyB0aGF0IGl0J3Mgc2V0dGluZyBgS0JVRl9NT0RFX0ZSRUVgIGFuZCBgS0JVRl9NT0RFX0VYUEFORGAuIFRoaXMgc2VlbXMgc3BlY2lmaWMgdG8gYElPUklOR19PUF9SRUNWYCBhbmQgYElPUklOR19PUF9SRUNWTVNHYCBvcGVyYXRpb25zIHdoZW4gdGhleSdyZSBidW5kbGVkLiBSaWdodCwgdGhlIGJ1ZyByZXBvcnQgcG9pbnRlZCBtZSB0byBgaW9fcmluZ19idWZmZXJzX3BlZWtgLiBUaGF0J3MgY2FsbGVkIGJ5IGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgLCB3aGljaCBuYXJyb3dzIGRvd24gdGhlIGFyZWEgb2YgY29uY2Vybi5cblxuU28sIEkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBrZXkgc3ltYm9scy4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYGlvX2J1ZmZlcnNfcGVla2AsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gSGFuZyBvbiwgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEFoLCBhbmQgc28gYXJlIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC4gVGhhdCBtZWFucyBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCBhcmUgZ2xvYmFsLiBTaW5jZSB0aG9zZSBhcmUgdGhlIGludGVyZmFjZXMsIEknbSBnb2luZyB0byBpbmNsdWRlIGFsbCBvZiB0aGVtIGluIHRoZSBmb2N1cyBsaXN0LlxuXG5CdXQgd2FpdCwgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCB3YXMgbW9kaWZpZWQgaW4gdGhlIHJlZmVyZW5jZWQgY29tbWl0LCBzbywgdGhhdCdzIHRoZSBvbmUgSSBuZWVkIHRvIGJlIG1vc3QgY29uY2VybmVkIGFib3V0LiBBbHJpZ2h0LCBsZXQncyBsb2NrIGluIHRoZSBmb2N1cyBzeW1ib2xzIGFzOiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAgYW5kIGBpb19yZWN2X2J1Zl9zZWxlY3RgLlxuXG5MZXQncyBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzLiBJJ2xsIGRvdWJsZS1jaGVjayBmb3IgcmVsYXRlZCBjb25maWdzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW4gcGxhY2UuIE9oLCBgQ09ORklHX05FVGAgaXMgY2xlYXJseSBhIHJlcXVpcmVtZW50LCBidXQgYXJlIHRoZXJlIGFueSBvdGhlcnM/IEknbGwgY2hlY2sgYGlvX3VyaW5nL2tidWYuY2AgZm9yIGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzc0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTY6NTI6MzUuMjY2NTIyMDg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYxMjkwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL2tidWYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9rYnVmLmM9NjI2PWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNjc5LVxcbmlvX3VyaW5nL2tidWYuYzo2ODA6I2lmZGVmIFNITV9DT0xPVVJcXG5pb191cmluZy9rYnVmLmMtNjgxLVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjM1Ljc4MjY2MTM4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUzODEyNzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgaW9fdXJpbmcgTmV0d29yayBCdWZmZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgbmFycm93ZWQgaXQgZG93bi4gVGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBiZXlvbmQgYENPTkZJR19JT19VUklOR2AgYW5kIGBDT05GSUdfTkVUYCBmb3IgdGhpcyBwYXRjaC4gTGV0J3Mgc3VtbWFyaXplIGFuZCBzb2xpZGlmeSBteSBmaW5kaW5ncy5cblxuV29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBUaGUgcmVhc29uIGlzIGNyeXN0YWwgY2xlYXI6IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJ3MgbmV0d29yayByZWNlaXZlL3NlbmQgb3BlcmF0aW9ucyB3aGVuIGhhbmRsaW5nIHByb3ZpZGVkIGJ1ZmZlcnMgdmlhIGJ1ZmZlciByaW5ncy4gRXNzZW50aWFsbHksIHRoZSBkeW5hbWljIGlvdmVjIGFycmF5IGV4cGFuc2lvbiB3YXMgZmxhd2VkLiBUaGUgb3JpZ2luYWwgYXJyYXkgd2FzIGltcHJvcGVybHkgZnJlZWQsIGFuZCB0aGUgbmV3IG9uZSB3YXMgZnJlZWQgcHJlbWF0dXJlbHkuIFRoaXMgbGVkIHRvIGEgY2xhc3NpYyBtZW1vcnkgbGVhayBvbiB0aGUgb2xkIGFycmF5IGFuZCBhIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSBvbiB0aGUgbmV3IGFycmF5LlxuXG5UaGUga2V5IGZvY3VzIHN5bWJvbHMgYXJlOiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX3NlbmRfc2VsZWN0X2J1ZmZlcmAsIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YC5cblxuV2UgbmVlZCB0byBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb25zOiBgSU9fVVJJTkdgIGFuZCBgTkVUYC5cblxuSGFuZyBvbiwgbGV0J3MgdGhpbmsgYWJvdXQgdGhpcy4uLiBJIHJlbWVtYmVyIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgc3RhdGljLiBTeXprYWxsZXIgY2FuIGZ1enogc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIHJlYWNoYWJsZSB0aHJvdWdoIGEgY2FsbCBjaGFpbiBmcm9tIGEgc3lzY2FsbC4gQW5kLCBpbmRlZWQsIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgaXMgcGFydCBvZiB0aGUgYGlvX3VyaW5nX2VudGVyYCBjYWxsIHBhdGguIFRoYXQncyBnb29kLiBXYWl0IGEgc2Vjb25kLCB0aGUgb3RoZXIgdHdvIHN0YXRpYyBmdW5jdGlvbnMsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YCBhcmUgYWxzbyBzdGF0aWMuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhvc2UgYXMgd2VsbC5cblxuTGV0IG1lIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2ssIHJldmlld2luZyB0aGUgcGF0Y2ggY29kZSBhZ2FpbjpcbmBgYGNcbi1cdGlmIChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpXG4tXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbitcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG4rXHRcdGtmcmVlKG9yZ19pb3ZzKTtcbmBgYFxuWWVwLCBleGFjdGx5IGFzIEkgZXhwZWN0ZWQuIFRoaXMgbWF0Y2hlcyBteSBhbmFseXNpcyBwZXJmZWN0bHkuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuIFRpbWUgdG8gY2FsbCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjcsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDE2OjUyOjQ3LjMyMDc5MThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2NDI3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19yaW5nX2J1ZmZlcnNfcGVla1wiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiLFxuICAgIFwiaW9fc2VuZF9zZWxlY3RfYnVmZmVyXCIsXG4gICAgXCJpb19yZWN2X2J1Zl9zZWxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGFuZCBtZW1vcnkgbGVhayBpbiBpb191cmluZydzIG5ldHdvcmsgcmVjZWl2ZS9zZW5kIG9wZXJhdGlvbnMgd2l0aCBwcm92aWRlZCBidWZmZXIgcmluZ3MuIFdoZW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaW92ZWMgYXJyYXkgaXMgZXhwYW5kZWQsIHRoZSBvbGQgYXJyYXkgd2FzIG5vdCBmcmVlZCBwcm9wZXJseSwgYW5kIHRoZSBuZXcgYXJyYXkgd2FzIGZyZWVkIGluc3RlYWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhayBvZiB0aGUgb2xkIGFycmF5IGFuZCBhIHVzZS1hZnRlci1mcmVlIG9mIHRoZSBuZXcgYXJyYXkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19idWZmZXJzX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYW5kIG1lbW9yeSBsZWFrIGluIGlvX3VyaW5nJ3MgbmV0d29yayByZWNlaXZlL3NlbmQgb3BlcmF0aW9ucyB3aXRoIHByb3ZpZGVkIGJ1ZmZlciByaW5ncy4gV2hlbiBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBpb3ZlYyBhcnJheSBpcyBleHBhbmRlZCwgdGhlIG9sZCBhcnJheSB3YXMgbm90IGZyZWVkIHByb3Blcmx5LCBhbmQgdGhlIG5ldyBhcnJheSB3YXMgZnJlZWQgaW5zdGVhZCwgbGVhZGluZyB0byBhIG1lbW9yeSBsZWFrIG9mIHRoZSBvbGQgYXJyYXkgYW5kIGEgdXNlLWFmdGVyLWZyZWUgb2YgdGhlIG5ldyBhcnJheS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzrm2[1] Phase: Succeeded StartedAt: 2026-07-13 16:52:59 +0000 UTC FinishedAt: 2026-07-13 16:52:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 16:52:59 +0000 UTC FinishedAt: 2026-07-13 16:52:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2] Phase: Succeeded StartedAt: 2026-07-13 16:52:59 +0000 UTC FinishedAt: 2026-07-13 21:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 16:52:59 +0000 UTC FinishedAt: 2026-07-13 21:07:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 16:52:59 +0000 UTC FinishedAt: 2026-07-13 16:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 16:52:59 +0000 UTC FinishedAt: 2026-07-13 16:53:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowfzrm2/series-workflowfzrm2-convert-artifact-3824804529/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 16:53:20 +0000 UTC FinishedAt: 2026-07-13 17:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 16:53:20 +0000 UTC FinishedAt: 2026-07-13 17:33:46 +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:*152ea63f-c7b8-4b19-8fc5-515efa3a570e,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-workflowfzrm2/series-workflowfzrm2-convert-artifact-3824804529/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": "a18a73a1-ec83-4eef-acf1-17d0201d8c7e", "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-workflowfzrm2/series-workflowfzrm2-build-action-4092494047/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-13 16:53:20 +0000 UTC FinishedAt: 2026-07-13 17:33:36 +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:*152ea63f-c7b8-4b19-8fc5-515efa3a570e,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-workflowfzrm2/series-workflowfzrm2-convert-artifact-3824804529/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": "a18a73a1-ec83-4eef-acf1-17d0201d8c7e", "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-workflowfzrm2/series-workflowfzrm2-build-action-4092494047/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 17:33:46 +0000 UTC FinishedAt: 2026-07-13 17:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 17:33:46 +0000 UTC FinishedAt: 2026-07-13 17:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 17:33:46 +0000 UTC FinishedAt: 2026-07-13 17:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 17:33:46 +0000 UTC FinishedAt: 2026-07-13 17:33:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowfzrm2/series-workflowfzrm2-convert-artifact-2862630660/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 17:33:56 +0000 UTC FinishedAt: 2026-07-13 17:36:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 17:33:56 +0000 UTC FinishedAt: 2026-07-13 17:36:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a18a73a1-ec83-4eef-acf1-17d0201d8c7e,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-workflowfzrm2/series-workflowfzrm2-build-action-4092494047/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-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 17:36:10 +0000 UTC FinishedAt: 2026-07-13 17:36:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 17:36:10 +0000 UTC FinishedAt: 2026-07-13 17:36:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 17:36:10 +0000 UTC FinishedAt: 2026-07-13 18:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 17:36:10 +0000 UTC FinishedAt: 2026-07-13 18:03:12 +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:*152ea63f-c7b8-4b19-8fc5-515efa3a570e,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-workflowfzrm2/series-workflowfzrm2-convert-artifact-2862630660/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": "eab2db67-df1a-4f56-91c7-38f9fb7f0e8b", "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-workflowfzrm2/series-workflowfzrm2-build-action-2348171536/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 17:36:10 +0000 UTC FinishedAt: 2026-07-13 18:03: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:*152ea63f-c7b8-4b19-8fc5-515efa3a570e,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-workflowfzrm2/series-workflowfzrm2-convert-artifact-2862630660/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": "eab2db67-df1a-4f56-91c7-38f9fb7f0e8b", "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-workflowfzrm2/series-workflowfzrm2-build-action-2348171536/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 18:03:12 +0000 UTC FinishedAt: 2026-07-13 18:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 18:03:12 +0000 UTC FinishedAt: 2026-07-13 18:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 18:03:12 +0000 UTC FinishedAt: 2026-07-13 18:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 18:03:12 +0000 UTC FinishedAt: 2026-07-13 18:05:22 +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:*eab2db67-df1a-4f56-91c7-38f9fb7f0e8b,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-workflowfzrm2/series-workflowfzrm2-build-action-2348171536/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-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-13 18:05:31 +0000 UTC FinishedAt: 2026-07-13 21:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-13 18:05:31 +0000 UTC FinishedAt: 2026-07-13 21:07:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"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:*a18a73a1-ec83-4eef-acf1-17d0201d8c7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eab2db67-df1a-4f56-91c7-38f9fb7f0e8b,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-workflowfzrm2/series-workflowfzrm2-build-action-4092494047/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-workflowfzrm2/series-workflowfzrm2-build-action-2348171536/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-13 18:05:31 +0000 UTC FinishedAt: 2026-07-13 18:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-13 18:05:31 +0000 UTC FinishedAt: 2026-07-13 18:06:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"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-workflowfzrm2/series-workflowfzrm2-convert-artifact-1684369165/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-13 18:05:31 +0000 UTC FinishedAt: 2026-07-13 18:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-13 18:05:31 +0000 UTC FinishedAt: 2026-07-13 18:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-13 18:05:31 +0000 UTC FinishedAt: 2026-07-13 18:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-13 18:06:09 +0000 UTC FinishedAt: 2026-07-13 21:07:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzrm2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_buffers_select","io_buffers_peek","io_send_select_buffer","io_recv_buf_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bee763d5f341b99cf472afeb508d4988f62a6ca1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"df7f1093-59f4-47d2-a1b6-c86d8c4140c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-13 18:06:09 +0000 UTC FinishedAt: 2026-07-13 21:07:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a18a73a1-ec83-4eef-acf1-17d0201d8c7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eab2db67-df1a-4f56-91c7-38f9fb7f0e8b,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-workflowfzrm2/series-workflowfzrm2-build-action-4092494047/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-workflowfzrm2/series-workflowfzrm2-build-action-2348171536/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-workflowfzrm2/series-workflowfzrm2-convert-artifact-1684369165/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,}