Name: series-workflowwhk6v Phase: Succeeded StartedAt: 2026-07-09 04:25:40 +0000 UTC FinishedAt: 2026-07-09 09:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[0] Phase: Succeeded StartedAt: 2026-07-09 04:25:40 +0000 UTC FinishedAt: 2026-07-09 04:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 04:25:40 +0000 UTC FinishedAt: 2026-07-09 04:46:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "025d0d6221d9b060bce251427c671cd0080d9dae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FHANDLE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "025d0d6221d9b060bce251427c671cd0080d9dae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FHANDLE" ], "series_id": "6e4a09cd-e3e0-4923-9637-200147512cc3" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "handle_to_path", "do_handle_open", "sys_open_by_handle_at", "capable_wrt_mount", "may_decode_fh" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdG9fcGF0aCYjMzQ7LAogICAgJiMzNDtkb19oYW5kbGVfb3BlbiYjMzQ7LAogICAgJiMzNDtzeXNfb3Blbl9ieV9oYW5kbGVfYXQmIzM0OywKICAgICYjMzQ7Y2FwYWJsZV93cnRfbW91bnQmIzM0OywKICAgICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiM2FiN2FmY2M1NDE0ZDA3NWRmZTUyOWU0YmM1N2IyOGNhYjBlOTZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwNDo0Mzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9maGFuZGxlLmMgYi9mcy9maGFuZGxlLmNcbmluZGV4IDFjYTdlYjNhNmNiNTE2Li5kOWRlNzIxMGE0MTEzYiAxMDA2NDRcbi0tLSBhL2ZzL2ZoYW5kbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmhhbmRsZS5jXG5AQCAtMjk1LDYgJiM0MzsyOTUsOSBAQCBzdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KVxuIFx0ICovXG4gXHRndWFyZChyY3UpKCk7XG4gXHRtbnRfbnMgPSBSRUFEX09OQ0UobW91bnQtXHUwMDNlbW50X25zKTtcbiYjNDM7XHRpZiAoIW1udF9ucylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRyZXR1cm4gbnNfY2FwYWJsZShtbnRfbnMtXHUwMDNldXNlcl9ucywgQ0FQX1NZU19BRE1JTik7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdG9fcGF0aCYjMzQ7LAogICAgJiMzNDtkb19oYW5kbGVfb3BlbiYjMzQ7LAogICAgJiMzNDtzeXNfb3Blbl9ieV9oYW5kbGVfYXQmIzM0OywKICAgICYjMzQ7Y2FwYWJsZV93cnRfbW91bnQmIzM0OywKICAgICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzYWI3YWZjYzU0MTRkMDc1ZGZlNTI5ZTRiYzU3YjI4Y2FiMGU5NmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCA5IDA0OjQzOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZmhhbmRsZS5jIGIvZnMvZmhhbmRsZS5jCmluZGV4IDFjYTdlYjNhNmNiNTE2Li5kOWRlNzIxMGE0MTEzYiAxMDA2NDQKLS0tIGEvZnMvZmhhbmRsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZoYW5kbGUuYwpAQCAtMjk1LDYgJiM0MzsyOTUsOSBAQCBzdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KQogCSAqLwogCWd1YXJkKHJjdSkoKTsKIAltbnRfbnMgPSBSRUFEX09OQ0UobW91bnQtJmd0O21udF9ucyk7CiYjNDM7CWlmICghbW50X25zKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCXJldHVybiBuc19jYXBhYmxlKG1udF9ucy0mZ3Q7dXNlcl9ucywgQ0FQX1NZU19BRE1JTik7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRXhhbWluaW5nIGEgRmlsZSBTeXN0ZW0gSGFuZGxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZnMvZmhhbmRsZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgYGNhcGFibGVfd3J0X21vdW50KClgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGEgbmV3IGNoZWNrIGhhcyBiZWVuIGludHJvZHVjZWQ6IGBpZiAoIW1udF9ucykgcmV0dXJuIGZhbHNlO2AuIFJpZ2h0IGF3YXksIHRoaXMganVtcHMgb3V0IGF0IG1lIGFzIGEgcG90ZW50aWFsIGFjY2VzcyBjb250cm9sIG1vZGlmaWNhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gbmFtZXNwYWNlIGhhbmRsaW5nIGR1cmluZyBtb3VudCBvcGVyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgd2l0aGluIGBmcy9maGFuZGxlLmNgIHRvIGZ1bGx5IGdyYXNwIHRoaXMgY2hhbmdlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgYG1udF9uc2AgaXMgbGlrZWx5IHJlZmVycmluZyB0byB0aGUgbW91bnQgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmlsZSBoYW5kbGUsIGJ1dCBJIHdpbGwgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBgcmV0dXJuIGZhbHNlO2Agc3VnZ2VzdHMgdGhhdCBpZiB0aGVyZSYjMzk7cyBubyBtb3VudCBuYW1lc3BhY2UgcHJlc2VudCwgd3JpdGluZyBhIG1vdW50IGlzbiYjMzk7dCBwZXJtaXR0ZWQuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhcm91bmQgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYXBhYmxlX3dydF9tb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZoYW5kbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9maGFuZGxlLmM9MjY1PXN0YXRpYyBpbnQgZG9faGFuZGxlX3RvX3BhdGgoc3RydWN0IGZpbGVfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBwYXRoICpwYXRoLFxuLS1cbmZzL2ZoYW5kbGUuYy0yODctXG5mcy9maGFuZGxlLmM6Mjg4OnN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXG5mcy9maGFuZGxlLmMtMjg5LXtcbi0tXG5mcy9maGFuZGxlLmM9MzA0PXN0YXRpYyBpbmxpbmUgaW50IG1heV9kZWNvZGVfZmgoc3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCAqY3R4LFxuLS1cbmZzL2ZoYW5kbGUuYy0zMzgtXHRlbHNlIGlmIChpc19tb3VudGVkKHJvb3QtXHUwMDNlbW50KSBcdTAwMjZcdTAwMjZcbmZzL2ZoYW5kbGUuYzozMzk6XHRcdCBjYXBhYmxlX3dydF9tb3VudChyZWFsX21vdW50KHJvb3QtXHUwMDNlbW50KSkgXHUwMDI2XHUwMDI2XG5mcy9maGFuZGxlLmMtMzQwLVx0XHQgIWhhc19sb2NrZWRfY2hpbGRyZW4ocmVhbF9tb3VudChyb290LVx1MDAzZW1udCksIHJvb3QtXHUwMDNlZGVudHJ5KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGlrZWx5IGNvbnRyb2wgZmxvdywgYXMgSSBzZWUgaXQ6CgoqKlRyYWNpbmcgdGhlIFBhdGggb2YgSGFuZGxlIERlY29kaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBvdXIgZmlsZSBoYW5kbGUgZGVjb2Rpbmcgd29ya3MuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb24sIGBjYXBhYmxlX3dydF9tb3VudGAsIGdldHMgaW52b2tlZCBmcm9tIHdpdGhpbiBgbWF5X2RlY29kZV9maGAuIFRoaXMgYG1heV9kZWNvZGVfZmhgIGZ1bmN0aW9uLCBpbiB0dXJuLCBpcyBhIGRlcGVuZGVuY3kgb2YgYGRvX2hhbmRsZV90b19wYXRoYC4gTm93LCBgZG9faGFuZGxlX3RvX3BhdGhgIHNlZW1zIGNyaXRpY2FsIOKAkyBpdCYjMzk7cyB0aGUgYnJpZGdlIGZyb20gYSBmaWxlIGhhbmRsZSB0byBhIHBhdGggcmVwcmVzZW50YXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoaXM6IEkmIzM5O20gcHJldHR5IHN1cmUgYGRvX2hhbmRsZV90b19wYXRoYCBpcyBjYWxsZWQgZnJvbSB0d28gc3lzdGVtIGNhbGxzLCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBhbmQgYHN5c19uYW1lX3RvX2hhbmRsZV9hdGAuIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgbGVhZCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGNhbGwgZ3JhcGggYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciBlbnRyeSBwb2ludHMuIFRpbWUgdG8gY2hlY2sgdGhlIGNyb3NzLXJlZmVyZW5jZXMgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZoYW5kbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9maGFuZGxlLmM9Mjg4PXN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXG4tLVxuZnMvZmhhbmRsZS5jLTMwMy1cbmZzL2ZoYW5kbGUuYzozMDQ6c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXG5mcy9maGFuZGxlLmMtMzA1LVx0XHRcdFx0dW5zaWduZWQgaW50IG9fZmxhZ3MpXG4tLVxuZnMvZmhhbmRsZS5jPTM1Mz1zdGF0aWMgaW50IGhhbmRsZV90b19wYXRoKGludCBtb3VudGRpcmZkLCBzdHJ1Y3QgZmlsZV9oYW5kbGUgX191c2VyICp1ZmgsXG4tLVxuZnMvZmhhbmRsZS5jLTM4MC1cdGVsc2VcbmZzL2ZoYW5kbGUuYzozODE6XHRcdHJldHZhbCA9IG1heV9kZWNvZGVfZmgoXHUwMDI2Y3R4LCBvX2ZsYWdzKTtcbmZzL2ZoYW5kbGUuYy0zODItXHRpZiAocmV0dmFsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgRmlsZSBIYW5kbGVzIGFuZCBQYXRoIENvbnZlcnNpb246IEEgQ29uY2lzZSBBbmFseXNpcyoqCgpSaWdodCwgc28gYGhhbmRsZV90b19wYXRoYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyByZXNwb25zaWJsZSBmb3IsIGVzc2VudGlhbGx5LCB0cmFuc2xhdGluZyBhIGZpbGUgaGFuZGxlIGludG8gaXRzIGNvcnJlc3BvbmRpbmcgcGF0aC4gQW5kIHRoZSBpbW1lZGlhdGUgaW1wbGljYXRpb24gdGhlcmUsIHRoZSBjcnVjaWFsIHRoaW5nIEkmIzM5O20gcGlja2luZyB1cCBvbiwgaXMgdGhlIGNhbGwgdG8gYG1heV9kZWNvZGVfZmhgLiBJdCYjMzk7cyBub3QganVzdCBhIGRpcmVjdCBtYXBwaW5nLiBUaGUgZmFjdCB0aGF0IGBtYXlfZGVjb2RlX2ZoYCBpcyBpbnZvbHZlZCB0ZWxscyBtZSB0aGVyZSYjMzk7cyBwb3RlbnRpYWxseSBzb21lIGNvbXBsZXhpdHkgaW52b2x2ZWQgYmV5b25kIGEgc2ltcGxlIGxvb2t1cCBvciBkaXJlY3QgY29udmVyc2lvbi4KCkkmIzM5O20gaW5zdGFudGx5IHRoaW5raW5nIGFib3V0IHRoZSBwb3NzaWJsZSBzY2VuYXJpb3MgdGhpcyBpbnRyb2R1Y2VzLiBJcyB0aGlzIGZvciBkZWFsaW5nIHdpdGggZW5jb2RlZCBmaWxlbmFtZXMsIHBlcmhhcHMgdGhvc2Ugc3RvcmVkIHdpdGggY2hhcmFjdGVyIGVuY29kaW5ncyBiZXlvbmQgdGhlIHN5c3RlbSYjMzk7cyBkZWZhdWx0PyBPciBpcyBpdCBtb3JlIGludm9sdmVkLCBwb3RlbnRpYWxseSBhZGRyZXNzaW5nIHN5bWJvbGljIGxpbmtzIG9yIG90aGVyIGZpbGUgc3lzdGVtIG51YW5jZXMgdGhhdCByZXF1aXJlIHNvbWUgc29ydCBvZiBkZWNvZGluZyBvciByZXNvbHV0aW9uIHN0ZXAgYmVmb3JlIGEgZGVmaW5pdGl2ZSBwYXRoIGNhbiBiZSByZXR1cm5lZD8gVGhlIG5lZWQgZm9yICYjMzQ7bWF5X2RlY29kZSYjMzQ7IHN1Z2dlc3RzIHRoZSBjb252ZXJzaW9uIGlzbiYjMzk7dCBhbHdheXMgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBub3QgYSB0cml2aWFsIG9wZXJhdGlvbiwgYW5kIHRoZXJlJiMzOTtzIGEgcmVhc29uIGZvciB0aGF0LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2YgYG1heV9kZWNvZGVfZmhgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIHRoZSBzeXN0ZW0vT1MgdGhpcyBpcyBydW5uaW5nIG9uIHdvdWxkIGJlIGNydWNpYWwgaGVyZSB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGV4aXN0cyB0byBoYW5kbGUgZWRnZSBjYXNlcyBhbmQgY29tcGF0aWJpbGl0eSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3RvX3BhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9maGFuZGxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmhhbmRsZS5jPTE5OT1zdGF0aWMgaW50IHZmc19kZW50cnlfYWNjZXB0YWJsZSh2b2lkICpjb250ZXh0LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9maGFuZGxlLmMtMjAwLXtcbmZzL2ZoYW5kbGUuYzoyMDE6XHRzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHggPSBjb250ZXh0O1xuZnMvZmhhbmRsZS5jLTIwMi1cdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyA9IGN1cnJlbnRfdXNlcl9ucygpO1xuLS1cbmZzL2ZoYW5kbGUuYy0yNjQtXG5mcy9maGFuZGxlLmM6MjY1OnN0YXRpYyBpbnQgZG9faGFuZGxlX3RvX3BhdGgoc3RydWN0IGZpbGVfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBwYXRoICpwYXRoLFxuZnMvZmhhbmRsZS5jOjI2NjpcdFx0XHQgICAgIHN0cnVjdCBoYW5kbGVfdG9fcGF0aF9jdHggKmN0eClcbmZzL2ZoYW5kbGUuYy0yNjcte1xuLS1cbmZzL2ZoYW5kbGUuYz0yODg9c3RhdGljIGJvb2wgY2FwYWJsZV93cnRfbW91bnQoc3RydWN0IG1vdW50ICptb3VudClcbi0tXG5mcy9maGFuZGxlLmMtMzAzLVxuZnMvZmhhbmRsZS5jOjMwNDpzdGF0aWMgaW5saW5lIGludCBtYXlfZGVjb2RlX2ZoKHN0cnVjdCBoYW5kbGVfdG9fcGF0aF9jdHggKmN0eCxcbmZzL2ZoYW5kbGUuYy0zMDUtXHRcdFx0XHR1bnNpZ25lZCBpbnQgb19mbGFncylcbi0tXG5mcy9maGFuZGxlLmMtMzUyLVxuZnMvZmhhbmRsZS5jOjM1MzpzdGF0aWMgaW50IGhhbmRsZV90b19wYXRoKGludCBtb3VudGRpcmZkLCBzdHJ1Y3QgZmlsZV9oYW5kbGUgX191c2VyICp1ZmgsXG5mcy9maGFuZGxlLmMtMzU0LVx0XHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgdW5zaWduZWQgaW50IG9fZmxhZ3MpXG4tLVxuZnMvZmhhbmRsZS5jLTM1OC1cdHN0cnVjdCBmaWxlX2hhbmRsZSAqaGFuZGxlIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuZnMvZmhhbmRsZS5jOjM1OTpcdHN0cnVjdCBoYW5kbGVfdG9fcGF0aF9jdHggY3R4ID0ge307XG5mcy9maGFuZGxlLmMtMzYwLVx0Y29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zICplb3BzO1xuLS1cbmZzL2ZoYW5kbGUuYy00MTEtXHRoYW5kbGUtXHUwMDNlaGFuZGxlX3R5cGUgXHUwMDI2PSB+RklMRUlEX1VTRVJfRkxBR1NfTUFTSztcbmZzL2ZoYW5kbGUuYzo0MTI6XHRyZXR2YWwgPSBkb19oYW5kbGVfdG9fcGF0aChoYW5kbGUsIHBhdGgsIFx1MDAyNmN0eCk7XG5mcy9maGFuZGxlLmMtNDEzLVxuLS1cbmZzL2ZoYW5kbGUuYz00MzA9c3RhdGljIGxvbmcgZG9faGFuZGxlX29wZW4oaW50IG1vdW50ZGlyZmQsIHN0cnVjdCBmaWxlX2hhbmRsZSBfX3VzZXIgKnVmaCxcbi0tXG5mcy9maGFuZGxlLmMtNDM1LVxuZnMvZmhhbmRsZS5jOjQzNjpcdHJldHZhbCA9IGhhbmRsZV90b19wYXRoKG1vdW50ZGlyZmQsIHVmaCwgXHUwMDI2cGF0aCwgb3Blbl9mbGFnKTtcbmZzL2ZoYW5kbGUuYy00MzctXHRpZiAocmV0dmFsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gRmlsZSBIYW5kbGUgSW50ZXJuYWxzKioKClJpZ2h0LCBzbyBgZG9faGFuZGxlX29wZW5gIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIEkmIzM5O20gcmVtaW5kZWQgaXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggYHN5c19vcGVuX2J5X2hhbmRsZV9hdGAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgc2V0dXAuIGBzeXNfb3Blbl9ieV9oYW5kbGVfYXRgIGlzIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB1c2Vyc3BhY2UgdG8gb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBhIGZpbGUsIGdpdmVuIGEgZmlsZSBoYW5kbGUgKHdoaWNoIGlzIGFuIG9wYXF1ZSBpZGVudGlmaWVyIHJlcHJlc2VudGluZyBhbiBvcGVuIGlub2RlLCB1c3VhbGx5KS4gCgpTbywgYGRvX2hhbmRsZV9vcGVuYCBpcyB0aGUga2VybmVsLXNwYWNlIHdvcmtob3JzZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIGRpcnR5IHdvcmsuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSBtYXAgdGhlIHByb3ZpZGVkIGZpbGUgaGFuZGxlLCBwcm9iYWJseSByZXRyaWV2ZWQgZnJvbSBhIHByaW9yIGBuYW1laWAgY2FsbCBvciBzaW1pbGFyLCBpbnRvIGEgdXNhYmxlIGtlcm5lbCBmaWxlIHN0cnVjdC4gCgpJJiMzOTttIGluc3RhbnRseSBjb25zaWRlcmluZyB0aGluZ3MgbGlrZToKCiogICAqKkhhbmRsZSB2YWxpZGF0aW9uOioqIFdoYXQga2luZCBvZiBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbiB0aGF0IGZpbGUgaGFuZGxlICp3aXRoaW4qIGBkb19oYW5kbGVfb3BlbmA/IElzIGl0IGp1c3QgYSBzaW1wbGUgaW5kZXggaW50byBhIHRhYmxlLCBvciBpcyB0aGVyZSBzb21lIG1vcmUgc29waGlzdGljYXRlZCBpbnRlZ3JpdHkgY2hlY2sgdG8gcHJldmVudCBoYW5kbGUgc3Bvb2ZpbmcvbWFuaXB1bGF0aW9uPwoqICAgKipQZXJtaXNzaW9uczoqKiBPYnZpb3VzbHksIGl0JiMzOTtzIGVzc2VudGlhbCB0aGF0IGBkb19oYW5kbGVfb3BlbmAgY2hlY2tzIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0byB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhhdCBoYW5kbGUuIFRoYXQgY291bGQgcmVxdWlyZSBsb29raW5nIHVwIHRoZSBpbm9kZSwgY2hlY2tpbmcgdGhlIGZpbGUgbW9kZSwgYW5kIGNvbnNpZGVyaW5nIGNhcGFiaWxpdGllcywgQUNMcywgYW5kIHRoZSB1c2VyJiMzOTtzIGVmZmVjdGl2ZSBjcmVkZW50aWFscy4KKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGVycm9yIGNvbmRpdGlvbnM/IEludmFsaWQgaGFuZGxlPyBQZXJtaXNzaW9ucyBkZW5pZWQ/IFJlc291cmNlIGV4aGF1c3Rpb24/IEkgd2FudCB0byBrbm93IHRoZSByYW5nZSBvZiBlcnJvcnMgaGFuZGxlZCBhbmQgaG93IGdyYWNlZnVsbHkgdGhleSYjMzk7cmUgcmVwb3J0ZWQgYmFjayB0byB0aGUgdXNlci4KKiAgICoqRmlsZSBkZXNjcmlwdG9yIGFsbG9jYXRpb246KiogSSBhc3N1bWUgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBhIG5ldyBmaWxlIGRlc2NyaXB0b3IgKEZEKSBhbmQgc2V0dGluZyB1cCB0aGUgbGluayB0byB0aGUga2VybmVsIGZpbGUgc3RydWN0dXJlLCBhbmQgcmV0dXJuaW5nIHRoaXMgRkQgdG8gdGhlIHVzZXJzcGFjZSBjYWxsZXIuIEFueSBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkIHdoZW4gYWxsb2NhdGluZyBhbiBGRD8KCkVzc2VudGlhbGx5LCBJJiMzOTttIHBpY3R1cmluZyBgZG9faGFuZGxlX29wZW5gIGFzIHRoZSBjcnVjaWFsIGtlcm5lbCBsYXllciB0aGF0IHByb3ZpZGVzICpzZWN1cml0eSogYW5kICpjb3JyZWN0bmVzcyouIEkgc2hvdWxkIGludmVzdGlnYXRlIGl0IGZvciBwb3NzaWJsZSBhdHRhY2sgdmVjdG9ycywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBjb25jdXJyZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9faGFuZGxlX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9maGFuZGxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmhhbmRsZS5jPTQxOT1zdGF0aWMgc3RydWN0IGZpbGUgKmZpbGVfb3Blbl9oYW5kbGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBvcGVuX2ZsYWcpXG4tLVxuZnMvZmhhbmRsZS5jLTQyOS1cbmZzL2ZoYW5kbGUuYzo0MzA6c3RhdGljIGxvbmcgZG9faGFuZGxlX29wZW4oaW50IG1vdW50ZGlyZmQsIHN0cnVjdCBmaWxlX2hhbmRsZSBfX3VzZXIgKnVmaCxcbmZzL2ZoYW5kbGUuYy00MzEtXHRcdFx0ICAgaW50IG9wZW5fZmxhZylcbi0tXG5mcy9maGFuZGxlLmM9NDU0PVNZU0NBTExfREVGSU5FMyhvcGVuX2J5X2hhbmRsZV9hdCwgaW50LCBtb3VudGRpcmZkLFxuLS1cbmZzL2ZoYW5kbGUuYy00NjItXG5mcy9maGFuZGxlLmM6NDYzOlx0cmV0ID0gZG9faGFuZGxlX29wZW4obW91bnRkaXJmZCwgaGFuZGxlLCBmbGFncyk7XG5mcy9maGFuZGxlLmMtNDY0LVx0cmV0dXJuIHJldDtcbi0tXG5mcy9maGFuZGxlLmM9NDcyPUNPTVBBVF9TWVNDQUxMX0RFRklORTMob3Blbl9ieV9oYW5kbGVfYXQsIGludCwgbW91bnRkaXJmZCxcbi0tXG5mcy9maGFuZGxlLmMtNDc0LXtcbmZzL2ZoYW5kbGUuYzo0NzU6XHRyZXR1cm4gZG9faGFuZGxlX29wZW4obW91bnRkaXJmZCwgaGFuZGxlLCBmbGFncyk7XG5mcy9maGFuZGxlLmMtNDc2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipGaXhpbmcgYSBQb3RlbnRpYWwgS2VybmVsIFZ1bG5lcmFiaWxpdHkqKgoKQWxyaWdodCwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgcG90ZW50aWFsbHkgbmFzdHksIHZ1bG5lcmFiaWxpdHkg4oCTIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIHNpdHVhdGlvbiBpbiBgY2FwYWJsZV93cnRfbW91bnRgIHdoZXJlIGBtbnRfbnNgICpjb3VsZCogYmUgTlVMTC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW8gZm9yIGEgY3Jhc2gsIGFuZCBzb21ldGhpbmcgd2UgYWJzb2x1dGVseSB3YW50IHRvIGF2b2lkLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHByb2dyYW0gdXNlcyB0aGUgYG9wZW5fYnlfaGFuZGxlX2F0YCBzeXNjYWxsLgoKUmlnaHQsIHNvIHRvIGJlIGNsZWFyLCBgb3Blbl9ieV9oYW5kbGVfYXRgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gY2FuIGNhbGwgaW50byBgY2FwYWJsZV93cnRfbW91bnRgLCBhbmQgdGhhdCBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBpcy4KCkkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSBob3cgYG9wZW5fYnlfaGFuZGxlX2F0YCBpcyBjb25maWd1cmVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gSSBiZXQgaXQgaXMgZW5hYmxlZCB0aHJvdWdoIGVpdGhlciBgQ09ORklHX0ZIQU5ETEVgIG9yIGBDT05GSUdfRVhQT1JURlNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGSEFORExFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNzM0PWNvbmZpZyBTR0VUTUFTS19TWVNDQUxMXG4tLVxuaW5pdC9LY29uZmlnLTE3NDMtXG5pbml0L0tjb25maWc6MTc0NDpjb25maWcgRkhBTkRMRVxuaW5pdC9LY29uZmlnLTE3NDUtXHRib29sIFwmIzM0O29wZW4gYnkgZmhhbmRsZSBzeXNjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIE1vdW50IENhcGFiaWxpdHkqKgoKT2theSwgc28gYEZIQU5ETEVgIGlzIHRoZSBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gTmVlZCB0byBrZWVwIHRoYXQgdG9wIG9mIG1pbmQuIFJpZ2h0IG5vdywgbXkgZm9jdXMgaXMgb24gdGhhdCBgY2FwYWJsZV93cnRfbW91bnRgIHNldHRpbmcuIEl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBJIHdhbnQgdG8gcmUtZXZhbHVhdGUgaXQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb2luZyB3aGF0IHdlIGV4cGVjdC4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZmhhbmRsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODg6XHRzdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KVxuIDI4OTpcdHtcbiAyOTA6XHRcdHN0cnVjdCBtbnRfbmFtZXNwYWNlICptbnRfbnM7XG4gMjkxOlx0XG4gMjkyOlx0XHQvKlxuIDI5MzpcdFx0ICogRm9yIC1cdTAwM2VtbnRfbnMgYWNjZXNzLlxuIDI5NDpcdFx0ICogVGhlIGZvbGxvd2luZyBSRUFEX09OQ0UoKSBpcyBzZW1hbnRpY2FsbHkgcmN1X2RlcmVmZXJlbmNlKCkuXG4gMjk1Olx0XHQgKi9cbiAyOTY6XHRcdGd1YXJkKHJjdSkoKTtcbiAyOTc6XHRcdG1udF9ucyA9IFJFQURfT05DRShtb3VudC1cdTAwM2VtbnRfbnMpO1xuIDI5ODpcdFx0aWYgKCFtbnRfbnMpXG4gMjk5Olx0XHRcdHJldHVybiBmYWxzZTtcbiAzMDA6XHRcbiAzMDE6XHRcdHJldHVybiBuc19jYXBhYmxlKG1udF9ucy1cdTAwM2V1c2VyX25zLCBDQVBfU1lTX0FETUlOKTtcbiAzMDI6XHR9XG4gMzAzOlx0XG4gMzA0Olx0c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXG4gMzA1Olx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgb19mbGFncylcbiAzMDY6XHR7XG4gMzA3Olx0XHRzdHJ1Y3QgcGF0aCAqcm9vdCA9IFx1MDAyNmN0eC1cdTAwM2Vyb290O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBGb2N1cyBhbmQgU2NvcGUqKgoKT2theSwgc28gdGhlIHBhdGNoIGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgZ29vZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIGBjYXBhYmxlX3dydF9tb3VudGAsIGBtYXlfZGVjb2RlX2ZoYCwgYGRvX2hhbmRsZV90b19wYXRoYCwgYGhhbmRsZV90b19wYXRoYCwgYGRvX2hhbmRsZV9vcGVuYCwgb3IgYHN5c19vcGVuX2J5X2hhbmRsZV9hdGAuIEdpdmVuIHRoYXQgYGNhcGFibGVfd3J0X21vdW50YCBpcyBzdGF0aWMsIEkgY2FuIHByb2JhYmx5IHJ1bGUgdGhhdCBvdXQgZm9yIGJyb2FkZXIgaW1wYWN0IGFuZCBmb2N1cyBvbiBgaGFuZGxlX3RvX3BhdGhgLCBgZG9faGFuZGxlX29wZW5gLCBvciBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YC4gU2luY2UgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBmaWxlIGhhbmRsZXMgYW5kIG9wZW4gb3BlcmF0aW9ucywgSSYjMzk7bGwgc3RhcnQgd2l0aCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBhbmQgYGhhbmRsZV90b19wYXRoYC4KCkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgbGlrZWx5IGNlbnRlcmVkIGFyb3VuZCBgRkhBTkRMRWAsIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGF0LgoKRmluYWxseSwgSSYjMzk7bGwgdmVyaWZ5IHRoZSBjb21waWxhdGlvbiBvZiBgZnMvZmhhbmRsZS5jYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgYnVpbGQgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaGFuZGxlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT00Nz1vYmotJChDT05GSUdfU1lTQ1RMKVx0XHQmIzQzOz0gZHJvcF9jYWNoZXMubyBzeXNjdGxzLm9cbmZzL01ha2VmaWxlLTQ4LVxuZnMvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX0ZIQU5ETEUpXHRcdCYjNDM7PSBmaGFuZGxlLm9cbmZzL01ha2VmaWxlLTUwLW9iai15XHRcdFx0XHQmIzQzOz0gaW9tYXAvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX0ZIQU5ETEVgIGFuZCBNb3VudCBDYXBhYmlsaXRpZXMqKgoKQWxyaWdodCwgeWVwLCB0aGF0JiMzOTtzIGNvcnJlY3QsIGBDT05GSUdfRkhBTkRMRWAgaXMgZGVmaW5pdGVseSBzZXQuIEdvb2QsIGNvbmZpcm1pbmcgdGhhdCBiYXNlbGluZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGZpbGUgaGFuZGxlIHNlY3VyaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGluIGNvbnRleHQgb2Ygd2hvIGNhbiB3cml0ZSB0byBtb3VudHMuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYGNhcGFibGVfd3J0X21vdW50YC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjYWxsIHBvaW50cyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGFjY2VzcyBjb250cm9sIG1vZGVsLiBBcmUgd2UgY2hlY2tpbmcgcGVybWlzc2lvbnMgYWRlcXVhdGVseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGhlcmUgcmVsYXRlZCB0byBmaWxlIGhhbmRsZSB1c2FnZSBhbmQgbW91bnQgb3BlcmF0aW9ucywgZXNwZWNpYWxseSBnaXZlbiB0aGUgYENPTkZJR19GSEFORExFYCBzZXR0aW5nPyBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhcGFibGVfd3J0X21vdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmhhbmRsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZoYW5kbGUuYz0yNjU9c3RhdGljIGludCBkb19oYW5kbGVfdG9fcGF0aChzdHJ1Y3QgZmlsZV9oYW5kbGUgKmhhbmRsZSwgc3RydWN0IHBhdGggKnBhdGgsXG4tLVxuZnMvZmhhbmRsZS5jLTI4Ny1cbmZzL2ZoYW5kbGUuYzoyODg6c3RhdGljIGJvb2wgY2FwYWJsZV93cnRfbW91bnQoc3RydWN0IG1vdW50ICptb3VudClcbmZzL2ZoYW5kbGUuYy0yODkte1xuLS1cbmZzL2ZoYW5kbGUuYz0zMDQ9c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXG4tLVxuZnMvZmhhbmRsZS5jLTMzOC1cdGVsc2UgaWYgKGlzX21vdW50ZWQocm9vdC1cdTAwM2VtbnQpIFx1MDAyNlx1MDAyNlxuZnMvZmhhbmRsZS5jOjMzOTpcdFx0IGNhcGFibGVfd3J0X21vdW50KHJlYWxfbW91bnQocm9vdC1cdTAwM2VtbnQpKSBcdTAwMjZcdTAwMjZcbmZzL2ZoYW5kbGUuYy0zNDAtXHRcdCAhaGFzX2xvY2tlZF9jaGlsZHJlbihyZWFsX21vdW50KHJvb3QtXHUwMDNlbW50KSwgcm9vdC1cdTAwM2VkZW50cnkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDYzCgkJCQkJCQlvdXRwdXQ6IDEyMwoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBjYWxsIHN0YWNrIGhlcmUuIGBjYXBhYmxlX3dydF9tb3VudGAgZ2V0cyBjYWxsZWQgYnkgYG1heV9kZWNvZGVfZmhgLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgaGFuZGxlX3RvX3BhdGhgLiBUaGF0IG1ha2VzIGBoYW5kbGVfdG9fcGF0aGAgYSBwcmltZSB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIFRoZSByZWxhdGVkIGZ1bmN0aW9ucywgYGRvX2hhbmRsZV9vcGVuYCBhbmQgYHN5c19vcGVuX2J5X2hhbmRsZV9hdGAsIGFsc28gbG9vayBpbnRlcmVzdGluZyBhbmQgYXJlIGdvb2QgZm9jdXMgc3ltYm9scyBnaXZlbiB0aGUgY29ubmVjdGlvbi4KClRoZSBrZXkgcXVlc3Rpb24gaXMsICppcyB0aGlzIGZ1enphYmxlKj8gVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMsIGJlY2F1c2UgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYW5kIHRoYXQmIzM5O3MgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LiBBIHJlYWNoYWJsZSBzeXNjYWxsPyBFeGNlbGxlbnQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHRoaXMgc3VtbWFyeSBhbmQgcmVjb21tZW5kYXRpb24gcmVhZHkuCgpJJiMzOTttIHJlY29tbWVuZGluZyB0aGF0IHRoaXMgYmUgcHVyc3VlZCBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlIGBoYW5kbGVfdG9fcGF0aGAsIGBkb19oYW5kbGVfb3BlbmAsIGBzeXNfb3Blbl9ieV9oYW5kbGVfYXRgLCBgY2FwYWJsZV93cnRfbW91bnRgLCBhbmQgYG1heV9kZWNvZGVfZmhgLiBXZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhlIGBGSEFORExFYCBjb25maWcuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjYXBhYmxlX3dydF9tb3VudGAgd2hlbiBgbW50X25zYCBpcyBudWxsLiBUaGlzIGNvZGUgcGF0aCBpcyBleHBvc2VkIHRocm91Z2ggdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbCwgbWFraW5nIGl0IGFuIGlkZWFsIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdG9fcGF0aCYjMzQ7LAogICAgJiMzNDtkb19oYW5kbGVfb3BlbiYjMzQ7LAogICAgJiMzNDtzeXNfb3Blbl9ieV9oYW5kbGVfYXQmIzM0OywKICAgICYjMzQ7Y2FwYWJsZV93cnRfbW91bnQmIzM0OywKICAgICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdG9fcGF0aCYjMzQ7LAogICAgJiMzNDtkb19oYW5kbGVfb3BlbiYjMzQ7LAogICAgJiMzNDtzeXNfb3Blbl9ieV9oYW5kbGVfYXQmIzM0OywKICAgICYjMzQ7Y2FwYWJsZV93cnRfbW91bnQmIzM0OywKICAgICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDo0Mzo1Mi42OTkyMTIyMTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNjU5MDM3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkhBTkRMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRsZV90b19wYXRoXCIsXG4gICAgXCJkb19oYW5kbGVfb3BlblwiLFxuICAgIFwic3lzX29wZW5fYnlfaGFuZGxlX2F0XCIsXG4gICAgXCJjYXBhYmxlX3dydF9tb3VudFwiLFxuICAgIFwibWF5X2RlY29kZV9maFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgY2FwYWJsZV93cnRfbW91bnRgIHdoZW4gYG1udF9uc2AgaXMgTlVMTC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDM6NTIuNjk5MjE3NzQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY3Nzc5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiM2FiN2FmY2M1NDE0ZDA3NWRmZTUyOWU0YmM1N2IyOGNhYjBlOTZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMDQ6NDM6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZmhhbmRsZS5jIGIvZnMvZmhhbmRsZS5jXFxuaW5kZXggMWNhN2ViM2E2Y2I1MTYuLmQ5ZGU3MjEwYTQxMTNiIDEwMDY0NFxcbi0tLSBhL2ZzL2ZoYW5kbGUuY1xcbisrKyBiL2ZzL2ZoYW5kbGUuY1xcbkBAIC0yOTUsNiArMjk1LDkgQEAgc3RhdGljIGJvb2wgY2FwYWJsZV93cnRfbW91bnQoc3RydWN0IG1vdW50ICptb3VudClcXG4gXFx0ICovXFxuIFxcdGd1YXJkKHJjdSkoKTtcXG4gXFx0bW50X25zID0gUkVBRF9PTkNFKG1vdW50LVxcdTAwM2VtbnRfbnMpO1xcbitcXHRpZiAoIW1udF9ucylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0cmV0dXJuIG5zX2NhcGFibGUobW50X25zLVxcdTAwM2V1c2VyX25zLCBDQVBfU1lTX0FETUlOKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDM6NTMuMzg3MTI2MTM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ0Nzc5NjU5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkhBTkRMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRsZV90b19wYXRoXCIsXG4gICAgXCJkb19oYW5kbGVfb3BlblwiLFxuICAgIFwic3lzX29wZW5fYnlfaGFuZGxlX2F0XCIsXG4gICAgXCJjYXBhYmxlX3dydF9tb3VudFwiLFxuICAgIFwibWF5X2RlY29kZV9maFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgY2FwYWJsZV93cnRfbW91bnRgIHdoZW4gYG1udF9uc2AgaXMgTlVMTC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2FiN2FmY2M1NDE0ZDA3NWRmZTUyOWU0YmM1N2IyOGNhYjBlOTZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwNDo0Mzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ZoYW5kbGUuYyBiL2ZzL2ZoYW5kbGUuY1xuaW5kZXggMWNhN2ViM2E2Y2I1MTYuLmQ5ZGU3MjEwYTQxMTNiIDEwMDY0NFxuLS0tIGEvZnMvZmhhbmRsZS5jXG4rKysgYi9mcy9maGFuZGxlLmNcbkBAIC0yOTUsNiArMjk1LDkgQEAgc3RhdGljIGJvb2wgY2FwYWJsZV93cnRfbW91bnQoc3RydWN0IG1vdW50ICptb3VudClcbiBcdCAqL1xuIFx0Z3VhcmQocmN1KSgpO1xuIFx0bW50X25zID0gUkVBRF9PTkNFKG1vdW50LVx1MDAzZW1udF9ucyk7XG4rXHRpZiAoIW1udF9ucylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0cmV0dXJuIG5zX2NhcGFibGUobW50X25zLVx1MDAzZXVzZXJfbnMsIENBUF9TWVNfQURNSU4pO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQzOjUzLjM4NzEyODcwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTIzMzA3NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkV4YW1pbmluZyBhIEZpbGUgU3lzdGVtIEhhbmRsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9maGFuZGxlLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBgY2FwYWJsZV93cnRfbW91bnQoKWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgYSBuZXcgY2hlY2sgaGFzIGJlZW4gaW50cm9kdWNlZDogYGlmICghbW50X25zKSByZXR1cm4gZmFsc2U7YC4gUmlnaHQgYXdheSwgdGhpcyBqdW1wcyBvdXQgYXQgbWUgYXMgYSBwb3RlbnRpYWwgYWNjZXNzIGNvbnRyb2wgbW9kaWZpY2F0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBuYW1lc3BhY2UgaGFuZGxpbmcgZHVyaW5nIG1vdW50IG9wZXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IHdpdGhpbiBgZnMvZmhhbmRsZS5jYCB0byBmdWxseSBncmFzcCB0aGlzIGNoYW5nZS4gSSdtIGFzc3VtaW5nIHRoYXQgYG1udF9uc2AgaXMgbGlrZWx5IHJlZmVycmluZyB0byB0aGUgbW91bnQgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmlsZSBoYW5kbGUsIGJ1dCBJIHdpbGwgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBgcmV0dXJuIGZhbHNlO2Agc3VnZ2VzdHMgdGhhdCBpZiB0aGVyZSdzIG5vIG1vdW50IG5hbWVzcGFjZSBwcmVzZW50LCB3cml0aW5nIGEgbW91bnQgaXNuJ3QgcGVybWl0dGVkLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhcm91bmQgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDQ6MDQuNTEwNDM5Mjk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODg0ODQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYXBhYmxlX3dydF9tb3VudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9maGFuZGxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmhhbmRsZS5jPTI2NT1zdGF0aWMgaW50IGRvX2hhbmRsZV90b19wYXRoKHN0cnVjdCBmaWxlX2hhbmRsZSAqaGFuZGxlLCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4tLVxcbmZzL2ZoYW5kbGUuYy0yODctXFxuZnMvZmhhbmRsZS5jOjI4ODpzdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KVxcbmZzL2ZoYW5kbGUuYy0yODkte1xcbi0tXFxuZnMvZmhhbmRsZS5jPTMwND1zdGF0aWMgaW5saW5lIGludCBtYXlfZGVjb2RlX2ZoKHN0cnVjdCBoYW5kbGVfdG9fcGF0aF9jdHggKmN0eCxcXG4tLVxcbmZzL2ZoYW5kbGUuYy0zMzgtXFx0ZWxzZSBpZiAoaXNfbW91bnRlZChyb290LVxcdTAwM2VtbnQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZmhhbmRsZS5jOjMzOTpcXHRcXHQgY2FwYWJsZV93cnRfbW91bnQocmVhbF9tb3VudChyb290LVxcdTAwM2VtbnQpKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2ZoYW5kbGUuYy0zNDAtXFx0XFx0ICFoYXNfbG9ja2VkX2NoaWxkcmVuKHJlYWxfbW91bnQocm9vdC1cXHUwMDNlbW50KSwgcm9vdC1cXHUwMDNlZGVudHJ5KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDQ6MDQuODI5MjkzMzMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY2NTA4NjA2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsaWtlbHkgY29udHJvbCBmbG93LCBhcyBJIHNlZSBpdDpcblxuKipUcmFjaW5nIHRoZSBQYXRoIG9mIEhhbmRsZSBEZWNvZGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG91ciBmaWxlIGhhbmRsZSBkZWNvZGluZyB3b3Jrcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmdW5jdGlvbiwgYGNhcGFibGVfd3J0X21vdW50YCwgZ2V0cyBpbnZva2VkIGZyb20gd2l0aGluIGBtYXlfZGVjb2RlX2ZoYC4gVGhpcyBgbWF5X2RlY29kZV9maGAgZnVuY3Rpb24sIGluIHR1cm4sIGlzIGEgZGVwZW5kZW5jeSBvZiBgZG9faGFuZGxlX3RvX3BhdGhgLiBOb3csIGBkb19oYW5kbGVfdG9fcGF0aGAgc2VlbXMgY3JpdGljYWwg4oCTIGl0J3MgdGhlIGJyaWRnZSBmcm9tIGEgZmlsZSBoYW5kbGUgdG8gYSBwYXRoIHJlcHJlc2VudGF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzOiBJJ20gcHJldHR5IHN1cmUgYGRvX2hhbmRsZV90b19wYXRoYCBpcyBjYWxsZWQgZnJvbSB0d28gc3lzdGVtIGNhbGxzLCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBhbmQgYHN5c19uYW1lX3RvX2hhbmRsZV9hdGAuIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgbGVhZCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGNhbGwgZ3JhcGggYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIGVudHJ5IHBvaW50cy4gVGltZSB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ0OjMxLjQ4MDE1NjE0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTcwMzk0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF5X2RlY29kZV9maFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9maGFuZGxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmhhbmRsZS5jPTI4OD1zdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KVxcbi0tXFxuZnMvZmhhbmRsZS5jLTMwMy1cXG5mcy9maGFuZGxlLmM6MzA0OnN0YXRpYyBpbmxpbmUgaW50IG1heV9kZWNvZGVfZmgoc3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCAqY3R4LFxcbmZzL2ZoYW5kbGUuYy0zMDUtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9fZmxhZ3MpXFxuLS1cXG5mcy9maGFuZGxlLmM9MzUzPXN0YXRpYyBpbnQgaGFuZGxlX3RvX3BhdGgoaW50IG1vdW50ZGlyZmQsIHN0cnVjdCBmaWxlX2hhbmRsZSBfX3VzZXIgKnVmaCxcXG4tLVxcbmZzL2ZoYW5kbGUuYy0zODAtXFx0ZWxzZVxcbmZzL2ZoYW5kbGUuYzozODE6XFx0XFx0cmV0dmFsID0gbWF5X2RlY29kZV9maChcXHUwMDI2Y3R4LCBvX2ZsYWdzKTtcXG5mcy9maGFuZGxlLmMtMzgyLVxcdGlmIChyZXR2YWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ0OjMyLjA5NzIwMTgwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTIzMzA5NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgRmlsZSBIYW5kbGVzIGFuZCBQYXRoIENvbnZlcnNpb246IEEgQ29uY2lzZSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyBgaGFuZGxlX3RvX3BhdGhgIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgcmVzcG9uc2libGUgZm9yLCBlc3NlbnRpYWxseSwgdHJhbnNsYXRpbmcgYSBmaWxlIGhhbmRsZSBpbnRvIGl0cyBjb3JyZXNwb25kaW5nIHBhdGguIEFuZCB0aGUgaW1tZWRpYXRlIGltcGxpY2F0aW9uIHRoZXJlLCB0aGUgY3J1Y2lhbCB0aGluZyBJJ20gcGlja2luZyB1cCBvbiwgaXMgdGhlIGNhbGwgdG8gYG1heV9kZWNvZGVfZmhgLiBJdCdzIG5vdCBqdXN0IGEgZGlyZWN0IG1hcHBpbmcuIFRoZSBmYWN0IHRoYXQgYG1heV9kZWNvZGVfZmhgIGlzIGludm9sdmVkIHRlbGxzIG1lIHRoZXJlJ3MgcG90ZW50aWFsbHkgc29tZSBjb21wbGV4aXR5IGludm9sdmVkIGJleW9uZCBhIHNpbXBsZSBsb29rdXAgb3IgZGlyZWN0IGNvbnZlcnNpb24uXG5cbkknbSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIHBvc3NpYmxlIHNjZW5hcmlvcyB0aGlzIGludHJvZHVjZXMuIElzIHRoaXMgZm9yIGRlYWxpbmcgd2l0aCBlbmNvZGVkIGZpbGVuYW1lcywgcGVyaGFwcyB0aG9zZSBzdG9yZWQgd2l0aCBjaGFyYWN0ZXIgZW5jb2RpbmdzIGJleW9uZCB0aGUgc3lzdGVtJ3MgZGVmYXVsdD8gT3IgaXMgaXQgbW9yZSBpbnZvbHZlZCwgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBzeW1ib2xpYyBsaW5rcyBvciBvdGhlciBmaWxlIHN5c3RlbSBudWFuY2VzIHRoYXQgcmVxdWlyZSBzb21lIHNvcnQgb2YgZGVjb2Rpbmcgb3IgcmVzb2x1dGlvbiBzdGVwIGJlZm9yZSBhIGRlZmluaXRpdmUgcGF0aCBjYW4gYmUgcmV0dXJuZWQ/IFRoZSBuZWVkIGZvciBcIm1heV9kZWNvZGVcIiBzdWdnZXN0cyB0aGUgY29udmVyc2lvbiBpc24ndCBhbHdheXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIG5vdCBhIHRyaXZpYWwgb3BlcmF0aW9uLCBhbmQgdGhlcmUncyBhIHJlYXNvbiBmb3IgdGhhdC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBtYXlfZGVjb2RlX2ZoYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIHRoZSBzeXN0ZW0vT1MgdGhpcyBpcyBydW5uaW5nIG9uIHdvdWxkIGJlIGNydWNpYWwgaGVyZSB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBsaWtlbHkgZXhpc3RzIHRvIGhhbmRsZSBlZGdlIGNhc2VzIGFuZCBjb21wYXRpYmlsaXR5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ0OjQ3LjIyMDUxMzg5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDkzODYzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3RvX3BhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmhhbmRsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZoYW5kbGUuYz0xOTk9c3RhdGljIGludCB2ZnNfZGVudHJ5X2FjY2VwdGFibGUodm9pZCAqY29udGV4dCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2ZoYW5kbGUuYy0yMDAte1xcbmZzL2ZoYW5kbGUuYzoyMDE6XFx0c3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCAqY3R4ID0gY29udGV4dDtcXG5mcy9maGFuZGxlLmMtMjAyLVxcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyA9IGN1cnJlbnRfdXNlcl9ucygpO1xcbi0tXFxuZnMvZmhhbmRsZS5jLTI2NC1cXG5mcy9maGFuZGxlLmM6MjY1OnN0YXRpYyBpbnQgZG9faGFuZGxlX3RvX3BhdGgoc3RydWN0IGZpbGVfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBwYXRoICpwYXRoLFxcbmZzL2ZoYW5kbGUuYzoyNjY6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgpXFxuZnMvZmhhbmRsZS5jLTI2Ny17XFxuLS1cXG5mcy9maGFuZGxlLmM9Mjg4PXN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXFxuLS1cXG5mcy9maGFuZGxlLmMtMzAzLVxcbmZzL2ZoYW5kbGUuYzozMDQ6c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXFxuZnMvZmhhbmRsZS5jLTMwNS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb19mbGFncylcXG4tLVxcbmZzL2ZoYW5kbGUuYy0zNTItXFxuZnMvZmhhbmRsZS5jOjM1MzpzdGF0aWMgaW50IGhhbmRsZV90b19wYXRoKGludCBtb3VudGRpcmZkLCBzdHJ1Y3QgZmlsZV9oYW5kbGUgX191c2VyICp1ZmgsXFxuZnMvZmhhbmRsZS5jLTM1NC1cXHRcXHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgdW5zaWduZWQgaW50IG9fZmxhZ3MpXFxuLS1cXG5mcy9maGFuZGxlLmMtMzU4LVxcdHN0cnVjdCBmaWxlX2hhbmRsZSAqaGFuZGxlIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbmZzL2ZoYW5kbGUuYzozNTk6XFx0c3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCBjdHggPSB7fTtcXG5mcy9maGFuZGxlLmMtMzYwLVxcdGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyAqZW9wcztcXG4tLVxcbmZzL2ZoYW5kbGUuYy00MTEtXFx0aGFuZGxlLVxcdTAwM2VoYW5kbGVfdHlwZSBcXHUwMDI2PSB+RklMRUlEX1VTRVJfRkxBR1NfTUFTSztcXG5mcy9maGFuZGxlLmM6NDEyOlxcdHJldHZhbCA9IGRvX2hhbmRsZV90b19wYXRoKGhhbmRsZSwgcGF0aCwgXFx1MDAyNmN0eCk7XFxuZnMvZmhhbmRsZS5jLTQxMy1cXG4tLVxcbmZzL2ZoYW5kbGUuYz00MzA9c3RhdGljIGxvbmcgZG9faGFuZGxlX29wZW4oaW50IG1vdW50ZGlyZmQsIHN0cnVjdCBmaWxlX2hhbmRsZSBfX3VzZXIgKnVmaCxcXG4tLVxcbmZzL2ZoYW5kbGUuYy00MzUtXFxuZnMvZmhhbmRsZS5jOjQzNjpcXHRyZXR2YWwgPSBoYW5kbGVfdG9fcGF0aChtb3VudGRpcmZkLCB1ZmgsIFxcdTAwMjZwYXRoLCBvcGVuX2ZsYWcpO1xcbmZzL2ZoYW5kbGUuYy00MzctXFx0aWYgKHJldHZhbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDQ6NDcuNTI5OTA1NzkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5Mjk3Mzc5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEZpbGUgSGFuZGxlIEludGVybmFscyoqXG5cblJpZ2h0LCBzbyBgZG9faGFuZGxlX29wZW5gIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIEknbSByZW1pbmRlZCBpdCdzIHRyaWdnZXJlZCB0aHJvdWdoIGBzeXNfb3Blbl9ieV9oYW5kbGVfYXRgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHNldHVwLiBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBpcyB0aGUgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdXNlcnNwYWNlIHRvIG9idGFpbiBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYSBmaWxlLCBnaXZlbiBhIGZpbGUgaGFuZGxlICh3aGljaCBpcyBhbiBvcGFxdWUgaWRlbnRpZmllciByZXByZXNlbnRpbmcgYW4gb3BlbiBpbm9kZSwgdXN1YWxseSkuIFxuXG5TbywgYGRvX2hhbmRsZV9vcGVuYCBpcyB0aGUga2VybmVsLXNwYWNlIHdvcmtob3JzZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIGRpcnR5IHdvcmsuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHdlIG1hcCB0aGUgcHJvdmlkZWQgZmlsZSBoYW5kbGUsIHByb2JhYmx5IHJldHJpZXZlZCBmcm9tIGEgcHJpb3IgYG5hbWVpYCBjYWxsIG9yIHNpbWlsYXIsIGludG8gYSB1c2FibGUga2VybmVsIGZpbGUgc3RydWN0LiBcblxuSSdtIGluc3RhbnRseSBjb25zaWRlcmluZyB0aGluZ3MgbGlrZTpcblxuKiAgICoqSGFuZGxlIHZhbGlkYXRpb246KiogV2hhdCBraW5kIG9mIGNoZWNrcyBhcmUgcGVyZm9ybWVkIG9uIHRoYXQgZmlsZSBoYW5kbGUgKndpdGhpbiogYGRvX2hhbmRsZV9vcGVuYD8gSXMgaXQganVzdCBhIHNpbXBsZSBpbmRleCBpbnRvIGEgdGFibGUsIG9yIGlzIHRoZXJlIHNvbWUgbW9yZSBzb3BoaXN0aWNhdGVkIGludGVncml0eSBjaGVjayB0byBwcmV2ZW50IGhhbmRsZSBzcG9vZmluZy9tYW5pcHVsYXRpb24/XG4qICAgKipQZXJtaXNzaW9uczoqKiBPYnZpb3VzbHksIGl0J3MgZXNzZW50aWFsIHRoYXQgYGRvX2hhbmRsZV9vcGVuYCBjaGVja3MgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyB0aGF0IHRoZSBjYWxsZXIgaGFzIHRvIHRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGhhbmRsZS4gVGhhdCBjb3VsZCByZXF1aXJlIGxvb2tpbmcgdXAgdGhlIGlub2RlLCBjaGVja2luZyB0aGUgZmlsZSBtb2RlLCBhbmQgY29uc2lkZXJpbmcgY2FwYWJpbGl0aWVzLCBBQ0xzLCBhbmQgdGhlIHVzZXIncyBlZmZlY3RpdmUgY3JlZGVudGlhbHMuXG4qICAgKipFcnJvciBoYW5kbGluZzoqKiBXaGF0IGFyZSB0aGUgcG9zc2libGUgZXJyb3IgY29uZGl0aW9ucz8gSW52YWxpZCBoYW5kbGU/IFBlcm1pc3Npb25zIGRlbmllZD8gUmVzb3VyY2UgZXhoYXVzdGlvbj8gSSB3YW50IHRvIGtub3cgdGhlIHJhbmdlIG9mIGVycm9ycyBoYW5kbGVkIGFuZCBob3cgZ3JhY2VmdWxseSB0aGV5J3JlIHJlcG9ydGVkIGJhY2sgdG8gdGhlIHVzZXIuXG4qICAgKipGaWxlIGRlc2NyaXB0b3IgYWxsb2NhdGlvbjoqKiBJIGFzc3VtZSB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGEgbmV3IGZpbGUgZGVzY3JpcHRvciAoRkQpIGFuZCBzZXR0aW5nIHVwIHRoZSBsaW5rIHRvIHRoZSBrZXJuZWwgZmlsZSBzdHJ1Y3R1cmUsIGFuZCByZXR1cm5pbmcgdGhpcyBGRCB0byB0aGUgdXNlcnNwYWNlIGNhbGxlci4gQW55IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQgd2hlbiBhbGxvY2F0aW5nIGFuIEZEP1xuXG5Fc3NlbnRpYWxseSwgSSdtIHBpY3R1cmluZyBgZG9faGFuZGxlX29wZW5gIGFzIHRoZSBjcnVjaWFsIGtlcm5lbCBsYXllciB0aGF0IHByb3ZpZGVzICpzZWN1cml0eSogYW5kICpjb3JyZWN0bmVzcyouIEkgc2hvdWxkIGludmVzdGlnYXRlIGl0IGZvciBwb3NzaWJsZSBhdHRhY2sgdmVjdG9ycywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBjb25jdXJyZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ1OjAxLjQ1OTY0NTkxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NzQyNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2hhbmRsZV9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZoYW5kbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maGFuZGxlLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZmlsZV9vcGVuX2hhbmRsZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG9wZW5fZmxhZylcXG4tLVxcbmZzL2ZoYW5kbGUuYy00MjktXFxuZnMvZmhhbmRsZS5jOjQzMDpzdGF0aWMgbG9uZyBkb19oYW5kbGVfb3BlbihpbnQgbW91bnRkaXJmZCwgc3RydWN0IGZpbGVfaGFuZGxlIF9fdXNlciAqdWZoLFxcbmZzL2ZoYW5kbGUuYy00MzEtXFx0XFx0XFx0ICAgaW50IG9wZW5fZmxhZylcXG4tLVxcbmZzL2ZoYW5kbGUuYz00NTQ9U1lTQ0FMTF9ERUZJTkUzKG9wZW5fYnlfaGFuZGxlX2F0LCBpbnQsIG1vdW50ZGlyZmQsXFxuLS1cXG5mcy9maGFuZGxlLmMtNDYyLVxcbmZzL2ZoYW5kbGUuYzo0NjM6XFx0cmV0ID0gZG9faGFuZGxlX29wZW4obW91bnRkaXJmZCwgaGFuZGxlLCBmbGFncyk7XFxuZnMvZmhhbmRsZS5jLTQ2NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZnMvZmhhbmRsZS5jPTQ3Mj1DT01QQVRfU1lTQ0FMTF9ERUZJTkUzKG9wZW5fYnlfaGFuZGxlX2F0LCBpbnQsIG1vdW50ZGlyZmQsXFxuLS1cXG5mcy9maGFuZGxlLmMtNDc0LXtcXG5mcy9maGFuZGxlLmM6NDc1OlxcdHJldHVybiBkb19oYW5kbGVfb3Blbihtb3VudGRpcmZkLCBoYW5kbGUsIGZsYWdzKTtcXG5mcy9maGFuZGxlLmMtNDc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDU6MDEuODk2Mzk4Nzk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0Mzc3NDQxMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRml4aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBWdWxuZXJhYmlsaXR5KipcblxuQWxyaWdodCwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgcG90ZW50aWFsbHkgbmFzdHksIHZ1bG5lcmFiaWxpdHkg4oCTIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UndmUgZ290IGEgc2l0dWF0aW9uIGluIGBjYXBhYmxlX3dydF9tb3VudGAgd2hlcmUgYG1udF9uc2AgKmNvdWxkKiBiZSBOVUxMLiBUaGF0J3MgYSBjbGFzc2ljIHNjZW5hcmlvIGZvciBhIGNyYXNoLCBhbmQgc29tZXRoaW5nIHdlIGFic29sdXRlbHkgd2FudCB0byBhdm9pZC4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwcm9ncmFtIHVzZXMgdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbC5cblxuUmlnaHQsIHNvIHRvIGJlIGNsZWFyLCBgb3Blbl9ieV9oYW5kbGVfYXRgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gY2FuIGNhbGwgaW50byBgY2FwYWJsZV93cnRfbW91bnRgLCBhbmQgdGhhdCBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBpcy5cblxuSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIGhvdyBgb3Blbl9ieV9oYW5kbGVfYXRgIGlzIGNvbmZpZ3VyZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBJIGJldCBpdCBpcyBlbmFibGVkIHRocm91Z2ggZWl0aGVyIGBDT05GSUdfRkhBTkRMRWAgb3IgYENPTkZJR19FWFBPUlRGU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDo0NToyNi4yNzM4NDM2NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzA1MDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGSEFORExFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTczND1jb25maWcgU0dFVE1BU0tfU1lTQ0FMTFxcbi0tXFxuaW5pdC9LY29uZmlnLTE3NDMtXFxuaW5pdC9LY29uZmlnOjE3NDQ6Y29uZmlnIEZIQU5ETEVcXG5pbml0L0tjb25maWctMTc0NS1cXHRib29sIFxcXCJvcGVuIGJ5IGZoYW5kbGUgc3lzY2FsbHNcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDo0NToyNi42MjA5MDA3OTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYxOTk0NzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgTW91bnQgQ2FwYWJpbGl0eSoqXG5cbk9rYXksIHNvIGBGSEFORExFYCBpcyB0aGUgY29uZmlndXJhdGlvbiB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gTmVlZCB0byBrZWVwIHRoYXQgdG9wIG9mIG1pbmQuIFJpZ2h0IG5vdywgbXkgZm9jdXMgaXMgb24gdGhhdCBgY2FwYWJsZV93cnRfbW91bnRgIHNldHRpbmcuIEl0J3MgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgd2FudCB0byByZS1ldmFsdWF0ZSBpdCBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBMZXQncyBtYWtlIHN1cmUgaXQncyBkb2luZyB3aGF0IHdlIGV4cGVjdC4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ1OjI5LjI0MDg1MDg5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9maGFuZGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg4OlxcdHN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXFxuIDI4OTpcXHR7XFxuIDI5MDpcXHRcXHRzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbW50X25zO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHQvKlxcbiAyOTM6XFx0XFx0ICogRm9yIC1cXHUwMDNlbW50X25zIGFjY2Vzcy5cXG4gMjk0OlxcdFxcdCAqIFRoZSBmb2xsb3dpbmcgUkVBRF9PTkNFKCkgaXMgc2VtYW50aWNhbGx5IHJjdV9kZXJlZmVyZW5jZSgpLlxcbiAyOTU6XFx0XFx0ICovXFxuIDI5NjpcXHRcXHRndWFyZChyY3UpKCk7XFxuIDI5NzpcXHRcXHRtbnRfbnMgPSBSRUFEX09OQ0UobW91bnQtXFx1MDAzZW1udF9ucyk7XFxuIDI5ODpcXHRcXHRpZiAoIW1udF9ucylcXG4gMjk5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0cmV0dXJuIG5zX2NhcGFibGUobW50X25zLVxcdTAwM2V1c2VyX25zLCBDQVBfU1lTX0FETUlOKTtcXG4gMzAyOlxcdH1cXG4gMzAzOlxcdFxcbiAzMDQ6XFx0c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXFxuIDMwNTpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb19mbGFncylcXG4gMzA2OlxcdHtcXG4gMzA3OlxcdFxcdHN0cnVjdCBwYXRoICpyb290ID0gXFx1MDAyNmN0eC1cXHUwMDNlcm9vdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDU6MjkuMjQwOTQ5OTA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzEzMjk5MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBGb2N1cyBhbmQgU2NvcGUqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBnb29kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiBgY2FwYWJsZV93cnRfbW91bnRgLCBgbWF5X2RlY29kZV9maGAsIGBkb19oYW5kbGVfdG9fcGF0aGAsIGBoYW5kbGVfdG9fcGF0aGAsIGBkb19oYW5kbGVfb3BlbmAsIG9yIGBzeXNfb3Blbl9ieV9oYW5kbGVfYXRgLiBHaXZlbiB0aGF0IGBjYXBhYmxlX3dydF9tb3VudGAgaXMgc3RhdGljLCBJIGNhbiBwcm9iYWJseSBydWxlIHRoYXQgb3V0IGZvciBicm9hZGVyIGltcGFjdCBhbmQgZm9jdXMgb24gYGhhbmRsZV90b19wYXRoYCwgYGRvX2hhbmRsZV9vcGVuYCwgb3IgYHN5c19vcGVuX2J5X2hhbmRsZV9hdGAuIFNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgZmlsZSBoYW5kbGVzIGFuZCBvcGVuIG9wZXJhdGlvbnMsIEknbGwgc3RhcnQgd2l0aCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBhbmQgYGhhbmRsZV90b19wYXRoYC5cblxuQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJdCdzIGxpa2VseSBjZW50ZXJlZCBhcm91bmQgYEZIQU5ETEVgLCBJJ2xsIGRvdWJsZSBjaGVjayB0aGF0LlxuXG5GaW5hbGx5LCBJJ2xsIHZlcmlmeSB0aGUgY29tcGlsYXRpb24gb2YgYGZzL2ZoYW5kbGUuY2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvYnZpb3VzIGJ1aWxkIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ1OjQyLjU1NDI1MTYxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyOTQ5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZoYW5kbGUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT00Nz1vYmotJChDT05GSUdfU1lTQ1RMKVxcdFxcdCs9IGRyb3BfY2FjaGVzLm8gc3lzY3Rscy5vXFxuZnMvTWFrZWZpbGUtNDgtXFxuZnMvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX0ZIQU5ETEUpXFx0XFx0Kz0gZmhhbmRsZS5vXFxuZnMvTWFrZWZpbGUtNTAtb2JqLXlcXHRcXHRcXHRcXHQrPSBpb21hcC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDU6NDMuMTU3MjA3NzA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjIxMDc3MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfRkhBTkRMRWAgYW5kIE1vdW50IENhcGFiaWxpdGllcyoqXG5cbkFscmlnaHQsIHllcCwgdGhhdCdzIGNvcnJlY3QsIGBDT05GSUdfRkhBTkRMRWAgaXMgZGVmaW5pdGVseSBzZXQuIEdvb2QsIGNvbmZpcm1pbmcgdGhhdCBiYXNlbGluZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGZpbGUgaGFuZGxlIHNlY3VyaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGluIGNvbnRleHQgb2Ygd2hvIGNhbiB3cml0ZSB0byBtb3VudHMuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgY2FsbGVycyBvZiBgY2FwYWJsZV93cnRfbW91bnRgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNhbGwgcG9pbnRzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgYWNjZXNzIGNvbnRyb2wgbW9kZWwuIEFyZSB3ZSBjaGVja2luZyBwZXJtaXNzaW9ucyBhZGVxdWF0ZWx5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaGVyZSByZWxhdGVkIHRvIGZpbGUgaGFuZGxlIHVzYWdlIGFuZCBtb3VudCBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBgQ09ORklHX0ZIQU5ETEVgIHNldHRpbmc/IFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ1OjU3LjM3ODI4NzMzNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNjAwOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNhcGFibGVfd3J0X21vdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZoYW5kbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maGFuZGxlLmM9MjY1PXN0YXRpYyBpbnQgZG9faGFuZGxlX3RvX3BhdGgoc3RydWN0IGZpbGVfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBwYXRoICpwYXRoLFxcbi0tXFxuZnMvZmhhbmRsZS5jLTI4Ny1cXG5mcy9maGFuZGxlLmM6Mjg4OnN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXFxuZnMvZmhhbmRsZS5jLTI4OS17XFxuLS1cXG5mcy9maGFuZGxlLmM9MzA0PXN0YXRpYyBpbmxpbmUgaW50IG1heV9kZWNvZGVfZmgoc3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZnMvZmhhbmRsZS5jLTMzOC1cXHRlbHNlIGlmIChpc19tb3VudGVkKHJvb3QtXFx1MDAzZW1udCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9maGFuZGxlLmM6MzM5OlxcdFxcdCBjYXBhYmxlX3dydF9tb3VudChyZWFsX21vdW50KHJvb3QtXFx1MDAzZW1udCkpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZmhhbmRsZS5jLTM0MC1cXHRcXHQgIWhhc19sb2NrZWRfY2hpbGRyZW4ocmVhbF9tb3VudChyb290LVxcdTAwM2VtbnQpLCByb290LVxcdTAwM2VkZW50cnkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDo0NTo1Ny42NjE4OTUxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTc3OTQ2NTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIGNhbGwgc3RhY2sgaGVyZS4gYGNhcGFibGVfd3J0X21vdW50YCBnZXRzIGNhbGxlZCBieSBgbWF5X2RlY29kZV9maGAsIGFuZCB0aGF0IGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBoYW5kbGVfdG9fcGF0aGAuIFRoYXQgbWFrZXMgYGhhbmRsZV90b19wYXRoYCBhIHByaW1lIHRhcmdldCBmb3IgaW52ZXN0aWdhdGlvbi4gVGhlIHJlbGF0ZWQgZnVuY3Rpb25zLCBgZG9faGFuZGxlX29wZW5gIGFuZCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCwgYWxzbyBsb29rIGludGVyZXN0aW5nIGFuZCBhcmUgZ29vZCBmb2N1cyBzeW1ib2xzIGdpdmVuIHRoZSBjb25uZWN0aW9uLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCAqaXMgdGhpcyBmdXp6YWJsZSo/IFRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUgeWVzLCBiZWNhdXNlIGl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCB0aGF0J3MgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LiBBIHJlYWNoYWJsZSBzeXNjYWxsPyBFeGNlbGxlbnQuXG5cbkFscmlnaHQsIGxldCdzIGdldCB0aGlzIHN1bW1hcnkgYW5kIHJlY29tbWVuZGF0aW9uIHJlYWR5LlxuXG5JJ20gcmVjb21tZW5kaW5nIHRoYXQgdGhpcyBiZSBwdXJzdWVkIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgSSdtIGZvY3VzaW5nIG9uIGFyZSBgaGFuZGxlX3RvX3BhdGhgLCBgZG9faGFuZGxlX29wZW5gLCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCwgYGNhcGFibGVfd3J0X21vdW50YCwgYW5kIGBtYXlfZGVjb2RlX2ZoYC4gV2UnbGwgbmVlZCB0byBlbmFibGUgdGhlIGBGSEFORExFYCBjb25maWcuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjYXBhYmxlX3dydF9tb3VudGAgd2hlbiBgbW50X25zYCBpcyBudWxsLiBUaGlzIGNvZGUgcGF0aCBpcyBleHBvc2VkIHRocm91Z2ggdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbCwgbWFraW5nIGl0IGFuIGlkZWFsIGNhbmRpZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ2MywiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDY6MTcuNDQxMzYyNzY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzNzIyOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSEFORExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3RvX3BhdGhcIixcbiAgICBcImRvX2hhbmRsZV9vcGVuXCIsXG4gICAgXCJzeXNfb3Blbl9ieV9oYW5kbGVfYXRcIixcbiAgICBcImNhcGFibGVfd3J0X21vdW50XCIsXG4gICAgXCJtYXlfZGVjb2RlX2ZoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjYXBhYmxlX3dydF9tb3VudGAgd2hlbiBgbW50X25zYCBpcyBOVUxMLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG9wZW5fYnlfaGFuZGxlX2F0YCBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZIQU5ETEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kbGVfdG9fcGF0aFwiLFxuICAgIFwiZG9faGFuZGxlX29wZW5cIixcbiAgICBcInN5c19vcGVuX2J5X2hhbmRsZV9hdFwiLFxuICAgIFwiY2FwYWJsZV93cnRfbW91bnRcIixcbiAgICBcIm1heV9kZWNvZGVfZmhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwhk6v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 04:25:40 +0000 UTC FinishedAt: 2026-07-09 04:46:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "025d0d6221d9b060bce251427c671cd0080d9dae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FHANDLE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "025d0d6221d9b060bce251427c671cd0080d9dae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FHANDLE" ], "series_id": "6e4a09cd-e3e0-4923-9637-200147512cc3" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "handle_to_path", "do_handle_open", "sys_open_by_handle_at", "capable_wrt_mount", "may_decode_fh" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdG9fcGF0aCYjMzQ7LAogICAgJiMzNDtkb19oYW5kbGVfb3BlbiYjMzQ7LAogICAgJiMzNDtzeXNfb3Blbl9ieV9oYW5kbGVfYXQmIzM0OywKICAgICYjMzQ7Y2FwYWJsZV93cnRfbW91bnQmIzM0OywKICAgICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiM2FiN2FmY2M1NDE0ZDA3NWRmZTUyOWU0YmM1N2IyOGNhYjBlOTZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwNDo0Mzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9maGFuZGxlLmMgYi9mcy9maGFuZGxlLmNcbmluZGV4IDFjYTdlYjNhNmNiNTE2Li5kOWRlNzIxMGE0MTEzYiAxMDA2NDRcbi0tLSBhL2ZzL2ZoYW5kbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmhhbmRsZS5jXG5AQCAtMjk1LDYgJiM0MzsyOTUsOSBAQCBzdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KVxuIFx0ICovXG4gXHRndWFyZChyY3UpKCk7XG4gXHRtbnRfbnMgPSBSRUFEX09OQ0UobW91bnQtXHUwMDNlbW50X25zKTtcbiYjNDM7XHRpZiAoIW1udF9ucylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRyZXR1cm4gbnNfY2FwYWJsZShtbnRfbnMtXHUwMDNldXNlcl9ucywgQ0FQX1NZU19BRE1JTik7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdG9fcGF0aCYjMzQ7LAogICAgJiMzNDtkb19oYW5kbGVfb3BlbiYjMzQ7LAogICAgJiMzNDtzeXNfb3Blbl9ieV9oYW5kbGVfYXQmIzM0OywKICAgICYjMzQ7Y2FwYWJsZV93cnRfbW91bnQmIzM0OywKICAgICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzYWI3YWZjYzU0MTRkMDc1ZGZlNTI5ZTRiYzU3YjI4Y2FiMGU5NmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCA5IDA0OjQzOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZmhhbmRsZS5jIGIvZnMvZmhhbmRsZS5jCmluZGV4IDFjYTdlYjNhNmNiNTE2Li5kOWRlNzIxMGE0MTEzYiAxMDA2NDQKLS0tIGEvZnMvZmhhbmRsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZoYW5kbGUuYwpAQCAtMjk1LDYgJiM0MzsyOTUsOSBAQCBzdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KQogCSAqLwogCWd1YXJkKHJjdSkoKTsKIAltbnRfbnMgPSBSRUFEX09OQ0UobW91bnQtJmd0O21udF9ucyk7CiYjNDM7CWlmICghbW50X25zKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCXJldHVybiBuc19jYXBhYmxlKG1udF9ucy0mZ3Q7dXNlcl9ucywgQ0FQX1NZU19BRE1JTik7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRXhhbWluaW5nIGEgRmlsZSBTeXN0ZW0gSGFuZGxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZnMvZmhhbmRsZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgYGNhcGFibGVfd3J0X21vdW50KClgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGEgbmV3IGNoZWNrIGhhcyBiZWVuIGludHJvZHVjZWQ6IGBpZiAoIW1udF9ucykgcmV0dXJuIGZhbHNlO2AuIFJpZ2h0IGF3YXksIHRoaXMganVtcHMgb3V0IGF0IG1lIGFzIGEgcG90ZW50aWFsIGFjY2VzcyBjb250cm9sIG1vZGlmaWNhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gbmFtZXNwYWNlIGhhbmRsaW5nIGR1cmluZyBtb3VudCBvcGVyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgd2l0aGluIGBmcy9maGFuZGxlLmNgIHRvIGZ1bGx5IGdyYXNwIHRoaXMgY2hhbmdlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgYG1udF9uc2AgaXMgbGlrZWx5IHJlZmVycmluZyB0byB0aGUgbW91bnQgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmlsZSBoYW5kbGUsIGJ1dCBJIHdpbGwgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBgcmV0dXJuIGZhbHNlO2Agc3VnZ2VzdHMgdGhhdCBpZiB0aGVyZSYjMzk7cyBubyBtb3VudCBuYW1lc3BhY2UgcHJlc2VudCwgd3JpdGluZyBhIG1vdW50IGlzbiYjMzk7dCBwZXJtaXR0ZWQuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhcm91bmQgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYXBhYmxlX3dydF9tb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZoYW5kbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9maGFuZGxlLmM9MjY1PXN0YXRpYyBpbnQgZG9faGFuZGxlX3RvX3BhdGgoc3RydWN0IGZpbGVfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBwYXRoICpwYXRoLFxuLS1cbmZzL2ZoYW5kbGUuYy0yODctXG5mcy9maGFuZGxlLmM6Mjg4OnN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXG5mcy9maGFuZGxlLmMtMjg5LXtcbi0tXG5mcy9maGFuZGxlLmM9MzA0PXN0YXRpYyBpbmxpbmUgaW50IG1heV9kZWNvZGVfZmgoc3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCAqY3R4LFxuLS1cbmZzL2ZoYW5kbGUuYy0zMzgtXHRlbHNlIGlmIChpc19tb3VudGVkKHJvb3QtXHUwMDNlbW50KSBcdTAwMjZcdTAwMjZcbmZzL2ZoYW5kbGUuYzozMzk6XHRcdCBjYXBhYmxlX3dydF9tb3VudChyZWFsX21vdW50KHJvb3QtXHUwMDNlbW50KSkgXHUwMDI2XHUwMDI2XG5mcy9maGFuZGxlLmMtMzQwLVx0XHQgIWhhc19sb2NrZWRfY2hpbGRyZW4ocmVhbF9tb3VudChyb290LVx1MDAzZW1udCksIHJvb3QtXHUwMDNlZGVudHJ5KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGlrZWx5IGNvbnRyb2wgZmxvdywgYXMgSSBzZWUgaXQ6CgoqKlRyYWNpbmcgdGhlIFBhdGggb2YgSGFuZGxlIERlY29kaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBvdXIgZmlsZSBoYW5kbGUgZGVjb2Rpbmcgd29ya3MuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb24sIGBjYXBhYmxlX3dydF9tb3VudGAsIGdldHMgaW52b2tlZCBmcm9tIHdpdGhpbiBgbWF5X2RlY29kZV9maGAuIFRoaXMgYG1heV9kZWNvZGVfZmhgIGZ1bmN0aW9uLCBpbiB0dXJuLCBpcyBhIGRlcGVuZGVuY3kgb2YgYGRvX2hhbmRsZV90b19wYXRoYC4gTm93LCBgZG9faGFuZGxlX3RvX3BhdGhgIHNlZW1zIGNyaXRpY2FsIOKAkyBpdCYjMzk7cyB0aGUgYnJpZGdlIGZyb20gYSBmaWxlIGhhbmRsZSB0byBhIHBhdGggcmVwcmVzZW50YXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoaXM6IEkmIzM5O20gcHJldHR5IHN1cmUgYGRvX2hhbmRsZV90b19wYXRoYCBpcyBjYWxsZWQgZnJvbSB0d28gc3lzdGVtIGNhbGxzLCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBhbmQgYHN5c19uYW1lX3RvX2hhbmRsZV9hdGAuIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgbGVhZCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGNhbGwgZ3JhcGggYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciBlbnRyeSBwb2ludHMuIFRpbWUgdG8gY2hlY2sgdGhlIGNyb3NzLXJlZmVyZW5jZXMgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2ZoYW5kbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9maGFuZGxlLmM9Mjg4PXN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXG4tLVxuZnMvZmhhbmRsZS5jLTMwMy1cbmZzL2ZoYW5kbGUuYzozMDQ6c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXG5mcy9maGFuZGxlLmMtMzA1LVx0XHRcdFx0dW5zaWduZWQgaW50IG9fZmxhZ3MpXG4tLVxuZnMvZmhhbmRsZS5jPTM1Mz1zdGF0aWMgaW50IGhhbmRsZV90b19wYXRoKGludCBtb3VudGRpcmZkLCBzdHJ1Y3QgZmlsZV9oYW5kbGUgX191c2VyICp1ZmgsXG4tLVxuZnMvZmhhbmRsZS5jLTM4MC1cdGVsc2VcbmZzL2ZoYW5kbGUuYzozODE6XHRcdHJldHZhbCA9IG1heV9kZWNvZGVfZmgoXHUwMDI2Y3R4LCBvX2ZsYWdzKTtcbmZzL2ZoYW5kbGUuYy0zODItXHRpZiAocmV0dmFsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgRmlsZSBIYW5kbGVzIGFuZCBQYXRoIENvbnZlcnNpb246IEEgQ29uY2lzZSBBbmFseXNpcyoqCgpSaWdodCwgc28gYGhhbmRsZV90b19wYXRoYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyByZXNwb25zaWJsZSBmb3IsIGVzc2VudGlhbGx5LCB0cmFuc2xhdGluZyBhIGZpbGUgaGFuZGxlIGludG8gaXRzIGNvcnJlc3BvbmRpbmcgcGF0aC4gQW5kIHRoZSBpbW1lZGlhdGUgaW1wbGljYXRpb24gdGhlcmUsIHRoZSBjcnVjaWFsIHRoaW5nIEkmIzM5O20gcGlja2luZyB1cCBvbiwgaXMgdGhlIGNhbGwgdG8gYG1heV9kZWNvZGVfZmhgLiBJdCYjMzk7cyBub3QganVzdCBhIGRpcmVjdCBtYXBwaW5nLiBUaGUgZmFjdCB0aGF0IGBtYXlfZGVjb2RlX2ZoYCBpcyBpbnZvbHZlZCB0ZWxscyBtZSB0aGVyZSYjMzk7cyBwb3RlbnRpYWxseSBzb21lIGNvbXBsZXhpdHkgaW52b2x2ZWQgYmV5b25kIGEgc2ltcGxlIGxvb2t1cCBvciBkaXJlY3QgY29udmVyc2lvbi4KCkkmIzM5O20gaW5zdGFudGx5IHRoaW5raW5nIGFib3V0IHRoZSBwb3NzaWJsZSBzY2VuYXJpb3MgdGhpcyBpbnRyb2R1Y2VzLiBJcyB0aGlzIGZvciBkZWFsaW5nIHdpdGggZW5jb2RlZCBmaWxlbmFtZXMsIHBlcmhhcHMgdGhvc2Ugc3RvcmVkIHdpdGggY2hhcmFjdGVyIGVuY29kaW5ncyBiZXlvbmQgdGhlIHN5c3RlbSYjMzk7cyBkZWZhdWx0PyBPciBpcyBpdCBtb3JlIGludm9sdmVkLCBwb3RlbnRpYWxseSBhZGRyZXNzaW5nIHN5bWJvbGljIGxpbmtzIG9yIG90aGVyIGZpbGUgc3lzdGVtIG51YW5jZXMgdGhhdCByZXF1aXJlIHNvbWUgc29ydCBvZiBkZWNvZGluZyBvciByZXNvbHV0aW9uIHN0ZXAgYmVmb3JlIGEgZGVmaW5pdGl2ZSBwYXRoIGNhbiBiZSByZXR1cm5lZD8gVGhlIG5lZWQgZm9yICYjMzQ7bWF5X2RlY29kZSYjMzQ7IHN1Z2dlc3RzIHRoZSBjb252ZXJzaW9uIGlzbiYjMzk7dCBhbHdheXMgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBub3QgYSB0cml2aWFsIG9wZXJhdGlvbiwgYW5kIHRoZXJlJiMzOTtzIGEgcmVhc29uIGZvciB0aGF0LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2YgYG1heV9kZWNvZGVfZmhgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIHRoZSBzeXN0ZW0vT1MgdGhpcyBpcyBydW5uaW5nIG9uIHdvdWxkIGJlIGNydWNpYWwgaGVyZSB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGV4aXN0cyB0byBoYW5kbGUgZWRnZSBjYXNlcyBhbmQgY29tcGF0aWJpbGl0eSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3RvX3BhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9maGFuZGxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmhhbmRsZS5jPTE5OT1zdGF0aWMgaW50IHZmc19kZW50cnlfYWNjZXB0YWJsZSh2b2lkICpjb250ZXh0LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9maGFuZGxlLmMtMjAwLXtcbmZzL2ZoYW5kbGUuYzoyMDE6XHRzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHggPSBjb250ZXh0O1xuZnMvZmhhbmRsZS5jLTIwMi1cdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyA9IGN1cnJlbnRfdXNlcl9ucygpO1xuLS1cbmZzL2ZoYW5kbGUuYy0yNjQtXG5mcy9maGFuZGxlLmM6MjY1OnN0YXRpYyBpbnQgZG9faGFuZGxlX3RvX3BhdGgoc3RydWN0IGZpbGVfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBwYXRoICpwYXRoLFxuZnMvZmhhbmRsZS5jOjI2NjpcdFx0XHQgICAgIHN0cnVjdCBoYW5kbGVfdG9fcGF0aF9jdHggKmN0eClcbmZzL2ZoYW5kbGUuYy0yNjcte1xuLS1cbmZzL2ZoYW5kbGUuYz0yODg9c3RhdGljIGJvb2wgY2FwYWJsZV93cnRfbW91bnQoc3RydWN0IG1vdW50ICptb3VudClcbi0tXG5mcy9maGFuZGxlLmMtMzAzLVxuZnMvZmhhbmRsZS5jOjMwNDpzdGF0aWMgaW5saW5lIGludCBtYXlfZGVjb2RlX2ZoKHN0cnVjdCBoYW5kbGVfdG9fcGF0aF9jdHggKmN0eCxcbmZzL2ZoYW5kbGUuYy0zMDUtXHRcdFx0XHR1bnNpZ25lZCBpbnQgb19mbGFncylcbi0tXG5mcy9maGFuZGxlLmMtMzUyLVxuZnMvZmhhbmRsZS5jOjM1MzpzdGF0aWMgaW50IGhhbmRsZV90b19wYXRoKGludCBtb3VudGRpcmZkLCBzdHJ1Y3QgZmlsZV9oYW5kbGUgX191c2VyICp1ZmgsXG5mcy9maGFuZGxlLmMtMzU0LVx0XHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgdW5zaWduZWQgaW50IG9fZmxhZ3MpXG4tLVxuZnMvZmhhbmRsZS5jLTM1OC1cdHN0cnVjdCBmaWxlX2hhbmRsZSAqaGFuZGxlIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuZnMvZmhhbmRsZS5jOjM1OTpcdHN0cnVjdCBoYW5kbGVfdG9fcGF0aF9jdHggY3R4ID0ge307XG5mcy9maGFuZGxlLmMtMzYwLVx0Y29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zICplb3BzO1xuLS1cbmZzL2ZoYW5kbGUuYy00MTEtXHRoYW5kbGUtXHUwMDNlaGFuZGxlX3R5cGUgXHUwMDI2PSB+RklMRUlEX1VTRVJfRkxBR1NfTUFTSztcbmZzL2ZoYW5kbGUuYzo0MTI6XHRyZXR2YWwgPSBkb19oYW5kbGVfdG9fcGF0aChoYW5kbGUsIHBhdGgsIFx1MDAyNmN0eCk7XG5mcy9maGFuZGxlLmMtNDEzLVxuLS1cbmZzL2ZoYW5kbGUuYz00MzA9c3RhdGljIGxvbmcgZG9faGFuZGxlX29wZW4oaW50IG1vdW50ZGlyZmQsIHN0cnVjdCBmaWxlX2hhbmRsZSBfX3VzZXIgKnVmaCxcbi0tXG5mcy9maGFuZGxlLmMtNDM1LVxuZnMvZmhhbmRsZS5jOjQzNjpcdHJldHZhbCA9IGhhbmRsZV90b19wYXRoKG1vdW50ZGlyZmQsIHVmaCwgXHUwMDI2cGF0aCwgb3Blbl9mbGFnKTtcbmZzL2ZoYW5kbGUuYy00MzctXHRpZiAocmV0dmFsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gRmlsZSBIYW5kbGUgSW50ZXJuYWxzKioKClJpZ2h0LCBzbyBgZG9faGFuZGxlX29wZW5gIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIEkmIzM5O20gcmVtaW5kZWQgaXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggYHN5c19vcGVuX2J5X2hhbmRsZV9hdGAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgc2V0dXAuIGBzeXNfb3Blbl9ieV9oYW5kbGVfYXRgIGlzIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB1c2Vyc3BhY2UgdG8gb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBhIGZpbGUsIGdpdmVuIGEgZmlsZSBoYW5kbGUgKHdoaWNoIGlzIGFuIG9wYXF1ZSBpZGVudGlmaWVyIHJlcHJlc2VudGluZyBhbiBvcGVuIGlub2RlLCB1c3VhbGx5KS4gCgpTbywgYGRvX2hhbmRsZV9vcGVuYCBpcyB0aGUga2VybmVsLXNwYWNlIHdvcmtob3JzZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIGRpcnR5IHdvcmsuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSBtYXAgdGhlIHByb3ZpZGVkIGZpbGUgaGFuZGxlLCBwcm9iYWJseSByZXRyaWV2ZWQgZnJvbSBhIHByaW9yIGBuYW1laWAgY2FsbCBvciBzaW1pbGFyLCBpbnRvIGEgdXNhYmxlIGtlcm5lbCBmaWxlIHN0cnVjdC4gCgpJJiMzOTttIGluc3RhbnRseSBjb25zaWRlcmluZyB0aGluZ3MgbGlrZToKCiogICAqKkhhbmRsZSB2YWxpZGF0aW9uOioqIFdoYXQga2luZCBvZiBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbiB0aGF0IGZpbGUgaGFuZGxlICp3aXRoaW4qIGBkb19oYW5kbGVfb3BlbmA/IElzIGl0IGp1c3QgYSBzaW1wbGUgaW5kZXggaW50byBhIHRhYmxlLCBvciBpcyB0aGVyZSBzb21lIG1vcmUgc29waGlzdGljYXRlZCBpbnRlZ3JpdHkgY2hlY2sgdG8gcHJldmVudCBoYW5kbGUgc3Bvb2ZpbmcvbWFuaXB1bGF0aW9uPwoqICAgKipQZXJtaXNzaW9uczoqKiBPYnZpb3VzbHksIGl0JiMzOTtzIGVzc2VudGlhbCB0aGF0IGBkb19oYW5kbGVfb3BlbmAgY2hlY2tzIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0byB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhhdCBoYW5kbGUuIFRoYXQgY291bGQgcmVxdWlyZSBsb29raW5nIHVwIHRoZSBpbm9kZSwgY2hlY2tpbmcgdGhlIGZpbGUgbW9kZSwgYW5kIGNvbnNpZGVyaW5nIGNhcGFiaWxpdGllcywgQUNMcywgYW5kIHRoZSB1c2VyJiMzOTtzIGVmZmVjdGl2ZSBjcmVkZW50aWFscy4KKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGVycm9yIGNvbmRpdGlvbnM/IEludmFsaWQgaGFuZGxlPyBQZXJtaXNzaW9ucyBkZW5pZWQ/IFJlc291cmNlIGV4aGF1c3Rpb24/IEkgd2FudCB0byBrbm93IHRoZSByYW5nZSBvZiBlcnJvcnMgaGFuZGxlZCBhbmQgaG93IGdyYWNlZnVsbHkgdGhleSYjMzk7cmUgcmVwb3J0ZWQgYmFjayB0byB0aGUgdXNlci4KKiAgICoqRmlsZSBkZXNjcmlwdG9yIGFsbG9jYXRpb246KiogSSBhc3N1bWUgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBhIG5ldyBmaWxlIGRlc2NyaXB0b3IgKEZEKSBhbmQgc2V0dGluZyB1cCB0aGUgbGluayB0byB0aGUga2VybmVsIGZpbGUgc3RydWN0dXJlLCBhbmQgcmV0dXJuaW5nIHRoaXMgRkQgdG8gdGhlIHVzZXJzcGFjZSBjYWxsZXIuIEFueSBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkIHdoZW4gYWxsb2NhdGluZyBhbiBGRD8KCkVzc2VudGlhbGx5LCBJJiMzOTttIHBpY3R1cmluZyBgZG9faGFuZGxlX29wZW5gIGFzIHRoZSBjcnVjaWFsIGtlcm5lbCBsYXllciB0aGF0IHByb3ZpZGVzICpzZWN1cml0eSogYW5kICpjb3JyZWN0bmVzcyouIEkgc2hvdWxkIGludmVzdGlnYXRlIGl0IGZvciBwb3NzaWJsZSBhdHRhY2sgdmVjdG9ycywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBjb25jdXJyZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9faGFuZGxlX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9maGFuZGxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmhhbmRsZS5jPTQxOT1zdGF0aWMgc3RydWN0IGZpbGUgKmZpbGVfb3Blbl9oYW5kbGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBvcGVuX2ZsYWcpXG4tLVxuZnMvZmhhbmRsZS5jLTQyOS1cbmZzL2ZoYW5kbGUuYzo0MzA6c3RhdGljIGxvbmcgZG9faGFuZGxlX29wZW4oaW50IG1vdW50ZGlyZmQsIHN0cnVjdCBmaWxlX2hhbmRsZSBfX3VzZXIgKnVmaCxcbmZzL2ZoYW5kbGUuYy00MzEtXHRcdFx0ICAgaW50IG9wZW5fZmxhZylcbi0tXG5mcy9maGFuZGxlLmM9NDU0PVNZU0NBTExfREVGSU5FMyhvcGVuX2J5X2hhbmRsZV9hdCwgaW50LCBtb3VudGRpcmZkLFxuLS1cbmZzL2ZoYW5kbGUuYy00NjItXG5mcy9maGFuZGxlLmM6NDYzOlx0cmV0ID0gZG9faGFuZGxlX29wZW4obW91bnRkaXJmZCwgaGFuZGxlLCBmbGFncyk7XG5mcy9maGFuZGxlLmMtNDY0LVx0cmV0dXJuIHJldDtcbi0tXG5mcy9maGFuZGxlLmM9NDcyPUNPTVBBVF9TWVNDQUxMX0RFRklORTMob3Blbl9ieV9oYW5kbGVfYXQsIGludCwgbW91bnRkaXJmZCxcbi0tXG5mcy9maGFuZGxlLmMtNDc0LXtcbmZzL2ZoYW5kbGUuYzo0NzU6XHRyZXR1cm4gZG9faGFuZGxlX29wZW4obW91bnRkaXJmZCwgaGFuZGxlLCBmbGFncyk7XG5mcy9maGFuZGxlLmMtNDc2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipGaXhpbmcgYSBQb3RlbnRpYWwgS2VybmVsIFZ1bG5lcmFiaWxpdHkqKgoKQWxyaWdodCwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgcG90ZW50aWFsbHkgbmFzdHksIHZ1bG5lcmFiaWxpdHkg4oCTIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIHNpdHVhdGlvbiBpbiBgY2FwYWJsZV93cnRfbW91bnRgIHdoZXJlIGBtbnRfbnNgICpjb3VsZCogYmUgTlVMTC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW8gZm9yIGEgY3Jhc2gsIGFuZCBzb21ldGhpbmcgd2UgYWJzb2x1dGVseSB3YW50IHRvIGF2b2lkLiBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHByb2dyYW0gdXNlcyB0aGUgYG9wZW5fYnlfaGFuZGxlX2F0YCBzeXNjYWxsLgoKUmlnaHQsIHNvIHRvIGJlIGNsZWFyLCBgb3Blbl9ieV9oYW5kbGVfYXRgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gY2FuIGNhbGwgaW50byBgY2FwYWJsZV93cnRfbW91bnRgLCBhbmQgdGhhdCBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBpcy4KCkkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSBob3cgYG9wZW5fYnlfaGFuZGxlX2F0YCBpcyBjb25maWd1cmVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gSSBiZXQgaXQgaXMgZW5hYmxlZCB0aHJvdWdoIGVpdGhlciBgQ09ORklHX0ZIQU5ETEVgIG9yIGBDT05GSUdfRVhQT1JURlNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGSEFORExFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNzM0PWNvbmZpZyBTR0VUTUFTS19TWVNDQUxMXG4tLVxuaW5pdC9LY29uZmlnLTE3NDMtXG5pbml0L0tjb25maWc6MTc0NDpjb25maWcgRkhBTkRMRVxuaW5pdC9LY29uZmlnLTE3NDUtXHRib29sIFwmIzM0O29wZW4gYnkgZmhhbmRsZSBzeXNjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIE1vdW50IENhcGFiaWxpdHkqKgoKT2theSwgc28gYEZIQU5ETEVgIGlzIHRoZSBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gTmVlZCB0byBrZWVwIHRoYXQgdG9wIG9mIG1pbmQuIFJpZ2h0IG5vdywgbXkgZm9jdXMgaXMgb24gdGhhdCBgY2FwYWJsZV93cnRfbW91bnRgIHNldHRpbmcuIEl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBJIHdhbnQgdG8gcmUtZXZhbHVhdGUgaXQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb2luZyB3aGF0IHdlIGV4cGVjdC4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZmhhbmRsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODg6XHRzdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KVxuIDI4OTpcdHtcbiAyOTA6XHRcdHN0cnVjdCBtbnRfbmFtZXNwYWNlICptbnRfbnM7XG4gMjkxOlx0XG4gMjkyOlx0XHQvKlxuIDI5MzpcdFx0ICogRm9yIC1cdTAwM2VtbnRfbnMgYWNjZXNzLlxuIDI5NDpcdFx0ICogVGhlIGZvbGxvd2luZyBSRUFEX09OQ0UoKSBpcyBzZW1hbnRpY2FsbHkgcmN1X2RlcmVmZXJlbmNlKCkuXG4gMjk1Olx0XHQgKi9cbiAyOTY6XHRcdGd1YXJkKHJjdSkoKTtcbiAyOTc6XHRcdG1udF9ucyA9IFJFQURfT05DRShtb3VudC1cdTAwM2VtbnRfbnMpO1xuIDI5ODpcdFx0aWYgKCFtbnRfbnMpXG4gMjk5Olx0XHRcdHJldHVybiBmYWxzZTtcbiAzMDA6XHRcbiAzMDE6XHRcdHJldHVybiBuc19jYXBhYmxlKG1udF9ucy1cdTAwM2V1c2VyX25zLCBDQVBfU1lTX0FETUlOKTtcbiAzMDI6XHR9XG4gMzAzOlx0XG4gMzA0Olx0c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXG4gMzA1Olx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgb19mbGFncylcbiAzMDY6XHR7XG4gMzA3Olx0XHRzdHJ1Y3QgcGF0aCAqcm9vdCA9IFx1MDAyNmN0eC1cdTAwM2Vyb290O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDY4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBGb2N1cyBhbmQgU2NvcGUqKgoKT2theSwgc28gdGhlIHBhdGNoIGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgZ29vZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIGBjYXBhYmxlX3dydF9tb3VudGAsIGBtYXlfZGVjb2RlX2ZoYCwgYGRvX2hhbmRsZV90b19wYXRoYCwgYGhhbmRsZV90b19wYXRoYCwgYGRvX2hhbmRsZV9vcGVuYCwgb3IgYHN5c19vcGVuX2J5X2hhbmRsZV9hdGAuIEdpdmVuIHRoYXQgYGNhcGFibGVfd3J0X21vdW50YCBpcyBzdGF0aWMsIEkgY2FuIHByb2JhYmx5IHJ1bGUgdGhhdCBvdXQgZm9yIGJyb2FkZXIgaW1wYWN0IGFuZCBmb2N1cyBvbiBgaGFuZGxlX3RvX3BhdGhgLCBgZG9faGFuZGxlX29wZW5gLCBvciBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YC4gU2luY2UgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBmaWxlIGhhbmRsZXMgYW5kIG9wZW4gb3BlcmF0aW9ucywgSSYjMzk7bGwgc3RhcnQgd2l0aCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBhbmQgYGhhbmRsZV90b19wYXRoYC4KCkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgbGlrZWx5IGNlbnRlcmVkIGFyb3VuZCBgRkhBTkRMRWAsIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGF0LgoKRmluYWxseSwgSSYjMzk7bGwgdmVyaWZ5IHRoZSBjb21waWxhdGlvbiBvZiBgZnMvZmhhbmRsZS5jYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgYnVpbGQgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaGFuZGxlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT00Nz1vYmotJChDT05GSUdfU1lTQ1RMKVx0XHQmIzQzOz0gZHJvcF9jYWNoZXMubyBzeXNjdGxzLm9cbmZzL01ha2VmaWxlLTQ4LVxuZnMvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX0ZIQU5ETEUpXHRcdCYjNDM7PSBmaGFuZGxlLm9cbmZzL01ha2VmaWxlLTUwLW9iai15XHRcdFx0XHQmIzQzOz0gaW9tYXAvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgQ09ORklHX0ZIQU5ETEVgIGFuZCBNb3VudCBDYXBhYmlsaXRpZXMqKgoKQWxyaWdodCwgeWVwLCB0aGF0JiMzOTtzIGNvcnJlY3QsIGBDT05GSUdfRkhBTkRMRWAgaXMgZGVmaW5pdGVseSBzZXQuIEdvb2QsIGNvbmZpcm1pbmcgdGhhdCBiYXNlbGluZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGZpbGUgaGFuZGxlIHNlY3VyaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGluIGNvbnRleHQgb2Ygd2hvIGNhbiB3cml0ZSB0byBtb3VudHMuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYGNhcGFibGVfd3J0X21vdW50YC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjYWxsIHBvaW50cyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGFjY2VzcyBjb250cm9sIG1vZGVsLiBBcmUgd2UgY2hlY2tpbmcgcGVybWlzc2lvbnMgYWRlcXVhdGVseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGhlcmUgcmVsYXRlZCB0byBmaWxlIGhhbmRsZSB1c2FnZSBhbmQgbW91bnQgb3BlcmF0aW9ucywgZXNwZWNpYWxseSBnaXZlbiB0aGUgYENPTkZJR19GSEFORExFYCBzZXR0aW5nPyBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhcGFibGVfd3J0X21vdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmhhbmRsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZoYW5kbGUuYz0yNjU9c3RhdGljIGludCBkb19oYW5kbGVfdG9fcGF0aChzdHJ1Y3QgZmlsZV9oYW5kbGUgKmhhbmRsZSwgc3RydWN0IHBhdGggKnBhdGgsXG4tLVxuZnMvZmhhbmRsZS5jLTI4Ny1cbmZzL2ZoYW5kbGUuYzoyODg6c3RhdGljIGJvb2wgY2FwYWJsZV93cnRfbW91bnQoc3RydWN0IG1vdW50ICptb3VudClcbmZzL2ZoYW5kbGUuYy0yODkte1xuLS1cbmZzL2ZoYW5kbGUuYz0zMDQ9c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXG4tLVxuZnMvZmhhbmRsZS5jLTMzOC1cdGVsc2UgaWYgKGlzX21vdW50ZWQocm9vdC1cdTAwM2VtbnQpIFx1MDAyNlx1MDAyNlxuZnMvZmhhbmRsZS5jOjMzOTpcdFx0IGNhcGFibGVfd3J0X21vdW50KHJlYWxfbW91bnQocm9vdC1cdTAwM2VtbnQpKSBcdTAwMjZcdTAwMjZcbmZzL2ZoYW5kbGUuYy0zNDAtXHRcdCAhaGFzX2xvY2tlZF9jaGlsZHJlbihyZWFsX21vdW50KHJvb3QtXHUwMDNlbW50KSwgcm9vdC1cdTAwM2VkZW50cnkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDYzCgkJCQkJCQlvdXRwdXQ6IDEyMwoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBjYWxsIHN0YWNrIGhlcmUuIGBjYXBhYmxlX3dydF9tb3VudGAgZ2V0cyBjYWxsZWQgYnkgYG1heV9kZWNvZGVfZmhgLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgaGFuZGxlX3RvX3BhdGhgLiBUaGF0IG1ha2VzIGBoYW5kbGVfdG9fcGF0aGAgYSBwcmltZSB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIFRoZSByZWxhdGVkIGZ1bmN0aW9ucywgYGRvX2hhbmRsZV9vcGVuYCBhbmQgYHN5c19vcGVuX2J5X2hhbmRsZV9hdGAsIGFsc28gbG9vayBpbnRlcmVzdGluZyBhbmQgYXJlIGdvb2QgZm9jdXMgc3ltYm9scyBnaXZlbiB0aGUgY29ubmVjdGlvbi4KClRoZSBrZXkgcXVlc3Rpb24gaXMsICppcyB0aGlzIGZ1enphYmxlKj8gVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMsIGJlY2F1c2UgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYW5kIHRoYXQmIzM5O3MgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LiBBIHJlYWNoYWJsZSBzeXNjYWxsPyBFeGNlbGxlbnQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHRoaXMgc3VtbWFyeSBhbmQgcmVjb21tZW5kYXRpb24gcmVhZHkuCgpJJiMzOTttIHJlY29tbWVuZGluZyB0aGF0IHRoaXMgYmUgcHVyc3VlZCBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlIGBoYW5kbGVfdG9fcGF0aGAsIGBkb19oYW5kbGVfb3BlbmAsIGBzeXNfb3Blbl9ieV9oYW5kbGVfYXRgLCBgY2FwYWJsZV93cnRfbW91bnRgLCBhbmQgYG1heV9kZWNvZGVfZmhgLiBXZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgdGhlIGBGSEFORExFYCBjb25maWcuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjYXBhYmxlX3dydF9tb3VudGAgd2hlbiBgbW50X25zYCBpcyBudWxsLiBUaGlzIGNvZGUgcGF0aCBpcyBleHBvc2VkIHRocm91Z2ggdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbCwgbWFraW5nIGl0IGFuIGlkZWFsIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdG9fcGF0aCYjMzQ7LAogICAgJiMzNDtkb19oYW5kbGVfb3BlbiYjMzQ7LAogICAgJiMzNDtzeXNfb3Blbl9ieV9oYW5kbGVfYXQmIzM0OywKICAgICYjMzQ7Y2FwYWJsZV93cnRfbW91bnQmIzM0OywKICAgICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdG9fcGF0aCYjMzQ7LAogICAgJiMzNDtkb19oYW5kbGVfb3BlbiYjMzQ7LAogICAgJiMzNDtzeXNfb3Blbl9ieV9oYW5kbGVfYXQmIzM0OywKICAgICYjMzQ7Y2FwYWJsZV93cnRfbW91bnQmIzM0OywKICAgICYjMzQ7bWF5X2RlY29kZV9maCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDo0Mzo1Mi42OTkyMTIyMTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNjU5MDM3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkhBTkRMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRsZV90b19wYXRoXCIsXG4gICAgXCJkb19oYW5kbGVfb3BlblwiLFxuICAgIFwic3lzX29wZW5fYnlfaGFuZGxlX2F0XCIsXG4gICAgXCJjYXBhYmxlX3dydF9tb3VudFwiLFxuICAgIFwibWF5X2RlY29kZV9maFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgY2FwYWJsZV93cnRfbW91bnRgIHdoZW4gYG1udF9uc2AgaXMgTlVMTC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDM6NTIuNjk5MjE3NzQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY3Nzc5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiM2FiN2FmY2M1NDE0ZDA3NWRmZTUyOWU0YmM1N2IyOGNhYjBlOTZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMDQ6NDM6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZmhhbmRsZS5jIGIvZnMvZmhhbmRsZS5jXFxuaW5kZXggMWNhN2ViM2E2Y2I1MTYuLmQ5ZGU3MjEwYTQxMTNiIDEwMDY0NFxcbi0tLSBhL2ZzL2ZoYW5kbGUuY1xcbisrKyBiL2ZzL2ZoYW5kbGUuY1xcbkBAIC0yOTUsNiArMjk1LDkgQEAgc3RhdGljIGJvb2wgY2FwYWJsZV93cnRfbW91bnQoc3RydWN0IG1vdW50ICptb3VudClcXG4gXFx0ICovXFxuIFxcdGd1YXJkKHJjdSkoKTtcXG4gXFx0bW50X25zID0gUkVBRF9PTkNFKG1vdW50LVxcdTAwM2VtbnRfbnMpO1xcbitcXHRpZiAoIW1udF9ucylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0cmV0dXJuIG5zX2NhcGFibGUobW50X25zLVxcdTAwM2V1c2VyX25zLCBDQVBfU1lTX0FETUlOKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDM6NTMuMzg3MTI2MTM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ0Nzc5NjU5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkhBTkRMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRsZV90b19wYXRoXCIsXG4gICAgXCJkb19oYW5kbGVfb3BlblwiLFxuICAgIFwic3lzX29wZW5fYnlfaGFuZGxlX2F0XCIsXG4gICAgXCJjYXBhYmxlX3dydF9tb3VudFwiLFxuICAgIFwibWF5X2RlY29kZV9maFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgY2FwYWJsZV93cnRfbW91bnRgIHdoZW4gYG1udF9uc2AgaXMgTlVMTC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2FiN2FmY2M1NDE0ZDA3NWRmZTUyOWU0YmM1N2IyOGNhYjBlOTZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwNDo0Mzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ZoYW5kbGUuYyBiL2ZzL2ZoYW5kbGUuY1xuaW5kZXggMWNhN2ViM2E2Y2I1MTYuLmQ5ZGU3MjEwYTQxMTNiIDEwMDY0NFxuLS0tIGEvZnMvZmhhbmRsZS5jXG4rKysgYi9mcy9maGFuZGxlLmNcbkBAIC0yOTUsNiArMjk1LDkgQEAgc3RhdGljIGJvb2wgY2FwYWJsZV93cnRfbW91bnQoc3RydWN0IG1vdW50ICptb3VudClcbiBcdCAqL1xuIFx0Z3VhcmQocmN1KSgpO1xuIFx0bW50X25zID0gUkVBRF9PTkNFKG1vdW50LVx1MDAzZW1udF9ucyk7XG4rXHRpZiAoIW1udF9ucylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0cmV0dXJuIG5zX2NhcGFibGUobW50X25zLVx1MDAzZXVzZXJfbnMsIENBUF9TWVNfQURNSU4pO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQzOjUzLjM4NzEyODcwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTIzMzA3NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkV4YW1pbmluZyBhIEZpbGUgU3lzdGVtIEhhbmRsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9maGFuZGxlLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBgY2FwYWJsZV93cnRfbW91bnQoKWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgYSBuZXcgY2hlY2sgaGFzIGJlZW4gaW50cm9kdWNlZDogYGlmICghbW50X25zKSByZXR1cm4gZmFsc2U7YC4gUmlnaHQgYXdheSwgdGhpcyBqdW1wcyBvdXQgYXQgbWUgYXMgYSBwb3RlbnRpYWwgYWNjZXNzIGNvbnRyb2wgbW9kaWZpY2F0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBuYW1lc3BhY2UgaGFuZGxpbmcgZHVyaW5nIG1vdW50IG9wZXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IHdpdGhpbiBgZnMvZmhhbmRsZS5jYCB0byBmdWxseSBncmFzcCB0aGlzIGNoYW5nZS4gSSdtIGFzc3VtaW5nIHRoYXQgYG1udF9uc2AgaXMgbGlrZWx5IHJlZmVycmluZyB0byB0aGUgbW91bnQgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmlsZSBoYW5kbGUsIGJ1dCBJIHdpbGwgbmVlZCB0byBjb25maXJtIHRoaXMuIFRoZSBgcmV0dXJuIGZhbHNlO2Agc3VnZ2VzdHMgdGhhdCBpZiB0aGVyZSdzIG5vIG1vdW50IG5hbWVzcGFjZSBwcmVzZW50LCB3cml0aW5nIGEgbW91bnQgaXNuJ3QgcGVybWl0dGVkLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhcm91bmQgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDQ6MDQuNTEwNDM5Mjk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODg0ODQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYXBhYmxlX3dydF9tb3VudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9maGFuZGxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmhhbmRsZS5jPTI2NT1zdGF0aWMgaW50IGRvX2hhbmRsZV90b19wYXRoKHN0cnVjdCBmaWxlX2hhbmRsZSAqaGFuZGxlLCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4tLVxcbmZzL2ZoYW5kbGUuYy0yODctXFxuZnMvZmhhbmRsZS5jOjI4ODpzdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KVxcbmZzL2ZoYW5kbGUuYy0yODkte1xcbi0tXFxuZnMvZmhhbmRsZS5jPTMwND1zdGF0aWMgaW5saW5lIGludCBtYXlfZGVjb2RlX2ZoKHN0cnVjdCBoYW5kbGVfdG9fcGF0aF9jdHggKmN0eCxcXG4tLVxcbmZzL2ZoYW5kbGUuYy0zMzgtXFx0ZWxzZSBpZiAoaXNfbW91bnRlZChyb290LVxcdTAwM2VtbnQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZmhhbmRsZS5jOjMzOTpcXHRcXHQgY2FwYWJsZV93cnRfbW91bnQocmVhbF9tb3VudChyb290LVxcdTAwM2VtbnQpKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2ZoYW5kbGUuYy0zNDAtXFx0XFx0ICFoYXNfbG9ja2VkX2NoaWxkcmVuKHJlYWxfbW91bnQocm9vdC1cXHUwMDNlbW50KSwgcm9vdC1cXHUwMDNlZGVudHJ5KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDQ6MDQuODI5MjkzMzMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY2NTA4NjA2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsaWtlbHkgY29udHJvbCBmbG93LCBhcyBJIHNlZSBpdDpcblxuKipUcmFjaW5nIHRoZSBQYXRoIG9mIEhhbmRsZSBEZWNvZGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG91ciBmaWxlIGhhbmRsZSBkZWNvZGluZyB3b3Jrcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmdW5jdGlvbiwgYGNhcGFibGVfd3J0X21vdW50YCwgZ2V0cyBpbnZva2VkIGZyb20gd2l0aGluIGBtYXlfZGVjb2RlX2ZoYC4gVGhpcyBgbWF5X2RlY29kZV9maGAgZnVuY3Rpb24sIGluIHR1cm4sIGlzIGEgZGVwZW5kZW5jeSBvZiBgZG9faGFuZGxlX3RvX3BhdGhgLiBOb3csIGBkb19oYW5kbGVfdG9fcGF0aGAgc2VlbXMgY3JpdGljYWwg4oCTIGl0J3MgdGhlIGJyaWRnZSBmcm9tIGEgZmlsZSBoYW5kbGUgdG8gYSBwYXRoIHJlcHJlc2VudGF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzOiBJJ20gcHJldHR5IHN1cmUgYGRvX2hhbmRsZV90b19wYXRoYCBpcyBjYWxsZWQgZnJvbSB0d28gc3lzdGVtIGNhbGxzLCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBhbmQgYHN5c19uYW1lX3RvX2hhbmRsZV9hdGAuIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgbGVhZCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGNhbGwgZ3JhcGggYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIGVudHJ5IHBvaW50cy4gVGltZSB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ0OjMxLjQ4MDE1NjE0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTcwMzk0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF5X2RlY29kZV9maFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9maGFuZGxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZmhhbmRsZS5jPTI4OD1zdGF0aWMgYm9vbCBjYXBhYmxlX3dydF9tb3VudChzdHJ1Y3QgbW91bnQgKm1vdW50KVxcbi0tXFxuZnMvZmhhbmRsZS5jLTMwMy1cXG5mcy9maGFuZGxlLmM6MzA0OnN0YXRpYyBpbmxpbmUgaW50IG1heV9kZWNvZGVfZmgoc3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCAqY3R4LFxcbmZzL2ZoYW5kbGUuYy0zMDUtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9fZmxhZ3MpXFxuLS1cXG5mcy9maGFuZGxlLmM9MzUzPXN0YXRpYyBpbnQgaGFuZGxlX3RvX3BhdGgoaW50IG1vdW50ZGlyZmQsIHN0cnVjdCBmaWxlX2hhbmRsZSBfX3VzZXIgKnVmaCxcXG4tLVxcbmZzL2ZoYW5kbGUuYy0zODAtXFx0ZWxzZVxcbmZzL2ZoYW5kbGUuYzozODE6XFx0XFx0cmV0dmFsID0gbWF5X2RlY29kZV9maChcXHUwMDI2Y3R4LCBvX2ZsYWdzKTtcXG5mcy9maGFuZGxlLmMtMzgyLVxcdGlmIChyZXR2YWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ0OjMyLjA5NzIwMTgwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTIzMzA5NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgRmlsZSBIYW5kbGVzIGFuZCBQYXRoIENvbnZlcnNpb246IEEgQ29uY2lzZSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyBgaGFuZGxlX3RvX3BhdGhgIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgcmVzcG9uc2libGUgZm9yLCBlc3NlbnRpYWxseSwgdHJhbnNsYXRpbmcgYSBmaWxlIGhhbmRsZSBpbnRvIGl0cyBjb3JyZXNwb25kaW5nIHBhdGguIEFuZCB0aGUgaW1tZWRpYXRlIGltcGxpY2F0aW9uIHRoZXJlLCB0aGUgY3J1Y2lhbCB0aGluZyBJJ20gcGlja2luZyB1cCBvbiwgaXMgdGhlIGNhbGwgdG8gYG1heV9kZWNvZGVfZmhgLiBJdCdzIG5vdCBqdXN0IGEgZGlyZWN0IG1hcHBpbmcuIFRoZSBmYWN0IHRoYXQgYG1heV9kZWNvZGVfZmhgIGlzIGludm9sdmVkIHRlbGxzIG1lIHRoZXJlJ3MgcG90ZW50aWFsbHkgc29tZSBjb21wbGV4aXR5IGludm9sdmVkIGJleW9uZCBhIHNpbXBsZSBsb29rdXAgb3IgZGlyZWN0IGNvbnZlcnNpb24uXG5cbkknbSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIHBvc3NpYmxlIHNjZW5hcmlvcyB0aGlzIGludHJvZHVjZXMuIElzIHRoaXMgZm9yIGRlYWxpbmcgd2l0aCBlbmNvZGVkIGZpbGVuYW1lcywgcGVyaGFwcyB0aG9zZSBzdG9yZWQgd2l0aCBjaGFyYWN0ZXIgZW5jb2RpbmdzIGJleW9uZCB0aGUgc3lzdGVtJ3MgZGVmYXVsdD8gT3IgaXMgaXQgbW9yZSBpbnZvbHZlZCwgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBzeW1ib2xpYyBsaW5rcyBvciBvdGhlciBmaWxlIHN5c3RlbSBudWFuY2VzIHRoYXQgcmVxdWlyZSBzb21lIHNvcnQgb2YgZGVjb2Rpbmcgb3IgcmVzb2x1dGlvbiBzdGVwIGJlZm9yZSBhIGRlZmluaXRpdmUgcGF0aCBjYW4gYmUgcmV0dXJuZWQ/IFRoZSBuZWVkIGZvciBcIm1heV9kZWNvZGVcIiBzdWdnZXN0cyB0aGUgY29udmVyc2lvbiBpc24ndCBhbHdheXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIG5vdCBhIHRyaXZpYWwgb3BlcmF0aW9uLCBhbmQgdGhlcmUncyBhIHJlYXNvbiBmb3IgdGhhdC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBtYXlfZGVjb2RlX2ZoYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIHRoZSBzeXN0ZW0vT1MgdGhpcyBpcyBydW5uaW5nIG9uIHdvdWxkIGJlIGNydWNpYWwgaGVyZSB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBsaWtlbHkgZXhpc3RzIHRvIGhhbmRsZSBlZGdlIGNhc2VzIGFuZCBjb21wYXRpYmlsaXR5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ0OjQ3LjIyMDUxMzg5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDkzODYzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3RvX3BhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmhhbmRsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZoYW5kbGUuYz0xOTk9c3RhdGljIGludCB2ZnNfZGVudHJ5X2FjY2VwdGFibGUodm9pZCAqY29udGV4dCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2ZoYW5kbGUuYy0yMDAte1xcbmZzL2ZoYW5kbGUuYzoyMDE6XFx0c3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCAqY3R4ID0gY29udGV4dDtcXG5mcy9maGFuZGxlLmMtMjAyLVxcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyA9IGN1cnJlbnRfdXNlcl9ucygpO1xcbi0tXFxuZnMvZmhhbmRsZS5jLTI2NC1cXG5mcy9maGFuZGxlLmM6MjY1OnN0YXRpYyBpbnQgZG9faGFuZGxlX3RvX3BhdGgoc3RydWN0IGZpbGVfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBwYXRoICpwYXRoLFxcbmZzL2ZoYW5kbGUuYzoyNjY6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgpXFxuZnMvZmhhbmRsZS5jLTI2Ny17XFxuLS1cXG5mcy9maGFuZGxlLmM9Mjg4PXN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXFxuLS1cXG5mcy9maGFuZGxlLmMtMzAzLVxcbmZzL2ZoYW5kbGUuYzozMDQ6c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXFxuZnMvZmhhbmRsZS5jLTMwNS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb19mbGFncylcXG4tLVxcbmZzL2ZoYW5kbGUuYy0zNTItXFxuZnMvZmhhbmRsZS5jOjM1MzpzdGF0aWMgaW50IGhhbmRsZV90b19wYXRoKGludCBtb3VudGRpcmZkLCBzdHJ1Y3QgZmlsZV9oYW5kbGUgX191c2VyICp1ZmgsXFxuZnMvZmhhbmRsZS5jLTM1NC1cXHRcXHQgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgdW5zaWduZWQgaW50IG9fZmxhZ3MpXFxuLS1cXG5mcy9maGFuZGxlLmMtMzU4LVxcdHN0cnVjdCBmaWxlX2hhbmRsZSAqaGFuZGxlIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbmZzL2ZoYW5kbGUuYzozNTk6XFx0c3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCBjdHggPSB7fTtcXG5mcy9maGFuZGxlLmMtMzYwLVxcdGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyAqZW9wcztcXG4tLVxcbmZzL2ZoYW5kbGUuYy00MTEtXFx0aGFuZGxlLVxcdTAwM2VoYW5kbGVfdHlwZSBcXHUwMDI2PSB+RklMRUlEX1VTRVJfRkxBR1NfTUFTSztcXG5mcy9maGFuZGxlLmM6NDEyOlxcdHJldHZhbCA9IGRvX2hhbmRsZV90b19wYXRoKGhhbmRsZSwgcGF0aCwgXFx1MDAyNmN0eCk7XFxuZnMvZmhhbmRsZS5jLTQxMy1cXG4tLVxcbmZzL2ZoYW5kbGUuYz00MzA9c3RhdGljIGxvbmcgZG9faGFuZGxlX29wZW4oaW50IG1vdW50ZGlyZmQsIHN0cnVjdCBmaWxlX2hhbmRsZSBfX3VzZXIgKnVmaCxcXG4tLVxcbmZzL2ZoYW5kbGUuYy00MzUtXFxuZnMvZmhhbmRsZS5jOjQzNjpcXHRyZXR2YWwgPSBoYW5kbGVfdG9fcGF0aChtb3VudGRpcmZkLCB1ZmgsIFxcdTAwMjZwYXRoLCBvcGVuX2ZsYWcpO1xcbmZzL2ZoYW5kbGUuYy00MzctXFx0aWYgKHJldHZhbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDQ6NDcuNTI5OTA1NzkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5Mjk3Mzc5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEZpbGUgSGFuZGxlIEludGVybmFscyoqXG5cblJpZ2h0LCBzbyBgZG9faGFuZGxlX29wZW5gIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIEknbSByZW1pbmRlZCBpdCdzIHRyaWdnZXJlZCB0aHJvdWdoIGBzeXNfb3Blbl9ieV9oYW5kbGVfYXRgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHNldHVwLiBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBpcyB0aGUgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdXNlcnNwYWNlIHRvIG9idGFpbiBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYSBmaWxlLCBnaXZlbiBhIGZpbGUgaGFuZGxlICh3aGljaCBpcyBhbiBvcGFxdWUgaWRlbnRpZmllciByZXByZXNlbnRpbmcgYW4gb3BlbiBpbm9kZSwgdXN1YWxseSkuIFxuXG5TbywgYGRvX2hhbmRsZV9vcGVuYCBpcyB0aGUga2VybmVsLXNwYWNlIHdvcmtob3JzZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIGRpcnR5IHdvcmsuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHdlIG1hcCB0aGUgcHJvdmlkZWQgZmlsZSBoYW5kbGUsIHByb2JhYmx5IHJldHJpZXZlZCBmcm9tIGEgcHJpb3IgYG5hbWVpYCBjYWxsIG9yIHNpbWlsYXIsIGludG8gYSB1c2FibGUga2VybmVsIGZpbGUgc3RydWN0LiBcblxuSSdtIGluc3RhbnRseSBjb25zaWRlcmluZyB0aGluZ3MgbGlrZTpcblxuKiAgICoqSGFuZGxlIHZhbGlkYXRpb246KiogV2hhdCBraW5kIG9mIGNoZWNrcyBhcmUgcGVyZm9ybWVkIG9uIHRoYXQgZmlsZSBoYW5kbGUgKndpdGhpbiogYGRvX2hhbmRsZV9vcGVuYD8gSXMgaXQganVzdCBhIHNpbXBsZSBpbmRleCBpbnRvIGEgdGFibGUsIG9yIGlzIHRoZXJlIHNvbWUgbW9yZSBzb3BoaXN0aWNhdGVkIGludGVncml0eSBjaGVjayB0byBwcmV2ZW50IGhhbmRsZSBzcG9vZmluZy9tYW5pcHVsYXRpb24/XG4qICAgKipQZXJtaXNzaW9uczoqKiBPYnZpb3VzbHksIGl0J3MgZXNzZW50aWFsIHRoYXQgYGRvX2hhbmRsZV9vcGVuYCBjaGVja3MgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyB0aGF0IHRoZSBjYWxsZXIgaGFzIHRvIHRoZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGhhbmRsZS4gVGhhdCBjb3VsZCByZXF1aXJlIGxvb2tpbmcgdXAgdGhlIGlub2RlLCBjaGVja2luZyB0aGUgZmlsZSBtb2RlLCBhbmQgY29uc2lkZXJpbmcgY2FwYWJpbGl0aWVzLCBBQ0xzLCBhbmQgdGhlIHVzZXIncyBlZmZlY3RpdmUgY3JlZGVudGlhbHMuXG4qICAgKipFcnJvciBoYW5kbGluZzoqKiBXaGF0IGFyZSB0aGUgcG9zc2libGUgZXJyb3IgY29uZGl0aW9ucz8gSW52YWxpZCBoYW5kbGU/IFBlcm1pc3Npb25zIGRlbmllZD8gUmVzb3VyY2UgZXhoYXVzdGlvbj8gSSB3YW50IHRvIGtub3cgdGhlIHJhbmdlIG9mIGVycm9ycyBoYW5kbGVkIGFuZCBob3cgZ3JhY2VmdWxseSB0aGV5J3JlIHJlcG9ydGVkIGJhY2sgdG8gdGhlIHVzZXIuXG4qICAgKipGaWxlIGRlc2NyaXB0b3IgYWxsb2NhdGlvbjoqKiBJIGFzc3VtZSB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGEgbmV3IGZpbGUgZGVzY3JpcHRvciAoRkQpIGFuZCBzZXR0aW5nIHVwIHRoZSBsaW5rIHRvIHRoZSBrZXJuZWwgZmlsZSBzdHJ1Y3R1cmUsIGFuZCByZXR1cm5pbmcgdGhpcyBGRCB0byB0aGUgdXNlcnNwYWNlIGNhbGxlci4gQW55IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQgd2hlbiBhbGxvY2F0aW5nIGFuIEZEP1xuXG5Fc3NlbnRpYWxseSwgSSdtIHBpY3R1cmluZyBgZG9faGFuZGxlX29wZW5gIGFzIHRoZSBjcnVjaWFsIGtlcm5lbCBsYXllciB0aGF0IHByb3ZpZGVzICpzZWN1cml0eSogYW5kICpjb3JyZWN0bmVzcyouIEkgc2hvdWxkIGludmVzdGlnYXRlIGl0IGZvciBwb3NzaWJsZSBhdHRhY2sgdmVjdG9ycywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBjb25jdXJyZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ1OjAxLjQ1OTY0NTkxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NzQyNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2hhbmRsZV9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZoYW5kbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maGFuZGxlLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZmlsZV9vcGVuX2hhbmRsZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG9wZW5fZmxhZylcXG4tLVxcbmZzL2ZoYW5kbGUuYy00MjktXFxuZnMvZmhhbmRsZS5jOjQzMDpzdGF0aWMgbG9uZyBkb19oYW5kbGVfb3BlbihpbnQgbW91bnRkaXJmZCwgc3RydWN0IGZpbGVfaGFuZGxlIF9fdXNlciAqdWZoLFxcbmZzL2ZoYW5kbGUuYy00MzEtXFx0XFx0XFx0ICAgaW50IG9wZW5fZmxhZylcXG4tLVxcbmZzL2ZoYW5kbGUuYz00NTQ9U1lTQ0FMTF9ERUZJTkUzKG9wZW5fYnlfaGFuZGxlX2F0LCBpbnQsIG1vdW50ZGlyZmQsXFxuLS1cXG5mcy9maGFuZGxlLmMtNDYyLVxcbmZzL2ZoYW5kbGUuYzo0NjM6XFx0cmV0ID0gZG9faGFuZGxlX29wZW4obW91bnRkaXJmZCwgaGFuZGxlLCBmbGFncyk7XFxuZnMvZmhhbmRsZS5jLTQ2NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZnMvZmhhbmRsZS5jPTQ3Mj1DT01QQVRfU1lTQ0FMTF9ERUZJTkUzKG9wZW5fYnlfaGFuZGxlX2F0LCBpbnQsIG1vdW50ZGlyZmQsXFxuLS1cXG5mcy9maGFuZGxlLmMtNDc0LXtcXG5mcy9maGFuZGxlLmM6NDc1OlxcdHJldHVybiBkb19oYW5kbGVfb3Blbihtb3VudGRpcmZkLCBoYW5kbGUsIGZsYWdzKTtcXG5mcy9maGFuZGxlLmMtNDc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDU6MDEuODk2Mzk4Nzk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0Mzc3NDQxMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRml4aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBWdWxuZXJhYmlsaXR5KipcblxuQWxyaWdodCwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgcG90ZW50aWFsbHkgbmFzdHksIHZ1bG5lcmFiaWxpdHkg4oCTIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UndmUgZ290IGEgc2l0dWF0aW9uIGluIGBjYXBhYmxlX3dydF9tb3VudGAgd2hlcmUgYG1udF9uc2AgKmNvdWxkKiBiZSBOVUxMLiBUaGF0J3MgYSBjbGFzc2ljIHNjZW5hcmlvIGZvciBhIGNyYXNoLCBhbmQgc29tZXRoaW5nIHdlIGFic29sdXRlbHkgd2FudCB0byBhdm9pZC4gVGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwcm9ncmFtIHVzZXMgdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbC5cblxuUmlnaHQsIHNvIHRvIGJlIGNsZWFyLCBgb3Blbl9ieV9oYW5kbGVfYXRgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gY2FuIGNhbGwgaW50byBgY2FwYWJsZV93cnRfbW91bnRgLCBhbmQgdGhhdCBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBpcy5cblxuSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIGhvdyBgb3Blbl9ieV9oYW5kbGVfYXRgIGlzIGNvbmZpZ3VyZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBJIGJldCBpdCBpcyBlbmFibGVkIHRocm91Z2ggZWl0aGVyIGBDT05GSUdfRkhBTkRMRWAgb3IgYENPTkZJR19FWFBPUlRGU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDo0NToyNi4yNzM4NDM2NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzA1MDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGSEFORExFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTczND1jb25maWcgU0dFVE1BU0tfU1lTQ0FMTFxcbi0tXFxuaW5pdC9LY29uZmlnLTE3NDMtXFxuaW5pdC9LY29uZmlnOjE3NDQ6Y29uZmlnIEZIQU5ETEVcXG5pbml0L0tjb25maWctMTc0NS1cXHRib29sIFxcXCJvcGVuIGJ5IGZoYW5kbGUgc3lzY2FsbHNcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDo0NToyNi42MjA5MDA3OTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYxOTk0NzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgTW91bnQgQ2FwYWJpbGl0eSoqXG5cbk9rYXksIHNvIGBGSEFORExFYCBpcyB0aGUgY29uZmlndXJhdGlvbiB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gTmVlZCB0byBrZWVwIHRoYXQgdG9wIG9mIG1pbmQuIFJpZ2h0IG5vdywgbXkgZm9jdXMgaXMgb24gdGhhdCBgY2FwYWJsZV93cnRfbW91bnRgIHNldHRpbmcuIEl0J3MgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgd2FudCB0byByZS1ldmFsdWF0ZSBpdCBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBMZXQncyBtYWtlIHN1cmUgaXQncyBkb2luZyB3aGF0IHdlIGV4cGVjdC4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ1OjI5LjI0MDg1MDg5NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9maGFuZGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg4OlxcdHN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXFxuIDI4OTpcXHR7XFxuIDI5MDpcXHRcXHRzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbW50X25zO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHQvKlxcbiAyOTM6XFx0XFx0ICogRm9yIC1cXHUwMDNlbW50X25zIGFjY2Vzcy5cXG4gMjk0OlxcdFxcdCAqIFRoZSBmb2xsb3dpbmcgUkVBRF9PTkNFKCkgaXMgc2VtYW50aWNhbGx5IHJjdV9kZXJlZmVyZW5jZSgpLlxcbiAyOTU6XFx0XFx0ICovXFxuIDI5NjpcXHRcXHRndWFyZChyY3UpKCk7XFxuIDI5NzpcXHRcXHRtbnRfbnMgPSBSRUFEX09OQ0UobW91bnQtXFx1MDAzZW1udF9ucyk7XFxuIDI5ODpcXHRcXHRpZiAoIW1udF9ucylcXG4gMjk5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0cmV0dXJuIG5zX2NhcGFibGUobW50X25zLVxcdTAwM2V1c2VyX25zLCBDQVBfU1lTX0FETUlOKTtcXG4gMzAyOlxcdH1cXG4gMzAzOlxcdFxcbiAzMDQ6XFx0c3RhdGljIGlubGluZSBpbnQgbWF5X2RlY29kZV9maChzdHJ1Y3QgaGFuZGxlX3RvX3BhdGhfY3R4ICpjdHgsXFxuIDMwNTpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb19mbGFncylcXG4gMzA2OlxcdHtcXG4gMzA3OlxcdFxcdHN0cnVjdCBwYXRoICpyb290ID0gXFx1MDAyNmN0eC1cXHUwMDNlcm9vdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDU6MjkuMjQwOTQ5OTA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzEzMjk5MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBGb2N1cyBhbmQgU2NvcGUqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBnb29kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiBgY2FwYWJsZV93cnRfbW91bnRgLCBgbWF5X2RlY29kZV9maGAsIGBkb19oYW5kbGVfdG9fcGF0aGAsIGBoYW5kbGVfdG9fcGF0aGAsIGBkb19oYW5kbGVfb3BlbmAsIG9yIGBzeXNfb3Blbl9ieV9oYW5kbGVfYXRgLiBHaXZlbiB0aGF0IGBjYXBhYmxlX3dydF9tb3VudGAgaXMgc3RhdGljLCBJIGNhbiBwcm9iYWJseSBydWxlIHRoYXQgb3V0IGZvciBicm9hZGVyIGltcGFjdCBhbmQgZm9jdXMgb24gYGhhbmRsZV90b19wYXRoYCwgYGRvX2hhbmRsZV9vcGVuYCwgb3IgYHN5c19vcGVuX2J5X2hhbmRsZV9hdGAuIFNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgZmlsZSBoYW5kbGVzIGFuZCBvcGVuIG9wZXJhdGlvbnMsIEknbGwgc3RhcnQgd2l0aCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCBhbmQgYGhhbmRsZV90b19wYXRoYC5cblxuQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJdCdzIGxpa2VseSBjZW50ZXJlZCBhcm91bmQgYEZIQU5ETEVgLCBJJ2xsIGRvdWJsZSBjaGVjayB0aGF0LlxuXG5GaW5hbGx5LCBJJ2xsIHZlcmlmeSB0aGUgY29tcGlsYXRpb24gb2YgYGZzL2ZoYW5kbGUuY2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvYnZpb3VzIGJ1aWxkIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ1OjQyLjU1NDI1MTYxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyOTQ5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZoYW5kbGUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT00Nz1vYmotJChDT05GSUdfU1lTQ1RMKVxcdFxcdCs9IGRyb3BfY2FjaGVzLm8gc3lzY3Rscy5vXFxuZnMvTWFrZWZpbGUtNDgtXFxuZnMvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX0ZIQU5ETEUpXFx0XFx0Kz0gZmhhbmRsZS5vXFxuZnMvTWFrZWZpbGUtNTAtb2JqLXlcXHRcXHRcXHRcXHQrPSBpb21hcC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDU6NDMuMTU3MjA3NzA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjIxMDc3MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfRkhBTkRMRWAgYW5kIE1vdW50IENhcGFiaWxpdGllcyoqXG5cbkFscmlnaHQsIHllcCwgdGhhdCdzIGNvcnJlY3QsIGBDT05GSUdfRkhBTkRMRWAgaXMgZGVmaW5pdGVseSBzZXQuIEdvb2QsIGNvbmZpcm1pbmcgdGhhdCBiYXNlbGluZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIGZpbGUgaGFuZGxlIHNlY3VyaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGluIGNvbnRleHQgb2Ygd2hvIGNhbiB3cml0ZSB0byBtb3VudHMuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgY2FsbGVycyBvZiBgY2FwYWJsZV93cnRfbW91bnRgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNhbGwgcG9pbnRzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgYWNjZXNzIGNvbnRyb2wgbW9kZWwuIEFyZSB3ZSBjaGVja2luZyBwZXJtaXNzaW9ucyBhZGVxdWF0ZWx5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaGVyZSByZWxhdGVkIHRvIGZpbGUgaGFuZGxlIHVzYWdlIGFuZCBtb3VudCBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBgQ09ORklHX0ZIQU5ETEVgIHNldHRpbmc/IFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA0OjQ1OjU3LjM3ODI4NzMzNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNjAwOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNhcGFibGVfd3J0X21vdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2ZoYW5kbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maGFuZGxlLmM9MjY1PXN0YXRpYyBpbnQgZG9faGFuZGxlX3RvX3BhdGgoc3RydWN0IGZpbGVfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBwYXRoICpwYXRoLFxcbi0tXFxuZnMvZmhhbmRsZS5jLTI4Ny1cXG5mcy9maGFuZGxlLmM6Mjg4OnN0YXRpYyBib29sIGNhcGFibGVfd3J0X21vdW50KHN0cnVjdCBtb3VudCAqbW91bnQpXFxuZnMvZmhhbmRsZS5jLTI4OS17XFxuLS1cXG5mcy9maGFuZGxlLmM9MzA0PXN0YXRpYyBpbmxpbmUgaW50IG1heV9kZWNvZGVfZmgoc3RydWN0IGhhbmRsZV90b19wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZnMvZmhhbmRsZS5jLTMzOC1cXHRlbHNlIGlmIChpc19tb3VudGVkKHJvb3QtXFx1MDAzZW1udCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9maGFuZGxlLmM6MzM5OlxcdFxcdCBjYXBhYmxlX3dydF9tb3VudChyZWFsX21vdW50KHJvb3QtXFx1MDAzZW1udCkpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZmhhbmRsZS5jLTM0MC1cXHRcXHQgIWhhc19sb2NrZWRfY2hpbGRyZW4ocmVhbF9tb3VudChyb290LVxcdTAwM2VtbnQpLCByb290LVxcdTAwM2VkZW50cnkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwNDo0NTo1Ny42NjE4OTUxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTc3OTQ2NTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIGNhbGwgc3RhY2sgaGVyZS4gYGNhcGFibGVfd3J0X21vdW50YCBnZXRzIGNhbGxlZCBieSBgbWF5X2RlY29kZV9maGAsIGFuZCB0aGF0IGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBoYW5kbGVfdG9fcGF0aGAuIFRoYXQgbWFrZXMgYGhhbmRsZV90b19wYXRoYCBhIHByaW1lIHRhcmdldCBmb3IgaW52ZXN0aWdhdGlvbi4gVGhlIHJlbGF0ZWQgZnVuY3Rpb25zLCBgZG9faGFuZGxlX29wZW5gIGFuZCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCwgYWxzbyBsb29rIGludGVyZXN0aW5nIGFuZCBhcmUgZ29vZCBmb2N1cyBzeW1ib2xzIGdpdmVuIHRoZSBjb25uZWN0aW9uLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCAqaXMgdGhpcyBmdXp6YWJsZSo/IFRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUgeWVzLCBiZWNhdXNlIGl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCB0aGF0J3MgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LiBBIHJlYWNoYWJsZSBzeXNjYWxsPyBFeGNlbGxlbnQuXG5cbkFscmlnaHQsIGxldCdzIGdldCB0aGlzIHN1bW1hcnkgYW5kIHJlY29tbWVuZGF0aW9uIHJlYWR5LlxuXG5JJ20gcmVjb21tZW5kaW5nIHRoYXQgdGhpcyBiZSBwdXJzdWVkIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgSSdtIGZvY3VzaW5nIG9uIGFyZSBgaGFuZGxlX3RvX3BhdGhgLCBgZG9faGFuZGxlX29wZW5gLCBgc3lzX29wZW5fYnlfaGFuZGxlX2F0YCwgYGNhcGFibGVfd3J0X21vdW50YCwgYW5kIGBtYXlfZGVjb2RlX2ZoYC4gV2UnbGwgbmVlZCB0byBlbmFibGUgdGhlIGBGSEFORExFYCBjb25maWcuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjYXBhYmxlX3dydF9tb3VudGAgd2hlbiBgbW50X25zYCBpcyBudWxsLiBUaGlzIGNvZGUgcGF0aCBpcyBleHBvc2VkIHRocm91Z2ggdGhlIGBvcGVuX2J5X2hhbmRsZV9hdGAgc3lzY2FsbCwgbWFraW5nIGl0IGFuIGlkZWFsIGNhbmRpZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ2MywiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDQ6NDY6MTcuNDQxMzYyNzY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzNzIyOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSEFORExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3RvX3BhdGhcIixcbiAgICBcImRvX2hhbmRsZV9vcGVuXCIsXG4gICAgXCJzeXNfb3Blbl9ieV9oYW5kbGVfYXRcIixcbiAgICBcImNhcGFibGVfd3J0X21vdW50XCIsXG4gICAgXCJtYXlfZGVjb2RlX2ZoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjYXBhYmxlX3dydF9tb3VudGAgd2hlbiBgbW50X25zYCBpcyBOVUxMLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG9wZW5fYnlfaGFuZGxlX2F0YCBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZIQU5ETEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kbGVfdG9fcGF0aFwiLFxuICAgIFwiZG9faGFuZGxlX29wZW5cIixcbiAgICBcInN5c19vcGVuX2J5X2hhbmRsZV9hdFwiLFxuICAgIFwiY2FwYWJsZV93cnRfbW91bnRcIixcbiAgICBcIm1heV9kZWNvZGVfZmhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGNhcGFibGVfd3J0X21vdW50YCB3aGVuIGBtbnRfbnNgIGlzIE5VTEwuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgb3Blbl9ieV9oYW5kbGVfYXRgIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwhk6v[1] Phase: Succeeded StartedAt: 2026-07-09 04:46:28 +0000 UTC FinishedAt: 2026-07-09 04:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-09 04:46:28 +0000 UTC FinishedAt: 2026-07-09 04:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2] Phase: Succeeded StartedAt: 2026-07-09 04:46:28 +0000 UTC FinishedAt: 2026-07-09 09:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-09 04:46:30 +0000 UTC FinishedAt: 2026-07-09 09:01:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-09 04:46:30 +0000 UTC FinishedAt: 2026-07-09 04:47:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-09 04:46:30 +0000 UTC FinishedAt: 2026-07-09 04:46:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowwhk6v/series-workflowwhk6v-convert-artifact-1941851046/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-09 04:47:08 +0000 UTC FinishedAt: 2026-07-09 05:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-09 04:47:08 +0000 UTC FinishedAt: 2026-07-09 05:14:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6a4e5a19-8e21-4113-b925-dac4d6a28a2f,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-workflowwhk6v/series-workflowwhk6v-convert-artifact-1941851046/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": "71972802-0e17-4364-ba86-c24e547df170", "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-workflowwhk6v/series-workflowwhk6v-build-action-2776919100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-09 04:47:08 +0000 UTC FinishedAt: 2026-07-09 05:14:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6a4e5a19-8e21-4113-b925-dac4d6a28a2f,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-workflowwhk6v/series-workflowwhk6v-convert-artifact-1941851046/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": "71972802-0e17-4364-ba86-c24e547df170", "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-workflowwhk6v/series-workflowwhk6v-build-action-2776919100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-09 05:14:35 +0000 UTC FinishedAt: 2026-07-09 05:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-09 05:14:35 +0000 UTC FinishedAt: 2026-07-09 05:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-09 05:14:35 +0000 UTC FinishedAt: 2026-07-09 05:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-09 05:14:35 +0000 UTC FinishedAt: 2026-07-09 05:14:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowwhk6v/series-workflowwhk6v-convert-artifact-3811630585/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-09 05:14:58 +0000 UTC FinishedAt: 2026-07-09 05:17:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-09 05:14:58 +0000 UTC FinishedAt: 2026-07-09 05:17:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*71972802-0e17-4364-ba86-c24e547df170,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-workflowwhk6v/series-workflowwhk6v-build-action-2776919100/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-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-09 05:17:16 +0000 UTC FinishedAt: 2026-07-09 05:17:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-09 05:17:16 +0000 UTC FinishedAt: 2026-07-09 05:17:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-09 05:17:16 +0000 UTC FinishedAt: 2026-07-09 05:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-09 05:17:16 +0000 UTC FinishedAt: 2026-07-09 05:56:18 +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:*6a4e5a19-8e21-4113-b925-dac4d6a28a2f,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-workflowwhk6v/series-workflowwhk6v-convert-artifact-3811630585/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": "53bf21f0-a9df-4aab-8b08-831da7f06872", "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-workflowwhk6v/series-workflowwhk6v-build-action-2794233813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-09 05:17:16 +0000 UTC FinishedAt: 2026-07-09 05:54:40 +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:*6a4e5a19-8e21-4113-b925-dac4d6a28a2f,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-workflowwhk6v/series-workflowwhk6v-convert-artifact-3811630585/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": "53bf21f0-a9df-4aab-8b08-831da7f06872", "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-workflowwhk6v/series-workflowwhk6v-build-action-2794233813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-09 05:56:18 +0000 UTC FinishedAt: 2026-07-09 05:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-09 05:56:18 +0000 UTC FinishedAt: 2026-07-09 05:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-09 05:56:18 +0000 UTC FinishedAt: 2026-07-09 05:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-09 05:56:18 +0000 UTC FinishedAt: 2026-07-09 05:58:07 +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:*53bf21f0-a9df-4aab-8b08-831da7f06872,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-workflowwhk6v/series-workflowwhk6v-build-action-2794233813/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-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-09 05:58:17 +0000 UTC FinishedAt: 2026-07-09 09:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-09 05:58:17 +0000 UTC FinishedAt: 2026-07-09 09:01:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"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:*71972802-0e17-4364-ba86-c24e547df170,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53bf21f0-a9df-4aab-8b08-831da7f06872,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-workflowwhk6v/series-workflowwhk6v-build-action-2776919100/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-workflowwhk6v/series-workflowwhk6v-build-action-2794233813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-09 05:58:17 +0000 UTC FinishedAt: 2026-07-09 05:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-09 05:58:17 +0000 UTC FinishedAt: 2026-07-09 05:58:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"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-workflowwhk6v/series-workflowwhk6v-convert-artifact-4094812014/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-09 05:58:17 +0000 UTC FinishedAt: 2026-07-09 05:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-09 05:58:17 +0000 UTC FinishedAt: 2026-07-09 05:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-09 05:58:17 +0000 UTC FinishedAt: 2026-07-09 05:58:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-09 05:58:27 +0000 UTC FinishedAt: 2026-07-09 09:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwhk6v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["handle_to_path","do_handle_open","sys_open_by_handle_at","capable_wrt_mount","may_decode_fh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"025d0d6221d9b060bce251427c671cd0080d9dae","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE"],"series_id":"6e4a09cd-e3e0-4923-9637-200147512cc3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-09 05:58:27 +0000 UTC FinishedAt: 2026-07-09 09:01:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*71972802-0e17-4364-ba86-c24e547df170,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53bf21f0-a9df-4aab-8b08-831da7f06872,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-workflowwhk6v/series-workflowwhk6v-build-action-2776919100/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-workflowwhk6v/series-workflowwhk6v-build-action-2794233813/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-workflowwhk6v/series-workflowwhk6v-convert-artifact-4094812014/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,}